float DBtoLIN(long dB) {
  float lgtemp;
  static float amptable[88] = {
      0.0,     0.0,     0.0,     0.0,     0.0,     0.0,     0.0,     0.0,
      0.0,     0.0,     0.0,     0.0,     0.0,     6.0,     7.0,     8.0,
      9.0,     10.0,    11.0,    13.0,    14.0,    16.0,    18.0,    20.0,
      22.0,    25.0,    28.0,    32.0,    35.0,    40.0,    45.0,    51.0,
      57.0,    64.0,    71.0,    80.0,    90.0,    101.0,   114.0,   128.0,
      142.0,   159.0,   179.0,   202.0,   227.0,   256.0,   284.0,   318.0,
      359.0,   405.0,   455.0,   512.0,   568.0,   638.0,   719.0,   811.0,
      911.0,   1024.0,  1137.0,  1276.0,  1438.0,  1622.0,  1823.0,  2048.0,
      2273.0,  2552.0,  2875.0,  3244.0,  3645.0,  4096.0,  4547.0,  5104.0,
      5751.0,  6488.0,  7291.0,  8192.0,  9093.0,  10207.0, 11502.0, 12976.0,
      14582.0, 16384.0, 18350.0, 20644.0, 23429.0, 26214.0, 29491.0, 32767};
  if ((dB < 0) || (dB > 87))
    return 0;
  lgtemp = amptable[dB] * .001;
  return lgtemp;
}


