void update_state_gyro(float az_dyn, float g11, float g12, float g21, float g22,
                       float g31, float g32, float g41, float g42, float g51,
                       float g52, float g61, float g62, float g71, float g72,
                       float gyro_pitch, float gyro_roll, float h, float pitch,
                       float pitch_rate, float roll, float roll_rate, float v,
                       float *out_2100921197882637313) {
  out_2100921197882637313[0] =
      g11 * (gyro_roll - roll_rate) + g12 * (gyro_pitch - pitch_rate) + roll;
  out_2100921197882637313[1] =
      g21 * (gyro_roll - roll_rate) + g22 * (gyro_pitch - pitch_rate) + pitch;
  out_2100921197882637313[2] = g31 * (gyro_roll - roll_rate) +
                               g32 * (gyro_pitch - pitch_rate) + roll_rate;
  out_2100921197882637313[3] = g41 * (gyro_roll - roll_rate) +
                               g42 * (gyro_pitch - pitch_rate) + pitch_rate;
  out_2100921197882637313[4] =
      g51 * (gyro_roll - roll_rate) + g52 * (gyro_pitch - pitch_rate) + h;
  out_2100921197882637313[5] =
      g61 * (gyro_roll - roll_rate) + g62 * (gyro_pitch - pitch_rate) + v;
  out_2100921197882637313[6] =
      az_dyn + g71 * (gyro_roll - roll_rate) + g72 * (gyro_pitch - pitch_rate);
}


