user: 请从给定的汇编指令推导出C源代码：

```asm
<getrmap1>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x90,%rsp
  mov    %rdi,-0x68(%rbp)
  mov    %rsi,-0x70(%rbp)
  mov    %edx,-0x74(%rbp)
  mov    %ecx,-0x78(%rbp)
  mov    %r8,-0x80(%rbp)
  mov    %r9d,-0x84(%rbp)
  movss  %xmm0,-0x88(%rbp)
  mov    0x10(%rbp),%rax
  mov    %rax,-0x90(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x74(%rbp),%eax
  imul   -0x78(%rbp),%eax
  mov    %eax,-0x24(%rbp)
  movl   $0x0,-0x50(%rbp)
  movl   $0x0,-0x38(%rbp)
  movl   $0x0,-0x44(%rbp)
  jmp    L127
L308:
  movl   $0x0,-0x40(%rbp)
  jmp    L303
L9:
  mov    -0x38(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  cwtl
  cmp    %eax,0x18(%rbp)
  jne    L98
  mov    -0x38(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x38(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x90(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  comiss %xmm1,%xmm0
  jb     L98
  mov    -0x38(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x90(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x20(%rbp)
  addl   $0x1,-0x50(%rbp)
  mov    -0x38(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movw   $0xff9c,(%rax)
  movl   $0x0,-0x30(%rbp)
  mov    -0x44(%rbp),%eax
  mov    %eax,-0x60(%rbp)
  mov    -0x40(%rbp),%eax
  mov    %eax,-0x5c(%rbp)
  mov    -0x38(%rbp),%eax
  mov    %eax,-0x58(%rbp)
L334:
  mov    -0x50(%rbp),%edx
  mov    -0x84(%rbp),%eax
  lea    (%rdx,%rax,1),%r10d
  mov    -0x20(%rbp),%edi
  mov    -0x74(%rbp),%r9d
  mov    0x18(%rbp),%ecx
  lea    -0x5c(%rbp),%rdx
  lea    -0x60(%rbp),%rsi
  mov    -0x68(%rbp),%rax
  sub    $0x8,%rsp
  lea    -0x58(%rbp),%r8
  push   %r8
  mov    -0x24(%rbp),%r8d
  push   %r8
  push   -0x90(%rbp)
  push   -0x70(%rbp)
  mov    -0x78(%rbp),%r8d
  push   %r8
  movd   %edi,%xmm0
  mov    %r10d,%r8d
  mov    %rax,%rdi
  call   <rmapgrow1@plt>
  add    $0x30,%rsp
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  add    %eax,-0x30(%rbp)
  cmpl   $0x0,-0x1c(%rbp)
  jne    L334
  jmp    L17
L105:
  movl   $0x0,-0x30(%rbp)
  mov    -0x38(%rbp),%eax
  mov    %eax,-0x34(%rbp)
  mov    -0x44(%rbp),%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x40(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x28(%rbp)
  jmp    L24
L135:
  addl   $0x1,-0x34(%rbp)
  mov    -0x34(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  cmp    $0xff9c,%ax
  jne    L344
  mov    -0x2c(%rbp),%eax
  mov    %eax,-0x60(%rbp)
  mov    -0x28(%rbp),%eax
  mov    %eax,-0x5c(%rbp)
  mov    -0x34(%rbp),%eax
  mov    %eax,-0x58(%rbp)
L74:
  mov    -0x50(%rbp),%edx
  mov    -0x84(%rbp),%eax
  lea    (%rdx,%rax,1),%r10d
  mov    -0x20(%rbp),%edi
  mov    -0x74(%rbp),%r9d
  mov    0x18(%rbp),%ecx
  lea    -0x5c(%rbp),%rdx
  lea    -0x60(%rbp),%rsi
  mov    -0x68(%rbp),%rax
  sub    $0x8,%rsp
  lea    -0x58(%rbp),%r8
  push   %r8
  mov    -0x24(%rbp),%r8d
  push   %r8
  push   -0x90(%rbp)
  push   -0x70(%rbp)
  mov    -0x78(%rbp),%r8d
  push   %r8
  movd   %edi,%xmm0
  mov    %r10d,%r8d
  mov    %rax,%rdi
  call   <rmapgrow1@plt>
  add    $0x30,%rsp
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  add    %eax,-0x30(%rbp)
  cmpl   $0x0,-0x1c(%rbp)
  jne    L74
L344:
  addl   $0x1,-0x28(%rbp)
L24:
  mov    -0x28(%rbp),%eax
  cmp    -0x78(%rbp),%eax
  jl     L135
  mov    -0x44(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x2c(%rbp)
  jmp    L141
L4:
  movl   $0x0,-0x28(%rbp)
  jmp    L52
L299:
  addl   $0x1,-0x34(%rbp)
  mov    -0x34(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  cmp    $0xff9c,%ax
  jne    L280
  mov    -0x2c(%rbp),%eax
  mov    %eax,-0x60(%rbp)
  mov    -0x28(%rbp),%eax
  mov    %eax,-0x5c(%rbp)
  mov    -0x34(%rbp),%eax
  mov    %eax,-0x58(%rbp)
L120:
  mov    -0x50(%rbp),%edx
  mov    -0x84(%rbp),%eax
  lea    (%rdx,%rax,1),%r10d
  mov    -0x20(%rbp),%edi
  mov    -0x74(%rbp),%r9d
  mov    0x18(%rbp),%ecx
  lea    -0x5c(%rbp),%rdx
  lea    -0x60(%rbp),%rsi
  mov    -0x68(%rbp),%rax
  sub    $0x8,%rsp
  lea    -0x58(%rbp),%r8
  push   %r8
  mov    -0x24(%rbp),%r8d
  push   %r8
  push   -0x90(%rbp)
  push   -0x70(%rbp)
  mov    -0x78(%rbp),%r8d
  push   %r8
  movd   %edi,%xmm0
  mov    %r10d,%r8d
  mov    %rax,%rdi
  call   <rmapgrow1@plt>
  add    $0x30,%rsp
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  add    %eax,-0x30(%rbp)
  cmpl   $0x0,-0x1c(%rbp)
  jne    L120
L280:
  addl   $0x1,-0x28(%rbp)
L52:
  mov    -0x28(%rbp),%eax
  cmp    -0x78(%rbp),%eax
  jl     L299
  addl   $0x1,-0x2c(%rbp)
L141:
  mov    -0x2c(%rbp),%eax
  cmp    -0x74(%rbp),%eax
  jl     L4
L17:
  cmpl   $0x0,-0x30(%rbp)
  jne    L105
L98:
  addl   $0x1,-0x38(%rbp)
  addl   $0x1,-0x40(%rbp)
L303:
  mov    -0x40(%rbp),%eax
  cmp    -0x78(%rbp),%eax
  jl     L9
  addl   $0x1,-0x44(%rbp)
L127:
  mov    -0x44(%rbp),%eax
  cmp    -0x74(%rbp),%eax
  jl     L308
  mov    -0x50(%rbp),%edx
  mov    -0x84(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x3c(%rbp)
  cmpl   $0x0,-0x50(%rbp)
  jle    L191
  mov    -0x3c(%rbp),%eax
  add    $0x1,%eax
  mov    $0x4,%esi
  mov    %eax,%edi
  call   <calloc@plt>
  mov    %rax,-0x18(%rbp)
  movl   $0x0,-0x48(%rbp)
  jmp    L302
L340:
  mov    -0x48(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  cwtl
  cmp    %eax,-0x84(%rbp)
  jge    L347
  mov    -0x48(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  movswq %ax,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  add    $0x1,%edx
  mov    %edx,(%rax)
L347:
  addl   $0x1,-0x48(%rbp)
L302:
  mov    -0x48(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jl     L340
  mov    -0x3c(%rbp),%eax
  add    $0x1,%eax
  mov    $0x4,%esi
  mov    %eax,%edi
  call   <calloc@plt>
  mov    %rax,-0x10(%rbp)
  movl   $0x1,-0x54(%rbp)
  jmp    L64
L198:
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rax,%rdx
  mov    -0x54(%rbp),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0x54(%rbp)
L64:
  mov    -0x54(%rbp),%eax
  cmp    -0x3c(%rbp),%eax
  jle    L198
  mov    -0x84(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x54(%rbp)
  jmp    L252
L305:
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  pxor   %xmm1,%xmm1
  cvtsi2ss %eax,%xmm1
  movss  -0x88(%rbp),%xmm0
  comiss %xmm1,%xmm0
  jbe    L194
  mov    -0x54(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x4c(%rbp)
  jmp    L41
L117:
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x10(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  cmp    %eax,%edx
  jle    L187
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  sub    $0x1,%edx
  mov    %edx,(%rax)
L187:
  addl   $0x1,-0x4c(%rbp)
L41:
  mov    -0x50(%rbp),%edx
  mov    -0x84(%rbp),%eax
  add    %edx,%eax
  cmp    %eax,-0x4c(%rbp)
  jle    L117
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rax,%rdx
  mov    0x18(%rbp),%eax
  mov    %eax,(%rdx)
  subl   $0x1,-0x3c(%rbp)
L194:
  addl   $0x1,-0x54(%rbp)
L252:
  mov    -0x50(%rbp),%edx
  mov    -0x84(%rbp),%eax
  add    %edx,%eax
  cmp    %eax,-0x54(%rbp)
  jle    L305
  movl   $0x0,-0x48(%rbp)
  jmp    L295
L225:
  mov    -0x48(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  cwtl
  cmp    %eax,-0x84(%rbp)
  jge    L269
  mov    -0x48(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  movswq %ax,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x48(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rcx
  mov    -0x68(%rbp),%rax
  add    %rcx,%rax
  mov    %dx,(%rax)
L269:
  addl   $0x1,-0x48(%rbp)
L295:
  mov    -0x48(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jl     L225
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
L191:
  mov    -0x3c(%rbp),%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L215
  call   <__stack_chk_fail@plt>
L215:
  leave
  ret
```

