program TestArray {
	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
		float xmm0 = 0.0
		float xmm1 = 0.0
		float xmm2 = 0.0
		float xmm3 = 0.0
		float xmm4 = 0.0
		float xmm5 = 0.0
		float xmm6 = 0.0
		float xmm7 = 0.0
		float xmm8 = 0.0
		float xmm9 = 0.0
		ptr _tmpptr0 = null
		ptr _tmpptr1 = null
		ptr _tmpptr10 = null
		ptr _tmpptr11 = null
		ptr _tmpptr12 = null
		ptr _tmpptr13 = null
		ptr _tmpptr14 = null
		ptr _tmpptr15 = null
		ptr _tmpptr16 = null
		ptr _tmpptr17 = null
		ptr _tmpptr18 = null
		ptr _tmpptr19 = null
		ptr _tmpptr2 = null
		ptr _tmpptr20 = null
		ptr _tmpptr21 = null
		ptr _tmpptr22 = null
		ptr _tmpptr23 = null
		ptr _tmpptr24 = null
		ptr _tmpptr25 = null
		ptr _tmpptr26 = null
		ptr _tmpptr27 = null
		ptr _tmpptr28 = null
		ptr _tmpptr29 = null
		ptr _tmpptr3 = null
		ptr _tmpptr30 = null
		ptr _tmpptr31 = null
		ptr _tmpptr32 = null
		ptr _tmpptr33 = null
		ptr _tmpptr34 = null
		ptr _tmpptr35 = null
		ptr _tmpptr36 = null
		ptr _tmpptr37 = null
		ptr _tmpptr38 = null
		ptr _tmpptr39 = null
		ptr _tmpptr4 = null
		ptr _tmpptr40 = null
		ptr _tmpptr41 = null
		ptr _tmpptr42 = null
		ptr _tmpptr43 = null
		ptr _tmpptr44 = null
		ptr _tmpptr45 = null
		ptr _tmpptr46 = null
		ptr _tmpptr47 = null
		ptr _tmpptr48 = null
		ptr _tmpptr5 = null
		ptr _tmpptr6 = null
		ptr _tmpptr7 = null
		ptr _tmpptr8 = null
		ptr _tmpptr9 = null
		ptr arg0 = null
		float real_const_8 = 2.5
		float real_const_9 = 3.75
		float real_const_7 = 1.25
		float real_const_6 = 6.0
		float real_const_5 = 5.0
		float real_const_3 = 3.0
		float real_const_2 = 2.0
		float real_const_1 = 1.0
		float real_const_4 = 4.0
		float real_const_0 = 9.5
		string str_0 = "Pascal"
		string str_1 = "rec.id="
		string str_2 = "rec.inner.a="
		string str_3 = "rec.inner.b[1]="
		string str_4 = "rec.grid[0][2]="
		string str_5 = "SumGrid(rec)="
		string str_6 = "arrRec[12].inner.b[2]="
		string str_7 = "arrRec[10].grid[1][3]="
		string str_8 = "DotFirstRow(mat)="
		string str_9 = "books[1].title="
		string str_10 = "books[1].ratings[5]="
		string str_11 = "outer!"
		string fmt_int = "%lld "
		string fmt_str = "%s "
		string fmt_float = "%.6f "
		string newline = "\n"
		ptr rec = null
		ptr rec_grid = null
		ptr arrRec = null
		ptr mat = null
		ptr books = null
		int total = 0
		float sumR = 0.0
		ptr InitOuter_o = null
		ptr BumpBook_b = null
		ptr SumGrid_o = null
		int SumGrid_s = 0
		int SumGrid_i = 0
		int SumGrid_j = 0
		int __funcret_SumGrid = 0
		ptr DotFirstRow_m = null
		float __funcret_DotFirstRow = 0.0
	}
	section code {
	start:
		alloc rec, 96, 1
		alloc rec_grid, 24, 2
		store rec_grid, rec, 48, 1
		alloc arrRec, 96, 3
		alloc mat, 24, 2
		alloc books, 48, 2
		mov arg0, rec
		call PROC_InitOuter
		cmp 3, 2
		jl IDX_OOB_1
		cmp 3, 4
		jg IDX_OOB_1
		jmp IDX_OK_0
	IDX_OOB_1:
		exit 1
	IDX_OK_0:
		mov rbx, 3
		sub rbx, 2
		mov rcx, 0
		mov _tmpptr0, rec
		add _tmpptr0, 48
		mov rdx, rcx
		mul rdx, 24
		mov _tmpptr1, _tmpptr0
		add _tmpptr1, rdx
		store 11, _tmpptr1, rbx, 8
		cmp 2, 2
		jl IDX_OOB_3
		cmp 2, 4
		jg IDX_OOB_3
		jmp IDX_OK_2
	IDX_OOB_3:
		exit 1
	IDX_OK_2:
		mov rbx, 2
		sub rbx, 2
		mov rcx, 1
		mov _tmpptr2, rec
		add _tmpptr2, 48
		mov rdx, rcx
		mul rdx, 24
		mov _tmpptr3, _tmpptr2
		add _tmpptr3, rdx
		store 12, _tmpptr3, rbx, 8
		mov rbx, 10
		sub rbx, 10
		mov rcx, rbx
		mul rcx, 96
		mov _tmpptr4, arrRec
		add _tmpptr4, rcx
		mov arg0, _tmpptr4
		call PROC_InitOuter
		mov rbx, 11
		sub rbx, 10
		mov rcx, rbx
		mul rcx, 96
		mov _tmpptr4, arrRec
		add _tmpptr4, rcx
		mov arg0, _tmpptr4
		call PROC_InitOuter
		mov rbx, 12
		sub rbx, 10
		mov rcx, rbx
		mul rcx, 96
		mov _tmpptr4, arrRec
		add _tmpptr4, rcx
		mov arg0, _tmpptr4
		call PROC_InitOuter
		mov xmm0, real_const_0
		cmp 2, 1
		jl IDX_OOB_5
		cmp 2, 3
		jg IDX_OOB_5
		jmp IDX_OK_4
	IDX_OOB_5:
		exit 1
	IDX_OK_4:
		mov rbx, 2
		sub rbx, 1
		mov rcx, 12
		sub rcx, 10
		mov rdx, rcx
		mul rdx, 96
		mov _tmpptr4, arrRec
		add _tmpptr4, rdx
		mov _tmpptr5, _tmpptr4
		add _tmpptr5, 16
		mov _tmpptr6, _tmpptr5
		add _tmpptr6, 8
		store xmm0, _tmpptr6, rbx, 8
		cmp 3, 2
		jl IDX_OOB_7
		cmp 3, 4
		jg IDX_OOB_7
		jmp IDX_OK_6
	IDX_OOB_7:
		exit 1
	IDX_OK_6:
		mov rbx, 3
		sub rbx, 2
		mov rcx, 1
		mov rdx, 10
		sub rdx, 10
		mov rsi, rdx
		mul rsi, 96
		mov _tmpptr7, arrRec
		add _tmpptr7, rsi
		mov _tmpptr8, _tmpptr7
		add _tmpptr8, 48
		mov rdx, rcx
		mul rdx, 24
		mov _tmpptr9, _tmpptr8
		add _tmpptr9, rdx
		store 33, _tmpptr9, rbx, 8
		mov arg0, rec
		call FUNC_SumGrid
		mov rbx, rax
		mov total, rbx
		mov xmm1, real_const_1
		mov rcx, 0
		sub rcx, 1
		cmp rcx, -1
		jl IDX_OOB_9
		cmp rcx, 1
		jg IDX_OOB_9
		jmp IDX_OK_8
	IDX_OOB_9:
		exit 1
	IDX_OK_8:
		mov rdx, rcx
		sub rdx, -1
		mov rsi, 1
		sub rsi, 1
		mov rdi, rsi
		mul rdi, 24
		mov _tmpptr10, mat
		add _tmpptr10, rdi
		store xmm1, _tmpptr10, rdx, 8
		mov xmm2, real_const_2
		cmp 0, -1
		jl IDX_OOB_11
		cmp 0, 1
		jg IDX_OOB_11
		jmp IDX_OK_10
	IDX_OOB_11:
		exit 1
	IDX_OK_10:
		mov rdx, 0
		sub rdx, -1
		mov rsi, 1
		sub rsi, 1
		mov rdi, rsi
		mul rdi, 24
		mov _tmpptr11, mat
		add _tmpptr11, rdi
		store xmm2, _tmpptr11, rdx, 8
		mov xmm3, real_const_3
		cmp 1, -1
		jl IDX_OOB_13
		cmp 1, 1
		jg IDX_OOB_13
		jmp IDX_OK_12
	IDX_OOB_13:
		exit 1
	IDX_OK_12:
		mov rdx, 1
		sub rdx, -1
		mov rsi, 1
		sub rsi, 1
		mov rdi, rsi
		mul rdi, 24
		mov _tmpptr12, mat
		add _tmpptr12, rdi
		store xmm3, _tmpptr12, rdx, 8
		mov xmm4, real_const_4
		mov rdx, 0
		sub rdx, 1
		cmp rdx, -1
		jl IDX_OOB_15
		cmp rdx, 1
		jg IDX_OOB_15
		jmp IDX_OK_14
	IDX_OOB_15:
		exit 1
	IDX_OK_14:
		mov rsi, rdx
		sub rsi, -1
		mov rdi, 2
		sub rdi, 1
		mov r8, rdi
		mul r8, 24
		mov _tmpptr13, mat
		add _tmpptr13, r8
		store xmm4, _tmpptr13, rsi, 8
		mov xmm5, real_const_5
		cmp 0, -1
		jl IDX_OOB_17
		cmp 0, 1
		jg IDX_OOB_17
		jmp IDX_OK_16
	IDX_OOB_17:
		exit 1
	IDX_OK_16:
		mov rsi, 0
		sub rsi, -1
		mov rdi, 2
		sub rdi, 1
		mov r8, rdi
		mul r8, 24
		mov _tmpptr14, mat
		add _tmpptr14, r8
		store xmm5, _tmpptr14, rsi, 8
		mov xmm6, real_const_6
		cmp 1, -1
		jl IDX_OOB_19
		cmp 1, 1
		jg IDX_OOB_19
		jmp IDX_OK_18
	IDX_OOB_19:
		exit 1
	IDX_OK_18:
		mov rsi, 1
		sub rsi, -1
		mov rdi, 2
		sub rdi, 1
		mov r8, rdi
		mul r8, 24
		mov _tmpptr15, mat
		add _tmpptr15, r8
		store xmm6, _tmpptr15, rsi, 8
		push rbx
		push rcx
		push rdx
		mov arg0, mat
		call FUNC_DotFirstRow
		pop rdx
		pop rcx
		pop rbx
		mov xmm7, xmm0
		mov sumR, xmm7
		mov rsi, 1
		sub rsi, 1
		mov rdi, rsi
		mul rdi, 48
		mov _tmpptr16, books
		add _tmpptr16, rdi
		store str_0, _tmpptr16, 0, 1
		cmp 5, 1
		jl IDX_OOB_21
		cmp 5, 5
		jg IDX_OOB_21
		jmp IDX_OK_20
	IDX_OOB_21:
		exit 1
	IDX_OK_20:
		mov rsi, 5
		sub rsi, 1
		mov rdi, 1
		sub rdi, 1
		mov r8, rdi
		mul r8, 48
		mov _tmpptr16, books
		add _tmpptr16, r8
		mov _tmpptr17, _tmpptr16
		add _tmpptr17, 8
		store 8, _tmpptr17, rsi, 8
		mov rsi, 1
		sub rsi, 1
		mov rdi, rsi
		mul rdi, 48
		mov _tmpptr18, books
		add _tmpptr18, rdi
		push rbx
		push rcx
		push rdx
		mov arg0, _tmpptr18
		call PROC_BumpBook
		pop rdx
		pop rcx
		pop rbx
		print fmt_str, str_1
		load rsi, rec, 0, 1
		print fmt_int, rsi
		print newline
		print fmt_str, str_2
		mov _tmpptr18, rec
		add _tmpptr18, 16
		load rdi, _tmpptr18, 0, 1
		print fmt_int, rdi
		print newline
		print fmt_str, str_3
		mov r8, 1
		sub r8, 1
		mov _tmpptr19, rec
		add _tmpptr19, 16
		mov _tmpptr20, _tmpptr19
		add _tmpptr20, 8
		load xmm8, _tmpptr20, r8, 8
		print fmt_float, xmm8
		print newline
		print fmt_str, str_4
		mov r8, 2
		sub r8, 2
		mov r9, 0
		mov _tmpptr21, rec
		add _tmpptr21, 48
		mov r10, r9
		mul r10, 24
		mov _tmpptr22, _tmpptr21
		add _tmpptr22, r10
		load r9, _tmpptr22, r8, 8
		print fmt_int, r9
		print newline
		print fmt_str, str_5
		print fmt_int, total
		print newline
		print fmt_str, str_6
		mov r8, 2
		sub r8, 1
		mov r9, 12
		sub r9, 10
		mov r10, r9
		mul r10, 96
		mov _tmpptr23, arrRec
		add _tmpptr23, r10
		mov _tmpptr24, _tmpptr23
		add _tmpptr24, 16
		mov _tmpptr25, _tmpptr24
		add _tmpptr25, 8
		load xmm9, _tmpptr25, r8, 8
		print fmt_float, xmm9
		print newline
		print fmt_str, str_7
		mov r8, 3
		sub r8, 2
		mov r9, 1
		mov r10, 10
		sub r10, 10
		mov r11, r10
		mul r11, 96
		mov _tmpptr26, arrRec
		add _tmpptr26, r11
		mov _tmpptr27, _tmpptr26
		add _tmpptr27, 48
		mov r10, r9
		mul r10, 24
		mov _tmpptr28, _tmpptr27
		add _tmpptr28, r10
		load r9, _tmpptr28, r8, 8
		print fmt_int, r9
		print newline
		print fmt_str, str_8
		print fmt_float, sumR
		print newline
		print fmt_str, str_9
		mov r8, 1
		sub r8, 1
		mov r9, r8
		mul r9, 48
		mov _tmpptr29, books
		add _tmpptr29, r9
		load _tmpptr30, _tmpptr29, 0, 1
		print fmt_str, _tmpptr30
		print newline
		print fmt_str, str_10
		mov r8, 5
		sub r8, 1
		mov r9, 1
		sub r9, 1
		mov r10, r9
		mul r10, 48
		mov _tmpptr30, books
		add _tmpptr30, r10
		mov _tmpptr31, _tmpptr30
		add _tmpptr31, 8
		load r9, _tmpptr31, r8, 8
		print fmt_int, r9
		print newline
		free rec_grid
		free arrRec
		free mat
		free books
		free rec
		done
	function PROC_InitOuter:
		mov InitOuter_o, arg0
		store 42, InitOuter_o, 0, 1
		store str_11, InitOuter_o, 8, 1
		mov _tmpptr32, InitOuter_o
		add _tmpptr32, 16
		store 7, _tmpptr32, 0, 1
		mov xmm0, real_const_7
		cmp 1, 1
		jl IDX_OOB_23
		cmp 1, 3
		jg IDX_OOB_23
		jmp IDX_OK_22
	IDX_OOB_23:
		exit 1
	IDX_OK_22:
		mov rbx, 1
		sub rbx, 1
		mov _tmpptr32, InitOuter_o
		add _tmpptr32, 16
		mov _tmpptr33, _tmpptr32
		add _tmpptr33, 8
		store xmm0, _tmpptr33, rbx, 8
		mov xmm1, real_const_8
		cmp 2, 1
		jl IDX_OOB_25
		cmp 2, 3
		jg IDX_OOB_25
		jmp IDX_OK_24
	IDX_OOB_25:
		exit 1
	IDX_OK_24:
		mov rbx, 2
		sub rbx, 1
		mov _tmpptr34, InitOuter_o
		add _tmpptr34, 16
		mov _tmpptr35, _tmpptr34
		add _tmpptr35, 8
		store xmm1, _tmpptr35, rbx, 8
		mov xmm2, real_const_9
		cmp 3, 1
		jl IDX_OOB_27
		cmp 3, 3
		jg IDX_OOB_27
		jmp IDX_OK_26
	IDX_OOB_27:
		exit 1
	IDX_OK_26:
		mov rbx, 3
		sub rbx, 1
		mov _tmpptr36, InitOuter_o
		add _tmpptr36, 16
		mov _tmpptr37, _tmpptr36
		add _tmpptr37, 8
		store xmm2, _tmpptr37, rbx, 8
		cmp 2, 2
		jl IDX_OOB_29
		cmp 2, 4
		jg IDX_OOB_29
		jmp IDX_OK_28
	IDX_OOB_29:
		exit 1
	IDX_OK_28:
		mov rbx, 2
		sub rbx, 2
		mov rcx, 0
		mov _tmpptr38, InitOuter_o
		add _tmpptr38, 48
		mov rdx, rcx
		mul rdx, 24
		mov _tmpptr39, _tmpptr38
		add _tmpptr39, rdx
		store 10, _tmpptr39, rbx, 8
		cmp 4, 2
		jl IDX_OOB_31
		cmp 4, 4
		jg IDX_OOB_31
		jmp IDX_OK_30
	IDX_OOB_31:
		exit 1
	IDX_OK_30:
		mov rbx, 4
		sub rbx, 2
		mov rcx, 1
		mov _tmpptr40, InitOuter_o
		add _tmpptr40, 48
		mov rdx, rcx
		mul rdx, 24
		mov _tmpptr41, _tmpptr40
		add _tmpptr41, rdx
		store 20, _tmpptr41, rbx, 8
	PROC_END_InitOuter:
		ret
	function PROC_BumpBook:
		mov BumpBook_b, arg0
		mov rbx, 5
		sub rbx, 1
		mov _tmpptr42, BumpBook_b
		add _tmpptr42, 8
		load rcx, _tmpptr42, rbx, 8
		mov rbx, rcx
		add rbx, 1
		cmp 5, 1
		jl IDX_OOB_33
		cmp 5, 5
		jg IDX_OOB_33
		jmp IDX_OK_32
	IDX_OOB_33:
		exit 1
	IDX_OK_32:
		mov rdx, 5
		sub rdx, 1
		mov _tmpptr43, BumpBook_b
		add _tmpptr43, 8
		store rbx, _tmpptr43, rdx, 8
	PROC_END_BumpBook:
		ret
	function FUNC_SumGrid:
		mov SumGrid_o, arg0
		mov SumGrid_s, 0
		mov SumGrid_i, 0
	FOR_34:
		cmp SumGrid_i, 1
		jg ENDFOR_35
		mov SumGrid_j, 2
	FOR_37:
		cmp SumGrid_j, 4
		jg ENDFOR_38
		mov rbx, SumGrid_j
		sub rbx, 2
		mov rcx, SumGrid_i
		mov _tmpptr44, SumGrid_o
		add _tmpptr44, 48
		mov rdx, rcx
		mul rdx, 24
		mov _tmpptr45, _tmpptr44
		add _tmpptr45, rdx
		load rcx, _tmpptr45, rbx, 8
		add SumGrid_s, rcx
	FOR_CONTINUE_39:
		add SumGrid_j, 1
		jmp FOR_37
	ENDFOR_38:
	FOR_CONTINUE_36:
		add SumGrid_i, 1
		jmp FOR_34
	ENDFOR_35:
		mov __funcret_SumGrid, SumGrid_s
	FUNC_END_SumGrid:
		mov rax, __funcret_SumGrid
		ret
	function FUNC_DotFirstRow:
		mov DotFirstRow_m, arg0
		mov rbx, 0
		sub rbx, 1
		mov rcx, rbx
		sub rcx, -1
		mov rdx, 1
		sub rdx, 1
		mov rsi, rdx
		mul rsi, 24
		mov _tmpptr46, DotFirstRow_m
		add _tmpptr46, rsi
		load xmm0, _tmpptr46, rcx, 8
		mov rcx, 0
		sub rcx, -1
		mov rdx, 1
		sub rdx, 1
		mov rsi, rdx
		mul rsi, 24
		mov _tmpptr47, DotFirstRow_m
		add _tmpptr47, rsi
		load xmm1, _tmpptr47, rcx, 8
		add xmm0, xmm1
		mov rcx, 1
		sub rcx, -1
		mov rdx, 1
		sub rdx, 1
		mov rsi, rdx
		mul rsi, 24
		mov _tmpptr48, DotFirstRow_m
		add _tmpptr48, rsi
		load xmm2, _tmpptr48, rcx, 8
		add xmm0, xmm2
		mov __funcret_DotFirstRow, xmm0
	FUNC_END_DotFirstRow:
		mov xmm0, __funcret_DotFirstRow
		ret
	}
}