x86 assembly (clang, -O0):
<update_state_gyro>:
push   %rbp
mov    %rsp,%rbp
movss  0x80(%rbp),%xmm8
movss  0x78(%rbp),%xmm8
movss  0x70(%rbp),%xmm8
movss  0x68(%rbp),%xmm8
movss  0x60(%rbp),%xmm8
movss  0x58(%rbp),%xmm8
movss  0x50(%rbp),%xmm8
movss  0x48(%rbp),%xmm8
movss  0x40(%rbp),%xmm8
movss  0x38(%rbp),%xmm8
movss  0x30(%rbp),%xmm8
movss  0x28(%rbp),%xmm8
movss  0x20(%rbp),%xmm8
movss  0x18(%rbp),%xmm8
movss  0x10(%rbp),%xmm8
movss  %xmm0,-0x4(%rbp)
movss  %xmm1,-0x8(%rbp)
movss  %xmm2,-0xc(%rbp)
movss  %xmm3,-0x10(%rbp)
movss  %xmm4,-0x14(%rbp)
movss  %xmm5,-0x18(%rbp)
movss  %xmm6,-0x1c(%rbp)
movss  %xmm7,-0x20(%rbp)
mov    %rdi,-0x28(%rbp)
movss  -0x8(%rbp),%xmm0
movss  0x50(%rbp),%xmm2
subss  0x78(%rbp),%xmm2
movss  -0xc(%rbp),%xmm1
movss  0x48(%rbp),%xmm3
subss  0x68(%rbp),%xmm3
mulss  %xmm3,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
addss  0x70(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x10(%rbp),%xmm0
movss  0x50(%rbp),%xmm2
subss  0x78(%rbp),%xmm2
movss  -0x14(%rbp),%xmm1
movss  0x48(%rbp),%xmm3
subss  0x68(%rbp),%xmm3
mulss  %xmm3,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
addss  0x60(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,0x4(%rax)
movss  -0x18(%rbp),%xmm0
movss  0x50(%rbp),%xmm2
subss  0x78(%rbp),%xmm2
movss  -0x1c(%rbp),%xmm1
movss  0x48(%rbp),%xmm3
subss  0x68(%rbp),%xmm3
mulss  %xmm3,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
addss  0x78(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,0x8(%rax)
movss  -0x20(%rbp),%xmm0
movss  0x50(%rbp),%xmm2
subss  0x78(%rbp),%xmm2
movss  0x10(%rbp),%xmm1
movss  0x48(%rbp),%xmm3
subss  0x68(%rbp),%xmm3
mulss  %xmm3,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
addss  0x68(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,0xc(%rax)
movss  0x18(%rbp),%xmm0
movss  0x50(%rbp),%xmm2
subss  0x78(%rbp),%xmm2
movss  0x20(%rbp),%xmm1
movss  0x48(%rbp),%xmm3
subss  0x68(%rbp),%xmm3
mulss  %xmm3,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
addss  0x58(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,0x10(%rax)
movss  0x28(%rbp),%xmm0
movss  0x50(%rbp),%xmm2
subss  0x78(%rbp),%xmm2
movss  0x30(%rbp),%xmm1
movss  0x48(%rbp),%xmm3
subss  0x68(%rbp),%xmm3
mulss  %xmm3,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
addss  0x80(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,0x14(%rax)
movss  -0x4(%rbp),%xmm0
movss  0x38(%rbp),%xmm1
movss  0x50(%rbp),%xmm2
subss  0x78(%rbp),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  0x40(%rbp),%xmm0
movss  0x48(%rbp),%xmm2
subss  0x68(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,0x18(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<update_state_gyro>:
movss  0x60(%rsp),%xmm10
movss  0x40(%rsp),%xmm8
movss  0x70(%rsp),%xmm11
movss  0x48(%rsp),%xmm9
subss  %xmm11,%xmm9
subss  %xmm10,%xmm8
movaps %xmm8,%xmm12
shufps $0x0,%xmm8,%xmm12
movss  0x8(%rsp),%xmm13
unpcklps %xmm13,%xmm6
unpcklps %xmm4,%xmm2
movlhps %xmm6,%xmm2
mulps  %xmm12,%xmm2
unpcklps %xmm7,%xmm5
unpcklps %xmm3,%xmm1
movlhps %xmm5,%xmm1
movaps %xmm9,%xmm3
shufps $0x0,%xmm9,%xmm3
mulps  %xmm1,%xmm3
addps  %xmm2,%xmm3
movss  0x58(%rsp),%xmm1
movss  0x68(%rsp),%xmm2
unpcklps %xmm1,%xmm2
unpcklps %xmm10,%xmm11
movlhps %xmm11,%xmm2
addps  %xmm3,%xmm2
movups %xmm2,(%rdi)
movss  0x18(%rsp),%xmm1
mulss  %xmm8,%xmm1
movss  0x10(%rsp),%xmm2
mulss  %xmm9,%xmm2
addss  %xmm1,%xmm2
addss  0x50(%rsp),%xmm2
movss  %xmm2,0x10(%rdi)
movss  0x28(%rsp),%xmm1
mulss  %xmm8,%xmm1
movss  0x20(%rsp),%xmm2
mulss  %xmm9,%xmm2
addss  %xmm1,%xmm2
addss  0x78(%rsp),%xmm2
movss  %xmm2,0x14(%rdi)
mulss  0x30(%rsp),%xmm9
addss  %xmm0,%xmm9
mulss  0x38(%rsp),%xmm8
addss  %xmm9,%xmm8
movss  %xmm8,0x18(%rdi)
ret

LLVM IR (-O0):
define void @update_state_gyro(float %0, float %1, float %2, float %3, float %4, float %5, float %6, float %7, float %8, float %9, float %10, float %11, float %12, float %13, float %14, float %15, float %16, float %17, float %18, float %19, float %20, float %21, float %22, float* %23) {
%25 = alloca float
%26 = alloca float
%27 = alloca float
%28 = alloca float
%29 = alloca float
%30 = alloca float
%31 = alloca float
%32 = alloca float
%33 = alloca float
%34 = alloca float
%35 = alloca float
%36 = alloca float
%37 = alloca float
%38 = alloca float
%39 = alloca float
%40 = alloca float
%41 = alloca float
%42 = alloca float
%43 = alloca float
%44 = alloca float
%45 = alloca float
%46 = alloca float
%47 = alloca float
%48 = alloca float*
store float %0, float* %25
store float %1, float* %26
store float %2, float* %27
store float %3, float* %28
store float %4, float* %29
store float %5, float* %30
store float %6, float* %31
store float %7, float* %32
store float %8, float* %33
store float %9, float* %34
store float %10, float* %35
store float %11, float* %36
store float %12, float* %37
store float %13, float* %38
store float %14, float* %39
store float %15, float* %40
store float %16, float* %41
store float %17, float* %42
store float %18, float* %43
store float %19, float* %44
store float %20, float* %45
store float %21, float* %46
store float %22, float* %47
store float* %23, float** %48
%49 = load float, float* %26
%50 = load float, float* %41
%51 = load float, float* %46
%52 = fsub float %50, %51
%53 = load float, float* %27
%54 = load float, float* %40
%55 = load float, float* %44
%56 = fsub float %54, %55
%57 = fmul float %53, %56
%58 = call float @llvm.fmuladd.f32(float %49, float %52, float %57)
%59 = load float, float* %45
%60 = fadd float %58, %59
%61 = load float*, float** %48
%62 = getelementptr inbounds float, float* %61, i64 0
store float %60, float* %62
%63 = load float, float* %28
%64 = load float, float* %41
%65 = load float, float* %46
%66 = fsub float %64, %65
%67 = load float, float* %29
%68 = load float, float* %40
%69 = load float, float* %44
%70 = fsub float %68, %69
%71 = fmul float %67, %70
%72 = call float @llvm.fmuladd.f32(float %63, float %66, float %71)
%73 = load float, float* %43
%74 = fadd float %72, %73
%75 = load float*, float** %48
%76 = getelementptr inbounds float, float* %75, i64 1
store float %74, float* %76
%77 = load float, float* %30
%78 = load float, float* %41
%79 = load float, float* %46
%80 = fsub float %78, %79
%81 = load float, float* %31
%82 = load float, float* %40
%83 = load float, float* %44
%84 = fsub float %82, %83
%85 = fmul float %81, %84
%86 = call float @llvm.fmuladd.f32(float %77, float %80, float %85)
%87 = load float, float* %46
%88 = fadd float %86, %87
%89 = load float*, float** %48
%90 = getelementptr inbounds float, float* %89, i64 2
store float %88, float* %90
%91 = load float, float* %32
%92 = load float, float* %41
%93 = load float, float* %46
%94 = fsub float %92, %93
%95 = load float, float* %33
%96 = load float, float* %40
%97 = load float, float* %44
%98 = fsub float %96, %97
%99 = fmul float %95, %98
%100 = call float @llvm.fmuladd.f32(float %91, float %94, float %99)
%101 = load float, float* %44
%102 = fadd float %100, %101
%103 = load float*, float** %48
%104 = getelementptr inbounds float, float* %103, i64 3
store float %102, float* %104
%105 = load float, float* %34
%106 = load float, float* %41
%107 = load float, float* %46
%108 = fsub float %106, %107
%109 = load float, float* %35
%110 = load float, float* %40
%111 = load float, float* %44
%112 = fsub float %110, %111
%113 = fmul float %109, %112
%114 = call float @llvm.fmuladd.f32(float %105, float %108, float %113)
%115 = load float, float* %42
%116 = fadd float %114, %115
%117 = load float*, float** %48
%118 = getelementptr inbounds float, float* %117, i64 4
store float %116, float* %118
%119 = load float, float* %36
%120 = load float, float* %41
%121 = load float, float* %46
%122 = fsub float %120, %121
%123 = load float, float* %37
%124 = load float, float* %40
%125 = load float, float* %44
%126 = fsub float %124, %125
%127 = fmul float %123, %126
%128 = call float @llvm.fmuladd.f32(float %119, float %122, float %127)
%129 = load float, float* %47
%130 = fadd float %128, %129
%131 = load float*, float** %48
%132 = getelementptr inbounds float, float* %131, i64 5
store float %130, float* %132
%133 = load float, float* %25
%134 = load float, float* %38
%135 = load float, float* %41
%136 = load float, float* %46
%137 = fsub float %135, %136
%138 = call float @llvm.fmuladd.f32(float %134, float %137, float %133)
%139 = load float, float* %39
%140 = load float, float* %40
%141 = load float, float* %44
%142 = fsub float %140, %141
%143 = call float @llvm.fmuladd.f32(float %139, float %142, float %138)
%144 = load float*, float** %48
%145 = getelementptr inbounds float, float* %144, i64 6
store float %143, float* %145
ret void
}

LLVM IR (-O2):
define void @update_state_gyro(float %0, float %1, float %2, float %3, float %4, float %5, float %6, float %7, float %8, float %9, float %10, float %11, float %12, float %13, float %14, float %15, float %16, float %17, float %18, float %19, float %20, float %21, float %22, float* nocapture writeonly %23) {
%25 = fsub float %16, %21
%26 = fsub float %15, %19
%27 = insertelement <4 x float> poison, float %26, i64 0
%28 = shufflevector <4 x float> %27, <4 x float> poison, <4 x i32> zeroinitializer
%29 = insertelement <4 x float> poison, float %2, i64 0
%30 = insertelement <4 x float> %29, float %4, i64 1
%31 = insertelement <4 x float> %30, float %6, i64 2
%32 = insertelement <4 x float> %31, float %8, i64 3
%33 = fmul <4 x float> %28, %32
%34 = insertelement <4 x float> poison, float %1, i64 0
%35 = insertelement <4 x float> %34, float %3, i64 1
%36 = insertelement <4 x float> %35, float %5, i64 2
%37 = insertelement <4 x float> %36, float %7, i64 3
%38 = insertelement <4 x float> poison, float %25, i64 0
%39 = shufflevector <4 x float> %38, <4 x float> poison, <4 x i32> zeroinitializer
%40 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %37, <4 x float> %39, <4 x float> %33)
%41 = insertelement <4 x float> poison, float %20, i64 0
%42 = insertelement <4 x float> %41, float %18, i64 1
%43 = insertelement <4 x float> %42, float %21, i64 2
%44 = insertelement <4 x float> %43, float %19, i64 3
%45 = fadd <4 x float> %40, %44
%46 = bitcast float* %23 to <4 x float>*
store <4 x float> %45, <4 x float>* %46
%47 = fmul float %26, %10
%48 = tail call float @llvm.fmuladd.f32(float %9, float %25, float %47)
%49 = fadd float %48, %17
%50 = getelementptr inbounds float, float* %23, i64 4
store float %49, float* %50
%51 = fmul float %26, %12
%52 = tail call float @llvm.fmuladd.f32(float %11, float %25, float %51)
%53 = fadd float %52, %22
%54 = getelementptr inbounds float, float* %23, i64 5
store float %53, float* %54
%55 = tail call float @llvm.fmuladd.f32(float %13, float %25, float %0)
%56 = tail call float @llvm.fmuladd.f32(float %14, float %26, float %55)
%57 = getelementptr inbounds float, float* %23, i64 6
store float %56, float* %57
ret void
}