x86 assembly (clang, -O0):
<DBtoLIN>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
cmpq   $0x0,-0x10(%rbp)
jl     111e <DBtoLIN+0x1e>
cmpq   $0x57,-0x10(%rbp)
jle    112b <DBtoLIN+0x2b>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x4(%rbp)
jmp    115e <DBtoLIN+0x5e>
mov    -0x10(%rbp),%rcx
lea    0x2efa(%rip),%rax
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xeb9(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x14(%rbp),%xmm0
movss  %xmm0,-0x4(%rbp)
movss  -0x4(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<DBtoLIN>:
xorps  %xmm0,%xmm0
cmp    $0x57,%rdi
ja     1125 <DBtoLIN+0x25>
lea    0xf00(%rip),%rax
movss  (%rax,%rdi,4),%xmm0
cvtss2sd %xmm0,%xmm0
mulsd  0xedf(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
ret

LLVM IR (-O0):
@DBtoLIN.amptable = internal global [88 x float] [float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 6.000000e+00, float 7.000000e+00, float 8.000000e+00, float 9.000000e+00, float 1.000000e+01, float 1.100000e+01, float 1.300000e+01, float 1.400000e+01, float 1.600000e+01, float 1.800000e+01, float 2.000000e+01, float 2.200000e+01, float 2.500000e+01, float 2.800000e+01, float 3.200000e+01, float 3.500000e+01, float 4.000000e+01, float 4.500000e+01, float 5.100000e+01, float 5.700000e+01, float 6.400000e+01, float 7.100000e+01, float 8.000000e+01, float 9.000000e+01, float 1.010000e+02, float 1.140000e+02, float 1.280000e+02, float 1.420000e+02, float 1.590000e+02, float 1.790000e+02, float 2.020000e+02, float 2.270000e+02, float 2.560000e+02, float 2.840000e+02, float 3.180000e+02, float 3.590000e+02, float 4.050000e+02, float 4.550000e+02, float 5.120000e+02, float 5.680000e+02, float 6.380000e+02, float 7.190000e+02, float 8.110000e+02, float 9.110000e+02, float 1.024000e+03, float 1.137000e+03, float 1.276000e+03, float 1.438000e+03, float 1.622000e+03, float 1.823000e+03, float 2.048000e+03, float 2.273000e+03, float 2.552000e+03, float 2.875000e+03, float 3.244000e+03, float 3.645000e+03, float 4.096000e+03, float 4.547000e+03, float 5.104000e+03, float 5.751000e+03, float 6.488000e+03, float 7.291000e+03, float 8.192000e+03, float 9.093000e+03, float 1.020700e+04, float 1.150200e+04, float 1.297600e+04, float 1.458200e+04, float 1.638400e+04, float 1.835000e+04, float 2.064400e+04, float 2.342900e+04, float 2.621400e+04, float 2.949100e+04, float 3.276700e+04]
define float @DBtoLIN(i64 %0) {
%2 = alloca float
%3 = alloca i64
%4 = alloca float
store i64 %0, i64* %3
%5 = load i64, i64* %3
%6 = icmp slt i64 %5, 0
br i1 %6, label %10, label %7
7: ; preds = %1
%8 = load i64, i64* %3
%9 = icmp sgt i64 %8, 87
br i1 %9, label %10, label %11
10: ; preds = %7, %1
store float 0.000000e+00, float* %2
br label %19
11: ; preds = %7
%12 = load i64, i64* %3
%13 = getelementptr inbounds [88 x float], [88 x float]* @DBtoLIN.amptable, i64 0, i64 %12
%14 = load float, float* %13
%15 = fpext float %14 to double
%16 = fmul double %15, 1.000000e-03
%17 = fptrunc double %16 to float
store float %17, float* %4
%18 = load float, float* %4
store float %18, float* %2
br label %19
19: ; preds = %11, %10
%20 = load float, float* %2
ret float %20
}

LLVM IR (-O2):
@DBtoLIN.amptable = internal unnamed_addr constant [88 x float] [float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 6.000000e+00, float 7.000000e+00, float 8.000000e+00, float 9.000000e+00, float 1.000000e+01, float 1.100000e+01, float 1.300000e+01, float 1.400000e+01, float 1.600000e+01, float 1.800000e+01, float 2.000000e+01, float 2.200000e+01, float 2.500000e+01, float 2.800000e+01, float 3.200000e+01, float 3.500000e+01, float 4.000000e+01, float 4.500000e+01, float 5.100000e+01, float 5.700000e+01, float 6.400000e+01, float 7.100000e+01, float 8.000000e+01, float 9.000000e+01, float 1.010000e+02, float 1.140000e+02, float 1.280000e+02, float 1.420000e+02, float 1.590000e+02, float 1.790000e+02, float 2.020000e+02, float 2.270000e+02, float 2.560000e+02, float 2.840000e+02, float 3.180000e+02, float 3.590000e+02, float 4.050000e+02, float 4.550000e+02, float 5.120000e+02, float 5.680000e+02, float 6.380000e+02, float 7.190000e+02, float 8.110000e+02, float 9.110000e+02, float 1.024000e+03, float 1.137000e+03, float 1.276000e+03, float 1.438000e+03, float 1.622000e+03, float 1.823000e+03, float 2.048000e+03, float 2.273000e+03, float 2.552000e+03, float 2.875000e+03, float 3.244000e+03, float 3.645000e+03, float 4.096000e+03, float 4.547000e+03, float 5.104000e+03, float 5.751000e+03, float 6.488000e+03, float 7.291000e+03, float 8.192000e+03, float 9.093000e+03, float 1.020700e+04, float 1.150200e+04, float 1.297600e+04, float 1.458200e+04, float 1.638400e+04, float 1.835000e+04, float 2.064400e+04, float 2.342900e+04, float 2.621400e+04, float 2.949100e+04, float 3.276700e+04]
define float @DBtoLIN(i64 %0) {
%2 = icmp ugt i64 %0, 87
br i1 %2, label %9, label %3
3: ; preds = %1
%4 = getelementptr inbounds [88 x float], [88 x float]* @DBtoLIN.amptable, i64 0, i64 %0
%5 = load float, float* %4
%6 = fpext float %5 to double
%7 = fmul double %6, 1.000000e-03
%8 = fptrunc double %7 to float
br label %9
9: ; preds = %1, %3
%10 = phi float [ %8, %3 ], [ 0.000000e+00, %1 ]
ret float %10
}