Fixture 60

integer matrix

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

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

Dense integer matrix multiply, transpose, and a 3x3 determinant. The multiply is the canonical triple loop with two different strides, and the determinant is a flat expression over nine indexed loads.

tests/decompiler_fixtures/src/60_integer_matrix.c source
#include <stdint.h>

/* Dense integer matrix multiply, transpose, and a 3x3 determinant.  The
 * multiply is the canonical triple loop with two different strides, and the
 * determinant is a flat expression over nine indexed loads. */

#define MAT_DIM 4

__attribute__((noinline)) int32_t
matrix_multiply(const int32_t *left, const int32_t *right, int32_t *output,
                int32_t dimension) {
    int32_t row;
    int32_t column;
    int32_t inner;
    if (left == 0 || right == 0 || output == 0 || dimension < 0 ||
        dimension > MAT_DIM) {
        return -1;
    }
    for (row = 0; row < dimension; ++row) {
        for (column = 0; column < dimension; ++column) {
            int32_t sum = 0;
            for (inner = 0; inner < dimension; ++inner) {
                sum += left[row * dimension + inner] *
                       right[inner * dimension + column];
            }
            output[row * dimension + column] = sum;
        }
    }
    return dimension * dimension;
}

__attribute__((noinline)) int32_t
matrix_transpose(const int32_t *input, int32_t *output, int32_t dimension) {
    int32_t row;
    int32_t column;
    if (input == 0 || output == 0 || dimension < 0 || dimension > MAT_DIM) {
        return -1;
    }
    for (row = 0; row < dimension; ++row) {
        for (column = 0; column < dimension; ++column) {
            output[column * dimension + row] = input[row * dimension + column];
        }
    }
    return dimension * dimension;
}

__attribute__((noinline)) int32_t
determinant3(const int32_t *matrix) {
    if (matrix == 0) {
        return 0;
    }
    return matrix[0] * (matrix[4] * matrix[8] - matrix[5] * matrix[7]) -
           matrix[1] * (matrix[3] * matrix[8] - matrix[5] * matrix[6]) +
           matrix[2] * (matrix[3] * matrix[7] - matrix[4] * matrix[6]);
}

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
determinant3 pass 9 lines
// glaurung: determinant3 @ 0x12f0
int32_t determinant3(const int32_t * arg0) {
    // x86-64 prologue: save rbp
    if ((arg0 != 0)) {
        return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((long)arg0))) * (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x10)))) * *(int *)(((long)arg0 + 0x20))))) - (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x14)))) * *(int *)(((long)arg0 + 0x1c))))))))))) - (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x4)))) * (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0xc)))) * *(int *)(((long)arg0 + 0x20))))) - (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x14)))) * *(int *)(((long)arg0 + 0x18)))))))))))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x8)))) * (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0xc)))) * *(int *)(((long)arg0 + 0x1c))))) - (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x10)))) * *(int *)(((long)arg0 + 0x18)))))))))))));
    } else {
        return 0;
    }
}
matrix_multiply pass 50 lines
// glaurung: matrix_multiply @ 0x1100
int32_t matrix_multiply(const int32_t * arg0, const int32_t * arg1, int32_t * arg2, int32_t arg3) {
    int row;
    int column;
    int sum;
    int inner;
    int local_4;
    // x86-64 prologue: save rbp
    if ((arg0 == 0)) {
        local_4 = -1;
        // x86-64 epilogue: restore rbp
        return (unsigned int)(local_4);
    }
    if ((arg1 == 0)) {
        local_4 = -1;
        // x86-64 epilogue: restore rbp
        return (unsigned int)(local_4);
    }
    if ((arg2 == 0)) {
        local_4 = -1;
        // x86-64 epilogue: restore rbp
        return (unsigned int)(local_4);
    }
    if (((long)(arg3) < 0)) {
        local_4 = -1;
        // x86-64 epilogue: restore rbp
        return (unsigned int)(local_4);
    }
    if (((((unsigned long)((unsigned int)(arg3)) == 4) | ((long)(arg3) < 4)) == 0)) {
        local_4 = -1;
        // x86-64 epilogue: restore rbp
        return (unsigned int)(local_4);
    }
    row = 0;
    while ((row < arg3)) {
        column = 0;
        while ((column < arg3)) {
            sum = 0;
            for (inner = 0; (inner < arg3); inner++) {
                sum = ((unsigned int)(((unsigned long)((unsigned int)(arg0[(long)((int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(row)) * arg3))) + inner)))])) * arg1[(long)((int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(inner)) * arg3))) + column)))])) + sum);
            }
            arg2[(long)((int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(row)) * arg3))) + column)))] = sum;
            column = ((unsigned int)(column) + 1);
        }
        row = ((unsigned int)(row) + 1);
    }
    local_4 = ((unsigned int)(arg3) * arg3);
    // x86-64 epilogue: restore rbp
    return (unsigned int)(local_4);
}
matrix_transpose pass 37 lines
// glaurung: matrix_transpose @ 0x1220
int32_t matrix_transpose(const int32_t * arg0, int32_t * arg1, int32_t arg2) {
    int row;
    int column;
    int local_4;
    // x86-64 prologue: save rbp
    if ((arg0 == 0)) {
        local_4 = -1;
        // x86-64 epilogue: restore rbp
        return (unsigned int)(local_4);
    }
    if ((arg1 == 0)) {
        local_4 = -1;
        // x86-64 epilogue: restore rbp
        return (unsigned int)(local_4);
    }
    if (((long)(arg2) < 0)) {
        local_4 = -1;
        // x86-64 epilogue: restore rbp
        return (unsigned int)(local_4);
    }
    if (((((unsigned long)((unsigned int)(arg2)) == 4) | ((long)(arg2) < 4)) == 0)) {
        local_4 = -1;
        // x86-64 epilogue: restore rbp
        return (unsigned int)(local_4);
    }
    row = 0;
    while ((row < arg2)) {
        for (column = 0; (column < arg2); column++) {
            arg1[(long)((int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(column)) * arg2))) + row)))] = arg0[(long)((int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(row)) * arg2))) + column)))];
        }
        row = ((unsigned int)(row) + 1);
    }
    local_4 = ((unsigned int)(arg2) * arg2);
    // x86-64 epilogue: restore rbp
    return (unsigned int)(local_4);
}

