void get_face_2d_laxwend(int iX, int iY, int nX, int nY, int X_nbr, int Y_nbr,
                         int nrm, int tid, double delta_t, double u_face,
                         double dummy, double *sc_face, double *sc_old) {
  int nbrid;
  nbrid = (iY + (Y_nbr)) * nX + iX + (X_nbr);
  *sc_face = 0.5 * (*(sc_old + nbrid) + *(sc_old + tid) -
                    u_face * delta_t * 1. * nrm *
                        (*(sc_old + nbrid) - *(sc_old + tid)));
}


x86 assembly (clang, -O0):
<get_face_2d_laxwend>:
push   %rbp
mov    %rsp,%rbp
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
mov    %r8d,-0x14(%rbp)
mov    %r9d,-0x18(%rbp)
movsd  %xmm0,-0x20(%rbp)
movsd  %xmm1,-0x28(%rbp)
movsd  %xmm2,-0x30(%rbp)
mov    -0x8(%rbp),%eax
add    -0x18(%rbp),%eax
imul   -0xc(%rbp),%eax
add    -0x4(%rbp),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x28(%rbp),%rax
movslq 0x18(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  -0x20(%rbp),%xmm1
movsd  0xe94(%rip),%xmm2
mulsd  %xmm2,%xmm1
cvtsi2sdl 0x10(%rbp),%xmm2
mulsd  %xmm2,%xmm1
mov    0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    0x28(%rbp),%rax
movslq 0x18(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0xe3e(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<get_face_2d_laxwend>:
mov    0x18(%rsp),%r10
movslq 0x10(%rsp),%rcx
mov    0x20(%rsp),%rax
add    %r9d,%esi
imul   %edx,%esi
add    %r8d,%edi
add    %esi,%edi
movslq %edi,%rdx
movsd  (%rax,%rdx,8),%xmm2
movsd  (%rax,%rcx,8),%xmm3
movapd %xmm2,%xmm4
addsd  %xmm3,%xmm4
cvtsi2sdl 0x8(%rsp),%xmm5
subsd  %xmm3,%xmm2
mulsd  %xmm1,%xmm0
mulsd  %xmm5,%xmm0
mulsd  %xmm2,%xmm0
subsd  %xmm0,%xmm4
mulsd  0xeaf(%rip),%xmm4
movsd  %xmm4,(%r10)
ret

LLVM IR (-O0):
define void @get_face_2d_laxwend(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, double %8, double %9, double %10, double* %11, double* %12) {
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
%22 = alloca double
%23 = alloca double
%24 = alloca double
%25 = alloca double*
%26 = alloca double*
%27 = alloca i32
store i32 %0, i32* %14
store i32 %1, i32* %15
store i32 %2, i32* %16
store i32 %3, i32* %17
store i32 %4, i32* %18
store i32 %5, i32* %19
store i32 %6, i32* %20
store i32 %7, i32* %21
store double %8, double* %22
store double %9, double* %23
store double %10, double* %24
store double* %11, double** %25
store double* %12, double** %26
%28 = load i32, i32* %15
%29 = load i32, i32* %19
%30 = add nsw i32 %28, %29
%31 = load i32, i32* %16
%32 = mul nsw i32 %30, %31
%33 = load i32, i32* %14
%34 = add nsw i32 %32, %33
%35 = load i32, i32* %18
%36 = add nsw i32 %34, %35
store i32 %36, i32* %27
%37 = load double*, double** %26
%38 = load i32, i32* %27
%39 = sext i32 %38 to i64
%40 = getelementptr inbounds double, double* %37, i64 %39
%41 = load double, double* %40
%42 = load double*, double** %26
%43 = load i32, i32* %21
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds double, double* %42, i64 %44
%46 = load double, double* %45
%47 = fadd double %41, %46
%48 = load double, double* %23
%49 = load double, double* %22
%50 = fmul double %48, %49
%51 = fmul double %50, 1.000000e+00
%52 = load i32, i32* %20
%53 = sitofp i32 %52 to double
%54 = fmul double %51, %53
%55 = load double*, double** %26
%56 = load i32, i32* %27
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds double, double* %55, i64 %57
%59 = load double, double* %58
%60 = load double*, double** %26
%61 = load i32, i32* %21
%62 = sext i32 %61 to i64
%63 = getelementptr inbounds double, double* %60, i64 %62
%64 = load double, double* %63
%65 = fsub double %59, %64
%66 = fneg double %54
%67 = call double @llvm.fmuladd.f64(double %66, double %65, double %47)
%68 = fmul double 5.000000e-01, %67
%69 = load double*, double** %25
store double %68, double* %69
ret void
}

LLVM IR (-O2):
define void @get_face_2d_laxwend(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, double %8, double %9, double %10, double* nocapture writeonly %11, double* nocapture %12) {
%14 = add nsw i32 %5, %1
%15 = mul nsw i32 %14, %2
%16 = add i32 %4, %0
%17 = add i32 %16, %15
%18 = sext i32 %17 to i64
%19 = getelementptr inbounds double, double* %12, i64 %18
%20 = load double, double* %19
%21 = sext i32 %7 to i64
%22 = getelementptr inbounds double, double* %12, i64 %21
%23 = load double, double* %22
%24 = fadd double %20, %23
%25 = sitofp i32 %6 to double
%26 = fsub double %20, %23
%27 = fneg double %9
%28 = fmul double %27, %8
%29 = fmul double %28, %25
%30 = tail call double @llvm.fmuladd.f64(double %29, double %26, double %24)
%31 = fmul double %30, 5.000000e-01
store double %31, double* %11
ret void
}