double findAreaMid(int coeff_a, int coeff_b, int coeff_c, int initial,
                   int final, int rectNum) {
  double x_var;
  double width;
  double area;
  x_var = 0.0;
  width = (double)(final - initial) / rectNum;
  area = 0.0;
  for (x_var = initial + width / 2; x_var < final; x_var += width)
    area += (coeff_a * (x_var * x_var) + coeff_b * x_var + coeff_c) * width;
  return area;
}


x86 assembly (clang, -O0):
<findAreaMid>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
mov    %r8d,-0x14(%rbp)
mov    %r9d,-0x18(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x14(%rbp),%eax
sub    -0x10(%rbp),%eax
cvtsi2sd %eax,%xmm0
cvtsi2sdl -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
cvtsi2sdl -0x10(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
movsd  0xeae(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x20(%rbp),%xmm1
cvtsi2sdl -0x14(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    11c8 <findAreaMid+0xc8>
cvtsi2sdl -0x4(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm2
mulsd  -0x20(%rbp),%xmm2
cvtsi2sdl -0x8(%rbp),%xmm1
mulsd  -0x20(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsi2sdl -0xc(%rbp),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x28(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
jmp    115f <findAreaMid+0x5f>
movsd  -0x30(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<findAreaMid>:
cvtsi2sd %r8d,%xmm8
sub    %ecx,%r8d
cvtsi2sd %r8d,%xmm1
cvtsi2sd %r9d,%xmm0
divsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
movsd  0xedb(%rip),%xmm3
mulsd  %xmm1,%xmm3
addsd  %xmm0,%xmm3
xorpd  %xmm0,%xmm0
ucomisd %xmm3,%xmm8
jbe    1183 <findAreaMid+0x83>
cvtsi2sd %edi,%xmm4
cvtsi2sd %esi,%xmm5
cvtsi2sd %edx,%xmm6
xorpd  %xmm0,%xmm0
nopl   0x0(%rax,%rax,1)
movapd %xmm3,%xmm7
mulsd  %xmm3,%xmm7
mulsd  %xmm4,%xmm7
movapd %xmm1,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm5,%xmm3
addsd  %xmm7,%xmm3
addsd  %xmm6,%xmm3
mulsd  %xmm1,%xmm3
addsd  %xmm3,%xmm0
ucomisd %xmm2,%xmm8
movapd %xmm2,%xmm3
ja     1150 <findAreaMid+0x50>
ret

LLVM IR (-O0):
define double @findAreaMid(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5) {
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca double
%14 = alloca double
%15 = alloca double
store i32 %0, i32* %7
store i32 %1, i32* %8
store i32 %2, i32* %9
store i32 %3, i32* %10
store i32 %4, i32* %11
store i32 %5, i32* %12
store double 0.000000e+00, double* %13
%16 = load i32, i32* %11
%17 = load i32, i32* %10
%18 = sub nsw i32 %16, %17
%19 = sitofp i32 %18 to double
%20 = load i32, i32* %12
%21 = sitofp i32 %20 to double
%22 = fdiv double %19, %21
store double %22, double* %14
store double 0.000000e+00, double* %15
%23 = load i32, i32* %10
%24 = sitofp i32 %23 to double
%25 = load double, double* %14
%26 = fdiv double %25, 2.000000e+00
%27 = fadd double %24, %26
store double %27, double* %13
br label %28
28: ; preds = %50, %6
%29 = load double, double* %13
%30 = load i32, i32* %11
%31 = sitofp i32 %30 to double
%32 = fcmp olt double %29, %31
br i1 %32, label %33, label %54
33: ; preds = %28
%34 = load i32, i32* %7
%35 = sitofp i32 %34 to double
%36 = load double, double* %13
%37 = load double, double* %13
%38 = fmul double %36, %37
%39 = load i32, i32* %8
%40 = sitofp i32 %39 to double
%41 = load double, double* %13
%42 = fmul double %40, %41
%43 = call double @llvm.fmuladd.f64(double %35, double %38, double %42)
%44 = load i32, i32* %9
%45 = sitofp i32 %44 to double
%46 = fadd double %43, %45
%47 = load double, double* %14
%48 = load double, double* %15
%49 = call double @llvm.fmuladd.f64(double %46, double %47, double %48)
store double %49, double* %15
br label %50
50: ; preds = %33
%51 = load double, double* %14
%52 = load double, double* %13
%53 = fadd double %52, %51
store double %53, double* %13
br label %28
54: ; preds = %28
%55 = load double, double* %15
ret double %55
}

LLVM IR (-O2):
define double @findAreaMid(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5) {
%7 = sub nsw i32 %4, %3
%8 = sitofp i32 %7 to double
%9 = sitofp i32 %5 to double
%10 = fdiv double %8, %9
%11 = sitofp i32 %3 to double
%12 = fmul double %10, 5.000000e-01
%13 = fadd double %12, %11
%14 = sitofp i32 %4 to double
%15 = fcmp olt double %13, %14
br i1 %15, label %16, label %30
16: ; preds = %6
%17 = sitofp i32 %0 to double
%18 = sitofp i32 %1 to double
%19 = sitofp i32 %2 to double
br label %20
20: ; preds = %16, %20
%21 = phi double [ 0.000000e+00, %16 ], [ %27, %20 ]
%22 = phi double [ %13, %16 ], [ %28, %20 ]
%23 = fmul double %22, %22
%24 = fmul double %22, %18
%25 = tail call double @llvm.fmuladd.f64(double %17, double %23, double %24)
%26 = fadd double %25, %19
%27 = tail call double @llvm.fmuladd.f64(double %26, double %10, double %21)
%28 = fadd double %10, %22
%29 = fcmp olt double %28, %14
br i1 %29, label %20, label %30
30: ; preds = %20, %6
%31 = phi double [ 0.000000e+00, %6 ], [ %27, %20 ]
ret double %31
}