user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<gaisler_device_str>:
  endbr64
  cmp    $0x1f,%edi
  jg     L48
  cmp    $0x2,%edi
  jle    L1
  sub    $0x3,%edi
  cmp    $0x1c,%edi
  ja     L12
  mov    %edi,%edi
  lea    D22(%rip),%rdx
  movslq (%rdx,%rdi,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D200(%rip),%rax
  ret
L12:
  mov    $0x0,%eax
  ret
L48:
  lea    D187(%rip),%rax
  cmp    $0xffe,%edi
  je     L19
  cmp    $0xfff,%edi
  jne    L25
  lea    D143(%rip),%rax
L19:
  ret
L25:
  cmp    $0xffd,%edi
  lea    D182(%rip),%rax
  mov    $0x0,%edx
  cmovne %rdx,%rax
  ret
  lea    D169(%rip),%rax
  ret
  lea    D159(%rip),%rax
  ret
  lea    D165(%rip),%rax
  ret
  lea    D13(%rip),%rax
  ret
  lea    D131(%rip),%rax
  ret
  lea    D79(%rip),%rax
  ret
  lea    D179(%rip),%rax
  ret
  lea    D28(%rip),%rax
  ret
  lea    D25(%rip),%rax
  ret
  lea    D10(%rip),%rax
  ret
  lea    D109(%rip),%rax
  ret
  lea    D23(%rip),%rax
  ret
  lea    D47(%rip),%rax
  ret
  lea    D110(%rip),%rax
  ret
  lea    D201(%rip),%rax
  ret
  lea    D161(%rip),%rax
  ret
  lea    D172(%rip),%rax
  ret
L1:
  mov    $0x0,%eax
  ret
  lea    D171(%rip),%rax
  ret
```

tool_calls: name: read_data
arguments: label: D200
type_infered: string
name: read_data
arguments: label: D187
type_infered: string
name: read_data
arguments: label: D143
type_infered: string
name: read_data
arguments: label: D182
type_infered: string
name: read_data
arguments: label: D169
type_infered: string
name: read_data
arguments: label: D159
type_infered: string
name: read_data
arguments: label: D165
type_infered: string
name: read_data
arguments: label: D13
type_infered: string
name: read_data
arguments: label: D131
type_infered: string
name: read_data
arguments: label: D79
type_infered: string
name: read_data
arguments: label: D179
type_infered: string
name: read_data
arguments: label: D28
type_infered: string
name: read_data
arguments: label: D25
type_infered: string
name: read_data
arguments: label: D10
type_infered: string
name: read_data
arguments: label: D109
type_infered: string
name: read_data
arguments: label: D23
type_infered: string
name: read_data
arguments: label: D47
type_infered: string
name: read_data
arguments: label: D110
type_infered: string
name: read_data
arguments: label: D201
type_infered: string
name: read_data
arguments: label: D161
type_infered: string
name: read_data
arguments: label: D172
type_infered: string
name: read_data
arguments: label: D171
type_infered: string

tool: D200: GAISLER_LEON3DSU

tool: D187: GAISLER_L2C

tool: D143: GAISLER_PLUGPLAY

tool: D182: GAISLER_L2TIME

tool: D169: GAISLER_ETHAHB

tool: D159: GAISLER_APBMST

tool: D165: GAISLER_AHBUART

tool: D13: GAISLER_SRCTRL

tool: D131: GAISLER_SDCTRL

tool: D79: GAISLER_APBUART

tool: D179: GAISLER_IRQMP

tool: D28: GAISLER_AHBRAM

tool: D25: GAISLER_GPTIMER

tool: D10: GAISLER_PCITRG

tool: D109: GAISLER_PCISBRG

tool: D23: GAISLER_PCIFBRG

tool: D47: GAISLER_PCITRACE

tool: D110: GAISLER_AHBTRACE

tool: D201: GAISLER_ETHDSU

tool: D161: GAISLER_PIOPORT

tool: D172: GAISLER_SPACEWIRE

tool: D171: GAISLER_LEON3

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 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 0x01f:
    return "GAISLER_SPACEWIRE";
  case 0xffd:
    return "GAISLER_L2TIME";
  case 0xffe:
    return "GAISLER_L2C";
  case 0xfff:
    return "GAISLER_PLUGPLAY";
  default:
    break;
  }
  return 0;
}
```