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

```asm
<__gen_ocl_internal_sinpi>:
  endbr64
  push   %r12
  mov    $0x7fffffff,%r12d
  push   %rbp
  push   %rbx
  movd   %xmm0,%ebx
  and    %ebx,%r12d
  sub    $0x10,%rsp
  cmp    $0x3e7fffff,%r12d
  jle    L62
  movaps %xmm0,%xmm1
  xorps  D94(%rip),%xmm1
  movaps %xmm1,%xmm0
  movss  %xmm1,0xc(%rsp)
  call   <__gen_ocl_rndd@plt>
  movss  0xc(%rsp),%xmm1
  ucomiss %xmm1,%xmm0
  jp     L110
  jne    L110
  cmp    $0x4b7fffff,%r12d
  jg     L69
  cmp    $0x4affffff,%r12d
  jg     L99
  movss  D146(%rip),%xmm0
  movd   %ebx,%xmm2
  subss  %xmm2,%xmm0
L99:
  movd   %xmm0,%eax
  pxor   %xmm1,%xmm1
  and    $0x1,%eax
  cvtsi2ss %eax,%xmm1
  cmp    $0x4,%ebp
  jle    L21
L22:
  sub    $0x5,%ebp
  cmp    $0x1,%ebp
  ja     L24
  subss  D100(%rip),%xmm1
  mulss  D93(%rip),%xmm1
  add    $0x10,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  movaps %xmm1,%xmm0
  jmp    1080 <__gen_ocl_cos@plt>
  nopl   (%rax)
L110:
  mulss  D95(%rip),%xmm1
  movaps %xmm1,%xmm0
  movss  %xmm1,0xc(%rsp)
  call   <__gen_ocl_rndd@plt>
  movss  0xc(%rsp),%xmm1
  subss  %xmm0,%xmm1
  movss  D128(%rip),%xmm0
  addss  %xmm1,%xmm1
  mulss  %xmm1,%xmm0
  cvttss2si %xmm0,%ebp
  cmp    $0x4,%ebp
  jg     L22
L21:
  cmp    $0x2,%ebp
  jg     L85
  test   %ebp,%ebp
  je     L94
  sub    $0x1,%ebp
  cmp    $0x1,%ebp
  jbe    L4
L24:
  subss  D155(%rip),%xmm1
L94:
  mulss  D93(%rip),%xmm1
  movaps %xmm1,%xmm0
  jmp    L55
  nopl   0x0(%rax,%rax,1)
L4:
  movss  D95(%rip),%xmm0
  subss  %xmm1,%xmm0
  mulss  D93(%rip),%xmm0
  call   <__gen_ocl_cos@plt>
  xorps  D94(%rip),%xmm0
L114:
  add    $0x10,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopl   0x0(%rax)
L62:
  mulss  D93(%rip),%xmm0
  add    $0x10,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  jmp    1070 <__gen_ocl_sin@plt>
  nopl   (%rax)
L69:
  pxor   %xmm0,%xmm0
L55:
  call   <__gen_ocl_sin@plt>
  xorps  D94(%rip),%xmm0
  add    $0x10,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopl   0x0(%rax)
L85:
  movss  D60(%rip),%xmm0
  subss  %xmm1,%xmm0
  mulss  D93(%rip),%xmm0
  call   <__gen_ocl_sin@plt>
  xorps  D94(%rip),%xmm0
  jmp    L114
```

tool_calls: name: unpack_data
arguments: data_tag: D94
type_infered: byte[16]
name: unpack_data
arguments: data_tag: D146
type_infered: byte[4]
name: unpack_data
arguments: data_tag: D100
type_infered: byte[4]
name: unpack_data
arguments: data_tag: D93
type_infered: byte[4]
name: unpack_data
arguments: data_tag: D95
type_infered: byte[4]
name: unpack_data
arguments: data_tag: D128
type_infered: byte[4]
name: unpack_data
arguments: data_tag: D155
type_infered: byte[4]
name: unpack_data
arguments: data_tag: D60
type_infered: byte[4]

tool: {"D94": [0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D146": [0x00,0x00,0x00,0x4b]}

tool: {"D100": [0x00,0x00,0xc0,0x3f]}

tool: {"D93": [0xdb,0x0f,0x49,0x40]}

tool: {"D95": [0x00,0x00,0x00,0x3f]}

tool: {"D128": [0x00,0x00,0x80,0x40]}

tool: {"D155": [0x00,0x00,0x00,0x40]}

tool: {"D60": [0x00,0x00,0x80,0x3f]}

assistant: ```c
__attribute__((overloadable, always_)) float __gen_ocl_internal_sinpi(float x) {
  float y, z;
  int n, ix;
  ix = *(int *)(&x) & 0x7fffffff;
  if (ix < 0x3e800000)
    return __gen_ocl_sin(3.141592653589793F * x);
  y = -x;
  z = __gen_ocl_rndd(y);
  if (z != y) {
    y *= 0.5f;
    y = 2.f * (y - __gen_ocl_rndd(y));
    n = y * 4.f;
  } else {
    if (ix >= 0x4b800000) {
      y = 0;
      n = 0;
    } else {
      if (ix < 0x4b000000)
        z = y + 8.3886080000e+06f;
      int n = *(int *)(&z);
      n &= 1;
      y = n;
      n <<= 2;
    }
  }
  switch (n) {
  case 0:
    y = __gen_ocl_sin(3.141592653589793F * y);
    break;
  case 1:
  case 2:
    y = __gen_ocl_cos(3.141592653589793F * (0.5f - y));
    break;
  case 3:
  case 4:
    y = __gen_ocl_sin(3.141592653589793F * (1.f - y));
    break;
  case 5:
  case 6:
    y = -__gen_ocl_cos(3.141592653589793F * (y - 1.5f));
    break;
  default:
    y = __gen_ocl_sin(3.141592653589793F * (y - 2.f));
    break;
  }
  return -y;
}
```