Fixture 59

combinatorics

C · 3 functions · 4 lanes · 12 of 12 function-lanes behave identically

All 4 lanes recompile and return the same results as the original.

Pascal's triangle, binomial coefficients by multiplicative recurrence, and Catalan numbers. The multiplicative binomial divides exactly at each step, so an incorrectly ordered multiply/divide overflows and diverges.

tests/decompiler_fixtures/src/59_combinatorics.c source
#include <stdint.h>

/* Pascal's triangle, binomial coefficients by multiplicative recurrence, and
 * Catalan numbers.  The multiplicative binomial divides exactly at each step,
 * so an incorrectly ordered multiply/divide overflows and diverges. */

#define PASCAL_MAX 12

__attribute__((noinline)) int32_t
pascal_row(int32_t row, uint32_t *output, int32_t capacity) {
    uint32_t value = 1;
    int32_t index;
    if (output == 0 || row < 0 || row > PASCAL_MAX || capacity < row + 1 ||
        capacity > PASCAL_MAX + 1) {
        return -1;
    }
    for (index = 0; index <= row; ++index) {
        output[index] = value;
        value = value * (uint32_t)(row - index) / (uint32_t)(index + 1);
    }
    return row + 1;
}

__attribute__((noinline)) uint32_t binomial(int32_t n, int32_t k) {
    uint64_t result = 1;
    int32_t step;
    if (n < 0 || k < 0 || k > n || n > 30) {
        return 0;
    }
    if (k > n - k) {
        k = n - k;
    }
    for (step = 0; step < k; ++step) {
        result = result * (uint64_t)(n - step) / (uint64_t)(step + 1);
    }
    return (uint32_t)result;
}

__attribute__((noinline)) uint32_t catalan(int32_t n) {
    uint64_t result = 1;
    int32_t step;
    if (n < 0 || n > 16) {
        return 0;
    }
    for (step = 0; step < n; ++step) {
        result = result * (uint64_t)(2 * n - step) / (uint64_t)(step + 1);
    }
    return (uint32_t)(result / (uint64_t)(n + 1));
}

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

3/3
binomial pass 35 lines
// glaurung: binomial @ 0x11c0
uint32_t binomial(int32_t arg0, int32_t arg1) {
    unsigned long result;
    int step;
    int local_4;
    long var4;
    // x86-64 prologue: save rbp
    result = 1;
    if (((long)(arg0) < 0)) {
        // x86-64 epilogue: restore rbp
        return 0;
    }
    if (((long)(arg1) < 0)) {
        // x86-64 epilogue: restore rbp
        return 0;
    }
    if (((((unsigned int)(arg1) == (unsigned int)(arg0)) | (arg1 < arg0)) == 0)) {
        // x86-64 epilogue: restore rbp
        return 0;
    }
    if (((((unsigned long)((unsigned int)(arg0)) == 30) | ((long)(arg0) < 30)) == 0)) {
        // x86-64 epilogue: restore rbp
        return 0;
    }
    var4 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - arg1)));
    if (((((unsigned int)(arg1) == (unsigned int)(var4)) | ((long)(arg1) < (long)((int)(var4)))) == 0)) {
        arg1 = ((unsigned int)(arg0) - arg1);
    }
    for (step = 0; (step < arg1); step++) {
        result = ((unsigned long)(((((unsigned __int128)(unsigned long)((unsigned long)((unsigned int)(0))) << 64) | (unsigned long)((result * (long)((int)((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - step)))))))) / (unsigned long)((long)((int)((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(step)) + 1)))))))));
    }
    local_4 = result;
    // x86-64 epilogue: restore rbp
    return (unsigned int)(local_4);
}
catalan pass 22 lines
// glaurung: catalan @ 0x1280
uint32_t catalan(int32_t arg0) {
    unsigned long result;
    int step;
    int local_4;
    // x86-64 prologue: save rbp
    result = 1;
    if (((long)(arg0) < 0)) {
        // x86-64 epilogue: restore rbp
        return 0;
    }
    if (((((unsigned long)((unsigned int)(arg0)) == 16) | ((long)(arg0) < 16)) == 0)) {
        // x86-64 epilogue: restore rbp
        return 0;
    }
    for (step = 0; (step < arg0); step++) {
        result = ((unsigned long)(((((unsigned __int128)(unsigned long)((unsigned long)((unsigned int)(0))) << 64) | (unsigned long)((result * (long)((int)((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) << 1))) - step)))))))) / (unsigned long)((long)((int)((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(step)) + 1)))))))));
    }
    local_4 = ((unsigned long)(((((unsigned __int128)(unsigned long)((unsigned long)((unsigned int)(0))) << 64) | (unsigned long)(result)) / (unsigned long)((long)((int)((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) + 1)))))))));
    // x86-64 epilogue: restore rbp
    return (unsigned int)(local_4);
}
pascal_row pass 40 lines
// glaurung: pascal_row @ 0x1100
int32_t pascal_row(int32_t arg0, uint32_t * arg1, int32_t arg2) {
    unsigned int value;
    int index;
    int local_4;
    // x86-64 prologue: save rbp
    value = 1;
    if ((arg1 == 0)) {
        local_4 = -1;
        // x86-64 epilogue: restore rbp
        return (unsigned int)(local_4);
    }
    if (((long)(arg0) < 0)) {
        local_4 = -1;
        // x86-64 epilogue: restore rbp
        return (unsigned int)(local_4);
    }
    if (((((unsigned long)((unsigned int)(arg0)) == 12) | ((long)(arg0) < 12)) == 0)) {
        local_4 = -1;
        // x86-64 epilogue: restore rbp
        return (unsigned int)(local_4);
    }
    if (((long)(arg2) < (long)((int)(((unsigned long)((unsigned int)(arg0)) + 1))))) {
        local_4 = -1;
        // x86-64 epilogue: restore rbp
        return (unsigned int)(local_4);
    }
    if (((((unsigned long)((unsigned int)(arg2)) == 13) | ((long)(arg2) < 13)) == 0)) {
        local_4 = -1;
        // x86-64 epilogue: restore rbp
        return (unsigned int)(local_4);
    }
    for (index = 0; ((((unsigned int)(index) == (unsigned int)(arg0)) | (index < arg0)) != 0); index++) {
        arg1[(long)(index)] = value;
        value = ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)((unsigned long)((unsigned int)((value * (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - index)))))))) / (unsigned int)((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(index)) + 1)))))));
    }
    local_4 = ((unsigned int)(arg0) + 1);
    // x86-64 epilogue: restore rbp
    return (unsigned int)(local_4);
}

