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

```asm
<checkEnvPHI>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    %rsi,-0x10(%rbp)
  mov    %rdx,-0x18(%rbp)
  mov    %rcx,-0x20(%rbp)
  lea    D47(%rip),%rax
  mov    %rax,%rdi
  call   <getenv@plt>
  test   %rax,%rax
  je     L14
  lea    D47(%rip),%rax
  mov    %rax,%rdi
  call   <getenv@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  test   %eax,%eax
  jne    L79
  lea    D108(%rip),%rax
  mov    %rax,%rdi
  call   <fatalError@plt>
  jmp    L14
L79:
  lea    D47(%rip),%rax
  mov    %rax,%rdi
  call   <getenv@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    -0x8(%rbp),%rdx
  mov    %eax,(%rdx)
L14:
  lea    D86(%rip),%rax
  mov    %rax,%rdi
  call   <getenv@plt>
  test   %rax,%rax
  je     L114
  lea    D86(%rip),%rax
  mov    %rax,%rdi
  call   <getenv@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  test   %eax,%eax
  jne    L71
  lea    D72(%rip),%rax
  mov    %rax,%rdi
  call   <fatalError@plt>
  jmp    L114
L71:
  lea    D86(%rip),%rax
  mov    %rax,%rdi
  call   <getenv@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    -0x10(%rbp),%rdx
  mov    %eax,(%rdx)
L114:
  lea    D35(%rip),%rax
  mov    %rax,%rdi
  call   <getenv@plt>
  test   %rax,%rax
  je     L43
  lea    D35(%rip),%rax
  mov    %rax,%rdi
  call   <getenv@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  test   %eax,%eax
  jne    L90
  lea    D145(%rip),%rax
  mov    %rax,%rdi
  call   <fatalError@plt>
  jmp    L43
L90:
  lea    D35(%rip),%rax
  mov    %rax,%rdi
  call   <getenv@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    -0x18(%rbp),%rdx
  mov    %eax,(%rdx)
L43:
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  call   <getenv@plt>
  test   %rax,%rax
  je     L108
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  call   <getenv@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  test   %eax,%eax
  jne    L1
  lea    D125(%rip),%rax
  mov    %rax,%rdi
  call   <fatalError@plt>
  jmp    L108
L1:
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  call   <getenv@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    -0x20(%rbp),%rdx
  mov    %eax,(%rdx)
L108:
  mov    $0x0,%eax
  leave
  ret
```

tool_calls: name: unpack_data
arguments: label: D47
type_guessed: string
name: unpack_data
arguments: label: D108
type_guessed: string
name: unpack_data
arguments: label: D86
type_guessed: string
name: unpack_data
arguments: label: D72
type_guessed: string
name: unpack_data
arguments: label: D35
type_guessed: string
name: unpack_data
arguments: label: D145
type_guessed: string
name: unpack_data
arguments: label: D67
type_guessed: string
name: unpack_data
arguments: label: D125
type_guessed: string

tool: D47: NLOOP_PHI_MAX

tool: D108: NLOOP_PHI_MAX must be a positive integer

tool: D86: MIN_PHI_SIZE

tool: D72: MIN_PHI_SIZE must be a positive integer

tool: D35: MED_PHI_SIZE

tool: D145: MED_PHI_SIZE must be a positive integer

tool: D67: MAX_PHI_SIZE

tool: D125: MAX_PHI_SIZE must be a positive integer

assistant: ```c
int checkEnvPHI(unsigned int *NLOOP, unsigned int *smin, unsigned int *smed, unsigned int *smax) {
  if (getenv("NLOOP_PHI_MAX") != NULL) {
    if (atoi(getenv("NLOOP_PHI_MAX")) <= 0)
      fatalError("NLOOP_PHI_MAX must be a positive integer");
    else
      *NLOOP = atoi(getenv("NLOOP_PHI_MAX"));
  }
  if (getenv("MIN_PHI_SIZE") != NULL) {
    if (atoi(getenv("MIN_PHI_SIZE")) <= 0)
      fatalError("MIN_PHI_SIZE must be a positive integer");
    else
      *smin = atoi(getenv("MIN_PHI_SIZE"));
  }
  if (getenv("MED_PHI_SIZE") != NULL) {
    if (atoi(getenv("MED_PHI_SIZE")) <= 0)
      fatalError("MED_PHI_SIZE must be a positive integer");
    else
      *smed = atoi(getenv("MED_PHI_SIZE"));
  }
  if (getenv("MAX_PHI_SIZE") != NULL) {
    if (atoi(getenv("MAX_PHI_SIZE")) <= 0)
      fatalError("MAX_PHI_SIZE must be a positive integer");
    else
      *smax = atoi(getenv("MAX_PHI_SIZE"));
  }
  return 0;
}
```