clang -O2

3/3
determinant3 pass 19 lines
// glaurung: determinant3 @ 0x1720
int32_t determinant3(const int32_t * arg0) {
    long var1;
    long var2;
    long var20;
    long var3;
    long var7;
    long var8;
    if ((arg0 == 0)) {
        return 0;
    }
    var1 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0xc))));
    var2 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x10))));
    var3 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x20))));
    var7 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x14))));
    var8 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x1c))));
    var20 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x18))));
    return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var1 * var8))) - (unsigned long)((unsigned int)((var20 * var2)))))) * *(int *)(((long)arg0 + 0x8))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var7 * var20))) - (unsigned long)((unsigned int)((var3 * var1)))))) * *(int *)(((long)arg0 + 0x4))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var3)) * var2))) - (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var8)) * var7)))))) * *(int *)(((long)arg0))))))))));
}
matrix_multiply pass 297 lines
// glaurung: matrix_multiply @ 0x1100
int32_t matrix_multiply(const int32_t * arg0, const int32_t * arg1, int32_t * arg2, int32_t arg3) {
    int column;
    int inner;
    int row;
    int sum;
    long ret;
    long var0;
    long var109;
    long var110;
    long var126;
    long var127;
    long var141;
    long var144;
    long var145;
    long var165;
    int var169;
    long var170;
    long var171;
    long var183;
    long var184;
    long var200;
    long var201;
    long var215;
    long var218;
    long var219;
    int var238;
    long var239;
    long var240;
    long var251;
    long var252;
    int var26;
    long var267;
    long var268;
    long var27;
    long var28;
    long var3;
    long var4;
    long var40;
    long var41;
    long var57;
    long var58;
    long var74;
    long var75;
    int var95;
    long var96;
    long var97;
    ret = 0xffffffff;
    if (((unsigned long)(4) < (unsigned long)((unsigned long)((unsigned int)(arg3))))) {
        goto L_1169;
    }
    if ((arg0 == 0)) {
        goto L_1169;
    }
    if ((arg1 == 0)) {
        goto L_1169;
    }
    if ((arg2 == 0)) {
        goto L_1169;
    }
    if (((unsigned long)((unsigned int)(arg3)) == 0)) {
        goto L_1163;
    }
    var0 = (unsigned long)((unsigned int)(arg3));
    var3 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1)))) * *(int *)(((long)arg0)))));
    var4 = var3;
    if (((unsigned long)((unsigned int)(arg3)) != 1)) {
        var4 = (unsigned long)((unsigned int)((var3 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 4)))) * *(int *)(((long)arg0 + 0x4))))))));
        if (((unsigned long)((unsigned int)(arg3)) != 2)) {
            var4 = (unsigned long)((unsigned int)((var4 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 8)))) * *(int *)(((long)arg0 + 0x8))))))));
            if (((unsigned long)((unsigned int)(arg3)) != 3)) {
                var4 = (unsigned long)((unsigned int)((var4 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1[(var0 + (var0 * 2))])) * *(int *)(((long)arg0 + 0xc))))))));
            }
        }
    }
    *(int *)(((long)arg2)) = var4;
    if (((unsigned long)((unsigned int)(arg3)) != 1)) {
        goto L_116a;
    }
    L_1163: ;
    ret = (unsigned long)((unsigned int)((arg3 * arg3)));
    L_1169: ;
    return ret;
    L_116a: ;
    var26 = ((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 4 + 0x4)))) * *(int *)(((long)arg0 + 0x4)))) + (unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + 0x4)))) * *(int *)(((long)arg0)))));
    var27 = (unsigned long)((unsigned int)(var26));
    var28 = (unsigned long)((unsigned int)(var26));
    if (((unsigned long)((unsigned int)(arg3)) != 2)) {
        var28 = (unsigned long)((unsigned int)((var27 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 8 + 0x4)))) * *(int *)(((long)arg0 + 0x8))))))));
        if (((unsigned long)((unsigned int)(arg3)) != 3)) {
            var28 = (unsigned long)((unsigned int)((var28 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((((long)arg1 + ((var0 + (var0 * 2)) * 4)) + 4)))) * *(int *)(((long)arg0 + 0xc))))))));
        }
    }
    *(int *)(((long)arg2 + 0x4)) = var28;
    if (((unsigned long)((unsigned int)(arg3)) != 2)) {
        var40 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + 0x8)))) * *(int *)(((long)arg0)))));
        var41 = var40;
        if (((unsigned long)((unsigned int)(arg3)) != 1)) {
            var41 = (unsigned long)((unsigned int)((var40 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 4 + 0x8)))) * *(int *)(((long)arg0 + 0x4))))))));
            if (((unsigned long)((unsigned int)(arg3)) != 2)) {
                var41 = (unsigned long)((unsigned int)((var41 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 8 + 0x8)))) * *(int *)(((long)arg0 + 0x8))))))));
                if (((unsigned long)((unsigned int)(arg3)) != 3)) {
                    var41 = (unsigned long)((unsigned int)((var41 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((((long)arg1 + ((var0 + (var0 * 2)) * 4)) + 8)))) * *(int *)(((long)arg0 + 0xc))))))));
                }
            }
        }
        *(int *)(((long)arg2 + 0x8)) = var41;
        if (((unsigned long)((unsigned int)(arg3)) != 3)) {
            var57 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + 0xc)))) * *(int *)(((long)arg0)))));
            var58 = var57;
            if (((unsigned long)((unsigned int)(arg3)) != 1)) {
                var58 = (unsigned long)((unsigned int)((var57 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 4 + 0xc)))) * *(int *)(((long)arg0 + 0x4))))))));
                if (((unsigned long)((unsigned int)(arg3)) != 2)) {
                    var58 = (unsigned long)((unsigned int)((var58 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 8 + 0xc)))) * *(int *)(((long)arg0 + 0x8))))))));
                    if (((unsigned long)((unsigned int)(arg3)) != 3)) {
                        var58 = (unsigned long)((unsigned int)((var58 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((((long)arg1 + ((var0 + (var0 * 2)) * 4)) + 12)))) * *(int *)(((long)arg0 + 0xc))))))));
                    }
                }
            }
            *(int *)(((long)arg2 + 0xc)) = var58;
            if (((unsigned long)((unsigned int)(arg3)) == 1)) {
                goto L_1163;
            }
        }
    }
    var74 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1)))) * *(int *)(((long)arg0 + var0 * 4)))));
    var75 = var74;
    if (((unsigned long)((unsigned int)(arg3)) != 1)) {
        var75 = (unsigned long)((unsigned int)((var74 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 4)))) * *(int *)(((long)arg0 + var0 * 4 + 0x4))))))));
        if (((unsigned long)((unsigned int)(arg3)) != 2)) {
            var75 = (unsigned long)((unsigned int)((var75 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 8)))) * *(int *)(((long)arg0 + var0 * 4 + 0x8))))))));
            if (((unsigned long)((unsigned int)(arg3)) != 3)) {
                var75 = (unsigned long)((unsigned int)((var75 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1[(var0 + (var0 * 2))])) * *(int *)(((long)arg0 + var0 * 4 + 0xc))))))));
            }
        }
    }
    *(int *)(((long)arg2 + var0 * 4)) = var75;
    if (((unsigned long)((unsigned int)(arg3)) != 1)) {
        var95 = ((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 4 + 0x4)))) * *(int *)(((long)arg0 + var0 * 4 + 0x4)))) + (unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + 0x4)))) * *(int *)(((long)arg0 + var0 * 4)))));
        var96 = (unsigned long)((unsigned int)(var95));
        var97 = (unsigned long)((unsigned int)(var95));
        if (((unsigned long)((unsigned int)(arg3)) != 2)) {
            var97 = (unsigned long)((unsigned int)((var96 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 8 + 0x4)))) * *(int *)(((long)arg0 + var0 * 4 + 0x8))))))));
            if (((unsigned long)((unsigned int)(arg3)) != 3)) {
                var97 = (unsigned long)((unsigned int)((var97 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((((long)arg1 + ((var0 + (var0 * 2)) * 4)) + 4)))) * *(int *)(((long)arg0 + var0 * 4 + 0xc))))))));
            }
        }
        *(int *)(((long)arg2 + var0 * 4 + 0x4)) = var97;
        if (((unsigned long)((unsigned int)(arg3)) == 2)) {
            goto L_1163;
        }
        var109 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + 0x8)))) * *(int *)(((long)arg0 + var0 * 4)))));
        var110 = var109;
        if (((unsigned long)((unsigned int)(arg3)) != 1)) {
            var110 = (unsigned long)((unsigned int)((var109 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 4 + 0x8)))) * *(int *)(((long)arg0 + var0 * 4 + 0x4))))))));
            if (((unsigned long)((unsigned int)(arg3)) != 2)) {
                var110 = (unsigned long)((unsigned int)((var110 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 8 + 0x8)))) * *(int *)(((long)arg0 + var0 * 4 + 0x8))))))));
                if (((unsigned long)((unsigned int)(arg3)) != 3)) {
                    var110 = (unsigned long)((unsigned int)((var110 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((((long)arg1 + ((var0 + (var0 * 2)) * 4)) + 8)))) * *(int *)(((long)arg0 + var0 * 4 + 0xc))))))));
                }
            }
        }
        *(int *)(((long)arg2 + var0 * 4 + 0x8)) = var110;
        if (((unsigned long)((unsigned int)(arg3)) != 3)) {
            var126 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + 0xc)))) * *(int *)(((long)arg0 + var0 * 4)))));
            var127 = var126;
            if (((unsigned long)((unsigned int)(arg3)) != 1)) {
                var127 = (unsigned long)((unsigned int)((var126 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 4 + 0xc)))) * *(int *)(((long)arg0 + var0 * 4 + 0x4))))))));
                if (((unsigned long)((unsigned int)(arg3)) != 2)) {
                    var127 = (unsigned long)((unsigned int)((var127 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 8 + 0xc)))) * *(int *)(((long)arg0 + var0 * 4 + 0x8))))))));
                    if (((unsigned long)((unsigned int)(arg3)) != 3)) {
                        var127 = (unsigned long)((unsigned int)((var127 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((((long)arg1 + ((var0 + (var0 * 2)) * 4)) + 12)))) * *(int *)(((long)arg0 + var0 * 4 + 0xc))))))));
                    }
                }
            }
            *(int *)(((long)arg2 + var0 * 4 + 0xc)) = var127;
            if (((unsigned long)((unsigned int)(arg3)) == 2)) {
                goto L_1163;
            }
        }
    }
    var141 = (var0 + var0);
    var144 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1)))) * *(int *)(((long)arg0 + var0 * 8)))));
    var145 = var144;
    if (((unsigned long)((unsigned int)(arg3)) != 1)) {
        var145 = (unsigned long)((unsigned int)((var144 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 4)))) * *(int *)(((long)arg0 + ((var141 * 4) | 4)))))))));
        if (((unsigned long)((unsigned int)(arg3)) != 2)) {
            var145 = (unsigned long)((unsigned int)((var145 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 8)))) * *(int *)(((long)arg0 + var141 * 4 + 0x8))))))));
            if (((unsigned long)((unsigned int)(arg3)) != 3)) {
                var145 = (unsigned long)((unsigned int)((var145 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1[(var0 + (var0 * 2))])) * *(int *)(((long)arg0 + var141 * 4 + 0xc))))))));
            }
        }
    }
    *(int *)(((long)arg2 + var141 * 4)) = var145;
    if (((unsigned long)((unsigned int)(arg3)) != 1)) {
        var165 = ((var141 * 4) | 4);
        var169 = ((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 4 + 0x4)))) * *(int *)(((long)arg0 + var165)))) + (unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + 0x4)))) * *(int *)(((long)arg0 + var141 * 4)))));
        var170 = (unsigned long)((unsigned int)(var169));
        var171 = (unsigned long)((unsigned int)(var169));
        if (((unsigned long)((unsigned int)(arg3)) != 2)) {
            var171 = (unsigned long)((unsigned int)((var170 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 8 + 0x4)))) * *(int *)(((long)arg0 + var141 * 4 + 0x8))))))));
            if (((unsigned long)((unsigned int)(arg3)) != 3)) {
                var171 = (unsigned long)((unsigned int)((var171 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((((long)arg1 + ((var0 + (var0 * 2)) * 4)) + 4)))) * *(int *)(((long)arg0 + var141 * 4 + 0xc))))))));
            }
        }
        *(int *)(((long)arg2 + var165)) = var171;
        if (((unsigned long)((unsigned int)(arg3)) != 2)) {
            var183 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + 0x8)))) * *(int *)(((long)arg0 + var141 * 4)))));
            var184 = var183;
            if (((unsigned long)((unsigned int)(arg3)) != 1)) {
                var184 = (unsigned long)((unsigned int)((var183 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 4 + 0x8)))) * *(int *)(((long)arg0 + var165))))))));
                if (((unsigned long)((unsigned int)(arg3)) != 2)) {
                    var184 = (unsigned long)((unsigned int)((var184 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 8 + 0x8)))) * *(int *)(((long)arg0 + var141 * 4 + 0x8))))))));
                    if (((unsigned long)((unsigned int)(arg3)) != 3)) {
                        var184 = (unsigned long)((unsigned int)((var184 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((((long)arg1 + ((var0 + (var0 * 2)) * 4)) + 8)))) * *(int *)(((long)arg0 + var141 * 4 + 0xc))))))));
                    }
                }
            }
            *(int *)(((long)arg2 + var141 * 4 + 0x8)) = var184;
            if (((unsigned long)((unsigned int)(arg3)) == 3)) {
                goto L_1163;
            }
            var200 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + 0xc)))) * *(int *)(((long)arg0 + var141 * 4)))));
            var201 = var200;
            if (((unsigned long)((unsigned int)(arg3)) != 1)) {
                var201 = (unsigned long)((unsigned int)((var200 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 4 + 0xc)))) * *(int *)(((long)arg0 + var165))))))));
                if (((unsigned long)((unsigned int)(arg3)) != 2)) {
                    var201 = (unsigned long)((unsigned int)((var201 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 8 + 0xc)))) * *(int *)(((long)arg0 + var141 * 4 + 0x8))))))));
                    if (((unsigned long)((unsigned int)(arg3)) != 3)) {
                        var201 = (unsigned long)((unsigned int)((var201 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((((long)arg1 + ((var0 + (var0 * 2)) * 4)) + 12)))) * *(int *)(((long)arg0 + var141 * 4 + 0xc))))))));
                    }
                }
            }
            *(int *)(((long)arg2 + var141 * 4 + 0xc)) = var201;
            if (((unsigned long)((unsigned int)(arg3)) == 3)) {
                goto L_1163;
            }
        }
    }
    var215 = (var0 + (var0 * 2));
    var218 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1)))) * *(int *)(((long)arg0 + var215 * 4)))));
    var219 = var218;
    if (((unsigned long)((unsigned int)(arg3)) != 1)) {
        var219 = (unsigned long)((unsigned int)((var218 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 4)))) * *(int *)(((long)arg0 + var215 * 4 + 0x4))))))));
        if (((unsigned long)((unsigned int)(arg3)) != 2)) {
            var219 = (unsigned long)((unsigned int)((var219 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 8)))) * *(int *)(((long)arg0 + var215 * 4 + 0x8))))))));
            if (((unsigned long)((unsigned int)(arg3)) != 3)) {
                var219 = (unsigned long)((unsigned int)((var219 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var215 * 4)))) * *(int *)(((long)arg0 + var215 * 4 + 0xc))))))));
            }
        }
    }
    *(int *)(((long)arg2 + var215 * 4)) = var219;
    if (((unsigned long)((unsigned int)(arg3)) == 1)) {
        goto L_1163;
    }
    var238 = ((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 4 + 0x4)))) * *(int *)(((long)arg0 + var215 * 4 + 0x4)))) + (unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + 0x4)))) * *(int *)(((long)arg0 + var215 * 4)))));
    var239 = (unsigned long)((unsigned int)(var238));
    var240 = (unsigned long)((unsigned int)(var238));
    if (((unsigned long)((unsigned int)(arg3)) != 2)) {
        var240 = (unsigned long)((unsigned int)((var239 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 8 + 0x4)))) * *(int *)(((long)arg0 + var215 * 4 + 0x8))))))));
        if (((unsigned long)((unsigned int)(arg3)) != 3)) {
            var240 = (unsigned long)((unsigned int)((var240 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var215 * 4 + 0x4)))) * *(int *)(((long)arg0 + var215 * 4 + 0xc))))))));
        }
    }
    *(int *)(((long)arg2 + var215 * 4 + 0x4)) = var240;
    if (((unsigned long)((unsigned int)(arg3)) == 2)) {
        goto L_1163;
    }
    var251 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + 0x8)))) * *(int *)(((long)arg0 + var215 * 4)))));
    var252 = var251;
    if (((unsigned long)((unsigned int)(arg3)) != 1)) {
        var252 = (unsigned long)((unsigned int)((var251 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 4 + 0x8)))) * *(int *)(((long)arg0 + var215 * 4 + 0x4))))))));
        if (((unsigned long)((unsigned int)(arg3)) != 2)) {
            var252 = (unsigned long)((unsigned int)((var252 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 8 + 0x8)))) * *(int *)(((long)arg0 + var215 * 4 + 0x8))))))));
            if (((unsigned long)((unsigned int)(arg3)) != 3)) {
                var252 = (unsigned long)((unsigned int)((var252 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var215 * 4 + 0x8)))) * *(int *)(((long)arg0 + var215 * 4 + 0xc))))))));
            }
        }
    }
    *(int *)(((long)arg2 + var215 * 4 + 0x8)) = var252;
    if (((unsigned long)((unsigned int)(arg3)) == 3)) {
        goto L_1163;
    }
    var267 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + 0xc)))) * *(int *)(((long)arg0 + var215 * 4)))));
    var268 = var267;
    if (((unsigned long)((unsigned int)(arg3)) != 1)) {
        var268 = (unsigned long)((unsigned int)((var267 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 4 + 0xc)))) * *(int *)(((long)arg0 + var215 * 4 + 0x4))))))));
        if (((unsigned long)((unsigned int)(arg3)) != 2)) {
            var268 = (unsigned long)((unsigned int)((var268 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var0 * 8 + 0xc)))) * *(int *)(((long)arg0 + var215 * 4 + 0x8))))))));
            if (((unsigned long)((unsigned int)(arg3)) != 3)) {
                var268 = (unsigned long)((unsigned int)((var268 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + var215 * 4 + 0xc)))) * *(int *)(((long)arg0 + var215 * 4 + 0xc))))))));
            }
        }
    }
    *(int *)(((long)arg2 + var215 * 4 + 0xc)) = var268;
    goto L_1163;
}
matrix_transpose pass 77 lines
// glaurung: matrix_transpose @ 0x1600
int32_t matrix_transpose(const int32_t * arg0, int32_t * arg1, int32_t arg2) {
    int column;
    int row;
    long ret;
    long var1;
    long var12;
    long var19;
    ret = 0xffffffff;
    if (((unsigned long)(4) < (unsigned long)((unsigned long)((unsigned int)(arg2))))) {
        return ret;
    }
    if ((arg0 == 0)) {
        return ret;
    }
    if ((arg1 == 0)) {
        return ret;
    }
    if (((unsigned long)((unsigned int)(arg2)) != 0)) {
        *(int *)(((long)arg1)) = *(int *)(((long)arg0));
        if (((unsigned long)((unsigned int)(arg2)) == 1)) {
            return (unsigned int)((arg2 * arg2));
        }
        var1 = (unsigned long)((unsigned int)(arg2));
        arg1[(unsigned long)((unsigned int)(arg2))] = *(int *)(((long)arg0 + 0x4));
        if (((unsigned long)((unsigned int)(arg2)) != 2)) {
            *(int *)(((long)arg1 + var1 * 8)) = *(int *)(((long)arg0 + 0x8));
            if (((unsigned long)((unsigned int)(arg2)) != 3)) {
                arg1[(var1 + (var1 * 2))] = *(int *)(((long)arg0 + 0xc));
                if (((unsigned long)((unsigned int)(arg2)) == 1)) {
                    return (unsigned int)((arg2 * arg2));
                }
            }
        }
        *(int *)(((long)arg1 + 0x4)) = *(int *)(((long)arg0 + var1 * 4));
        if (((unsigned long)((unsigned int)(arg2)) != 1)) {
            *(int *)(((long)arg1 + var1 * 4 + 0x4)) = *(int *)(((long)arg0 + var1 * 4 + 0x4));
            if (((unsigned long)((unsigned int)(arg2)) == 2)) {
                return (unsigned int)((arg2 * arg2));
            }
            *(int *)(((long)arg1 + var1 * 8 + 0x4)) = *(int *)(((long)arg0 + var1 * 4 + 0x8));
            if (((unsigned long)((unsigned int)(arg2)) != 3)) {
                *(int *)((((long)arg1 + ((var1 + (var1 * 2)) * 4)) + 4)) = *(int *)(((long)arg0 + var1 * 4 + 0xc));
                if (((unsigned long)((unsigned int)(arg2)) == 2)) {
                    return (unsigned int)((arg2 * arg2));
                }
            }
        }
        *(int *)(((long)arg1 + 0x8)) = *(int *)(((long)arg0 + var1 * 8));
        if (((unsigned long)((unsigned int)(arg2)) != 1)) {
            var12 = (var1 + var1);
            *(int *)(((long)arg1 + var1 * 4 + 0x8)) = *(int *)(((long)arg0 + ((var12 * 4) | 4)));
            if (((unsigned long)((unsigned int)(arg2)) != 2)) {
                *(int *)(((long)arg1 + var1 * 8 + 0x8)) = *(int *)(((long)arg0 + var12 * 4 + 0x8));
                if (((unsigned long)((unsigned int)(arg2)) == 3)) {
                    return (unsigned int)((arg2 * arg2));
                }
                *(int *)((((long)arg1 + ((var1 + (var1 * 2)) * 4)) + 8)) = *(int *)(((long)arg0 + var12 * 4 + 0xc));
            }
        }
        var19 = (var1 + (var1 * 2));
        *(int *)(((long)arg1 + 0xc)) = *(int *)(((long)arg0 + var19 * 4));
        if (((unsigned long)((unsigned int)(arg2)) == 1)) {
            return (unsigned int)((arg2 * arg2));
        }
        *(int *)(((long)arg1 + var1 * 4 + 0xc)) = *(int *)(((long)arg0 + var19 * 4 + 0x4));
        if (((unsigned long)((unsigned int)(arg2)) == 2)) {
            return (unsigned int)((arg2 * arg2));
        }
        *(int *)(((long)arg1 + var1 * 8 + 0xc)) = *(int *)(((long)arg0 + var19 * 4 + 0x8));
        if (((unsigned long)((unsigned int)(arg2)) == 3)) {
            return (unsigned int)((arg2 * arg2));
        }
        *(int *)(((long)arg1 + var19 * 4 + 0xc)) = *(int *)(((long)arg0 + var19 * 4 + 0xc));
    }
    return (unsigned int)((arg2 * arg2));
}

