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

```asm
<gaisler_device_str>:
  endbr64
  cmp    $0x61,%edi
  jg     L49
  cmp    $0x2,%edi
  jle    L8
  sub    $0x3,%edi
  cmp    $0x5e,%edi
  ja     L8
  lea    D187(%rip),%rdx
  movslq (%rdx,%rdi,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopw   0x0(%rax,%rax,1)
L8:
  xor    %eax,%eax
  ret
  nopl   0x0(%rax,%rax,1)
L49:
  lea    D249(%rip),%rax
  cmp    $0xffe,%edi
  je     L48
  cmp    $0xfff,%edi
  jne    L9
  lea    D184(%rip),%rax
L48:
  ret
L9:
  cmp    $0xffd,%edi
  mov    $0x0,%edx
  lea    D148(%rip),%rax
  cmovne %rdx,%rax
  ret
  xchg   %ax,%ax
  lea    D115(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D178(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D173(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D145(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D43(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D8(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D155(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D87(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D7(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D144(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D192(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D62(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D140(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D69(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D101(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D98(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D81(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D143(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D223(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D237(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D204(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D116(%rip),%rax
  ret
```

tool_calls: name: retrieve_data
arguments: data_label: D249
type_guessed: string
name: retrieve_data
arguments: data_label: D184
type_guessed: string
name: retrieve_data
arguments: data_label: D148
type_guessed: string
name: retrieve_data
arguments: data_label: D115
type_guessed: string
name: retrieve_data
arguments: data_label: D178
type_guessed: string
name: retrieve_data
arguments: data_label: D173
type_guessed: string
name: retrieve_data
arguments: data_label: D145
type_guessed: string
name: retrieve_data
arguments: data_label: D43
type_guessed: string
name: retrieve_data
arguments: data_label: D8
type_guessed: string
name: retrieve_data
arguments: data_label: D155
type_guessed: string
name: retrieve_data
arguments: data_label: D87
type_guessed: string
name: retrieve_data
arguments: data_label: D7
type_guessed: string
name: retrieve_data
arguments: data_label: D144
type_guessed: string
name: retrieve_data
arguments: data_label: D192
type_guessed: string
name: retrieve_data
arguments: data_label: D62
type_guessed: string
name: retrieve_data
arguments: data_label: D140
type_guessed: string
name: retrieve_data
arguments: data_label: D69
type_guessed: string
name: retrieve_data
arguments: data_label: D101
type_guessed: string
name: retrieve_data
arguments: data_label: D98
type_guessed: string
name: retrieve_data
arguments: data_label: D81
type_guessed: string
name: retrieve_data
arguments: data_label: D143
type_guessed: string
name: retrieve_data
arguments: data_label: D223
type_guessed: string
name: retrieve_data
arguments: data_label: D237
type_guessed: string
name: retrieve_data
arguments: data_label: D204
type_guessed: string
name: retrieve_data
arguments: data_label: D116
type_guessed: string

tool: D249: GAISLER_L2C

tool: D184: GAISLER_PLUGPLAY

tool: D148: GAISLER_L2TIME

tool: D115: GAISLER_VGA

tool: D178: GAISLER_KBD

tool: D173: GAISLER_ETHMAC

tool: D145: GAISLER_AHBJTAG

tool: D43: GAISLER_PIOPORT

tool: D8: GAISLER_ETHDSU

tool: D155: GAISLER_AHBTRACE

tool: D87: GAISLER_PCITRACE

tool: D7: GAISLER_PCIFBRG

tool: D144: GAISLER_PCISBRG

tool: D192: GAISLER_PCITRG

tool: D62: GAISLER_GPTIMER

tool: D140: GAISLER_AHBRAM

tool: D69: GAISLER_IRQMP

tool: D101: GAISLER_APBUART

tool: D98: GAISLER_SDCTRL

tool: D81: GAISLER_SRCTRL

tool: D143: GAISLER_AHBUART

tool: D223: GAISLER_APBMST

tool: D237: GAISLER_ETHAHB

tool: D204: GAISLER_LEON3

tool: D116: GAISLER_LEON3DSU

assistant: ```c
extern char *gaisler_device_str(int id) {
  switch (id) {
  case 0x003:
    return "GAISLER_LEON3";
  case 0x004:
    return "GAISLER_LEON3DSU";
  case 0x005:
    return "GAISLER_ETHAHB";
  case 0x01D:
    return "GAISLER_ETHMAC";
  case 0x006:
    return "GAISLER_APBMST";
  case 0x007:
    return "GAISLER_AHBUART";
  case 0x008:
    return "GAISLER_SRCTRL";
  case 0x009:
    return "GAISLER_SDCTRL";
  case 0x00C:
    return "GAISLER_APBUART";
  case 0x00D:
    return "GAISLER_IRQMP";
  case 0x00E:
    return "GAISLER_AHBRAM";
  case 0x011:
    return "GAISLER_GPTIMER";
  case 0x012:
    return "GAISLER_PCITRG";
  case 0x013:
    return "GAISLER_PCISBRG";
  case 0x014:
    return "GAISLER_PCIFBRG";
  case 0x015:
    return "GAISLER_PCITRACE";
  case 0x017:
    return "GAISLER_AHBTRACE";
  case 0x018:
    return "GAISLER_ETHDSU";
  case 0x01A:
    return "GAISLER_PIOPORT";
  case 0x01c:
    return "GAISLER_AHBJTAG";
  case 0x061:
    return "GAISLER_VGA";
  case 0X060:
    return "GAISLER_KBD";
  case 0xffd:
    return "GAISLER_L2TIME";
  case 0xffe:
    return "GAISLER_L2C";
  case 0xfff:
    return "GAISLER_PLUGPLAY";
  default:
    break;
  }
  return 0;
}
```