clang -O2

3/3
binomial pass 69 lines
// glaurung: binomial @ 0x1190
uint32_t binomial(int32_t arg0, int32_t arg1) {
    int step;
    unsigned long result;
    long ret;
    long var10;
    long var13;
    long var17;
    long var18;
    long var19;
    long var20;
    long var21;
    long var38;
    long var53;
    int var6;
    long var60;
    long var61;
    int var8;
    long var9;
    ret = 0;
    if (((long)((int)(((unsigned long)((unsigned int)(arg1)) | arg0))) < 0)) {
        return ret;
    }
    ret = 0;
    if (((((unsigned long)((unsigned int)(arg0)) == 30) | ((long)(arg0) < 30)) == 0)) {
        return ret;
    }
    var6 = ((unsigned int)(arg0) - arg1);
    ret = 0;
    if ((arg0 < arg1)) {
        return ret;
    }
    var8 = ((var6 < arg1) ? (unsigned long)((unsigned int)(var6)) : arg1);
    if ((((unsigned long)((unsigned int)(var8)) == 0) | ((long)((int)(var8)) < 0))) {
        return 1;
    }
    var9 = (long)(arg0);
    var10 = (unsigned long)((unsigned int)(var8));
    if (((unsigned long)((unsigned int)(var8)) != 1)) {
        var13 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var10)) & -2)));
        var17 = var9;
        var18 = 1;
        var19 = 0;
        do {
            var20 = (var18 * var17);
            var21 = (var19 + 1);
            var38 = ((var17 - 1) * ((((unsigned long)((var20 | var21)) >> 32) == 0) ? (unsigned long)((unsigned int)(((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)(var20)) / (unsigned int)(var21)))))) : ((unsigned long)(((((unsigned __int128)(unsigned long)((unsigned long)((unsigned int)(0))) << 64) | (unsigned long)(var20)) / (unsigned long)(var21))))));
            step = (var19 + 2);
            result = ((((unsigned long)((var38 | step)) >> 32) != 0) ? ((unsigned long)(((((unsigned __int128)(unsigned long)((unsigned long)((unsigned int)(0))) << 64) | (unsigned long)(var38)) / (unsigned long)(step)))) : ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)(var38)) / (unsigned int)(step)))));
            var17 = (var17 - 2);
            var53 = result;
            var18 = result;
            var19 = (unsigned long)((unsigned int)(step));
        } while ((var13 != step));
    } else {
        var53 = 1;
        step = 0;
    }
    ret = var53;
    if (((unsigned long)((unsigned char)((var10 & 1))) == 0)) {
        return ret;
    }
    var60 = (var53 * (var9 - (unsigned long)((unsigned int)(step))));
    var61 = ((unsigned long)((unsigned int)(step)) + 1);
    if ((((unsigned long)((var60 | var61)) >> 32) == 0)) {
        return ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)(var60)) / (unsigned int)(var61))));
    }
    return ((unsigned long)(((((unsigned __int128)(unsigned long)((unsigned long)((unsigned int)(0))) << 64) | (unsigned long)(var60)) / (unsigned long)(var61))));
}
catalan pass 61 lines
// glaurung: catalan @ 0x1260
uint32_t catalan(int32_t arg0) {
    int step;
    unsigned long result;
    long ret;
    long var13;
    long var14;
    long var15;
    long var16;
    long var17;
    long var2;
    long var34;
    long var49;
    long var5;
    long var55;
    long var56;
    long var6;
    long var69;
    long var9;
    ret = 0;
    if (((unsigned long)(16) < (unsigned long)((unsigned long)((unsigned int)(arg0))))) {
        return ret;
    }
    if (((unsigned long)((unsigned int)(arg0)) == 0)) {
        var2 = 1;
    } else {
        var5 = (unsigned long)((unsigned int)((arg0 + arg0)));
        var6 = (unsigned long)((unsigned int)(arg0));
        if (((unsigned long)((unsigned int)(arg0)) != 1)) {
            var9 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var6)) & -2)));
            var13 = var5;
            var14 = 0;
            var15 = 1;
            do {
                var16 = (var15 * var13);
                var17 = (var14 + 1);
                var34 = ((var13 - 1) * ((((unsigned long)((var16 | var17)) >> 32) == 0) ? (unsigned long)((unsigned int)(((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)(var16)) / (unsigned int)(var17)))))) : ((unsigned long)(((((unsigned __int128)(unsigned long)((unsigned long)((unsigned int)(0))) << 64) | (unsigned long)(var16)) / (unsigned long)(var17))))));
                step = (var14 + 2);
                result = ((((unsigned long)((var34 | step)) >> 32) != 0) ? ((unsigned long)(((((unsigned __int128)(unsigned long)((unsigned long)((unsigned int)(0))) << 64) | (unsigned long)(var34)) / (unsigned long)(step)))) : ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)(var34)) / (unsigned int)(step)))));
                var13 = (var13 - 2);
                var49 = result;
                var14 = (unsigned long)((unsigned int)(step));
                var15 = result;
            } while ((var9 != step));
        } else {
            step = 0;
            var49 = 1;
        }
        var2 = var49;
        if (((unsigned long)((unsigned char)((var6 & 1))) != 0)) {
            var55 = (var49 * (var5 - (unsigned long)((unsigned int)(step))));
            var56 = ((unsigned long)((unsigned int)(step)) + 1);
            var2 = ((((unsigned long)((var55 | var56)) >> 32) == 0) ? ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)(var55)) / (unsigned int)(var56)))) : ((unsigned long)(((((unsigned __int128)(unsigned long)((unsigned long)((unsigned int)(0))) << 64) | (unsigned long)(var55)) / (unsigned long)(var56)))));
        }
    }
    var69 = (unsigned long)((unsigned int)((arg0 + 1)));
    if ((((unsigned long)(var2) >> 32) == 0)) {
        return ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)(var2)) / (unsigned int)(var69))));
    }
    return ((unsigned long)(((((unsigned __int128)(unsigned long)((unsigned long)((unsigned int)(0))) << 64) | (unsigned long)(var2)) / (unsigned long)(var69))));
}
pascal_row pass 57 lines
// glaurung: pascal_row @ 0x1100
int32_t pascal_row(int32_t arg0, uint32_t * arg1, int32_t arg2) {
    int index;
    unsigned int value;
    long var0;
    long var1;
    int var16;
    long var23;
    long var4;
    int var8;
    long var9;
    var0 = 0xffffffff;
    if (((unsigned long)(12) < (unsigned long)((unsigned long)((unsigned int)(arg0))))) {
        goto L_1172;
    }
    if ((arg1 == 0)) {
        goto L_1172;
    }
    if ((arg2 <= arg0)) {
        goto L_1172;
    }
    if (((((unsigned long)((unsigned int)(arg2)) == 13) | ((long)(arg2) < 13)) == 0)) {
        goto L_1172;
    }
    var0 = (unsigned long)((unsigned int)((arg0 + 1)));
    var1 = (unsigned long)((unsigned int)(var0));
    if (((unsigned long)((unsigned int)(arg0)) == 0)) {
        goto L_1176;
    }
    var4 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var1)) & -2)));
    index = 0;
    var8 = 1;
    var9 = (unsigned long)((unsigned int)(arg0));
    do {
        *(int *)(((long)arg1 + index * 4)) = var8;
        var16 = ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)((unsigned long)((unsigned int)((var8 * var9))))) / (unsigned int)((unsigned long)((unsigned int)((index + 1)))))));
        *(int *)(((long)arg1 + index * 4 + 0x4)) = var16;
        index = (index + 2);
        var23 = ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)((unsigned long)((unsigned int)((var16 * (unsigned long)((unsigned int)((var9 - 1)))))))) / (unsigned int)(index))));
        var9 = (unsigned long)((unsigned int)((var9 - 2)));
        var8 = var23;
    } while ((var4 != index));
    if (((unsigned long)((unsigned char)((var1 & 1))) == 0)) {
        goto L_1172;
    }
    L_116f: ;
    *(int *)(((long)arg1 + index * 4)) = var23;
    L_1172: ;
    return (unsigned int)(var0);
    L_1176: ;
    var23 = 1;
    index = 0;
    if (((unsigned long)((unsigned char)((var1 & 1))) != 0)) {
        goto L_116f;
    }
    goto L_1172;
}

