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).

tests/decompiler_fixtures/src/06_calling_conventions.c source
/* 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/17
fact_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/17
fact_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/17
fact_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/17
fact_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;
}

← 213 fixtures