user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<_mm_exp2_ps>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r14
  push   %r13
  push   %r12
  push   %rbx
  sub    $0x20,%rsp
  mov    %edi,-0x34(%rbp)
  mov    D56(%rip),%eax
  movd   %eax,%xmm0
  call   <_mm_set1_ps@plt>
  mov    %eax,%edx
  mov    -0x34(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_min_ps@plt>
  mov    %eax,-0x34(%rbp)
  mov    D65(%rip),%eax
  movd   %eax,%xmm0
  call   <_mm_set1_ps@plt>
  mov    %eax,%edx
  mov    -0x34(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_max_ps@plt>
  mov    %eax,-0x34(%rbp)
  mov    D4(%rip),%eax
  movd   %eax,%xmm0
  call   <_mm_set1_ps@plt>
  mov    %eax,%edx
  mov    -0x34(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_sub_ps@plt>
  mov    %eax,%edi
  call   <_mm_cvtps_epi32@plt>
  mov    %eax,-0x30(%rbp)
  mov    -0x30(%rbp),%eax
  mov    %eax,%edi
  call   <_mm_cvtepi32_ps@plt>
  mov    %eax,%edx
  mov    -0x34(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_sub_ps@plt>
  mov    %eax,-0x2c(%rbp)
  mov    $0x7f,%edi
  call   <_mm_set1_epi32@plt>
  mov    %eax,%edx
  mov    -0x30(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_epi32@plt>
  mov    $0x17,%esi
  mov    %eax,%edi
  call   <_mm_slli_epi32@plt>
  mov    %eax,%edi
  call   <_mm_castsi128_ps@plt>
  mov    %eax,-0x28(%rbp)
  mov    D69(%rip),%eax
  movd   %eax,%xmm0
  call   <_mm_set1_ps@plt>
  mov    %eax,%ebx
  mov    D74(%rip),%eax
  movd   %eax,%xmm0
  call   <_mm_set1_ps@plt>
  mov    %eax,%r12d
  mov    D72(%rip),%eax
  movd   %eax,%xmm0
  call   <_mm_set1_ps@plt>
  mov    %eax,%r13d
  mov    D20(%rip),%eax
  movd   %eax,%xmm0
  call   <_mm_set1_ps@plt>
  mov    %eax,%r14d
  mov    D15(%rip),%eax
  movd   %eax,%xmm0
  call   <_mm_set1_ps@plt>
  mov    %eax,%edx
  mov    -0x2c(%rbp),%eax
  mov    %eax,%esi
  mov    %edx,%edi
  call   <_mm_mul_ps@plt>
  mov    %r14d,%esi
  mov    %eax,%edi
  call   <_mm_add_ps@plt>
  mov    %eax,%edx
  mov    -0x2c(%rbp),%eax
  mov    %eax,%esi
  mov    %edx,%edi
  call   <_mm_mul_ps@plt>
  mov    %r13d,%esi
  mov    %eax,%edi
  call   <_mm_add_ps@plt>
  mov    %eax,%edx
  mov    -0x2c(%rbp),%eax
  mov    %eax,%esi
  mov    %edx,%edi
  call   <_mm_mul_ps@plt>
  mov    %r12d,%esi
  mov    %eax,%edi
  call   <_mm_add_ps@plt>
  mov    %eax,%edx
  mov    -0x2c(%rbp),%eax
  mov    %eax,%esi
  mov    %edx,%edi
  call   <_mm_mul_ps@plt>
  mov    %ebx,%esi
  mov    %eax,%edi
  call   <_mm_add_ps@plt>
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%edx
  mov    -0x28(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_mul_ps@plt>
  add    $0x20,%rsp
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %rbp
  ret
```

tool_calls: name: retrieve_data
arguments: tag: D56
type: byte[4]
name: retrieve_data
arguments: tag: D65
type: byte[4]
name: retrieve_data
arguments: tag: D4
type: byte[4]
name: retrieve_data
arguments: tag: D69
type: byte[4]
name: retrieve_data
arguments: tag: D74
type: byte[4]
name: retrieve_data
arguments: tag: D72
type: byte[4]
name: retrieve_data
arguments: tag: D20
type: byte[4]
name: retrieve_data
arguments: tag: D15
type: byte[4]

tool: {"D56": [0x00,0x00,0x01,0x43]}

tool: {"D65": [0xff,0xff,0xfd,0xc2]}

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

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

tool: {"D74": [0xb3,0x68,0x31,0x3f]}

tool: {"D72": [0xc5,0x3c,0x77,0x3e]}

tool: {"D20": [0xf9,0x09,0x55,0x3d]}

tool: {"D15": [0x69,0xbe,0x5d,0x3c]}

assistant: ```c
__m128 _mm_exp2_ps(__m128 x) {
  __m128i ipart;
  __m128 fpart, expipart, expfpart;
  x = _mm_min_ps(x, _mm_set1_ps(129.00000f));
  x = _mm_max_ps(x, _mm_set1_ps(-126.99999f));
  ipart = _mm_cvtps_epi32(_mm_sub_ps(x, _mm_set1_ps(0.5f)));
  fpart = _mm_sub_ps(x, _mm_cvtepi32_ps(ipart));
  expipart = _mm_castsi128_ps(_mm_slli_epi32(_mm_add_epi32(ipart, _mm_set1_epi32(127)), 23));
  expfpart = _mm_add_ps(_mm_mul_ps(_mm_add_ps(_mm_mul_ps(_mm_add_ps(_mm_mul_ps(_mm_add_ps(_mm_mul_ps(_mm_set1_ps(1.3534167e-2f), fpart), _mm_set1_ps(5.2011464e-2f)), fpart), _mm_set1_ps(2.4144275e-1f)), fpart), _mm_set1_ps(6.9300383e-1f)), fpart), _mm_set1_ps(1.0000026f));
  return _mm_mul_ps(expipart, expfpart);
}
```