program DynArrayTest {
section module {
}
section data {
int rax = 0
int rbx = 0
int rcx = 0
int rdx = 0
int rsi = 0
int rdi = 0
int r8 = 0
int r9 = 0
int r10 = 0
int r11 = 0
string str_0 = "Dynamic Array Test"
string str_1 = "------------------"
string str_2 = "Length after SetLength(5): "
string str_3 = "Elements: "
string str_4 = " "
string str_5 = "Length after SetLength(8): "
string str_6 = "Low: "
string str_7 = "High: "
string str_8 = "Done."
string fmt_int = "%lld "
string fmt_str = "%s "
string newline = "\n"
ptr arr = null
int arr_dynlen = 0
int i = 0
}
section code {
start:
print fmt_str, str_0
print newline
print fmt_str, str_1
print newline
realloc arr, 8, 5
mov arr_dynlen, 5
print fmt_str, str_2
mov rbx, arr_dynlen
print fmt_int, rbx
print newline
mov rcx, arr_dynlen
sub rcx, 1
mov i, 0
FOR_0:
cmp i, rcx
jg ENDFOR_1
mov rdx, i
add rdx, 1
mov rsi, rdx
mul rsi, 10
cmp i, 0
jl IDX_OOB_4
mov rdi, arr_dynlen
cmp i, rdi
jge IDX_OOB_4
jmp IDX_OK_3
IDX_OOB_4:
exit 1
IDX_OK_3:
mov rdi, i
store rsi, arr, rdi, 8
FOR_CONTINUE_2:
add i, 1
jmp FOR_0
ENDFOR_1:
print fmt_str, str_3
mov rdi, arr_dynlen
sub rdi, 1
mov i, 0
FOR_5:
cmp i, rdi
jg ENDFOR_6
mov r8, i
load r9, arr, r8, 8
print fmt_int, r9
print fmt_str, str_4
FOR_CONTINUE_7:
add i, 1
jmp FOR_5
ENDFOR_6:
print newline
realloc arr, 8, 8
mov arr_dynlen, 8
print fmt_str, str_5
mov r8, arr_dynlen
print fmt_int, r8
print newline
cmp 5, 0
jl IDX_OOB_9
mov r9, arr_dynlen
cmp 5, r9
jge IDX_OOB_9
jmp IDX_OK_8
IDX_OOB_9:
exit 1
IDX_OK_8:
mov r9, 5
store 60, arr, r9, 8
cmp 6, 0
jl IDX_OOB_11
mov r9, arr_dynlen
cmp 6, r9
jge IDX_OOB_11
jmp IDX_OK_10
IDX_OOB_11:
exit 1
IDX_OK_10:
mov r9, 6
store 70, arr, r9, 8
cmp 7, 0
jl IDX_OOB_13
mov r9, arr_dynlen
cmp 7, r9
jge IDX_OOB_13
jmp IDX_OK_12
IDX_OOB_13:
exit 1
IDX_OK_12:
mov r9, 7
store 80, arr, r9, 8
print fmt_str, str_3
mov r9, arr_dynlen
sub r9, 1
mov i, 0
FOR_14:
cmp i, r9
jg ENDFOR_15
mov r10, i
load r11, arr, r10, 8
print fmt_int, r11
print fmt_str, str_4
FOR_CONTINUE_16:
add i, 1
jmp FOR_14
ENDFOR_15:
print newline
print fmt_str, str_6
mov r9, 0
print fmt_int, r9
print newline
print fmt_str, str_7
mov r9, arr_dynlen
sub r9, 1
print fmt_int, r9
print newline
print fmt_str, str_8
print newline
free arr
done
}
}