user: What is the c source code of the assembly code below?

```asm
<Call_C_Arg_Foreign_D>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x10,%rsp
  mov    %edi,%ebx
  mov    %edx,%ebp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  test   %esi,%esi
  je     L222
  cmp    $0x7,%edi
  ja     L7
  mov    %edi,%ebx
  lea    D200(%rip),%rdx
  movslq (%rdx,%rbx,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  mov    %rsp,%rdi
  lea    D79(%rip),%rdx
  lea    D263(%rip),%rsi
  call   <sprintf@plt>
L1:
  mov    %rsp,%rbx
  mov    %rbx,%rdx
  lea    D383(%rip),%rsi
  lea    D523(%rip),%rdi
  mov    $0x0,%eax
  call   <Inst_Printf@plt>
  lea    0x0(,%rbp,8),%r8d
  mov    %rbx,%rcx
  mov    %rbx,%rdx
  lea    D100(%rip),%rsi
  lea    D388(%rip),%rdi
  mov    $0x0,%eax
  call   <Inst_Printf@plt>
L23:
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L14
  mov    $0x1,%eax
  add    $0x10,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  mov    %rsp,%rdi
  lea    D358(%rip),%rdx
  lea    D263(%rip),%rsi
  call   <sprintf@plt>
  jmp    L1
  mov    %rsp,%rdi
  lea    D172(%rip),%rdx
  lea    D263(%rip),%rsi
  call   <sprintf@plt>
  jmp    L1
  mov    %rsp,%rdi
  lea    D323(%rip),%rdx
  lea    D263(%rip),%rsi
  call   <sprintf@plt>
  jmp    L1
  mov    %rsp,%rdi
  lea    D309(%rip),%rdx
  lea    D263(%rip),%rsi
  call   <sprintf@plt>
  jmp    L1
  mov    %rsp,%rdi
  lea    D576(%rip),%rdx
  lea    D263(%rip),%rsi
  call   <sprintf@plt>
  jmp    L1
  mov    %rsp,%rdi
  lea    D509(%rip),%rdx
  lea    D263(%rip),%rsi
  call   <sprintf@plt>
  jmp    L1
  mov    %rsp,%rdi
  lea    D553(%rip),%rdx
  lea    D263(%rip),%rsi
  call   <sprintf@plt>
  jmp    L1
L7:
  mov    %rsp,%r12
  lea    D7(%rip),%rdx
  lea    D263(%rip),%rsi
  mov    %r12,%rdi
  call   <sprintf@plt>
  mov    %r12,%rdx
  lea    D383(%rip),%rsi
  lea    D523(%rip),%rdi
  mov    $0x0,%eax
  call   <Inst_Printf@plt>
  lea    0x0(,%rbp,8),%r8d
  mov    %r12,%rcx
  mov    %r12,%rdx
  lea    D100(%rip),%rsi
  lea    D388(%rip),%rdi
  mov    $0x0,%eax
  call   <Inst_Printf@plt>
  cmp    $0x7,%ebx
  jle    L23
  lea    -0x40(,%rbx,8),%ecx
  mov    %rsp,%rdx
  lea    D63(%rip),%rsi
  lea    D12(%rip),%rdi
  mov    $0x0,%eax
  call   <Inst_Printf@plt>
  jmp    L23
L222:
  cmp    $0x7,%edi
  ja     L57
  mov    %edi,%ebx
  lea    D426(%rip),%rdx
  movslq (%rdx,%rbx,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  mov    %rsp,%rdi
  lea    D150(%rip),%rdx
  lea    D263(%rip),%rsi
  call   <sprintf@plt>
L167:
  lea    D210(%rip),%rsi
  lea    D523(%rip),%rdi
  mov    $0x0,%eax
  call   <Inst_Printf@plt>
  lea    0x0(,%rbp,8),%ecx
  mov    %rsp,%rdx
  lea    D107(%rip),%rsi
  lea    D80(%rip),%rdi
  mov    $0x0,%eax
  call   <Inst_Printf@plt>
  jmp    L23
  mov    %rsp,%rdi
  lea    D535(%rip),%rdx
  lea    D263(%rip),%rsi
  call   <sprintf@plt>
  jmp    L167
  mov    %rsp,%rdi
  lea    D349(%rip),%rdx
  lea    D263(%rip),%rsi
  call   <sprintf@plt>
  jmp    L167
  mov    %rsp,%rdi
  lea    D35(%rip),%rdx
  lea    D263(%rip),%rsi
  call   <sprintf@plt>
  jmp    L167
  mov    %rsp,%rdi
  lea    D260(%rip),%rdx
  lea    D263(%rip),%rsi
  call   <sprintf@plt>
  jmp    L167
  mov    %rsp,%rdi
  lea    D431(%rip),%rdx
  lea    D263(%rip),%rsi
  call   <sprintf@plt>
  jmp    L167
  mov    %rsp,%rdi
  lea    D511(%rip),%rdx
  lea    D263(%rip),%rsi
  call   <sprintf@plt>
  jmp    L167
  mov    %rsp,%rdi
  lea    D154(%rip),%rdx
  lea    D263(%rip),%rsi
  call   <sprintf@plt>
  jmp    L167
L57:
  mov    %rsp,%r12
  lea    D158(%rip),%rdx
  lea    D263(%rip),%rsi
  mov    %r12,%rdi
  call   <sprintf@plt>
  lea    D210(%rip),%rsi
  lea    D523(%rip),%rdi
  mov    $0x0,%eax
  call   <Inst_Printf@plt>
  lea    0x0(,%rbp,8),%ecx
  mov    %r12,%rdx
  lea    D107(%rip),%rsi
  lea    D80(%rip),%rdi
  mov    $0x0,%eax
  call   <Inst_Printf@plt>
  cmp    $0x7,%ebx
  jle    L23
  lea    -0x40(,%rbx,8),%ecx
  mov    %rsp,%rdx
  lea    D63(%rip),%rsi
  lea    D560(%rip),%rdi
  mov    $0x0,%eax
  call   <Inst_Printf@plt>
  jmp    L23
L14:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: label: D79
type_guessed: string
name: read_data
arguments: label: D263
type_guessed: string
name: read_data
arguments: label: D383
type_guessed: string
name: read_data
arguments: label: D523
type_guessed: string
name: read_data
arguments: label: D100
type_guessed: string
name: read_data
arguments: label: D388
type_guessed: string
name: read_data
arguments: label: D358
type_guessed: string
name: read_data
arguments: label: D172
type_guessed: string
name: read_data
arguments: label: D323
type_guessed: string
name: read_data
arguments: label: D309
type_guessed: string
name: read_data
arguments: label: D576
type_guessed: string
name: read_data
arguments: label: D509
type_guessed: string
name: read_data
arguments: label: D553
type_guessed: string
name: read_data
arguments: label: D7
type_guessed: string
name: read_data
arguments: label: D63
type_guessed: string
name: read_data
arguments: label: D12
type_guessed: string
name: read_data
arguments: label: D150
type_guessed: string
name: read_data
arguments: label: D210
type_guessed: string
name: read_data
arguments: label: D107
type_guessed: string
name: read_data
arguments: label: D80
type_guessed: string
name: read_data
arguments: label: D535
type_guessed: string
name: read_data
arguments: label: D349
type_guessed: string
name: read_data
arguments: label: D35
type_guessed: string
name: read_data
arguments: label: D260
type_guessed: string
name: read_data
arguments: label: D431
type_guessed: string
name: read_data
arguments: label: D511
type_guessed: string
name: read_data
arguments: label: D154
type_guessed: string
name: read_data
arguments: label: D158
type_guessed: string
name: read_data
arguments: label: D560
type_guessed: string

tool: D79: $4

tool: D263: %s

tool: D383: %s,pl_foreign_double

tool: D523: la

tool: D100: %s,%s,%d

tool: D388: addu

tool: D358: $5

tool: D172: $6

tool: D323: $7

tool: D309: $8

tool: D576: $9

tool: D509: $10

tool: D553: $11

tool: D7: $24

tool: D63: %s,%d($sp)

tool: D12: sw

tool: D150: $f12

tool: D210: $25,pl_foreign_double

tool: D107: %s,%d($25)

tool: D80: l.d

tool: D535: $f13

tool: D349: $f14

tool: D35: $f15

tool: D260: $f16

tool: D431: $f17

tool: D511: $f18

tool: D154: $f19

tool: D158: $f1

tool: D560: s.d

assistant: ```c
int Call_C_Arg_Foreign_D(int offset, int adr_of, int index) {
  char dest[8];
  if (adr_of) {
    switch (offset) {
    case 0:
      sprintf(dest, "%s", "$4");
      break;
    case 1:
      sprintf(dest, "%s", "$5");
      break;
    case 2:
      sprintf(dest, "%s", "$6");
      break;
    case 3:
      sprintf(dest, "%s", "$7");
      break;
    case 4:
      sprintf(dest, "%s", "$8");
      break;
    case 5:
      sprintf(dest, "%s", "$9");
      break;
    case 6:
      sprintf(dest, "%s", "$10");
      break;
    case 7:
      sprintf(dest, "%s", "$11");
      break;
    default:
      sprintf(dest, "%s", "$24");
      break;
    }
    Inst_Printf("la", "%s,pl_foreign_double", dest);
    Inst_Printf("addu", "%s,%s,%d", dest, dest, index * 8);
    if (offset > 7) {
      Inst_Printf("sw", "%s,%d($sp)", dest, (offset - 8) * 8);
    }
    return 1;
  } else {
    switch (offset) {
    case 0:
      sprintf(dest, "%s", "$f12");
      break;
    case 1:
      sprintf(dest, "%s", "$f13");
      break;
    case 2:
      sprintf(dest, "%s", "$f14");
      break;
    case 3:
      sprintf(dest, "%s", "$f15");
      break;
    case 4:
      sprintf(dest, "%s", "$f16");
      break;
    case 5:
      sprintf(dest, "%s", "$f17");
      break;
    case 6:
      sprintf(dest, "%s", "$f18");
      break;
    case 7:
      sprintf(dest, "%s", "$f19");
      break;
    default:
      sprintf(dest, "%s", "$f1");
      break;
    }
    Inst_Printf("la", "$25,pl_foreign_double");
    Inst_Printf("l.d", "%s,%d($25)", dest, index * 8);
    if (offset > 7) {
      Inst_Printf("s.d", "%s,%d($sp)", dest, (offset - 8) * 8);
    }
    return 1;
  }
}
```