user: Demonstrate the C code that generates the assembly output below:

```asm
<runmeltsNoCO2>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x1f0,%rsp
  mov    %rdi,-0x188(%rbp)
  mov    %rsi,-0x190(%rbp)
  mov    %rdx,-0x198(%rbp)
  mov    %rcx,-0x1a0(%rbp)
  mov    %r8,-0x1a8(%rbp)
  movsd  %xmm0,-0x1b0(%rbp)
  mov    %r9,-0x1b8(%rbp)
  movsd  %xmm1,-0x1d0(%rbp)
  movsd  %xmm2,-0x1d8(%rbp)
  movsd  %xmm3,-0x1e0(%rbp)
  movsd  %xmm4,-0x1e8(%rbp)
  movsd  %xmm5,-0x1f0(%rbp)
  mov    0x10(%rbp),%rax
  mov    %rax,-0x1c0(%rbp)
  mov    0x18(%rbp),%rax
  mov    %rax,-0x1c8(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movw   $0x21,-0x146(%rbp)
  movw   $0x0,-0x144(%rbp)
  movw   $0x21,-0x142(%rbp)
  mov    -0x1a0(%rbp),%rax
  lea    D167(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %rax,%rax
  jne    L35
  movb   $0x0,-0x142(%rbp)
L35:
  movsd  D4(%rip),%xmm0
  movsd  %xmm0,-0x170(%rbp)
  movsd  D103(%rip),%xmm0
  movsd  %xmm0,-0x168(%rbp)
  movsd  D143(%rip),%xmm0
  movsd  %xmm0,-0x160(%rbp)
  movsd  D122(%rip),%xmm0
  movsd  %xmm0,-0x158(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x178(%rbp)
  movl   $0x0,-0x17c(%rbp)
  jmp    L42
L36:
  mov    -0x17c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x190(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  -0x178(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x178(%rbp)
  addl   $0x1,-0x17c(%rbp)
L42:
  cmpl   $0xf,-0x17c(%rbp)
  jle    L36
  movl   $0x0,-0x17c(%rbp)
  jmp    L51
L39:
  mov    -0x17c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x190(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movsd  D109(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x17c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x190(%rbp),%rax
  add    %rdx,%rax
  divsd  -0x178(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x17c(%rbp)
L51:
  cmpl   $0xf,-0x17c(%rbp)
  jle    L39
  mov    -0x188(%rbp),%rdx
  lea    -0x140(%rbp),%rax
  lea    D160(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  lea    -0x140(%rbp),%rax
  lea    D85(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x150(%rbp)
  mov    -0x190(%rbp),%rax
  add    $0x78,%rax
  movsd  (%rax),%xmm6
  mov    -0x190(%rbp),%rax
  add    $0x68,%rax
  movsd  (%rax),%xmm5
  mov    -0x190(%rbp),%rax
  add    $0x60,%rax
  movsd  (%rax),%xmm4
  mov    -0x190(%rbp),%rax
  add    $0x58,%rax
  movsd  (%rax),%xmm3
  mov    -0x190(%rbp),%rax
  add    $0x50,%rax
  movsd  (%rax),%xmm2
  mov    -0x190(%rbp),%rax
  add    $0x48,%rax
  movsd  (%rax),%xmm1
  mov    -0x190(%rbp),%rax
  add    $0x40,%rax
  movsd  (%rax),%xmm0
  mov    -0x190(%rbp),%rax
  add    $0x38,%rax
  movsd  (%rax),%xmm7
  mov    -0x190(%rbp),%rax
  add    $0x30,%rax
  movsd  (%rax),%xmm13
  mov    -0x190(%rbp),%rax
  add    $0x28,%rax
  movsd  (%rax),%xmm12
  mov    -0x190(%rbp),%rax
  add    $0x20,%rax
  movsd  (%rax),%xmm11
  mov    -0x190(%rbp),%rax
  add    $0x18,%rax
  movsd  (%rax),%xmm10
  mov    -0x190(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm9
  mov    -0x190(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm8
  mov    -0x190(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x150(%rbp),%rax
  sub    $0x8,%rsp
  lea    -0x8(%rsp),%rsp
  movsd  %xmm6,(%rsp)
  lea    -0x8(%rsp),%rsp
  movsd  %xmm5,(%rsp)
  lea    -0x8(%rsp),%rsp
  movsd  %xmm4,(%rsp)
  lea    -0x8(%rsp),%rsp
  movsd  %xmm3,(%rsp)
  lea    -0x8(%rsp),%rsp
  movsd  %xmm2,(%rsp)
  lea    -0x8(%rsp),%rsp
  movsd  %xmm1,(%rsp)
  lea    -0x8(%rsp),%rsp
  movsd  %xmm0,(%rsp)
  movapd %xmm13,%xmm6
  movapd %xmm12,%xmm5
  movapd %xmm11,%xmm4
  movapd %xmm10,%xmm3
  movapd %xmm9,%xmm2
  movapd %xmm8,%xmm1
  movq   %rdx,%xmm0
  lea    D124(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x8,%eax
  call   <fprintf@plt>
  add    $0x40,%rsp
  mov    -0x1a8(%rbp),%rdx
  movsd  -0x1d8(%rbp),%xmm0
  mov    -0x1d0(%rbp),%rcx
  mov    -0x150(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rcx,%xmm0
  lea    D81(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x2,%eax
  call   <fprintf@plt>
  pxor   %xmm0,%xmm0
  ucomisd -0x1b0(%rbp),%xmm0
  jp     L79
  pxor   %xmm0,%xmm0
  ucomisd -0x1b0(%rbp),%xmm0
  je     L43
L79:
  mov    -0x1b0(%rbp),%rdx
  mov    -0x150(%rbp),%rax
  movq   %rdx,%xmm0
  lea    D101(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <fprintf@plt>
L43:
  mov    -0x150(%rbp),%rax
  mov    %rax,%rdi
  call   <fclose@plt>
  mov    -0x188(%rbp),%rdx
  lea    -0x140(%rbp),%rax
  lea    D29(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  lea    -0x140(%rbp),%rax
  lea    D85(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x150(%rbp)
  movsd  -0x1f0(%rbp),%xmm5
  mov    -0x1c8(%rbp),%r9
  movsd  -0x158(%rbp),%xmm4
  movsd  -0x160(%rbp),%xmm3
  movsd  -0x168(%rbp),%xmm2
  movsd  -0x170(%rbp),%xmm1
  movsd  -0x1e0(%rbp),%xmm0
  mov    -0x1e8(%rbp),%rsi
  lea    -0x142(%rbp),%r8
  mov    -0x1a0(%rbp),%rcx
  mov    -0x198(%rbp),%rdx
  mov    -0x150(%rbp),%rax
  sub    $0x8,%rsp
  lea    -0x144(%rbp),%rdi
  push   %rdi
  push   -0x1c0(%rbp)
  lea    -0x146(%rbp),%rdi
  push   %rdi
  lea    -0x146(%rbp),%rdi
  push   %rdi
  push   -0x1c8(%rbp)
  movapd %xmm5,%xmm6
  movapd %xmm4,%xmm5
  movapd %xmm3,%xmm4
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rsi,%xmm0
  lea    D27(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x7,%eax
  call   <fprintf@plt>
  add    $0x30,%rsp
  mov    -0x150(%rbp),%rax
  mov    %rax,%rdi
  call   <fclose@plt>
  mov    -0x188(%rbp),%rdx
  lea    -0x140(%rbp),%rax
  lea    D63(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  lea    -0x140(%rbp),%rax
  lea    D85(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x150(%rbp)
  mov    -0x150(%rbp),%rdx
  mov    -0x1b8(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fputs@plt>
  mov    -0x150(%rbp),%rax
  mov    %rax,%rdi
  call   <fclose@plt>
  mov    -0x188(%rbp),%rdx
  lea    -0xd0(%rbp),%rax
  lea    D134(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  lea    -0xd0(%rbp),%rax
  mov    %rax,%rdi
  call   <system@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L66
  call   <__stack_chk_fail@plt>
L66:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_label: D167
type: string
name: parse_data
arguments: data_label: D4
type: f64
name: parse_data
arguments: data_label: D103
type: f64
name: parse_data
arguments: data_label: D143
type: f64
name: parse_data
arguments: data_label: D122
type: f64
name: parse_data
arguments: data_label: D109
type: f32[2]
name: parse_data
arguments: data_label: D160
type: string
name: parse_data
arguments: data_label: D85
type: string
name: parse_data
arguments: data_label: D124
type: string
name: parse_data
arguments: data_label: D81
type: string
name: parse_data
arguments: data_label: D101
type: string
name: parse_data
arguments: data_label: D29
type: string
name: parse_data
arguments: data_label: D27
type: string
name: parse_data
arguments: data_label: D63
type: string
name: parse_data
arguments: data_label: D134
type: string

tool: D167: ptpath

tool: D4: 90000

tool: D103: 1

tool: D143: 3000

tool: D122: 600

tool: {"D109": [0.0,3.390625]}

tool: D160: %ssc.melts

tool: D85: w

tool: D124: Title: dummy			
Initial Composition: SiO2 %.4f			
Initial Composition: TiO2 %.4f			
Initial Composition: Al2O3 %.4f			
Initial Composition: Fe2O3 %.4f			
Initial Composition: Cr2O3 %.4f			
Initial Composition: FeO %.4f			
Initial Composition: MnO %.4f			
Initial Composition: MgO %.4f			
Initial Composition: NiO %.4f			
Initial Composition: CoO %.4f			
Initial Composition: CaO %.4f			
Initial Composition: Na2O %.4f			
Initial Composition: K2O %.4f			
Initial Composition: P2O5 %.4f			
Initial Composition: H2O %.4f


tool: D81: Initial Temperature: %.2f			
Initial Pressure: %.2f			
log fo2 Path: %s


tool: D101: log fo2 Delta: %.2f


tool: D29: %smelts_env

tool: D27: 
ALPHAMELTS_VERSION		%s			
ALPHAMELTS_MODE			%s			
%sALPHAMELTS_PTPATH_FILE		ptpath			
ALPHAMELTS_DELTAP		%.0f			
ALPHAMELTS_DELTAT		%.0f			
ALPHAMELTS_MAXP			%.0f			
ALPHAMELTS_MINP			%.0f			
ALPHAMELTS_MAXT			%.0f			
ALPHAMELTS_MINT			%.0f			
%sALPHAMELTS_FRACTIONATE_SOLIDS	true			
%sALPHAMELTS_MASSIN		%g			
%sALPHAMELTS_FRACTIONATE_WATER	true			
%sALPHAMELTS_MINW			0.005			
%sALPHAMELTS_SAVE_ALL		true			
%sALPHAMELTS_CELSIUS_OUTPUT	true


tool: D63: %sbatch

tool: D134: cd %s; run_alphamelts_v1.41.pl -f melts_env -b batch > /dev/null

assistant: ```c
void runmeltsNoCO2(const char prefix[], double sc[], const char version[], const char mode[], const char fo2Path[], double fo2Delta, char batchString[], const char saveAll[], const char fractionateSolids[], double Ti, double Pi, double dT, double dP, double massin) {
  char fractionateWater[2] = "!", celciusOutput[2] = "", ptpath[2] = "!";
  if (strcasecmp(mode, "ptpath") == 0)
    ptpath[0] = '\0';
  double Pmax = 90000, Pmin = 1, Tmax = 3000, Tmin = 600;
  FILE *fp;
  char path_string[100];
  double normconst = 0;
  int i;
  for (i = 0; i < 16; i++) {
    normconst = normconst + sc[i];
  }
  for (i = 0; i < 16; i++) {
    sc[i] = sc[i] * 100 / normconst;
  }
  sprintf(path_string, "%ssc.melts", prefix);
  fp = fopen(path_string, "w");
  fprintf(fp, "Title: dummy			\nInitial Composition: SiO2 %.4f			\nInitial Composition: TiO2 %.4f			\nInitial Composition: Al2O3 %.4f			\nInitial Composition: Fe2O3 %.4f			\nInitial Composition: Cr2O3 %.4f			\nInitial Composition: FeO %.4f			\nInitial Composition: MnO %.4f			\nInitial Composition: MgO %.4f			\nInitial Composition: NiO %.4f			\nInitial Composition: CoO %.4f			\nInitial Composition: CaO %.4f			\nInitial Composition: Na2O %.4f			\nInitial Composition: K2O %.4f			\nInitial Composition: P2O5 %.4f			\nInitial Composition: H2O %.4f\n", sc[0], sc[1], sc[2], sc[3], sc[4], sc[5], sc[6], sc[7], sc[8], sc[9], sc[10], sc[11], sc[12], sc[13], sc[15]);
  fprintf(fp, "Initial Temperature: %.2f			\nInitial Pressure: %.2f			\nlog fo2 Path: %s\n", Ti, Pi, fo2Path);
  if (fo2Delta != 0) {
    fprintf(fp, "log fo2 Delta: %.2f\n", fo2Delta);
  }
  fclose(fp);
  sprintf(path_string, "%smelts_env", prefix);
  fp = fopen(path_string, "w");
  fprintf(fp, "\nALPHAMELTS_VERSION\t\t%s			\nALPHAMELTS_MODE\t\t\t%s			\n%sALPHAMELTS_PTPATH_FILE\t\tptpath			\nALPHAMELTS_DELTAP\t\t%.0f			\nALPHAMELTS_DELTAT\t\t%.0f			\nALPHAMELTS_MAXP\t\t\t%.0f			\nALPHAMELTS_MINP\t\t\t%.0f			\nALPHAMELTS_MAXT\t\t\t%.0f			\nALPHAMELTS_MINT\t\t\t%.0f			\n%sALPHAMELTS_FRACTIONATE_SOLIDS\ttrue			\n%sALPHAMELTS_MASSIN\t\t%g			\n%sALPHAMELTS_FRACTIONATE_WATER\ttrue			\n%sALPHAMELTS_MINW\t\t\t0.005			\n%sALPHAMELTS_SAVE_ALL\t\ttrue			\n%sALPHAMELTS_CELSIUS_OUTPUT\ttrue\n", version, mode, ptpath, dP, dT, Pmax, Pmin, Tmax, Tmin, fractionateSolids, fractionateSolids, massin, fractionateWater, fractionateWater, saveAll, celciusOutput);
  fclose(fp);
  sprintf(path_string, "%sbatch", prefix);
  fp = fopen(path_string, "w");
  fputs(batchString, fp);
  fclose(fp);
  char cmd_string[200];
  sprintf(cmd_string, "cd %s; run_alphamelts_v1.41.pl -f melts_env -b batch > /dev/null", prefix);
  system(cmd_string);
}
```