user: 下面的汇编指令对应的C源代码是什么：

```asm
<Call_C_Arg_Foreign_D>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %edi,-0x14(%rbp)
  mov    %esi,-0x18(%rbp)
  mov    %edx,-0x1c(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  cmpl   $0x0,-0x18(%rbp)
  je     L212
  cmpl   $0x7,-0x14(%rbp)
  ja     L82
  mov    -0x14(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D146(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D146(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  lea    -0x10(%rbp),%rax
  lea    D292(%rip),%rdx
  lea    D17(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  jmp    L200
  lea    -0x10(%rbp),%rax
  lea    D441(%rip),%rdx
  lea    D17(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  jmp    L200
  lea    -0x10(%rbp),%rax
  lea    D480(%rip),%rdx
  lea    D17(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  jmp    L200
  lea    -0x10(%rbp),%rax
  lea    D310(%rip),%rdx
  lea    D17(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  jmp    L200
  lea    -0x10(%rbp),%rax
  lea    D158(%rip),%rdx
  lea    D17(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  jmp    L200
  lea    -0x10(%rbp),%rax
  lea    D420(%rip),%rdx
  lea    D17(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  jmp    L200
  lea    -0x10(%rbp),%rax
  lea    D226(%rip),%rdx
  lea    D17(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  jmp    L200
  lea    -0x10(%rbp),%rax
  lea    D80(%rip),%rdx
  lea    D17(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  jmp    L200
L82:
  lea    -0x10(%rbp),%rax
  lea    D435(%rip),%rdx
  lea    D17(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  nop
L200:
  lea    -0x10(%rbp),%rax
  mov    %rax,%rdx
  lea    D224(%rip),%rax
  mov    %rax,%rsi
  lea    D413(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <Inst_Printf@plt>
  mov    -0x1c(%rbp),%eax
  lea    0x0(,%rax,8),%ecx
  lea    -0x10(%rbp),%rdx
  lea    -0x10(%rbp),%rax
  mov    %ecx,%r8d
  mov    %rdx,%rcx
  mov    %rax,%rdx
  lea    D114(%rip),%rax
  mov    %rax,%rsi
  lea    D372(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <Inst_Printf@plt>
  cmpl   $0x7,-0x14(%rbp)
  jle    L2
  mov    -0x14(%rbp),%eax
  sub    $0x8,%eax
  lea    0x0(,%rax,8),%edx
  lea    -0x10(%rbp),%rax
  mov    %edx,%ecx
  mov    %rax,%rdx
  lea    D470(%rip),%rax
  mov    %rax,%rsi
  lea    D56(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <Inst_Printf@plt>
L2:
  mov    $0x1,%eax
  jmp    L114
L212:
  cmpl   $0x7,-0x14(%rbp)
  ja     L152
  mov    -0x14(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D471(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D471(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  lea    -0x10(%rbp),%rax
  lea    D232(%rip),%rdx
  lea    D17(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  jmp    L60
  lea    -0x10(%rbp),%rax
  lea    D169(%rip),%rdx
  lea    D17(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  jmp    L60
  lea    -0x10(%rbp),%rax
  lea    D18(%rip),%rdx
  lea    D17(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  jmp    L60
  lea    -0x10(%rbp),%rax
  lea    D243(%rip),%rdx
  lea    D17(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  jmp    L60
  lea    -0x10(%rbp),%rax
  lea    D79(%rip),%rdx
  lea    D17(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  jmp    L60
  lea    -0x10(%rbp),%rax
  lea    D75(%rip),%rdx
  lea    D17(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  jmp    L60
  lea    -0x10(%rbp),%rax
  lea    D360(%rip),%rdx
  lea    D17(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  jmp    L60
  lea    -0x10(%rbp),%rax
  lea    D417(%rip),%rdx
  lea    D17(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  jmp    L60
L152:
  lea    -0x10(%rbp),%rax
  lea    D198(%rip),%rdx
  lea    D17(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  nop
L60:
  lea    D423(%rip),%rax
  mov    %rax,%rsi
  lea    D413(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <Inst_Printf@plt>
  mov    -0x1c(%rbp),%eax
  lea    0x0(,%rax,8),%edx
  lea    -0x10(%rbp),%rax
  mov    %edx,%ecx
  mov    %rax,%rdx
  lea    D427(%rip),%rax
  mov    %rax,%rsi
  lea    D50(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <Inst_Printf@plt>
  cmpl   $0x7,-0x14(%rbp)
  jle    L84
  mov    -0x14(%rbp),%eax
  sub    $0x8,%eax
  lea    0x0(,%rax,8),%edx
  lea    -0x10(%rbp),%rax
  mov    %edx,%ecx
  mov    %rax,%rdx
  lea    D470(%rip),%rax
  mov    %rax,%rsi
  lea    D499(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <Inst_Printf@plt>
L84:
  mov    $0x1,%eax
L114:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L62
  call   <__stack_chk_fail@plt>
L62:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: label: D292
type_guessed: string
name: unpack_data
arguments: label: D17
type_guessed: string
name: unpack_data
arguments: label: D441
type_guessed: string
name: unpack_data
arguments: label: D480
type_guessed: string
name: unpack_data
arguments: label: D310
type_guessed: string
name: unpack_data
arguments: label: D158
type_guessed: string
name: unpack_data
arguments: label: D420
type_guessed: string
name: unpack_data
arguments: label: D226
type_guessed: string
name: unpack_data
arguments: label: D80
type_guessed: string
name: unpack_data
arguments: label: D435
type_guessed: string
name: unpack_data
arguments: label: D224
type_guessed: string
name: unpack_data
arguments: label: D413
type_guessed: string
name: unpack_data
arguments: label: D114
type_guessed: string
name: unpack_data
arguments: label: D372
type_guessed: string
name: unpack_data
arguments: label: D470
type_guessed: string
name: unpack_data
arguments: label: D56
type_guessed: string
name: unpack_data
arguments: label: D232
type_guessed: string
name: unpack_data
arguments: label: D169
type_guessed: string
name: unpack_data
arguments: label: D18
type_guessed: string
name: unpack_data
arguments: label: D243
type_guessed: string
name: unpack_data
arguments: label: D79
type_guessed: string
name: unpack_data
arguments: label: D75
type_guessed: string
name: unpack_data
arguments: label: D360
type_guessed: string
name: unpack_data
arguments: label: D417
type_guessed: string
name: unpack_data
arguments: label: D198
type_guessed: string
name: unpack_data
arguments: label: D423
type_guessed: string
name: unpack_data
arguments: label: D427
type_guessed: string
name: unpack_data
arguments: label: D50
type_guessed: string
name: unpack_data
arguments: label: D499
type_guessed: string

tool: D292: $4

tool: D17: %s

tool: D441: $5

tool: D480: $6

tool: D310: $7

tool: D158: $8

tool: D420: $9

tool: D226: $10

tool: D80: $11

tool: D435: $24

tool: D224: %s,pl_foreign_double

tool: D413: la

tool: D114: %s,%s,%d

tool: D372: addu

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

tool: D56: sw

tool: D232: $f12

tool: D169: $f13

tool: D18: $f14

tool: D243: $f15

tool: D79: $f16

tool: D75: $f17

tool: D360: $f18

tool: D417: $f19

tool: D198: $f1

tool: D423: $25,pl_foreign_double

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

tool: D50: l.d

tool: D499: 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;
  }
}
```