user: Converte this assembly snippet into its equivalent C code:

```asm
<rmatmult_3_at>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x158,%rsp
  mov    %rdi,%rcx
  mov    %rsi,%r10
  mov    %rdx,0x80(%rsp)
  mov    0x8(%rdi),%rax
  mov    (%rax),%edi
  mov    %edi,0x134(%rsp)
  mov    0x18(%rcx),%rax
  mov    (%rax),%eax
  mov    %eax,0x12c(%rsp)
  mov    0x28(%rcx),%rax
  mov    (%rax),%ebx
  mov    %ebx,0x130(%rsp)
  mov    0x30(%rcx),%rax
  mov    (%rax),%edi
  mov    %edi,%r9d
  mov    %edi,0xf4(%rsp)
  mov    0x38(%rcx),%rax
  mov    (%rax),%edx
  mov    0x40(%rcx),%rax
  mov    (%rax),%rsi
  mov    %rsi,-0x18(%rsp)
  mov    0x48(%rcx),%rax
  mov    (%rax),%rbp
  mov    0x50(%rcx),%rax
  mov    (%rax),%r14
  mov    0x58(%rcx),%rax
  mov    (%rax),%r11
  mov    0x60(%rcx),%rax
  mov    (%rax),%rbx
  mov    0x68(%rcx),%rax
  mov    (%rax),%r12
  mov    0x70(%rcx),%rax
  mov    (%rax),%r13
  mov    0x78(%rcx),%rax
  mov    (%rax),%r15
  mov    0x80(%rcx),%rax
  mov    (%rax),%rsi
  mov    %rsi,-0x10(%rsp)
  mov    0x88(%rcx),%rax
  mov    (%rax),%rsi
  mov    %rsi,-0x8(%rsp)
  mov    0x90(%rcx),%rax
  mov    (%rax),%rsi
  mov    %rsi,(%rsp)
  mov    0x98(%rcx),%rax
  mov    (%rax),%rsi
  mov    %rsi,0x8(%rsp)
  mov    0xa0(%rcx),%rax
  mov    (%rax),%rsi
  mov    %rsi,0x10(%rsp)
  mov    0xa8(%rcx),%rax
  mov    (%rax),%rsi
  mov    %rsi,0x18(%rsp)
  mov    0xb0(%rcx),%rax
  mov    (%rax),%rsi
  mov    %rsi,0x20(%rsp)
  mov    0xb8(%rcx),%rax
  mov    (%rax),%rsi
  mov    %rsi,0x28(%rsp)
  mov    0xc0(%rcx),%rax
  mov    (%rax),%rsi
  mov    %rsi,0x30(%rsp)
  mov    0xc8(%rcx),%rax
  mov    (%rax),%rsi
  mov    %rsi,0x38(%rsp)
  mov    0xd0(%rcx),%rax
  mov    (%rax),%rsi
  mov    %rsi,0x40(%rsp)
  mov    0xd8(%rcx),%rax
  mov    (%rax),%rsi
  mov    %rsi,0x48(%rsp)
  mov    0xe0(%rcx),%rax
  mov    (%rax),%rsi
  mov    %rsi,0x50(%rsp)
  mov    0xe8(%rcx),%rax
  mov    (%rax),%rsi
  mov    %rsi,0x58(%rsp)
  mov    0xf0(%rcx),%rax
  mov    (%rax),%rsi
  mov    %rsi,0x60(%rsp)
  mov    0xf8(%rcx),%rax
  mov    (%rax),%rsi
  mov    %rsi,0x68(%rsp)
  mov    0x100(%rcx),%rax
  mov    (%rax),%rsi
  mov    %rsi,0x70(%rsp)
  mov    0x108(%rcx),%rax
  mov    (%rax),%rsi
  mov    %rsi,0x78(%rsp)
  mov    0x110(%rcx),%rax
  mov    (%rax),%rsi
  mov    %rsi,0xf8(%rsp)
  mov    %edx,0x120(%rsp)
  lea    0x0(,%rdx,8),%eax
  movslq %eax,%rcx
  mov    %rcx,0x90(%rsp)
  lea    0x0(,%rdi,8),%eax
  movslq %eax,%rsi
  mov    %rsi,0x98(%rsp)
  mov    %rcx,%rdi
  add    %rsi,%rcx
  mov    %rcx,0xa0(%rsp)
  mov    $0xfffffffffffffff8,%rax
  mov    %rax,%r8
  sub    %rcx,%r8
  mov    %r8,0x108(%rsp)
  mov    $0x8,%edx
  mov    %rdx,%r8
  sub    %rcx,%r8
  mov    %r8,0x100(%rsp)
  mov    %rax,%r8
  sub    %rdi,%r8
  mov    %r8,0xc0(%rsp)
  mov    %rdx,%r8
  mov    %rdi,%rcx
  sub    %rdi,%r8
  mov    %r8,0xc8(%rsp)
  mov    %rsi,%r8
  sub    %rdi,%r8
  mov    %r8,0xd0(%rsp)
  mov    %rax,%r8
  sub    %rsi,%r8
  mov    %r8,0xd8(%rsp)
  mov    %rdx,%r8
  sub    %rsi,%r8
  mov    %r8,0xe0(%rsp)
  sub    %rsi,%rcx
  mov    %rcx,0xe8(%rsp)
  mov    0x134(%rsp),%edi
  cmp    $0x2,%edi
  jle    L85
  mov    0x120(%rsp),%edx
  imul   $0x47,%edx,%esi
  mov    %esi,0x140(%rsp)
  add    %edx,%edx
  mov    %edx,0x144(%rsp)
  mov    %r9d,%eax
  shl    $0x4,%eax
  mov    %eax,%esi
  sub    %r9d,%esi
  mov    %esi,0x148(%rsp)
  lea    (%r9,%r9,1),%edx
  mov    %edx,0x13c(%rsp)
  movq   $0x2,0xa8(%rsp)
  sub    $0x1,%edi
  mov    %edi,0x14c(%rsp)
  mov    0x130(%rsp),%ecx
  lea    -0x1(%rcx),%edi
  mov    %edi,0x150(%rsp)
  mov    0x12c(%rsp),%eax
  sub    $0x1,%eax
  mov    %eax,0x154(%rsp)
  jmp    L52
L28:
  mov    -0x18(%rsp),%rbp
  movsd  0x0(%rbp,%rax,1),%xmm0
  mov    -0x70(%rsp),%rbp
  mulsd  0x0(%rbp,%r9,8),%xmm0
  mov    -0x20(%rsp),%rbp
  movsd  0x0(%rbp,%rax,1),%xmm1
  mov    -0x68(%rsp),%rbp
  mulsd  0x0(%rbp,%r9,8),%xmm1
  addsd  %xmm1,%xmm0
  movsd  (%r14,%rax,1),%xmm1
  mov    -0x60(%rsp),%rbp
  mulsd  0x0(%rbp,%r9,8),%xmm1
  addsd  %xmm1,%xmm0
  movsd  (%r11,%rax,1),%xmm1
  mov    -0x58(%rsp),%rbp
  mulsd  0x0(%rbp,%r9,8),%xmm1
  addsd  %xmm1,%xmm0
  movsd  (%rbx,%rax,1),%xmm1
  mov    -0x50(%rsp),%rbp
  mulsd  0x0(%rbp,%r9,8),%xmm1
  addsd  %xmm1,%xmm0
  movsd  (%r12,%rax,1),%xmm1
  mov    -0x48(%rsp),%rbp
  mulsd  0x0(%rbp,%r9,8),%xmm1
  addsd  %xmm1,%xmm0
  movsd  0x0(%r13,%rax,1),%xmm1
  mulsd  -0x10(%r8),%xmm1
  addsd  %xmm1,%xmm0
  movsd  (%r15,%rax,1),%xmm1
  mulsd  -0x8(%r8),%xmm1
  addsd  %xmm1,%xmm0
  mov    -0x10(%rsp),%rbp
  movsd  0x0(%rbp,%rax,1),%xmm1
  mulsd  (%r8),%xmm1
  addsd  %xmm1,%xmm0
  mov    -0x8(%rsp),%rbp
  movsd  0x0(%rbp,%rax,1),%xmm1
  mov    -0x40(%rsp),%rbp
  mulsd  0x0(%rbp,%r9,8),%xmm1
  addsd  %xmm1,%xmm0
  mov    (%rsp),%rbp
  movsd  0x0(%rbp,%rax,1),%xmm1
  mov    -0x28(%rsp),%rbp
  mulsd  0x0(%rbp,%r9,8),%xmm1
  addsd  %xmm1,%xmm0
  mov    0x8(%rsp),%rbp
  movsd  0x0(%rbp,%rax,1),%xmm1
  mov    -0x38(%rsp),%rbp
  mulsd  0x0(%rbp,%r9,8),%xmm1
  addsd  %xmm1,%xmm0
  mov    0x10(%rsp),%rbp
  movsd  0x0(%rbp,%rax,1),%xmm1
  mulsd  -0x8(%r10,%rax,1),%xmm1
  addsd  %xmm1,%xmm0
  mov    0x18(%rsp),%rbp
  movsd  0x0(%rbp,%rax,1),%xmm1
  mulsd  (%r10,%rax,1),%xmm1
  addsd  %xmm1,%xmm0
  mov    0x20(%rsp),%rbp
  movsd  0x0(%rbp,%rax,1),%xmm1
  mulsd  0x8(%r10,%rax,1),%xmm1
  addsd  %xmm1,%xmm0
  mov    0x28(%rsp),%rbp
  movsd  0x0(%rbp,%rax,1),%xmm1
  mulsd  -0x10(%rdi),%xmm1
  addsd  %xmm1,%xmm0
  mov    0x30(%rsp),%rbp
  movsd  0x0(%rbp,%rax,1),%xmm1
  mulsd  -0x8(%rdi),%xmm1
  addsd  %xmm1,%xmm0
  mov    0x38(%rsp),%rbp
  movsd  0x0(%rbp,%rax,1),%xmm1
  mulsd  (%rdi),%xmm1
  addsd  %xmm1,%xmm0
  mov    0x40(%rsp),%rbp
  movsd  0x0(%rbp,%rax,1),%xmm1
  mulsd  -0x10(%rsi),%xmm1
  addsd  %xmm1,%xmm0
  mov    0x48(%rsp),%rbp
  movsd  0x0(%rbp,%rax,1),%xmm1
  mulsd  -0x8(%rsi),%xmm1
  addsd  %xmm1,%xmm0
  mov    0x50(%rsp),%rbp
  movsd  0x0(%rbp,%rax,1),%xmm1
  mulsd  (%rsi),%xmm1
  addsd  %xmm1,%xmm0
  mov    0x58(%rsp),%rbp
  movsd  0x0(%rbp,%rax,1),%xmm1
  mulsd  -0x10(%rcx),%xmm1
  addsd  %xmm1,%xmm0
  mov    0x60(%rsp),%rbp
  movsd  0x0(%rbp,%rax,1),%xmm1
  mulsd  -0x8(%rcx),%xmm1
  addsd  %xmm1,%xmm0
  mov    0x68(%rsp),%rbp
  movsd  0x0(%rbp,%rax,1),%xmm1
  mulsd  (%rcx),%xmm1
  addsd  %xmm1,%xmm0
  mov    0x70(%rsp),%rbp
  movsd  0x0(%rbp,%rax,1),%xmm1
  mulsd  -0x10(%rdx),%xmm1
  addsd  %xmm1,%xmm0
  mov    0x78(%rsp),%rbp
  movsd  0x0(%rbp,%rax,1),%xmm1
  mulsd  -0x8(%rdx),%xmm1
  addsd  %xmm1,%xmm0
  mov    -0x30(%rsp),%rbp
  movsd  0x0(%rbp,%rax,1),%xmm1
  mulsd  (%rdx),%xmm1
  addsd  %xmm1,%xmm0
  mov    0x80(%rsp),%rbp
  movsd  %xmm0,0x0(%rbp,%rax,1)
  add    $0x1,%r9
  add    $0x8,%rax
L70:
  add    $0x8,%r8
  add    $0x8,%rdi
  add    $0x8,%rsi
  add    $0x8,%rcx
  add    $0x8,%rdx
  cmp    %r9d,-0x74(%rsp)
  jge    L28
  addl   $0x1,0x88(%rsp)
  mov    0xf4(%rsp),%ecx
  add    %ecx,0x8c(%rsp)
L139:
  mov    0xf0(%rsp),%edi
  cmp    %edi,0x88(%rsp)
  jg     L11
  movslq 0x8c(%rsp),%r9
  mov    0xb8(%rsp),%rax
  add    %r9,%rax
  shl    $0x3,%rax
  mov    0xd0(%rsp),%rsi
  lea    (%rsi,%rax,1),%r8
  add    %r10,%r8
  mov    0x98(%rsp),%rsi
  lea    (%rsi,%rax,1),%rdi
  add    %r10,%rdi
  mov    0xe8(%rsp),%rdx
  lea    (%rdx,%rax,1),%rsi
  add    %r10,%rsi
  mov    0x90(%rsp),%rdx
  lea    (%rdx,%rax,1),%rcx
  add    %r10,%rcx
  mov    0xa0(%rsp),%rbp
  lea    0x0(%rbp,%rax,1),%rdx
  add    %r10,%rdx
  add    0xb0(%rsp),%r9
  shl    $0x3,%r9
  mov    0x108(%rsp),%rbp
  add    %r9,%rbp
  add    %r10,%rbp
  mov    %rbp,-0x70(%rsp)
  mov    %r9,%rbp
  sub    0xa0(%rsp),%rbp
  add    %r10,%rbp
  mov    %rbp,-0x68(%rsp)
  mov    0x100(%rsp),%rbp
  add    %r9,%rbp
  add    %r10,%rbp
  mov    %rbp,-0x60(%rsp)
  mov    0xc0(%rsp),%rbp
  add    %r9,%rbp
  add    %r10,%rbp
  mov    %rbp,-0x58(%rsp)
  mov    %r9,%rbp
  sub    0x90(%rsp),%rbp
  add    %r10,%rbp
  mov    %rbp,-0x50(%rsp)
  mov    0xc8(%rsp),%rbp
  add    %r9,%rbp
  add    %r10,%rbp
  mov    %rbp,-0x48(%rsp)
  mov    0xd8(%rsp),%rbp
  add    %r9,%rbp
  add    %r10,%rbp
  mov    %rbp,-0x40(%rsp)
  mov    %r9,%rbp
  sub    0x98(%rsp),%rbp
  add    %r10,%rbp
  add    0xe0(%rsp),%r9
  add    %r10,%r9
  mov    %r9,-0x38(%rsp)
  mov    0xa8(%rsp),%r9
  mov    %rbp,-0x28(%rsp)
  mov    0xf8(%rsp),%rbp
  mov    %rbp,-0x30(%rsp)
  jmp    L70
L11:
  addl   $0x1,0x110(%rsp)
  mov    0x120(%rsp),%ecx
  add    %ecx,0x114(%rsp)
L138:
  mov    0x11c(%rsp),%edi
  cmp    %edi,0x110(%rsp)
  jg     L68
  mov    0x124(%rsp),%eax
  mov    %eax,0x8c(%rsp)
  mov    0x118(%rsp),%eax
  mov    %eax,0x88(%rsp)
  movslq 0x114(%rsp),%rax
  mov    %rax,0xb0(%rsp)
  add    0xa8(%rsp),%rax
  mov    %rax,0xb8(%rsp)
  jmp    L139
L68:
  mov    -0x20(%rsp),%rbp
  addl   $0xf,0x118(%rsp)
  mov    0x118(%rsp),%eax
  mov    0x148(%rsp),%edi
  add    %edi,0x124(%rsp)
  cmp    %eax,0x12c(%rsp)
  jle    L23
L88:
  mov    0x118(%rsp),%eax
  add    $0xe,%eax
  cmp    %eax,0x12c(%rsp)
  cmovle 0x154(%rsp),%eax
  mov    %eax,0xf0(%rsp)
  mov    0x138(%rsp),%eax
  mov    %eax,0x114(%rsp)
  mov    0x128(%rsp),%eax
  mov    %eax,0x110(%rsp)
  mov    %rbp,-0x20(%rsp)
  jmp    L138
L23:
  addl   $0x47,0x128(%rsp)
  mov    0x128(%rsp),%eax
  mov    0x140(%rsp),%edi
  add    %edi,0x138(%rsp)
  cmp    %eax,0x130(%rsp)
  jle    L94
L58:
  cmpl   $0x2,0x12c(%rsp)
  jle    L23
  mov    0x128(%rsp),%eax
  add    $0x46,%eax
  cmp    %eax,0x130(%rsp)
  cmovle 0x150(%rsp),%eax
  mov    %eax,0x11c(%rsp)
  mov    0x13c(%rsp),%eax
  mov    %eax,0x124(%rsp)
  movl   $0x2,0x118(%rsp)
  jmp    L88
L94:
  addq   $0x36,0xa8(%rsp)
  mov    0xa8(%rsp),%rax
  cmp    %eax,0x134(%rsp)
  jle    L85
L52:
  cmpl   $0x2,0x130(%rsp)
  jle    L94
  mov    0xa8(%rsp),%eax
  add    $0x35,%eax
  cmp    %eax,0x134(%rsp)
  cmovle 0x14c(%rsp),%eax
  mov    %eax,-0x74(%rsp)
  mov    0x144(%rsp),%eax
  mov    %eax,0x138(%rsp)
  movl   $0x2,0x128(%rsp)
  jmp    L58
L85:
  add    $0x158,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

assistant: ```c
extern void rmatmult_3_at(void **rmatmult3_args, double *x, double *b) {
  int i;
  int ii;
  int jj;
  int kk;
  int imin;
  int imax;
  int jmin;
  int jmax;
  int kmin;
  int kmax;
  int jp;
  int kp;
  const double *dbl;
  const double *dbc;
  const double *dbr;
  const double *dcl;
  const double *dcc;
  const double *dcr;
  const double *dfl;
  const double *dfc;
  const double *dfr;
  const double *cbl;
  const double *cbc;
  const double *cbr;
  const double *ccl;
  const double *ccc;
  const double *ccr;
  const double *cfl;
  const double *cfc;
  const double *cfr;
  const double *ubl;
  const double *ubc;
  const double *ubr;
  const double *ucl;
  const double *ucc;
  const double *ucr;
  const double *ufl;
  const double *ufc;
  const double *ufr;
  double *xdbl;
  double *xdbc;
  double *xdbr;
  double *xdcl;
  double *xdcc;
  double *xdcr;
  double *xdfl;
  double *xdfc;
  double *xdfr;
  double *xcbl;
  double *xcbc;
  double *xcbr;
  double *xccl;
  double *xccc;
  double *xccr;
  double *xcfl;
  double *xcfc;
  double *xcfr;
  double *xubl;
  double *xubc;
  double *xubr;
  double *xucl;
  double *xucc;
  double *xucr;
  double *xufl;
  double *xufc;
  double *xufr;
  int t2;
  int t4;
  int t6;
  int t8;
  int t10;
  int t12;
  imin = *(int *)*rmatmult3_args;
  imax = *(int *)rmatmult3_args[1];
  jmin = *(int *)rmatmult3_args[2];
  jmax = *(int *)rmatmult3_args[3];
  kmin = *(int *)rmatmult3_args[4];
  kmax = *(int *)rmatmult3_args[5];
  jp = *(int *)rmatmult3_args[6];
  kp = *(int *)rmatmult3_args[7];
  dbl = *(const double **)rmatmult3_args[8];
  dbc = *(const double **)rmatmult3_args[9];
  dbr = *(const double **)rmatmult3_args[10];
  dcl = *(const double **)rmatmult3_args[11];
  dcc = *(const double **)rmatmult3_args[12];
  dcr = *(const double **)rmatmult3_args[13];
  dfl = *(const double **)rmatmult3_args[14];
  dfc = *(const double **)rmatmult3_args[15];
  dfr = *(const double **)rmatmult3_args[16];
  cbl = *(const double **)rmatmult3_args[17];
  cbc = *(const double **)rmatmult3_args[18];
  cbr = *(const double **)rmatmult3_args[19];
  ccl = *(const double **)rmatmult3_args[20];
  ccc = *(const double **)rmatmult3_args[21];
  ccr = *(const double **)rmatmult3_args[22];
  cfl = *(const double **)rmatmult3_args[23];
  cfc = *(const double **)rmatmult3_args[24];
  cfr = *(const double **)rmatmult3_args[25];
  ubl = *(const double **)rmatmult3_args[26];
  ubc = *(const double **)rmatmult3_args[27];
  ubr = *(const double **)rmatmult3_args[28];
  ucl = *(const double **)rmatmult3_args[29];
  ucc = *(const double **)rmatmult3_args[30];
  ucr = *(const double **)rmatmult3_args[31];
  ufl = *(const double **)rmatmult3_args[32];
  ufc = *(const double **)rmatmult3_args[33];
  ufr = *(const double **)rmatmult3_args[34];
  xdbl = (double *)((char *)x - 8 * kp - 8 * jp) - 1;
  xdbc = (double *)((char *)x - 8 * kp - 8 * jp);
  xdbr = (double *)((char *)x - 8 * kp - 8 * jp) + 1;
  xdcl = (double *)((char *)x - 8 * kp) - 1;
  xdcc = (double *)((char *)x - 8 * kp);
  xdcr = (double *)((char *)x - 8 * kp) + 1;
  xdfl = (double *)((char *)x - 8 * kp + 8 * jp) - 1;
  xdfc = (double *)((char *)x - 8 * kp + 8 * jp);
  xdfr = (double *)((char *)x - 8 * kp + 8 * jp) + 1;
  xcbl = (double *)((char *)x - 8 * jp) - 1;
  xcbc = (double *)((char *)x - 8 * jp);
  xcbr = (double *)((char *)x - 8 * jp) + 1;
  xccl = x - 1;
  xccc = x;
  xccr = x + 1;
  xcfl = (double *)((char *)x + 8 * jp) - 1;
  xcfc = (double *)((char *)x + 8 * jp);
  xcfr = (double *)((char *)x + 8 * jp) + 1;
  xubl = (double *)((char *)x + 8 * kp - 8 * jp) - 1;
  xubc = (double *)((char *)x + 8 * kp - 8 * jp);
  xubr = (double *)((char *)x + 8 * kp - 8 * jp) + 1;
  xucl = (double *)((char *)x + 8 * kp) - 1;
  xucc = (double *)((char *)x + 8 * kp);
  xucr = (double *)((char *)x + 8 * kp) + 1;
  xufl = (double *)((char *)x + 8 * kp + 8 * jp) - 1;
  xufc = (double *)((char *)x + 8 * kp + 8 * jp);
  xufr = (double *)((char *)x + 8 * kp + 8 * jp) + 1;
  for (t2 = 2; t2 <= imax - 1; t2 += 54) {
    for (t4 = 2; t4 <= kmax - 1; t4 += 71) {
      for (t6 = 2; t6 <= jmax - 1; t6 += 15) {
        for (t8 = t4; t8 <= ((kmax - 1) < (t4 + 70) ? (kmax - 1) : (t4 + 70)); t8++) {
          for (t10 = t6; t10 <= ((jmax - 1) < (t6 + 14) ? (jmax - 1) : (t6 + 14)); t10++) {
            for (t12 = t2; t12 <= ((imax - 1) < (t2 + 53) ? (imax - 1) : (t2 + 53)); t12++) {
              i = t12 + t10 * jp + t8 * kp;
              b[i] = dbl[i] * xdbl[i] + dbc[i] * xdbc[i] + dbr[i] * xdbr[i] + dcl[i] * xdcl[i] + dcc[i] * xdcc[i] + dcr[i] * xdcr[i] + dfl[i] * xdfl[i] + dfc[i] * xdfc[i] + dfr[i] * xdfr[i] + cbl[i] * xcbl[i] + cbc[i] * xcbc[i] + cbr[i] * xcbr[i] + ccl[i] * xccl[i] + ccc[i] * xccc[i] + ccr[i] * xccr[i] + cfl[i] * xcfl[i] + cfc[i] * xcfc[i] + cfr[i] * xcfr[i] + ubl[i] * xubl[i] + ubc[i] * xubc[i] + ubr[i] * xubr[i] + ucl[i] * xucl[i] + ucc[i] * xucc[i] + ucr[i] * xucr[i] + ufl[i] * xufl[i] + ufc[i] * xufc[i] + ufr[i] * xufr[i];
            }
          }
        }
      }
    }
  }
  return;
}
```