double DBtoLIN(dB)
long dB;
{
  double lgtemp;
  static double 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
movsd  %xmm0,-0x8(%rbp)
jmp    1152 <DBtoLIN+0x52>
mov    -0x10(%rbp),%rcx
movsd  0xec9(%rip),%xmm0
lea    0x2ef2(%rip),%rax
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<DBtoLIN>:
xorpd  %xmm0,%xmm0
cmp    $0x57,%rdi
ja     111e <DBtoLIN+0x1e>
lea    0xeff(%rip),%rax
movsd  (%rax,%rdi,8),%xmm0
mulsd  0xee2(%rip),%xmm0
ret

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

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