gcc -O0

3/3
binomial pass 33 lines
// glaurung: binomial @ 0x118c
uint32_t binomial(int32_t arg0, int32_t arg1) {
    unsigned long result;
    int step;
    long var3;
    // x86-64 prologue: save rbp
    result = 1;
    if (((long)(arg0) < 0)) {
        // x86-64 epilogue: restore rbp
        return 0;
    }
    if (((long)(arg1) < 0)) {
        // x86-64 epilogue: restore rbp
        return 0;
    }
    if (((((unsigned int)(arg1) == (unsigned int)(arg0)) | (arg1 < arg0)) == 0)) {
        // x86-64 epilogue: restore rbp
        return 0;
    }
    if (((((unsigned long)((unsigned int)(arg0)) == 30) | ((long)(arg0) < 30)) == 0)) {
        // x86-64 epilogue: restore rbp
        return 0;
    }
    var3 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - arg1)));
    if (((((unsigned int)(arg1) == (unsigned int)(var3)) | ((long)(arg1) < (long)((int)(var3)))) == 0)) {
        arg1 = ((unsigned int)(arg0) - arg1);
    }
    for (step = 0; (step < arg1); step++) {
        result = ((unsigned long)(((((unsigned __int128)(unsigned long)(0) << 64) | (unsigned long)(((long)((int)((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - step))))) * result))) / (unsigned long)((long)((int)((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(step)) + 1)))))))));
    }
    // x86-64 epilogue: restore rbp
    return result;
}
catalan pass 20 lines
// glaurung: catalan @ 0x1214
uint32_t catalan(int32_t arg0) {
    unsigned long result;
    int step;
    // x86-64 prologue: save rbp
    result = 1;
    if (((long)(arg0) < 0)) {
        // x86-64 epilogue: restore rbp
        return 0;
    }
    if (((((unsigned long)((unsigned int)(arg0)) == 16) | ((long)(arg0) < 16)) == 0)) {
        // x86-64 epilogue: restore rbp
        return 0;
    }
    for (step = 0; (step < arg0); step++) {
        result = ((unsigned long)(((((unsigned __int128)(unsigned long)(0) << 64) | (unsigned long)(((long)((int)((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) + (unsigned long)((unsigned int)(arg0))))) - step))))) * result))) / (unsigned long)((long)((int)((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(step)) + 1)))))))));
    }
    // x86-64 epilogue: restore rbp
    return ((unsigned long)(((((unsigned __int128)(unsigned long)(0) << 64) | (unsigned long)(result)) / (unsigned long)((long)((int)((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) + 1)))))))));
}
pascal_row pass 33 lines
// glaurung: pascal_row @ 0x10f9
int32_t pascal_row(int32_t arg0, uint32_t * arg1, int32_t arg2) {
    unsigned int value;
    int index;
    // x86-64 prologue: save rbp
    value = 1;
    if ((arg1 == 0)) {
        // x86-64 epilogue: restore rbp
        return 0xffffffff;
    }
    if (((long)(arg0) < 0)) {
        // x86-64 epilogue: restore rbp
        return 0xffffffff;
    }
    if (((((unsigned long)((unsigned int)(arg0)) == 12) | ((long)(arg0) < 12)) == 0)) {
        // x86-64 epilogue: restore rbp
        return 0xffffffff;
    }
    if ((arg2 <= arg0)) {
        // x86-64 epilogue: restore rbp
        return 0xffffffff;
    }
    if (((((unsigned long)((unsigned int)(arg2)) == 13) | ((long)(arg2) < 13)) == 0)) {
        // x86-64 epilogue: restore rbp
        return 0xffffffff;
    }
    for (index = 0; ((((unsigned int)(index) == (unsigned int)(arg0)) | (index < arg0)) != 0); index++) {
        arg1[(long)(index)] = value;
        value = ((unsigned int)(((((unsigned long long)(unsigned int)(0) << 32) | (unsigned int)((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - index))) * value))))) / (unsigned int)((unsigned long)((unsigned int)((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(index)) + 1)))))))));
    }
    // x86-64 epilogue: restore rbp
    return (unsigned int)(((unsigned long)((unsigned int)(arg0)) + 1));
}

