Fixture 43
base64
C · 2 functions · 4 lanes · 8 of 8 function-lanes behave identically
All 4 lanes recompile and return the same results as the original.
Base64 encode and decode. Three input bytes become four 6-bit groups, so the shift/mask lattice crosses byte boundaries in both directions -- a precise test of sub-register width tracking.
#include <stdint.h>
/* Base64 encode and decode. Three input bytes become four 6-bit groups, so
* the shift/mask lattice crosses byte boundaries in both directions -- a
* precise test of sub-register width tracking. */
#define B64_INPUT_MAX 12
#define B64_OUTPUT_MAX 16
static uint8_t encode_symbol(uint32_t sextet) {
if (sextet < 26u) {
return (uint8_t)((uint32_t)'A' + sextet);
}
if (sextet < 52u) {
return (uint8_t)((uint32_t)'a' + (sextet - 26u));
}
if (sextet < 62u) {
return (uint8_t)((uint32_t)'0' + (sextet - 52u));
}
if (sextet == 62u) {
return (uint8_t)'+';
}
return (uint8_t)'/';
}
static int32_t decode_symbol(uint8_t symbol) {
if (symbol >= (uint8_t)'A' && symbol <= (uint8_t)'Z') {
return (int32_t)symbol - 'A';
}
if (symbol >= (uint8_t)'a' && symbol <= (uint8_t)'z') {
return (int32_t)symbol - 'a' + 26;
}
if (symbol >= (uint8_t)'0' && symbol <= (uint8_t)'9') {
return (int32_t)symbol - '0' + 52;
}
if (symbol == (uint8_t)'+') {
return 62;
}
if (symbol == (uint8_t)'/') {
return 63;
}
return -1;
}
__attribute__((noinline)) int32_t
base64_encode(const uint8_t *input, int32_t length, uint8_t *output) {
int32_t produced = 0;
int32_t index = 0;
if (input == 0 || output == 0 || length < 0 || length > B64_INPUT_MAX) {
return -1;
}
while (index < length) {
uint32_t group = (uint32_t)input[index] << 16;
int32_t remaining = length - index;
if (remaining > 1) {
group |= (uint32_t)input[index + 1] << 8;
}
if (remaining > 2) {
group |= (uint32_t)input[index + 2];
}
output[produced] = encode_symbol((group >> 18) & 0x3Fu);
output[produced + 1] = encode_symbol((group >> 12) & 0x3Fu);
output[produced + 2] =
(remaining > 1) ? encode_symbol((group >> 6) & 0x3Fu) : (uint8_t)'=';
output[produced + 3] =
(remaining > 2) ? encode_symbol(group & 0x3Fu) : (uint8_t)'=';
produced += 4;
index += 3;
}
return produced;
}
__attribute__((noinline)) int32_t
base64_decode(const uint8_t *input, int32_t length, uint8_t *output) {
int32_t produced = 0;
int32_t index;
if (input == 0 || output == 0 || length < 0 || length > B64_OUTPUT_MAX ||
(length % 4) != 0) {
return -1;
}
for (index = 0; index < length; index += 4) {
int32_t a = decode_symbol(input[index]);
int32_t b = decode_symbol(input[index + 1]);
int32_t c = decode_symbol(input[index + 2]);
int32_t d = decode_symbol(input[index + 3]);
uint32_t group;
int32_t pad = 0;
if (a < 0 || b < 0) {
return -2;
}
if (c < 0) {
c = 0;
pad += 1;
}
if (d < 0) {
d = 0;
pad += 1;
}
group = ((uint32_t)a << 18) | ((uint32_t)b << 12) |
((uint32_t)c << 6) | (uint32_t)d;
output[produced] = (uint8_t)((group >> 16) & 0xFFu);
produced += 1;
if (pad < 2) {
output[produced] = (uint8_t)((group >> 8) & 0xFFu);
produced += 1;
}
if (pad < 1) {
output[produced] = (uint8_t)(group & 0xFFu);
produced += 1;
}
}
return produced;
} 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
2/2base64_decode pass 92 lines
// glaurung: base64_decode @ 0x1330
int32_t base64_decode(const uint8_t * arg0, int32_t arg1, uint8_t * arg2) {
extern int decode_symbol(unsigned char);
int produced;
int index;
int a;
int b;
int c;
int d;
int pad;
unsigned int group;
int local_4;
int var16;
int var23;
int var30;
int var4;
long var5;
long var60;
int var9;
produced = 0;
if ((arg0 != 0)) {
if ((arg2 != 0)) {
if ((0 <= (long)(arg1))) {
if (((((unsigned long)((unsigned int)(arg1)) == 16) | ((long)(arg1) < 16)) != 0)) {
var4 = ((int)((((long long)(int)((((unsigned long)((long)((int)((unsigned long)((unsigned int)(arg1))))) >> 32) & 0xffffffff)) * (((long long)1) << 32)) + (unsigned int)((unsigned long)((unsigned int)(arg1)))) % (int)(4)));
if (((unsigned long)((unsigned int)(var4)) == 0)) {
goto L_1394;
}
}
}
}
}
local_4 = -1;
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
L_1394: ;
index = 0;
var5 = (unsigned long)((unsigned int)(var4));
L_139b: ;
if ((arg1 <= index)) {
goto L_1504;
}
var9 = decode_symbol((unsigned int)((unsigned char)(arg0[index])));
a = var9;
var16 = decode_symbol((unsigned int)((unsigned char)(arg0[(long)((int)(((unsigned long)((unsigned int)(index)) + 1)))])));
b = var16;
var23 = decode_symbol((unsigned int)((unsigned char)(arg0[(long)((int)(((unsigned long)((unsigned int)(index)) + 2)))])));
c = var23;
var30 = decode_symbol((unsigned int)((unsigned char)(arg0[(long)((int)(((unsigned long)((unsigned int)(index)) + 3)))])));
d = var30;
pad = 0;
if ((0 <= (long)(a))) {
if ((0 <= (long)(b))) {
goto L_142d;
}
}
local_4 = -2;
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
L_142d: ;
if (((long)(c) < 0)) {
c = 0;
pad = ((unsigned int)(pad) + 1);
}
if (((long)(d) < 0)) {
d = 0;
pad = ((unsigned int)(pad) + 1);
}
group = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(a)) << 18))) | (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(b)) << 12)))))) | (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(c)) << 6))))) | d);
var60 = ((var5 & -256) | ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(group) >> 16))) & 255))) & 255));
arg2[produced] = var60;
produced = ((unsigned int)(produced) + 1);
if (((long)(pad) < 2)) {
var60 = ((var60 & -256) | ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(group) >> 8))) & 255))) & 255));
arg2[produced] = var60;
produced = ((unsigned int)(produced) + 1);
}
if (((long)(pad) < 1)) {
var60 = ((var60 & -256) | ((unsigned long)((unsigned int)((group & 255))) & 255));
arg2[produced] = var60;
produced = ((unsigned int)(produced) + 1);
}
goto L_14f6;
L_14f6: ;
index = ((unsigned int)(index) + 4);
var5 = var60;
goto L_139b;
L_1504: ;
local_4 = produced;
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
} base64_encode pass 80 lines
// glaurung: base64_encode @ 0x1100
int32_t base64_encode(const uint8_t * arg0, int32_t arg1, uint8_t * arg2) {
extern unsigned char encode_symbol(unsigned int);
int produced;
int index;
unsigned int group;
int remaining;
int local_34;
int local_38;
int local_4;
long var0;
unsigned char var31;
long var34;
unsigned char var42;
long var45;
unsigned char var57;
long var62;
unsigned char var71;
// x86-64 prologue: save rbp, frame 64 bytes
produced = 0;
index = 0;
if ((arg0 == 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)(arg1) < 0)) {
local_4 = -1;
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
}
if (((((unsigned long)((unsigned int)(arg1)) == 12) | ((long)(arg1) < 12)) == 0)) {
local_4 = -1;
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
}
var0 = (long)arg2;
while ((index < arg1)) {
group = ((unsigned int)((unsigned char)(arg0[index])) << 16);
remaining = ((unsigned int)(arg1) - index);
if (((((unsigned long)((unsigned int)(remaining)) == 1) | ((long)(remaining) < 1)) == 0)) {
group = ((unsigned int)(((unsigned int)((unsigned char)(arg0[(long)((int)(((unsigned long)((unsigned int)(index)) + 1)))])) << 8)) | group);
}
if (((((unsigned long)((unsigned int)(remaining)) == 2) | ((long)(remaining) < 2)) == 0)) {
group = ((unsigned int)((unsigned char)(arg0[(long)((int)(((unsigned long)((unsigned int)(index)) + 2)))])) | group);
}
var31 = encode_symbol((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(group) >> 18))) & 63))));
var34 = ((var0 & -256) | ((unsigned long)(var31) & 255));
arg2[produced] = var34;
var42 = encode_symbol((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(group) >> 12))) & 63))));
var45 = ((var34 & -256) | ((unsigned long)(var42) & 255));
arg2[(long)((int)(((unsigned long)((unsigned int)(produced)) + 1)))] = var45;
if ((((unsigned long)((unsigned int)(remaining)) == 1) | ((long)(remaining) < 1))) {
local_34 = 61;
} else {
var57 = encode_symbol((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(group) >> 6))) & 63))));
local_34 = (unsigned char)((var57 & 255));
}
var62 = ((var45 & -256) | ((unsigned long)((unsigned int)(local_34)) & 255));
arg2[(long)((int)(((unsigned long)((unsigned int)(produced)) + 2)))] = var62;
if ((((unsigned long)((unsigned int)(remaining)) == 2) | ((long)(remaining) < 2))) {
local_38 = 61;
} else {
var71 = encode_symbol((unsigned long)((unsigned int)((group & 63))));
local_38 = (unsigned char)((var71 & 255));
}
var0 = ((var62 & -256) | ((unsigned long)((unsigned int)(local_38)) & 255));
arg2[(long)((int)(((unsigned long)((unsigned int)(produced)) + 3)))] = var0;
produced = ((unsigned int)(produced) + 4);
index = ((unsigned int)(index) + 3);
}
local_4 = produced;
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
} clang -O2
2/2base64_decode pass 154 lines
// glaurung: base64_decode @ 0x12d0
int32_t base64_decode(const uint8_t * arg0, int32_t arg1, uint8_t * arg2) {
int produced;
int index;
int pad;
int a;
int b;
int c;
int d;
long var0;
int var10;
int var101;
long var114;
long var119;
long var120;
long var14;
long var3;
int var30;
long var34;
int var50;
long var54;
long var6;
long var7;
int var70;
long var74;
long var90;
var0 = 0xffffffff;
produced = 0xffffffff;
if (((unsigned long)((unsigned char)((arg1 & 3))) != 0)) {
// x86-64 epilogue: tear down frame
return produced;
}
produced = var0;
if (((unsigned long)(16) < (unsigned long)((unsigned long)((unsigned int)(arg1))))) {
// x86-64 epilogue: tear down frame
return produced;
}
produced = var0;
if ((arg0 == 0)) {
// x86-64 epilogue: tear down frame
return produced;
}
produced = var0;
if ((arg2 == 0)) {
// x86-64 epilogue: tear down frame
return produced;
}
if (((unsigned long)((unsigned int)(arg1)) == 0)) {
// x86-64 epilogue: tear down frame
return 0;
}
var3 = 62;
var6 = 0;
var7 = 0;
goto L_1330;
L_1320: ;
index = (var6 + 4);
var6 = (unsigned long)((unsigned int)(index));
var7 = (unsigned long)((unsigned int)(produced));
if ((arg1 <= index)) {
// x86-64 epilogue: tear down frame
return produced;
}
L_1330: ;
var10 = (unsigned int)((unsigned char)(*(char *)(((long)arg0 + var6))));
if (((unsigned long)((unsigned long)((unsigned char)(((unsigned long)((unsigned int)((var10 - 65))) & 255)))) <= (unsigned long)(25))) {
var14 = (unsigned long)((unsigned int)((var10 - 65)));
goto L_1390;
}
if (((unsigned long)((unsigned long)((unsigned char)(((unsigned long)((unsigned int)((var10 - 97))) & 255)))) <= (unsigned long)(25))) {
var14 = (unsigned long)((unsigned int)((var10 - 71)));
goto L_1390;
}
if (((unsigned long)((unsigned long)((unsigned char)(((unsigned long)((unsigned int)((var10 - 48))) & 255)))) <= (unsigned long)(9))) {
var14 = (unsigned long)((unsigned int)((var10 + 4)));
goto L_1390;
}
var14 = (unsigned long)((unsigned int)((((unsigned long)((unsigned char)((var10 & 255))) == 43) ? var3 : (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((((unsigned long)((unsigned char)((var10 & 255))) == 47) << 6))) - 1))))));
L_1390: ;
var30 = (unsigned int)((unsigned char)(*(char *)(((long)arg0 + var6 + 0x1))));
if (((unsigned long)((unsigned long)((unsigned char)(((unsigned long)((unsigned int)((var30 - 65))) & 255)))) <= (unsigned long)(25))) {
var34 = (unsigned long)((unsigned int)((var30 - 65)));
goto L_13f0;
}
if (((unsigned long)((unsigned long)((unsigned char)(((unsigned long)((unsigned int)((var30 - 97))) & 255)))) <= (unsigned long)(25))) {
var34 = (unsigned long)((unsigned int)((var30 - 71)));
goto L_13f0;
}
if (((unsigned long)((unsigned long)((unsigned char)(((unsigned long)((unsigned int)((var30 - 48))) & 255)))) <= (unsigned long)(9))) {
var34 = (unsigned long)((unsigned int)((var30 + 4)));
goto L_13f0;
}
var34 = (unsigned long)((unsigned int)((((unsigned long)((unsigned char)((var30 & 255))) == 43) ? var3 : (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((((unsigned long)((unsigned char)((var30 & 255))) == 47) << 6))) - 1))))));
L_13f0: ;
var50 = (unsigned int)((unsigned char)(*(char *)(((long)arg0 + var6 + 0x2))));
if (((unsigned long)((unsigned long)((unsigned char)(((unsigned long)((unsigned int)((var50 - 65))) & 255)))) <= (unsigned long)(25))) {
var54 = (unsigned long)((unsigned int)((var50 - 65)));
goto L_1450;
}
if (((unsigned long)((unsigned long)((unsigned char)(((unsigned long)((unsigned int)((var50 - 97))) & 255)))) <= (unsigned long)(25))) {
var54 = (unsigned long)((unsigned int)((var50 - 71)));
goto L_1450;
}
if (((unsigned long)((unsigned long)((unsigned char)(((unsigned long)((unsigned int)((var50 - 48))) & 255)))) <= (unsigned long)(9))) {
var54 = (unsigned long)((unsigned int)((var50 + 4)));
goto L_1450;
}
var54 = (unsigned long)((unsigned int)((((unsigned long)((unsigned char)((var50 & 255))) == 43) ? var3 : (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((((unsigned long)((unsigned char)((var50 & 255))) == 47) << 6))) - 1))))));
L_1450: ;
var70 = (unsigned int)((unsigned char)(*(char *)(((long)arg0 + var6 + 0x3))));
if (((unsigned long)((unsigned long)((unsigned char)(((unsigned long)((unsigned int)((var70 - 65))) & 255)))) <= (unsigned long)(25))) {
var74 = (unsigned long)((unsigned int)((var70 - 65)));
goto L_14b0;
}
if (((unsigned long)((unsigned long)((unsigned char)(((unsigned long)((unsigned int)((var70 - 97))) & 255)))) <= (unsigned long)(25))) {
var74 = (unsigned long)((unsigned int)((var70 - 71)));
goto L_14b0;
}
if (((unsigned long)((unsigned long)((unsigned char)(((unsigned long)((unsigned int)((var70 - 48))) & 255)))) <= (unsigned long)(9))) {
var74 = (unsigned long)((unsigned int)((var70 + 4)));
goto L_14b0;
}
var74 = (unsigned long)((unsigned int)((((unsigned long)((unsigned char)((var70 & 255))) == 43) ? var3 : (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((((unsigned long)((unsigned char)((var70 & 255))) == 47) << 6))) - 1))))));
L_14b0: ;
var90 = 0xfffffffe;
produced = 0xfffffffe;
if (((long)((int)(var14)) < 0)) {
// x86-64 epilogue: tear down frame
return produced;
}
produced = var90;
if (((long)((int)(var34)) < 0)) {
// x86-64 epilogue: tear down frame
return produced;
}
var101 = ((unsigned int)(((unsigned long)((unsigned int)(var74)) >> 31)) + (unsigned int)(((unsigned long)((unsigned int)(var54)) >> 31)));
pad = (unsigned long)((unsigned int)(var101));
var114 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((((0 <= (long)((int)(var54))) ? var54 : 0) << 6))) | (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var34 << 12))) | (unsigned long)((unsigned int)((var14 << 18)))))) | ((0 <= (long)((int)(var74))) ? var74 : 0)))))));
var119 = (long)((int)(var7));
arg2[(long)((int)(var7))] = ((unsigned long)((unsigned int)(var114)) >> 16);
produced = ((long)((int)(var7)) + 1);
if (((unsigned long)(1) < (unsigned long)((unsigned long)((unsigned int)(var101))))) {
goto L_1320;
}
*(signed char *)(((long)arg2 + produced)) = ((unsigned long)(var114) >> 8);
var120 = (var119 + 2);
produced = (unsigned long)((unsigned int)(var120));
if (((unsigned long)((unsigned int)(pad)) != 0)) {
goto L_1320;
}
*(signed char *)(((long)arg2 + var120)) = var114;
produced = (unsigned long)((unsigned int)((var7 + 3)));
goto L_1320;
} base64_encode pass 138 lines
// glaurung: base64_encode @ 0x1100
int32_t base64_encode(const uint8_t * arg0, int32_t arg1, uint8_t * arg2) {
int produced;
unsigned int group;
int index;
long ret;
long var10;
long var12;
long var15;
long var2;
long var28;
long var3;
long var34;
long var43;
long var49;
long var54;
long var56;
long var62;
long var72;
long var74;
long var8;
long var82;
long var9;
ret = 0xffffffff;
if (((unsigned long)(12) < (unsigned long)((unsigned long)((unsigned int)(arg1))))) {
return ret;
}
ret = 0xffffffff;
if ((arg0 == 0)) {
return ret;
}
ret = 0xffffffff;
if ((arg2 == 0)) {
return ret;
}
if (((unsigned long)((unsigned int)(arg1)) == 0)) {
return 0;
}
var2 = (unsigned long)((unsigned int)(arg1));
var3 = (unsigned long)((unsigned int)((arg1 - 2)));
var8 = 0;
var9 = var10;
produced = 0;
var12 = (unsigned long)((unsigned int)(arg1));
do {
var15 = (unsigned long)((unsigned int)(((unsigned int)((unsigned char)(*(char *)(((long)arg0 + var8)))) << 16)));
group = var15;
if (((long)((int)(var12)) < 2)) {
L_117a: ;
var9 = 0;
} else {
group = (unsigned long)((unsigned int)((var15 | (unsigned long)((unsigned int)(((unsigned int)((unsigned char)(*(char *)(((long)arg0 + var8 + 0x1)))) << 8))))));
if (((unsigned int)(var3) != (unsigned int)(var8))) {
group = (unsigned long)((unsigned int)((group | (unsigned int)((unsigned char)(*(char *)(((long)arg0 + var8 + 0x2)))))));
var9 = 1;
} else {
goto L_117a;
}
}
var28 = (unsigned long)((unsigned int)(((unsigned int)(group) >> 18)));
if (((unsigned long)(25) < (unsigned long)((unsigned long)((unsigned int)(var28))))) {
if (((unsigned long)(51) < (unsigned long)((unsigned long)((unsigned int)(var28))))) {
if (((unsigned long)(61) < (unsigned long)((unsigned long)((unsigned int)(var28))))) {
var34 = ((((((unsigned long)((unsigned int)(var28)) != 62) << 2) & 255) | 43) & 255);
} else {
var34 = (((var28 & 255) - 4) & 255);
}
} else {
var34 = (((var28 & 255) + 71) & 255);
}
} else {
var34 = (((var28 & 255) + 65) & 255);
}
*(signed char *)(((long)arg2 + produced)) = var34;
var43 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(group) >> 12))) & 63)));
if (((unsigned long)(25) < (unsigned long)((unsigned long)((unsigned int)(var43))))) {
if (((unsigned long)(51) < (unsigned long)((unsigned long)((unsigned int)(var43))))) {
if (((unsigned long)(61) < (unsigned long)((unsigned long)((unsigned int)(var43))))) {
var49 = ((((((unsigned long)((unsigned int)(var43)) != 62) << 2) & 255) | 43) & 255);
} else {
var49 = (((var43 & 255) - 4) & 255);
}
} else {
var49 = (((var43 & 255) + 71) & 255);
}
} else {
var49 = (((var43 & 255) + 65) & 255);
}
*(signed char *)(((long)arg2 + produced + 0x1)) = var49;
var54 = 61;
var56 = 61;
if ((2 <= (long)((int)(var12)))) {
var62 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(group) >> 6))) & 63)));
if (((unsigned long)(25) < (unsigned long)((unsigned long)((unsigned int)(var62))))) {
if (((unsigned long)(51) < (unsigned long)((unsigned long)((unsigned int)(var62))))) {
if (((unsigned long)(61) < (unsigned long)((unsigned long)((unsigned int)(var62))))) {
var56 = ((((((unsigned long)((unsigned int)(var62)) != 62) << 2) & 255) | 43) & 255);
} else {
var56 = (((var62 & 255) - 4) & 255);
}
} else {
var56 = (((var62 & 255) + 71) & 255);
}
} else {
var56 = (((var62 & 255) + 65) & 255);
}
}
*(signed char *)(((long)arg2 + produced + 0x2)) = var56;
if (((unsigned long)((unsigned char)((var9 & 255))) != 0)) {
var72 = (unsigned long)((unsigned int)((group & 63)));
if (((unsigned long)((unsigned long)((unsigned int)(var72))) <= (unsigned long)(25))) {
var74 = (((var72 & 255) + 65) & 255);
L_1143: ;
var54 = (unsigned long)((unsigned int)(var74));
} else {
if (((unsigned long)(51) < (unsigned long)((unsigned long)((unsigned int)(var72))))) {
if (((unsigned long)(61) < (unsigned long)((unsigned long)((unsigned int)(var72))))) {
var54 = ((((((unsigned long)((unsigned int)(var72)) != 62) << 2) & 255) | 43) & 255);
} else {
var74 = (((var72 & 255) - 4) & 255);
goto L_1143;
}
} else {
var74 = (((var72 & 255) + 71) & 255);
goto L_1143;
}
}
}
*(signed char *)(((long)arg2 + produced + 0x3)) = var54;
ret = ((unsigned long)((unsigned int)(produced)) + 4);
var82 = (var8 + 3);
var12 = (unsigned long)((unsigned int)((var12 - 3)));
var8 = var82;
produced = ret;
} while (((unsigned long)(var82) < (unsigned long)(var2)));
// x86-64 epilogue: tear down frame
return ret;
} gcc -O0
2/2base64_decode pass 80 lines
// glaurung: base64_decode @ 0x131e
int32_t base64_decode(const uint8_t * arg0, int32_t arg1, uint8_t * arg2) {
extern int decode_symbol(unsigned char);
int produced;
int index;
int a;
int b;
int c;
int d;
int pad;
unsigned int group;
int var11;
int var20;
int var29;
int var38;
long var61;
produced = 0;
if ((arg0 != 0)) {
if ((arg2 != 0)) {
if ((0 <= (long)(arg1))) {
if (((((unsigned long)((unsigned int)(arg1)) == 16) | ((long)(arg1) < 16)) != 0)) {
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) & 3))) == 0)) {
goto L_136a;
}
}
}
}
}
// x86-64 epilogue: restore rbp
return 0xffffffff;
L_136a: ;
index = 0;
goto L_14b2;
L_1376: ;
var11 = decode_symbol((unsigned long)((unsigned int)((unsigned char)(((unsigned int)((unsigned char)(arg0[index])) & 255)))));
a = var11;
var20 = decode_symbol((unsigned long)((unsigned int)((unsigned char)(((unsigned int)((unsigned char)(arg0[((long)(index) + 1)])) & 255)))));
b = var20;
var29 = decode_symbol((unsigned long)((unsigned int)((unsigned char)(((unsigned int)((unsigned char)(arg0[((long)(index) + 2)])) & 255)))));
c = var29;
var38 = decode_symbol((unsigned long)((unsigned int)((unsigned char)(((unsigned int)((unsigned char)(arg0[((long)(index) + 3)])) & 255)))));
d = var38;
pad = 0;
if ((0 <= (long)(a))) {
if ((0 <= (long)(b))) {
goto L_1410;
}
}
// x86-64 epilogue: restore rbp
return 0xfffffffe;
L_1410: ;
if (((long)(c) < 0)) {
c = 0;
pad = (pad + 1);
}
if (((long)(d) < 0)) {
d = 0;
pad = (pad + 1);
}
group = ((unsigned int)(d) | (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(a)) << 18))) | (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(b)) << 12)))))) | (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(c)) << 6))))));
var61 = (unsigned long)((unsigned int)(((unsigned int)(group) >> 16)));
arg2[produced] = var61;
produced = (produced + 1);
if (((((unsigned long)((unsigned int)(pad)) == 1) | ((long)(pad) < 1)) != 0)) {
var61 = (unsigned long)((unsigned int)(((unsigned int)(group) >> 8)));
arg2[produced] = var61;
produced = (produced + 1);
}
if (((((unsigned long)((unsigned int)(pad)) == 0) | ((long)(pad) < 0)) != 0)) {
arg2[produced] = group;
produced = (produced + 1);
}
index = (index + 4);
L_14b2: ;
if ((index < arg1)) {
goto L_1376;
}
// x86-64 epilogue: restore rbp
return (unsigned int)(produced);
} base64_encode pass 69 lines
// glaurung: base64_encode @ 0x11af
int32_t base64_encode(const uint8_t * arg0, int32_t arg1, uint8_t * arg2) {
extern unsigned char encode_symbol(unsigned int);
int produced;
int index;
unsigned int group;
int remaining;
long var38;
unsigned char var39;
long var51;
unsigned char var52;
long var54;
unsigned char var61;
long var67;
unsigned char var71;
// x86-64 prologue: save rbp, frame 8 bytes
produced = 0;
index = 0;
if ((arg0 == 0)) {
// x86-64 epilogue: restore rbp
return 0xffffffff;
}
if ((arg2 == 0)) {
// x86-64 epilogue: restore rbp
return 0xffffffff;
}
if (((long)(arg1) < 0)) {
// x86-64 epilogue: restore rbp
return 0xffffffff;
}
if (((((unsigned long)((unsigned int)(arg1)) == 12) | ((long)(arg1) < 12)) == 0)) {
// x86-64 epilogue: restore rbp
return 0xffffffff;
}
while ((index < arg1)) {
group = ((unsigned int)((unsigned char)(((unsigned int)((unsigned char)(arg0[index])) & 255))) << 16);
remaining = ((unsigned int)(arg1) - index);
if (((((unsigned long)((unsigned int)(remaining)) == 1) | ((long)(remaining) < 1)) == 0)) {
group = (group | (unsigned int)(((unsigned int)((unsigned char)(((unsigned int)((unsigned char)(arg0[((long)(index) + 1)])) & 255))) << 8)));
}
if (((((unsigned long)((unsigned int)(remaining)) == 2) | ((long)(remaining) < 2)) == 0)) {
group = (group | (unsigned int)((unsigned char)(((unsigned int)((unsigned char)(arg0[((long)(index) + 2)])) & 255))));
}
var38 = (long)(((long)(produced) + (long)arg2));
var39 = encode_symbol((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(group) >> 18))) & 63))));
*(signed char *)((var38)) = var39;
var51 = (long)((((long)(produced) + 1) + (long)arg2));
var52 = encode_symbol((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(group) >> 12))) & 63))));
*(signed char *)((var51)) = var52;
if ((((unsigned long)((unsigned int)(remaining)) == 1) | ((long)(remaining) < 1))) {
var54 = 61;
} else {
var61 = encode_symbol((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(group) >> 6))) & 63))));
var54 = (unsigned long)(var61);
}
arg2[((long)(produced) + 2)] = var54;
if ((((unsigned long)((unsigned int)(remaining)) == 2) | ((long)(remaining) < 2))) {
var67 = 61;
} else {
var71 = encode_symbol((unsigned long)((unsigned int)((group & 63))));
var67 = (unsigned long)(var71);
}
arg2[((long)(produced) + 3)] = var67;
produced = (produced + 4);
index = (index + 3);
}
// x86-64 epilogue: restore rbp
return (unsigned int)(produced);
} gcc -O2
2/2base64_decode pass 395 lines
// glaurung: base64_decode @ 0x1360
int32_t base64_decode(const uint8_t * arg0, int32_t arg1, uint8_t * arg2) {
int produced;
int a;
int d;
int c;
int pad;
unsigned int group;
int b;
int index;
long t187;
long t191;
long t206;
long var107;
int var11;
long var111;
long var112;
long var116;
long var117;
long var12;
long var120;
long var153;
long var158;
long var16;
long var17;
long var2;
long var21;
int var22;
long var26;
long var27;
int var28;
long var29;
long var30;
long var31;
int var33;
long var34;
long var36;
long var37;
long var38;
int var42;
long var43;
long var44;
long var45;
long var46;
long var47;
int var48;
long var49;
long var50;
long var51;
long var53;
long var54;
long var55;
long var56;
int var59;
long var60;
long var61;
long var62;
long var63;
int var64;
long var65;
long var66;
long var67;
long var68;
long var69;
long var70;
long var72;
long var73;
long var74;
long var75;
long var76;
long var80;
long var81;
long var88;
var2 = (long)arg2;
if (((arg0 == 0) || (arg2 == 0))) {
goto L_16c7;
}
if (((unsigned long)(16) < (unsigned long)((unsigned long)((unsigned int)(arg1))))) {
goto L_16c7;
}
if (((unsigned long)((unsigned char)((arg1 & 3))) != 0)) {
goto L_16c7;
}
if (((unsigned long)((unsigned int)(arg1)) == 0)) {
goto L_16bf;
}
var11 = 63;
var12 = 0xffffffff;
var16 = 1;
var17 = (long)((((long)arg0 + ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((arg1 - 1))) >> 2))) * 4)) + 4));
produced = 0;
var21 = (long)arg0;
goto L_14e0;
L_13c0: ;
if (((unsigned long)(47) < (unsigned long)((unsigned long)((unsigned char)((var22 & 255)))))) {
goto L_1690;
}
if (((unsigned long)((unsigned char)((var22 & 255))) == 43)) {
goto L_15e8;
}
t187 = ((unsigned long)((unsigned int)(var22)) & 255);
var26 = ((unsigned long)((unsigned char)(t187)) != 47);
var27 = (((unsigned long)((unsigned char)(t187)) != 47) ? var12 : (unsigned long)((unsigned int)(var11)));
L_13e3: ;
var28 = (unsigned int)((unsigned char)(*(char *)((var21 + 0x1))));
var29 = (unsigned long)((unsigned int)(var28));
var30 = var27;
var31 = var26;
a = var27;
var33 = var28;
var34 = (unsigned long)((unsigned int)(var28));
if (((unsigned long)(57) < (unsigned long)((unsigned long)((unsigned char)((var28 & 255)))))) {
goto L_151f;
}
L_13f1: ;
if (((unsigned long)(47) < (unsigned long)((unsigned long)((unsigned char)((var28 & 255)))))) {
goto L_1650;
}
var36 = var26;
var37 = var30;
var38 = 62;
if (((unsigned long)((unsigned char)((var29 & 255))) == 43)) {
goto L_1410;
}
t191 = (var29 & 255);
var36 = (((unsigned long)((unsigned char)(t191)) != 47) ? var16 : var26);
var37 = var30;
var38 = (((unsigned long)((unsigned char)(t191)) != 47) ? var12 : (unsigned long)((unsigned int)(var11)));
L_1410: ;
var42 = (unsigned int)((unsigned char)(*(char *)((var21 + 0x2))));
var43 = (unsigned long)((unsigned int)(var42));
var44 = var36;
var45 = var37;
var46 = var38;
var47 = (unsigned long)((unsigned int)(var42));
var48 = var42;
if (((unsigned long)(57) < (unsigned long)((unsigned long)((unsigned char)((var42 & 255)))))) {
goto L_1544;
}
var49 = var36;
var50 = var37;
var51 = var38;
L_1420: ;
if (((unsigned long)(47) < (unsigned long)((unsigned long)((unsigned char)((var42 & 255)))))) {
goto L_1660;
}
var53 = var49;
var54 = var50;
var55 = var51;
var56 = 62;
if (((unsigned long)((unsigned char)((var43 & 255))) == 43)) {
goto L_143c;
}
var53 = var49;
var54 = var50;
var55 = var51;
var56 = (((unsigned long)((unsigned char)((var43 & 255))) != 47) ? var12 : (unsigned long)((unsigned int)(var11)));
L_143c: ;
var59 = (unsigned int)((unsigned char)(*(char *)((var21 + 0x3))));
var60 = (unsigned long)((unsigned int)(var59));
var61 = var53;
var62 = var54;
var63 = var55;
var64 = var59;
var65 = var56;
var66 = (unsigned long)((unsigned int)(var59));
if (((unsigned long)(57) < (unsigned long)((unsigned long)((unsigned char)((var59 & 255)))))) {
goto L_1566;
}
var67 = var53;
var68 = var54;
var69 = var55;
var70 = var56;
L_1450: ;
if (((unsigned long)(47) < (unsigned long)((unsigned long)((unsigned char)((var59 & 255)))))) {
goto L_1680;
}
var72 = var67;
var73 = var68;
var74 = var69;
var75 = 62;
var76 = var70;
if (((unsigned long)((unsigned char)((var60 & 255))) == 43)) {
goto L_146e;
}
var72 = var67;
var73 = var68;
var74 = var69;
var75 = (((unsigned long)((unsigned char)((var60 & 255))) != 47) ? var12 : (unsigned long)((unsigned int)(var11)));
var76 = var70;
L_146e: ;
if (((unsigned long)((unsigned char)((var72 & 255))) != 0)) {
goto L_157f;
}
var80 = var73;
var81 = var74;
d = var75;
c = var76;
L_1480: ;
if (((unsigned long)((unsigned int)(c)) == 0xffffffff)) {
goto L_1630;
}
var88 = (unsigned long)((unsigned int)((c << 6)));
pad = 0;
L_148e: ;
if (((unsigned long)((unsigned int)(d)) == 0xffffffff)) {
goto L_1600;
}
group = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var81 << 12))) | (unsigned long)((unsigned int)((var80 << 18)))))) | var88))) | d)));
*(signed char *)((var2 + (long)(produced))) = ((unsigned int)(group) >> 16);
*(signed char *)((var2 + (long)((int)((produced + 1))))) = ((unsigned int)(group) >> 8);
var107 = (unsigned long)((unsigned int)((produced + 2)));
if (((unsigned long)((unsigned int)(pad)) != 0)) {
goto L_16a0;
}
*(signed char *)((var2 + (long)((int)(var107)))) = group;
produced = (unsigned long)((unsigned int)((produced + 3)));
L_14d3: ;
var21 = (var21 + 4);
var111 = (unsigned long)((unsigned int)(produced));
if ((var21 == var17)) {
goto L_1585;
}
L_14e0: ;
var22 = (unsigned int)((unsigned char)(*(char *)((var21))));
var112 = (unsigned long)((unsigned int)(var22));
if (((unsigned long)((unsigned long)((unsigned char)((var22 & 255)))) <= (unsigned long)(57))) {
goto L_13c0;
}
if (((unsigned long)(90) < (unsigned long)((unsigned long)((unsigned char)((var22 & 255)))))) {
goto L_15a8;
}
if (((unsigned long)(64) < (unsigned long)((unsigned long)((unsigned char)((var22 & 255)))))) {
goto L_1670;
}
L_1505: ;
var28 = (unsigned int)((unsigned char)(*(char *)((var21 + 0x1))));
var26 = 1;
var29 = (unsigned long)((unsigned int)(var28));
var30 = 0xffffffff;
var31 = 1;
a = 0xffffffff;
var33 = var28;
var34 = (unsigned long)((unsigned int)(var28));
if (((unsigned long)((unsigned long)((unsigned char)((var28 & 255)))) <= (unsigned long)(57))) {
goto L_13f1;
}
L_151f: ;
if (((unsigned long)(90) < (unsigned long)((unsigned long)((unsigned char)((var33 & 255)))))) {
goto L_15c0;
}
t206 = (var34 & 255);
var42 = (unsigned int)((unsigned char)(*(char *)((var21 + 0x2))));
var116 = (((unsigned long)((unsigned long)((unsigned char)(t206))) <= (unsigned long)(64)) ? var16 : var31);
var117 = (((unsigned long)((unsigned long)((unsigned char)(t206))) <= (unsigned long)(64)) ? var12 : (unsigned long)((unsigned int)((var33 - 65))));
var43 = (unsigned long)((unsigned int)(var42));
var49 = var116;
var50 = (unsigned long)((unsigned int)(a));
var51 = var117;
var44 = var116;
var45 = (unsigned long)((unsigned int)(a));
var46 = var117;
var47 = (unsigned long)((unsigned int)(var42));
var48 = var42;
if (((unsigned long)((unsigned long)((unsigned char)((var42 & 255)))) <= (unsigned long)(57))) {
goto L_1420;
}
L_1544: ;
if (((unsigned long)(90) < (unsigned long)((unsigned long)((unsigned char)((var48 & 255)))))) {
goto L_15d0;
}
var59 = (unsigned int)((unsigned char)(*(char *)((var21 + 0x3))));
var120 = (((unsigned long)((unsigned long)((unsigned char)((var47 & 255)))) <= (unsigned long)(64)) ? var12 : (unsigned long)((unsigned int)((var48 - 65))));
var60 = (unsigned long)((unsigned int)(var59));
var67 = var44;
var68 = var45;
var69 = var46;
var70 = var120;
var61 = var44;
var62 = var45;
var63 = var46;
var64 = var59;
var65 = var120;
var66 = (unsigned long)((unsigned int)(var59));
if (((unsigned long)((unsigned long)((unsigned char)((var59 & 255)))) <= (unsigned long)(57))) {
goto L_1450;
}
L_1566: ;
if (((unsigned long)(90) < (unsigned long)((unsigned long)((unsigned char)((var64 & 255)))))) {
goto L_1590;
}
var80 = var62;
var81 = var63;
d = (((unsigned long)((unsigned long)((unsigned char)((var66 & 255)))) <= (unsigned long)(64)) ? var12 : (unsigned long)((unsigned int)((var64 - 65))));
c = var65;
var60 = var66;
if (((unsigned long)((unsigned char)((var61 & 255))) == 0)) {
goto L_1480;
}
L_157f: ;
var111 = 0xfffffffe;
L_1585: ;
// x86-64 epilogue: tear down frame
return (unsigned int)(var111);
L_1590: ;
var60 = (unsigned long)((unsigned int)((var66 - 97)));
var72 = var61;
var73 = var62;
var74 = var63;
var75 = (((unsigned long)(26) <= (unsigned long)((unsigned long)((unsigned char)((var60 & 255))))) ? var12 : (unsigned long)((unsigned int)((var64 - 71))));
var76 = var65;
goto L_146e;
L_15a8: ;
var26 = 0;
var27 = (unsigned long)((unsigned int)((var22 - 71)));
if (((unsigned long)((unsigned long)((unsigned char)(((unsigned long)((unsigned int)((var112 - 97))) & 255)))) <= (unsigned long)(25))) {
goto L_13e3;
}
goto L_1505;
L_15c0: ;
if (((unsigned long)(25) < (unsigned long)((unsigned long)((unsigned char)(((unsigned long)((unsigned int)((var34 - 97))) & 255)))))) {
goto L_1640;
}
var36 = var31;
var37 = (unsigned long)((unsigned int)(a));
var38 = (unsigned long)((unsigned int)((var33 - 71)));
goto L_1410;
L_15d0: ;
var53 = var44;
var54 = var45;
var55 = var46;
var56 = (((unsigned long)(26) <= (unsigned long)((unsigned long)((unsigned char)(((unsigned long)((unsigned int)((var47 - 97))) & 255))))) ? var12 : (unsigned long)((unsigned int)((var48 - 71))));
goto L_143c;
L_15e8: ;
var26 = 0;
var27 = 62;
goto L_13e3;
L_1600: ;
var153 = (unsigned long)((unsigned int)((var88 | (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var80 << 18))) | (unsigned long)((unsigned int)((var81 << 12)))))))));
*(signed char *)((var2 + (long)(produced))) = ((unsigned long)((unsigned int)(var153)) >> 16);
var158 = (unsigned long)((unsigned int)((produced + 1)));
if (((unsigned long)((unsigned int)(pad)) != 1)) {
goto L_16b0;
}
produced = (unsigned long)((unsigned int)(var158));
goto L_14d3;
L_1630: ;
var88 = 0;
pad = 1;
goto L_148e;
L_1640: ;
var36 = 1;
var37 = (unsigned long)((unsigned int)(a));
var38 = 0xffffffff;
goto L_1410;
L_1650: ;
var36 = var26;
var37 = var30;
var38 = (unsigned long)((unsigned int)((var28 + 4)));
goto L_1410;
L_1660: ;
var53 = var49;
var54 = var50;
var55 = var51;
var56 = (unsigned long)((unsigned int)((var42 + 4)));
goto L_143c;
L_1670: ;
var26 = 0;
var27 = (unsigned long)((unsigned int)((var22 - 65)));
goto L_13e3;
L_1680: ;
var72 = var67;
var73 = var68;
var74 = var69;
var75 = (unsigned long)((unsigned int)((var59 + 4)));
var76 = var70;
goto L_146e;
L_1690: ;
var26 = 0;
var27 = (unsigned long)((unsigned int)((var22 + 4)));
goto L_13e3;
L_16a0: ;
produced = (unsigned long)((unsigned int)(var107));
goto L_14d3;
L_16b0: ;
produced = (unsigned long)((unsigned int)((produced + 2)));
*(signed char *)((var2 + (long)((int)(var158)))) = ((unsigned long)(var153) >> 8);
goto L_14d3;
L_16bf: ;
var111 = 0;
goto L_1585;
L_16c7: ;
var111 = 0xffffffff;
goto L_1585;
} base64_encode pass 108 lines
// glaurung: base64_encode @ 0x1100
int32_t base64_encode(const uint8_t * arg0, int32_t arg1, uint8_t * arg2) {
int remaining;
unsigned int group;
int index;
int produced;
long var0;
long var13;
long var2;
long var24;
long var26;
long var36;
long var38;
long var43;
long var45;
long var51;
int var52;
long var53;
long var55;
long var69;
long var7;
long var8;
long var9;
var0 = (unsigned long)((unsigned int)(arg1));
if ((arg0 == 0)) {
var2 = 0xffffffff;
return 0xffffffff;
}
if ((arg2 == 0)) {
var2 = 0xffffffff;
return 0xffffffff;
}
if (((unsigned long)(12) < (unsigned long)((unsigned long)((unsigned int)(arg1))))) {
var2 = 0xffffffff;
return 0xffffffff;
}
if (((unsigned long)((unsigned int)(arg1)) == 0)) {
return 0;
}
var7 = (unsigned long)((unsigned int)((4 - (long)arg2)));
var8 = (long)arg0;
var9 = (long)arg2;
remaining = arg1;
do {
var13 = (unsigned long)((unsigned int)(((unsigned int)((unsigned char)(*(char *)((var8)))) << 16)));
group = var13;
if (((((unsigned long)((unsigned int)(remaining)) == 1) | ((long)(remaining) < 1)) == 0)) {
group = (unsigned long)((unsigned int)((var13 | (unsigned long)((unsigned int)(((unsigned int)((unsigned char)(*(char *)((var8 + 0x1)))) << 8))))));
if (((unsigned long)((unsigned int)(remaining)) != 2)) {
group = (unsigned long)((unsigned int)((group | (unsigned int)((unsigned char)(*(char *)((var8 + 0x2)))))));
}
}
var24 = (unsigned long)((unsigned int)(((unsigned int)(group) >> 18)));
var26 = (((unsigned long)(group) <= (unsigned long)(0x67ffff)) ? (unsigned long)((unsigned int)((var24 + 65))) : (((unsigned long)((unsigned long)((unsigned int)(var24))) <= (unsigned long)(51)) ? (unsigned long)((unsigned int)((var24 + 71))) : (((unsigned long)((unsigned long)((unsigned int)(var24))) <= (unsigned long)(61)) ? (unsigned long)((unsigned int)((var24 - 4))) : (unsigned long)((unsigned int)(((((unsigned long)((unsigned int)(var24)) != 62) * 4) + 43))))));
var36 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(group) >> 12))) & 63)));
var38 = (((unsigned long)((unsigned long)((unsigned int)(var36))) <= (unsigned long)(25)) ? (unsigned long)((unsigned int)((var36 + 65))) : (((unsigned long)((unsigned long)((unsigned int)(var36))) <= (unsigned long)(51)) ? (unsigned long)((unsigned int)((var36 + 71))) : (((unsigned long)((unsigned long)((unsigned int)(var36))) <= (unsigned long)(61)) ? (unsigned long)((unsigned int)((var36 - 4))) : (unsigned long)((unsigned int)(((((unsigned long)((unsigned int)(var36)) != 62) * 4) + 43))))));
if ((((unsigned long)((unsigned int)(remaining)) == 1) | ((long)(remaining) < 1))) {
var43 = 61;
var45 = 61;
} else {
var51 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(group) >> 6))) & 63)));
if (((unsigned long)((unsigned long)((unsigned int)(var51))) <= (unsigned long)(25))) {
var52 = (var51 + 65);
var43 = (unsigned long)((unsigned int)(var52));
var53 = (unsigned long)((unsigned int)(var52));
if (((unsigned long)((unsigned int)(remaining)) != 2)) {
L_1203: ;
var55 = (unsigned long)((unsigned int)((group & 63)));
if (((unsigned long)((unsigned long)((unsigned int)(var55))) <= (unsigned long)(25))) {
var45 = (unsigned long)((unsigned int)((var55 + 65)));
} else {
if (((unsigned long)((unsigned long)((unsigned int)(var55))) <= (unsigned long)(51))) {
var45 = (unsigned long)((unsigned int)((var55 + 71)));
} else {
if (((unsigned long)((unsigned long)((unsigned int)(var55))) <= (unsigned long)(61))) {
var45 = (unsigned long)((unsigned int)((var55 - 4)));
} else {
var45 = (unsigned long)((unsigned int)(((((unsigned long)((unsigned int)(var55)) != 62) * 4) + 43)));
}
}
}
} else {
L_12bd: ;
var43 = var53;
var45 = 61;
}
} else {
var43 = (((unsigned long)((unsigned long)((unsigned int)(var51))) <= (unsigned long)(51)) ? (unsigned long)((unsigned int)((var51 + 71))) : (((unsigned long)((unsigned long)((unsigned int)(var51))) <= (unsigned long)(61)) ? (unsigned long)((unsigned int)((var51 - 4))) : (unsigned long)((unsigned int)(((((unsigned long)((unsigned int)(var51)) != 62) * 4) + 43)))));
var53 = var43;
if (((unsigned long)((unsigned int)(remaining)) == 2)) {
goto L_12bd;
} else {
goto L_1203;
}
}
}
*(signed char *)((var9 + 0x3)) = var45;
remaining = (unsigned long)((unsigned int)((remaining - 3)));
var8 = (var8 + 3);
var69 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var0)) - remaining)));
*(signed char *)((var9 + 0x2)) = var43;
var2 = (unsigned long)((unsigned int)((var7 + var9)));
var9 = (var9 + 4);
*(signed char *)((var9 - 0x4)) = var26;
*(signed char *)((var9 - 0x3)) = var38;
} while (((((unsigned int)(var0) == (unsigned int)(var69)) | ((long)((int)(var0)) < (long)((int)(var69)))) == 0));
return (unsigned int)(var2);
}