Fixture 198
aggregate return edges
C · 15 functions · 4 lanes · 55 of 60 function-lanes behave identically
4 of 4 lanes have a function that returns a different result after decompilation: gcc-O2 (13/15), clang-O0 (14/15), clang-O2 (14/15), gcc-O0 (14/15).
#include <stdint.h>
/* THE BY-VALUE RETURN CLASSES 195 AND 197 LEAVE OUT.
*
* `195_by_value_aggregates` covers SysV's INTEGER (8B, `rax`), INTEGER-pair
* (16B, `rax:rdx`), split-bank (16B, `rax` + `xmm0`) and MEMORY (32B, hidden
* pointer) classes. `197_homogeneous_float_aggregates` covers the all-SSE
* classes (16B and 12B) and AAPCS64's homogeneous float aggregates. Between
* them every aggregate this corpus returns is 8, 12, 16 or 32 bytes, and every
* one of them fills its registers exactly or overflows to memory at a multiple
* of eight.
*
* The cells they never reach, all of which classify differently:
*
* struct {int32_t a;} 4B INTEGER -> the LOW HALF of rax only
* struct {uint8_t a,b,c;} 3B INTEGER -> three bytes of rax, and a
* size that is not a power of
* two, so a load of "the
* struct" is not one access
* struct {int32_t a,b,c;} 12B INTEGER,INTEGER -> rax:rdx with rdx
* HALF used. This is the
* integer twin of 197's
* `hfa197_trio3f`, and the
* corpus has the float half
* of that pair and not the
* integer half.
* union {int64_t; double;} 8B the class MERGE: SSE meets INTEGER and
* INTEGER wins, so this comes
* back in `rax` even though
* it holds a `double`. Nothing
* in the corpus returns a
* union at all, and until
* 2026-08-18 the DWARF reader
* could not describe one
* either.
* struct {int32_t v[2];} 8B INTEGER -> rax, but the member is an
* ARRAY, which has an extent
* and not just an offset.
* `dwarf_signatures.rs` used
* to decline array members
* outright; since 2026-08-18
* it describes them, so this
* helper is marshalled rather
* than reached only through
* its wrapper.
* struct {int32_t a..e;} 20B MEMORY, and NOT a multiple of eight —
* 195's memory case is exactly
* 32B, so the tail-padding
* copy has never been asked
* for.
*
* As in 195 and 197, the aggregate-returning helpers are exercised THROUGH
* callers that return `int32_t`. That is not a stylistic choice: `exec_class`
* in `tools/diff_decompile.py` classifies EVERY aggregate return as
* `structural` ("aggregate return — not execution-differential"), because
* `_ctypes_fn` builds a return type with `_scalar_ctype`, which knows only
* integers and floats. A struct-returning function can therefore never be
* called by the differential directly, and the only way to observe the ABI is
* to make a caller's recovered C get it right in order to call its helper at
* all. Each caller also witnesses the individual members in a caller-owned
* buffer with DISTINCT coefficients, so recovering the right total from
* permuted members is caught instead of passing by luck.
*
* TWO NEGATIVE CONTROLS:
*
* `agr198_make_i64` returns an `int64_t` — eight bytes, in `rax`, exactly
* where `agr198_make_arr2`'s eight-byte struct arrives, and it is NOT an
* aggregate. A recovery that classifies by "eight bytes in the result
* register" satisfies every positive case here and fails this one. It is also
* the only helper in this file the differential can call directly, so it is
* declared REQUIRED and gets its own verdict.
*
* `agr198_scalar_control` runs the same arithmetic and the same buffer writes
* with no aggregate anywhere, so a recovery that routes everything through
* the hidden-pointer path fails it.
*
* `seed` is pinned to small exact values by the manifest, so no product
* overflows and the `double` written into the union is exactly representable —
* its bit pattern is then a deterministic constant on both sides. */
#define AGR198_SLOT_A 0
#define AGR198_SLOT_B 1
#define AGR198_SLOT_C 2
#define AGR198_SLOT_D 3
#define AGR198_SLOT_E 4
struct agr198_one { /* 4 bytes: the low half of one register */
int32_t a;
};
struct agr198_bytes3 { /* 3 bytes: not a power of two, sub-word */
uint8_t a;
uint8_t b;
uint8_t c;
};
struct agr198_trio { /* 12 bytes: rax:rdx, rdx half used */
int32_t a;
int32_t b;
int32_t c;
};
union agr198_bits { /* 8 bytes: SSE merged with INTEGER -> INTEGER */
int64_t i;
double d;
};
struct agr198_arr2 { /* 8 bytes, and the member is an ARRAY */
int32_t v[2];
};
struct agr198_five { /* 20 bytes: MEMORY, not a multiple of eight */
int32_t a;
int32_t b;
int32_t c;
int32_t d;
int32_t e;
};
__attribute__((noinline)) struct agr198_one agr198_make_one(int32_t seed) {
struct agr198_one s;
s.a = seed * 3 + 1;
return s;
}
__attribute__((noinline)) struct agr198_bytes3 agr198_make_bytes3(int32_t seed) {
struct agr198_bytes3 s;
s.a = (uint8_t)(seed + 1);
s.b = (uint8_t)(seed + 2);
s.c = (uint8_t)(seed * 3);
return s;
}
__attribute__((noinline)) struct agr198_trio agr198_make_trio(int32_t seed) {
struct agr198_trio s;
s.a = seed + 1;
s.b = seed * 2;
s.c = seed * 4;
return s;
}
/* Writes the `double` member and the caller reads the `int64_t` one: the union
* is a real type pun at the RETURN boundary, and the result is an exact IEEE
* bit pattern because `seed` is pinned to small integers. */
__attribute__((noinline)) union agr198_bits agr198_make_bits(int32_t seed) {
union agr198_bits u;
u.d = (double)(seed * 2 + 1);
return u;
}
__attribute__((noinline)) struct agr198_arr2 agr198_make_arr2(int32_t seed) {
struct agr198_arr2 s;
s.v[0] = seed + 5;
s.v[1] = seed * 7;
return s;
}
__attribute__((noinline)) struct agr198_five agr198_make_five(int32_t seed) {
struct agr198_five s;
s.a = seed + 1;
s.b = seed + 2;
s.c = seed * 3;
s.d = seed * 5;
s.e = seed * 7;
return s;
}
/* CONTROL helper: eight bytes in `rax` that are NOT an aggregate. Directly
* executable, unlike every other helper in this file. */
__attribute__((noinline)) int64_t agr198_make_i64(int32_t seed) {
return (int64_t)seed * 7 + 5;
}
__attribute__((noinline)) int32_t agr198_one_roundtrip(int32_t *scratch, int32_t seed) {
struct agr198_one s;
if (scratch == 0) {
return -1;
}
s = agr198_make_one(seed);
scratch[AGR198_SLOT_A] = s.a;
return s.a * 3;
}
__attribute__((noinline)) int32_t agr198_bytes3_roundtrip(int32_t *scratch, int32_t seed) {
struct agr198_bytes3 s;
if (scratch == 0) {
return -1;
}
/* Three bytes: a recovery that copies four (a whole register's low half)
* picks up whatever sits in the fourth. */
s = agr198_make_bytes3(seed);
scratch[AGR198_SLOT_A] = s.a;
scratch[AGR198_SLOT_B] = s.b;
scratch[AGR198_SLOT_C] = s.c;
return (int32_t)s.a + (int32_t)s.b * 3 + (int32_t)s.c * 5;
}
__attribute__((noinline)) int32_t agr198_trio_roundtrip(int32_t *scratch, int32_t seed) {
struct agr198_trio s;
if (scratch == 0) {
return -1;
}
/* rdx is HALF occupied: a recovery that assumes a full second eightbyte
* reads a fourth member that was never stored. */
s = agr198_make_trio(seed);
scratch[AGR198_SLOT_A] = s.a;
scratch[AGR198_SLOT_B] = s.b;
scratch[AGR198_SLOT_C] = s.c;
return s.a + s.b * 3 + s.c * 5;
}
__attribute__((noinline)) int32_t agr198_bits_roundtrip(int32_t *scratch, int32_t seed) {
union agr198_bits u;
if (scratch == 0) {
return -1;
}
/* The union arrives in `rax`, not in `xmm0`, even though the value written
* into it was a `double`. Reading the two halves of the bit pattern proves
* which register it came back in. */
u = agr198_make_bits(seed);
scratch[AGR198_SLOT_A] = (int32_t)(u.i & 0xffffffff);
scratch[AGR198_SLOT_B] = (int32_t)((uint64_t)u.i >> 32);
return (int32_t)((uint64_t)u.i >> 52);
}
__attribute__((noinline)) int32_t agr198_arr2_roundtrip(int32_t *scratch, int32_t seed) {
struct agr198_arr2 s;
if (scratch == 0) {
return -1;
}
s = agr198_make_arr2(seed);
scratch[AGR198_SLOT_A] = s.v[0];
scratch[AGR198_SLOT_B] = s.v[1];
return s.v[0] + s.v[1] * 3;
}
__attribute__((noinline)) int32_t agr198_five_roundtrip(int32_t *scratch, int32_t seed) {
struct agr198_five s;
if (scratch == 0) {
return -1;
}
/* MEMORY class at 20 bytes: the hidden return pointer takes the first
* argument register AND the copy back is not a whole number of eightbytes. */
s = agr198_make_five(seed);
scratch[AGR198_SLOT_A] = s.a;
scratch[AGR198_SLOT_B] = s.b;
scratch[AGR198_SLOT_C] = s.c;
scratch[AGR198_SLOT_D] = s.d;
scratch[AGR198_SLOT_E] = s.e;
return s.a + s.b * 3 + s.c * 5 + s.d * 7 + s.e * 11;
}
/* CONTROL: eight bytes in `rax` from a scalar. Must not acquire aggregate
* handling just because its neighbours have it. */
__attribute__((noinline)) int32_t agr198_i64_control(int32_t *scratch, int32_t seed) {
int64_t v;
if (scratch == 0) {
return -1;
}
v = agr198_make_i64(seed);
scratch[AGR198_SLOT_A] = (int32_t)(v & 0xffffffff);
scratch[AGR198_SLOT_B] = (int32_t)((uint64_t)v >> 32);
return (int32_t)v * 3;
}
/* CONTROL: no aggregate anywhere, same buffer discipline. */
__attribute__((noinline)) int32_t agr198_scalar_control(int32_t *scratch, int32_t seed) {
int32_t a;
int32_t b;
int32_t c;
if (scratch == 0) {
return -1;
}
a = seed + 1;
b = seed * 2;
c = seed * 4;
scratch[AGR198_SLOT_A] = a;
scratch[AGR198_SLOT_B] = b;
scratch[AGR198_SLOT_C] = c;
return a + b * 3 + c * 5;
} 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.
gcc -O2
13/15agr198_arr2_roundtrip pass 20 lines
// glaurung: agr198_arr2_roundtrip @ 0x13e0
int32_t agr198_arr2_roundtrip(int32_t * arg0, int32_t arg1) {
extern long agr198_make_arr2(int);
long local_8;
long var0;
long var1;
long var3;
long var6;
local_8 = var0;
var1 = (long)arg0;
if ((arg0 == 0)) {
// x86-64 epilogue: tear down frame
return 0xffffffff;
}
var3 = agr198_make_arr2((unsigned long)((unsigned int)(arg1)));
*(int *)((var1)) = var3;
var6 = ((long)(var3) >> 32);
*(int *)((var1 + 0x4)) = var6;
return (unsigned int)((var3 + (unsigned long)((unsigned int)((var6 + (var6 * 2))))));
} agr198_bits_roundtrip pass 18 lines
// glaurung: agr198_bits_roundtrip @ 0x13b0
int32_t agr198_bits_roundtrip(int32_t * arg0, int32_t arg1) {
extern long agr198_make_bits(int);
long local_8;
long var0;
int * var1;
long var3;
local_8 = var0;
var1 = (int *)arg0;
if ((arg0 == 0)) {
// x86-64 epilogue: tear down frame
return 0xffffffff;
}
var3 = agr198_make_bits((unsigned long)((unsigned int)(arg1)));
*(long *)((var1)) = var3;
// x86-64 epilogue: tear down frame
return ((unsigned long)(var3) >> 52);
} agr198_bytes3_roundtrip pass 22 lines
// glaurung: agr198_bytes3_roundtrip @ 0x1320
int32_t agr198_bytes3_roundtrip(int32_t * arg0, int32_t arg1) {
extern unsigned int agr198_make_bytes3(int);
long var0;
unsigned int var1;
int var5;
int var6;
int var9;
var0 = (long)arg0;
if ((arg0 == 0)) {
return 0xffffffff;
} else {
var1 = agr198_make_bytes3((unsigned long)((unsigned int)(arg1)));
var5 = (unsigned int)((unsigned char)(((long)((int)(var1)) & 255)));
var6 = (unsigned int)((unsigned char)((((unsigned long)((long)((int)(var1))) >> 8) & 255)));
*(int *)((var0 + 0x4)) = var6;
var9 = (unsigned int)((unsigned char)((((unsigned long)((long)((int)(var1))) >> 16) & 255)));
*(int *)((var0)) = var5;
*(int *)((var0 + 0x8)) = var9;
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var6 + (var6 * 2)))) + var5))) + (unsigned long)((unsigned int)((var9 + (var9 * 4))))));
}
} agr198_five_roundtrip fail 41 lines
// glaurung: agr198_five_roundtrip @ 0x1410
int32_t agr198_five_roundtrip(int32_t * arg0, int32_t arg1) {
extern __attribute__((noreturn)) void __stack_chk_fail(void);
extern int * agr198_make_five(char *, int);
long local_10;
unsigned char local_28[20];
long ret;
long rsp;
long var11;
long var3;
int * var4;
long var6;
long var7;
long var8;
long var9;
rsp = (rsp - 8);
rsp = (rsp - 32);
local_10 = (long)(0x28);
if ((arg0 == 0)) {
ret = 0xffffffff;
} else {
var3 = (long)arg0;
var4 = ((int * (*)(char *))agr198_make_five)((char *)(rsp));
var6 = (unsigned long)((unsigned int)(*(int *)((&local_28[0] + 4))));
var7 = (unsigned long)((unsigned int)(*(int *)(&local_28[0])));
var8 = (unsigned long)((unsigned int)(*(int *)((&local_28[0] + 8))));
var9 = (unsigned long)((unsigned int)(*(int *)((&local_28[0] + 12))));
*(int *)((var3 + 0x4)) = var6;
var11 = (unsigned long)((unsigned int)(*(int *)((&local_28[0] + 16))));
*(int *)((var3 + 0x8)) = var8;
*(int *)((var3)) = var7;
*(int *)((var3 + 0xc)) = var9;
*(int *)((var3 + 0x10)) = var11;
ret = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var6 + (var6 * 2)))) + var7))) + (unsigned long)((unsigned int)((var8 + (var8 * 4))))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var9 * 8))) - var9)))))) + (unsigned long)((unsigned int)((var11 + ((unsigned long)((unsigned int)((var11 + (var11 * 4)))) * 2)))))));
}
if ((local_10 != 0x28)) {
__stack_chk_fail();
}
// x86-64 epilogue: tear down frame
return ret;
} agr198_i64_control pass 19 lines
// glaurung: agr198_i64_control @ 0x14a0
int32_t agr198_i64_control(int32_t * arg0, int32_t arg1) {
extern long agr198_make_i64(int);
long v;
long local_8;
long var0;
int * var1;
long var3;
local_8 = var0;
var1 = (int *)arg0;
if ((arg0 == 0)) {
// x86-64 epilogue: tear down frame
return 0xffffffff;
}
var3 = agr198_make_i64((unsigned long)((unsigned int)(arg1)));
*(long *)((var1)) = var3;
// x86-64 epilogue: tear down frame
return (unsigned int)((var3 + (var3 * 2)));
} agr198_make_arr2 pass 4 lines
// glaurung: agr198_make_arr2 @ 0x1280
unsigned long agr198_make_arr2(int32_t arg0) {
return ((unsigned long)((unsigned int)((arg0 + 5))) | ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((arg0 * 8))) - arg0))) << 32));
} agr198_make_bits pass 4 lines
// glaurung: agr198_make_bits @ 0x1260
double agr198_make_bits(int arg0) {
return (double)((int)((unsigned long)((unsigned int)(((arg0 + arg0) + 1)))));
} agr198_make_bytes3 pass 8 lines
// glaurung: agr198_make_bytes3 @ 0x1210
unsigned int agr198_make_bytes3(int32_t arg0) {
signed char local_2;
signed char local_3;
local_3 = (arg0 + 1);
local_2 = (arg0 + 2);
return (unsigned int)(((unsigned int)((unsigned short)(((unsigned short)((unsigned char)(local_3)) | ((unsigned short)((unsigned char)(local_2)) << 8)))) | ((unsigned int)((unsigned char)(((unsigned long)((unsigned int)((arg0 + (arg0 * 2)))) & 255))) << 16)));
} agr198_make_five structural 9 lines
// glaurung: agr198_make_five @ 0x12a0
int * agr198_make_five(char * arg0, int arg1) {
*(int *)(((long)arg0)) = (arg1 + 1);
*(int *)(((long)arg0 + 0x4)) = (arg1 + 2);
*(int *)(((long)arg0 + 0x8)) = (arg1 + (arg1 * 2));
*(int *)(((long)arg0 + 0xc)) = (arg1 + (arg1 * 4));
*(int *)(((long)arg0 + 0x10)) = ((unsigned long)((unsigned int)((arg1 * 8))) - arg1);
return (int *)arg0;
} agr198_make_i64 pass 4 lines
// glaurung: agr198_make_i64 @ 0x12d0
int64_t agr198_make_i64(int32_t arg0) {
return ((((long)(arg0) * 8) - (long)(arg0)) + 5);
} agr198_make_one pass 4 lines
// glaurung: agr198_make_one @ 0x1200
unsigned int agr198_make_one(int32_t arg0) {
return (unsigned int)(((arg0 + (arg0 * 2)) + 1));
} agr198_make_trio pass 8 lines
// glaurung: agr198_make_trio @ 0x1240
unsigned __int128 agr198_make_trio(int32_t arg0) {
int local_10;
int local_14;
local_14 = (arg0 + 1);
local_10 = (arg0 + arg0);
return ((unsigned __int128)((unsigned long)(((unsigned long)((unsigned int)(local_14)) | ((unsigned long)((unsigned int)(local_10)) << 32)))) | ((unsigned __int128)((unsigned long)((unsigned int)((arg0 * 4)))) << 64));
} agr198_one_roundtrip pass 18 lines
// glaurung: agr198_one_roundtrip @ 0x12f0
int32_t agr198_one_roundtrip(int32_t * arg0, int32_t arg1) {
extern unsigned int agr198_make_one(int);
long local_8;
long var0;
int * var1;
unsigned int var3;
local_8 = var0;
var1 = (int *)arg0;
if ((arg0 == 0)) {
// x86-64 epilogue: tear down frame
return 0xffffffff;
}
var3 = agr198_make_one((unsigned long)((unsigned int)(arg1)));
*(int *)((var1)) = var3;
// x86-64 epilogue: tear down frame
return (unsigned int)((var3 + (var3 * 2)));
} agr198_scalar_control pass 16 lines
// glaurung: agr198_scalar_control @ 0x14d0
int32_t agr198_scalar_control(int32_t * arg0, int32_t arg1) {
int a;
long var0;
long var2;
if ((arg0 == 0)) {
return 0xffffffff;
}
var0 = (unsigned long)((unsigned int)((arg1 + arg1)));
a = (unsigned long)((unsigned int)((arg1 + 1)));
var2 = (unsigned long)((unsigned int)((arg1 * 4)));
*(int *)(((long)arg0 + 0x4)) = var0;
*(int *)(((long)arg0 + 0x8)) = var2;
*(int *)(((long)arg0)) = a;
return (unsigned int)(((unsigned long)((unsigned int)((a + ((unsigned long)((unsigned int)((var0 + arg1))) * 2)))) + ((unsigned long)((unsigned int)((var2 + arg1))) * 4)));
} agr198_trio_roundtrip pass 20 lines
// glaurung: agr198_trio_roundtrip @ 0x1370
int32_t agr198_trio_roundtrip(int32_t * arg0, int32_t arg1) {
extern unsigned __int128 agr198_make_trio(int);
long var0;
unsigned __int128 var1;
long var2;
long var5;
var0 = (long)arg0;
if ((arg0 == 0)) {
return 0xffffffff;
} else {
var1 = agr198_make_trio((unsigned long)((unsigned int)(arg1)));
var2 = (unsigned long)(((unsigned __int128)(var1) >> 64));
var5 = ((unsigned __int128)(var1) >> 32);
*(int *)((var0 + 0x8)) = var2;
*(int *)((var0 + 0x4)) = var5;
*(int *)((var0)) = var1;
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var5 + (var5 * 2)))) + (unsigned long)((unsigned int)(var1))))) + (unsigned long)((unsigned int)((var2 + (var2 * 4))))));
}
} clang -O0
14/15agr198_arr2_roundtrip pass 18 lines
// glaurung: agr198_arr2_roundtrip @ 0x14b0
__attribute__((no_stack_protector)) int32_t agr198_arr2_roundtrip(int32_t * arg0, int32_t arg1) {
extern long agr198_make_arr2(int);
unsigned char local_20[8];
long local_28;
long var0;
// x86-64 prologue: save rbp, frame 48 bytes
if ((arg0 != 0)) {
var0 = agr198_make_arr2((unsigned long)((unsigned int)(arg1)));
local_28 = var0;
*(long *)(&local_20[0]) = local_28;
*(int *)((long)arg0) = *(int *)(&local_20[0]);
*(int *)(((long)arg0 + 0x4)) = *(int *)((&local_20[0] + 4));
return (unsigned int)(((unsigned long)((unsigned int)(*(int *)(&local_20[0]))) + (*(int *)((&local_20[0] + 4)) * 3)));
} else {
return (unsigned int)(-1);
}
} agr198_bits_roundtrip pass 18 lines
// glaurung: agr198_bits_roundtrip @ 0x1430
__attribute__((no_stack_protector)) int32_t agr198_bits_roundtrip(int32_t * arg0, int32_t arg1) {
extern long agr198_make_bits(int);
unsigned char local_20[8];
long local_28;
long var0;
// x86-64 prologue: save rbp, frame 48 bytes
if ((arg0 != 0)) {
var0 = agr198_make_bits((unsigned long)((unsigned int)(arg1)));
local_28 = var0;
*(long *)(&local_20[0]) = local_28;
*(int *)((long)arg0) = *(long *)(&local_20[0]);
*(int *)(((long)arg0 + 0x4)) = ((unsigned long)(*(long *)(&local_20[0])) >> 32);
return (unsigned int)(((unsigned long)(*(long *)(&local_20[0])) >> 52));
} else {
return (unsigned int)(-1);
}
} agr198_bytes3_roundtrip pass 26 lines
// glaurung: agr198_bytes3_roundtrip @ 0x1300
__attribute__((no_stack_protector)) int32_t agr198_bytes3_roundtrip(int32_t * arg0, int32_t arg1) {
extern unsigned int agr198_make_bytes3(int);
unsigned char local_18[3];
signed char local_1e;
short local_20;
signed char local_22;
short local_24;
unsigned int var0;
// x86-64 prologue: save rbp, frame 48 bytes
if ((arg0 != 0)) {
var0 = agr198_make_bytes3((unsigned long)((unsigned int)(arg1)));
local_24 = var0;
local_22 = ((unsigned long)(var0) >> 16);
local_20 = local_24;
local_1e = local_22;
*(short *)(&local_18[0]) = local_20;
*(signed char *)((&local_18[0] + 2)) = local_1e;
*(int *)((long)arg0) = (unsigned char)(*(char *)(&local_18[0]));
*(int *)(((long)arg0 + 0x4)) = (unsigned char)(*(char *)((&local_18[0] + 1)));
*(int *)(((long)arg0 + 0x8)) = (unsigned char)(*(char *)((&local_18[0] + 2)));
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned int)((unsigned char)(*(char *)(&local_18[0]))) + ((unsigned int)((unsigned char)(*(char *)((&local_18[0] + 1)))) * 3)))) + ((unsigned int)((unsigned char)(*(char *)((&local_18[0] + 2)))) * 5)));
} else {
return (unsigned int)(-1);
}
} agr198_five_roundtrip pass 22 lines
// glaurung: agr198_five_roundtrip @ 0x1520
__attribute__((no_stack_protector)) int32_t agr198_five_roundtrip(int32_t * arg0, int32_t arg1) {
extern int * agr198_make_five(char *, int);
unsigned char local_28[20];
unsigned char local_40[24];
int * var0;
// x86-64 prologue: save rbp, frame 64 bytes
if ((arg0 != 0)) {
var0 = agr198_make_five((char *)(&local_40[0]), (unsigned long)((unsigned int)(arg1)));
*(long *)(&local_28[0]) = *(long *)(&local_40[0]);
*(long *)((&local_28[0] + 8)) = *(long *)((&local_40[0] + 8));
*(int *)((&local_28[0] + 16)) = *(int *)((&local_40[0] + 16));
*(int *)((long)arg0) = *(int *)(&local_28[0]);
*(int *)(((long)arg0 + 0x4)) = *(int *)((&local_28[0] + 4));
*(int *)(((long)arg0 + 0x8)) = *(int *)((&local_28[0] + 8));
*(int *)(((long)arg0 + 0xc)) = *(int *)((&local_28[0] + 12));
*(int *)(((long)arg0 + 0x10)) = *(int *)((&local_28[0] + 16));
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(&local_28[0]))) + (*(int *)((&local_28[0] + 4)) * 3)))) + (*(int *)((&local_28[0] + 8)) * 5)))) + (*(int *)((&local_28[0] + 12)) * 7)))) + (*(int *)((&local_28[0] + 16)) * 11)));
} else {
return (unsigned int)(-1);
}
} agr198_i64_control pass 16 lines
// glaurung: agr198_i64_control @ 0x15c0
int32_t agr198_i64_control(int32_t * arg0, int32_t arg1) {
extern long agr198_make_i64(int);
long v;
long var0;
// x86-64 prologue: save rbp, frame 32 bytes
if ((arg0 != 0)) {
var0 = agr198_make_i64((unsigned long)((unsigned int)(arg1)));
v = var0;
*(int *)((long)arg0) = v;
*(int *)(((long)arg0 + 0x4)) = ((unsigned long)(v) >> 32);
return (unsigned int)((v * 3));
} else {
return (unsigned int)(-1);
}
} agr198_make_arr2 pass 9 lines
// glaurung: agr198_make_arr2 @ 0x1230
__attribute__((no_stack_protector)) unsigned long agr198_make_arr2(int32_t arg0) {
unsigned char local_8[8];
// x86-64 prologue: save rbp
*(int *)(&local_8[0]) = ((unsigned long)((unsigned int)(arg0)) + 5);
*(int *)((&local_8[0] + 4)) = (arg0 * 7);
// x86-64 epilogue: restore rbp
return *(long *)(&local_8[0]);
} agr198_make_bits pass 8 lines
// glaurung: agr198_make_bits @ 0x1210
__attribute__((no_stack_protector)) double agr198_make_bits(int arg0) {
unsigned char local_8[8];
// x86-64 prologue: save rbp
*(double *)(&local_8[0]) = (double)((int)((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) << 1))) + 1)))));
// x86-64 epilogue: restore rbp
return *(double *)(&local_8[0]);
} agr198_make_bytes3 pass 14 lines
// glaurung: agr198_make_bytes3 @ 0x1190
__attribute__((no_stack_protector)) unsigned int agr198_make_bytes3(int32_t arg0) {
short local_10;
unsigned char local_8[3];
signed char local_e;
// x86-64 prologue: save rbp
*(signed char *)(&local_8[0]) = (((unsigned char)(arg0) & 255) + 1);
*(signed char *)((&local_8[0] + 1)) = (((unsigned char)(arg0) & 255) + 2);
*(signed char *)((&local_8[0] + 2)) = ((unsigned long)((unsigned int)(arg0)) + ((unsigned long)((unsigned int)(arg0)) * 2));
local_e = *(char *)((&local_8[0] + 2));
local_10 = *(short *)(&local_8[0]);
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned int)((unsigned short)(local_10)) | (unsigned long)((unsigned int)(((unsigned int)((unsigned char)(local_e)) << 16)))));
} agr198_make_five structural 11 lines
// glaurung: agr198_make_five @ 0x1250
int * agr198_make_five(char * arg0, int arg1) {
// x86-64 prologue: save rbp
*(int *)(((long)arg0)) = ((unsigned long)((unsigned int)(arg1)) + 1);
*(int *)(((long)arg0 + 0x4)) = ((unsigned long)((unsigned int)(arg1)) + 2);
*(int *)(((long)arg0 + 0x8)) = (arg1 * 3);
*(int *)(((long)arg0 + 0xc)) = (arg1 * 5);
*(int *)(((long)arg0 + 0x10)) = (arg1 * 7);
// x86-64 epilogue: restore rbp
return (int *)arg0;
} agr198_make_i64 pass 6 lines
// glaurung: agr198_make_i64 @ 0x1290
int64_t agr198_make_i64(int32_t arg0) {
// x86-64 prologue: save rbp
// x86-64 epilogue: restore rbp
return (((long)(arg0) * 7) + 5);
} agr198_make_one pass 8 lines
// glaurung: agr198_make_one @ 0x1170
__attribute__((no_stack_protector)) unsigned int agr198_make_one(int32_t arg0) {
unsigned char local_8[4];
// x86-64 prologue: save rbp
*(int *)(&local_8[0]) = ((arg0 * 3) + 1);
// x86-64 epilogue: restore rbp
return (unsigned int)(*(int *)(&local_8[0]));
} agr198_make_trio pass 14 lines
// glaurung: agr198_make_trio @ 0x11d0
__attribute__((no_stack_protector)) unsigned __int128 agr198_make_trio(int32_t arg0) {
unsigned char local_10[12];
int local_20;
long local_28;
// x86-64 prologue: save rbp
*(int *)(&local_10[0]) = ((unsigned long)((unsigned int)(arg0)) + 1);
*(int *)((&local_10[0] + 4)) = ((unsigned long)((unsigned int)(arg0)) + (unsigned long)((unsigned int)(arg0)));
*(int *)((&local_10[0] + 8)) = ((unsigned long)((unsigned int)(arg0)) << 2);
local_20 = *(int *)((&local_10[0] + 8));
local_28 = *(long *)(&local_10[0]);
// x86-64 epilogue: restore rbp
return ((unsigned __int128)((unsigned long)(local_28)) | ((unsigned __int128)((unsigned long)((unsigned int)(local_20))) << 64));
} agr198_one_roundtrip pass 17 lines
// glaurung: agr198_one_roundtrip @ 0x12b0
__attribute__((no_stack_protector)) int32_t agr198_one_roundtrip(int32_t * arg0, int32_t arg1) {
extern unsigned int agr198_make_one(int);
unsigned char local_18[4];
int local_20;
unsigned int var0;
// x86-64 prologue: save rbp, frame 32 bytes
if ((arg0 != 0)) {
var0 = agr198_make_one((unsigned long)((unsigned int)(arg1)));
local_20 = var0;
*(int *)(&local_18[0]) = local_20;
*(int *)((long)arg0) = *(int *)(&local_18[0]);
return (unsigned int)((*(int *)(&local_18[0]) * 3));
} else {
return (unsigned int)(-1);
}
} agr198_scalar_control pass 18 lines
// glaurung: agr198_scalar_control @ 0x1630
int32_t agr198_scalar_control(int32_t * arg0, int32_t arg1) {
int a;
int b;
int c;
// x86-64 prologue: save rbp
if ((arg0 != 0)) {
a = ((unsigned int)(arg1) + 1);
b = ((unsigned long)((unsigned int)(arg1)) << 1);
c = ((unsigned long)((unsigned int)(arg1)) << 2);
*(int *)((long)arg0) = a;
*(int *)(((long)arg0 + 0x4)) = b;
*(int *)(((long)arg0 + 0x8)) = c;
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(a)) + (b * 3)))) + (c * 5)));
} else {
return (unsigned int)(-1);
}
} agr198_trio_roundtrip pass 26 lines
// glaurung: agr198_trio_roundtrip @ 0x13a0
__attribute__((no_stack_protector)) int32_t agr198_trio_roundtrip(int32_t * arg0, int32_t arg1) {
extern unsigned __int128 agr198_make_trio(int);
unsigned char local_20[12];
int local_28;
long local_30;
int local_38;
long local_40;
unsigned __int128 var0;
// x86-64 prologue: save rbp, frame 64 bytes
if ((arg0 != 0)) {
var0 = agr198_make_trio((unsigned long)((unsigned int)(arg1)));
local_38 = ((unsigned __int128)(var0) >> 64);
local_40 = var0;
local_30 = local_40;
local_28 = local_38;
*(long *)(&local_20[0]) = local_30;
*(int *)((&local_20[0] + 8)) = local_28;
*(int *)((long)arg0) = *(int *)(&local_20[0]);
*(int *)(((long)arg0 + 0x4)) = *(int *)((&local_20[0] + 4));
*(int *)(((long)arg0 + 0x8)) = *(int *)((&local_20[0] + 8));
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(&local_20[0]))) + (*(int *)((&local_20[0] + 4)) * 3)))) + (*(int *)((&local_20[0] + 8)) * 5)));
} else {
return (unsigned int)(-1);
}
} clang -O2
14/15agr198_arr2_roundtrip pass 16 lines
// glaurung: agr198_arr2_roundtrip @ 0x1300
int32_t agr198_arr2_roundtrip(int32_t * arg0, int32_t arg1) {
extern long agr198_make_arr2(int);
int * var0;
long var1;
long var4;
if ((arg0 == 0)) {
return 0xffffffff;
}
var0 = (int *)arg0;
var1 = agr198_make_arr2((unsigned long)((unsigned int)(arg1)));
*(long *)((var0)) = var1;
var4 = ((unsigned long)(var1) >> 32);
// x86-64 epilogue: tear down frame
return (unsigned int)(((unsigned long)((unsigned int)((var4 + (var4 * 2)))) + var1));
} agr198_bits_roundtrip pass 14 lines
// glaurung: agr198_bits_roundtrip @ 0x12e0
int32_t agr198_bits_roundtrip(int32_t * arg0, int32_t arg1) {
extern long agr198_make_bits(int);
int * var0;
long var1;
if ((arg0 == 0)) {
return 0xffffffff;
}
var0 = (int *)arg0;
var1 = agr198_make_bits((unsigned long)((unsigned int)(arg1)));
*(long *)((var0)) = var1;
// x86-64 epilogue: tear down frame
return ((unsigned long)(var1) >> 52);
} agr198_bytes3_roundtrip pass 24 lines
// glaurung: agr198_bytes3_roundtrip @ 0x1260
int32_t agr198_bytes3_roundtrip(int32_t * arg0, int32_t arg1) {
extern unsigned int agr198_make_bytes3(int);
long var0;
unsigned int var1;
int var3;
long var5;
int var6;
long var9;
if ((arg0 == 0)) {
return 0xffffffff;
}
var0 = (long)arg0;
var1 = agr198_make_bytes3((unsigned long)((unsigned int)(arg1)));
var3 = (unsigned int)((unsigned char)((var1 & 255)));
var5 = (unsigned long)((unsigned int)((var1 & 0xffffff)));
var6 = (unsigned int)((unsigned char)((((unsigned long)(var5) >> 8) & 255)));
var9 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var5)) >> 16)));
*(int *)((var0)) = var3;
*(int *)((var0 + 0x4)) = var6;
*(int *)((var0 + 0x8)) = var9;
// x86-64 epilogue: tear down frame
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var9 + (var9 * 4)))) + var3))) + (unsigned long)((unsigned int)((var6 + (var6 * 2))))));
} agr198_five_roundtrip pass 29 lines
// glaurung: agr198_five_roundtrip @ 0x1330
__attribute__((no_stack_protector)) int32_t agr198_five_roundtrip(int32_t * arg0, int32_t arg1) {
extern int * agr198_make_five(char *, int);
unsigned char local_20[24];
long var0;
int * var1;
long var3;
long var4;
long var5;
long var6;
long var7;
if ((arg0 == 0)) {
return 0xffffffff;
}
var0 = (long)arg0;
var1 = ((int * (*)(char *))agr198_make_five)((char *)(&local_20[0]));
var3 = (unsigned long)((unsigned int)(*(int *)(&local_20[0])));
var4 = (unsigned long)((unsigned int)(*(int *)((&local_20[0] + 4))));
var5 = (unsigned long)((unsigned int)(*(int *)((&local_20[0] + 8))));
var6 = (unsigned long)((unsigned int)(*(int *)((&local_20[0] + 12))));
var7 = (unsigned long)((unsigned int)(*(int *)((&local_20[0] + 16))));
*(int *)((var0)) = var3;
*(int *)((var0 + 0x4)) = var4;
*(int *)((var0 + 0x8)) = var5;
*(int *)((var0 + 0xc)) = var6;
*(int *)((var0 + 0x10)) = var7;
// x86-64 epilogue: tear down frame
return (unsigned int)(((unsigned long)((unsigned int)((var7 + ((unsigned long)((unsigned int)((var7 + (var7 * 4)))) * 2)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var6 * 8))) - var6))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var5 + (var5 * 4)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var4 + (var4 * 2)))) + var3)))))))))));
} agr198_i64_control pass 15 lines
// glaurung: agr198_i64_control @ 0x13a0
int32_t agr198_i64_control(int32_t * arg0, int32_t arg1) {
extern long agr198_make_i64(int);
long v;
int * var0;
long var1;
if ((arg0 == 0)) {
return 0xffffffff;
}
var0 = (int *)arg0;
var1 = agr198_make_i64((unsigned long)((unsigned int)(arg1)));
*(long *)((var0)) = var1;
// x86-64 epilogue: tear down frame
return (unsigned int)((var1 + (var1 * 2)));
} agr198_make_arr2 pass 4 lines
// glaurung: agr198_make_arr2 @ 0x11d0
unsigned long agr198_make_arr2(int32_t arg0) {
return ((unsigned long)((unsigned int)((arg0 + 5))) | ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((arg0 * 8))) - arg0))) << 32));
} agr198_make_bits pass 4 lines
// glaurung: agr198_make_bits @ 0x11c0
double agr198_make_bits(int arg0) {
return (double)((int)((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((arg0 + arg0))) + 1)))));
} agr198_make_bytes3 pass 6 lines
// glaurung: agr198_make_bytes3 @ 0x1180
unsigned int agr198_make_bytes3(int32_t arg0) {
long var3;
var3 = (unsigned long)((unsigned int)((arg0 << 16)));
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned int)((unsigned char)(((unsigned long)((unsigned int)((arg0 + 1))) & 255))) | (unsigned long)((unsigned int)((var3 + (var3 * 2))))))) | (unsigned long)((unsigned int)(((unsigned int)((unsigned char)(((unsigned long)((unsigned int)((arg0 + 2))) & 255))) << 8)))));
} agr198_make_five structural 9 lines
// glaurung: agr198_make_five @ 0x11f0
int * agr198_make_five(char * arg0, int arg1) {
*(int *)(((long)arg0)) = (arg1 + 1);
*(int *)(((long)arg0 + 0x4)) = (arg1 + 2);
*(int *)(((long)arg0 + 0x8)) = (arg1 + (arg1 * 2));
*(int *)(((long)arg0 + 0xc)) = (arg1 + (arg1 * 4));
*(int *)(((long)arg0 + 0x10)) = ((unsigned long)((unsigned int)((arg1 * 8))) - arg1);
return (int *)arg0;
} agr198_make_i64 pass 4 lines
// glaurung: agr198_make_i64 @ 0x1220
int64_t agr198_make_i64(int32_t arg0) {
return ((((long)(arg0) * 8) - (long)(arg0)) + 5);
} agr198_make_one pass 4 lines
// glaurung: agr198_make_one @ 0x1170
unsigned int agr198_make_one(int32_t arg0) {
return (unsigned int)(((unsigned long)((unsigned int)((arg0 + (arg0 * 2)))) + 1));
} agr198_make_trio pass 4 lines
// glaurung: agr198_make_trio @ 0x11a0
unsigned __int128 agr198_make_trio(int32_t arg0) {
return ((unsigned __int128)((unsigned long)(((unsigned long)((unsigned int)((arg0 + 1))) | ((unsigned long)((unsigned int)(arg0)) << 33)))) | ((unsigned __int128)((unsigned long)((unsigned int)((arg0 * 4)))) << 64));
} agr198_one_roundtrip pass 14 lines
// glaurung: agr198_one_roundtrip @ 0x1240
int32_t agr198_one_roundtrip(int32_t * arg0, int32_t arg1) {
extern unsigned int agr198_make_one(int);
int * var0;
unsigned int var1;
if ((arg0 == 0)) {
return 0xffffffff;
}
var0 = (int *)arg0;
var1 = agr198_make_one((unsigned long)((unsigned int)(arg1)));
*(int *)((var0)) = var1;
// x86-64 epilogue: tear down frame
return (unsigned int)((var1 + (var1 * 2)));
} agr198_scalar_control pass 15 lines
// glaurung: agr198_scalar_control @ 0x13c0
int32_t agr198_scalar_control(int32_t * arg0, int32_t arg1) {
int a;
int b;
int c;
long var3;
if ((arg0 == 0)) {
return 0xffffffff;
}
*(int *)(((long)arg0)) = (arg1 + 1);
*(int *)(((long)arg0 + 0x4)) = (arg1 + arg1);
*(int *)(((long)arg0 + 0x8)) = (arg1 * 4);
var3 = (unsigned long)((unsigned int)((arg1 + (arg1 * 4))));
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var3 + (var3 * 4)))) + arg1))) + arg1))) + 1));
} agr198_trio_roundtrip pass 20 lines
// glaurung: agr198_trio_roundtrip @ 0x12a0
int32_t agr198_trio_roundtrip(int32_t * arg0, int32_t arg1) {
extern unsigned __int128 agr198_make_trio(int);
long var0;
unsigned __int128 var1;
long var2;
long var8;
if ((arg0 == 0)) {
return 0xffffffff;
}
var0 = (long)arg0;
var1 = agr198_make_trio((unsigned long)((unsigned int)(arg1)));
var2 = (unsigned long)(((unsigned __int128)(var1) >> 64));
*(int *)((var0)) = var1;
var8 = ((unsigned __int128)(var1) >> 32);
*(int *)((var0 + 0x4)) = var8;
*(int *)((var0 + 0x8)) = var2;
// x86-64 epilogue: tear down frame
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var2 + (var2 * 4)))) + var1))) + (unsigned long)((unsigned int)((var8 + (var8 * 2))))));
} gcc -O0
14/15agr198_arr2_roundtrip pass 27 lines
// glaurung: agr198_arr2_roundtrip @ 0x1561
int32_t agr198_arr2_roundtrip(int32_t * arg0, int32_t arg1) {
extern __attribute__((noreturn)) void __stack_chk_fail(void);
extern long agr198_make_arr2(int);
unsigned char local_10[8];
long local_8;
long ret;
long var12;
long var4;
// x86-64 prologue: save rbp, frame 32 bytes
local_8 = (long)(0x28);
if ((arg0 != 0)) {
var4 = agr198_make_arr2((unsigned long)((unsigned int)(arg1)));
*(long *)(&local_10[0]) = var4;
*(int *)((long)arg0) = *(int *)(&local_10[0]);
*(int *)((arg0 + 1)) = *(int *)((&local_10[0] + 4));
var12 = (unsigned long)((unsigned int)(*(int *)((&local_10[0] + 4))));
ret = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var12)) + (unsigned long)((unsigned int)(var12))))) + var12))) + (unsigned long)((unsigned int)(*(int *)(&local_10[0]))))));
} else {
ret = 0xffffffff;
}
if ((local_8 != 0x28)) {
__stack_chk_fail();
}
// x86-64 epilogue: restore rbp
return ret;
} agr198_bits_roundtrip pass 16 lines
// glaurung: agr198_bits_roundtrip @ 0x1507
__attribute__((no_stack_protector)) int32_t agr198_bits_roundtrip(int32_t * arg0, int32_t arg1) {
extern long agr198_make_bits(int);
unsigned char local_8[8];
long var1;
// x86-64 prologue: save rbp, frame 32 bytes
if ((arg0 != 0)) {
var1 = agr198_make_bits((unsigned long)((unsigned int)(arg1)));
*(long *)(&local_8[0]) = var1;
*(int *)((long)arg0) = *(long *)(&local_8[0]);
*(int *)((arg0 + 1)) = ((unsigned long)(*(long *)(&local_8[0])) >> 32);
return ((unsigned long)(*(long *)(&local_8[0])) >> 52);
} else {
return 0xffffffff;
}
} agr198_bytes3_roundtrip pass 25 lines
// glaurung: agr198_bytes3_roundtrip @ 0x13f7
__attribute__((no_stack_protector)) int32_t agr198_bytes3_roundtrip(int32_t * arg0, int32_t arg1) {
extern long agr198_make_bytes3(int);
unsigned char local_3[3];
long var1;
int var22;
int var31;
long var5;
// x86-64 prologue: save rbp, frame 32 bytes
if ((arg0 != 0)) {
var1 = agr198_make_bytes3((unsigned long)((unsigned int)(arg1)));
*(signed char *)(&local_3[0]) = var1;
*(signed char *)((&local_3[0] + 1)) = ((unsigned long)((long)((int)(var1))) >> 8);
var5 = ((unsigned long)((long)((int)(var1))) >> 16);
*(signed char *)((&local_3[0] + 2)) = ((var5 & -0xff01LL) | ((((unsigned long)(var5) >> 8) & 255) << 8));
*(int *)((long)arg0) = (unsigned char)(((unsigned int)((unsigned char)(*(char *)(&local_3[0]))) & 255));
*(int *)((arg0 + 1)) = (unsigned char)(((unsigned int)((unsigned char)(*(char *)((&local_3[0] + 1)))) & 255));
*(int *)((arg0 + 2)) = (unsigned char)(((unsigned int)((unsigned char)(*(char *)((&local_3[0] + 2)))) & 255));
var22 = (unsigned int)((unsigned char)(((unsigned int)((unsigned char)(*(char *)((&local_3[0] + 1)))) & 255)));
var31 = (unsigned int)((unsigned char)(((unsigned int)((unsigned char)(*(char *)((&local_3[0] + 2)))) & 255)));
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var31)) << 2))) + var31))) + (unsigned long)((unsigned int)(((unsigned int)((unsigned char)(((unsigned int)((unsigned char)(*(char *)(&local_3[0]))) & 255))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var22)) + (unsigned long)((unsigned int)(var22))))) + var22))))))));
} else {
return 0xffffffff;
}
} agr198_five_roundtrip pass 37 lines
// glaurung: agr198_five_roundtrip @ 0x15d9
int32_t agr198_five_roundtrip(int32_t * arg0, int32_t arg1) {
extern __attribute__((noreturn)) void __stack_chk_fail(void);
extern long agr198_make_five(char *, int);
unsigned char local_20[20];
long local_8;
long ret;
long var22;
long var30;
long var38;
long var46;
long var5;
int var50;
// x86-64 prologue: save rbp, frame 48 bytes
local_8 = (long)(0x28);
if ((arg0 != 0)) {
var5 = agr198_make_five((char *)(&local_20[0]), (unsigned long)((unsigned int)(arg1)));
*(int *)((long)arg0) = *(int *)(&local_20[0]);
*(int *)((arg0 + 1)) = *(int *)((&local_20[0] + 4));
*(int *)((arg0 + 2)) = *(int *)((&local_20[0] + 8));
*(int *)((arg0 + 3)) = *(int *)((&local_20[0] + 12));
*(int *)((arg0 + 4)) = *(int *)((&local_20[0] + 16));
var22 = (unsigned long)((unsigned int)(*(int *)((&local_20[0] + 4))));
var30 = (unsigned long)((unsigned int)(*(int *)((&local_20[0] + 8))));
var38 = (unsigned long)((unsigned int)(*(int *)((&local_20[0] + 12))));
var46 = (unsigned long)((unsigned int)(*(int *)((&local_20[0] + 16))));
var50 = ((unsigned int)(((unsigned long)((unsigned int)(var46)) << 2)) + var46);
ret = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var50)) + (unsigned long)((unsigned int)(var50))))) + var46))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(&local_20[0]))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var22)) + (unsigned long)((unsigned int)(var22))))) + var22)))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var30)) << 2))) + var30)))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var38)) << 3))) - var38)))))))));
} else {
ret = 0xffffffff;
}
if ((local_8 != 0x28)) {
__stack_chk_fail();
}
// x86-64 epilogue: restore rbp
return ret;
} agr198_i64_control pass 16 lines
// glaurung: agr198_i64_control @ 0x16a6
int32_t agr198_i64_control(int32_t * arg0, int32_t arg1) {
extern long agr198_make_i64(int);
long v;
long var1;
// x86-64 prologue: save rbp, frame 32 bytes
if ((arg0 != 0)) {
var1 = agr198_make_i64((unsigned long)((unsigned int)(arg1)));
v = var1;
*(int *)((long)arg0) = v;
*(int *)((arg0 + 1)) = ((unsigned long)(v) >> 32);
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(v)) + (unsigned long)((unsigned int)(v))))) + (unsigned long)((unsigned int)(v))));
} else {
return 0xffffffff;
}
} agr198_make_arr2 pass 17 lines
// glaurung: agr198_make_arr2 @ 0x12e0
unsigned long agr198_make_arr2(int32_t arg0) {
extern __attribute__((noreturn)) void __stack_chk_fail(void);
unsigned char local_10[8];
long local_8;
long ret;
// x86-64 prologue: save rbp, frame 32 bytes
local_8 = (long)(0x28);
*(int *)(&local_10[0]) = ((unsigned long)((unsigned int)(arg0)) + 5);
*(int *)((&local_10[0] + 4)) = ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) << 3))) - (unsigned long)((unsigned int)(arg0)));
ret = *(long *)(&local_10[0]);
if ((local_8 != 0x28)) {
__stack_chk_fail();
}
// x86-64 epilogue: restore rbp
return ret;
} agr198_make_bits pass 8 lines
// glaurung: agr198_make_bits @ 0x12ba
__attribute__((no_stack_protector)) double agr198_make_bits(int arg0) {
unsigned char local_8[8];
// x86-64 prologue: save rbp
*(double *)(&local_8[0]) = (double)((int)((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) + (unsigned long)((unsigned int)(arg0))))) + 1)))));
// x86-64 epilogue: restore rbp
return *(double *)(&local_8[0]);
} agr198_make_bytes3 pass 14 lines
// glaurung: agr198_make_bytes3 @ 0x1218
__attribute__((no_stack_protector)) unsigned int agr198_make_bytes3(int32_t arg0) {
signed char local_1;
short local_3;
unsigned char local_6[3];
// x86-64 prologue: save rbp
*(signed char *)(&local_6[0]) = ((unsigned long)((unsigned int)(arg0)) + 1);
*(signed char *)((&local_6[0] + 1)) = ((unsigned long)((unsigned int)(arg0)) + 2);
*(signed char *)((&local_6[0] + 2)) = ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) + (unsigned long)((unsigned int)(arg0))))) + (unsigned long)((unsigned int)(arg0)));
local_3 = *(short *)(&local_6[0]);
local_1 = *(char *)((&local_6[0] + 2));
// x86-64 epilogue: restore rbp
return (((unsigned int)((unsigned short)(((unsigned int)((unsigned short)(local_3)) & 0xffff))) & -0xff0001LL) | ((unsigned int)((unsigned char)(((unsigned int)((unsigned char)(local_1)) & 255))) << 16));
} agr198_make_five structural 19 lines
// glaurung: agr198_make_five @ 0x132e
__attribute__((no_stack_protector)) char * agr198_make_five(char * arg0, int arg1) {
unsigned char local_20[20];
long var24;
long var26;
// x86-64 prologue: save rbp
*(int *)(&local_20[0]) = ((unsigned long)((unsigned int)(arg1)) + 1);
*(int *)((&local_20[0] + 4)) = ((unsigned long)((unsigned int)(arg1)) + 2);
*(int *)((&local_20[0] + 8)) = ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) + (unsigned long)((unsigned int)(arg1))))) + (unsigned long)((unsigned int)(arg1)));
*(int *)((&local_20[0] + 12)) = ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) << 2))) + (unsigned long)((unsigned int)(arg1)));
*(int *)((&local_20[0] + 16)) = ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) << 3))) - (unsigned long)((unsigned int)(arg1)));
var24 = (long)arg0;
var26 = *(long *)((&local_20[0] + 8));
*(long *)((long)arg0) = *(long *)(&local_20[0]);
*(long *)((var24 + 0x8)) = var26;
*(int *)((var24 + 0x10)) = *(int *)((&local_20[0] + 16));
// x86-64 epilogue: restore rbp
return arg0;
} agr198_make_i64 pass 6 lines
// glaurung: agr198_make_i64 @ 0x1394
int64_t agr198_make_i64(int32_t arg0) {
// x86-64 prologue: save rbp
// x86-64 epilogue: restore rbp
return ((((long)(arg0) << 3) - (long)(arg0)) + 5);
} agr198_make_one pass 8 lines
// glaurung: agr198_make_one @ 0x11f9
__attribute__((no_stack_protector)) unsigned int agr198_make_one(int32_t arg0) {
unsigned char local_4[4];
// x86-64 prologue: save rbp
*(int *)(&local_4[0]) = ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) + (unsigned long)((unsigned int)(arg0))))) + (unsigned long)((unsigned int)(arg0))))) + 1);
// x86-64 epilogue: restore rbp
return (unsigned int)(*(int *)(&local_4[0]));
} agr198_make_trio pass 14 lines
// glaurung: agr198_make_trio @ 0x127b
__attribute__((no_stack_protector)) unsigned __int128 agr198_make_trio(int32_t arg0) {
unsigned char local_18[12];
int local_4;
long local_c;
// x86-64 prologue: save rbp
*(int *)(&local_18[0]) = ((unsigned long)((unsigned int)(arg0)) + 1);
*(int *)((&local_18[0] + 4)) = ((unsigned long)((unsigned int)(arg0)) + (unsigned long)((unsigned int)(arg0)));
*(int *)((&local_18[0] + 8)) = ((unsigned long)((unsigned int)(arg0)) << 2);
local_c = *(long *)(&local_18[0]);
local_4 = *(int *)((&local_18[0] + 8));
// x86-64 epilogue: restore rbp
return ((unsigned __int128)((unsigned long)(local_c)) | ((unsigned __int128)((unsigned long)((unsigned int)(local_4))) << 64));
} agr198_one_roundtrip pass 17 lines
// glaurung: agr198_one_roundtrip @ 0x13b5
__attribute__((no_stack_protector)) int32_t agr198_one_roundtrip(int32_t * arg0, int32_t arg1) {
extern unsigned int agr198_make_one(int);
unsigned char local_4[4];
unsigned int var1;
long var5;
// x86-64 prologue: save rbp, frame 32 bytes
if ((arg0 != 0)) {
var1 = agr198_make_one((unsigned long)((unsigned int)(arg1)));
*(int *)(&local_4[0]) = var1;
*(int *)((long)arg0) = *(int *)(&local_4[0]);
var5 = (unsigned long)((unsigned int)(*(int *)(&local_4[0])));
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var5)) + (unsigned long)((unsigned int)(var5))))) + var5));
} else {
return 0xffffffff;
}
} agr198_scalar_control pass 18 lines
// glaurung: agr198_scalar_control @ 0x1704
int32_t agr198_scalar_control(int32_t * arg0, int32_t arg1) {
int a;
int b;
int c;
// x86-64 prologue: save rbp
if ((arg0 != 0)) {
a = ((unsigned int)(arg1) + 1);
b = ((unsigned int)(arg1) + (unsigned int)(arg1));
c = ((unsigned long)((unsigned int)(arg1)) << 2);
*(int *)((long)arg0) = a;
*(int *)((arg0 + 1)) = b;
*(int *)((arg0 + 2)) = c;
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(c)) << 2))) + (unsigned long)((unsigned int)(c))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(b)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(b)) + (unsigned long)((unsigned int)(b)))))))) + (unsigned long)((unsigned int)(a)))))));
} else {
return 0xffffffff;
}
} agr198_trio_roundtrip pass 22 lines
// glaurung: agr198_trio_roundtrip @ 0x148e
__attribute__((no_stack_protector)) int32_t agr198_trio_roundtrip(int32_t * arg0, int32_t arg1) {
extern unsigned __int128 agr198_make_trio(int);
unsigned char local_c[12];
unsigned __int128 var1;
long var18;
long var26;
// x86-64 prologue: save rbp, frame 32 bytes
if ((arg0 != 0)) {
var1 = agr198_make_trio((unsigned long)((unsigned int)(arg1)));
*(long *)(&local_c[0]) = var1;
*(int *)((&local_c[0] + 8)) = ((unsigned __int128)(var1) >> 64);
*(int *)((long)arg0) = *(int *)(&local_c[0]);
*(int *)((arg0 + 1)) = *(int *)((&local_c[0] + 4));
*(int *)((arg0 + 2)) = *(int *)((&local_c[0] + 8));
var18 = (unsigned long)((unsigned int)(*(int *)((&local_c[0] + 4))));
var26 = (unsigned long)((unsigned int)(*(int *)((&local_c[0] + 8))));
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var26)) << 2))) + var26))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(&local_c[0]))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var18)) + (unsigned long)((unsigned int)(var18))))) + var18))))))));
} else {
return 0xffffffff;
}
}