user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<workload>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  lea    -0x60000(%rsp),%r11
L244:
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  cmp    %r11,%rsp
  jne    L244
  sub    $0x50,%rsp
  mov    %rdi,-0x60038(%rbp)
  mov    %rsi,-0x60040(%rbp)
  mov    %rdx,-0x60048(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x6002c(%rbp)
  jmp    L167
L87:
  movl   $0x0,-0x60028(%rbp)
  jmp    L260
L12:
  movl   $0x0,-0x60020(%rbp)
  jmp    L206
L98:
  movl   $0x0,-0x6001c(%rbp)
  jmp    L210
L141:
  mov    -0x6001c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x60020(%rbp),%eax
  cltq
  shl    $0x7,%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x20010(%rbp,%rax,8)
  addl   $0x1,-0x6001c(%rbp)
L210:
  cmpl   $0x7f,-0x6001c(%rbp)
  jle    L141
  addl   $0x1,-0x60020(%rbp)
L206:
  cmpl   $0x7f,-0x60020(%rbp)
  jle    L98
  movl   $0x0,-0x60024(%rbp)
  jmp    L173
L261:
  movl   $0x0,-0x60020(%rbp)
  jmp    L133
L95:
  movl   $0x0,-0x60018(%rbp)
  jmp    L280
L234:
  mov    -0x6002c(%rbp),%edx
  mov    -0x60020(%rbp),%eax
  add    %edx,%eax
  shl    $0xa,%eax
  mov    %eax,%ecx
  mov    -0x60024(%rbp),%edx
  mov    -0x60018(%rbp),%eax
  add    %edx,%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x60038(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x60018(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x60020(%rbp),%eax
  cltq
  shl    $0x7,%rax
  add    %rdx,%rax
  movsd  %xmm0,-0x60010(%rbp,%rax,8)
  addl   $0x1,-0x60018(%rbp)
L280:
  cmpl   $0x7f,-0x60018(%rbp)
  jle    L234
  addl   $0x1,-0x60020(%rbp)
L133:
  cmpl   $0x7f,-0x60020(%rbp)
  jle    L95
  movl   $0x0,-0x60018(%rbp)
  jmp    L38
L49:
  movl   $0x0,-0x6001c(%rbp)
  jmp    L121
L55:
  mov    -0x60024(%rbp),%edx
  mov    -0x60018(%rbp),%eax
  add    %edx,%eax
  shl    $0xa,%eax
  mov    %eax,%ecx
  mov    -0x60028(%rbp),%edx
  mov    -0x6001c(%rbp),%eax
  add    %edx,%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x60040(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x6001c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x60018(%rbp),%eax
  cltq
  shl    $0x7,%rax
  add    %rdx,%rax
  movsd  %xmm0,-0x40010(%rbp,%rax,8)
  addl   $0x1,-0x6001c(%rbp)
L121:
  cmpl   $0x7f,-0x6001c(%rbp)
  jle    L55
  addl   $0x1,-0x60018(%rbp)
L38:
  cmpl   $0x7f,-0x60018(%rbp)
  jle    L49
  movl   $0x0,-0x60018(%rbp)
  jmp    L153
L242:
  movl   $0x0,-0x60020(%rbp)
  jmp    L127
L313:
  movl   $0x0,-0x6001c(%rbp)
  jmp    L52
L243:
  movl   $0x0,-0x60014(%rbp)
  jmp    L185
L290:
  mov    -0x6001c(%rbp),%edx
  mov    -0x60014(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x60020(%rbp),%eax
  cltq
  shl    $0x7,%rax
  add    %rdx,%rax
  movsd  -0x20010(%rbp,%rax,8),%xmm1
  mov    -0x60018(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x60020(%rbp),%eax
  cltq
  shl    $0x7,%rax
  add    %rdx,%rax
  movsd  -0x60010(%rbp,%rax,8),%xmm2
  mov    -0x6001c(%rbp),%edx
  mov    -0x60014(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x60018(%rbp),%eax
  cltq
  shl    $0x7,%rax
  add    %rdx,%rax
  movsd  -0x40010(%rbp,%rax,8),%xmm0
  mulsd  %xmm2,%xmm0
  mov    -0x6001c(%rbp),%edx
  mov    -0x60014(%rbp),%eax
  add    %edx,%eax
  addsd  %xmm1,%xmm0
  movslq %eax,%rdx
  mov    -0x60020(%rbp),%eax
  cltq
  shl    $0x7,%rax
  add    %rdx,%rax
  movsd  %xmm0,-0x20010(%rbp,%rax,8)
  addl   $0x1,-0x60014(%rbp)
L185:
  cmpl   $0x7f,-0x60014(%rbp)
  jle    L290
  subl   $0xffffff80,-0x6001c(%rbp)
L52:
  cmpl   $0x7f,-0x6001c(%rbp)
  jle    L243
  addl   $0x1,-0x60020(%rbp)
L127:
  cmpl   $0x7f,-0x60020(%rbp)
  jle    L313
  addl   $0x1,-0x60018(%rbp)
L153:
  cmpl   $0x7f,-0x60018(%rbp)
  jle    L242
  subl   $0xffffff80,-0x60024(%rbp)
L173:
  cmpl   $0x3ff,-0x60024(%rbp)
  jle    L261
  movl   $0x0,-0x60020(%rbp)
  jmp    L135
L80:
  movl   $0x0,-0x6001c(%rbp)
  jmp    L106
L237:
  mov    -0x6002c(%rbp),%edx
  mov    -0x60020(%rbp),%eax
  add    %edx,%eax
  shl    $0xa,%eax
  mov    %eax,%ecx
  mov    -0x60028(%rbp),%edx
  mov    -0x6001c(%rbp),%eax
  add    %edx,%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x60048(%rbp),%rax
  add    %rdx,%rax
  mov    -0x6001c(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x60020(%rbp),%edx
  movslq %edx,%rdx
  shl    $0x7,%rdx
  add    %rcx,%rdx
  movsd  -0x20010(%rbp,%rdx,8),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x6001c(%rbp)
L106:
  cmpl   $0x7f,-0x6001c(%rbp)
  jle    L237
  addl   $0x1,-0x60020(%rbp)
L135:
  cmpl   $0x7f,-0x60020(%rbp)
  jle    L80
  subl   $0xffffff80,-0x60028(%rbp)
L260:
  cmpl   $0x3ff,-0x60028(%rbp)
  jle    L12
  subl   $0xffffff80,-0x6002c(%rbp)
L167:
  cmpl   $0x3ff,-0x6002c(%rbp)
  jle    L87
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L302
  call   <__stack_chk_fail@plt>
L302:
  leave
  ret
```

assistant: ```c
void workload(double m1[1024 * 1024], double m2[1024 * 1024], double prod[1024 * 1024]) {
#pragma HLS INTERFACE m_axi port = m1 offset = slave bundle = gmem
#pragma HLS INTERFACE m_axi port = m2 offset = slave bundle = gmem
#pragma HLS INTERFACE m_axi port = prod offset = slave bundle = gmem
#pragma HLS INTERFACE s_axilite port = m1 bundle = control
#pragma HLS INTERFACE s_axilite port = m2 bundle = control
#pragma HLS INTERFACE s_axilite port = prod bundle = control
#pragma HLS INTERFACE s_axilite port = return bundle = control
  double local_m1[128][128];
  double local_m2[128][128];
#pragma HLS ARRAY_PARTITION variable = local_m2 complete dim = 2
  double local_prod[128][128];
#pragma HLS ARRAY_PARTITION variable = local_prod complete dim = 2
  double mult, sum;
  int i, j, k, ii, jj, kk;
  int uu;
  for (i = 0; i < 1024; i += 128)
    for (j = 0; j < 1024; j += 128) {
      for (ii = 0; ii < 128; ii++)
        for (jj = 0; jj < 128; jj++)
#pragma HLS PIPELINE
          local_prod[ii][jj] = 0;
      for (k = 0; k < 1024; k += 128) {
        for (ii = 0; ii < 128; ii++)
          for (kk = 0; kk < 128; kk++)
#pragma HLS PIPELINE
            local_m1[ii][kk] = m1[(i + ii) * 1024 + (k + kk)];
        for (kk = 0; kk < 128; kk++)
          for (jj = 0; jj < 128; jj++)
#pragma HLS PIPELINE
            local_m2[kk][jj] = m2[(k + kk) * 1024 + (j + jj)];
        for (kk = 0; kk < 128; kk++)
          for (ii = 0; ii < 128; ii++)
            for (jj = 0; jj < 128; jj += 128)
#pragma HLS PIPELINE II = 20
              for (uu = 0; uu < 128; uu++)
#pragma HLS UNROLL
#pragma HLS DEPENDENCE variable = "local_prod" inter false
                local_prod[ii][jj + uu] += local_m1[ii][kk] * local_m2[kk][jj + uu];
      }
      for (ii = 0; ii < 128; ii++)
        for (jj = 0; jj < 128; jj++)
#pragma HLS PIPELINE
          prod[(i + ii) * 1024 + (j + jj)] = local_prod[ii][jj];
    }
  return;
}
```