float vor_float_filter_lp_decim(float xn) {
  const float a0 = 0.0000294918571461433008684162315748977790;
  const float a1 = 0.0000884755714384299093815122727590960494;
  const float a2 = 0.0000884755714384299093815122727590960494;
  const float a3 = 0.0000294918571461433008684162315748977790;
  const float b1 = -2.8738524677701420273479016032069921493530;
  const float b2 = 2.7555363566291544152875303552718833088875;
  const float b3 = -0.8814479540018430592240861187747213989496;
  static float x1 = 0.;
  static float x2 = 0.;
  static float x3 = 0.;
  static float y1 = 0.;
  static float y2 = 0.;
  static float y3 = 0.;
  float yn =
      a0 * xn + a1 * x1 + a2 * x2 + a3 * x3 - b1 * y1 - b2 * y2 - b3 * y3;
  x3 = x2;
  x2 = x1;
  x1 = xn;
  y3 = y2;
  y2 = y1;
  y1 = yn;
  return yn;
}


x86 assembly (clang, -O0):
<vor_float_filter_lp_decim>:
push   %rbp
mov    %rsp,%rbp
movss  %xmm0,-0x4(%rbp)
movss  0xefb(%rip),%xmm0
movss  %xmm0,-0x8(%rbp)
movss  0xef2(%rip),%xmm0
movss  %xmm0,-0xc(%rbp)
movss  0xee5(%rip),%xmm0
movss  %xmm0,-0x10(%rbp)
movss  0xed4(%rip),%xmm0
movss  %xmm0,-0x14(%rbp)
movss  0xed7(%rip),%xmm0
movss  %xmm0,-0x18(%rbp)
movss  0xec6(%rip),%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  0xeb5(%rip),%xmm0
movss  %xmm0,-0x20(%rbp)
movss  -0x4(%rbp),%xmm1
movss  0xe9f(%rip),%xmm0
mulss  0x2eab(%rip),%xmm0
movss  0xe8b(%rip),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  0x2e97(%rip),%xmm0
movss  0xe77(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  0x2e83(%rip),%xmm1
movss  0xe5b(%rip),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  0x2e6f(%rip),%xmm0
movss  0xe3f(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  0x2e5b(%rip),%xmm1
movss  0xe23(%rip),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  0x2e47(%rip),%xmm0
movss  0xe07(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x24(%rbp)
movss  0x2e1a(%rip),%xmm0
movss  %xmm0,0x2e16(%rip)
movss  0x2e06(%rip),%xmm0
movss  %xmm0,0x2e02(%rip)
movss  -0x4(%rbp),%xmm0
movss  %xmm0,0x2df1(%rip)
movss  0x2df9(%rip),%xmm0
movss  %xmm0,0x2df5(%rip)
movss  0x2de5(%rip),%xmm0
movss  %xmm0,0x2de1(%rip)
movss  -0x24(%rbp),%xmm0
movss  %xmm0,0x2dd0(%rip)
movss  -0x24(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<vor_float_filter_lp_decim>:
movss  0x2f1c(%rip),%xmm3
movss  0xef0(%rip),%xmm1
movss  0x2f10(%rip),%xmm2
movss  %xmm3,0x2f08(%rip)
mulss  %xmm1,%xmm3
movss  0xed8(%rip),%xmm4
movss  %xmm0,0x2ef0(%rip)
mulss  %xmm4,%xmm0
addss  %xmm3,%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
mulss  0x2ee0(%rip),%xmm4
addss  %xmm1,%xmm4
movss  0x2ed8(%rip),%xmm1
movss  0xea8(%rip),%xmm0
mulss  %xmm1,%xmm0
addss  %xmm4,%xmm0
movss  0x2ec4(%rip),%xmm3
movss  0xe94(%rip),%xmm4
mulss  %xmm3,%xmm4
addss  %xmm0,%xmm4
movss  0x2eb0(%rip),%xmm0
mulss  0xe80(%rip),%xmm0
addss  %xmm4,%xmm0
movss  %xmm2,0x2e90(%rip)
movss  %xmm3,0x2e94(%rip)
movss  %xmm1,0x2e88(%rip)
movss  %xmm0,0x2e7c(%rip)
ret

LLVM IR (-O0):
@vor_float_filter_lp_decim.x1 = internal global float 0.000000e+00
@vor_float_filter_lp_decim.x2 = internal global float 0.000000e+00
@vor_float_filter_lp_decim.x3 = internal global float 0.000000e+00
@vor_float_filter_lp_decim.y1 = internal global float 0.000000e+00
@vor_float_filter_lp_decim.y2 = internal global float 0.000000e+00
@vor_float_filter_lp_decim.y3 = internal global float 0.000000e+00
define float @vor_float_filter_lp_decim(float %0) {
%2 = alloca float
%3 = alloca float
%4 = alloca float
%5 = alloca float
%6 = alloca float
%7 = alloca float
%8 = alloca float
%9 = alloca float
%10 = alloca float
store float %0, float* %2
store float 0x3EFEECA900000000, float* %3
store float 0x3F17317EC0000000, float* %4
store float 0x3F17317EC0000000, float* %5
store float 0x3EFEECA900000000, float* %6
store float 0xC006FDA660000000, float* %7
store float 0x40060B56A0000000, float* %8
store float 0xBFEC34D260000000, float* %9
%11 = load float, float* %2
%12 = load float, float* @vor_float_filter_lp_decim.x1
%13 = fmul float 0x3F17317EC0000000, %12
%14 = call float @llvm.fmuladd.f32(float 0x3EFEECA900000000, float %11, float %13)
%15 = load float, float* @vor_float_filter_lp_decim.x2
%16 = call float @llvm.fmuladd.f32(float 0x3F17317EC0000000, float %15, float %14)
%17 = load float, float* @vor_float_filter_lp_decim.x3
%18 = call float @llvm.fmuladd.f32(float 0x3EFEECA900000000, float %17, float %16)
%19 = load float, float* @vor_float_filter_lp_decim.y1
%20 = call float @llvm.fmuladd.f32(float 0x4006FDA660000000, float %19, float %18)
%21 = load float, float* @vor_float_filter_lp_decim.y2
%22 = call float @llvm.fmuladd.f32(float 0xC0060B56A0000000, float %21, float %20)
%23 = load float, float* @vor_float_filter_lp_decim.y3
%24 = call float @llvm.fmuladd.f32(float 0x3FEC34D260000000, float %23, float %22)
store float %24, float* %10
%25 = load float, float* @vor_float_filter_lp_decim.x2
store float %25, float* @vor_float_filter_lp_decim.x3
%26 = load float, float* @vor_float_filter_lp_decim.x1
store float %26, float* @vor_float_filter_lp_decim.x2
%27 = load float, float* %2
store float %27, float* @vor_float_filter_lp_decim.x1
%28 = load float, float* @vor_float_filter_lp_decim.y2
store float %28, float* @vor_float_filter_lp_decim.y3
%29 = load float, float* @vor_float_filter_lp_decim.y1
store float %29, float* @vor_float_filter_lp_decim.y2
%30 = load float, float* %10
store float %30, float* @vor_float_filter_lp_decim.y1
%31 = load float, float* %10
ret float %31
}

LLVM IR (-O2):
@vor_float_filter_lp_decim.x1 = internal unnamed_addr global float 0.000000e+00
@vor_float_filter_lp_decim.x2 = internal unnamed_addr global float 0.000000e+00
@vor_float_filter_lp_decim.x3 = internal unnamed_addr global float 0.000000e+00
@vor_float_filter_lp_decim.y1 = internal unnamed_addr global float 0.000000e+00
@vor_float_filter_lp_decim.y2 = internal unnamed_addr global float 0.000000e+00
@vor_float_filter_lp_decim.y3 = internal unnamed_addr global float 0.000000e+00
define float @vor_float_filter_lp_decim(float %0) {
%2 = load float, float* @vor_float_filter_lp_decim.x1
%3 = fmul float %2, 0x3F17317EC0000000
%4 = tail call float @llvm.fmuladd.f32(float %0, float 0x3EFEECA900000000, float %3)
%5 = load float, float* @vor_float_filter_lp_decim.x2
%6 = tail call float @llvm.fmuladd.f32(float %5, float 0x3F17317EC0000000, float %4)
%7 = load float, float* @vor_float_filter_lp_decim.x3
%8 = tail call float @llvm.fmuladd.f32(float %7, float 0x3EFEECA900000000, float %6)
%9 = load float, float* @vor_float_filter_lp_decim.y1
%10 = tail call float @llvm.fmuladd.f32(float %9, float 0x4006FDA660000000, float %8)
%11 = load float, float* @vor_float_filter_lp_decim.y2
%12 = tail call float @llvm.fmuladd.f32(float %11, float 0xC0060B56A0000000, float %10)
%13 = load float, float* @vor_float_filter_lp_decim.y3
%14 = tail call float @llvm.fmuladd.f32(float %13, float 0x3FEC34D260000000, float %12)
store float %5, float* @vor_float_filter_lp_decim.x3
store float %2, float* @vor_float_filter_lp_decim.x2
store float %0, float* @vor_float_filter_lp_decim.x1
store float %11, float* @vor_float_filter_lp_decim.y3
store float %9, float* @vor_float_filter_lp_decim.y2
store float %14, float* @vor_float_filter_lp_decim.y1
ret float %14
}