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

```asm
<test_spg_get_international>:
  endbr64
  push   %rbx
  sub    $0x120,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x118(%rsp)
  xor    %eax,%eax
  movsd  D3(%rip),%xmm0
  movsd  %xmm0,0x20(%rsp)
  movq   $0x0,0x28(%rsp)
  movq   $0x0,0x30(%rsp)
  movq   $0x0,0x38(%rsp)
  movsd  %xmm0,0x40(%rsp)
  movq   $0x0,0x48(%rsp)
  movq   $0x0,0x50(%rsp)
  movq   $0x0,0x58(%rsp)
  mov    D45(%rip),%rax
  mov    %rax,0x60(%rsp)
  movq   $0x0,0x70(%rsp)
  movq   $0x0,0x78(%rsp)
  movq   $0x0,0x80(%rsp)
  movsd  D41(%rip),%xmm0
  movsd  %xmm0,0x88(%rsp)
  movsd  %xmm0,0x90(%rsp)
  movsd  %xmm0,0x98(%rsp)
  movsd  D74(%rip),%xmm1
  movsd  %xmm1,0xa0(%rsp)
  movsd  %xmm1,0xa8(%rsp)
  movq   $0x0,0xb0(%rsp)
  movsd  D10(%rip),%xmm1
  movsd  %xmm1,0xb8(%rsp)
  movsd  %xmm1,0xc0(%rsp)
  movq   $0x0,0xc8(%rsp)
  movsd  D81(%rip),%xmm1
  movsd  %xmm1,0xd0(%rsp)
  movsd  D48(%rip),%xmm2
  movsd  %xmm2,0xd8(%rsp)
  movsd  %xmm0,0xe0(%rsp)
  movsd  %xmm2,0xe8(%rsp)
  movsd  %xmm1,0xf0(%rsp)
  movsd  %xmm0,0xf8(%rsp)
  movl   $0x1,(%rsp)
  movl   $0x1,0x4(%rsp)
  movl   $0x2,0x8(%rsp)
  movl   $0x2,0xc(%rsp)
  movl   $0x2,0x10(%rsp)
  movl   $0x2,0x14(%rsp)
  mov    %rsp,%rcx
  lea    0x70(%rsp),%rdx
  lea    0x20(%rsp),%rsi
  lea    0x100(%rsp),%rdi
  mov    $0x0,%r9d
  mov    $0x6,%r8d
  call   <spg_get_international@plt>
  mov    %eax,%ebx
  lea    D19(%rip),%rdi
  call   <puts@plt>
  test   %ebx,%ebx
  jle    L9
  lea    0x100(%rsp),%rsi
  mov    %ebx,%edx
  lea    D25(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L10:
  mov    0x118(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L5
  add    $0x120,%rsp
  pop    %rbx
  ret
L9:
  lea    D98(%rip),%rdi
  call   <puts@plt>
  jmp    L10
L5:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_label: D3
type: byte[8]
name: disassemble_data
arguments: data_label: D45
type: byte[8]
name: disassemble_data
arguments: data_label: D41
type: f64
name: disassemble_data
arguments: data_label: D74
type: f64
name: disassemble_data
arguments: data_label: D10
type: f64
name: disassemble_data
arguments: data_label: D81
type: f64
name: disassemble_data
arguments: data_label: D48
type: f64
name: disassemble_data
arguments: data_label: D19
type: string
name: disassemble_data
arguments: data_label: D25
type: string
name: disassemble_data
arguments: data_label: D98
type: string

tool: {"D3": [0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x40]}

tool: {"D45": [0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x40]}

tool: D41: 0.5

tool: D74: 0.3

tool: D10: 0.7

tool: D81: 0.2

tool: D48: 0.8

tool: D19: *** Example of spg_get_international ***:

tool: D25: %s (%d)


tool: D98: Space group could not be found.

assistant: ```c
void test_spg_get_international(void) {
  double lattice[3][3] = {{4, 0, 0}, {0, 4, 0}, {0, 0, 3}};
  double position[][3] = {
      {0, 0, 0}, {0.5, 0.5, 0.5}, {0.3, 0.3, 0}, {0.7, 0.7, 0}, {0.2, 0.8, 0.5}, {0.8, 0.2, 0.5},
  };
  int types[] = {1, 1, 2, 2, 2, 2};
  int num_spg, num_atom = 6;
  char symbol[21];
  num_spg = spg_get_international(symbol, lattice, position, types, num_atom, 1e-5);
  printf("*** Example of spg_get_international ***:\n");
  if (num_spg > 0) {
    printf("%s (%d)\n", symbol, num_spg);
  } else {
    printf("Space group could not be found.\n");
  }
}
```