user: What would the C source look like for the assembly code provided here:

```asm
<Platform_DisplayHaltCode>:
  endbr64
  cmp    $0xffffffffffffffec,%rdi
  jb     L111
  sub    $0x8,%rsp
  lea    0x14(%rdi),%rax
  lea    D70(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  mov    $0x12,%edx
  lea    D152(%rip),%rsi
  mov    $0x1,%edi
  call   <write@plt>
L122:
  add    $0x8,%rsp
  ret
  mov    $0x13,%edx
  lea    D18(%rip),%rsi
  mov    $0x1,%edi
  call   <write@plt>
  jmp    L122
  mov    $0x30,%edx
  lea    D154(%rip),%rsi
  mov    $0x1,%edi
  call   <write@plt>
  jmp    L122
  mov    $0x2e,%edx
  lea    D60(%rip),%rsi
  mov    $0x1,%edi
  call   <write@plt>
  jmp    L122
  mov    $0x12,%edx
  lea    D155(%rip),%rsi
  mov    $0x1,%edi
  call   <write@plt>
  jmp    L122
  mov    $0x30,%edx
  lea    D87(%rip),%rsi
  mov    $0x1,%edi
  call   <write@plt>
  jmp    L122
  mov    $0x1f,%edx
  lea    D82(%rip),%rsi
  mov    $0x1,%edi
  call   <write@plt>
  jmp    L122
  mov    $0x13,%edx
  lea    D159(%rip),%rsi
  mov    $0x1,%edi
  call   <write@plt>
  jmp    L122
  mov    $0x3b,%edx
  lea    D53(%rip),%rsi
  mov    $0x1,%edi
  call   <write@plt>
  jmp    L122
  mov    $0xb,%edx
  lea    D11(%rip),%rsi
  mov    $0x1,%edi
  call   <write@plt>
  jmp    L122
  mov    $0x10,%edx
  lea    D47(%rip),%rsi
  mov    $0x1,%edi
  call   <write@plt>
  jmp    L122
  mov    $0xf,%edx
  lea    D64(%rip),%rsi
  mov    $0x1,%edi
  call   <write@plt>
  jmp    L122
  mov    $0x1e,%edx
  lea    D158(%rip),%rsi
  mov    $0x1,%edi
  call   <write@plt>
  jmp    L122
  mov    $0x1a,%edx
  lea    D127(%rip),%rsi
  mov    $0x1,%edi
  call   <write@plt>
  jmp    L122
  mov    $0x33,%edx
  lea    D8(%rip),%rsi
  mov    $0x1,%edi
  call   <write@plt>
  jmp    L122
  mov    $0x3b,%edx
  lea    D51(%rip),%rsi
  mov    $0x1,%edi
  call   <write@plt>
  jmp    L122
L111:
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D152
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D18
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D154
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D60
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D155
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D87
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D82
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D159
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D53
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D11
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D47
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D64
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D158
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D127
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D8
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D51
type_infered: string

tool: D152: Assertion failure.

tool: D18: Index out of range.

tool: D154: Reached end of function without reaching RETURN.

tool: D60: CASE statement: no matching label and no ELSE.

tool: D155: Type guard failed.

tool: D87: Implicit type guard in record assignment failed.

tool: D82: Invalid case in WITH statement.

tool: D159: Value out of range.

tool: D53: Heap interrupted while locked, but lockdepth = 0 at unlock.

tool: D11: NIL access.

tool: D47: Alignment error.

tool: D64: Divide by zero.

tool: D158: Arithmetic overflow/underflow.

tool: D127: Invalid function argument.

tool: D8: Internal error, e.g. Type descriptor size mismatch.

tool: D51: Too many, or negative number of, elements in dynamic array.

assistant: ```c
void Platform_DisplayHaltCode(long long code) {
  switch (code) {
  case -1:
    write(1, (unsigned char *)"Assertion failure.", (long long)19 - 1);
    break;
  case -2:
    write(1, (unsigned char *)"Index out of range.", (long long)20 - 1);
    break;
  case -3:
    write(1, (unsigned char *)"Reached end of function without reaching RETURN.", (long long)49 - 1);
    break;
  case -4:
    write(1, (unsigned char *)"CASE statement: no matching label and no ELSE.", (long long)47 - 1);
    break;
  case -5:
    write(1, (unsigned char *)"Type guard failed.", (long long)19 - 1);
    break;
  case -6:
    write(1, (unsigned char *)"Implicit type guard in record assignment failed.", (long long)49 - 1);
    break;
  case -7:
    write(1, (unsigned char *)"Invalid case in WITH statement.", (long long)32 - 1);
    break;
  case -8:
    write(1, (unsigned char *)"Value out of range.", (long long)20 - 1);
    break;
  case -9:
    write(1, (unsigned char *)"Heap interrupted while locked, but lockdepth = 0 at unlock.", (long long)60 - 1);
    break;
  case -10:
    write(1, (unsigned char *)"NIL access.", (long long)12 - 1);
    break;
  case -11:
    write(1, (unsigned char *)"Alignment error.", (long long)17 - 1);
    break;
  case -12:
    write(1, (unsigned char *)"Divide by zero.", (long long)16 - 1);
    break;
  case -13:
    write(1, (unsigned char *)"Arithmetic overflow/underflow.", (long long)31 - 1);
    break;
  case -14:
    write(1, (unsigned char *)"Invalid function argument.", (long long)27 - 1);
    break;
  case -15:
    write(1, (unsigned char *)"Internal error, e.g. Type descriptor size mismatch.", (long long)52 - 1);
    break;
  case -20:
    write(1, (unsigned char *)"Too many, or negative number of, elements in dynamic array.", (long long)60 - 1);
    break;
  default:
    break;
  }
}
```