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

```asm
<_get_zero_arr_size_other>:
  endbr64
  cmp    $0x4,%edi
  je     L239
  ja     L149
  cmp    $0x1,%edi
  je     L73
  cmp    $0x2,%edi
  jne    L7
  mov    $0x0,%eax
  test   %rsi,%rsi
  je     L114
  lea    -0x1(%rdx),%eax
  lea    (%rsi,%rax,4),%rax
  cmpl   $0x0,(%rax)
  je     L27
L172:
  add    $0x4,%rax
  add    $0x1,%edx
  cmpl   $0x0,(%rax)
  jne    L172
  mov    %edx,%eax
  ret
L149:
  cmp    $0x8,%edi
  jne    L68
  mov    $0x0,%eax
  test   %rsi,%rsi
  je     L114
  lea    -0x1(%rdx),%eax
  lea    (%rsi,%rax,4),%rax
  cmpl   $0x0,(%rax)
  je     L231
L139:
  add    $0x4,%rax
  add    $0x1,%edx
  cmpl   $0x0,(%rax)
  jne    L139
  mov    %edx,%eax
  ret
L73:
  mov    $0x0,%eax
  test   %rsi,%rsi
  je     L114
  lea    -0x1(%rdx),%eax
  lea    (%rsi,%rax,4),%rax
  cmpl   $0x0,(%rax)
  je     L228
L40:
  add    $0x4,%rax
  add    $0x1,%edx
  cmpl   $0x0,(%rax)
  jne    L40
  mov    %edx,%eax
  ret
L239:
  mov    $0x0,%eax
  test   %rsi,%rsi
  je     L114
  lea    -0x1(%rdx),%eax
  lea    (%rsi,%rax,4),%rax
  cmpl   $0x0,(%rax)
  je     L178
L135:
  add    $0x4,%rax
  add    $0x1,%edx
  cmpl   $0x0,(%rax)
  jne    L135
  mov    %edx,%eax
  ret
L68:
  cmp    $0x10,%edi
  je     L79
L7:
  sub    $0x8,%rsp
  mov    $0x5f,%esi
  lea    D2(%rip),%rdi
  call   <_throw_null_fn@plt>
  mov    $0x0,%eax
  add    $0x8,%rsp
  ret
L79:
  mov    $0x0,%eax
  test   %rsi,%rsi
  je     L114
  lea    -0x1(%rdx),%eax
  shl    $0x4,%rax
  add    %rax,%rsi
  fldz
  fldt   (%rsi)
  fucomip %st(1),%st
  fstp   %st(0)
  jp     L211
  je     L134
L211:
  fldz
  fld    %st(0)
  jmp    L76
L207:
  fstp   %st(0)
L76:
  add    $0x10,%rsi
  add    $0x1,%edx
  fldt   (%rsi)
  fld    %st(2)
  fucomip %st(1),%st
  jp     L207
  fld    %st(1)
  fucomip %st(1),%st
  fstp   %st(0)
  jne    L76
  fstp   %st(0)
  fstp   %st(0)
  mov    %edx,%eax
  ret
L228:
  mov    %edx,%eax
  ret
L27:
  mov    %edx,%eax
  ret
L178:
  mov    %edx,%eax
  ret
L231:
  mov    %edx,%eax
  ret
L134:
  mov    %edx,%eax
  ret
L114:
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D2
type_infered: string

tool: D2: runtime_zeroterm.c

assistant: ```c
unsigned _get_zero_arr_size_other(unsigned t, const void *orig_x, unsigned orig_offset) {
  switch (t) {
  case 1: {
    const int8_t *_gres_x = (const int8_t *)orig_x;
    unsigned _gres = 0;
    if (_gres_x != 0) {
      _gres = orig_offset;
      _gres_x += orig_offset - 1;
      while (*_gres_x != 0) {
        _gres_x++;
        _gres++;
      }
    }
    return _gres;
  };
  case 2: {
    const int16_t *_gres_x = (const int16_t *)orig_x;
    unsigned _gres = 0;
    if (_gres_x != 0) {
      _gres = orig_offset;
      _gres_x += orig_offset - 1;
      while (*_gres_x != 0) {
        _gres_x++;
        _gres++;
      }
    }
    return _gres;
  };
  case 4: {
    const int32_t *_gres_x = (const int32_t *)orig_x;
    unsigned _gres = 0;
    if (_gres_x != 0) {
      _gres = orig_offset;
      _gres_x += orig_offset - 1;
      while (*_gres_x != 0) {
        _gres_x++;
        _gres++;
      }
    }
    return _gres;
  };
  case 8: {
    const int64_t *_gres_x = (const int64_t *)orig_x;
    unsigned _gres = 0;
    if (_gres_x != 0) {
      _gres = orig_offset;
      _gres_x += orig_offset - 1;
      while (*_gres_x != 0) {
        _gres_x++;
        _gres++;
      }
    }
    return _gres;
  };
  default:
    if (t == sizeof(long double)) {
      const long double *_gres_x = (const long double *)orig_x;
      unsigned _gres = 0;
      if (_gres_x != 0) {
        _gres = orig_offset;
        _gres_x += orig_offset - 1;
        while (*_gres_x != 0) {
          _gres_x++;
          _gres++;
        }
      }
      return _gres;
    };
    _throw_null_fn("runtime_zeroterm.c", 95);
    return 0;
  }
}
```