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

```asm
<stbiw__linear_to_rgbe>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x30(%rbp),%rax
  movss  (%rax),%xmm1
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mov    -0x30(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm2
  comiss %xmm2,%xmm0
  jbe    L12
  mov    -0x30(%rbp),%rax
  movss  0x4(%rax),%xmm0
  jmp    L20
L12:
  mov    -0x30(%rbp),%rax
  movss  0x8(%rax),%xmm0
L20:
  comiss %xmm0,%xmm1
  jbe    L80
  mov    -0x30(%rbp),%rax
  movss  (%rax),%xmm0
  jmp    L39
L80:
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mov    -0x30(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm1
  comiss %xmm1,%xmm0
  jbe    L8
  mov    -0x30(%rbp),%rax
  movss  0x4(%rax),%xmm0
  jmp    L39
L8:
  mov    -0x30(%rbp),%rax
  movss  0x8(%rax),%xmm0
L39:
  movss  %xmm0,-0x10(%rbp)
  movss  D6(%rip),%xmm0
  comiss -0x10(%rbp),%xmm0
  jbe    L62
  mov    -0x28(%rbp),%rax
  add    $0x3,%rax
  movb   $0x0,(%rax)
  mov    -0x28(%rbp),%rdx
  add    $0x2,%rdx
  movzbl (%rax),%eax
  mov    %al,(%rdx)
  mov    -0x28(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  movzbl (%rax),%edx
  mov    -0x28(%rbp),%rax
  mov    %dl,(%rax)
  jmp    L64
L62:
  lea    -0x14(%rbp),%rdx
  mov    -0x10(%rbp),%eax
  mov    %rdx,%rdi
  movd   %eax,%xmm0
  call   <frexp@plt>
  pxor   %xmm1,%xmm1
  cvtsi2ss %rax,%xmm1
  movss  D15(%rip),%xmm0
  mulss  %xmm1,%xmm0
  divss  -0x10(%rbp),%xmm0
  movss  %xmm0,-0xc(%rbp)
  mov    -0x30(%rbp),%rax
  movss  (%rax),%xmm0
  mulss  -0xc(%rbp),%xmm0
  cvttss2si %xmm0,%eax
  mov    %eax,%edx
  mov    -0x28(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mulss  -0xc(%rbp),%xmm0
  mov    -0x28(%rbp),%rax
  add    $0x1,%rax
  cvttss2si %xmm0,%edx
  mov    %dl,(%rax)
  mov    -0x30(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  -0xc(%rbp),%xmm0
  mov    -0x28(%rbp),%rax
  add    $0x2,%rax
  cvttss2si %xmm0,%edx
  mov    %dl,(%rax)
  mov    -0x14(%rbp),%eax
  mov    %eax,%edx
  mov    -0x28(%rbp),%rax
  add    $0x3,%rax
  add    $0xffffff80,%edx
  mov    %dl,(%rax)
L64:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L29
  call   <__stack_chk_fail@plt>
L29:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_label: D6
type: byte[4]
name: retrieve_data
arguments: data_label: D15
type: byte[4]

tool: {"D6": [0x1f,0xb1,0x4f,0x0a]}

tool: {"D15": [0x00,0x00,0x80,0x43]}

assistant: ```c
void stbiw__linear_to_rgbe(unsigned char *rgbe, float *linear) {
  int exponent;
  float maxcomp = ((linear[0]) > (((linear[1]) > (linear[2]) ? (linear[1]) : (linear[2]))) ? (linear[0]) : (((linear[1]) > (linear[2]) ? (linear[1]) : (linear[2]))));
  if (maxcomp < 1e-32f) {
    rgbe[0] = rgbe[1] = rgbe[2] = rgbe[3] = 0;
  } else {
    float normalize = (float)frexp(maxcomp, &exponent) * 256.0f / maxcomp;
    rgbe[0] = (unsigned char)(linear[0] * normalize);
    rgbe[1] = (unsigned char)(linear[1] * normalize);
    rgbe[2] = (unsigned char)(linear[2] * normalize);
    rgbe[3] = (unsigned char)(exponent + 128);
  }
}
```