assistant: ```c
int getrmap1(short *rmap, float *J, int ny, int nx, float *threshJ, int TR, float RSIZE, unsigned char *rmap0, int n2bgrow) {
  int i, j, k, l, iy, ix, *count, *convert, newTR, loc, loc1, imgsize, grow, jy, jx;
  int grow1, ky, kx, kl;
  float threshJ1;
  imgsize = ny * nx;
  j = 0;
  loc = 0;
  for (iy = 0; iy < ny; iy++) {
    for (ix = 0; ix < nx; ix++) {
      if (rmap[loc] == n2bgrow && J[loc] <= threshJ[rmap0[loc]]) {
        threshJ1 = threshJ[rmap0[loc]];
        j++;
        rmap[loc] = -100;
        grow = 0;
        ky = iy;
        kx = ix;
        kl = loc;
        do {
          grow1 = rmapgrow1(rmap, &ky, &kx, n2bgrow, j + TR, ny, nx, J, threshJ1, rmap0, imgsize, &kl);
          grow += grow1;
        } while (grow1);
        while (grow) {
          grow = 0;
          loc1 = loc;
          jy = iy;
          for (jx = ix + 1; jx < nx; jx++) {
            loc1++;
            if (rmap[loc1] == -100) {
              ky = jy;
              kx = jx;
              kl = loc1;
              do {
                grow1 = rmapgrow1(rmap, &ky, &kx, n2bgrow, j + TR, ny, nx, J, threshJ1, rmap0, imgsize, &kl);
                grow += grow1;
              } while (grow1);
            }
          }
          for (jy = iy + 1; jy < ny; jy++) {
            for (jx = 0; jx < nx; jx++) {
              loc1++;
              if (rmap[loc1] == -100) {
                ky = jy;
                kx = jx;
                kl = loc1;
                do {
                  grow1 = rmapgrow1(rmap, &ky, &kx, n2bgrow, j + TR, ny, nx, J, threshJ1, rmap0, imgsize, &kl);
                  grow += grow1;
                } while (grow1);
              }
            }
          }
        }
      }
      loc++;
    }
  }
  newTR = j + TR;
  if (j > 0) {
    count = (int *)calloc(newTR + 1, sizeof(int));
    for (l = 0; l < imgsize; l++) {
      if (rmap[l] > TR)
        count[rmap[l]]++;
    }
    convert = (int *)calloc(newTR + 1, sizeof(int));
    for (i = 1; i <= newTR; i++)
      convert[i] = i;
    for (i = TR + 1; i <= j + TR; i++) {
      if (count[i] < RSIZE) {
        for (k = i + 1; k <= j + TR; k++) {
          if (convert[k] > convert[i])
            convert[k]--;
        }
        convert[i] = n2bgrow;
        newTR--;
      }
    }
    for (l = 0; l < imgsize; l++) {
      if (rmap[l] > TR)
        rmap[l] = convert[rmap[l]];
    }
    free(convert);
    free(count);
  }
  return newTR;
}
```