Fixture 06
calling conventions
C · 17 functions · 4 lanes · 68 of 68 function-lanes behave identically
All 4 lanes recompile and return the same results as the original.
ABI / argument-recovery fixture. Each sum_argN takes N integer arguments and returns a DISTINCT linear combination of ALL of them (a0*1 + a1*2 + ...), so any recovery error — wrong argument order, a dropped stack argument, a register/stack mix-up — changes the result. Functions with 7..10 args force spills onto the stack under SysV (6 integer registers), and Win64 (4), exercising stack-argument recovery on multiple ABIs.
This file is meant to be compiled for MULTIPLE ABIs (SysV x86-64, Win64, x86-32 cdecl, AArch64 AAPCS64). The harness asserts argument order, return value, and stack-argument recovery are preserved end-to-end. All parameters are integer (int / long) and all returns are int, so every function is differential-testable and portable across those ABIs. No libc.
Targets review #7 (calling-convention / arg recovery).
/* 06_calling_conventions.c
*
* ABI / argument-recovery fixture. Each `sum_argN` takes N integer arguments
* and returns a DISTINCT linear combination of ALL of them (a0*1 + a1*2 + ...),
* so any recovery error — wrong argument order, a dropped stack argument, a
* register/stack mix-up — changes the result. Functions with 7..10 args force
* spills onto the stack under SysV (6 integer registers), and Win64 (4),
* exercising stack-argument recovery on multiple ABIs.
*
* This file is meant to be compiled for MULTIPLE ABIs (SysV x86-64, Win64,
* x86-32 cdecl, AArch64 AAPCS64). The harness asserts argument order, return
* value, and stack-argument recovery are preserved end-to-end. All parameters
* are integer (int / long) and all returns are int, so every function is
* differential-testable and portable across those ABIs. No libc.
*
* Targets review #7 (calling-convention / arg recovery).
*/
#include <stdint.h>
/* 0 arguments: a fixed sentinel — verifies "no args" isn't misread as "some". */
int sum_arg0(void) {
return 7;
}
/* 1 argument. */
int sum_arg1(int a0) {
return a0 * 1 + 1;
}
/* 2 arguments. */
int sum_arg2(int a0, int a1) {
return a0 * 1 + a1 * 2 + 2;
}
/* 3 arguments. */
int sum_arg3(int a0, int a1, int a2) {
return a0 * 1 + a1 * 2 + a2 * 3 + 3;
}
/* 4 arguments (Win64 register boundary is here). */
int sum_arg4(int a0, int a1, int a2, int a3) {
return a0 * 1 + a1 * 2 + a2 * 3 + a3 * 4 + 4;
}
/* 5 arguments. */
int sum_arg5(int a0, int a1, int a2, int a3, int a4) {
return a0 * 1 + a1 * 2 + a2 * 3 + a3 * 4 + a4 * 5 + 5;
}
/* 6 arguments (SysV integer-register boundary is here). */
int sum_arg6(int a0, int a1, int a2, int a3, int a4, int a5) {
return a0 * 1 + a1 * 2 + a2 * 3 + a3 * 4 + a4 * 5 + a5 * 6 + 6;
}
/* 7 arguments — a6 spills to the stack on SysV. */
int sum_arg7(int a0, int a1, int a2, int a3, int a4, int a5, int a6) {
return a0 * 1 + a1 * 2 + a2 * 3 + a3 * 4 + a4 * 5 + a5 * 6 + a6 * 7 + 7;
}
/* 8 arguments — a6,a7 spill on SysV. */
int sum_arg8(int a0, int a1, int a2, int a3, int a4, int a5, int a6, int a7) {
return a0 * 1 + a1 * 2 + a2 * 3 + a3 * 4 + a4 * 5 + a5 * 6 + a6 * 7 +
a7 * 8 + 8;
}
/* 9 arguments — three stack args on SysV. */
int sum_arg9(int a0, int a1, int a2, int a3, int a4, int a5, int a6, int a7,
int a8) {
return a0 * 1 + a1 * 2 + a2 * 3 + a3 * 4 + a4 * 5 + a5 * 6 + a6 * 7 +
a7 * 8 + a8 * 9 + 9;
}
/* 10 arguments — four stack args on SysV. A dropped or reordered stack slot
* changes the weighted sum. */
int sum_arg10(int a0, int a1, int a2, int a3, int a4, int a5, int a6, int a7,
int a8, int a9) {
return a0 * 1 + a1 * 2 + a2 * 3 + a3 * 4 + a4 * 5 + a5 * 6 + a6 * 7 +
a7 * 8 + a8 * 9 + a9 * 10 + 10;
}
/* Mixed int/long widths in the stack-spill region: exercises slot sizing on
* ABIs where `long` differs from `int`. Still integer-only and portable. */
int sum_mixed_widths(int a0, long a1, int a2, long a3, int a4, long a5,
int a6, long a7) {
long acc = (long)a0 * 1 + a1 * 2 + (long)a2 * 3 + a3 * 4 + (long)a4 * 5 +
a5 * 6 + (long)a6 * 7 + a7 * 8;
return (int)(acc + 88);
}
/* Recursive: iterative-safe factorial modulo a bound so the return stays a
* small int and callers can drive it with any nonnegative n. Recursion
* stresses prologue/epilogue and saved-register recovery. */
int fact_mod(int n) {
if (n <= 1)
return 1;
return (int)(((long)n * fact_mod(n - 1)) % 1000000007L);
}
/* Recursive Fibonacci — a second, differently-shaped recursion. */
int fib(int n) {
if (n < 0)
return -1;
if (n < 2)
return n;
return fib(n - 1) + fib(n - 2);
}
/* Tail-call: returns the callee's result directly. A compiler may turn this
* into a jump (tail-call optimization); the harness asserts the observed
* return still matches sum_arg4's contract. */
int tailcall_to_sum4(int a0, int a1, int a2, int a3) {
return sum_arg4(a3, a2, a1, a0); /* deliberately reversed to catch order */
}
/* Another tail position: forward the same args through, so a correct decompile
* preserves both the call and its argument order. */
int forward_sum6(int a0, int a1, int a2, int a3, int a4, int a5) {
return sum_arg6(a0, a1, a2, a3, a4, a5);
}
/* "noreturn-style" loop, but guarded so tests can safely avoid the hot path.
* The loop only runs when `spin` is nonzero; the harness always passes 0, so
* the function returns immediately. The unreachable-by-test loop still forces
* the decompiler to structure a potentially-infinite region. */
int guarded_spin(int spin, int seed) {
if (spin) {
volatile int x = seed | 1; /* nonzero */
while (x) {
x += 1; /* never reaches 0 in practice */
}
return x; /* unreachable in tests */
}
return seed + 5; /* the path the harness exercises */
} Recovered C
Generated by glaurung decompile --style decbench at b47f6b43.
baseline.json records the result after recompiling the C and calling it beside the
original with seeded inputs.
clang -O0
17/17fact_mod pass 15 lines
// glaurung: fact_mod @ 0x14b0
int fact_mod(int arg0) {
long local_10;
long var3;
long var8;
// x86-64 prologue: save rbp, frame 16 bytes
if (((((unsigned long)((unsigned int)(arg0)) == 1) | ((long)(arg0) < 1)) == 0)) {
local_10 = arg0;
var3 = ((long (*)(long))fact_mod)((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - 1))));
var8 = (local_10 * (long)((int)(var3)));
return (unsigned int)(((long)((((__int128)(long)(((long)(var8) >> 63)) * (((__int128)1) << 64)) + (unsigned long)(var8)) % (long)(0x3b9aca07))));
} else {
return 1;
}
} fib pass 19 lines
// glaurung: fib @ 0x1510
int fib(int arg0) {
int local_c;
long var2;
long var6;
// x86-64 prologue: save rbp, frame 16 bytes
if ((0 <= (long)(arg0))) {
if ((2 <= (long)(arg0))) {
var2 = ((long (*)(long))fib)((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - 1))));
local_c = var2;
var6 = ((long (*)(long))fib)((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - 2))));
return (unsigned int)(((unsigned long)((unsigned int)(local_c)) + (unsigned long)((unsigned int)(var6))));
} else {
return (unsigned int)(arg0);
}
} else {
return (unsigned int)(-1);
}
} forward_sum6 pass 9 lines
// glaurung: forward_sum6 @ 0x15b0
int forward_sum6(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5) {
extern int sum_arg6(int, int, int, int, int, int);
int ret;
// x86-64 prologue: save rbp, frame 32 bytes
ret = ((int (*)(long, long, long, long, long, long))sum_arg6)((unsigned long)((unsigned int)(arg0)), (unsigned long)((unsigned int)(arg1)), (unsigned long)((unsigned int)(arg2)), (unsigned long)((unsigned int)(arg3)), (unsigned long)((unsigned int)(arg4)), (unsigned long)((unsigned int)(arg5)));
// x86-64 epilogue: restore rbp
return ret;
} guarded_spin pass 12 lines
// glaurung: guarded_spin @ 0x15f0
int guarded_spin(int arg0, int arg1) {
int x;
// x86-64 prologue: save rbp
if (((unsigned long)((unsigned int)(arg0)) == 0)) {
return (unsigned int)(((unsigned long)((unsigned int)(arg1)) + 5));
} else {
for (x = ((unsigned int)(arg1) | 1); ((unsigned long)((unsigned int)(x)) != 0); x++) {
}
return (unsigned int)(x);
}
} sum_arg0 pass 6 lines
// glaurung: sum_arg0 @ 0x1140
int sum_arg0(void) {
// x86-64 prologue: save rbp
// x86-64 epilogue: restore rbp
return 7;
} sum_arg1 pass 6 lines
// glaurung: sum_arg1 @ 0x1150
int sum_arg1(int arg0) {
// x86-64 prologue: save rbp
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(arg0)) + 1));
} sum_arg10 pass 6 lines
// glaurung: sum_arg10 @ 0x13b0
int sum_arg10(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, int arg9) {
// x86-64 prologue: save rbp
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) << 1)))))) + (arg2 * 3)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg3)) << 2)))))) + (arg4 * 5)))) + (arg5 * 6)))) + (arg6 * 7)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg7)) << 3)))))) + (arg8 * 9)))) + (arg9 * 10)))) + 10));
} sum_arg2 pass 6 lines
// glaurung: sum_arg2 @ 0x1170
int sum_arg2(int arg0, int arg1) {
// x86-64 prologue: save rbp
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) << 1)))))) + 2));
} sum_arg3 pass 6 lines
// glaurung: sum_arg3 @ 0x1190
int sum_arg3(int arg0, int arg1, int arg2) {
// x86-64 prologue: save rbp
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) << 1)))))) + (arg2 * 3)))) + 3));
} sum_arg4 pass 6 lines
// glaurung: sum_arg4 @ 0x11c0
int sum_arg4(int arg0, int arg1, int arg2, int arg3) {
// x86-64 prologue: save rbp
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) << 1)))))) + (arg2 * 3)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg3)) << 2)))))) + 4));
} sum_arg5 pass 6 lines
// glaurung: sum_arg5 @ 0x1200
int sum_arg5(int arg0, int arg1, int arg2, int arg3, int arg4) {
// x86-64 prologue: save rbp
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) << 1)))))) + (arg2 * 3)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg3)) << 2)))))) + (arg4 * 5)))) + 5));
} sum_arg6 pass 6 lines
// glaurung: sum_arg6 @ 0x1240
int sum_arg6(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5) {
// x86-64 prologue: save rbp
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) << 1)))))) + (arg2 * 3)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg3)) << 2)))))) + (arg4 * 5)))) + (arg5 * 6)))) + 6));
} sum_arg7 pass 6 lines
// glaurung: sum_arg7 @ 0x1290
int sum_arg7(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6) {
// x86-64 prologue: save rbp
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) << 1)))))) + (arg2 * 3)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg3)) << 2)))))) + (arg4 * 5)))) + (arg5 * 6)))) + (arg6 * 7)))) + 7));
} sum_arg8 pass 6 lines
// glaurung: sum_arg8 @ 0x12e0
int sum_arg8(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7) {
// x86-64 prologue: save rbp
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) << 1)))))) + (arg2 * 3)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg3)) << 2)))))) + (arg4 * 5)))) + (arg5 * 6)))) + (arg6 * 7)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg7)) << 3)))))) + 8));
} sum_arg9 pass 6 lines
// glaurung: sum_arg9 @ 0x1340
int sum_arg9(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8) {
// x86-64 prologue: save rbp
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) << 1)))))) + (arg2 * 3)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg3)) << 2)))))) + (arg4 * 5)))) + (arg5 * 6)))) + (arg6 * 7)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg7)) << 3)))))) + (arg8 * 9)))) + 9));
} sum_mixed_widths pass 8 lines
// glaurung: sum_mixed_widths @ 0x1420
int sum_mixed_widths(int arg0, long arg1, int arg2, long arg3, int arg4, long arg5, int arg6, long arg7) {
long acc;
// x86-64 prologue: save rbp
acc = ((((((((long)(arg0) + (arg1 << 1)) + ((long)(arg2) * 3)) + (arg3 << 2)) + ((long)(arg4) * 5)) + (arg5 * 6)) + ((long)(arg6) * 7)) + (arg7 << 3));
// x86-64 epilogue: restore rbp
return (acc + 88);
} tailcall_to_sum4 pass 9 lines
// glaurung: tailcall_to_sum4 @ 0x1580
int tailcall_to_sum4(int arg0, int arg1, int arg2, int arg3) {
extern int sum_arg4(int, int, int, int);
int ret;
// x86-64 prologue: save rbp, frame 16 bytes
ret = ((int (*)(long, long, long, long))sum_arg4)((unsigned long)((unsigned int)(arg3)), (unsigned long)((unsigned int)(arg2)), (unsigned long)((unsigned int)(arg1)), (unsigned long)((unsigned int)(arg0)));
// x86-64 epilogue: restore rbp
return ret;
} clang -O2
17/17fact_mod pass 18 lines
// glaurung: fact_mod @ 0x1310
int fact_mod(int arg0) {
long local_8;
long var0;
long var1;
long var2;
long var4;
long var7;
var0 = 1;
if (((((unsigned long)((unsigned int)(arg0)) == 1) | ((long)(arg0) < 1)) == 0)) {
local_8 = var1;
var2 = (unsigned long)((unsigned int)(arg0));
var4 = ((long (*)(long))fact_mod)((unsigned long)((unsigned int)((arg0 - 1))));
var7 = ((unsigned long)((unsigned int)(var4)) * var2);
var0 = (unsigned long)((unsigned int)((var7 - (((unsigned long)(((unsigned long)(((unsigned __int128)(unsigned long)(var7) * (unsigned __int128)(unsigned long)(-0x768fa0ceed5d701bLL)) >> 64))) >> 29) * 0x3b9aca07))));
}
return (unsigned int)(var0);
} fib pass 31 lines
// glaurung: fib @ 0x1350
int fib(int arg0) {
long var1;
int var10;
long var3;
long var4;
long var6;
long var7;
int var9;
// x86-64 prologue: save callee registers, frame 24 bytes
if (((long)(arg0) < 0)) {
return 0xffffffff;
} else {
var1 = (unsigned long)((unsigned int)(arg0));
var3 = 0;
var4 = (unsigned long)((unsigned int)(arg0));
if (((unsigned long)(2) <= (unsigned long)((unsigned long)((unsigned int)(arg0))))) {
var6 = 0;
do {
var7 = ((long (*)(long))fib)((unsigned long)((unsigned int)((var1 - 1))));
var9 = (var1 - 2);
var1 = (unsigned long)((unsigned int)(var9));
var10 = (var6 + var7);
var6 = (unsigned long)((unsigned int)(var10));
var3 = (unsigned long)((unsigned int)(var10));
var4 = (unsigned long)((unsigned int)(var9));
} while (((unsigned long)(1) < (unsigned long)((unsigned long)((unsigned int)(var9)))));
}
return (unsigned int)((var4 + var3));
}
} forward_sum6 pass 4 lines
// glaurung: forward_sum6 @ 0x13b0
int forward_sum6(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5) {
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((arg0 + (arg1 * 2)))) + (unsigned long)((unsigned int)((arg2 + (arg2 * 2))))))) + (arg3 * 4)))) + (unsigned long)((unsigned int)((arg4 + (arg4 * 4))))))) + ((unsigned long)((unsigned int)((arg5 + (arg5 * 2)))) * 2)))) + 6));
} guarded_spin pass 16 lines
// glaurung: guarded_spin @ 0x13d0
int guarded_spin(int arg0, int arg1) {
int local_4;
long var0;
var0 = (unsigned long)((unsigned int)(arg1));
if (((unsigned long)((unsigned int)(arg0)) == 0)) {
return (unsigned int)((var0 + 5));
}
local_4 = ((unsigned int)(arg1) | 1);
if (((unsigned long)((unsigned int)(local_4)) != 0)) {
while (((unsigned long)((unsigned int)(local_4)) != 0)) {
local_4 = (local_4 + 1);
}
}
return (unsigned int)(local_4);
} sum_arg0 pass 4 lines
// glaurung: sum_arg0 @ 0x1120
int sum_arg0(void) {
return 7;
} sum_arg1 pass 4 lines
// glaurung: sum_arg1 @ 0x1130
int sum_arg1(int arg0) {
return (unsigned int)((arg0 + 1));
} sum_arg10 pass 5 lines
// glaurung: sum_arg10 @ 0x1270
int sum_arg10(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, int arg9) {
// x86-64 epilogue: tear down frame
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((arg0 + (arg1 * 2)))) + (unsigned long)((unsigned int)((arg2 + (arg2 * 2))))))) + (arg3 * 4)))) + (unsigned long)((unsigned int)((arg4 + (arg4 * 4))))))) + ((unsigned long)((unsigned int)((arg5 + (arg5 * 2)))) * 2)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg6)) * 8))) - (unsigned long)((unsigned int)(arg6)))))))) + ((unsigned long)((unsigned int)(arg7)) * 8)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg8)) + ((unsigned long)((unsigned int)(arg8)) * 8))))))) + ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg9)) + ((unsigned long)((unsigned int)(arg9)) * 4)))) * 2)))) + 10));
} sum_arg2 pass 4 lines
// glaurung: sum_arg2 @ 0x1140
int sum_arg2(int arg0, int arg1) {
return (unsigned int)(((unsigned long)((unsigned int)((arg0 + (arg1 * 2)))) + 2));
} sum_arg3 pass 4 lines
// glaurung: sum_arg3 @ 0x1150
int sum_arg3(int arg0, int arg1, int arg2) {
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((arg2 + (arg2 * 2)))) + (unsigned long)((unsigned int)((arg0 + (arg1 * 2))))))) + 3));
} sum_arg4 pass 4 lines
// glaurung: sum_arg4 @ 0x1160
int sum_arg4(int arg0, int arg1, int arg2, int arg3) {
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((arg0 + (arg1 * 2)))) + (unsigned long)((unsigned int)((arg2 + (arg2 * 2))))))) + (arg3 * 4)))) + 4));
} sum_arg5 pass 4 lines
// glaurung: sum_arg5 @ 0x1170
int sum_arg5(int arg0, int arg1, int arg2, int arg3, int arg4) {
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((arg0 + (arg1 * 2)))) + (unsigned long)((unsigned int)((arg2 + (arg2 * 2))))))) + (arg3 * 4)))) + (unsigned long)((unsigned int)((arg4 + (arg4 * 4))))))) + 5));
} sum_arg6 pass 4 lines
// glaurung: sum_arg6 @ 0x1190
int sum_arg6(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5) {
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((arg0 + (arg1 * 2)))) + (unsigned long)((unsigned int)((arg2 + (arg2 * 2))))))) + (arg3 * 4)))) + (unsigned long)((unsigned int)((arg4 + (arg4 * 4))))))) + ((unsigned long)((unsigned int)((arg5 + (arg5 * 2)))) * 2)))) + 6));
} sum_arg7 pass 4 lines
// glaurung: sum_arg7 @ 0x11b0
int sum_arg7(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6) {
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg6)) * 8))) - (unsigned long)((unsigned int)(arg6))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((arg0 + (arg1 * 2)))) + (unsigned long)((unsigned int)((arg2 + (arg2 * 2))))))) + (arg3 * 4)))) + (unsigned long)((unsigned int)((arg4 + (arg4 * 4))))))) + ((unsigned long)((unsigned int)((arg5 + (arg5 * 2)))) * 2))))))) + 7));
} sum_arg8 pass 5 lines
// glaurung: sum_arg8 @ 0x11e0
int sum_arg8(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7) {
// x86-64 epilogue: tear down frame
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((arg0 + (arg1 * 2)))) + (unsigned long)((unsigned int)((arg2 + (arg2 * 2))))))) + (arg3 * 4)))) + (unsigned long)((unsigned int)((arg4 + (arg4 * 4))))))) + ((unsigned long)((unsigned int)((arg5 + (arg5 * 2)))) * 2)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg6)) * 8))) - (unsigned long)((unsigned int)(arg6)))))))) + ((unsigned long)((unsigned int)(arg7)) * 8)))) + 8));
} sum_arg9 pass 5 lines
// glaurung: sum_arg9 @ 0x1220
int sum_arg9(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8) {
// x86-64 epilogue: tear down frame
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((arg0 + (arg1 * 2)))) + (unsigned long)((unsigned int)((arg2 + (arg2 * 2))))))) + (arg3 * 4)))) + (unsigned long)((unsigned int)((arg4 + (arg4 * 4))))))) + ((unsigned long)((unsigned int)((arg5 + (arg5 * 2)))) * 2)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg6)) * 8))) - (unsigned long)((unsigned int)(arg6)))))))) + ((unsigned long)((unsigned int)(arg7)) * 8)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg8)) + ((unsigned long)((unsigned int)(arg8)) * 8))))))) + 9));
} sum_mixed_widths pass 4 lines
// glaurung: sum_mixed_widths @ 0x12d0
int sum_mixed_widths(int arg0, long arg1, int arg2, long arg3, int arg4, long arg5, int arg6, long arg7) {
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg6)) * 8))) - (unsigned long)((unsigned int)(arg6))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((arg4 + (arg4 * 4)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((arg2 + (arg2 * 2)))) + (unsigned long)((unsigned int)((arg0 + (arg1 * 2))))))) + (arg3 * 4))))))) + ((unsigned long)((unsigned int)((arg5 + (arg5 * 2)))) * 2))))))) + ((unsigned long)((unsigned int)(arg7)) * 8)))) + 88));
} tailcall_to_sum4 pass 4 lines
// glaurung: tailcall_to_sum4 @ 0x13a0
int tailcall_to_sum4(int arg0, int arg1, int arg2, int arg3) {
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((arg1 + (arg1 * 2)))) + (arg0 * 4)))) + arg3))) + (arg2 * 2)))) + 4));
} gcc -O0
17/17fact_mod pass 15 lines
// glaurung: fact_mod @ 0x1503
int fact_mod(int arg0) {
long var1;
long var5;
long var9;
// x86-64 prologue: save rbp, frame 8 bytes
if (((((unsigned long)((unsigned int)(arg0)) == 1) | ((long)(arg0) < 1)) == 0)) {
var1 = (long)(arg0);
var5 = ((long (*)(long))fact_mod)((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - 1))));
var9 = (var1 * (long)((int)(var5)));
return (var9 - ((((long)((((long)(((unsigned __int128)((__int128)(long)(var9) * (__int128)(long)(-0x768fa0ceed5d701bLL))) >> 64)) + var9)) >> 29) - ((long)(var9) >> 63)) * 0x3b9aca07));
} else {
return 1;
}
} fib pass 19 lines
// glaurung: fib @ 0x1571
int fib(int arg0) {
long var3;
long var5;
long var9;
// x86-64 prologue: save rbp, frame 8 bytes
if ((0 <= (long)(arg0))) {
if (((((unsigned long)((unsigned int)(arg0)) == 1) | ((long)(arg0) < 1)) == 0)) {
var3 = ((long (*)(long))fib)((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - 1))));
var5 = (unsigned long)((unsigned int)(var3));
var9 = ((long (*)(long))fib)((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - 2))));
return (unsigned int)((var9 + var5));
} else {
return (unsigned int)(arg0);
}
} else {
return 0xffffffff;
}
} forward_sum6 pass 9 lines
// glaurung: forward_sum6 @ 0x15ea
int forward_sum6(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5) {
extern int sum_arg6(int, int, int, int, int, int);
int ret;
// x86-64 prologue: save rbp, frame 32 bytes
ret = ((int (*)(long, long, long, long, long, long))sum_arg6)((unsigned long)((unsigned int)(arg0)), (unsigned long)((unsigned int)(arg1)), (unsigned long)((unsigned int)(arg2)), (unsigned long)((unsigned int)(arg3)), (unsigned long)((unsigned int)(arg4)), (unsigned long)((unsigned int)(arg5)));
// x86-64 epilogue: restore rbp
return ret;
} guarded_spin pass 12 lines
// glaurung: guarded_spin @ 0x162c
int guarded_spin(int arg0, int arg1) {
int x;
// x86-64 prologue: save rbp
if (((unsigned long)((unsigned int)(arg0)) == 0)) {
return (unsigned int)(((unsigned long)((unsigned int)(arg1)) + 5));
} else {
for (x = ((unsigned int)(arg1) | 1); ((unsigned long)((unsigned int)(x)) != 0); x++) {
}
return (unsigned int)(x);
}
} sum_arg0 pass 6 lines
// glaurung: sum_arg0 @ 0x1139
int sum_arg0(void) {
// x86-64 prologue: save rbp
// x86-64 epilogue: restore rbp
return 7;
} sum_arg1 pass 6 lines
// glaurung: sum_arg1 @ 0x1148
int sum_arg1(int arg0) {
// x86-64 prologue: save rbp
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(arg0)) + 1));
} sum_arg10 pass 10 lines
// glaurung: sum_arg10 @ 0x13d8
int sum_arg10(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, int arg9) {
int var27;
int var56;
// x86-64 prologue: save rbp
var27 = ((unsigned int)(((unsigned long)((unsigned int)(arg5)) + (unsigned long)((unsigned int)(arg5)))) + (unsigned int)(arg5));
var56 = ((unsigned int)(((unsigned long)((unsigned int)(arg9)) << 2)) + (unsigned int)(arg9));
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var56)) + (unsigned long)((unsigned int)(var56))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) + (unsigned long)((unsigned int)(arg1))))) + (unsigned long)((unsigned int)(arg0))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg2)) + (unsigned long)((unsigned int)(arg2))))) + (unsigned long)((unsigned int)(arg2)))))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg3)) << 2)))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg4)) << 2))) + (unsigned long)((unsigned int)(arg4)))))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var27)) + (unsigned long)((unsigned int)(var27)))))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg6)) << 3))) - (unsigned long)((unsigned int)(arg6)))))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg7)) << 3)))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg8)) << 3))) + (unsigned long)((unsigned int)(arg8))))))))))) + 10));
} sum_arg2 pass 6 lines
// glaurung: sum_arg2 @ 0x115b
int sum_arg2(int arg0, int arg1) {
// x86-64 prologue: save rbp
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) + (unsigned long)((unsigned int)(arg1)))))))) + 2));
} sum_arg3 pass 6 lines
// glaurung: sum_arg3 @ 0x1179
int sum_arg3(int arg0, int arg1, int arg2) {
// x86-64 prologue: save rbp
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg2)) + (unsigned long)((unsigned int)(arg2))))) + (unsigned long)((unsigned int)(arg2))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) + (unsigned long)((unsigned int)(arg1))))) + (unsigned long)((unsigned int)(arg0)))))))) + 3));
} sum_arg4 pass 6 lines
// glaurung: sum_arg4 @ 0x11a6
int sum_arg4(int arg0, int arg1, int arg2, int arg3) {
// x86-64 prologue: save rbp
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg3)) << 2))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) + (unsigned long)((unsigned int)(arg1))))) + (unsigned long)((unsigned int)(arg0))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg2)) + (unsigned long)((unsigned int)(arg2))))) + (unsigned long)((unsigned int)(arg2))))))))))) + 4));
} sum_arg5 pass 6 lines
// glaurung: sum_arg5 @ 0x11df
int sum_arg5(int arg0, int arg1, int arg2, int arg3, int arg4) {
// x86-64 prologue: save rbp
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg4)) << 2))) + (unsigned long)((unsigned int)(arg4))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) + (unsigned long)((unsigned int)(arg1))))) + (unsigned long)((unsigned int)(arg0))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg2)) + (unsigned long)((unsigned int)(arg2))))) + (unsigned long)((unsigned int)(arg2)))))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg3)) << 2))))))))) + 5));
} sum_arg6 pass 8 lines
// glaurung: sum_arg6 @ 0x1229
int sum_arg6(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5) {
int var27;
// x86-64 prologue: save rbp
var27 = ((unsigned int)(((unsigned long)((unsigned int)(arg5)) + (unsigned long)((unsigned int)(arg5)))) + (unsigned int)(arg5));
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var27)) + (unsigned long)((unsigned int)(var27))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) + (unsigned long)((unsigned int)(arg1))))) + (unsigned long)((unsigned int)(arg0))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg2)) + (unsigned long)((unsigned int)(arg2))))) + (unsigned long)((unsigned int)(arg2)))))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg3)) << 2)))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg4)) << 2))) + (unsigned long)((unsigned int)(arg4))))))))))) + 6));
} sum_arg7 pass 8 lines
// glaurung: sum_arg7 @ 0x1284
int sum_arg7(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6) {
int var27;
// x86-64 prologue: save rbp
var27 = ((unsigned int)(((unsigned long)((unsigned int)(arg5)) + (unsigned long)((unsigned int)(arg5)))) + (unsigned int)(arg5));
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg6)) << 3))) - (unsigned long)((unsigned int)(arg6))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) + (unsigned long)((unsigned int)(arg1))))) + (unsigned long)((unsigned int)(arg0))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg2)) + (unsigned long)((unsigned int)(arg2))))) + (unsigned long)((unsigned int)(arg2)))))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg3)) << 2)))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg4)) << 2))) + (unsigned long)((unsigned int)(arg4)))))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var27)) + (unsigned long)((unsigned int)(var27))))))))))) + 7));
} sum_arg8 pass 8 lines
// glaurung: sum_arg8 @ 0x12eb
int sum_arg8(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7) {
int var27;
// x86-64 prologue: save rbp
var27 = ((unsigned int)(((unsigned long)((unsigned int)(arg5)) + (unsigned long)((unsigned int)(arg5)))) + (unsigned int)(arg5));
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg7)) << 3))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) + (unsigned long)((unsigned int)(arg1))))) + (unsigned long)((unsigned int)(arg0))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg2)) + (unsigned long)((unsigned int)(arg2))))) + (unsigned long)((unsigned int)(arg2)))))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg3)) << 2)))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg4)) << 2))) + (unsigned long)((unsigned int)(arg4)))))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var27)) + (unsigned long)((unsigned int)(var27)))))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg6)) << 3))) - (unsigned long)((unsigned int)(arg6))))))))))) + 8));
} sum_arg9 pass 8 lines
// glaurung: sum_arg9 @ 0x135b
int sum_arg9(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8) {
int var27;
// x86-64 prologue: save rbp
var27 = ((unsigned int)(((unsigned long)((unsigned int)(arg5)) + (unsigned long)((unsigned int)(arg5)))) + (unsigned int)(arg5));
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg8)) << 3))) + (unsigned long)((unsigned int)(arg8))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) + (unsigned long)((unsigned int)(arg1))))) + (unsigned long)((unsigned int)(arg0))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg2)) + (unsigned long)((unsigned int)(arg2))))) + (unsigned long)((unsigned int)(arg2)))))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg3)) << 2)))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg4)) << 2))) + (unsigned long)((unsigned int)(arg4)))))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var27)) + (unsigned long)((unsigned int)(var27)))))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg6)) << 3))) - (unsigned long)((unsigned int)(arg6)))))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg7)) << 3))))))))) + 9));
} sum_mixed_widths pass 10 lines
// glaurung: sum_mixed_widths @ 0x1463
int sum_mixed_widths(int arg0, long int arg1, int arg2, long int arg3, int arg4, long int arg5, int arg6, long int arg7) {
long acc;
long var23;
// x86-64 prologue: save rbp
var23 = ((arg5 + arg5) + arg5);
acc = ((arg7 << 3) + (((((((long)(arg0) + (arg1 + arg1)) + (((long)(arg2) + (long)(arg2)) + (long)(arg2))) + (arg3 << 2)) + (((long)(arg4) << 2) + (long)(arg4))) + (var23 + var23)) + (((long)(arg6) << 3) - (long)(arg6))));
// x86-64 epilogue: restore rbp
return (unsigned int)((acc + 88));
} tailcall_to_sum4 pass 9 lines
// glaurung: tailcall_to_sum4 @ 0x15bd
int tailcall_to_sum4(int arg0, int arg1, int arg2, int arg3) {
extern int sum_arg4(int, int, int, int);
int ret;
// x86-64 prologue: save rbp, frame 16 bytes
ret = ((int (*)(long, long, long, long))sum_arg4)((unsigned long)((unsigned int)(arg3)), (unsigned long)((unsigned int)(arg2)), (unsigned long)((unsigned int)(arg1)), (unsigned long)((unsigned int)(arg0)));
// x86-64 epilogue: restore rbp
return ret;
} gcc -O2
17/17fact_mod pass 73 lines
// glaurung: fact_mod @ 0x1360
int fact_mod(int arg0) {
long local_10;
long local_18;
long local_28;
long local_8;
long var0;
long var1;
long var11;
long var12;
long var13;
long var14;
long var18;
long var2;
int var22;
long var23;
long var24;
long var25;
long var26;
long var27;
long var28;
long var3;
long var30;
long var35;
long var4;
long var5;
long var9;
if ((((unsigned long)((unsigned int)(arg0)) == 1) | ((long)(arg0) < 1))) {
return 1;
}
local_8 = var0;
local_10 = var1;
local_18 = var2;
var3 = (unsigned long)((unsigned int)((arg0 - 1)));
local_28 = var4;
var5 = (long)(arg0);
if (((unsigned long)((unsigned int)(arg0)) == 2)) {
var9 = ((long)(((unsigned __int128)((__int128)(long)(var5) * (__int128)(long)(-0x768fa0ceed5d701bLL))) >> 64));
var11 = ((long)(var5) >> 63);
var12 = (var9 + var5);
var13 = ((long)(var12) >> 29);
var14 = (var13 - var11);
var18 = (var14 * 0x3b9aca07);
var22 = ((unsigned int)(var5) - var18);
return (unsigned int)(var22);
}
var23 = (long)((int)(var3));
var24 = (unsigned long)((unsigned int)((arg0 - 2)));
if (((unsigned long)((unsigned int)(arg0)) != 3)) {
var25 = (long)((int)(var24));
var26 = (unsigned long)((unsigned int)((arg0 - 3)));
if (((unsigned long)((unsigned int)(arg0)) != 4)) {
var27 = (long)((int)(var26));
var28 = (unsigned long)((unsigned int)((arg0 - 4)));
if (((unsigned long)((unsigned int)(arg0)) != 5)) {
var30 = ((long (*)(long))fact_mod)((unsigned long)((unsigned int)((arg0 - 5))));
var35 = ((long)((int)(var28)) * (long)((int)(var30)));
var27 = (var27 * (var35 - ((((long)((((long)(((unsigned __int128)((__int128)(long)(var35) * (__int128)(long)(-0x768fa0ceed5d701bLL))) >> 64)) + var35)) >> 29) - ((long)(var35) >> 63)) * 0x3b9aca07)));
}
var25 = (var25 * (var27 - ((((long)((((long)(((unsigned __int128)((__int128)(long)(var27) * (__int128)(long)(-0x768fa0ceed5d701bLL))) >> 64)) + var27)) >> 29) - ((long)(var27) >> 63)) * 0x3b9aca07)));
}
var23 = (var23 * (var25 - ((((long)((((long)(((unsigned __int128)((__int128)(long)(var25) * (__int128)(long)(-0x768fa0ceed5d701bLL))) >> 64)) + var25)) >> 29) - ((long)(var25) >> 63)) * 0x3b9aca07)));
}
var5 = (var5 * (var23 - ((((long)((((long)(((unsigned __int128)((__int128)(long)(var23) * (__int128)(long)(-0x768fa0ceed5d701bLL))) >> 64)) + var23)) >> 29) - ((long)(var23) >> 63)) * 0x3b9aca07)));
var9 = ((long)(((unsigned __int128)((__int128)(long)(var5) * (__int128)(long)(-0x768fa0ceed5d701bLL))) >> 64));
var11 = ((long)(var5) >> 63);
var12 = (var9 + var5);
var13 = ((long)(var12) >> 29);
var14 = (var13 - var11);
var18 = (var14 * 0x3b9aca07);
var22 = ((unsigned int)(var5) - var18);
return (unsigned int)(var22);
} fib pass 216 lines
// glaurung: fib @ 0x14c0
int fib(int arg0) {
int local_3c;
int local_40;
int local_44;
int local_48;
int local_4c;
int local_50;
int local_54;
int local_58;
int local_5c;
int local_60;
int local_68;
int local_6c;
int local_70;
int local_74;
long var0;
long var1;
long var10;
long var12;
long var16;
long var17;
long var18;
long var21;
long var22;
long var23;
long var24;
long var28;
long var29;
long var33;
long var34;
long var35;
long var37;
long var39;
long var51;
long var58;
long var6;
long var66;
long var7;
long var73;
long var79;
long var8;
long var85;
long var9;
long var91;
if (((long)(arg0) < 0)) {
var0 = 0xffffffff;
return 0xffffffff;
}
var0 = (unsigned long)((unsigned int)(arg0));
if ((((unsigned long)((unsigned int)(arg0)) == 1) | ((long)(arg0) < 1))) {
return (unsigned int)(var0);
}
var1 = (unsigned long)((unsigned int)(arg0));
local_74 = 0;
L_14f5: ;
var6 = (unsigned long)((unsigned int)((var1 - 1)));
if (((unsigned long)((unsigned int)(var1)) == 2)) {
goto L_177c;
}
local_70 = 0;
var7 = (unsigned long)((unsigned int)(var6));
local_60 = var1;
L_1513: ;
var8 = (unsigned long)((unsigned int)((var7 - 1)));
if (((unsigned long)((unsigned int)(var7)) == 2)) {
goto L_1772;
}
local_6c = 0;
local_5c = var7;
L_152e: ;
var9 = (unsigned long)((unsigned int)((var8 - 1)));
if (((unsigned long)((unsigned int)(var8)) == 2)) {
goto L_1768;
}
local_68 = 0;
local_58 = var8;
L_1549: ;
var10 = (unsigned long)((unsigned int)((var9 - 1)));
if (((unsigned long)((unsigned int)(var9)) == 2)) {
goto L_175e;
}
var8 = 0;
L_155a: ;
var12 = (unsigned long)((unsigned int)((var10 - 1)));
if (((unsigned long)((unsigned int)(var10)) == 2)) {
goto L_174a;
}
var16 = 0;
var17 = (unsigned long)((unsigned int)(var10));
L_1578: ;
var18 = (unsigned long)((unsigned int)((var12 - 1)));
if (((unsigned long)((unsigned int)(var12)) == 2)) {
goto L_1740;
}
var21 = (unsigned long)((unsigned int)(var16));
var22 = 0;
var23 = (unsigned long)((unsigned int)(var12));
L_1598: ;
if (((unsigned long)((unsigned int)(var18)) == 2)) {
goto L_1754;
}
var24 = (unsigned long)((unsigned int)((var18 - 3)));
var6 = 0;
var28 = (unsigned long)((unsigned int)(var24));
var29 = (unsigned long)((unsigned int)((var18 - 4)));
var33 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var18 - 6))) - (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var24)) & -2))))));
var34 = (unsigned long)((unsigned int)(var33));
do {
var35 = (unsigned long)((unsigned int)((var29 + 2)));
if (((unsigned long)((unsigned int)(var29)) != 0xffffffff)) {
var33 = 0;
do {
var37 = (unsigned long)((unsigned int)((var35 - 1)));
local_3c = var28;
var35 = (unsigned long)((unsigned int)((var35 - 2)));
local_40 = var17;
local_44 = var21;
local_48 = var23;
local_4c = var8;
local_50 = var9;
local_54 = var6;
var39 = ((long (*)(long))fib)(var37);
var6 = (unsigned long)((unsigned int)(local_54));
var9 = (unsigned long)((unsigned int)(local_50));
var33 = (unsigned long)((unsigned int)((var33 + var39)));
var23 = (unsigned long)((unsigned int)(local_48));
var21 = (unsigned long)((unsigned int)(local_44));
var8 = (unsigned long)((unsigned int)(local_4c));
var17 = (unsigned long)((unsigned int)(local_40));
var28 = (unsigned long)((unsigned int)(local_3c));
} while (((((unsigned long)((unsigned int)(var35)) == 1) | ((long)((int)(var35)) < 1)) == 0));
var35 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var29)) & 1))) + var33)));
}
var29 = (unsigned long)((unsigned int)((var29 - 2)));
var6 = (unsigned long)((unsigned int)((var6 + var35)));
} while (((unsigned int)(var34) != (unsigned int)(var29)));
var51 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var28)) & 1))) + var6)));
L_1647: ;
var18 = (unsigned long)((unsigned int)((var18 - 2)));
var22 = (unsigned long)((unsigned int)((var22 + var51)));
if (((((unsigned long)((unsigned int)(var18)) == 1) | ((long)((int)(var18)) < 1)) == 0)) {
goto L_1598;
}
var12 = (unsigned long)((unsigned int)(var23));
var16 = (unsigned long)((unsigned int)(var21));
var58 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var23)) - 3))) & 1))) + (unsigned long)((unsigned int)(var22)))));
L_1668: ;
var12 = (unsigned long)((unsigned int)((var12 - 2)));
var16 = (unsigned long)((unsigned int)((var16 + var58)));
if (((((unsigned long)((unsigned int)(var12)) == 1) | ((long)((int)(var12)) < 1)) == 0)) {
goto L_1578;
}
var10 = (unsigned long)((unsigned int)(var17));
var66 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var17)) - 3))) & 1))) + (unsigned long)((unsigned int)(var16)))));
L_1689: ;
var10 = (unsigned long)((unsigned int)((var10 - 2)));
var8 = (unsigned long)((unsigned int)((var8 + var66)));
if (((((unsigned long)((unsigned int)(var10)) == 1) | ((long)((int)(var10)) < 1)) == 0)) {
goto L_155a;
}
var73 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var9 - 3))) & 1))) + var8)));
L_16a4: ;
var9 = (unsigned long)((unsigned int)((var9 - 2)));
local_68 = (local_68 + var73);
if (((((unsigned long)((unsigned int)(var9)) == 1) | ((long)((int)(var9)) < 1)) == 0)) {
goto L_1549;
}
var8 = (unsigned long)((unsigned int)(local_58));
var79 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(local_58)) - 3))) & 1))) + local_68)));
L_16c6: ;
var8 = (unsigned long)((unsigned int)((var8 - 2)));
local_6c = (local_6c + var79);
if (((((unsigned long)((unsigned int)(var8)) == 1) | ((long)((int)(var8)) < 1)) == 0)) {
goto L_152e;
}
var7 = (unsigned long)((unsigned int)(local_5c));
var85 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(local_5c)) - 3))) & 1))) + local_6c)));
L_16e8: ;
var7 = (unsigned long)((unsigned int)((var7 - 2)));
local_70 = (local_70 + var85);
if (((((unsigned long)((unsigned int)(var7)) == 1) | ((long)((int)(var7)) < 1)) == 0)) {
goto L_1513;
}
var1 = (unsigned long)((unsigned int)(local_60));
var91 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(local_60)) - 3))) & 1))) + local_70)));
L_170a: ;
var1 = (unsigned long)((unsigned int)((var1 - 2)));
local_74 = (local_74 + var91);
if (((((unsigned long)((unsigned int)(var1)) == 1) | ((long)((int)(var1)) < 1)) == 0)) {
goto L_14f5;
}
// x86-64 epilogue: tear down frame
return (unsigned int)(((unsigned long)((unsigned int)(local_74)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) & 1)))));
L_1740: ;
var58 = 1;
goto L_1668;
L_174a: ;
var66 = 1;
goto L_1689;
L_1754: ;
var51 = 1;
goto L_1647;
L_175e: ;
var73 = 1;
goto L_16a4;
L_1768: ;
var79 = 1;
goto L_16c6;
L_1772: ;
var85 = 1;
goto L_16e8;
L_177c: ;
var91 = 1;
goto L_170a;
} forward_sum6 pass 7 lines
// glaurung: forward_sum6 @ 0x17b0
int forward_sum6(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5) {
extern int sum_arg6(int, int, int, int, int, int);
int ret;
ret = sum_arg6(arg0, arg1, arg2, arg3, arg4, arg5);
return ret;
} guarded_spin pass 16 lines
// glaurung: guarded_spin @ 0x17c0
int guarded_spin(int arg0, int arg1) {
int x;
long ret;
ret = (unsigned long)((unsigned int)((arg1 + 5)));
if (((unsigned long)((unsigned int)(arg0)) == 0)) {
return ret;
}
x = (arg1 | 1);
if (((unsigned long)((unsigned int)(x)) != 0)) {
while (((unsigned long)((unsigned int)(x)) != 0)) {
x = ((unsigned int)(x) + 1);
}
}
return (unsigned int)(x);
} sum_arg0 pass 4 lines
// glaurung: sum_arg0 @ 0x1140
int sum_arg0(void) {
return 7;
} sum_arg1 pass 4 lines
// glaurung: sum_arg1 @ 0x1150
int sum_arg1(int arg0) {
return (unsigned int)((arg0 + 1));
} sum_arg10 pass 4 lines
// glaurung: sum_arg10 @ 0x12b0
int sum_arg10(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, int arg9) {
return (unsigned int)((((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) + ((unsigned long)((unsigned int)(arg1)) * 2)))) + (unsigned long)((unsigned int)((arg2 + (arg2 * 2))))))) + ((unsigned long)((unsigned int)(arg3)) * 4)))) + (unsigned long)((unsigned int)((arg4 + (arg4 * 4))))))) + ((unsigned long)((unsigned int)((arg5 + (arg5 * 2)))) * 2)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg6)) * 8))) - (unsigned long)((unsigned int)(arg6)))))))) + ((unsigned long)((unsigned int)(arg7)) * 8)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg8)) + ((unsigned long)((unsigned int)(arg8)) * 8))))))) + ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg9)) + ((unsigned long)((unsigned int)(arg9)) * 4)))) * 2)) + 10));
} sum_arg2 pass 4 lines
// glaurung: sum_arg2 @ 0x1160
int sum_arg2(int arg0, int arg1) {
return (unsigned int)(((arg0 + (arg1 * 2)) + 2));
} sum_arg3 pass 4 lines
// glaurung: sum_arg3 @ 0x1170
int sum_arg3(int arg0, int arg1, int arg2) {
return (unsigned int)((((unsigned long)((unsigned int)((arg0 + (arg1 * 2)))) + (unsigned long)((unsigned int)((arg2 + (arg2 * 2))))) + 3));
} sum_arg4 pass 4 lines
// glaurung: sum_arg4 @ 0x1180
int sum_arg4(int arg0, int arg1, int arg2, int arg3) {
return (unsigned int)((((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((arg0 + (arg1 * 2)))) + (unsigned long)((unsigned int)((arg2 + (arg2 * 2))))))) + (arg3 * 4)) + 4));
} sum_arg5 pass 4 lines
// glaurung: sum_arg5 @ 0x11a0
int sum_arg5(int arg0, int arg1, int arg2, int arg3, int arg4) {
return (unsigned int)((((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((arg0 + (arg1 * 2)))) + (unsigned long)((unsigned int)((arg2 + (arg2 * 2))))))) + (arg3 * 4)))) + (unsigned long)((unsigned int)((arg4 + (arg4 * 4))))) + 5));
} sum_arg6 pass 4 lines
// glaurung: sum_arg6 @ 0x11c0
int sum_arg6(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5) {
return (unsigned int)((((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((arg0 + (arg1 * 2)))) + (unsigned long)((unsigned int)((arg2 + (arg2 * 2))))))) + (arg3 * 4)))) + (unsigned long)((unsigned int)((arg4 + (arg4 * 4))))))) + ((unsigned long)((unsigned int)((arg5 + (arg5 * 2)))) * 2)) + 6));
} sum_arg7 pass 4 lines
// glaurung: sum_arg7 @ 0x11e0
int sum_arg7(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6) {
return (unsigned int)((((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((arg0 + (arg1 * 2)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg2)) + ((unsigned long)((unsigned int)(arg2)) * 2))))))) + (arg3 * 4)))) + (unsigned long)((unsigned int)((arg4 + (arg4 * 4))))))) + ((unsigned long)((unsigned int)((arg5 + (arg5 * 2)))) * 2)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg6)) * 8))) - (unsigned long)((unsigned int)(arg6)))))) + 7));
} sum_arg8 pass 4 lines
// glaurung: sum_arg8 @ 0x1220
int sum_arg8(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7) {
return (unsigned int)((((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((arg0 + (arg1 * 2)))) + (unsigned long)((unsigned int)((arg2 + (arg2 * 2))))))) + ((unsigned long)((unsigned int)(arg3)) * 4)))) + (unsigned long)((unsigned int)((arg4 + (arg4 * 4))))))) + ((unsigned long)((unsigned int)((arg5 + (arg5 * 2)))) * 2)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg6)) * 8))) - (unsigned long)((unsigned int)(arg6)))))))) + ((unsigned long)((unsigned int)(arg7)) * 8)) + 8));
} sum_arg9 pass 4 lines
// glaurung: sum_arg9 @ 0x1260
int sum_arg9(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8) {
return (unsigned int)((((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((arg0 + ((unsigned long)((unsigned int)(arg1)) * 2)))) + (unsigned long)((unsigned int)((arg2 + (arg2 * 2))))))) + ((unsigned long)((unsigned int)(arg3)) * 4)))) + (unsigned long)((unsigned int)((arg4 + (arg4 * 4))))))) + ((unsigned long)((unsigned int)((arg5 + (arg5 * 2)))) * 2)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg6)) * 8))) - (unsigned long)((unsigned int)(arg6)))))))) + ((unsigned long)((unsigned int)(arg7)) * 8)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg8)) + ((unsigned long)((unsigned int)(arg8)) * 8))))) + 9));
} sum_mixed_widths pass 4 lines
// glaurung: sum_mixed_widths @ 0x1310
int sum_mixed_widths(int arg0, long int arg1, int arg2, long int arg3, int arg4, long int arg5, int arg6, long int arg7) {
return (unsigned int)(((((((((((long)(arg0) + (arg1 * 2)) + ((long)(arg2) + ((long)(arg2) * 2))) + (arg3 * 4)) + ((long)(arg4) + ((long)(arg4) * 4))) + ((arg5 + (arg5 * 2)) * 2)) + ((long)(arg6) * 8)) - (long)(arg6)) + (arg7 * 8)) + 88));
} tailcall_to_sum4 pass 7 lines
// glaurung: tailcall_to_sum4 @ 0x1790
int tailcall_to_sum4(int arg0, int arg1, int arg2, int arg3) {
extern int sum_arg4(int, int, int, int);
int ret;
ret = ((int (*)(long, long, long, long))sum_arg4)((unsigned long)((unsigned int)(arg3)), (unsigned long)((unsigned int)(arg2)), (unsigned long)((unsigned int)(arg1)), (unsigned long)((unsigned int)(arg0)));
return ret;
}