Fixture 70
reaction balance
C · 1 functions · 4 lanes · 4 of 4 function-lanes behave identically
All 4 lanes recompile and return the same results as the original.
Balance a two-reactant, two-product reaction by brute-force search over small integer coefficients, then reduce them by their greatest common divisor. Four nested bounded loops with an early exit on the first conserving assignment.
#include <stdint.h>
/* Balance a two-reactant, two-product reaction by brute-force search over
* small integer coefficients, then reduce them by their greatest common
* divisor. Four nested bounded loops with an early exit on the first
* conserving assignment. */
#define BALANCE_LIMIT 8
#define BALANCE_ELEMENTS 4
static int32_t balance_gcd(int32_t a, int32_t b) {
int32_t guard;
for (guard = 0; guard < 32 && b != 0; ++guard) {
int32_t remainder = a % b;
a = b;
b = remainder;
}
return (a == 0) ? 1 : a;
}
__attribute__((noinline)) int32_t
balance_reaction(const int32_t *reactant_a, const int32_t *reactant_b,
const int32_t *product_a, const int32_t *product_b,
int32_t elements, int32_t *coefficients) {
int32_t ca;
int32_t cb;
int32_t cc;
int32_t cd;
if (reactant_a == 0 || reactant_b == 0 || product_a == 0 ||
product_b == 0 || coefficients == 0 || elements < 1 ||
elements > BALANCE_ELEMENTS) {
return -1;
}
for (ca = 1; ca <= BALANCE_LIMIT; ++ca) {
for (cb = 1; cb <= BALANCE_LIMIT; ++cb) {
for (cc = 1; cc <= BALANCE_LIMIT; ++cc) {
for (cd = 1; cd <= BALANCE_LIMIT; ++cd) {
int32_t element;
int32_t conserved = 1;
for (element = 0; element < elements; ++element) {
int32_t left = ca * reactant_a[element] +
cb * reactant_b[element];
int32_t right = cc * product_a[element] +
cd * product_b[element];
if (left != right) {
conserved = 0;
break;
}
}
if (conserved) {
int32_t divisor = balance_gcd(balance_gcd(ca, cb),
balance_gcd(cc, cd));
coefficients[0] = ca / divisor;
coefficients[1] = cb / divisor;
coefficients[2] = cc / divisor;
coefficients[3] = cd / divisor;
return 1;
}
}
}
}
}
return 0;
} 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
1/1balance_reaction pass 109 lines
// glaurung: balance_reaction @ 0x1100
int32_t balance_reaction(const int32_t * arg0, const int32_t * arg1, const int32_t * arg2, const int32_t * arg3, int32_t arg4, int32_t * arg5) {
extern int balance_gcd(int, int);
int ca;
int cb;
int cc;
int cd;
int conserved;
int element;
int left;
int right;
int divisor;
int local_4;
int local_60;
int var41;
int var43;
int var45;
if ((arg0 != 0)) {
if ((arg1 != 0)) {
if ((arg2 != 0)) {
if ((arg3 != 0)) {
if ((arg5 != 0)) {
if ((1 <= (long)(arg4))) {
if ((((unsigned long)((unsigned int)(arg4)) == 4) | ((long)(arg4) < 4))) {
goto L_1177;
}
}
}
}
}
}
}
local_4 = -1;
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
L_1177: ;
ca = 1;
L_117e: ;
if (((((unsigned long)((unsigned int)(ca)) == 8) | ((long)(ca) < 8)) == 0)) {
goto L_130d;
}
cb = 1;
L_118f: ;
if (((((unsigned long)((unsigned int)(cb)) == 8) | ((long)(cb) < 8)) == 0)) {
goto L_12fa;
}
cc = 1;
L_11a0: ;
if (((((unsigned long)((unsigned int)(cc)) == 8) | ((long)(cc) < 8)) == 0)) {
goto L_12e7;
}
cd = 1;
L_11b1: ;
if (((((unsigned long)((unsigned int)(cd)) == 8) | ((long)(cd) < 8)) == 0)) {
goto L_12d4;
}
conserved = 1;
element = 0;
L_11c9: ;
if ((arg4 <= element)) {
goto L_1246;
}
left = ((unsigned int)(((unsigned long)((unsigned int)(ca)) * arg0[(long)(element)])) + (unsigned int)(((unsigned long)((unsigned int)(cb)) * arg1[(long)(element)])));
right = ((unsigned int)(((unsigned long)((unsigned int)(cc)) * arg2[(long)(element)])) + (unsigned int)(((unsigned long)((unsigned int)(cd)) * arg3[(long)(element)])));
if (((unsigned int)(left) != (unsigned int)(right))) {
conserved = 0;
goto L_1246;
}
goto L_1238;
L_1238: ;
element = ((unsigned int)(element) + 1);
goto L_11c9;
L_1246: ;
if (((unsigned long)((unsigned int)(conserved)) != 0)) {
var41 = balance_gcd((unsigned long)((unsigned int)(ca)), (unsigned long)((unsigned int)(cb)));
local_60 = var41;
var43 = balance_gcd((unsigned long)((unsigned int)(cc)), (unsigned long)((unsigned int)(cd)));
var45 = balance_gcd((unsigned long)((unsigned int)(local_60)), (unsigned long)((unsigned int)(var43)));
divisor = var45;
*(int *)((long)arg5) = ((int)((((long long)(int)((((unsigned long)((long)((int)((unsigned long)((unsigned int)(ca))))) >> 32) & 0xffffffff)) * (((long long)1) << 32)) + (unsigned int)((unsigned long)((unsigned int)(ca)))) / (int)(divisor)));
*(int *)(((long)arg5 + 0x4)) = ((int)((((long long)(int)((((unsigned long)((long)((int)((unsigned long)((unsigned int)(cb))))) >> 32) & 0xffffffff)) * (((long long)1) << 32)) + (unsigned int)((unsigned long)((unsigned int)(cb)))) / (int)(divisor)));
*(int *)(((long)arg5 + 0x8)) = ((int)((((long long)(int)((((unsigned long)((long)((int)((unsigned long)((unsigned int)(cc))))) >> 32) & 0xffffffff)) * (((long long)1) << 32)) + (unsigned int)((unsigned long)((unsigned int)(cc)))) / (int)(divisor)));
*(int *)(((long)arg5 + 0xc)) = ((int)((((long long)(int)((((unsigned long)((long)((int)((unsigned long)((unsigned int)(cd))))) >> 32) & 0xffffffff)) * (((long long)1) << 32)) + (unsigned int)((unsigned long)((unsigned int)(cd)))) / (int)(divisor)));
// x86-64 epilogue: restore rbp
return 1;
}
goto L_12c6;
L_12c6: ;
cd = ((unsigned int)(cd) + 1);
goto L_11b1;
L_12d4: ;
goto L_12d9;
L_12d9: ;
cc = ((unsigned int)(cc) + 1);
goto L_11a0;
L_12e7: ;
goto L_12ec;
L_12ec: ;
cb = ((unsigned int)(cb) + 1);
goto L_118f;
L_12fa: ;
goto L_12ff;
L_12ff: ;
ca = ((unsigned int)(ca) + 1);
goto L_117e;
L_130d: ;
// x86-64 epilogue: restore rbp
return 0;
} clang -O2
1/1balance_reaction pass 231 lines
// glaurung: balance_reaction @ 0x1100
int32_t balance_reaction(const int32_t * arg0, const int32_t * arg1, const int32_t * arg2, const int32_t * arg3, int32_t arg4, int32_t * arg5) {
int cb;
int cc;
int cd;
int left;
int divisor;
int ca;
int conserved;
int element;
int guard;
int right;
long local_38;
long local_48;
long local_50;
long local_58;
int local_5c;
int local_60;
int local_64;
int local_68;
long var1;
long var101;
long var105;
long var107;
long var108;
long var109;
long var110;
long var113;
long var12;
long var120;
long var121;
long var122;
long var123;
int var127;
long var13;
long var20;
long var21;
long var22;
int var23;
long var3;
long var4;
long var5;
int var55;
long var56;
long var6;
int var63;
int var71;
int var78;
int var82;
int var87;
long var94;
long var96;
long var97;
long var98;
var1 = 0xffffffff;
if (((unsigned long)((unsigned long)((unsigned int)((arg4 - 5)))) < (unsigned long)(0xfffffffc))) {
// x86-64 epilogue: tear down frame
return (unsigned int)(var1);
}
if ((arg0 == 0)) {
// x86-64 epilogue: tear down frame
return (unsigned int)(var1);
}
if ((arg1 == 0)) {
// x86-64 epilogue: tear down frame
return (unsigned int)(var1);
}
if ((arg2 == 0)) {
// x86-64 epilogue: tear down frame
return (unsigned int)(var1);
}
if ((arg3 == 0)) {
// x86-64 epilogue: tear down frame
return (unsigned int)(var1);
}
if ((arg5 == 0)) {
// x86-64 epilogue: tear down frame
return (unsigned int)(var1);
}
local_38 = (unsigned int)(arg4);
var3 = (unsigned long)((unsigned int)(*(int *)(((long)arg0))));
var4 = (unsigned long)((unsigned int)(*(int *)(((long)arg1))));
var5 = (unsigned long)((unsigned int)(*(int *)(((long)arg2))));
var6 = (unsigned long)((unsigned int)(*(int *)(((long)arg3))));
local_58 = var3;
local_50 = var4;
local_48 = var5;
var12 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var3 + var4))) - var6))) - var5)));
local_68 = 1;
L_117e: ;
local_64 = var12;
var13 = (unsigned long)((unsigned int)(var12));
cb = 1;
L_118b: ;
local_60 = var13;
cc = 1;
L_1196: ;
local_5c = var13;
cd = 1;
goto L_11ca;
L_11b0: ;
var4 = var21;
var22 = var21;
if (((unsigned long)(local_38) <= (unsigned long)(var20))) {
goto L_12f4;
}
L_11bb: ;
var23 = (cd + 1);
var13 = (unsigned long)((unsigned int)((var13 - var6)));
cd = (unsigned long)((unsigned int)(var23));
if (((unsigned long)((unsigned int)(var23)) == 9)) {
goto L_12a0;
}
L_11ca: ;
if (((unsigned long)((unsigned int)(var13)) != 0)) {
goto L_11bb;
}
var22 = var4;
if (((unsigned long)((unsigned int)(arg4)) == 1)) {
goto L_12f4;
}
var22 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg2 + 0x4)))) * cc)));
var20 = 1;
var21 = var22;
if (((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + 0x4)))) * cb))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x4)))) * local_68))))) != (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg3 + 0x4)))) * cd))) + var22)))) {
goto L_11b0;
}
if (((unsigned long)((unsigned int)(arg4)) == 2)) {
goto L_12f4;
}
var55 = ((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg3 + 0x8)))) * cd)) + (unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg2 + 0x8)))) * cc)));
var56 = (unsigned long)((unsigned int)(var55));
var20 = 2;
var21 = (unsigned long)((unsigned int)(var55));
if (((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + 0x8)))) * cb))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x8)))) * local_68))))) != (unsigned int)(var55))) {
goto L_11b0;
}
var22 = var56;
if (((unsigned long)((unsigned int)(arg4)) == 3)) {
goto L_12f4;
}
var63 = ((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg1 + 0xc)))) * cb)) + (unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0xc)))) * local_68)));
left = (unsigned long)((unsigned int)(var63));
var71 = ((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg3 + 0xc)))) * cd)) + (unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg2 + 0xc)))) * cc)));
var20 = (4 - ((unsigned int)(var63) != (unsigned int)(var71)));
var21 = (unsigned long)((unsigned int)(var63));
if (((unsigned int)(var63) != (unsigned int)(var71))) {
goto L_11b0;
}
var21 = (unsigned long)((unsigned int)(left));
if (((unsigned long)((unsigned int)(arg4)) != 4)) {
goto L_11b0;
}
var22 = (unsigned long)((unsigned int)(left));
goto L_12f4;
L_12a0: ;
var78 = (cc + 1);
var13 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(local_5c)) - (unsigned int)(local_48))));
cc = (unsigned long)((unsigned int)(var78));
if (((unsigned long)((unsigned int)(var78)) != 9)) {
goto L_1196;
}
var82 = (cb + 1);
var13 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(local_60)) + (unsigned int)(local_50))));
cb = (unsigned long)((unsigned int)(var82));
if (((unsigned long)((unsigned int)(var82)) != 9)) {
goto L_118b;
}
var87 = ((unsigned int)(local_68) + 1);
var12 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(local_64)) + (unsigned int)(local_58))));
var1 = 0;
local_68 = var87;
var4 = (unsigned long)((unsigned int)(var87));
if (((unsigned long)((unsigned int)(var87)) != 9)) {
goto L_117e;
}
// x86-64 epilogue: tear down frame
return (unsigned int)(var1);
L_12f4: ;
var94 = (unsigned long)((unsigned int)(local_68));
var96 = (unsigned long)((unsigned int)(cb));
var97 = 0;
L_1300: ;
var98 = (unsigned long)((unsigned int)(var96));
var101 = ((int)((((long long)(int)((((unsigned long)((long)((int)(var94))) >> 32) & 0xffffffff)) * (((long long)1) << 32)) + (unsigned int)(var94)) % (int)((unsigned long)((unsigned int)(var96)))));
if (((unsigned long)((unsigned long)((unsigned int)(var97))) <= (unsigned long)(30))) {
var97 = (unsigned long)((unsigned int)((var97 + 1)));
var94 = (unsigned long)((unsigned int)(var98));
var96 = var101;
if (((unsigned long)((unsigned int)(var101)) != 0)) {
goto L_1300;
}
}
var105 = (unsigned long)((unsigned int)(cc));
var107 = (long)arg5;
var108 = 0;
var109 = (unsigned long)((unsigned int)(cd));
L_1320: ;
var110 = (unsigned long)((unsigned int)(var109));
var113 = ((int)((((long long)(int)((((unsigned long)((long)((int)(var105))) >> 32) & 0xffffffff)) * (((long long)1) << 32)) + (unsigned int)(var105)) % (int)((unsigned long)((unsigned int)(var109)))));
if (((unsigned long)((unsigned long)((unsigned int)(var108))) <= (unsigned long)(30))) {
var108 = (unsigned long)((unsigned int)((var108 + 1)));
var105 = (unsigned long)((unsigned int)(var110));
var109 = var113;
if (((unsigned long)((unsigned int)(var113)) != 0)) {
goto L_1320;
}
}
var120 = 0;
var121 = (((unsigned long)((unsigned int)(var98)) == 0) ? 1 : var98);
var122 = (((unsigned long)((unsigned int)(var110)) == 0) ? 1 : var110);
L_1350: ;
var123 = (unsigned long)((unsigned int)(var122));
var127 = ((int)((((long long)(int)((((unsigned long)((long)((int)((unsigned long)((unsigned int)(var121))))) >> 32) & 0xffffffff)) * (((long long)1) << 32)) + (unsigned int)((unsigned long)((unsigned int)(var121)))) % (int)(var122)));
if (((unsigned long)((unsigned long)((unsigned int)(var120))) <= (unsigned long)(30))) {
var120 = (unsigned long)((unsigned int)((var120 + 1)));
var121 = (unsigned long)((unsigned int)(var123));
var122 = (unsigned long)((unsigned int)(var127));
if (((unsigned long)((unsigned int)(var127)) != 0)) {
goto L_1350;
}
}
var1 = 1;
divisor = (((unsigned long)((unsigned int)(var123)) == 0) ? 1 : var123);
*(int *)((var107)) = ((int)((((long long)(int)((((unsigned long)((long)((int)((unsigned long)((unsigned int)(local_68))))) >> 32) & 0xffffffff)) * (((long long)1) << 32)) + (unsigned int)((unsigned long)((unsigned int)(local_68)))) / (int)(divisor)));
*(int *)((var107 + 0x4)) = ((int)((((long long)(int)((((unsigned long)((long)((int)((unsigned long)((unsigned int)(cb))))) >> 32) & 0xffffffff)) * (((long long)1) << 32)) + (unsigned int)((unsigned long)((unsigned int)(cb)))) / (int)(divisor)));
*(int *)((var107 + 0x8)) = ((int)((((long long)(int)((((unsigned long)((long)((int)((unsigned long)((unsigned int)(cc))))) >> 32) & 0xffffffff)) * (((long long)1) << 32)) + (unsigned int)((unsigned long)((unsigned int)(cc)))) / (int)(divisor)));
*(int *)((var107 + 0xc)) = ((int)((((long long)(int)((((unsigned long)((long)((int)((unsigned long)((unsigned int)(cd))))) >> 32) & 0xffffffff)) * (((long long)1) << 32)) + (unsigned int)((unsigned long)((unsigned int)(cd)))) / (int)(divisor)));
// x86-64 epilogue: tear down frame
return 1;
} gcc -O0
1/1balance_reaction pass 98 lines
// glaurung: balance_reaction @ 0x1148
int32_t balance_reaction(const int32_t * arg0, const int32_t * arg1, const int32_t * arg2, const int32_t * arg3, int32_t arg4, int32_t * arg5) {
extern int balance_gcd(int, int);
int ca;
int cb;
int cc;
int cd;
int conserved;
int element;
int left;
int right;
int divisor;
int var48;
long var50;
int var53;
int var55;
if ((arg0 != 0)) {
if ((arg1 != 0)) {
if ((arg2 != 0)) {
if ((arg3 != 0)) {
if ((arg5 != 0)) {
if (((((unsigned long)((unsigned int)(arg4)) == 0) | ((long)(arg4) < 0)) == 0)) {
if ((((unsigned long)((unsigned int)(arg4)) == 4) | ((long)(arg4) < 4))) {
goto L_11a6;
}
}
}
}
}
}
}
// x86-64 epilogue: restore rbp
return 0xffffffff;
L_11a6: ;
ca = 1;
goto L_1329;
L_11b2: ;
cb = 1;
goto L_131b;
L_11be: ;
cc = 1;
goto L_130d;
L_11ca: ;
cd = 1;
goto L_12ff;
L_11d6: ;
conserved = 1;
element = 0;
goto L_1274;
L_11e9: ;
left = ((unsigned int)(((unsigned long)((unsigned int)(arg1[(long)(element)])) * cb)) + (unsigned int)(((unsigned long)((unsigned int)(arg0[(long)(element)])) * ca)));
right = ((unsigned int)(((unsigned long)((unsigned int)(arg3[(long)(element)])) * cd)) + (unsigned int)(((unsigned long)((unsigned int)(arg2[(long)(element)])) * cc)));
if (((unsigned int)(left) != (unsigned int)(right))) {
conserved = 0;
goto L_1280;
}
element = (element + 1);
L_1274: ;
if ((element < arg4)) {
goto L_11e9;
}
L_1280: ;
if (((unsigned long)((unsigned int)(conserved)) != 0)) {
var48 = balance_gcd((unsigned long)((unsigned int)(cc)), (unsigned long)((unsigned int)(cd)));
var50 = (unsigned long)((unsigned int)(var48));
var53 = balance_gcd((unsigned long)((unsigned int)(ca)), (unsigned long)((unsigned int)(cb)));
var55 = balance_gcd((unsigned long)((unsigned int)(var53)), (unsigned long)((unsigned int)(var50)));
divisor = var55;
*(int *)((long)arg5) = ((int)((((long long)(int)((((unsigned long)((long)((int)((unsigned long)((unsigned int)(ca))))) >> 32) & 0xffffffff)) * (((long long)1) << 32)) + (unsigned int)((unsigned long)((unsigned int)(ca)))) / (int)(divisor)));
*(int *)((arg5 + 1)) = ((int)((((long long)(int)((((unsigned long)((long)((int)((unsigned long)((unsigned int)(cb))))) >> 32) & 0xffffffff)) * (((long long)1) << 32)) + (unsigned int)((unsigned long)((unsigned int)(cb)))) / (int)(divisor)));
*(int *)((arg5 + 2)) = ((int)((((long long)(int)((((unsigned long)((long)((int)((unsigned long)((unsigned int)(cc))))) >> 32) & 0xffffffff)) * (((long long)1) << 32)) + (unsigned int)((unsigned long)((unsigned int)(cc)))) / (int)(divisor)));
*(int *)((arg5 + 3)) = ((int)((((long long)(int)((((unsigned long)((long)((int)((unsigned long)((unsigned int)(cd))))) >> 32) & 0xffffffff)) * (((long long)1) << 32)) + (unsigned int)((unsigned long)((unsigned int)(cd)))) / (int)(divisor)));
// x86-64 epilogue: restore rbp
return 1;
}
cd = (cd + 1);
L_12ff: ;
if ((((unsigned long)((unsigned int)(cd)) == 8) | ((long)(cd) < 8))) {
goto L_11d6;
}
cc = (cc + 1);
L_130d: ;
if ((((unsigned long)((unsigned int)(cc)) == 8) | ((long)(cc) < 8))) {
goto L_11ca;
}
cb = (cb + 1);
L_131b: ;
if ((((unsigned long)((unsigned int)(cb)) == 8) | ((long)(cb) < 8))) {
goto L_11be;
}
ca = (ca + 1);
L_1329: ;
if ((((unsigned long)((unsigned int)(ca)) == 8) | ((long)(ca) < 8))) {
goto L_11b2;
}
// x86-64 epilogue: restore rbp
return 0;
} gcc -O2
1/1balance_reaction pass 180 lines
// glaurung: balance_reaction @ 0x1100
int32_t balance_reaction(const int32_t * arg0, const int32_t * arg1, const int32_t * arg2, const int32_t * arg3, int32_t arg4, int32_t * arg5) {
int ca;
int cb;
int cc;
int cd;
int element;
int remainder;
int guard;
int divisor;
long local_10;
long local_18;
long local_28;
long local_8;
long ret;
long var0;
long var1;
int var100;
int var102;
long var2;
long var3;
long var37;
long var4;
long var40;
long var41;
long var43;
long var44;
int var45;
long var49;
long var5;
long var52;
long var53;
long var54;
long var56;
int var57;
long var6;
long var62;
int var64;
long var66;
long var67;
int var68;
long var8;
int var97;
int var98;
if ((arg0 == 0)) {
goto L_1260;
}
var0 = (long)arg1;
if ((arg1 == 0)) {
goto L_1260;
}
var1 = (long)arg2;
if ((arg2 == 0)) {
goto L_1260;
}
local_8 = var2;
local_10 = var3;
local_18 = var4;
local_28 = var5;
var6 = (long)arg3;
if ((arg3 == 0)) {
goto L_1250;
}
if (((unsigned long)(3) < (unsigned long)((unsigned long)((unsigned int)((arg4 - 1)))))) {
goto L_1250;
}
if ((arg5 == 0)) {
goto L_1250;
}
var8 = (long)arg0;
ca = 1;
L_1158: ;
cb = 1;
L_115e: ;
cc = 1;
L_1163: ;
cd = 1;
L_1170: ;
element = 0;
do {
if (((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((var8 + element * 4)))) * ca))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((var0 + element * 4)))) * cb))))) != (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((var1 + element * 4)))) * cc))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((var6 + element * 4)))) * cd))))))) {
goto L_1270;
}
element = (element + 1);
} while (((((unsigned int)(arg4) == (unsigned int)(element)) | (arg4 < element)) == 0));
var37 = (unsigned long)((unsigned int)(cc));
var40 = (unsigned long)((unsigned int)(cd));
var41 = 0;
goto L_11bc;
L_11b8: ;
var40 = (unsigned long)((unsigned int)(remainder));
var41 = var43;
if (((unsigned long)((unsigned int)(remainder)) == 0)) {
goto L_11cb;
}
L_11bc: ;
var44 = (unsigned long)((unsigned int)(var40));
var45 = (var41 + 1);
var43 = (unsigned long)((unsigned int)(var45));
remainder = ((int)((((long long)(int)((((unsigned long)((long)((int)(var37))) >> 32) & 0xffffffff)) * (((long long)1) << 32)) + (unsigned int)(var37)) % (int)((unsigned long)((unsigned int)(var40)))));
var37 = (unsigned long)((unsigned int)(var40));
if ((((unsigned long)((unsigned int)(var45)) == 31) | ((long)((int)(var45)) < 31))) {
goto L_11b8;
}
L_11cb: ;
var49 = (unsigned long)((unsigned int)(ca));
var52 = 0;
var53 = (unsigned long)((unsigned int)(cb));
goto L_11e4;
L_11e0: ;
var52 = (unsigned long)((unsigned int)(guard));
var53 = var54;
if (((unsigned long)((unsigned int)(var54)) == 0)) {
goto L_11f5;
}
L_11e4: ;
var56 = (unsigned long)((unsigned int)(var53));
var57 = (var52 + 1);
guard = (unsigned long)((unsigned int)(var57));
var54 = ((int)((((long long)(int)((((unsigned long)((long)((int)(var49))) >> 32) & 0xffffffff)) * (((long long)1) << 32)) + (unsigned int)(var49)) % (int)((unsigned long)((unsigned int)(var53)))));
var49 = (unsigned long)((unsigned int)(var53));
if ((((unsigned long)((unsigned int)(var57)) == 31) | ((long)((int)(var57)) < 31))) {
goto L_11e0;
}
L_11f5: ;
var62 = 0;
divisor = var44;
goto L_1206;
L_1200: ;
if (((unsigned long)((unsigned int)(var64)) == 0)) {
goto L_1217;
}
var62 = var66;
divisor = (unsigned long)((unsigned int)(var64));
L_1206: ;
var67 = (unsigned long)((unsigned int)(var56));
var68 = (var62 + 1);
var66 = (unsigned long)((unsigned int)(var68));
var56 = (unsigned long)((unsigned int)(divisor));
var64 = ((int)((((long long)(int)((((unsigned long)((long)((int)(var67))) >> 32) & 0xffffffff)) * (((long long)1) << 32)) + (unsigned int)(var67)) % (int)(divisor)));
if ((((unsigned long)((unsigned int)(var68)) == 31) | ((long)((int)(var68)) < 31))) {
goto L_1200;
}
L_1217: ;
*(int *)(((long)arg5)) = ((int)((((long long)(int)((((unsigned long)((long)((int)((unsigned long)((unsigned int)(ca))))) >> 32) & 0xffffffff)) * (((long long)1) << 32)) + (unsigned int)((unsigned long)((unsigned int)(ca)))) / (int)(divisor)));
*(int *)(((long)arg5 + 0x4)) = ((int)((((long long)(int)((((unsigned long)((long)((int)((unsigned long)((unsigned int)(cb))))) >> 32) & 0xffffffff)) * (((long long)1) << 32)) + (unsigned int)((unsigned long)((unsigned int)(cb)))) / (int)(divisor)));
*(int *)(((long)arg5 + 0x8)) = ((int)((((long long)(int)((((unsigned long)((long)((int)((unsigned long)((unsigned int)(cc))))) >> 32) & 0xffffffff)) * (((long long)1) << 32)) + (unsigned int)((unsigned long)((unsigned int)(cc)))) / (int)(divisor)));
*(int *)(((long)arg5 + 0xc)) = ((int)((((long long)(int)((((unsigned long)((long)((int)((unsigned long)((unsigned int)(cd))))) >> 32) & 0xffffffff)) * (((long long)1) << 32)) + (unsigned int)((unsigned long)((unsigned int)(cd)))) / (int)(divisor)));
return 1;
L_1250: ;
ret = 0xffffffff;
L_1255: ;
// x86-64 epilogue: tear down frame
return ret;
L_1260: ;
return 0xffffffff;
L_1270: ;
var97 = (cd + 1);
cd = (unsigned long)((unsigned int)(var97));
if (((unsigned long)((unsigned int)(var97)) != 9)) {
goto L_1170;
}
var98 = (cc + 1);
cc = (unsigned long)((unsigned int)(var98));
if (((unsigned long)((unsigned int)(var98)) != 9)) {
goto L_1163;
}
var100 = (cb + 1);
cb = (unsigned long)((unsigned int)(var100));
if (((unsigned long)((unsigned int)(var100)) != 9)) {
goto L_115e;
}
var102 = (ca + 1);
ca = (unsigned long)((unsigned int)(var102));
if (((unsigned long)((unsigned int)(var102)) != 9)) {
goto L_1158;
}
ret = 0;
goto L_1255;
}