gcc -O2

3/3
binomial pass 34 lines
// glaurung: binomial @ 0x1150
uint32_t binomial(int32_t arg0, int32_t arg1) {
    unsigned long result;
    int step;
    long var10;
    long var11;
    long var4;
    long var5;
    long var7;
    result = 0;
    if ((0 <= (long)(arg1))) {
        if ((arg0 < arg1)) {
            return 0;
        }
        if (((unsigned long)(30) < (unsigned long)((unsigned long)((unsigned int)(arg0))))) {
            return 0;
        }
        var4 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - arg1)));
        var5 = (((((unsigned int)(var4) == (unsigned int)(arg1)) | ((long)((int)(var4)) < (long)(arg1))) == 0) ? arg1 : var4);
        if ((((unsigned long)((unsigned int)(var5)) == 0) | ((long)((int)(var5)) < 0))) {
            return 1;
        }
        var7 = (unsigned long)((unsigned int)((var5 + 1)));
        var10 = (long)((int)((arg0 + 1)));
        var11 = 1;
        step = 1;
        do {
            result = ((unsigned long)(((((unsigned __int128)(unsigned long)((unsigned long)((unsigned int)(0))) << 64) | (unsigned long)((var11 * (var10 - step)))) / (unsigned long)(step))));
            step = (step + 1);
            var11 = result;
        } while ((step != var7));
    }
    return result;
}
catalan pass 28 lines
// glaurung: catalan @ 0x11c0
uint32_t catalan(int32_t arg0) {
    int step;
    unsigned long result;
    long ret;
    long var10;
    long var11;
    long var2;
    long var9;
    ret = 0;
    if (((unsigned long)(16) < (unsigned long)((unsigned long)((unsigned int)(arg0))))) {
        return ret;
    }
    if (((unsigned long)((unsigned int)(arg0)) == 0)) {
        var2 = 1;
    } else {
        var9 = ((unsigned long)((unsigned int)((arg0 - 1))) + 2);
        var10 = (long)((int)(((arg0 + arg0) + 1)));
        var11 = 1;
        step = 1;
        do {
            var2 = ((unsigned long)(((((unsigned __int128)(unsigned long)((unsigned long)((unsigned int)(0))) << 64) | (unsigned long)((var11 * (var10 - step)))) / (unsigned long)(step))));
            step = (step + 1);
            var11 = var2;
        } while ((var9 != step));
    }
    return ((unsigned long)(((((unsigned __int128)(unsigned long)((unsigned long)((unsigned int)(0))) << 64) | (unsigned long)(var2)) / (unsigned long)((long)((int)((unsigned long)((unsigned int)((arg0 + 1)))))))));
}
pascal_row pass 27 lines
// glaurung: pascal_row @ 0x1100
int32_t pascal_row(int32_t arg0, uint32_t * arg1, int32_t arg2) {
    unsigned int value;
    int index;
    long var12;
    int var16;
    if ((arg1 == 0)) {
        return 0xffffffff;
    }
    if (((arg2 <= arg0) || ((unsigned long)(12) < (unsigned long)((unsigned long)((unsigned int)(arg0)))))) {
        return 0xffffffff;
    }
    if (((((unsigned long)((unsigned int)(arg2)) == 13) | ((long)(arg2) < 13)) == 0)) {
        return 0xffffffff;
    }
    value = 1;
    index = 0;
    var12 = (long)arg1;
    do {
        *(int *)((var12)) = value;
        var12 = (var12 + 4);
        var16 = (index + 1);
        value = ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)((unsigned long)((unsigned int)((value * (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - index)))))))) / (unsigned int)((unsigned long)((unsigned int)(var16))))));
        index = (unsigned long)((unsigned int)(var16));
    } while ((((unsigned int)(var16) == (unsigned int)(arg0)) | (var16 < arg0)));
    return (unsigned int)((arg0 + 1));
}

← 213 fixtures