Fixture 09
memory effects
C · 9 functions · 4 lanes · 24 of 36 function-lanes behave identically
4 of 4 lanes have a function that returns a different result after decompilation: clang-O0 (6/9), clang-O2 (6/9), gcc-O0 (6/9), gcc-O2 (6/9).
Memory-effects fixture. Every function that touches memory does so through caller-supplied int* buffers (or an observable volatile counter read back via a getter), so an execution-differential test (original vs. recompiled decompilation) catches a DROPPED store, a reordered load, an unsafe dead-store elimination, or a vectorizer intrinsic lowering that silently loses an effect. Each observable path yields a UNIQUE value.
Targets review #2c (dropped intrinsic effects / unsafe DSE / vectorizable loops). Differential-testable functions are pure over their int* / int args: given an 8-int input buffer they mutate it deterministically and/or return an int, so the gate can diff both the return value and the buffer contents.
Differential vs. structural: - cas_update(), mem_copy(), mem_set(), vec_sum(), vec_transform(): DIFFERENTIAL. Pure over their int* / int arguments; drive with an 8-int buffer. - tick()/tick_n()/read_counter(): the volatile global is a STRUCTURAL target (true MMIO-style volatile semantics / C11-atomic ordering are structural assertions), but the effect is made observable — and thus differential — by driving a call SEQUENCE and reading the count back through read_counter().
No libc: memcpy/memset are written as explicit inline loops; the "atomic" compare-and-swap is plain C. No floats anywhere.
/* 09_memory_effects.c
*
* Memory-effects fixture. Every function that touches memory does so through
* caller-supplied int* buffers (or an observable volatile counter read back via
* a getter), so an execution-differential test (original vs. recompiled
* decompilation) catches a DROPPED store, a reordered load, an unsafe
* dead-store elimination, or a vectorizer intrinsic lowering that silently loses
* an effect. Each observable path yields a UNIQUE value.
*
* Targets review #2c (dropped intrinsic effects / unsafe DSE / vectorizable
* loops). Differential-testable functions are pure over their int* / int args:
* given an 8-int input buffer they mutate it deterministically and/or return an
* int, so the gate can diff both the return value and the buffer contents.
*
* Differential vs. structural:
* - cas_update(), mem_copy(), mem_set(), vec_sum(), vec_transform(): DIFFERENTIAL.
* Pure over their int* / int arguments; drive with an 8-int buffer.
* - tick()/tick_n()/read_counter(): the volatile global is a STRUCTURAL target
* (true MMIO-style volatile semantics / C11-atomic ordering are structural
* assertions), but the effect is made observable — and thus differential —
* by driving a call SEQUENCE and reading the count back through read_counter().
*
* No libc: memcpy/memset are written as explicit inline loops; the "atomic"
* compare-and-swap is plain C. No floats anywhere.
*/
#include <stdint.h>
/* --- volatile MMIO-style counter --------------------------------------- */
/* A volatile global that must be reloaded/restored on every access. A correct
* lowering keeps every read and write; an over-eager optimizer that caches or
* DSE-drops a write diverges the sequence observed through read_counter(). */
static volatile int g_counter = 0;
/* Single observable increment (MMIO-style write). */
void tick(void) {
g_counter = g_counter + 1;
}
/* n observable increments via an explicit loop — each iteration is a real
* volatile load+store that must not be coalesced away. */
void tick_n(int n) {
for (int i = 0; i < n; i++)
g_counter = g_counter + 1;
}
/* Getter that makes the counter observable, so a driven call sequence becomes
* differential-testable through this return value. */
int read_counter(void) {
return g_counter;
}
/* Reset so a differential harness can start each sequence from a known state. */
void reset_counter(void) {
g_counter = 0;
}
/* --- compare-and-swap, written in plain C (no libc atomics) ------------- */
/* CAS-like update over an int*. Returns 1 and stores `newv` iff *p == oldv,
* else returns 0 and leaves *p unchanged. Both the return value and the buffer
* mutation are observable, so a dropped store shows up in the differential. */
int cas_update(int *p, int oldv, int newv) {
if (*p == oldv) {
*p = newv;
return 1;
}
return 0;
}
/* --- memcpy / memset as explicit inline loops over int* buffers --------- */
/* Copy `n` ints from src to dst. Written as a loop so a decompiler that
* recognizes and re-emits a memcpy intrinsic must preserve every element store. */
void mem_copy(int *dst, const int *src, int n) {
for (int i = 0; i < n; i++)
dst[i] = src[i];
}
/* Fill `n` ints of dst with `val`. Explicit loop form of memset. */
void mem_set(int *dst, int val, int n) {
for (int i = 0; i < n; i++)
dst[i] = val;
}
/* --- vectorizable stack-buffer loops (catch SSE/NEON lowering) ---------- */
/* Sum of `n` ints. At -O2/-O3 this is a prime SSE/NEON reduction candidate; a
* vectorized lowering that drops a tail element or mishandles the reduction
* diverges the returned total. Deterministic and pure over (a, n). */
int vec_sum(const int *a, int n) {
int s = 0;
for (int i = 0; i < n; i++)
s += a[i];
return s; /* unique per input buffer */
}
/* In-place transform buf[i] = buf[i]*3 + 7 over `n` ints — an elementwise map a
* compiler may vectorize. Both the mutated buffer and (as a checksum) the return
* are observable, so a dropped or reordered store is caught differentially. */
int vec_transform(int *buf, int n) {
int check = 0;
for (int i = 0; i < n; i++) {
buf[i] = buf[i] * 3 + 7;
check ^= buf[i];
}
return check;
} 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
6/9cas_update pass 10 lines
// glaurung: cas_update @ 0x1180
int cas_update(int * arg0, int arg1, int arg2) {
// x86-64 prologue: save rbp
if (((unsigned int)(*(int *)((long)arg0)) != (unsigned int)(arg1))) {
return 0;
} else {
*(int *)((long)arg0) = arg2;
return 1;
}
} mem_copy pass 10 lines
// glaurung: mem_copy @ 0x11c0
void mem_copy(int * arg0, const int * arg1, int arg2) {
int i;
// x86-64 prologue: save rbp
for (i = 0; (i < arg2); i++) {
arg0[(long)(i)] = arg1[(long)(i)];
}
// x86-64 epilogue: restore rbp
return;
} mem_set pass 10 lines
// glaurung: mem_set @ 0x1210
void mem_set(int * arg0, int arg1, int arg2) {
int i;
// x86-64 prologue: save rbp
for (i = 0; (i < arg2); i++) {
arg0[(long)(i)] = arg1;
}
// x86-64 epilogue: restore rbp
return;
} read_counter pass 8 lines
// glaurung: read_counter @ 0x1160
static unsigned char glaurung_global_4024[16] __attribute__((aligned(16)));
int read_counter(void) {
extern unsigned char glaurung_global_4024[16];
// x86-64 prologue: save rbp
// x86-64 epilogue: restore rbp
return (unsigned int)(*(int *)(&glaurung_global_4024[0]));
} reset_counter structural 9 lines
// glaurung: reset_counter @ 0x1170
static unsigned char glaurung_global_4024[16] __attribute__((aligned(16)));
void reset_counter(void) {
extern unsigned char glaurung_global_4024[16];
// x86-64 prologue: save rbp
*(int *)(&glaurung_global_4024[0]) = 0;
// x86-64 epilogue: restore rbp
return;
} tick structural 9 lines
// glaurung: tick @ 0x1100
static unsigned char glaurung_global_4024[16] __attribute__((aligned(16)));
void tick(void) {
extern unsigned char glaurung_global_4024[16];
// x86-64 prologue: save rbp
*(int *)(&glaurung_global_4024[0]) = ((unsigned long)((unsigned int)(*(int *)(&glaurung_global_4024[0]))) + 1);
// x86-64 epilogue: restore rbp
return;
} tick_n structural 12 lines
// glaurung: tick_n @ 0x1120
static unsigned char glaurung_global_4024[16] __attribute__((aligned(16)));
void tick_n(int arg0) {
extern unsigned char glaurung_global_4024[16];
int i;
// x86-64 prologue: save rbp
for (i = 0; (i < arg0); i++) {
*(int *)(&glaurung_global_4024[0]) = ((unsigned long)((unsigned int)(*(int *)(&glaurung_global_4024[0]))) + 1);
}
// x86-64 epilogue: restore rbp
return;
} vec_sum pass 12 lines
// glaurung: vec_sum @ 0x1250
int vec_sum(const int * arg0, int arg1) {
int s;
int i;
// x86-64 prologue: save rbp
s = 0;
for (i = 0; (i < arg1); i++) {
s = ((unsigned int)(arg0[(long)(i)]) + s);
}
// x86-64 epilogue: restore rbp
return (unsigned int)(s);
} vec_transform pass 13 lines
// glaurung: vec_transform @ 0x12a0
int vec_transform(int * arg0, int arg1) {
int check;
int i;
// x86-64 prologue: save rbp
check = 0;
for (i = 0; (i < arg1); i++) {
arg0[(long)(i)] = ((arg0[(long)(i)] * 3) + 7);
check = ((unsigned int)(arg0[(long)(i)]) ^ check);
}
// x86-64 epilogue: restore rbp
return (unsigned int)(check);
} clang -O2
6/9cas_update pass 10 lines
// glaurung: cas_update @ 0x1190
int cas_update(int * arg0, int arg1, int arg2) {
long ret;
ret = 0;
if (((unsigned int)(*(int *)(((long)arg0))) == (unsigned int)(arg1))) {
*(int *)(((long)arg0)) = arg2;
ret = 1;
}
return ret;
} mem_copy pass 161 lines
// glaurung: mem_copy @ 0x11a0
void mem_copy(int * arg0, const int * arg1, int arg2) {
int i;
long ret;
long var0;
long var16;
long var17;
long var20;
long var23;
long var25;
long var26;
long var28;
int var30;
int var31;
int var32;
unsigned char var33[16] __attribute__((aligned(16)));
int var35;
int var36;
int var37;
unsigned char var38[16] __attribute__((aligned(16)));
long var4;
int var40;
int var41;
int var42;
unsigned char var43[16] __attribute__((aligned(16)));
int var45;
int var46;
int var47;
unsigned char var48[16] __attribute__((aligned(16)));
long var50;
long var52;
long var53;
long var55;
int var56;
int var57;
int var58;
int var59;
unsigned char var60[16] __attribute__((aligned(16)));
long var7;
long var9;
if ((((unsigned long)((unsigned int)(arg2)) == 0) | ((long)(arg2) < 0))) {
return;
}
var0 = (unsigned long)((unsigned int)(arg2));
if (((unsigned long)(8) <= (unsigned long)((unsigned long)((unsigned int)(arg2))))) {
if (((unsigned long)(((long)arg1 + (var0 * 4))) <= (unsigned long)((long)arg0))) {
goto L_122c;
}
ret = (long)(((long)arg0 + (var0 * 4)));
if (((unsigned long)(ret) <= (unsigned long)((long)arg1))) {
goto L_122c;
}
}
var4 = 0;
L_11c4: ;
var7 = ((~var4) + var0);
var9 = (var0 & 3);
if ((var9 != 0)) {
i = var4;
while ((var9 != 0)) {
ret = (unsigned long)((unsigned int)(*(int *)(((long)arg1 + i * 4))));
*(int *)(((long)arg0 + i * 4)) = ret;
i = (i + 1);
var9 = (var9 - 1);
var4 = (unsigned long)((unsigned int)(i));
}
}
if (((unsigned long)(var7) < (unsigned long)(3))) {
return;
}
do {
*(int *)(((long)arg0 + var4 * 4)) = *(int *)(((long)arg1 + var4 * 4));
*(int *)(((long)arg0 + var4 * 4 + 0x4)) = *(int *)(((long)arg1 + var4 * 4 + 0x4));
*(int *)(((long)arg0 + var4 * 4 + 0x8)) = *(int *)(((long)arg1 + var4 * 4 + 0x8));
ret = (unsigned long)((unsigned int)(*(int *)(((long)arg1 + var4 * 4 + 0xc))));
*(int *)(((long)arg0 + var4 * 4 + 0xc)) = ret;
var4 = (var4 + 4);
} while ((var0 != var4));
return;
L_122c: ;
var16 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var0)) & -8)));
var17 = (var16 - 8);
var20 = (((unsigned long)(var17) >> 3) + 1);
var23 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var20)) & 3)));
if (((unsigned long)(var17) < (unsigned long)(24))) {
ret = 0;
var25 = 0;
goto L_12b8;
}
var26 = (var20 & -4);
var28 = 0;
do {
var30 = *(int *)(((long)arg1 + var28 * 4 + 0x4));
var31 = *(int *)(((long)arg1 + var28 * 4 + 0x8));
var32 = *(int *)(((long)arg1 + var28 * 4 + 0xc));
__builtin_memcpy(var33, (void *)(((long)arg1 + var28 * 4 + 0x10)), 16);
*(int *)(((long)arg0 + var28 * 4)) = *(int *)(((long)arg1 + var28 * 4));
*(int *)(((long)arg0 + var28 * 4 + 0x4)) = var30;
*(int *)(((long)arg0 + var28 * 4 + 0x8)) = var31;
*(int *)(((long)arg0 + var28 * 4 + 0xc)) = var32;
__builtin_memmove((void *)(((long)arg0 + var28 * 4 + 0x10)), var33, 16);
var35 = *(int *)(((long)arg1 + var28 * 4 + 0x24));
var36 = *(int *)(((long)arg1 + var28 * 4 + 0x28));
var37 = *(int *)(((long)arg1 + var28 * 4 + 0x2c));
__builtin_memcpy(var38, (void *)(((long)arg1 + var28 * 4 + 0x30)), 16);
*(int *)(((long)arg0 + var28 * 4 + 0x20)) = *(int *)(((long)arg1 + var28 * 4 + 0x20));
*(int *)(((long)arg0 + var28 * 4 + 0x24)) = var35;
*(int *)(((long)arg0 + var28 * 4 + 0x28)) = var36;
*(int *)(((long)arg0 + var28 * 4 + 0x2c)) = var37;
__builtin_memmove((void *)(((long)arg0 + var28 * 4 + 0x30)), var38, 16);
var40 = *(int *)(((long)arg1 + var28 * 4 + 0x44));
var41 = *(int *)(((long)arg1 + var28 * 4 + 0x48));
var42 = *(int *)(((long)arg1 + var28 * 4 + 0x4c));
__builtin_memcpy(var43, (void *)(((long)arg1 + var28 * 4 + 0x50)), 16);
*(int *)(((long)arg0 + var28 * 4 + 0x40)) = *(int *)(((long)arg1 + var28 * 4 + 0x40));
*(int *)(((long)arg0 + var28 * 4 + 0x44)) = var40;
*(int *)(((long)arg0 + var28 * 4 + 0x48)) = var41;
*(int *)(((long)arg0 + var28 * 4 + 0x4c)) = var42;
__builtin_memmove((void *)(((long)arg0 + var28 * 4 + 0x50)), var43, 16);
var45 = *(int *)(((long)arg1 + var28 * 4 + 0x64));
var46 = *(int *)(((long)arg1 + var28 * 4 + 0x68));
var47 = *(int *)(((long)arg1 + var28 * 4 + 0x6c));
__builtin_memcpy(var48, (void *)(((long)arg1 + var28 * 4 + 0x70)), 16);
*(int *)(((long)arg0 + var28 * 4 + 0x60)) = *(int *)(((long)arg1 + var28 * 4 + 0x60));
*(int *)(((long)arg0 + var28 * 4 + 0x64)) = var45;
*(int *)(((long)arg0 + var28 * 4 + 0x68)) = var46;
*(int *)(((long)arg0 + var28 * 4 + 0x6c)) = var47;
__builtin_memmove((void *)(((long)arg0 + var28 * 4 + 0x70)), var48, 16);
ret = (var28 + 32);
var26 = (var26 - 4);
var28 = ret;
var25 = ret;
var20 = var26;
} while ((var26 != 0));
L_12b8: ;
if ((var23 != 0)) {
var50 = (long)((((long)arg0 + (var25 * 4)) + 16));
var52 = (long)((((long)arg1 + (var25 * 4)) + 16));
var53 = (var23 << 5);
var55 = 0;
do {
var56 = *(int *)((var52 + var55 - 0x10));
var57 = *(int *)((var52 + var55 - 0xc));
var58 = *(int *)((var52 + var55 - 0x8));
var59 = *(int *)((var52 + var55 - 0x4));
ret = ((unsigned long)((unsigned int)(var57)) | (unsigned long)((unsigned int)(var56)));
__builtin_memcpy(var60, (void *)((var52 + var55)), 16);
*(int *)((var50 + var55 - 0x10)) = var56;
*(int *)((var50 + var55 - 0xc)) = var57;
*(int *)((var50 + var55 - 0x8)) = var58;
*(int *)((var50 + var55 - 0x4)) = var59;
__builtin_memmove((void *)((var50 + var55)), var60, 16);
var55 = (var55 + 32);
} while ((var53 != var55));
}
var4 = var16;
if ((var16 != var0)) {
goto L_11c4;
}
return;
} mem_set pass 140 lines
// glaurung: mem_set @ 0x1310
void mem_set(int * arg0, int arg1, int arg2) {
int i;
long ret;
long var0;
int var10;
int var11;
long var12;
long var15;
long var18;
long var19;
long var21;
long var22;
long var25;
long var27;
long var3;
int var8;
int var9;
if ((((unsigned long)((unsigned int)(arg2)) == 0) | ((long)(arg2) < 0))) {
return;
}
var0 = (unsigned long)((unsigned int)(arg2));
if (((unsigned long)(8) <= (unsigned long)((unsigned long)((unsigned int)(arg2))))) {
var3 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var0)) & -8)));
var8 = arg1;
var9 = arg1;
var10 = arg1;
var11 = arg1;
var12 = (var3 - 8);
var15 = (((unsigned long)(var12) >> 3) + 1);
var18 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var15)) & 7)));
if (((unsigned long)(56) <= (unsigned long)(var12))) {
var19 = (var15 & -8);
var21 = 0;
do {
*(int *)(((long)arg0 + var21 * 4)) = var8;
*(int *)(((long)arg0 + var21 * 4 + 0x4)) = var9;
*(int *)(((long)arg0 + var21 * 4 + 0x8)) = var10;
*(int *)(((long)arg0 + var21 * 4 + 0xc)) = var11;
*(int *)(((long)arg0 + var21 * 4 + 0x10)) = var8;
*(int *)(((long)arg0 + var21 * 4 + 0x14)) = var9;
*(int *)(((long)arg0 + var21 * 4 + 0x18)) = var10;
*(int *)(((long)arg0 + var21 * 4 + 0x1c)) = var11;
*(int *)(((long)arg0 + var21 * 4 + 0x20)) = var8;
*(int *)(((long)arg0 + var21 * 4 + 0x24)) = var9;
*(int *)(((long)arg0 + var21 * 4 + 0x28)) = var10;
*(int *)(((long)arg0 + var21 * 4 + 0x2c)) = var11;
*(int *)(((long)arg0 + var21 * 4 + 0x30)) = var8;
*(int *)(((long)arg0 + var21 * 4 + 0x34)) = var9;
*(int *)(((long)arg0 + var21 * 4 + 0x38)) = var10;
*(int *)(((long)arg0 + var21 * 4 + 0x3c)) = var11;
*(int *)(((long)arg0 + var21 * 4 + 0x40)) = var8;
*(int *)(((long)arg0 + var21 * 4 + 0x44)) = var9;
*(int *)(((long)arg0 + var21 * 4 + 0x48)) = var10;
*(int *)(((long)arg0 + var21 * 4 + 0x4c)) = var11;
*(int *)(((long)arg0 + var21 * 4 + 0x50)) = var8;
*(int *)(((long)arg0 + var21 * 4 + 0x54)) = var9;
*(int *)(((long)arg0 + var21 * 4 + 0x58)) = var10;
*(int *)(((long)arg0 + var21 * 4 + 0x5c)) = var11;
*(int *)(((long)arg0 + var21 * 4 + 0x60)) = var8;
*(int *)(((long)arg0 + var21 * 4 + 0x64)) = var9;
*(int *)(((long)arg0 + var21 * 4 + 0x68)) = var10;
*(int *)(((long)arg0 + var21 * 4 + 0x6c)) = var11;
*(int *)(((long)arg0 + var21 * 4 + 0x70)) = var8;
*(int *)(((long)arg0 + var21 * 4 + 0x74)) = var9;
*(int *)(((long)arg0 + var21 * 4 + 0x78)) = var10;
*(int *)(((long)arg0 + var21 * 4 + 0x7c)) = var11;
*(int *)(((long)arg0 + var21 * 4 + 0x80)) = var8;
*(int *)(((long)arg0 + var21 * 4 + 0x84)) = var9;
*(int *)(((long)arg0 + var21 * 4 + 0x88)) = var10;
*(int *)(((long)arg0 + var21 * 4 + 0x8c)) = var11;
*(int *)(((long)arg0 + var21 * 4 + 0x90)) = var8;
*(int *)(((long)arg0 + var21 * 4 + 0x94)) = var9;
*(int *)(((long)arg0 + var21 * 4 + 0x98)) = var10;
*(int *)(((long)arg0 + var21 * 4 + 0x9c)) = var11;
*(int *)(((long)arg0 + var21 * 4 + 0xa0)) = var8;
*(int *)(((long)arg0 + var21 * 4 + 0xa4)) = var9;
*(int *)(((long)arg0 + var21 * 4 + 0xa8)) = var10;
*(int *)(((long)arg0 + var21 * 4 + 0xac)) = var11;
*(int *)(((long)arg0 + var21 * 4 + 0xb0)) = var8;
*(int *)(((long)arg0 + var21 * 4 + 0xb4)) = var9;
*(int *)(((long)arg0 + var21 * 4 + 0xb8)) = var10;
*(int *)(((long)arg0 + var21 * 4 + 0xbc)) = var11;
*(int *)(((long)arg0 + var21 * 4 + 0xc0)) = var8;
*(int *)(((long)arg0 + var21 * 4 + 0xc4)) = var9;
*(int *)(((long)arg0 + var21 * 4 + 0xc8)) = var10;
*(int *)(((long)arg0 + var21 * 4 + 0xcc)) = var11;
*(int *)(((long)arg0 + var21 * 4 + 0xd0)) = var8;
*(int *)(((long)arg0 + var21 * 4 + 0xd4)) = var9;
*(int *)(((long)arg0 + var21 * 4 + 0xd8)) = var10;
*(int *)(((long)arg0 + var21 * 4 + 0xdc)) = var11;
*(int *)(((long)arg0 + var21 * 4 + 0xe0)) = var8;
*(int *)(((long)arg0 + var21 * 4 + 0xe4)) = var9;
*(int *)(((long)arg0 + var21 * 4 + 0xe8)) = var10;
*(int *)(((long)arg0 + var21 * 4 + 0xec)) = var11;
*(int *)(((long)arg0 + var21 * 4 + 0xf0)) = var8;
*(int *)(((long)arg0 + var21 * 4 + 0xf4)) = var9;
*(int *)(((long)arg0 + var21 * 4 + 0xf8)) = var10;
*(int *)(((long)arg0 + var21 * 4 + 0xfc)) = var11;
ret = (var21 + 64);
var19 = (var19 - 8);
var21 = ret;
var22 = ret;
var15 = var19;
} while ((var19 != 0));
} else {
ret = 0;
var22 = 0;
}
if ((var18 != 0)) {
ret = (long)((((long)arg0 + (var22 * 4)) + 16));
var25 = (var18 << 5);
var27 = 0;
do {
*(int *)((ret + var27 - 0x10)) = var8;
*(int *)((ret + var27 - 0xc)) = var9;
*(int *)((ret + var27 - 0x8)) = var10;
*(int *)((ret + var27 - 0x4)) = var11;
*(int *)((ret + var27)) = var8;
*(int *)((ret + var27 + 0x4)) = var9;
*(int *)((ret + var27 + 0x8)) = var10;
*(int *)((ret + var27 + 0xc)) = var11;
var27 = (var27 + 32);
} while ((var25 != var27));
}
if ((var3 == var0)) {
return;
}
L_1420: ;
do {
*(int *)(((long)arg0 + var3 * 4)) = arg1;
i = (var3 + 1);
var3 = (unsigned long)((unsigned int)(i));
} while ((var0 != i));
} else {
var3 = 0;
goto L_1420;
}
return;
} read_counter pass 6 lines
// glaurung: read_counter @ 0x1170
static unsigned char glaurung_global_4024[16] __attribute__((aligned(16)));
int read_counter(void) {
extern unsigned char glaurung_global_4024[16];
return (unsigned int)(*(int *)(&glaurung_global_4024[0]));
} reset_counter structural 7 lines
// glaurung: reset_counter @ 0x1180
static unsigned char glaurung_global_4024[16] __attribute__((aligned(16)));
void reset_counter(void) {
extern unsigned char glaurung_global_4024[16];
*(int *)(&glaurung_global_4024[0]) = 0;
return;
} tick structural 7 lines
// glaurung: tick @ 0x1100
static unsigned char glaurung_global_4024[16] __attribute__((aligned(16)));
void tick(void) {
extern unsigned char glaurung_global_4024[16];
*(int *)(&glaurung_global_4024[0]) = (*(int *)(&glaurung_global_4024[0]) + 1);
return;
} tick_n structural 36 lines
// glaurung: tick_n @ 0x1110
static unsigned char glaurung_global_4024[16] __attribute__((aligned(16)));
void tick_n(int arg0) {
extern unsigned char glaurung_global_4024[16];
int i;
long ret;
long var4;
int var5;
long var6;
int var7;
if ((((unsigned long)((unsigned int)(arg0)) != 0) && (0 <= (long)(arg0)))) {
ret = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) & 3)));
if (((unsigned long)(3) <= (unsigned long)((unsigned long)((unsigned int)((arg0 - 1)))))) {
var4 = (unsigned long)((unsigned int)((arg0 & -4)));
do {
*(int *)(&glaurung_global_4024[0]) = (*(int *)(&glaurung_global_4024[0]) + 1);
*(int *)(&glaurung_global_4024[0]) = (*(int *)(&glaurung_global_4024[0]) + 1);
*(int *)(&glaurung_global_4024[0]) = (*(int *)(&glaurung_global_4024[0]) + 1);
*(int *)(&glaurung_global_4024[0]) = (*(int *)(&glaurung_global_4024[0]) + 1);
var5 = (var4 - 4);
var4 = (unsigned long)((unsigned int)(var5));
} while (((unsigned long)((unsigned int)(var5)) != 0));
}
if (((unsigned long)((unsigned int)(ret)) == 0)) {
return;
}
var6 = ret;
do {
*(int *)(&glaurung_global_4024[0]) = (*(int *)(&glaurung_global_4024[0]) + 1);
var7 = (var6 - 1);
ret = (unsigned long)((unsigned int)(var7));
var6 = (unsigned long)((unsigned int)(var7));
} while (((unsigned long)((unsigned int)(var7)) != 0));
}
return;
} vec_sum pass 147 lines
// glaurung: vec_sum @ 0x1430
int vec_sum(const int * arg0, int arg1) {
int s;
int i;
long ret;
long var1;
int var100;
int var101;
long var103;
long var104;
long var106;
long var11;
long var12;
long var136;
int var14;
int var15;
int var16;
int var17;
long var19;
int var21;
int var22;
int var23;
int var24;
long var4;
long var5;
long var8;
long var82;
int var83;
int var84;
int var85;
int var86;
int var87;
int var88;
int var89;
int var90;
int var94;
int var95;
int var96;
int var97;
int var98;
int var99;
if ((((unsigned long)((unsigned int)(arg1)) == 0) | ((long)(arg1) < 0))) {
return 0;
}
var1 = (unsigned long)((unsigned int)(arg1));
if (((unsigned long)(8) <= (unsigned long)((unsigned long)((unsigned int)(arg1))))) {
var4 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var1)) & -8)));
var5 = (var4 - 8);
var8 = (((unsigned long)(var5) >> 3) + 1);
var11 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var8)) & 3)));
if (((unsigned long)(24) <= (unsigned long)(var5))) {
var12 = (var8 & -4);
var14 = 0;
var15 = 0;
var16 = 0;
var17 = 0;
var19 = 0;
var21 = 0;
var22 = 0;
var23 = 0;
var24 = 0;
do {
var14 = (*(int *)(((long)arg0 + var19 * 4 + 0x60)) + ((*(int *)(((long)arg0 + var19 * 4 + 0x40)) + *(int *)(((long)arg0 + var19 * 4 + 0x20))) + (*(int *)(((long)arg0 + var19 * 4)) + var14)));
var15 = (*(int *)(((long)arg0 + var19 * 4 + 0x64)) + ((*(int *)(((long)arg0 + var19 * 4 + 0x44)) + *(int *)(((long)arg0 + var19 * 4 + 0x24))) + (*(int *)(((long)arg0 + var19 * 4 + 0x4)) + var15)));
var16 = (*(int *)(((long)arg0 + var19 * 4 + 0x68)) + ((*(int *)(((long)arg0 + var19 * 4 + 0x48)) + *(int *)(((long)arg0 + var19 * 4 + 0x28))) + (*(int *)(((long)arg0 + var19 * 4 + 0x8)) + var16)));
var17 = (*(int *)(((long)arg0 + var19 * 4 + 0x6c)) + ((*(int *)(((long)arg0 + var19 * 4 + 0x4c)) + *(int *)(((long)arg0 + var19 * 4 + 0x2c))) + (*(int *)(((long)arg0 + var19 * 4 + 0xc)) + var17)));
ret = ((unsigned long)((unsigned int)(var15)) | (unsigned long)((unsigned int)(var14)));
var21 = (*(int *)(((long)arg0 + var19 * 4 + 0x70)) + ((*(int *)(((long)arg0 + var19 * 4 + 0x50)) + *(int *)(((long)arg0 + var19 * 4 + 0x30))) + (*(int *)(((long)arg0 + var19 * 4 + 0x10)) + var21)));
var22 = (*(int *)(((long)arg0 + var19 * 4 + 0x74)) + ((*(int *)(((long)arg0 + var19 * 4 + 0x54)) + *(int *)(((long)arg0 + var19 * 4 + 0x34))) + (*(int *)(((long)arg0 + var19 * 4 + 0x14)) + var22)));
var23 = (*(int *)(((long)arg0 + var19 * 4 + 0x78)) + ((*(int *)(((long)arg0 + var19 * 4 + 0x58)) + *(int *)(((long)arg0 + var19 * 4 + 0x38))) + (*(int *)(((long)arg0 + var19 * 4 + 0x18)) + var23)));
var24 = (*(int *)(((long)arg0 + var19 * 4 + 0x7c)) + ((*(int *)(((long)arg0 + var19 * 4 + 0x5c)) + *(int *)(((long)arg0 + var19 * 4 + 0x3c))) + (*(int *)(((long)arg0 + var19 * 4 + 0x1c)) + var24)));
var19 = (var19 + 32);
var12 = (var12 - 4);
var82 = var19;
var83 = var14;
var84 = var15;
var85 = var16;
var86 = var17;
var87 = var21;
var88 = var22;
var89 = var23;
var90 = var24;
} while ((var12 != 0));
} else {
var83 = 0;
var84 = 0;
var85 = 0;
var86 = 0;
var82 = 0;
var87 = 0;
var88 = 0;
var89 = 0;
var90 = 0;
}
var94 = var83;
var95 = var84;
var96 = var85;
var97 = var86;
var98 = var87;
var99 = var88;
var100 = var89;
var101 = var90;
if ((var11 != 0)) {
var103 = (long)((((long)arg0 + (var82 * 4)) + 16));
var104 = (var11 << 5);
var106 = 0;
do {
var83 = (var83 + *(int *)((var103 + var106 - 0x10)));
var84 = (var84 + *(int *)((var103 + var106 - 0xc)));
var85 = (var85 + *(int *)((var103 + var106 - 0x8)));
var86 = (var86 + *(int *)((var103 + var106 - 0x4)));
ret = ((unsigned long)((unsigned int)(var84)) | (unsigned long)((unsigned int)(var83)));
var87 = (var87 + *(int *)((var103 + var106)));
var88 = (var88 + *(int *)((var103 + var106 + 0x4)));
var89 = (var89 + *(int *)((var103 + var106 + 0x8)));
var90 = (var90 + *(int *)((var103 + var106 + 0xc)));
var106 = (var106 + 32);
var94 = var83;
var95 = var84;
var96 = var85;
var97 = var86;
var98 = var87;
var99 = var88;
var100 = var89;
var101 = var90;
} while ((var104 != var106));
}
var136 = (unsigned long)((unsigned int)((((var97 + var101) + (var95 + var99)) + ((var96 + var100) + (var94 + var98)))));
ret = var136;
if ((var4 == var1)) {
return ret;
}
L_1540: ;
do {
s = (var136 + *(int *)(((long)arg0 + var4 * 4)));
i = (var4 + 1);
var136 = (unsigned long)((unsigned int)(s));
var4 = (unsigned long)((unsigned int)(i));
ret = (unsigned long)((unsigned int)(s));
} while ((var1 != i));
} else {
var136 = 0;
var4 = 0;
goto L_1540;
}
return ret;
} vec_transform pass 278 lines
// glaurung: vec_transform @ 0x1550
int vec_transform(int * arg0, int arg1) {
int i;
int check;
long ret;
long var1;
int var10;
int var100;
int var101;
int var102;
int var104;
int var105;
int var106;
int var107;
int var108;
int var109;
int var11;
int var110;
int var111;
int var12;
int var135;
int var136;
int var137;
int var138;
long var14;
int var143;
int var144;
int var145;
int var146;
int var16;
int var17;
int var177;
int var178;
int var179;
int var18;
int var180;
int var185;
int var186;
int var187;
int var188;
int var19;
int var20;
int var21;
long var212;
long var213;
int var215;
long var218;
int var22;
int var23;
int var25;
int var26;
int var27;
int var28;
long var4;
long var5;
int var56;
int var57;
int var58;
int var59;
int var64;
int var65;
int var66;
int var67;
int var68;
int var69;
int var70;
int var71;
int var72;
int var73;
int var74;
int var75;
long var77;
int var79;
long var8;
int var80;
int var81;
int var82;
long var84;
int var85;
int var86;
int var87;
int var88;
int var9;
int var90;
int var91;
int var92;
int var93;
int var94;
int var95;
int var96;
int var97;
int var99;
if ((((unsigned long)((unsigned int)(arg1)) == 0) | ((long)(arg1) < 0))) {
return 0;
}
var1 = (unsigned long)((unsigned int)(arg1));
if (((unsigned long)(8) <= (unsigned long)((unsigned long)((unsigned int)(arg1))))) {
var4 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var1)) & -8)));
var5 = (var4 - 8);
var8 = (((unsigned long)(var5) >> 3) + 1);
if ((var5 == 0)) {
ret = 0;
var9 = 0;
var10 = 0;
var11 = 0;
var12 = 0;
var14 = 0;
var16 = 0;
var17 = 0;
var18 = 0;
var19 = 0;
if (((unsigned long)((unsigned char)((var8 & 1))) != 0)) {
L_163e: ;
var20 = *(int *)(((long)arg0 + var14 * 4));
var21 = *(int *)(((long)arg0 + var14 * 4 + 0x4));
var22 = *(int *)(((long)arg0 + var14 * 4 + 0x8));
var23 = *(int *)(((long)arg0 + var14 * 4 + 0xc));
var25 = *(int *)(((long)arg0 + var14 * 4 + 0x10));
var26 = *(int *)(((long)arg0 + var14 * 4 + 0x14));
var27 = *(int *)(((long)arg0 + var14 * 4 + 0x18));
var28 = *(int *)(((long)arg0 + var14 * 4 + 0x1c));
var56 = ((var20 + 7) + (var20 + var20));
var57 = ((var21 + 7) + (var21 + var21));
var58 = ((var22 + 7) + (var22 + var22));
var59 = ((var23 + 7) + (var23 + var23));
var64 = ((var25 + 7) + (var25 + var25));
var65 = ((var26 + 7) + (var26 + var26));
var66 = ((var27 + 7) + (var27 + var27));
var67 = ((var28 + 7) + (var28 + var28));
*(int *)(((long)arg0 + var14 * 4)) = var56;
*(int *)(((long)arg0 + var14 * 4 + 0x4)) = var57;
*(int *)(((long)arg0 + var14 * 4 + 0x8)) = var58;
*(int *)(((long)arg0 + var14 * 4 + 0xc)) = var59;
*(int *)(((long)arg0 + var14 * 4 + 0x10)) = var64;
*(int *)(((long)arg0 + var14 * 4 + 0x14)) = var65;
*(int *)(((long)arg0 + var14 * 4 + 0x18)) = var66;
*(int *)(((long)arg0 + var14 * 4 + 0x1c)) = var67;
var68 = (var9 ^ var56);
var69 = (var10 ^ var57);
var70 = (var11 ^ var58);
var71 = (var12 ^ var59);
var72 = (var16 ^ var64);
var73 = (var17 ^ var65);
var74 = (var18 ^ var66);
var75 = (var19 ^ var67);
} else {
var68 = var9;
var69 = var10;
var70 = var11;
var71 = var12;
var72 = var16;
var73 = var17;
var74 = var18;
var75 = var19;
}
} else {
var77 = (var8 & -2);
var79 = 0;
var80 = 0;
var81 = 0;
var82 = 0;
var84 = 0;
var85 = 7;
var86 = 7;
var87 = 7;
var88 = 7;
var90 = 0;
var91 = 0;
var92 = 0;
var93 = 0;
do {
var94 = *(int *)(((long)arg0 + var84 * 4));
var95 = *(int *)(((long)arg0 + var84 * 4 + 0x4));
var96 = *(int *)(((long)arg0 + var84 * 4 + 0x8));
var97 = *(int *)(((long)arg0 + var84 * 4 + 0xc));
var99 = *(int *)(((long)arg0 + var84 * 4 + 0x10));
var100 = *(int *)(((long)arg0 + var84 * 4 + 0x14));
var101 = *(int *)(((long)arg0 + var84 * 4 + 0x18));
var102 = *(int *)(((long)arg0 + var84 * 4 + 0x1c));
var104 = *(int *)(((long)arg0 + var84 * 4 + 0x20));
var105 = *(int *)(((long)arg0 + var84 * 4 + 0x24));
var106 = *(int *)(((long)arg0 + var84 * 4 + 0x28));
var107 = *(int *)(((long)arg0 + var84 * 4 + 0x2c));
ret = ((unsigned long)((unsigned int)(var105)) | (unsigned long)((unsigned int)(var104)));
var108 = *(int *)(((long)arg0 + var84 * 4 + 0x30));
var109 = *(int *)(((long)arg0 + var84 * 4 + 0x34));
var110 = *(int *)(((long)arg0 + var84 * 4 + 0x38));
var111 = *(int *)(((long)arg0 + var84 * 4 + 0x3c));
var135 = ((var94 + var85) + (var94 + var94));
var136 = ((var95 + var86) + (var95 + var95));
var137 = ((var96 + var87) + (var96 + var96));
var138 = ((var97 + var88) + (var97 + var97));
var143 = ((var99 + var85) + (var99 + var99));
var144 = ((var100 + var86) + (var100 + var100));
var145 = ((var101 + var87) + (var101 + var101));
var146 = ((var102 + var88) + (var102 + var102));
*(int *)(((long)arg0 + var84 * 4)) = var135;
*(int *)(((long)arg0 + var84 * 4 + 0x4)) = var136;
*(int *)(((long)arg0 + var84 * 4 + 0x8)) = var137;
*(int *)(((long)arg0 + var84 * 4 + 0xc)) = var138;
*(int *)(((long)arg0 + var84 * 4 + 0x10)) = var143;
*(int *)(((long)arg0 + var84 * 4 + 0x14)) = var144;
*(int *)(((long)arg0 + var84 * 4 + 0x18)) = var145;
*(int *)(((long)arg0 + var84 * 4 + 0x1c)) = var146;
var177 = ((var104 + var85) + (var104 + var104));
var178 = ((var105 + var86) + (var105 + var105));
var179 = ((var106 + var87) + (var106 + var106));
var180 = ((var107 + var88) + (var107 + var107));
var185 = ((var108 + var85) + (var108 + var108));
var186 = ((var109 + var86) + (var109 + var109));
var187 = ((var110 + var87) + (var110 + var110));
var188 = ((var111 + var88) + (var111 + var111));
*(int *)(((long)arg0 + var84 * 4 + 0x20)) = var177;
*(int *)(((long)arg0 + var84 * 4 + 0x24)) = var178;
*(int *)(((long)arg0 + var84 * 4 + 0x28)) = var179;
*(int *)(((long)arg0 + var84 * 4 + 0x2c)) = var180;
*(int *)(((long)arg0 + var84 * 4 + 0x30)) = var185;
*(int *)(((long)arg0 + var84 * 4 + 0x34)) = var186;
*(int *)(((long)arg0 + var84 * 4 + 0x38)) = var187;
*(int *)(((long)arg0 + var84 * 4 + 0x3c)) = var188;
var9 = (var177 ^ (var135 ^ var79));
var10 = (var178 ^ (var136 ^ var80));
var11 = (var179 ^ (var137 ^ var81));
var12 = (var180 ^ (var138 ^ var82));
var16 = (var185 ^ (var143 ^ var90));
var17 = (var186 ^ (var144 ^ var91));
var18 = (var187 ^ (var145 ^ var92));
var19 = (var188 ^ (var146 ^ var93));
ret = (var84 + 16);
var79 = var9;
var80 = var10;
var81 = var11;
var82 = var12;
var90 = var16;
var91 = var17;
var92 = var18;
var93 = var19;
var77 = (var77 - 2);
var84 = ret;
} while ((var77 != 0));
var14 = ret;
var68 = var9;
var69 = var10;
var70 = var11;
var71 = var12;
var72 = var16;
var73 = var17;
var74 = var18;
var75 = var19;
if (((unsigned long)((unsigned char)((var8 & 1))) == 0)) {
goto L_1684;
}
goto L_163e;
}
L_1684: ;
var212 = (unsigned long)((unsigned int)((((var71 ^ var75) ^ (var69 ^ var73)) ^ ((var70 ^ var74) ^ (var68 ^ var72)))));
ret = var212;
if ((var4 == var1)) {
return ret;
}
L_16b0: ;
do {
var213 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + var4 * 4))));
var215 = ((unsigned int)((var213 + (var213 * 2))) + 7);
*(int *)(((long)arg0 + var4 * 4)) = var215;
var218 = (unsigned long)((unsigned int)((var212 ^ (unsigned long)((unsigned int)(var215)))));
i = (var4 + 1);
var212 = var218;
var4 = (unsigned long)((unsigned int)(i));
ret = var218;
} while ((var1 != i));
} else {
var212 = 0;
var4 = 0;
goto L_16b0;
}
return ret;
} gcc -O0
6/9cas_update pass 10 lines
// glaurung: cas_update @ 0x116b
int cas_update(int * arg0, int arg1, int arg2) {
// x86-64 prologue: save rbp
if (((unsigned int)(arg1) != (unsigned int)(*(int *)((long)arg0)))) {
return 0;
} else {
*(int *)((long)arg0) = arg2;
return 1;
}
} mem_copy pass 10 lines
// glaurung: mem_copy @ 0x119f
void mem_copy(int * arg0, const int * arg1, int arg2) {
int i;
// x86-64 prologue: save rbp
for (i = 0; (i < arg2); i++) {
arg0[(long)(i)] = arg1[(long)(i)];
}
// x86-64 epilogue: restore rbp
return;
} mem_set pass 10 lines
// glaurung: mem_set @ 0x11f8
void mem_set(int * arg0, int arg1, int arg2) {
int i;
// x86-64 prologue: save rbp
for (i = 0; (i < arg2); i++) {
arg0[(long)(i)] = arg1;
}
// x86-64 epilogue: restore rbp
return;
} read_counter pass 8 lines
// glaurung: read_counter @ 0x1146
static unsigned char glaurung_global_4024[16] __attribute__((aligned(16)));
int read_counter(void) {
extern unsigned char glaurung_global_4024[16];
// x86-64 prologue: save rbp
// x86-64 epilogue: restore rbp
return (unsigned int)(*(int *)(&glaurung_global_4024[0]));
} reset_counter structural 9 lines
// glaurung: reset_counter @ 0x1156
static unsigned char glaurung_global_4024[16] __attribute__((aligned(16)));
void reset_counter(void) {
extern unsigned char glaurung_global_4024[16];
// x86-64 prologue: save rbp
*(int *)(&glaurung_global_4024[0]) = 0;
// x86-64 epilogue: restore rbp
return;
} tick structural 9 lines
// glaurung: tick @ 0x10f9
static unsigned char glaurung_global_4024[16] __attribute__((aligned(16)));
void tick(void) {
extern unsigned char glaurung_global_4024[16];
// x86-64 prologue: save rbp
*(int *)(&glaurung_global_4024[0]) = ((unsigned long)((unsigned int)(*(int *)(&glaurung_global_4024[0]))) + 1);
// x86-64 epilogue: restore rbp
return;
} tick_n structural 12 lines
// glaurung: tick_n @ 0x1113
static unsigned char glaurung_global_4024[16] __attribute__((aligned(16)));
void tick_n(int arg0) {
extern unsigned char glaurung_global_4024[16];
int i;
// x86-64 prologue: save rbp
for (i = 0; (i < arg0); i++) {
*(int *)(&glaurung_global_4024[0]) = ((unsigned long)((unsigned int)(*(int *)(&glaurung_global_4024[0]))) + 1);
}
// x86-64 epilogue: restore rbp
return;
} vec_sum pass 12 lines
// glaurung: vec_sum @ 0x123c
int vec_sum(const int * arg0, int arg1) {
int s;
int i;
// x86-64 prologue: save rbp
s = 0;
for (i = 0; (i < arg1); i++) {
s = (s + (unsigned int)(arg0[(long)(i)]));
}
// x86-64 epilogue: restore rbp
return (unsigned int)(s);
} vec_transform pass 15 lines
// glaurung: vec_transform @ 0x1285
int vec_transform(int * arg0, int arg1) {
int check;
int i;
long var6;
// x86-64 prologue: save rbp
check = 0;
for (i = 0; (i < arg1); i++) {
var6 = (unsigned long)((unsigned int)(arg0[(long)(i)]));
arg0[(long)(i)] = ((unsigned long)((unsigned int)((var6 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var6)) + (unsigned long)((unsigned int)(var6)))))))) + 7);
check = (check ^ (unsigned int)(arg0[(long)(i)]));
}
// x86-64 epilogue: restore rbp
return (unsigned int)(check);
} gcc -O2
6/9cas_update pass 10 lines
// glaurung: cas_update @ 0x1170
int cas_update(int * arg0, int arg1, int arg2) {
long ret;
ret = 0;
if (((unsigned int)(*(int *)(((long)arg0))) == (unsigned int)(arg1))) {
*(int *)(((long)arg0)) = arg2;
return 1;
}
return ret;
} mem_copy pass 16 lines
// glaurung: mem_copy @ 0x1190
void mem_copy(int * arg0, const int * arg1, int arg2) {
int i;
long ret;
long var0;
if ((((unsigned long)((unsigned int)(arg2)) != 0) && (0 <= (long)(arg2)))) {
var0 = (long)(arg2);
i = 0;
do {
*(int *)(((long)arg0 + i * 4)) = *(int *)(((long)arg1 + i * 4));
ret = ((unsigned long)((unsigned int)(i)) + 1);
i = ret;
} while ((ret != var0));
}
return;
} mem_set pass 15 lines
// glaurung: mem_set @ 0x11b0
void mem_set(int * arg0, int arg1, int arg2) {
int i;
long ret;
long var1;
if ((((unsigned long)((unsigned int)(arg2)) != 0) && (0 <= (long)(arg2)))) {
ret = (long)((((long)arg0 + ((unsigned long)((unsigned int)((arg2 - 1))) * 4)) + 4));
var1 = (long)arg0;
do {
*(int *)((var1)) = arg1;
var1 = (var1 + 4);
} while ((var1 != ret));
}
return;
} read_counter pass 6 lines
// glaurung: read_counter @ 0x1150
static unsigned char glaurung_global_4024[16] __attribute__((aligned(16)));
int read_counter(void) {
extern unsigned char glaurung_global_4024[16];
return (unsigned int)(*(int *)(&glaurung_global_4024[0]));
} reset_counter structural 7 lines
// glaurung: reset_counter @ 0x1160
static unsigned char glaurung_global_4024[16] __attribute__((aligned(16)));
void reset_counter(void) {
extern unsigned char glaurung_global_4024[16];
*(int *)(&glaurung_global_4024[0]) = 0;
return;
} tick structural 7 lines
// glaurung: tick @ 0x1100
static unsigned char glaurung_global_4024[16] __attribute__((aligned(16)));
void tick(void) {
extern unsigned char glaurung_global_4024[16];
*(int *)(&glaurung_global_4024[0]) = ((unsigned long)((unsigned int)(*(int *)(&glaurung_global_4024[0]))) + 1);
return;
} tick_n structural 16 lines
// glaurung: tick_n @ 0x1120
static unsigned char glaurung_global_4024[16] __attribute__((aligned(16)));
void tick_n(int arg0) {
extern unsigned char glaurung_global_4024[16];
int i;
int var4;
if ((((unsigned long)((unsigned int)(arg0)) != 0) && (0 <= (long)(arg0)))) {
i = 0;
do {
var4 = (i + 1);
i = (unsigned long)((unsigned int)(var4));
*(int *)(&glaurung_global_4024[0]) = ((unsigned long)((unsigned int)(*(int *)(&glaurung_global_4024[0]))) + 1);
} while (((unsigned int)(arg0) != (unsigned int)(var4)));
}
return;
} vec_sum pass 19 lines
// glaurung: vec_sum @ 0x11d0
int vec_sum(const int * arg0, int arg1) {
int i;
int s;
long ret;
long var2;
long var5;
if ((((unsigned long)((unsigned int)(arg1)) == 0) | ((long)(arg1) < 0))) {
return 0;
}
var2 = (long)((((long)arg0 + ((unsigned long)((unsigned int)((arg1 - 1))) * 4)) + 4));
ret = 0;
var5 = (long)arg0;
do {
ret = (unsigned long)((unsigned int)((ret + *(int *)((var5)))));
var5 = (var5 + 4);
} while ((var5 != var2));
return ret;
} vec_transform pass 24 lines
// glaurung: vec_transform @ 0x1200
int vec_transform(int * arg0, int arg1) {
int check;
int i;
long var5;
long var6;
long var7;
long var8;
long var9;
if ((((unsigned long)((unsigned int)(arg1)) == 0) | ((long)(arg1) < 0))) {
return 0;
}
var5 = (long)((((long)arg0 + ((unsigned long)((unsigned int)((arg1 - 1))) * 4)) + 4));
var6 = 0;
var7 = (long)arg0;
do {
var8 = (unsigned long)((unsigned int)(*(int *)((var7))));
var7 = (var7 + 4);
var9 = (unsigned long)((unsigned int)(((var8 + (var8 * 2)) + 7)));
*(int *)((var7 - 0x4)) = var9;
var6 = (unsigned long)((unsigned int)((var6 ^ var9)));
} while ((var7 != var5));
return (unsigned int)(var6);
}