float tai_8570_pres_calc(unsigned char hi_b, unsigned char lo_b, float dt,
                         int c1, int c2, int c3, int c4) {
  int d1;
  float off, p, sens, x;
  d1 = ((int)hi_b << 8) | (int)lo_b;
  off = (float)(c2 * 4) + (float)(c4 - 512) * dt / 4096.0;
  sens = (float)c1 + (float)c3 * dt / 1024.0 + 24576.0;
  x = sens * (float)(d1 - 7168) / 16384.0 - off;
  p = x / 32.0 + 250.0;
  return (p);
}


x86 assembly (clang, -O0):
<tai_8570_pres_calc>:
push   %rbp
mov    %rsp,%rbp
mov    %sil,%al
mov    %dil,%sil
mov    %sil,-0x1(%rbp)
mov    %al,-0x2(%rbp)
movss  %xmm0,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
mov    %r8d,-0x14(%rbp)
mov    %r9d,-0x18(%rbp)
movzbl -0x1(%rbp),%eax
shl    $0x8,%eax
movzbl -0x2(%rbp),%ecx
or     %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%eax
shl    $0x2,%eax
cvtsi2ss %eax,%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x18(%rbp),%eax
sub    $0x200,%eax
cvtsi2ss %eax,%xmm1
mulss  -0x8(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xec9(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x20(%rbp)
cvtsi2ssl -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
cvtsi2ssl -0x14(%rbp),%xmm1
mulss  -0x8(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xe91(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  0xe79(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0x28(%rbp),%xmm0
mov    -0x1c(%rbp),%eax
sub    $0x1c00,%eax
cvtsi2ss %eax,%xmm1
mulss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe43(%rip),%xmm1
divsd  %xmm1,%xmm0
movss  -0x20(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe10(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xdfc(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0x24(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<tai_8570_pres_calc>:
shl    $0x8,%edi
shl    $0x2,%ecx
cvtsi2ss %ecx,%xmm1
add    $0xfffffe00,%r9d
cvtsi2ss %r9d,%xmm2
mulss  %xmm0,%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  0xeda(%rip),%xmm2
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm2
xorps  %xmm1,%xmm1
cvtsd2ss %xmm2,%xmm1
xorps  %xmm2,%xmm2
cvtsi2ss %edx,%xmm2
cvtss2sd %xmm2,%xmm2
cvtsi2ss %r8d,%xmm3
mulss  %xmm0,%xmm3
xorps  %xmm0,%xmm0
cvtss2sd %xmm3,%xmm0
mulsd  0xeb0(%rip),%xmm0
addsd  %xmm2,%xmm0
addsd  0xeac(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
lea    -0x1c00(%rdi,%rsi,1),%eax
xorps  %xmm2,%xmm2
cvtsi2ss %eax,%xmm2
mulss  %xmm0,%xmm2
xorps  %xmm0,%xmm0
cvtss2sd %xmm2,%xmm0
mulsd  0xe8f(%rip),%xmm0
cvtss2sd %xmm1,%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
cvtss2sd %xmm0,%xmm0
mulsd  0xe7f(%rip),%xmm0
addsd  0xe7f(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
ret

LLVM IR (-O0):
define float @tai_8570_pres_calc(i8 zeroext %0, i8 zeroext %1, float %2, i32 %3, i32 %4, i32 %5, i32 %6) {
%8 = alloca i8
%9 = alloca i8
%10 = alloca float
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca float
%17 = alloca float
%18 = alloca float
%19 = alloca float
store i8 %0, i8* %8
store i8 %1, i8* %9
store float %2, float* %10
store i32 %3, i32* %11
store i32 %4, i32* %12
store i32 %5, i32* %13
store i32 %6, i32* %14
%20 = load i8, i8* %8
%21 = zext i8 %20 to i32
%22 = shl i32 %21, 8
%23 = load i8, i8* %9
%24 = zext i8 %23 to i32
%25 = or i32 %22, %24
store i32 %25, i32* %15
%26 = load i32, i32* %12
%27 = mul nsw i32 %26, 4
%28 = sitofp i32 %27 to float
%29 = fpext float %28 to double
%30 = load i32, i32* %14
%31 = sub nsw i32 %30, 512
%32 = sitofp i32 %31 to float
%33 = load float, float* %10
%34 = fmul float %32, %33
%35 = fpext float %34 to double
%36 = fdiv double %35, 4.096000e+03
%37 = fadd double %29, %36
%38 = fptrunc double %37 to float
store float %38, float* %16
%39 = load i32, i32* %11
%40 = sitofp i32 %39 to float
%41 = fpext float %40 to double
%42 = load i32, i32* %13
%43 = sitofp i32 %42 to float
%44 = load float, float* %10
%45 = fmul float %43, %44
%46 = fpext float %45 to double
%47 = fdiv double %46, 1.024000e+03
%48 = fadd double %41, %47
%49 = fadd double %48, 2.457600e+04
%50 = fptrunc double %49 to float
store float %50, float* %18
%51 = load float, float* %18
%52 = load i32, i32* %15
%53 = sub nsw i32 %52, 7168
%54 = sitofp i32 %53 to float
%55 = fmul float %51, %54
%56 = fpext float %55 to double
%57 = fdiv double %56, 1.638400e+04
%58 = load float, float* %16
%59 = fpext float %58 to double
%60 = fsub double %57, %59
%61 = fptrunc double %60 to float
store float %61, float* %19
%62 = load float, float* %19
%63 = fpext float %62 to double
%64 = fdiv double %63, 3.200000e+01
%65 = fadd double %64, 2.500000e+02
%66 = fptrunc double %65 to float
store float %66, float* %17
%67 = load float, float* %17
ret float %67
}

LLVM IR (-O2):
define float @tai_8570_pres_calc(i8 zeroext %0, i8 zeroext %1, float %2, i32 %3, i32 %4, i32 %5, i32 %6) {
%8 = zext i8 %0 to i32
%9 = shl nuw nsw i32 %8, 8
%10 = zext i8 %1 to i32
%11 = shl nsw i32 %4, 2
%12 = sitofp i32 %11 to float
%13 = fpext float %12 to double
%14 = add nsw i32 %6, -512
%15 = sitofp i32 %14 to float
%16 = fmul float %15, %2
%17 = fpext float %16 to double
%18 = fmul double %17, 0x3F30000000000000
%19 = fadd double %18, %13
%20 = fptrunc double %19 to float
%21 = sitofp i32 %3 to float
%22 = fpext float %21 to double
%23 = sitofp i32 %5 to float
%24 = fmul float %23, %2
%25 = fpext float %24 to double
%26 = fmul double %25, 0x3F50000000000000
%27 = fadd double %26, %22
%28 = fadd double %27, 2.457600e+04
%29 = fptrunc double %28 to float
%30 = or i32 %10, -7168
%31 = add nsw i32 %30, %9
%32 = sitofp i32 %31 to float
%33 = fmul float %32, %29
%34 = fpext float %33 to double
%35 = fmul double %34, 0x3F10000000000000
%36 = fpext float %20 to double
%37 = fsub double %35, %36
%38 = fptrunc double %37 to float
%39 = fpext float %38 to double
%40 = fmul double %39, 3.125000e-02
%41 = fadd double %40, 2.500000e+02
%42 = fptrunc double %41 to float
ret float %42
}