user: What is the c source code of the assembly code below?

```asm
<rainbowRGB>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  movsd  %xmm0,-0x18(%rbp)
  mov    %rdi,-0x20(%rbp)
  mov    %rsi,-0x28(%rbp)
  mov    %rdx,-0x30(%rbp)
  movsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  D32(%rip),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x10(%rbp),%xmm0
  comisd -0x8(%rbp),%xmm0
  jbe    L3
  lea    D23(%rip),%rax
  mov    %rax,%rdi
  call   <error2@plt>
L3:
  movsd  -0x10(%rbp),%xmm1
  movsd  D62(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  -0x10(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x10(%rbp),%xmm1
  movsd  -0x10(%rbp),%xmm2
  movsd  D138(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  mulsd  -0x10(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  -0x10(%rbp),%xmm2
  movsd  D34(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  movapd %xmm1,%xmm2
  mulsd  -0x10(%rbp),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  -0x10(%rbp),%xmm2
  movsd  D40(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm1
  movsd  D7(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <fabs@plt>
  mov    %eax,%edx
  mov    -0x20(%rbp),%rax
  mov    %edx,(%rax)
  movsd  -0x10(%rbp),%xmm1
  movsd  D31(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  -0x10(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x10(%rbp),%xmm1
  movsd  -0x10(%rbp),%xmm2
  movsd  D6(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  mulsd  -0x10(%rbp),%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0x10(%rbp),%xmm2
  movsd  D42(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm1
  movsd  D5(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <fabs@plt>
  mov    %eax,%edx
  mov    -0x28(%rbp),%rax
  mov    %edx,(%rax)
  movsd  -0x10(%rbp),%xmm1
  movsd  D48(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  -0x10(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  movsd  -0x10(%rbp),%xmm2
  movsd  D144(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  movapd %xmm1,%xmm2
  mulsd  -0x10(%rbp),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  -0x10(%rbp),%xmm2
  movsd  D18(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm1
  movsd  D129(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <fabs@plt>
  mov    %eax,%edx
  mov    -0x30(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x20(%rbp),%rax
  mov    (%rax),%eax
  cmp    $0xff,%eax
  jle    L37
  mov    -0x20(%rbp),%rax
  movl   $0xff,(%rax)
L37:
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  cmp    $0xff,%eax
  jle    L7
  mov    -0x28(%rbp),%rax
  movl   $0xff,(%rax)
L7:
  mov    -0x30(%rbp),%rax
  mov    (%rax),%eax
  cmp    $0xff,%eax
  jle    L29
  mov    -0x30(%rbp),%rax
  movl   $0xff,(%rax)
L29:
  nop
  leave
  ret
```

tool_calls: name: parse_data
arguments: label: D32
data_type: f64
name: parse_data
arguments: label: D23
data_type: string
name: parse_data
arguments: label: D62
data_type: byte[8]
name: parse_data
arguments: label: D138
data_type: f64
name: parse_data
arguments: label: D34
data_type: f64
name: parse_data
arguments: label: D40
data_type: f64
name: parse_data
arguments: label: D7
data_type: f64
name: parse_data
arguments: label: D31
data_type: byte[8]
name: parse_data
arguments: label: D6
data_type: f64
name: parse_data
arguments: label: D42
data_type: f64
name: parse_data
arguments: label: D5
data_type: f64
name: parse_data
arguments: label: D48
data_type: f64
name: parse_data
arguments: label: D144
data_type: f64
name: parse_data
arguments: label: D18
data_type: f64
name: parse_data
arguments: label: D129
data_type: f64

tool: D32: 1

tool: D23: temperature rescaling needed.

tool: {"D62": [0xcd,0xcc,0xcc,0xcc,0x4c,0x25,0xb4,0xc0]}

tool: D138: 9681.4

tool: D34: 5491.9

tool: D40: 1137.7

tool: D7: 6.2168

tool: {"D31": [0x9a,0x99,0x99,0x99,0x99,0x75,0x92,0xc0]}

tool: D6: 964.8

tool: D42: 203.66

tool: D5: 1.2028

tool: D48: 92.463

tool: D144: 595.92

tool: D18: 481.11

tool: D129: 21.769

assistant: ```c
void rainbowRGB(double temperature, int *R, int *G, int *B) {
  double T = temperature, maxT = 1;
  if (T > maxT)
    error2("temperature rescaling needed.");
  *R = (int)fabs(-5157.3 * T * T * T * T + 9681.4 * T * T * T - 5491.9 * T * T + 1137.7 * T + 6.2168);
  *G = (int)fabs(-1181.4 * T * T * T + 964.8 * T * T + 203.66 * T + 1.2028);
  *B = (int)fabs(92.463 * T * T * T - 595.92 * T * T + 481.11 * T + 21.769);
  if (*R > 255)
    *R = 255;
  if (*G > 255)
    *G = 255;
  if (*B > 255)
    *B = 255;
}
```