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
float xmm10 = 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 _tmpptr49 = null
ptr _tmpptr5 = null
ptr _tmpptr50 = 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
mov _tmpptr18, rec
add _tmpptr18, 16
store 1, _tmpptr18, 0, 1
print fmt_str, str_2
mov _tmpptr18, rec
add _tmpptr18, 16
load rdi, _tmpptr18, 0, 1
print fmt_int, rdi
print newline
mov xmm8, real_const_5
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 r8, 1
sub r8, 1
mov _tmpptr19, rec
add _tmpptr19, 16
mov _tmpptr20, _tmpptr19
add _tmpptr20, 8
store xmm8, _tmpptr20, r8, 8
print fmt_str, str_3
mov r8, 1
sub r8, 1
mov _tmpptr21, rec
add _tmpptr21, 16
mov _tmpptr22, _tmpptr21
add _tmpptr22, 8
load xmm9, _tmpptr22, r8, 8
print fmt_float, xmm9
print newline
print fmt_str, str_4
mov r8, 2
sub r8, 2
mov r9, 0
mov _tmpptr23, rec
add _tmpptr23, 48
mov r10, r9
mul r10, 24
mov _tmpptr24, _tmpptr23
add _tmpptr24, r10
load r9, _tmpptr24, 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 _tmpptr25, arrRec
add _tmpptr25, r10
mov _tmpptr26, _tmpptr25
add _tmpptr26, 16
mov _tmpptr27, _tmpptr26
add _tmpptr27, 8
load xmm10, _tmpptr27, r8, 8
print fmt_float, xmm10
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 _tmpptr28, arrRec
add _tmpptr28, r11
mov _tmpptr29, _tmpptr28
add _tmpptr29, 48
mov r10, r9
mul r10, 24
mov _tmpptr30, _tmpptr29
add _tmpptr30, r10
load r9, _tmpptr30, 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 _tmpptr31, books
add _tmpptr31, r9
load _tmpptr32, _tmpptr31, 0, 1
print fmt_str, _tmpptr32
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 _tmpptr32, books
add _tmpptr32, r10
mov _tmpptr33, _tmpptr32
add _tmpptr33, 8
load r9, _tmpptr33, 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 _tmpptr34, InitOuter_o
add _tmpptr34, 16
store 7, _tmpptr34, 0, 1
mov xmm0, real_const_7
cmp 1, 1
jl IDX_OOB_25
cmp 1, 3
jg IDX_OOB_25
jmp IDX_OK_24
IDX_OOB_25:
exit 1
IDX_OK_24:
mov rbx, 1
sub rbx, 1
mov _tmpptr34, InitOuter_o
add _tmpptr34, 16
mov _tmpptr35, _tmpptr34
add _tmpptr35, 8
store xmm0, _tmpptr35, rbx, 8
mov xmm1, real_const_8
cmp 2, 1
jl IDX_OOB_27
cmp 2, 3
jg IDX_OOB_27
jmp IDX_OK_26
IDX_OOB_27:
exit 1
IDX_OK_26:
mov rbx, 2
sub rbx, 1
mov _tmpptr36, InitOuter_o
add _tmpptr36, 16
mov _tmpptr37, _tmpptr36
add _tmpptr37, 8
store xmm1, _tmpptr37, rbx, 8
mov xmm2, real_const_9
cmp 3, 1
jl IDX_OOB_29
cmp 3, 3
jg IDX_OOB_29
jmp IDX_OK_28
IDX_OOB_29:
exit 1
IDX_OK_28:
mov rbx, 3
sub rbx, 1
mov _tmpptr38, InitOuter_o
add _tmpptr38, 16
mov _tmpptr39, _tmpptr38
add _tmpptr39, 8
store xmm2, _tmpptr39, rbx, 8
cmp 2, 2
jl IDX_OOB_31
cmp 2, 4
jg IDX_OOB_31
jmp IDX_OK_30
IDX_OOB_31:
exit 1
IDX_OK_30:
mov rbx, 2
sub rbx, 2
mov rcx, 0
mov _tmpptr40, InitOuter_o
add _tmpptr40, 48
mov rdx, rcx
mul rdx, 24
mov _tmpptr41, _tmpptr40
add _tmpptr41, rdx
store 10, _tmpptr41, rbx, 8
cmp 4, 2
jl IDX_OOB_33
cmp 4, 4
jg IDX_OOB_33
jmp IDX_OK_32
IDX_OOB_33:
exit 1
IDX_OK_32:
mov rbx, 4
sub rbx, 2
mov rcx, 1
mov _tmpptr42, InitOuter_o
add _tmpptr42, 48
mov rdx, rcx
mul rdx, 24
mov _tmpptr43, _tmpptr42
add _tmpptr43, rdx
store 20, _tmpptr43, rbx, 8
PROC_END_InitOuter:
ret
function PROC_BumpBook:
mov BumpBook_b, arg0
mov rbx, 5
sub rbx, 1
mov _tmpptr44, BumpBook_b
add _tmpptr44, 8
load rcx, _tmpptr44, rbx, 8
mov rbx, rcx
add rbx, 1
cmp 5, 1
jl IDX_OOB_35
cmp 5, 5
jg IDX_OOB_35
jmp IDX_OK_34
IDX_OOB_35:
exit 1
IDX_OK_34:
mov rdx, 5
sub rdx, 1
mov _tmpptr45, BumpBook_b
add _tmpptr45, 8
store rbx, _tmpptr45, rdx, 8
PROC_END_BumpBook:
ret
function FUNC_SumGrid:
mov SumGrid_o, arg0
mov SumGrid_s, 0
mov SumGrid_i, 0
FOR_36:
cmp SumGrid_i, 1
jg ENDFOR_37
mov SumGrid_j, 2
FOR_39:
cmp SumGrid_j, 4
jg ENDFOR_40
mov rbx, SumGrid_j
sub rbx, 2
mov rcx, SumGrid_i
mov _tmpptr46, SumGrid_o
add _tmpptr46, 48
mov rdx, rcx
mul rdx, 24
mov _tmpptr47, _tmpptr46
add _tmpptr47, rdx
load rcx, _tmpptr47, rbx, 8
add SumGrid_s, rcx
FOR_CONTINUE_41:
add SumGrid_j, 1
jmp FOR_39
ENDFOR_40:
FOR_CONTINUE_38:
add SumGrid_i, 1
jmp FOR_36
ENDFOR_37:
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 _tmpptr48, DotFirstRow_m
add _tmpptr48, rsi
load xmm0, _tmpptr48, rcx, 8
mov rcx, 0
sub rcx, -1
mov rdx, 1
sub rdx, 1
mov rsi, rdx
mul rsi, 24
mov _tmpptr49, DotFirstRow_m
add _tmpptr49, rsi
load xmm1, _tmpptr49, rcx, 8
add xmm0, xmm1
mov rcx, 1
sub rcx, -1
mov rdx, 1
sub rdx, 1
mov rsi, rdx
mul rsi, 24
mov _tmpptr50, DotFirstRow_m
add _tmpptr50, rsi
load xmm2, _tmpptr50, rcx, 8
add xmm0, xmm2
mov __funcret_DotFirstRow, xmm0
FUNC_END_DotFirstRow:
mov xmm0, __funcret_DotFirstRow
ret
}
}