gcc -O0

3/3
determinant3 pass 9 lines
// glaurung: determinant3 @ 0x12ac
int32_t determinant3(const int32_t * arg0) {
    // x86-64 prologue: save rbp
    if ((arg0 != 0)) {
        return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((arg0 + 2)))) * (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((arg0 + 7)))) * (unsigned long)((unsigned int)(*(int *)((arg0 + 3))))))) - (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((arg0 + 6)))) * (unsigned long)((unsigned int)(*(int *)((arg0 + 4))))))))))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((long)arg0))) * (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((arg0 + 8)))) * (unsigned long)((unsigned int)(*(int *)((arg0 + 4))))))) - (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((arg0 + 7)))) * (unsigned long)((unsigned int)(*(int *)((arg0 + 5))))))))))))) - (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((arg0 + 1)))) * (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((arg0 + 8)))) * (unsigned long)((unsigned int)(*(int *)((arg0 + 3))))))) - (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((arg0 + 6)))) * (unsigned long)((unsigned int)(*(int *)((arg0 + 5))))))))))))))))));
    } else {
        return 0;
    }
}
matrix_multiply pass 43 lines
// glaurung: matrix_multiply @ 0x10f9
int32_t matrix_multiply(const int32_t * arg0, const int32_t * arg1, int32_t * arg2, int32_t arg3) {
    int row;
    int column;
    int sum;
    int inner;
    // x86-64 prologue: save rbp
    if ((arg0 == 0)) {
        // x86-64 epilogue: restore rbp
        return 0xffffffff;
    }
    if ((arg1 == 0)) {
        // x86-64 epilogue: restore rbp
        return 0xffffffff;
    }
    if ((arg2 == 0)) {
        // x86-64 epilogue: restore rbp
        return 0xffffffff;
    }
    if (((long)(arg3) < 0)) {
        // x86-64 epilogue: restore rbp
        return 0xffffffff;
    }
    if (((((unsigned long)((unsigned int)(arg3)) == 4) | ((long)(arg3) < 4)) == 0)) {
        // x86-64 epilogue: restore rbp
        return 0xffffffff;
    }
    row = 0;
    while ((row < arg3)) {
        column = 0;
        while ((column < arg3)) {
            sum = 0;
            for (inner = 0; (inner < arg3); inner++) {
                sum = (sum + (unsigned int)(((unsigned long)((unsigned int)(arg1[(long)((int)(((unsigned long)((unsigned int)(column)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(inner)) * arg3))))))])) * (unsigned long)((unsigned int)(arg0[(long)((int)(((unsigned long)((unsigned int)(inner)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(row)) * arg3))))))])))));
            }
            arg2[(long)((int)(((unsigned long)((unsigned int)(column)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(row)) * arg3))))))] = sum;
            column = (column + 1);
        }
        row = (row + 1);
    }
    // x86-64 epilogue: restore rbp
    return (unsigned int)(((unsigned long)((unsigned int)(arg3)) * (unsigned long)((unsigned int)(arg3))));
}
matrix_transpose pass 31 lines
// glaurung: matrix_transpose @ 0x1203
int32_t matrix_transpose(const int32_t * arg0, int32_t * arg1, int32_t arg2) {
    int row;
    int column;
    // x86-64 prologue: save rbp
    if ((arg0 == 0)) {
        // x86-64 epilogue: restore rbp
        return 0xffffffff;
    }
    if ((arg1 == 0)) {
        // x86-64 epilogue: restore rbp
        return 0xffffffff;
    }
    if (((long)(arg2) < 0)) {
        // x86-64 epilogue: restore rbp
        return 0xffffffff;
    }
    if (((((unsigned long)((unsigned int)(arg2)) == 4) | ((long)(arg2) < 4)) == 0)) {
        // x86-64 epilogue: restore rbp
        return 0xffffffff;
    }
    row = 0;
    while ((row < arg2)) {
        for (column = 0; (column < arg2); column++) {
            arg1[(long)((int)(((unsigned long)((unsigned int)(row)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(column)) * arg2))))))] = arg0[(long)((int)(((unsigned long)((unsigned int)(column)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(row)) * arg2))))))];
        }
        row = (row + 1);
    }
    // x86-64 epilogue: restore rbp
    return (unsigned int)(((unsigned long)((unsigned int)(arg2)) * (unsigned long)((unsigned int)(arg2))));
}

