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
	}
}