2022-11-08 09:56:22 +01:00
|
|
|
--TEST--
|
|
|
|
Simple CALL with ALLOCA
|
|
|
|
--TARGET--
|
|
|
|
aarch64
|
|
|
|
--ARGS--
|
|
|
|
-S --run
|
|
|
|
--CODE--
|
|
|
|
{
|
|
|
|
uintptr_t c_1 = 0;
|
|
|
|
bool c_2 = 0;
|
|
|
|
bool c_3 = 1;
|
|
|
|
int32_t c_4 = 42;
|
|
|
|
char h = 'h';
|
|
|
|
char i = 'i';
|
|
|
|
char sp = ' ';
|
|
|
|
char pc = '%';
|
|
|
|
char d = 'd';
|
|
|
|
char nl = '\n';
|
|
|
|
char zero = 0;
|
|
|
|
uint32_t len = 7;
|
|
|
|
uintptr_t one = 1;
|
2023-09-27 09:23:34 +02:00
|
|
|
uintptr_t c_5 = func(printf, 4);
|
2022-11-08 09:56:22 +01:00
|
|
|
l_1 = START(l_4);
|
|
|
|
uintptr_t a_0, s_0 = ALLOCA(l_1, len);
|
|
|
|
s_1 = STORE(s_0, a_0, h);
|
|
|
|
uintptr_t a_1 = ADD(a_0, one);
|
|
|
|
s_2 = STORE(s_1, a_1, i);
|
|
|
|
uintptr_t a_2 = ADD(a_1, one);
|
|
|
|
s_3 = STORE(s_2, a_2, sp);
|
|
|
|
uintptr_t a_3 = ADD(a_2, one);
|
|
|
|
s_4 = STORE(s_3, a_3, pc);
|
|
|
|
uintptr_t a_4 = ADD(a_3, one);
|
|
|
|
s_5 = STORE(s_4, a_4, d);
|
|
|
|
uintptr_t a_5 = ADD(a_4, one);
|
|
|
|
s_6 = STORE(s_5, a_5, nl);
|
|
|
|
uintptr_t a_6 = ADD(a_5, one);
|
|
|
|
s_7 = STORE(s_6, a_6, zero);
|
|
|
|
int32_t d_2, l_2 = CALL/2(s_7, c_5, a_0, c_4);
|
|
|
|
l_4 = RETURN(l_2, d_2);
|
|
|
|
}
|
|
|
|
--EXPECT--
|
2023-10-11 21:55:25 +02:00
|
|
|
main:
|
2022-11-08 09:56:22 +01:00
|
|
|
stp x29, x30, [sp, #-0x10]!
|
|
|
|
mov x29, sp
|
|
|
|
sub sp, sp, #0x10
|
|
|
|
mov x0, sp
|
|
|
|
movz w1, #0x68
|
|
|
|
strb w1, [x0]
|
|
|
|
movz w1, #0x69
|
|
|
|
strb w1, [x0, #1]
|
|
|
|
movz w1, #0x20
|
|
|
|
strb w1, [x0, #2]
|
|
|
|
movz w1, #0x25
|
|
|
|
strb w1, [x0, #3]
|
|
|
|
movz w1, #0x64
|
|
|
|
strb w1, [x0, #4]
|
|
|
|
movz w1, #0xa
|
|
|
|
strb w1, [x0, #5]
|
|
|
|
strb wzr, [x0, #6]
|
|
|
|
movz w1, #0x2a
|
2023-08-30 14:24:12 +02:00
|
|
|
bl printf
|
2022-11-08 09:56:22 +01:00
|
|
|
mov sp, x29
|
|
|
|
ldp x29, x30, [sp], #0x10
|
|
|
|
ret
|
|
|
|
|
|
|
|
hi 42
|
|
|
|
|
|
|
|
exit code = 6
|