gcc -O2

3/3
determinant3 pass 19 lines
// glaurung: determinant3 @ 0x1200
int32_t determinant3(const int32_t * arg0) {
    long var2;
    long var3;
    long var4;
    long var5;
    long var6;
    long var7;
    if ((arg0 == 0)) {
        return 0;
    }
    var2 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x10))));
    var3 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x14))));
    var4 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x20))));
    var5 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x1c))));
    var6 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0xc))));
    var7 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x18))));
    return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var2)) * var4))) - (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var3)) * var5)))))) * *(int *)((long)arg0)))) - (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var4 * var6))) - (unsigned long)((unsigned int)((var3 * var7)))))) * *(int *)(((long)arg0 + 0x4)))))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var5 * var6))) - (unsigned long)((unsigned int)((var2 * var7)))))) * *(int *)(((long)arg0 + 0x8)))))));
}
matrix_multiply pass 80 lines
// glaurung: matrix_multiply @ 0x1100
int32_t matrix_multiply(const int32_t * arg0, const int32_t * arg1, int32_t * arg2, int32_t arg3) {
    int column;
    int inner;
    int row;
    int sum;
    long local_18;
    long local_8;
    long var1;
    long var13;
    long var14;
    long var15;
    long var16;
    long var17;
    long var2;
    long var20;
    long var24;
    long var25;
    long var28;
    long var3;
    long var31;
    int var32;
    long var33;
    int var34;
    long var7;
    long var8;
    if ((arg0 == 0)) {
        return (unsigned int)(-1);
    }
    local_8 = var1;
    var2 = (long)arg1;
    local_18 = var3;
    if ((arg1 == 0)) {
        // x86-64 epilogue: tear down frame
        return 0xffffffff;
    }
    var7 = (long)arg2;
    if ((arg2 == 0)) {
        // x86-64 epilogue: tear down frame
        return 0xffffffff;
    }
    var8 = (unsigned long)((unsigned int)(arg3));
    if (((unsigned long)(4) < (unsigned long)((unsigned long)((unsigned int)(arg3))))) {
        // x86-64 epilogue: tear down frame
        return 0xffffffff;
    }
    if (((unsigned long)((unsigned int)(arg3)) != 0)) {
        var13 = ((long)(arg3) << 2);
        var14 = (long)((((long)arg0 + ((unsigned long)((unsigned int)((arg3 - 1))) * 4)) + 4));
        var15 = var16;
        var17 = 0;
        var20 = (long)arg0;
        do {
            column = 0;
            do {
                var24 = (var2 + ((unsigned long)((unsigned int)(column)) * 4));
                var25 = var20;
                var28 = 0;
                do {
                    var31 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((var25)))) * *(int *)((var24)))));
                    var25 = (var25 + 4);
                    var24 = (var24 + var13);
                    var32 = (var28 + var31);
                    var33 = (unsigned long)((unsigned int)(var32));
                    var28 = (unsigned long)((unsigned int)(var32));
                } while ((var25 != var14));
                *(int *)((var7 + column * 4)) = var33;
                var15 = ((unsigned long)((unsigned int)(column)) + 1);
                column = var15;
            } while (((((unsigned int)(var8) == (unsigned int)(var15)) | ((long)((int)(var8)) < (long)((int)(var15)))) == 0));
            var34 = (var17 + 1);
            var7 = (var7 + var13);
            var20 = (var20 + var13);
            var14 = (var14 + var13);
            var17 = (unsigned long)((unsigned int)(var34));
        } while (((unsigned int)(var8) != (unsigned int)(var34)));
    }
    // x86-64 epilogue: tear down frame
    return (unsigned int)((var8 * var8));
}
matrix_transpose pass 52 lines
// glaurung: matrix_transpose @ 0x11a0
int32_t matrix_transpose(const int32_t * arg0, int32_t * arg1, int32_t arg2) {
    int column;
    int row;
    long var0;
    int var1;
    long var10;
    long var11;
    long var12;
    long var13;
    int var14;
    long var4;
    long var5;
    long var8;
    long var9;
    var0 = (unsigned long)((unsigned int)(arg2));
    if ((arg0 == 0)) {
        return 0xffffffff;
    }
    if ((arg1 == 0)) {
        return 0xffffffff;
    }
    if (((unsigned long)(4) < (unsigned long)((unsigned long)((unsigned int)(arg2))))) {
        return 0xffffffff;
    }
    if (((unsigned long)((unsigned int)(arg2)) == 0)) {
        var1 = (var0 * var0);
        return (unsigned int)(var1);
    }
    var4 = (long)((((long)arg0 + ((unsigned long)((unsigned int)((arg2 - 1))) * 4)) + 4));
    var5 = ((long)(arg2) << 2);
    var8 = (long)arg0;
    var9 = 0;
    var10 = (long)arg1;
    do {
        var11 = var10;
        var12 = var8;
        do {
            var13 = (unsigned long)((unsigned int)(*(int *)((var12))));
            var12 = (var12 + 4);
            *(int *)((var11)) = var13;
            var11 = (var11 + var5);
        } while ((var12 != var4));
        var14 = (var9 + 1);
        var8 = (var8 + var5);
        var10 = (var10 + 4);
        var4 = (var4 + var5);
        var9 = (unsigned long)((unsigned int)(var14));
    } while (((unsigned int)(var0) != (unsigned int)(var14)));
    var1 = (var0 * var0);
    return (unsigned int)(var1);
}

← 213 fixtures