void resetBall(float *ballX, float *ballY, float *ballDeltaX, int BALL_DIAMETER,
               float TOP_MARGIN, float BOT_END, float LEFT_MARGIN,
               float RIGHT_END, float INIT_BALL_SPEED) {
  *ballX = LEFT_MARGIN + (RIGHT_END - BALL_DIAMETER - LEFT_MARGIN) / 2;
  *ballY = TOP_MARGIN + (BOT_END - BALL_DIAMETER - TOP_MARGIN) / 2;
  *ballDeltaX = INIT_BALL_SPEED;
  return;
}


x86 assembly (clang, -O0):
<resetBall>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
movss  %xmm0,-0x20(%rbp)
movss  %xmm1,-0x24(%rbp)
movss  %xmm2,-0x28(%rbp)
movss  %xmm3,-0x2c(%rbp)
movss  %xmm4,-0x30(%rbp)
movss  -0x28(%rbp),%xmm0
movss  -0x2c(%rbp),%xmm1
cvtsi2ssl -0x1c(%rbp),%xmm2
subss  %xmm2,%xmm1
subss  -0x28(%rbp),%xmm1
movss  0xeb4(%rip),%xmm2
divss  %xmm2,%xmm1
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x20(%rbp),%xmm0
movss  -0x24(%rbp),%xmm1
cvtsi2ssl -0x1c(%rbp),%xmm2
subss  %xmm2,%xmm1
subss  -0x20(%rbp),%xmm1
movss  0xe84(%rip),%xmm2
divss  %xmm2,%xmm1
addss  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x30(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<resetBall>:
cvtsi2ss %ecx,%xmm5
subss  %xmm5,%xmm3
subss  %xmm2,%xmm3
movss  0xeec(%rip),%xmm6
mulss  %xmm6,%xmm3
addss  %xmm2,%xmm3
movss  %xmm3,(%rdi)
subss  %xmm5,%xmm1
subss  %xmm0,%xmm1
mulss  %xmm6,%xmm1
addss  %xmm0,%xmm1
movss  %xmm1,(%rsi)
movss  %xmm4,(%rdx)
ret

LLVM IR (-O0):
define void @resetBall(float* %0, float* %1, float* %2, i32 %3, float %4, float %5, float %6, float %7, float %8) {
%10 = alloca float*
%11 = alloca float*
%12 = alloca float*
%13 = alloca i32
%14 = alloca float
%15 = alloca float
%16 = alloca float
%17 = alloca float
%18 = alloca float
store float* %0, float** %10
store float* %1, float** %11
store float* %2, float** %12
store i32 %3, i32* %13
store float %4, float* %14
store float %5, float* %15
store float %6, float* %16
store float %7, float* %17
store float %8, float* %18
%19 = load float, float* %16
%20 = load float, float* %17
%21 = load i32, i32* %13
%22 = sitofp i32 %21 to float
%23 = fsub float %20, %22
%24 = load float, float* %16
%25 = fsub float %23, %24
%26 = fdiv float %25, 2.000000e+00
%27 = fadd float %19, %26
%28 = load float*, float** %10
store float %27, float* %28
%29 = load float, float* %14
%30 = load float, float* %15
%31 = load i32, i32* %13
%32 = sitofp i32 %31 to float
%33 = fsub float %30, %32
%34 = load float, float* %14
%35 = fsub float %33, %34
%36 = fdiv float %35, 2.000000e+00
%37 = fadd float %29, %36
%38 = load float*, float** %11
store float %37, float* %38
%39 = load float, float* %18
%40 = load float*, float** %12
store float %39, float* %40
ret void
}

LLVM IR (-O2):
define void @resetBall(float* nocapture writeonly %0, float* nocapture writeonly %1, float* nocapture writeonly %2, i32 %3, float %4, float %5, float %6, float %7, float %8) {
%10 = sitofp i32 %3 to float
%11 = fsub float %7, %10
%12 = fsub float %11, %6
%13 = fmul float %12, 5.000000e-01
%14 = fadd float %13, %6
store float %14, float* %0
%15 = fsub float %5, %10
%16 = fsub float %15, %4
%17 = fmul float %16, 5.000000e-01
%18 = fadd float %17, %4
store float %18, float* %1
store float %8, float* %2
ret void
}