void acelerometro(float *ax, float *ay, float *az) {
  int FS_ACC = 16;
  (*ax) = (*ax) * FS_ACC / 32768 - 0.04;
  (*ay) = (*ay) * FS_ACC / 32768 - 0.01;
  (*az) = (*az) * FS_ACC / 32768 - 0.02;
}


x86 assembly (clang, -O0):
<acelerometro>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
movl   $0x10,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
movss  (%rax),%xmm0
cvtsi2ssl -0x1c(%rbp),%xmm1
mulss  %xmm1,%xmm0
movss  0xee8(%rip),%xmm1
divss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xed0(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm0
cvtsi2ssl -0x1c(%rbp),%xmm1
mulss  %xmm1,%xmm0
movss  0xeaf(%rip),%xmm1
divss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe8f(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x10(%rbp),%rax
movss  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movss  (%rax),%xmm0
cvtsi2ssl -0x1c(%rbp),%xmm1
mulss  %xmm1,%xmm0
movss  0xe76(%rip),%xmm1
divss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe4e(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<acelerometro>:
movss  0xef8(%rip),%xmm0
movss  (%rdi),%xmm1
mulss  %xmm0,%xmm1
movss  0xeec(%rip),%xmm2
mulss  %xmm2,%xmm1
cvtss2sd %xmm1,%xmm1
addsd  0xee0(%rip),%xmm1
cvtsd2ss %xmm1,%xmm1
movss  %xmm1,(%rdi)
movss  (%rsi),%xmm1
mulss  %xmm0,%xmm1
mulss  %xmm2,%xmm1
cvtss2sd %xmm1,%xmm1
addsd  0xec8(%rip),%xmm1
cvtsd2ss %xmm1,%xmm1
movss  %xmm1,(%rsi)
mulss  (%rdx),%xmm0
mulss  %xmm2,%xmm0
cvtss2sd %xmm0,%xmm0
addsd  0xeb4(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rdx)
ret

LLVM IR (-O0):
define void @acelerometro(float* %0, float* %1, float* %2) {
%4 = alloca float*
%5 = alloca float*
%6 = alloca float*
%7 = alloca i32
store float* %0, float** %4
store float* %1, float** %5
store float* %2, float** %6
store i32 16, i32* %7
%8 = load float*, float** %4
%9 = load float, float* %8
%10 = load i32, i32* %7
%11 = sitofp i32 %10 to float
%12 = fmul float %9, %11
%13 = fdiv float %12, 3.276800e+04
%14 = fpext float %13 to double
%15 = fsub double %14, 4.000000e-02
%16 = fptrunc double %15 to float
%17 = load float*, float** %4
store float %16, float* %17
%18 = load float*, float** %5
%19 = load float, float* %18
%20 = load i32, i32* %7
%21 = sitofp i32 %20 to float
%22 = fmul float %19, %21
%23 = fdiv float %22, 3.276800e+04
%24 = fpext float %23 to double
%25 = fsub double %24, 1.000000e-02
%26 = fptrunc double %25 to float
%27 = load float*, float** %5
store float %26, float* %27
%28 = load float*, float** %6
%29 = load float, float* %28
%30 = load i32, i32* %7
%31 = sitofp i32 %30 to float
%32 = fmul float %29, %31
%33 = fdiv float %32, 3.276800e+04
%34 = fpext float %33 to double
%35 = fsub double %34, 2.000000e-02
%36 = fptrunc double %35 to float
%37 = load float*, float** %6
store float %36, float* %37
ret void
}

LLVM IR (-O2):
define void @acelerometro(float* nocapture %0, float* nocapture %1, float* nocapture %2) {
%4 = load float, float* %0
%5 = fmul float %4, 1.600000e+01
%6 = fmul float %5, 0x3F00000000000000
%7 = fpext float %6 to double
%8 = fadd double %7, -4.000000e-02
%9 = fptrunc double %8 to float
store float %9, float* %0
%10 = load float, float* %1
%11 = fmul float %10, 1.600000e+01
%12 = fmul float %11, 0x3F00000000000000
%13 = fpext float %12 to double
%14 = fadd double %13, -1.000000e-02
%15 = fptrunc double %14 to float
store float %15, float* %1
%16 = load float, float* %2
%17 = fmul float %16, 1.600000e+01
%18 = fmul float %17, 0x3F00000000000000
%19 = fpext float %18 to double
%20 = fadd double %19, -2.000000e-02
%21 = fptrunc double %20 to float
store float %21, float* %2
ret void
}