#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ couleurCourante(int, int, int);
int /*<<< orphan*/ epaisseurDeTrait(int);
int /*<<< orphan*/ ligne(float, float, float, float);
void afficheBordureEntreCases(int numero1, int numero2, float centreX1,
                              float centreY1, float centreX2, float centreY2) {
  float minX, minY, maxX, maxY, taille;
  minX = (centreX1 <= centreX2) * centreX1 + (centreX2 < centreX1) * centreX2;
  maxX = (centreX1 >= centreX2) * centreX1 + (centreX2 > centreX1) * centreX2;
  minY = (centreY1 <= centreY2) * centreY1 + (centreY2 < centreY1) * centreY2;
  maxY = (centreY1 >= centreY2) * centreY1 + (centreY2 > centreY1) * centreY2;
  taille = (maxX - minX + maxY - minY) / 2;
  if (numero1 != numero2) {
    epaisseurDeTrait(2);
    couleurCourante(100, 100, 100);
    if ((maxY - minY) == 0) {
      ligne(minX + taille, minY + taille, minX + taille, minY - taille);
    } else {
      ligne(minX + taille, minY + taille, minX - taille, minY + taille);
    }
  }
}


x86 assembly (clang, -O0):
<afficheBordureEntreCases>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
movss  %xmm0,-0xc(%rbp)
movss  %xmm1,-0x10(%rbp)
movss  %xmm2,-0x14(%rbp)
movss  %xmm3,-0x18(%rbp)
movss  -0xc(%rbp),%xmm1
movss  -0x14(%rbp),%xmm0
ucomiss %xmm1,%xmm0
setae  %al
and    $0x1,%al
movzbl %al,%eax
cvtsi2ss %eax,%xmm0
movss  -0xc(%rbp),%xmm2
movss  -0x14(%rbp),%xmm3
movss  -0xc(%rbp),%xmm1
ucomiss %xmm3,%xmm1
seta   %al
and    $0x1,%al
movzbl %al,%eax
cvtsi2ss %eax,%xmm1
mulss  -0x14(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  -0xc(%rbp),%xmm0
ucomiss -0x14(%rbp),%xmm0
setae  %al
and    $0x1,%al
movzbl %al,%eax
cvtsi2ss %eax,%xmm0
movss  -0xc(%rbp),%xmm2
movss  -0x14(%rbp),%xmm1
ucomiss -0xc(%rbp),%xmm1
seta   %al
and    $0x1,%al
movzbl %al,%eax
cvtsi2ss %eax,%xmm1
mulss  -0x14(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0x10(%rbp),%xmm1
movss  -0x18(%rbp),%xmm0
ucomiss %xmm1,%xmm0
setae  %al
and    $0x1,%al
movzbl %al,%eax
cvtsi2ss %eax,%xmm0
movss  -0x10(%rbp),%xmm2
movss  -0x18(%rbp),%xmm3
movss  -0x10(%rbp),%xmm1
ucomiss %xmm3,%xmm1
seta   %al
and    $0x1,%al
movzbl %al,%eax
cvtsi2ss %eax,%xmm1
mulss  -0x18(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x20(%rbp)
movss  -0x10(%rbp),%xmm0
ucomiss -0x18(%rbp),%xmm0
setae  %al
and    $0x1,%al
movzbl %al,%eax
cvtsi2ss %eax,%xmm0
movss  -0x10(%rbp),%xmm2
movss  -0x18(%rbp),%xmm1
ucomiss -0x10(%rbp),%xmm1
seta   %al
and    $0x1,%al
movzbl %al,%eax
cvtsi2ss %eax,%xmm1
mulss  -0x18(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0x24(%rbp),%xmm0
subss  -0x1c(%rbp),%xmm0
addss  -0x28(%rbp),%xmm0
subss  -0x20(%rbp),%xmm0
movss  0xd7e(%rip),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x2c(%rbp)
mov    -0x4(%rbp),%eax
cmp    -0x8(%rbp),%eax
je     132f <afficheBordureEntreCases+0x1ff>
mov    $0x2,%edi
call   1040 <epaisseurDeTrait@plt>
mov    $0x64,%edx
mov    %edx,%edi
mov    %edx,%esi
call   1050 <couleurCourante@plt>
movss  -0x28(%rbp),%xmm0
subss  -0x20(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    12fd <afficheBordureEntreCases+0x1cd>
jp     12fd <afficheBordureEntreCases+0x1cd>
movss  -0x1c(%rbp),%xmm0
addss  -0x2c(%rbp),%xmm0
movss  -0x20(%rbp),%xmm1
addss  -0x2c(%rbp),%xmm1
movss  -0x1c(%rbp),%xmm2
addss  -0x2c(%rbp),%xmm2
movss  -0x20(%rbp),%xmm3
subss  -0x2c(%rbp),%xmm3
call   1030 <ligne@plt>
jmp    132a <afficheBordureEntreCases+0x1fa>
movss  -0x1c(%rbp),%xmm0
addss  -0x2c(%rbp),%xmm0
movss  -0x20(%rbp),%xmm1
addss  -0x2c(%rbp),%xmm1
movss  -0x1c(%rbp),%xmm2
subss  -0x2c(%rbp),%xmm2
movss  -0x20(%rbp),%xmm3
addss  -0x2c(%rbp),%xmm3
call   1030 <ligne@plt>
jmp    132f <afficheBordureEntreCases+0x1ff>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<afficheBordureEntreCases>:
cmp    %esi,%edi
jne    1135 <afficheBordureEntreCases+0x5>
ret
sub    $0x48,%rsp
movaps %xmm0,(%rsp)
movaps (%rsp),%xmm4
cmpless %xmm2,%xmm4
movss  0xeb2(%rip),%xmm0
andps  %xmm0,%xmm4
movaps %xmm2,%xmm5
cmpltss (%rsp),%xmm5
andps  %xmm0,%xmm5
mulss  %xmm2,%xmm5
mulss  (%rsp),%xmm4
addss  %xmm5,%xmm4
movaps %xmm2,%xmm6
cmpless (%rsp),%xmm6
andps  %xmm0,%xmm6
mulss  (%rsp),%xmm6
movaps (%rsp),%xmm5
cmpltss %xmm2,%xmm5
movaps %xmm5,(%rsp)
movaps (%rsp),%xmm5
andps  %xmm0,%xmm5
movaps %xmm5,(%rsp)
movaps (%rsp),%xmm5
mulss  %xmm2,%xmm5
movaps %xmm5,(%rsp)
movaps (%rsp),%xmm2
addss  %xmm6,%xmm2
movaps %xmm2,(%rsp)
movaps %xmm1,%xmm5
cmpless %xmm3,%xmm5
andps  %xmm0,%xmm5
movaps %xmm3,%xmm2
cmpltss %xmm1,%xmm2
andps  %xmm0,%xmm2
mulss  %xmm3,%xmm2
mulss  %xmm1,%xmm5
addss  %xmm2,%xmm5
movaps %xmm5,0x20(%rsp)
movaps %xmm3,%xmm2
cmpless %xmm1,%xmm2
andps  %xmm0,%xmm2
mulss  %xmm1,%xmm2
cmpltss %xmm3,%xmm1
andps  %xmm0,%xmm1
mulss  %xmm3,%xmm1
addss  %xmm2,%xmm1
movaps %xmm1,0x10(%rsp)
movaps %xmm4,0x30(%rsp)
movaps (%rsp),%xmm0
subss  %xmm4,%xmm0
movaps %xmm0,(%rsp)
movaps (%rsp),%xmm0
addss  %xmm1,%xmm0
movaps %xmm0,(%rsp)
movaps (%rsp),%xmm0
subss  %xmm5,%xmm0
movaps %xmm0,(%rsp)
movaps (%rsp),%xmm0
mulss  0xdd9(%rip),%xmm0
movaps %xmm0,(%rsp)
mov    $0x2,%edi
call   1040 <epaisseurDeTrait@plt>
mov    $0x64,%edi
mov    $0x64,%esi
mov    $0x64,%edx
call   1050 <couleurCourante@plt>
movaps (%rsp),%xmm4
movaps 0x20(%rsp),%xmm1
movaps 0x10(%rsp),%xmm2
subss  %xmm1,%xmm2
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm2
movaps %xmm1,%xmm0
addss  %xmm4,%xmm1
movaps %xmm1,%xmm3
jne    127d <afficheBordureEntreCases+0x14d>
movaps %xmm1,%xmm3
jp     127d <afficheBordureEntreCases+0x14d>
subss  %xmm4,%xmm0
movaps %xmm0,%xmm3
movaps 0x30(%rsp),%xmm2
movaps %xmm2,%xmm0
addss  %xmm4,%xmm0
subss  %xmm4,%xmm2
lea    0x48(%rsp),%rsp
jne    1299 <afficheBordureEntreCases+0x169>
jp     1299 <afficheBordureEntreCases+0x169>
movaps %xmm0,%xmm2
jmp    1030 <ligne@plt>

LLVM IR (-O0):
define void @afficheBordureEntreCases(i32 %0, i32 %1, float %2, float %3, float %4, float %5) {
%7 = alloca i32
%8 = alloca i32
%9 = alloca float
%10 = alloca float
%11 = alloca float
%12 = alloca float
%13 = alloca float
%14 = alloca float
%15 = alloca float
%16 = alloca float
%17 = alloca float
store i32 %0, i32* %7
store i32 %1, i32* %8
store float %2, float* %9
store float %3, float* %10
store float %4, float* %11
store float %5, float* %12
%18 = load float, float* %9
%19 = load float, float* %11
%20 = fcmp ole float %18, %19
%21 = zext i1 %20 to i32
%22 = sitofp i32 %21 to float
%23 = load float, float* %9
%24 = load float, float* %11
%25 = load float, float* %9
%26 = fcmp olt float %24, %25
%27 = zext i1 %26 to i32
%28 = sitofp i32 %27 to float
%29 = load float, float* %11
%30 = fmul float %28, %29
%31 = call float @llvm.fmuladd.f32(float %22, float %23, float %30)
store float %31, float* %13
%32 = load float, float* %9
%33 = load float, float* %11
%34 = fcmp oge float %32, %33
%35 = zext i1 %34 to i32
%36 = sitofp i32 %35 to float
%37 = load float, float* %9
%38 = load float, float* %11
%39 = load float, float* %9
%40 = fcmp ogt float %38, %39
%41 = zext i1 %40 to i32
%42 = sitofp i32 %41 to float
%43 = load float, float* %11
%44 = fmul float %42, %43
%45 = call float @llvm.fmuladd.f32(float %36, float %37, float %44)
store float %45, float* %15
%46 = load float, float* %10
%47 = load float, float* %12
%48 = fcmp ole float %46, %47
%49 = zext i1 %48 to i32
%50 = sitofp i32 %49 to float
%51 = load float, float* %10
%52 = load float, float* %12
%53 = load float, float* %10
%54 = fcmp olt float %52, %53
%55 = zext i1 %54 to i32
%56 = sitofp i32 %55 to float
%57 = load float, float* %12
%58 = fmul float %56, %57
%59 = call float @llvm.fmuladd.f32(float %50, float %51, float %58)
store float %59, float* %14
%60 = load float, float* %10
%61 = load float, float* %12
%62 = fcmp oge float %60, %61
%63 = zext i1 %62 to i32
%64 = sitofp i32 %63 to float
%65 = load float, float* %10
%66 = load float, float* %12
%67 = load float, float* %10
%68 = fcmp ogt float %66, %67
%69 = zext i1 %68 to i32
%70 = sitofp i32 %69 to float
%71 = load float, float* %12
%72 = fmul float %70, %71
%73 = call float @llvm.fmuladd.f32(float %64, float %65, float %72)
store float %73, float* %16
%74 = load float, float* %15
%75 = load float, float* %13
%76 = fsub float %74, %75
%77 = load float, float* %16
%78 = fadd float %76, %77
%79 = load float, float* %14
%80 = fsub float %78, %79
%81 = fdiv float %80, 2.000000e+00
store float %81, float* %17
%82 = load i32, i32* %7
%83 = load i32, i32* %8
%84 = icmp ne i32 %82, %83
br i1 %84, label %85, label %121
85: ; preds = %6
%86 = call i32 @epaisseurDeTrait(i32 2)
%87 = call i32 @couleurCourante(i32 100, i32 100, i32 100)
%88 = load float, float* %16
%89 = load float, float* %14
%90 = fsub float %88, %89
%91 = fcmp oeq float %90, 0.000000e+00
br i1 %91, label %92, label %106
92: ; preds = %85
%93 = load float, float* %13
%94 = load float, float* %17
%95 = fadd float %93, %94
%96 = load float, float* %14
%97 = load float, float* %17
%98 = fadd float %96, %97
%99 = load float, float* %13
%100 = load float, float* %17
%101 = fadd float %99, %100
%102 = load float, float* %14
%103 = load float, float* %17
%104 = fsub float %102, %103
%105 = call i32 @ligne(float %95, float %98, float %101, float %104)
br label %120
106: ; preds = %85
%107 = load float, float* %13
%108 = load float, float* %17
%109 = fadd float %107, %108
%110 = load float, float* %14
%111 = load float, float* %17
%112 = fadd float %110, %111
%113 = load float, float* %13
%114 = load float, float* %17
%115 = fsub float %113, %114
%116 = load float, float* %14
%117 = load float, float* %17
%118 = fadd float %116, %117
%119 = call i32 @ligne(float %109, float %112, float %115, float %118)
br label %120
120: ; preds = %106, %92
br label %121
121: ; preds = %120, %6
ret void
}

LLVM IR (-O2):
define void @afficheBordureEntreCases(i32 %0, i32 %1, float %2, float %3, float %4, float %5) {
%7 = fcmp ole float %2, %4
%8 = uitofp i1 %7 to float
%9 = fcmp olt float %4, %2
%10 = uitofp i1 %9 to float
%11 = fmul float %10, %4
%12 = tail call float @llvm.fmuladd.f32(float %8, float %2, float %11)
%13 = fcmp oge float %2, %4
%14 = uitofp i1 %13 to float
%15 = fcmp ogt float %4, %2
%16 = uitofp i1 %15 to float
%17 = fmul float %16, %4
%18 = tail call float @llvm.fmuladd.f32(float %14, float %2, float %17)
%19 = fcmp ole float %3, %5
%20 = uitofp i1 %19 to float
%21 = fcmp olt float %5, %3
%22 = uitofp i1 %21 to float
%23 = fmul float %22, %5
%24 = tail call float @llvm.fmuladd.f32(float %20, float %3, float %23)
%25 = fcmp oge float %3, %5
%26 = uitofp i1 %25 to float
%27 = fcmp ogt float %5, %3
%28 = uitofp i1 %27 to float
%29 = fmul float %28, %5
%30 = tail call float @llvm.fmuladd.f32(float %26, float %3, float %29)
%31 = fsub float %18, %12
%32 = fadd float %31, %30
%33 = fsub float %32, %24
%34 = fmul float %33, 5.000000e-01
%35 = icmp eq i32 %0, %1
br i1 %35, label %48, label %36
36: ; preds = %6
%37 = tail call i32 @epaisseurDeTrait(i32 2)
%38 = tail call i32 @couleurCourante(i32 100, i32 100, i32 100)
%39 = fsub float %30, %24
%40 = fcmp oeq float %39, 0.000000e+00
%41 = fadd float %12, %34
%42 = fadd float %24, %34
%43 = fsub float %24, %34
%44 = fsub float %12, %34
%45 = select i1 %40, float %43, float %42
%46 = select i1 %40, float %41, float %44
%47 = tail call i32 @ligne(float %41, float %42, float %46, float %45)
br label %48
48: ; preds = %36, %6
ret void
}