user: Translate the below assembly code into C programming language:

```asm
<type_from_name>:
  endbr64
  push   %r12
  lea    D17(%rip),%rsi
  mov    %rdi,%r12
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x73,%eax
  test   %r8d,%r8d
  je     L100
  lea    D42(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x6e,%eax
  test   %r8d,%r8d
  je     L100
  lea    D142(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x71,%eax
  test   %r8d,%r8d
  je     L100
  lea    D135(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x69,%eax
  test   %r8d,%r8d
  je     L100
  lea    D124(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x75,%eax
  test   %r8d,%r8d
  je     L100
  lea    D130(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x78,%eax
  test   %r8d,%r8d
  je     L100
  lea    D117(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x74,%eax
  test   %r8d,%r8d
  je     L100
  lea    D96(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x64,%eax
  test   %r8d,%r8d
  je     L100
  lea    D56(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x79,%eax
  test   %r8d,%r8d
  je     L100
  lea    D81(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x62,%eax
  test   %r8d,%r8d
  je     L100
  lea    D115(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x6f,%eax
  test   %r8d,%r8d
  je     L100
  lea    D74(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x76,%eax
  test   %r8d,%r8d
  je     L100
  lea    D107(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x61,%eax
  test   %r8d,%r8d
  je     L100
  lea    D47(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x72,%eax
  test   %r8d,%r8d
  je     L100
  lea    D127(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x65,%eax
  test   %r8d,%r8d
  je     L100
  mov    %r12,%rdx
  lea    D80(%rip),%rsi
  xor    %edi,%edi
  call   <assert_error@plt>
  xor    %eax,%eax
L100:
  pop    %r12
  ret
```

tool_calls: name: read_data
arguments: data_tag: D17
data_type: string
name: read_data
arguments: data_tag: D42
data_type: string
name: read_data
arguments: data_tag: D142
data_type: string
name: read_data
arguments: data_tag: D135
data_type: string
name: read_data
arguments: data_tag: D124
data_type: string
name: read_data
arguments: data_tag: D130
data_type: string
name: read_data
arguments: data_tag: D117
data_type: string
name: read_data
arguments: data_tag: D96
data_type: string
name: read_data
arguments: data_tag: D56
data_type: string
name: read_data
arguments: data_tag: D81
data_type: string
name: read_data
arguments: data_tag: D115
data_type: string
name: read_data
arguments: data_tag: D74
data_type: string
name: read_data
arguments: data_tag: D107
data_type: string
name: read_data
arguments: data_tag: D47
data_type: string
name: read_data
arguments: data_tag: D127
data_type: string
name: read_data
arguments: data_tag: D80
data_type: string

tool: D17: string

tool: D42: int16

tool: D142: uint16

tool: D135: int32

tool: D124: uint32

tool: D130: int64

tool: D117: uint64

tool: D96: double

tool: D56: byte

tool: D81: boolean

tool: D115: objpath

tool: D74: variant

tool: D107: array

tool: D47: struct

tool: D127: dict

tool: D80: Unknown type '%s'

assistant: ```c
int type_from_name(const char *arg) {
  if (!strcmp(arg, "string"))
    return 's';
  else if (!strcmp(arg, "int16"))
    return 'n';
  else if (!strcmp(arg, "uint16"))
    return 'q';
  else if (!strcmp(arg, "int32"))
    return 'i';
  else if (!strcmp(arg, "uint32"))
    return 'u';
  else if (!strcmp(arg, "int64"))
    return 'x';
  else if (!strcmp(arg, "uint64"))
    return 't';
  else if (!strcmp(arg, "double"))
    return 'd';
  else if (!strcmp(arg, "byte"))
    return 'y';
  else if (!strcmp(arg, "boolean"))
    return 'b';
  else if (!strcmp(arg, "objpath"))
    return 'o';
  else if (!strcmp(arg, "variant"))
    return 'v';
  else if (!strcmp(arg, "array"))
    return 'a';
  else if (!strcmp(arg, "struct"))
    return 'r';
  else if (!strcmp(arg, "dict"))
    return 'e';
  assert_error(0, "Unknown type '%s'", arg);
  return 0;
}
```