user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x348,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x338(%rsp)
  xor    %eax,%eax
  mov    %rsp,%rbx
  call   <init_platform@plt>
  lea    D113(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %eax,%eax
  call   <target_timer_initialize@plt>
  xor    %eax,%eax
  call   <target_timer_get_current@plt>
  mov    %eax,%edi
  call   <srand@plt>
  movdqa D16(%rip),%xmm0
  mov    D1(%rip),%rax
  movaps %xmm0,(%rsp)
  movdqa D102(%rip),%xmm0
  mov    %rax,0xc0(%rsp)
  xor    %eax,%eax
  movaps %xmm0,0x10(%rsp)
  movdqa D79(%rip),%xmm0
  movaps %xmm0,0x20(%rsp)
  movdqa D162(%rip),%xmm0
  movaps %xmm0,0x30(%rsp)
  movdqa D171(%rip),%xmm0
  movaps %xmm0,0x40(%rsp)
  movdqa D4(%rip),%xmm0
  movaps %xmm0,0x50(%rsp)
  movdqa D55(%rip),%xmm0
  movaps %xmm0,0x60(%rsp)
  movdqa D24(%rip),%xmm0
  movaps %xmm0,0x70(%rsp)
  movdqa D53(%rip),%xmm0
  movaps %xmm0,0x80(%rsp)
  movdqa D62(%rip),%xmm0
  movaps %xmm0,0x90(%rsp)
  movdqa D137(%rip),%xmm0
  movaps %xmm0,0xa0(%rsp)
  movdqa D27(%rip),%xmm0
  movaps %xmm0,0xb0(%rsp)
  call   <target_timer_initialize@plt>
  xor    %eax,%eax
  call   <target_timer_get_current@plt>
  mov    %rbx,%rdi
  lea    0xd0(%rsp),%rsi
  mov    %eax,%r15d
  call   <arrayadd_interrupt@plt>
  xor    %eax,%eax
  call   <target_timer_get_current@plt>
  mov    %eax,%r12d
  xor    %eax,%eax
  call   <target_timer_initialize@plt>
  xor    %eax,%eax
  call   <target_timer_get_current@plt>
  mov    %rbx,%rdi
  lea    0x1a0(%rsp),%rsi
  mov    %eax,%r14d
  call   <arrayadd@plt>
  xor    %eax,%eax
  call   <target_timer_get_current@plt>
  mov    %eax,%ebp
  xor    %eax,%eax
  call   <Xil_DCacheEnable@plt>
  xor    %eax,%eax
  call   <target_timer_initialize@plt>
  xor    %eax,%eax
  call   <target_timer_get_current@plt>
  mov    %rbx,%rdi
  lea    0x270(%rsp),%rsi
  mov    %eax,%r13d
  call   <arrayadd_soft@plt>
  xor    %eax,%eax
  call   <target_timer_get_current@plt>
  mov    %r12d,%esi
  lea    D7(%rip),%rdi
  sub    %r15d,%esi
  mov    %eax,%ebx
  xor    %eax,%eax
  call   <printf@plt>
  mov    %ebp,%esi
  lea    D14(%rip),%rdi
  xor    %eax,%eax
  sub    %r14d,%esi
  sub    %r13d,%ebx
  call   <printf@plt>
  mov    %ebx,%esi
  lea    D68(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %eax,%eax
  lea    D47(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  call   <cleanup_platform@plt>
  mov    0x338(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L8
  add    $0x348,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L8:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: label: D113
type: string
name: retrieve_data
arguments: label: D16
type: byte[16]
name: retrieve_data
arguments: label: D1
type: byte[8]
name: retrieve_data
arguments: label: D102
type: byte[16]
name: retrieve_data
arguments: label: D79
type: byte[16]
name: retrieve_data
arguments: label: D162
type: byte[16]
name: retrieve_data
arguments: label: D171
type: byte[16]
name: retrieve_data
arguments: label: D4
type: byte[16]
name: retrieve_data
arguments: label: D55
type: byte[16]
name: retrieve_data
arguments: label: D24
type: byte[16]
name: retrieve_data
arguments: label: D53
type: byte[16]
name: retrieve_data
arguments: label: D62
type: byte[16]
name: retrieve_data
arguments: label: D137
type: byte[16]
name: retrieve_data
arguments: label: D27
type: byte[16]
name: retrieve_data
arguments: label: D7
type: string
name: retrieve_data
arguments: label: D14
type: string
name: retrieve_data
arguments: label: D68
type: string
name: retrieve_data
arguments: label: D47
type: string

tool: D113: Hello! matrixmul


tool: {"D16": [0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00]}

tool: {"D1": [0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00]}

tool: {"D102": [0x04,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x07,0x00,0x00,0x00]}

tool: {"D79": [0x08,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00]}

tool: {"D162": [0x0c,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00]}

tool: {"D171": [0x10,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00]}

tool: {"D4": [0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00]}

tool: {"D55": [0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00]}

tool: {"D24": [0x1c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x1f,0x00,0x00,0x00]}

tool: {"D53": [0x20,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x23,0x00,0x00,0x00]}

tool: {"D62": [0x24,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x27,0x00,0x00,0x00]}

tool: {"D137": [0x28,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x2b,0x00,0x00,0x00]}

tool: {"D27": [0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x2f,0x00,0x00,0x00]}

tool: D7: hard interr time:%d


tool: D14: hard poling time:%d


tool: D68: soft time:%d


tool: D47: end matrixmul


assistant: ```c
int main() {
  int tmp1, tmp2, tmp3, tmp4, tmp5, tmp6;
  init_platform();
  printf("Hello! matrixmul\n\r");
  int i, j;
  target_timer_initialize();
  srand(target_timer_get_current());
  int a[50], b[50], c[50], d[50];
  for (i = 0; i < 50; i++) {
    a[i] = i;
  }
  target_timer_initialize();
  tmp1 = target_timer_get_current();
  arrayadd_interrupt(a, b);
  tmp2 = target_timer_get_current();
  target_timer_initialize();
  tmp3 = target_timer_get_current();
  arrayadd(a, c);
  tmp4 = target_timer_get_current();
  Xil_DCacheEnable();
  target_timer_initialize();
  tmp5 = target_timer_get_current();
  arrayadd_soft(a, d);
  tmp6 = target_timer_get_current();
  printf("hard interr time:%d\n", tmp2 - tmp1);
  printf("hard poling time:%d\n", tmp4 - tmp3);
  printf("soft time:%d\n", tmp6 - tmp5);
  printf("end matrixmul\n\r");
  cleanup_platform();
  return 0;
}
```