forked from NUDT-compiler/nudt-compiler-cpp
parent
e55ac2f623
commit
5ff41b3ccb
File diff suppressed because one or more lines are too long
@ -1,2 +0,0 @@
|
||||
./test/testdata2022/performance/floyd-2.sy
|
||||
./test/testdata2022/performance/stencil0.sy
|
||||
Binary file not shown.
@ -0,0 +1,120 @@
|
||||
declare i32 @getint()
|
||||
declare float @getfloat()
|
||||
declare i32 @getarray(i32* %arg.a)
|
||||
declare i32 @getfarray(float* %arg.a)
|
||||
declare i32 @getch()
|
||||
declare void @putint(i32 %arg.x)
|
||||
declare void @putfloat(float %arg.x)
|
||||
declare void @putarray(i32 %arg.n, i32* %arg.a)
|
||||
declare void @putfarray(i32 %arg.n, float* %arg.a)
|
||||
declare void @putch(i32 %arg.x)
|
||||
declare void @starttime()
|
||||
declare void @stoptime()
|
||||
define i32 @main() {
|
||||
entry:
|
||||
%t10 = alloca i32, i32 8
|
||||
%t19 = alloca i32, i32 8
|
||||
%t28 = alloca i32, i32 8
|
||||
%t39 = alloca i32, i32 8
|
||||
%t0 = alloca i32, i32 8
|
||||
%t1 = getelementptr inbounds i32, i32* %t0, i32 0
|
||||
store i32 1, i32* %t1
|
||||
%t2 = getelementptr inbounds i32, i32* %t0, i32 1
|
||||
store i32 2, i32* %t2
|
||||
%t3 = getelementptr inbounds i32, i32* %t0, i32 2
|
||||
store i32 3, i32* %t3
|
||||
%t4 = getelementptr inbounds i32, i32* %t0, i32 3
|
||||
store i32 4, i32* %t4
|
||||
%t5 = getelementptr inbounds i32, i32* %t0, i32 4
|
||||
store i32 0, i32* %t5
|
||||
%t6 = getelementptr inbounds i32, i32* %t0, i32 5
|
||||
store i32 0, i32* %t6
|
||||
%t7 = getelementptr inbounds i32, i32* %t0, i32 6
|
||||
store i32 7, i32* %t7
|
||||
%t8 = getelementptr inbounds i32, i32* %t0, i32 7
|
||||
store i32 0, i32* %t8
|
||||
%t9 = alloca i32
|
||||
store i32 3, i32* %t9
|
||||
%t11 = getelementptr inbounds i32, i32* %t10, i32 0
|
||||
store i32 0, i32* %t11
|
||||
%t12 = getelementptr inbounds i32, i32* %t10, i32 1
|
||||
store i32 0, i32* %t12
|
||||
%t13 = getelementptr inbounds i32, i32* %t10, i32 2
|
||||
store i32 0, i32* %t13
|
||||
%t14 = getelementptr inbounds i32, i32* %t10, i32 3
|
||||
store i32 0, i32* %t14
|
||||
%t15 = getelementptr inbounds i32, i32* %t10, i32 4
|
||||
store i32 0, i32* %t15
|
||||
%t16 = getelementptr inbounds i32, i32* %t10, i32 5
|
||||
store i32 0, i32* %t16
|
||||
%t17 = getelementptr inbounds i32, i32* %t10, i32 6
|
||||
store i32 0, i32* %t17
|
||||
%t18 = getelementptr inbounds i32, i32* %t10, i32 7
|
||||
store i32 0, i32* %t18
|
||||
%t20 = getelementptr inbounds i32, i32* %t19, i32 0
|
||||
store i32 1, i32* %t20
|
||||
%t21 = getelementptr inbounds i32, i32* %t19, i32 1
|
||||
store i32 2, i32* %t21
|
||||
%t22 = getelementptr inbounds i32, i32* %t19, i32 2
|
||||
store i32 3, i32* %t22
|
||||
%t23 = getelementptr inbounds i32, i32* %t19, i32 3
|
||||
store i32 4, i32* %t23
|
||||
%t24 = getelementptr inbounds i32, i32* %t19, i32 4
|
||||
store i32 5, i32* %t24
|
||||
%t25 = getelementptr inbounds i32, i32* %t19, i32 5
|
||||
store i32 6, i32* %t25
|
||||
%t26 = getelementptr inbounds i32, i32* %t19, i32 6
|
||||
store i32 7, i32* %t26
|
||||
%t27 = getelementptr inbounds i32, i32* %t19, i32 7
|
||||
store i32 8, i32* %t27
|
||||
%t29 = getelementptr inbounds i32, i32* %t28, i32 0
|
||||
store i32 1, i32* %t29
|
||||
%t30 = getelementptr inbounds i32, i32* %t28, i32 1
|
||||
store i32 2, i32* %t30
|
||||
%t31 = getelementptr inbounds i32, i32* %t28, i32 2
|
||||
store i32 3, i32* %t31
|
||||
%t32 = getelementptr inbounds i32, i32* %t28, i32 3
|
||||
store i32 0, i32* %t32
|
||||
%t33 = getelementptr inbounds i32, i32* %t28, i32 4
|
||||
store i32 5, i32* %t33
|
||||
%t34 = getelementptr inbounds i32, i32* %t28, i32 5
|
||||
store i32 0, i32* %t34
|
||||
%t35 = getelementptr inbounds i32, i32* %t28, i32 6
|
||||
%t36 = getelementptr inbounds i32, i32* %t0, i32 6
|
||||
%t37 = load i32, i32* %t36
|
||||
store i32 %t37, i32* %t35
|
||||
%t38 = getelementptr inbounds i32, i32* %t28, i32 7
|
||||
store i32 8, i32* %t38
|
||||
%t40 = getelementptr inbounds i32, i32* %t39, i32 0
|
||||
%t41 = getelementptr inbounds i32, i32* %t28, i32 5
|
||||
%t42 = load i32, i32* %t41
|
||||
store i32 %t42, i32* %t40
|
||||
%t43 = getelementptr inbounds i32, i32* %t39, i32 1
|
||||
%t44 = getelementptr inbounds i32, i32* %t19, i32 5
|
||||
%t45 = load i32, i32* %t44
|
||||
store i32 %t45, i32* %t43
|
||||
%t46 = getelementptr inbounds i32, i32* %t39, i32 2
|
||||
store i32 3, i32* %t46
|
||||
%t47 = getelementptr inbounds i32, i32* %t39, i32 3
|
||||
store i32 4, i32* %t47
|
||||
%t48 = getelementptr inbounds i32, i32* %t39, i32 4
|
||||
store i32 5, i32* %t48
|
||||
%t49 = getelementptr inbounds i32, i32* %t39, i32 5
|
||||
store i32 6, i32* %t49
|
||||
%t50 = getelementptr inbounds i32, i32* %t39, i32 6
|
||||
store i32 7, i32* %t50
|
||||
%t51 = getelementptr inbounds i32, i32* %t39, i32 7
|
||||
store i32 8, i32* %t51
|
||||
%t52 = getelementptr inbounds i32, i32* %t39, i32 7
|
||||
%t53 = load i32, i32* %t52
|
||||
%t54 = getelementptr inbounds i32, i32* %t39, i32 0
|
||||
%t55 = load i32, i32* %t54
|
||||
%t56 = add i32 %t53, %t55
|
||||
%t57 = getelementptr inbounds i32, i32* %t39, i32 1
|
||||
%t58 = load i32, i32* %t57
|
||||
%t59 = add i32 %t56, %t58
|
||||
%t60 = getelementptr inbounds i32, i32* %t28, i32 6
|
||||
%t61 = load i32, i32* %t60
|
||||
%t62 = add i32 %t59, %t61
|
||||
ret i32 %t62
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
IR 已生成: ./lab2_results/test_case/functional/05_arr_defn4.ll
|
||||
运行 ./lab2_results/test_case/functional/05_arr_defn4 ...
|
||||
退出码: 21
|
||||
输出匹配: ./test/test_case/functional/05_arr_defn4.out
|
||||
Binary file not shown.
@ -0,0 +1,35 @@
|
||||
@a = global i32 0
|
||||
|
||||
declare i32 @getint()
|
||||
declare float @getfloat()
|
||||
declare i32 @getarray(i32* %arg.a)
|
||||
declare i32 @getfarray(float* %arg.a)
|
||||
declare i32 @getch()
|
||||
declare void @putint(i32 %arg.x)
|
||||
declare void @putfloat(float %arg.x)
|
||||
declare void @putarray(i32 %arg.n, i32* %arg.a)
|
||||
declare void @putfarray(i32 %arg.n, float* %arg.a)
|
||||
declare void @putch(i32 %arg.x)
|
||||
declare void @starttime()
|
||||
declare void @stoptime()
|
||||
define i32 @func(i32 %arg.p) {
|
||||
entry:
|
||||
%t0 = alloca i32
|
||||
store i32 %arg.p, i32* %t0
|
||||
%t1 = load i32, i32* %t0
|
||||
%t2 = sub i32 %t1, 1
|
||||
store i32 %t2, i32* %t0
|
||||
%t3 = load i32, i32* %t0
|
||||
ret i32 %t3
|
||||
}
|
||||
define i32 @main() {
|
||||
entry:
|
||||
%t4 = alloca i32
|
||||
store i32 0, i32* %t4
|
||||
store i32 10, i32* @a
|
||||
%t5 = load i32, i32* @a
|
||||
%t6 = call i32 @func(i32 %t5)
|
||||
store i32 %t6, i32* %t4
|
||||
%t7 = load i32, i32* %t4
|
||||
ret i32 %t7
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
IR 已生成: ./lab2_results/test_case/functional/09_func_defn.ll
|
||||
运行 ./lab2_results/test_case/functional/09_func_defn ...
|
||||
退出码: 9
|
||||
输出匹配: ./test/test_case/functional/09_func_defn.out
|
||||
Binary file not shown.
@ -0,0 +1,25 @@
|
||||
declare i32 @getint()
|
||||
declare float @getfloat()
|
||||
declare i32 @getarray(i32* %arg.a)
|
||||
declare i32 @getfarray(float* %arg.a)
|
||||
declare i32 @getch()
|
||||
declare void @putint(i32 %arg.x)
|
||||
declare void @putfloat(float %arg.x)
|
||||
declare void @putarray(i32 %arg.n, i32* %arg.a)
|
||||
declare void @putfarray(i32 %arg.n, float* %arg.a)
|
||||
declare void @putch(i32 %arg.x)
|
||||
declare void @starttime()
|
||||
declare void @stoptime()
|
||||
define i32 @main() {
|
||||
entry:
|
||||
%t0 = alloca i32
|
||||
%t1 = alloca i32
|
||||
store i32 0, i32* %t0
|
||||
store i32 0, i32* %t1
|
||||
store i32 10, i32* %t0
|
||||
store i32 -1, i32* %t1
|
||||
%t2 = load i32, i32* %t0
|
||||
%t3 = load i32, i32* %t1
|
||||
%t4 = add i32 %t2, %t3
|
||||
ret i32 %t4
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
IR 已生成: ./lab2_results/test_case/functional/11_add2.ll
|
||||
运行 ./lab2_results/test_case/functional/11_add2 ...
|
||||
退出码: 9
|
||||
输出匹配: ./test/test_case/functional/11_add2.out
|
||||
Binary file not shown.
@ -0,0 +1,23 @@
|
||||
@a = global i32 10
|
||||
|
||||
declare i32 @getint()
|
||||
declare float @getfloat()
|
||||
declare i32 @getarray(i32* %arg.a)
|
||||
declare i32 @getfarray(float* %arg.a)
|
||||
declare i32 @getch()
|
||||
declare void @putint(i32 %arg.x)
|
||||
declare void @putfloat(float %arg.x)
|
||||
declare void @putarray(i32 %arg.n, i32* %arg.a)
|
||||
declare void @putfarray(i32 %arg.n, float* %arg.a)
|
||||
declare void @putch(i32 %arg.x)
|
||||
declare void @starttime()
|
||||
declare void @stoptime()
|
||||
define i32 @main() {
|
||||
entry:
|
||||
%t0 = alloca i32
|
||||
store i32 0, i32* %t0
|
||||
store i32 2, i32* %t0
|
||||
%t1 = load i32, i32* %t0
|
||||
%t2 = sub i32 %t1, 10
|
||||
ret i32 %t2
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
IR 已生成: ./lab2_results/test_case/functional/13_sub2.ll
|
||||
运行 ./lab2_results/test_case/functional/13_sub2 ...
|
||||
退出码: 248
|
||||
输出匹配: ./test/test_case/functional/13_sub2.out
|
||||
Binary file not shown.
@ -0,0 +1,235 @@
|
||||
@V = global i32 4
|
||||
@space = global i32 32
|
||||
@LF = global i32 10
|
||||
|
||||
declare i32 @getint()
|
||||
declare float @getfloat()
|
||||
declare i32 @getarray(i32* %arg.a)
|
||||
declare i32 @getfarray(float* %arg.a)
|
||||
declare i32 @getch()
|
||||
declare void @putint(i32 %arg.x)
|
||||
declare void @putfloat(float %arg.x)
|
||||
declare void @putarray(i32 %arg.n, i32* %arg.a)
|
||||
declare void @putfarray(i32 %arg.n, float* %arg.a)
|
||||
declare void @putch(i32 %arg.x)
|
||||
declare void @starttime()
|
||||
declare void @stoptime()
|
||||
define void @printSolution(i32* %arg.color) {
|
||||
entry:
|
||||
%t0 = alloca i32
|
||||
store i32 0, i32* %t0
|
||||
br label %while.cond.1
|
||||
while.cond.1:
|
||||
%t1 = load i32, i32* %t0
|
||||
%t2 = icmp slt i32 %t1, 4
|
||||
%t3 = zext i1 %t2 to i32
|
||||
%t4 = icmp ne i32 %t3, 0
|
||||
br i1 %t4, label %while.body.2, label %while.end.3
|
||||
while.body.2:
|
||||
%t5 = load i32, i32* %t0
|
||||
%t6 = getelementptr inbounds i32, i32* %arg.color, i32 %t5
|
||||
%t7 = load i32, i32* %t6
|
||||
call void @putint(i32 %t7)
|
||||
call void @putch(i32 32)
|
||||
%t10 = load i32, i32* %t0
|
||||
%t11 = add i32 %t10, 1
|
||||
store i32 %t11, i32* %t0
|
||||
br label %while.cond.1
|
||||
while.end.3:
|
||||
call void @putch(i32 10)
|
||||
ret void
|
||||
}
|
||||
define void @printMessage() {
|
||||
entry:
|
||||
call void @putch(i32 78)
|
||||
call void @putch(i32 111)
|
||||
call void @putch(i32 116)
|
||||
call void @putch(i32 32)
|
||||
call void @putch(i32 101)
|
||||
call void @putch(i32 120)
|
||||
call void @putch(i32 105)
|
||||
call void @putch(i32 115)
|
||||
call void @putch(i32 116)
|
||||
ret void
|
||||
}
|
||||
define i32 @isSafe(i32* %arg.graph, i32* %arg.color) {
|
||||
entry:
|
||||
%t22 = alloca i32
|
||||
%t27 = alloca i32
|
||||
store i32 0, i32* %t22
|
||||
br label %while.cond.4
|
||||
while.cond.4:
|
||||
%t23 = load i32, i32* %t22
|
||||
%t24 = icmp slt i32 %t23, 4
|
||||
%t25 = zext i1 %t24 to i32
|
||||
%t26 = icmp ne i32 %t25, 0
|
||||
br i1 %t26, label %while.body.5, label %while.end.6
|
||||
while.body.5:
|
||||
%t28 = load i32, i32* %t22
|
||||
%t29 = add i32 %t28, 1
|
||||
store i32 %t29, i32* %t27
|
||||
br label %while.cond.7
|
||||
while.end.6:
|
||||
ret i32 1
|
||||
while.cond.7:
|
||||
%t30 = load i32, i32* %t27
|
||||
%t31 = icmp slt i32 %t30, 4
|
||||
%t32 = zext i1 %t31 to i32
|
||||
%t33 = icmp ne i32 %t32, 0
|
||||
br i1 %t33, label %while.body.8, label %while.end.9
|
||||
while.body.8:
|
||||
%t34 = load i32, i32* %t22
|
||||
%t35 = load i32, i32* %t27
|
||||
%t36 = mul i32 %t34, 4
|
||||
%t37 = add i32 %t36, %t35
|
||||
%t38 = getelementptr inbounds i32, i32* %arg.graph, i32 %t37
|
||||
%t39 = load i32, i32* %t38
|
||||
%t40 = icmp ne i32 %t39, 0
|
||||
br i1 %t40, label %land.rhs.12, label %if.end.11
|
||||
while.end.9:
|
||||
%t52 = load i32, i32* %t22
|
||||
%t53 = add i32 %t52, 1
|
||||
store i32 %t53, i32* %t22
|
||||
br label %while.cond.4
|
||||
if.then.10:
|
||||
ret i32 0
|
||||
if.end.11:
|
||||
%t50 = load i32, i32* %t27
|
||||
%t51 = add i32 %t50, 1
|
||||
store i32 %t51, i32* %t27
|
||||
br label %while.cond.7
|
||||
land.rhs.12:
|
||||
%t41 = load i32, i32* %t27
|
||||
%t42 = getelementptr inbounds i32, i32* %arg.color, i32 %t41
|
||||
%t43 = load i32, i32* %t42
|
||||
%t44 = load i32, i32* %t22
|
||||
%t45 = getelementptr inbounds i32, i32* %arg.color, i32 %t44
|
||||
%t46 = load i32, i32* %t45
|
||||
%t47 = icmp eq i32 %t43, %t46
|
||||
%t48 = zext i1 %t47 to i32
|
||||
%t49 = icmp ne i32 %t48, 0
|
||||
br i1 %t49, label %if.then.10, label %if.end.11
|
||||
}
|
||||
define i32 @graphColoring(i32* %arg.graph, i32 %arg.m, i32 %arg.i, i32* %arg.color) {
|
||||
entry:
|
||||
%t63 = alloca i32
|
||||
%t54 = alloca i32
|
||||
store i32 %arg.m, i32* %t54
|
||||
%t55 = alloca i32
|
||||
store i32 %arg.i, i32* %t55
|
||||
%t56 = load i32, i32* %t55
|
||||
%t57 = icmp eq i32 %t56, 4
|
||||
%t58 = zext i1 %t57 to i32
|
||||
%t59 = icmp ne i32 %t58, 0
|
||||
br i1 %t59, label %if.then.13, label %if.end.14
|
||||
if.then.13:
|
||||
%t60 = call i32 @isSafe(i32* %arg.graph, i32* %arg.color)
|
||||
%t61 = icmp ne i32 %t60, 0
|
||||
br i1 %t61, label %if.then.15, label %if.end.16
|
||||
if.end.14:
|
||||
store i32 1, i32* %t63
|
||||
br label %while.cond.17
|
||||
if.then.15:
|
||||
call void @printSolution(i32* %arg.color)
|
||||
ret i32 1
|
||||
if.end.16:
|
||||
ret i32 0
|
||||
while.cond.17:
|
||||
%t64 = load i32, i32* %t63
|
||||
%t65 = load i32, i32* %t54
|
||||
%t66 = icmp sle i32 %t64, %t65
|
||||
%t67 = zext i1 %t66 to i32
|
||||
%t68 = icmp ne i32 %t67, 0
|
||||
br i1 %t68, label %while.body.18, label %while.end.19
|
||||
while.body.18:
|
||||
%t69 = load i32, i32* %t55
|
||||
%t70 = getelementptr inbounds i32, i32* %arg.color, i32 %t69
|
||||
%t71 = load i32, i32* %t63
|
||||
store i32 %t71, i32* %t70
|
||||
%t72 = load i32, i32* %t54
|
||||
%t73 = load i32, i32* %t55
|
||||
%t74 = add i32 %t73, 1
|
||||
%t75 = call i32 @graphColoring(i32* %arg.graph, i32 %t72, i32 %t74, i32* %arg.color)
|
||||
%t76 = icmp ne i32 %t75, 0
|
||||
br i1 %t76, label %if.then.20, label %if.end.21
|
||||
while.end.19:
|
||||
ret i32 0
|
||||
if.then.20:
|
||||
ret i32 1
|
||||
if.end.21:
|
||||
%t77 = load i32, i32* %t55
|
||||
%t78 = getelementptr inbounds i32, i32* %arg.color, i32 %t77
|
||||
store i32 0, i32* %t78
|
||||
%t79 = load i32, i32* %t63
|
||||
%t80 = add i32 %t79, 1
|
||||
store i32 %t80, i32* %t63
|
||||
br label %while.cond.17
|
||||
}
|
||||
define i32 @main() {
|
||||
entry:
|
||||
%t81 = alloca i32, i32 16
|
||||
%t98 = alloca i32
|
||||
%t99 = alloca i32, i32 4
|
||||
%t100 = alloca i32
|
||||
%t82 = getelementptr inbounds i32, i32* %t81, i32 0
|
||||
store i32 0, i32* %t82
|
||||
%t83 = getelementptr inbounds i32, i32* %t81, i32 1
|
||||
store i32 1, i32* %t83
|
||||
%t84 = getelementptr inbounds i32, i32* %t81, i32 2
|
||||
store i32 1, i32* %t84
|
||||
%t85 = getelementptr inbounds i32, i32* %t81, i32 3
|
||||
store i32 1, i32* %t85
|
||||
%t86 = getelementptr inbounds i32, i32* %t81, i32 4
|
||||
store i32 1, i32* %t86
|
||||
%t87 = getelementptr inbounds i32, i32* %t81, i32 5
|
||||
store i32 0, i32* %t87
|
||||
%t88 = getelementptr inbounds i32, i32* %t81, i32 6
|
||||
store i32 1, i32* %t88
|
||||
%t89 = getelementptr inbounds i32, i32* %t81, i32 7
|
||||
store i32 0, i32* %t89
|
||||
%t90 = getelementptr inbounds i32, i32* %t81, i32 8
|
||||
store i32 1, i32* %t90
|
||||
%t91 = getelementptr inbounds i32, i32* %t81, i32 9
|
||||
store i32 1, i32* %t91
|
||||
%t92 = getelementptr inbounds i32, i32* %t81, i32 10
|
||||
store i32 0, i32* %t92
|
||||
%t93 = getelementptr inbounds i32, i32* %t81, i32 11
|
||||
store i32 1, i32* %t93
|
||||
%t94 = getelementptr inbounds i32, i32* %t81, i32 12
|
||||
store i32 1, i32* %t94
|
||||
%t95 = getelementptr inbounds i32, i32* %t81, i32 13
|
||||
store i32 0, i32* %t95
|
||||
%t96 = getelementptr inbounds i32, i32* %t81, i32 14
|
||||
store i32 1, i32* %t96
|
||||
%t97 = getelementptr inbounds i32, i32* %t81, i32 15
|
||||
store i32 0, i32* %t97
|
||||
store i32 3, i32* %t98
|
||||
store i32 0, i32* %t100
|
||||
br label %while.cond.22
|
||||
while.cond.22:
|
||||
%t101 = load i32, i32* %t100
|
||||
%t102 = icmp slt i32 %t101, 4
|
||||
%t103 = zext i1 %t102 to i32
|
||||
%t104 = icmp ne i32 %t103, 0
|
||||
br i1 %t104, label %while.body.23, label %while.end.24
|
||||
while.body.23:
|
||||
%t105 = load i32, i32* %t100
|
||||
%t106 = getelementptr inbounds i32, i32* %t99, i32 %t105
|
||||
store i32 0, i32* %t106
|
||||
%t107 = load i32, i32* %t100
|
||||
%t108 = add i32 %t107, 1
|
||||
store i32 %t108, i32* %t100
|
||||
br label %while.cond.22
|
||||
while.end.24:
|
||||
%t109 = load i32, i32* %t98
|
||||
%t110 = call i32 @graphColoring(i32* %t81, i32 %t109, i32 0, i32* %t99)
|
||||
%t111 = icmp eq i32 %t110, 0
|
||||
%t112 = zext i1 %t111 to i32
|
||||
%t113 = icmp ne i32 %t112, 0
|
||||
br i1 %t113, label %if.then.25, label %if.end.26
|
||||
if.then.25:
|
||||
call void @printMessage()
|
||||
br label %if.end.26
|
||||
if.end.26:
|
||||
ret i32 0
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
1 2 3 2
|
||||
@ -0,0 +1,5 @@
|
||||
IR 已生成: ./lab2_results/test_case/functional/15_graph_coloring.ll
|
||||
运行 ./lab2_results/test_case/functional/15_graph_coloring ...
|
||||
1 2 3 2
|
||||
退出码: 0
|
||||
输出匹配: ./test/test_case/functional/15_graph_coloring.out
|
||||
Binary file not shown.
@ -0,0 +1,229 @@
|
||||
@MAX_SIZE = global i32 100
|
||||
@a = global [10000 x i32] zeroinitializer
|
||||
@b = global [10000 x i32] zeroinitializer
|
||||
@res = global [10000 x i32] zeroinitializer
|
||||
@n1 = global i32 0
|
||||
@m1 = global i32 0
|
||||
@n2 = global i32 0
|
||||
@m2 = global i32 0
|
||||
|
||||
declare i32 @getint()
|
||||
declare float @getfloat()
|
||||
declare i32 @getarray(i32* %arg.a)
|
||||
declare i32 @getfarray(float* %arg.a)
|
||||
declare i32 @getch()
|
||||
declare void @putint(i32 %arg.x)
|
||||
declare void @putfloat(float %arg.x)
|
||||
declare void @putarray(i32 %arg.n, i32* %arg.a)
|
||||
declare void @putfarray(i32 %arg.n, float* %arg.a)
|
||||
declare void @putch(i32 %arg.x)
|
||||
declare void @starttime()
|
||||
declare void @stoptime()
|
||||
define void @matrix_multiply() {
|
||||
entry:
|
||||
%t0 = alloca i32
|
||||
%t6 = alloca i32
|
||||
%t12 = alloca i32
|
||||
store i32 0, i32* %t0
|
||||
br label %while.cond.1
|
||||
while.cond.1:
|
||||
%t1 = load i32, i32* %t0
|
||||
%t2 = load i32, i32* @m1
|
||||
%t3 = icmp slt i32 %t1, %t2
|
||||
%t4 = zext i1 %t3 to i32
|
||||
%t5 = icmp ne i32 %t4, 0
|
||||
br i1 %t5, label %while.body.2, label %while.end.3
|
||||
while.body.2:
|
||||
store i32 0, i32* %t6
|
||||
br label %while.cond.4
|
||||
while.end.3:
|
||||
ret void
|
||||
while.cond.4:
|
||||
%t7 = load i32, i32* %t6
|
||||
%t8 = load i32, i32* @n2
|
||||
%t9 = icmp slt i32 %t7, %t8
|
||||
%t10 = zext i1 %t9 to i32
|
||||
%t11 = icmp ne i32 %t10, 0
|
||||
br i1 %t11, label %while.body.5, label %while.end.6
|
||||
while.body.5:
|
||||
store i32 0, i32* %t12
|
||||
br label %while.cond.7
|
||||
while.end.6:
|
||||
%t47 = load i32, i32* %t0
|
||||
%t48 = add i32 %t47, 1
|
||||
store i32 %t48, i32* %t0
|
||||
br label %while.cond.1
|
||||
while.cond.7:
|
||||
%t13 = load i32, i32* %t12
|
||||
%t14 = load i32, i32* @n1
|
||||
%t15 = icmp slt i32 %t13, %t14
|
||||
%t16 = zext i1 %t15 to i32
|
||||
%t17 = icmp ne i32 %t16, 0
|
||||
br i1 %t17, label %while.body.8, label %while.end.9
|
||||
while.body.8:
|
||||
%t18 = load i32, i32* %t0
|
||||
%t19 = load i32, i32* %t6
|
||||
%t20 = mul i32 %t18, 100
|
||||
%t21 = add i32 %t20, %t19
|
||||
%t22 = getelementptr inbounds [10000 x i32], [10000 x i32]* @res, i32 0, i32 %t21
|
||||
%t23 = load i32, i32* %t0
|
||||
%t24 = load i32, i32* %t6
|
||||
%t25 = mul i32 %t23, 100
|
||||
%t26 = add i32 %t25, %t24
|
||||
%t27 = getelementptr inbounds [10000 x i32], [10000 x i32]* @res, i32 0, i32 %t26
|
||||
%t28 = load i32, i32* %t27
|
||||
%t29 = load i32, i32* %t0
|
||||
%t30 = load i32, i32* %t12
|
||||
%t31 = mul i32 %t29, 100
|
||||
%t32 = add i32 %t31, %t30
|
||||
%t33 = getelementptr inbounds [10000 x i32], [10000 x i32]* @a, i32 0, i32 %t32
|
||||
%t34 = load i32, i32* %t33
|
||||
%t35 = load i32, i32* %t12
|
||||
%t36 = load i32, i32* %t6
|
||||
%t37 = mul i32 %t35, 100
|
||||
%t38 = add i32 %t37, %t36
|
||||
%t39 = getelementptr inbounds [10000 x i32], [10000 x i32]* @b, i32 0, i32 %t38
|
||||
%t40 = load i32, i32* %t39
|
||||
%t41 = mul i32 %t34, %t40
|
||||
%t42 = add i32 %t28, %t41
|
||||
store i32 %t42, i32* %t22
|
||||
%t43 = load i32, i32* %t12
|
||||
%t44 = add i32 %t43, 1
|
||||
store i32 %t44, i32* %t12
|
||||
br label %while.cond.7
|
||||
while.end.9:
|
||||
%t45 = load i32, i32* %t6
|
||||
%t46 = add i32 %t45, 1
|
||||
store i32 %t46, i32* %t6
|
||||
br label %while.cond.4
|
||||
}
|
||||
define i32 @main() {
|
||||
entry:
|
||||
%t49 = alloca i32
|
||||
%t50 = alloca i32
|
||||
store i32 0, i32* %t49
|
||||
store i32 0, i32* %t50
|
||||
%t51 = call i32 @getint()
|
||||
store i32 %t51, i32* @m1
|
||||
%t52 = call i32 @getint()
|
||||
store i32 %t52, i32* @n1
|
||||
store i32 0, i32* %t49
|
||||
br label %while.cond.10
|
||||
while.cond.10:
|
||||
%t53 = load i32, i32* %t49
|
||||
%t54 = load i32, i32* @m1
|
||||
%t55 = icmp slt i32 %t53, %t54
|
||||
%t56 = zext i1 %t55 to i32
|
||||
%t57 = icmp ne i32 %t56, 0
|
||||
br i1 %t57, label %while.body.11, label %while.end.12
|
||||
while.body.11:
|
||||
store i32 0, i32* %t50
|
||||
br label %while.cond.13
|
||||
while.end.12:
|
||||
%t73 = call i32 @getint()
|
||||
store i32 %t73, i32* @m2
|
||||
%t74 = call i32 @getint()
|
||||
store i32 %t74, i32* @n2
|
||||
store i32 0, i32* %t49
|
||||
br label %while.cond.16
|
||||
while.cond.13:
|
||||
%t58 = load i32, i32* %t50
|
||||
%t59 = load i32, i32* @n1
|
||||
%t60 = icmp slt i32 %t58, %t59
|
||||
%t61 = zext i1 %t60 to i32
|
||||
%t62 = icmp ne i32 %t61, 0
|
||||
br i1 %t62, label %while.body.14, label %while.end.15
|
||||
while.body.14:
|
||||
%t63 = load i32, i32* %t49
|
||||
%t64 = load i32, i32* %t50
|
||||
%t65 = mul i32 %t63, 100
|
||||
%t66 = add i32 %t65, %t64
|
||||
%t67 = getelementptr inbounds [10000 x i32], [10000 x i32]* @a, i32 0, i32 %t66
|
||||
%t68 = call i32 @getint()
|
||||
store i32 %t68, i32* %t67
|
||||
%t69 = load i32, i32* %t50
|
||||
%t70 = add i32 %t69, 1
|
||||
store i32 %t70, i32* %t50
|
||||
br label %while.cond.13
|
||||
while.end.15:
|
||||
%t71 = load i32, i32* %t49
|
||||
%t72 = add i32 %t71, 1
|
||||
store i32 %t72, i32* %t49
|
||||
br label %while.cond.10
|
||||
while.cond.16:
|
||||
%t75 = load i32, i32* %t49
|
||||
%t76 = load i32, i32* @m2
|
||||
%t77 = icmp slt i32 %t75, %t76
|
||||
%t78 = zext i1 %t77 to i32
|
||||
%t79 = icmp ne i32 %t78, 0
|
||||
br i1 %t79, label %while.body.17, label %while.end.18
|
||||
while.body.17:
|
||||
store i32 0, i32* %t50
|
||||
br label %while.cond.19
|
||||
while.end.18:
|
||||
call void @matrix_multiply()
|
||||
store i32 0, i32* %t49
|
||||
br label %while.cond.22
|
||||
while.cond.19:
|
||||
%t80 = load i32, i32* %t50
|
||||
%t81 = load i32, i32* @n2
|
||||
%t82 = icmp slt i32 %t80, %t81
|
||||
%t83 = zext i1 %t82 to i32
|
||||
%t84 = icmp ne i32 %t83, 0
|
||||
br i1 %t84, label %while.body.20, label %while.end.21
|
||||
while.body.20:
|
||||
%t85 = load i32, i32* %t49
|
||||
%t86 = load i32, i32* %t50
|
||||
%t87 = mul i32 %t85, 100
|
||||
%t88 = add i32 %t87, %t86
|
||||
%t89 = getelementptr inbounds [10000 x i32], [10000 x i32]* @b, i32 0, i32 %t88
|
||||
%t90 = call i32 @getint()
|
||||
store i32 %t90, i32* %t89
|
||||
%t91 = load i32, i32* %t50
|
||||
%t92 = add i32 %t91, 1
|
||||
store i32 %t92, i32* %t50
|
||||
br label %while.cond.19
|
||||
while.end.21:
|
||||
%t93 = load i32, i32* %t49
|
||||
%t94 = add i32 %t93, 1
|
||||
store i32 %t94, i32* %t49
|
||||
br label %while.cond.16
|
||||
while.cond.22:
|
||||
%t96 = load i32, i32* %t49
|
||||
%t97 = load i32, i32* @m1
|
||||
%t98 = icmp slt i32 %t96, %t97
|
||||
%t99 = zext i1 %t98 to i32
|
||||
%t100 = icmp ne i32 %t99, 0
|
||||
br i1 %t100, label %while.body.23, label %while.end.24
|
||||
while.body.23:
|
||||
store i32 0, i32* %t50
|
||||
br label %while.cond.25
|
||||
while.end.24:
|
||||
ret i32 0
|
||||
while.cond.25:
|
||||
%t101 = load i32, i32* %t50
|
||||
%t102 = load i32, i32* @n2
|
||||
%t103 = icmp slt i32 %t101, %t102
|
||||
%t104 = zext i1 %t103 to i32
|
||||
%t105 = icmp ne i32 %t104, 0
|
||||
br i1 %t105, label %while.body.26, label %while.end.27
|
||||
while.body.26:
|
||||
%t106 = load i32, i32* %t49
|
||||
%t107 = load i32, i32* %t50
|
||||
%t108 = mul i32 %t106, 100
|
||||
%t109 = add i32 %t108, %t107
|
||||
%t110 = getelementptr inbounds [10000 x i32], [10000 x i32]* @res, i32 0, i32 %t109
|
||||
%t111 = load i32, i32* %t110
|
||||
call void @putint(i32 %t111)
|
||||
call void @putch(i32 32)
|
||||
%t114 = load i32, i32* %t50
|
||||
%t115 = add i32 %t114, 1
|
||||
store i32 %t115, i32* %t50
|
||||
br label %while.cond.25
|
||||
while.end.27:
|
||||
call void @putch(i32 10)
|
||||
%t117 = load i32, i32* %t49
|
||||
%t118 = add i32 %t117, 1
|
||||
store i32 %t118, i32* %t49
|
||||
br label %while.cond.22
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
110 70 30
|
||||
278 174 70
|
||||
446 278 110
|
||||
614 382 150
|
||||
@ -0,0 +1,8 @@
|
||||
IR 已生成: ./lab2_results/test_case/functional/22_matrix_multiply.ll
|
||||
运行 ./lab2_results/test_case/functional/22_matrix_multiply ...
|
||||
110 70 30
|
||||
278 174 70
|
||||
446 278 110
|
||||
614 382 150
|
||||
退出码: 0
|
||||
输出匹配: ./test/test_case/functional/22_matrix_multiply.out
|
||||
Binary file not shown.
@ -0,0 +1,134 @@
|
||||
declare i32 @getint()
|
||||
declare float @getfloat()
|
||||
declare i32 @getarray(i32* %arg.a)
|
||||
declare i32 @getfarray(float* %arg.a)
|
||||
declare i32 @getch()
|
||||
declare void @putint(i32 %arg.x)
|
||||
declare void @putfloat(float %arg.x)
|
||||
declare void @putarray(i32 %arg.n, i32* %arg.a)
|
||||
declare void @putfarray(i32 %arg.n, float* %arg.a)
|
||||
declare void @putch(i32 %arg.x)
|
||||
declare void @starttime()
|
||||
declare void @stoptime()
|
||||
define i32 @main() {
|
||||
entry:
|
||||
%t2 = alloca i32
|
||||
%t3 = alloca i32
|
||||
%t6 = alloca i32
|
||||
%t18 = alloca i32
|
||||
%t34 = alloca i32
|
||||
%t49 = alloca i32
|
||||
%t67 = alloca i32
|
||||
call void @putch(i32 97)
|
||||
call void @putch(i32 10)
|
||||
store i32 1, i32* %t2
|
||||
store i32 0, i32* %t3
|
||||
%t4 = load i32, i32* %t2
|
||||
%t5 = add i32 %t4, 2
|
||||
store i32 %t5, i32* %t2
|
||||
%t7 = load i32, i32* %t2
|
||||
%t8 = add i32 %t7, 3
|
||||
store i32 %t8, i32* %t6
|
||||
%t9 = load i32, i32* %t6
|
||||
%t10 = add i32 %t9, 4
|
||||
store i32 %t10, i32* %t6
|
||||
%t11 = load i32, i32* %t3
|
||||
%t12 = load i32, i32* %t2
|
||||
%t13 = add i32 %t11, %t12
|
||||
%t14 = load i32, i32* %t6
|
||||
%t15 = add i32 %t13, %t14
|
||||
store i32 %t15, i32* %t3
|
||||
%t16 = load i32, i32* %t6
|
||||
%t17 = add i32 %t16, 5
|
||||
store i32 %t17, i32* %t6
|
||||
%t19 = load i32, i32* %t6
|
||||
%t20 = add i32 %t19, 6
|
||||
store i32 %t20, i32* %t18
|
||||
%t21 = load i32, i32* %t2
|
||||
%t22 = load i32, i32* %t18
|
||||
%t23 = add i32 %t21, %t22
|
||||
store i32 %t23, i32* %t2
|
||||
%t24 = load i32, i32* %t3
|
||||
%t25 = load i32, i32* %t2
|
||||
%t26 = add i32 %t24, %t25
|
||||
%t27 = load i32, i32* %t6
|
||||
%t28 = add i32 %t26, %t27
|
||||
%t29 = load i32, i32* %t18
|
||||
%t30 = add i32 %t28, %t29
|
||||
store i32 %t30, i32* %t3
|
||||
%t31 = load i32, i32* %t6
|
||||
%t32 = load i32, i32* %t2
|
||||
%t33 = add i32 %t31, %t32
|
||||
store i32 %t33, i32* %t6
|
||||
%t35 = load i32, i32* %t18
|
||||
%t36 = add i32 %t35, 7
|
||||
store i32 %t36, i32* %t34
|
||||
%t37 = load i32, i32* %t34
|
||||
%t38 = add i32 %t37, 8
|
||||
store i32 %t38, i32* %t34
|
||||
%t39 = load i32, i32* %t3
|
||||
%t40 = load i32, i32* %t34
|
||||
%t41 = add i32 %t39, %t40
|
||||
%t42 = load i32, i32* %t6
|
||||
%t43 = add i32 %t41, %t42
|
||||
%t44 = load i32, i32* %t18
|
||||
%t45 = add i32 %t43, %t44
|
||||
store i32 %t45, i32* %t3
|
||||
%t46 = load i32, i32* %t6
|
||||
%t47 = load i32, i32* %t34
|
||||
%t48 = add i32 %t46, %t47
|
||||
store i32 %t48, i32* %t6
|
||||
%t50 = load i32, i32* %t18
|
||||
%t51 = add i32 %t50, 9
|
||||
store i32 %t51, i32* %t49
|
||||
%t52 = load i32, i32* %t34
|
||||
%t53 = add i32 %t52, 10
|
||||
store i32 %t53, i32* %t34
|
||||
%t54 = alloca i32
|
||||
store i32 11, i32* %t54
|
||||
%t55 = load i32, i32* %t49
|
||||
%t56 = add i32 %t55, 12
|
||||
store i32 %t56, i32* %t49
|
||||
%t57 = load i32, i32* %t3
|
||||
%t58 = load i32, i32* %t54
|
||||
%t59 = add i32 %t57, %t58
|
||||
%t60 = load i32, i32* %t49
|
||||
%t61 = add i32 %t59, %t60
|
||||
%t62 = load i32, i32* %t18
|
||||
%t63 = add i32 %t61, %t62
|
||||
store i32 %t63, i32* %t3
|
||||
%t64 = load i32, i32* %t18
|
||||
%t65 = load i32, i32* %t49
|
||||
%t66 = add i32 %t64, %t65
|
||||
store i32 %t66, i32* %t18
|
||||
%t68 = load i32, i32* %t49
|
||||
%t69 = add i32 %t68, 13
|
||||
store i32 %t69, i32* %t67
|
||||
%t70 = load i32, i32* %t67
|
||||
%t71 = load i32, i32* %t54
|
||||
%t72 = add i32 %t70, %t71
|
||||
store i32 %t72, i32* %t67
|
||||
%t73 = load i32, i32* %t3
|
||||
%t74 = load i32, i32* %t54
|
||||
%t75 = add i32 %t73, %t74
|
||||
%t76 = load i32, i32* %t49
|
||||
%t77 = add i32 %t75, %t76
|
||||
%t78 = load i32, i32* %t67
|
||||
%t79 = add i32 %t77, %t78
|
||||
store i32 %t79, i32* %t3
|
||||
%t80 = load i32, i32* %t3
|
||||
%t81 = load i32, i32* %t18
|
||||
%t82 = sub i32 %t80, %t81
|
||||
store i32 %t82, i32* %t3
|
||||
%t83 = load i32, i32* %t3
|
||||
%t84 = load i32, i32* %t6
|
||||
%t85 = sub i32 %t83, %t84
|
||||
store i32 %t85, i32* %t3
|
||||
%t86 = load i32, i32* %t3
|
||||
%t87 = load i32, i32* %t2
|
||||
%t88 = sub i32 %t86, %t87
|
||||
store i32 %t88, i32* %t3
|
||||
%t89 = load i32, i32* %t3
|
||||
%t90 = srem i32 %t89, 77
|
||||
ret i32 %t90
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
a
|
||||
@ -0,0 +1,5 @@
|
||||
IR 已生成: ./lab2_results/test_case/functional/25_scope3.ll
|
||||
运行 ./lab2_results/test_case/functional/25_scope3 ...
|
||||
a
|
||||
退出码: 46
|
||||
输出匹配: ./test/test_case/functional/25_scope3.out
|
||||
Binary file not shown.
@ -0,0 +1,48 @@
|
||||
declare i32 @getint()
|
||||
declare float @getfloat()
|
||||
declare i32 @getarray(i32* %arg.a)
|
||||
declare i32 @getfarray(float* %arg.a)
|
||||
declare i32 @getch()
|
||||
declare void @putint(i32 %arg.x)
|
||||
declare void @putfloat(float %arg.x)
|
||||
declare void @putarray(i32 %arg.n, i32* %arg.a)
|
||||
declare void @putfarray(i32 %arg.n, float* %arg.a)
|
||||
declare void @putch(i32 %arg.x)
|
||||
declare void @starttime()
|
||||
declare void @stoptime()
|
||||
define i32 @main() {
|
||||
entry:
|
||||
%t0 = alloca i32
|
||||
%t1 = alloca i32
|
||||
store i32 0, i32* %t0
|
||||
store i32 0, i32* %t0
|
||||
store i32 0, i32* %t1
|
||||
store i32 0, i32* %t1
|
||||
br label %while.cond.1
|
||||
while.cond.1:
|
||||
%t2 = load i32, i32* %t0
|
||||
%t3 = icmp slt i32 %t2, 100
|
||||
%t4 = zext i1 %t3 to i32
|
||||
%t5 = icmp ne i32 %t4, 0
|
||||
br i1 %t5, label %while.body.2, label %while.end.3
|
||||
while.body.2:
|
||||
%t6 = load i32, i32* %t0
|
||||
%t7 = icmp eq i32 %t6, 50
|
||||
%t8 = zext i1 %t7 to i32
|
||||
%t9 = icmp ne i32 %t8, 0
|
||||
br i1 %t9, label %if.then.4, label %if.end.5
|
||||
while.end.3:
|
||||
%t15 = load i32, i32* %t1
|
||||
ret i32 %t15
|
||||
if.then.4:
|
||||
br label %while.end.3
|
||||
if.end.5:
|
||||
%t10 = load i32, i32* %t1
|
||||
%t11 = load i32, i32* %t0
|
||||
%t12 = add i32 %t10, %t11
|
||||
store i32 %t12, i32* %t1
|
||||
%t13 = load i32, i32* %t0
|
||||
%t14 = add i32 %t13, 1
|
||||
store i32 %t14, i32* %t0
|
||||
br label %while.cond.1
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
IR 已生成: ./lab2_results/test_case/functional/29_break.ll
|
||||
运行 ./lab2_results/test_case/functional/29_break ...
|
||||
退出码: 201
|
||||
输出匹配: ./test/test_case/functional/29_break.out
|
||||
Binary file not shown.
@ -0,0 +1,35 @@
|
||||
declare i32 @getint()
|
||||
declare float @getfloat()
|
||||
declare i32 @getarray(i32* %arg.a)
|
||||
declare i32 @getfarray(float* %arg.a)
|
||||
declare i32 @getch()
|
||||
declare void @putint(i32 %arg.x)
|
||||
declare void @putfloat(float %arg.x)
|
||||
declare void @putarray(i32 %arg.n, i32* %arg.a)
|
||||
declare void @putfarray(i32 %arg.n, float* %arg.a)
|
||||
declare void @putch(i32 %arg.x)
|
||||
declare void @starttime()
|
||||
declare void @stoptime()
|
||||
define i32 @main() {
|
||||
entry:
|
||||
%t0 = alloca i32
|
||||
%t1 = alloca i32
|
||||
%t2 = alloca i32
|
||||
%t3 = alloca i32
|
||||
store i32 0, i32* %t0
|
||||
store i32 0, i32* %t1
|
||||
store i32 0, i32* %t2
|
||||
store i32 0, i32* %t3
|
||||
store i32 10, i32* %t0
|
||||
store i32 4, i32* %t1
|
||||
store i32 2, i32* %t2
|
||||
store i32 2, i32* %t3
|
||||
%t4 = load i32, i32* %t2
|
||||
%t5 = load i32, i32* %t0
|
||||
%t6 = add i32 %t4, %t5
|
||||
%t7 = load i32, i32* %t1
|
||||
%t8 = load i32, i32* %t3
|
||||
%t9 = sub i32 %t7, %t8
|
||||
%t10 = mul i32 %t6, %t9
|
||||
ret i32 %t10
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
IR 已生成: ./lab2_results/test_case/functional/36_op_priority2.ll
|
||||
运行 ./lab2_results/test_case/functional/36_op_priority2 ...
|
||||
退出码: 24
|
||||
输出匹配: ./test/test_case/functional/36_op_priority2.out
|
||||
Binary file not shown.
@ -0,0 +1,273 @@
|
||||
@RADIUS = global float 0x4016000000000000
|
||||
@PI = global float 0x400921FB60000000
|
||||
@EPS = global float 0x3EB0C6F7A0000000
|
||||
@PI_HEX = global float 0x400921FB60000000
|
||||
@HEX2 = global float 0x3FB4000000000000
|
||||
@FACT = global float 0xC0E01D0000000000
|
||||
@EVAL1 = global float 0x4057C21FC0000000
|
||||
@EVAL2 = global float 0x4041475CE0000000
|
||||
@EVAL3 = global float 0x4041475CE0000000
|
||||
@CONV1 = global float 0x406D200000000000
|
||||
@CONV2 = global float 0x40AFFE0000000000
|
||||
@MAX = global i32 1000000000
|
||||
@TWO = global i32 2
|
||||
@THREE = global i32 3
|
||||
@FIVE = global i32 5
|
||||
|
||||
declare i32 @getint()
|
||||
declare float @getfloat()
|
||||
declare i32 @getarray(i32* %arg.a)
|
||||
declare i32 @getfarray(float* %arg.a)
|
||||
declare i32 @getch()
|
||||
declare void @putint(i32 %arg.x)
|
||||
declare void @putfloat(float %arg.x)
|
||||
declare void @putarray(i32 %arg.n, i32* %arg.a)
|
||||
declare void @putfarray(i32 %arg.n, float* %arg.a)
|
||||
declare void @putch(i32 %arg.x)
|
||||
declare void @starttime()
|
||||
declare void @stoptime()
|
||||
define float @float_abs(float %arg.x) {
|
||||
entry:
|
||||
%t0 = alloca float
|
||||
store float %arg.x, float* %t0
|
||||
%t1 = load float, float* %t0
|
||||
%t2 = fcmp olt float %t1, 0x0000000000000000
|
||||
%t3 = zext i1 %t2 to i32
|
||||
%t4 = icmp ne i32 %t3, 0
|
||||
br i1 %t4, label %if.then.1, label %if.end.2
|
||||
if.then.1:
|
||||
%t5 = load float, float* %t0
|
||||
%t6 = fsub float 0x0000000000000000, %t5
|
||||
ret float %t6
|
||||
if.end.2:
|
||||
%t7 = load float, float* %t0
|
||||
ret float %t7
|
||||
}
|
||||
define float @circle_area(i32 %arg.radius) {
|
||||
entry:
|
||||
%t8 = alloca i32
|
||||
store i32 %arg.radius, i32* %t8
|
||||
%t9 = load float, float* @PI
|
||||
%t10 = load i32, i32* %t8
|
||||
%t11 = sitofp i32 %t10 to float
|
||||
%t12 = fmul float %t9, %t11
|
||||
%t13 = load i32, i32* %t8
|
||||
%t14 = sitofp i32 %t13 to float
|
||||
%t15 = fmul float %t12, %t14
|
||||
%t16 = load i32, i32* %t8
|
||||
%t17 = load i32, i32* %t8
|
||||
%t18 = mul i32 %t16, %t17
|
||||
%t19 = load float, float* @PI
|
||||
%t20 = sitofp i32 %t18 to float
|
||||
%t21 = fmul float %t20, %t19
|
||||
%t22 = fadd float %t15, %t21
|
||||
%t23 = fdiv float %t22, 0x4000000000000000
|
||||
ret float %t23
|
||||
}
|
||||
define i32 @float_eq(float %arg.a, float %arg.b) {
|
||||
entry:
|
||||
%t24 = alloca float
|
||||
store float %arg.a, float* %t24
|
||||
%t25 = alloca float
|
||||
store float %arg.b, float* %t25
|
||||
%t26 = load float, float* %t24
|
||||
%t27 = load float, float* %t25
|
||||
%t28 = fsub float %t26, %t27
|
||||
%t29 = call float @float_abs(float %t28)
|
||||
%t30 = load float, float* @EPS
|
||||
%t31 = fcmp olt float %t29, %t30
|
||||
%t32 = zext i1 %t31 to i32
|
||||
%t33 = icmp ne i32 %t32, 0
|
||||
br i1 %t33, label %if.then.3, label %if.else.4
|
||||
if.then.3:
|
||||
ret i32 1
|
||||
if.else.4:
|
||||
ret i32 0
|
||||
if.end.5:
|
||||
ret i32 0
|
||||
}
|
||||
define void @error() {
|
||||
entry:
|
||||
call void @putch(i32 101)
|
||||
call void @putch(i32 114)
|
||||
call void @putch(i32 114)
|
||||
call void @putch(i32 111)
|
||||
call void @putch(i32 114)
|
||||
call void @putch(i32 10)
|
||||
ret void
|
||||
}
|
||||
define void @ok() {
|
||||
entry:
|
||||
call void @putch(i32 111)
|
||||
call void @putch(i32 107)
|
||||
call void @putch(i32 10)
|
||||
ret void
|
||||
}
|
||||
define void @assert(i32 %arg.cond) {
|
||||
entry:
|
||||
%t43 = alloca i32
|
||||
store i32 %arg.cond, i32* %t43
|
||||
%t44 = load i32, i32* %t43
|
||||
%t45 = icmp eq i32 %t44, 0
|
||||
%t46 = zext i1 %t45 to i32
|
||||
%t47 = icmp ne i32 %t46, 0
|
||||
br i1 %t47, label %if.then.6, label %if.else.7
|
||||
if.then.6:
|
||||
call void @error()
|
||||
br label %if.end.8
|
||||
if.else.7:
|
||||
call void @ok()
|
||||
br label %if.end.8
|
||||
if.end.8:
|
||||
ret void
|
||||
}
|
||||
define void @assert_not(i32 %arg.cond) {
|
||||
entry:
|
||||
%t50 = alloca i32
|
||||
store i32 %arg.cond, i32* %t50
|
||||
%t51 = load i32, i32* %t50
|
||||
%t52 = icmp ne i32 %t51, 0
|
||||
br i1 %t52, label %if.then.9, label %if.else.10
|
||||
if.then.9:
|
||||
call void @error()
|
||||
br label %if.end.11
|
||||
if.else.10:
|
||||
call void @ok()
|
||||
br label %if.end.11
|
||||
if.end.11:
|
||||
ret void
|
||||
}
|
||||
define i32 @main() {
|
||||
entry:
|
||||
%t87 = alloca i32
|
||||
%t88 = alloca i32
|
||||
%t89 = alloca float, i32 10
|
||||
%t100 = alloca i32
|
||||
%t106 = alloca float
|
||||
%t108 = alloca float
|
||||
%t114 = alloca float
|
||||
%t55 = load float, float* @HEX2
|
||||
%t56 = load float, float* @FACT
|
||||
%t57 = call i32 @float_eq(float %t55, float %t56)
|
||||
call void @assert_not(i32 %t57)
|
||||
%t59 = load float, float* @EVAL1
|
||||
%t60 = load float, float* @EVAL2
|
||||
%t61 = call i32 @float_eq(float %t59, float %t60)
|
||||
call void @assert_not(i32 %t61)
|
||||
%t63 = load float, float* @EVAL2
|
||||
%t64 = load float, float* @EVAL3
|
||||
%t65 = call i32 @float_eq(float %t63, float %t64)
|
||||
call void @assert(i32 %t65)
|
||||
%t67 = load float, float* @RADIUS
|
||||
%t68 = fptosi float %t67 to i32
|
||||
%t69 = call float @circle_area(i32 %t68)
|
||||
%t70 = call float @circle_area(i32 5)
|
||||
%t71 = call i32 @float_eq(float %t69, float %t70)
|
||||
call void @assert(i32 %t71)
|
||||
%t73 = load float, float* @CONV1
|
||||
%t74 = load float, float* @CONV2
|
||||
%t75 = call i32 @float_eq(float %t73, float %t74)
|
||||
call void @assert_not(i32 %t75)
|
||||
%t77 = fcmp one float 0x3FF8000000000000, 0x0000000000000000
|
||||
br i1 %t77, label %if.then.12, label %if.end.13
|
||||
if.then.12:
|
||||
call void @ok()
|
||||
br label %if.end.13
|
||||
if.end.13:
|
||||
%t79 = icmp ne i32 1, 0
|
||||
br i1 %t79, label %if.then.14, label %if.end.15
|
||||
if.then.14:
|
||||
call void @ok()
|
||||
br label %if.end.15
|
||||
if.end.15:
|
||||
%t81 = fcmp one float 0x0000000000000000, 0x0000000000000000
|
||||
br i1 %t81, label %land.rhs.18, label %if.end.17
|
||||
if.then.16:
|
||||
call void @error()
|
||||
br label %if.end.17
|
||||
if.end.17:
|
||||
%t84 = icmp ne i32 0, 0
|
||||
br i1 %t84, label %if.then.19, label %lor.rhs.21
|
||||
land.rhs.18:
|
||||
%t82 = icmp ne i32 3, 0
|
||||
br i1 %t82, label %if.then.16, label %if.end.17
|
||||
if.then.19:
|
||||
call void @ok()
|
||||
br label %if.end.20
|
||||
if.end.20:
|
||||
store i32 1, i32* %t87
|
||||
store i32 0, i32* %t88
|
||||
%t90 = getelementptr inbounds float, float* %t89, i32 0
|
||||
store float 0x3FF0000000000000, float* %t90
|
||||
%t91 = getelementptr inbounds float, float* %t89, i32 1
|
||||
store float 0x4000000000000000, float* %t91
|
||||
%t92 = getelementptr inbounds float, float* %t89, i32 2
|
||||
store float 0x0000000000000000, float* %t92
|
||||
%t93 = getelementptr inbounds float, float* %t89, i32 3
|
||||
store float 0x0000000000000000, float* %t93
|
||||
%t94 = getelementptr inbounds float, float* %t89, i32 4
|
||||
store float 0x0000000000000000, float* %t94
|
||||
%t95 = getelementptr inbounds float, float* %t89, i32 5
|
||||
store float 0x0000000000000000, float* %t95
|
||||
%t96 = getelementptr inbounds float, float* %t89, i32 6
|
||||
store float 0x0000000000000000, float* %t96
|
||||
%t97 = getelementptr inbounds float, float* %t89, i32 7
|
||||
store float 0x0000000000000000, float* %t97
|
||||
%t98 = getelementptr inbounds float, float* %t89, i32 8
|
||||
store float 0x0000000000000000, float* %t98
|
||||
%t99 = getelementptr inbounds float, float* %t89, i32 9
|
||||
store float 0x0000000000000000, float* %t99
|
||||
%t101 = call i32 @getfarray(float* %t89)
|
||||
store i32 %t101, i32* %t100
|
||||
br label %while.cond.22
|
||||
lor.rhs.21:
|
||||
%t85 = fcmp one float 0x3FD3333340000000, 0x0000000000000000
|
||||
br i1 %t85, label %if.then.19, label %if.end.20
|
||||
while.cond.22:
|
||||
%t102 = load i32, i32* %t87
|
||||
%t103 = icmp slt i32 %t102, 1000000000
|
||||
%t104 = zext i1 %t103 to i32
|
||||
%t105 = icmp ne i32 %t104, 0
|
||||
br i1 %t105, label %while.body.23, label %while.end.24
|
||||
while.body.23:
|
||||
%t107 = call float @getfloat()
|
||||
store float %t107, float* %t106
|
||||
%t109 = load float, float* @PI
|
||||
%t110 = load float, float* %t106
|
||||
%t111 = fmul float %t109, %t110
|
||||
%t112 = load float, float* %t106
|
||||
%t113 = fmul float %t111, %t112
|
||||
store float %t113, float* %t108
|
||||
%t115 = load float, float* %t106
|
||||
%t116 = fptosi float %t115 to i32
|
||||
%t117 = call float @circle_area(i32 %t116)
|
||||
store float %t117, float* %t114
|
||||
%t118 = load i32, i32* %t88
|
||||
%t119 = getelementptr inbounds float, float* %t89, i32 %t118
|
||||
%t120 = load i32, i32* %t88
|
||||
%t121 = getelementptr inbounds float, float* %t89, i32 %t120
|
||||
%t122 = load float, float* %t121
|
||||
%t123 = load float, float* %t106
|
||||
%t124 = fadd float %t122, %t123
|
||||
store float %t124, float* %t119
|
||||
%t125 = load float, float* %t108
|
||||
call void @putfloat(float %t125)
|
||||
call void @putch(i32 32)
|
||||
%t128 = load float, float* %t114
|
||||
%t129 = fptosi float %t128 to i32
|
||||
call void @putint(i32 %t129)
|
||||
call void @putch(i32 10)
|
||||
%t132 = load i32, i32* %t87
|
||||
%t133 = sitofp i32 %t132 to float
|
||||
%t134 = fmul float %t133, 0x4024000000000000
|
||||
%t135 = fptosi float %t134 to i32
|
||||
store i32 %t135, i32* %t87
|
||||
%t136 = load i32, i32* %t88
|
||||
%t137 = add i32 %t136, 1
|
||||
store i32 %t137, i32* %t88
|
||||
br label %while.cond.22
|
||||
while.end.24:
|
||||
%t138 = load i32, i32* %t100
|
||||
call void @putfarray(i32 %t138, float* %t89)
|
||||
ret i32 0
|
||||
}
|
||||
@ -0,0 +1,18 @@
|
||||
ok
|
||||
ok
|
||||
ok
|
||||
ok
|
||||
ok
|
||||
ok
|
||||
ok
|
||||
ok
|
||||
0x1.e691e6p+1 3
|
||||
0x1.e691e6p+3 12
|
||||
0x1.11b21p+5 28
|
||||
0x1.e691e6p+5 50
|
||||
0x1.7c21fcp+6 78
|
||||
0x1.11b21p+7 113
|
||||
0x1.7487b2p+7 153
|
||||
0x1.e691e6p+7 201
|
||||
0x1.33e85p+8 254
|
||||
10: 0x1.333334p+0 0x1.333334p+1 0x1.ccccccp+1 0x1.333334p+2 0x1.8p+2 0x1.ccccccp+2 0x1.0cccccp+3 0x1.333334p+3 0x1.599998p+3 0x1p+0
|
||||
@ -0,0 +1,22 @@
|
||||
IR 已生成: ./lab2_results/test_case/functional/95_float.ll
|
||||
运行 ./lab2_results/test_case/functional/95_float ...
|
||||
ok
|
||||
ok
|
||||
ok
|
||||
ok
|
||||
ok
|
||||
ok
|
||||
ok
|
||||
ok
|
||||
0x1.e691e6p+1 3
|
||||
0x1.e691e6p+3 12
|
||||
0x1.11b21p+5 28
|
||||
0x1.e691e6p+5 50
|
||||
0x1.7c21fcp+6 78
|
||||
0x1.11b21p+7 113
|
||||
0x1.7487b2p+7 153
|
||||
0x1.e691e6p+7 201
|
||||
0x1.33e85p+8 254
|
||||
10: 0x1.333334p+0 0x1.333334p+1 0x1.ccccccp+1 0x1.333334p+2 0x1.8p+2 0x1.ccccccp+2 0x1.0cccccp+3 0x1.333334p+3 0x1.599998p+3 0x1p+0
|
||||
退出码: 0
|
||||
输出匹配: ./test/test_case/functional/95_float.out
|
||||
Binary file not shown.
@ -0,0 +1,23 @@
|
||||
declare i32 @getint()
|
||||
declare float @getfloat()
|
||||
declare i32 @getarray(i32* %arg.a)
|
||||
declare i32 @getfarray(float* %arg.a)
|
||||
declare i32 @getch()
|
||||
declare void @putint(i32 %arg.x)
|
||||
declare void @putfloat(float %arg.x)
|
||||
declare void @putarray(i32 %arg.n, i32* %arg.a)
|
||||
declare void @putfarray(i32 %arg.n, float* %arg.a)
|
||||
declare void @putch(i32 %arg.x)
|
||||
declare void @starttime()
|
||||
declare void @stoptime()
|
||||
define i32 @main() {
|
||||
entry:
|
||||
%t0 = alloca i32
|
||||
%t1 = alloca i32
|
||||
store i32 1, i32* %t0
|
||||
store i32 2, i32* %t1
|
||||
%t2 = load i32, i32* %t0
|
||||
%t3 = load i32, i32* %t1
|
||||
%t4 = add i32 %t2, %t3
|
||||
ret i32 %t4
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
IR 已生成: ./lab2_results/test_case/functional/simple_add.ll
|
||||
运行 ./lab2_results/test_case/functional/simple_add ...
|
||||
退出码: 3
|
||||
输出匹配: ./test/test_case/functional/simple_add.out
|
||||
Binary file not shown.
@ -0,0 +1,312 @@
|
||||
@N = global i32 1024
|
||||
@A = global [1048576 x i32] zeroinitializer
|
||||
@B = global [1048576 x i32] zeroinitializer
|
||||
@C = global [1048576 x i32] zeroinitializer
|
||||
|
||||
declare i32 @getint()
|
||||
declare float @getfloat()
|
||||
declare i32 @getarray(i32* %arg.a)
|
||||
declare i32 @getfarray(float* %arg.a)
|
||||
declare i32 @getch()
|
||||
declare void @putint(i32 %arg.x)
|
||||
declare void @putfloat(float %arg.x)
|
||||
declare void @putarray(i32 %arg.n, i32* %arg.a)
|
||||
declare void @putfarray(i32 %arg.n, float* %arg.a)
|
||||
declare void @putch(i32 %arg.x)
|
||||
declare void @starttime()
|
||||
declare void @stoptime()
|
||||
define void @mm(i32 %arg.n, i32* %arg.A, i32* %arg.B, i32* %arg.C) {
|
||||
entry:
|
||||
%t1 = alloca i32
|
||||
%t2 = alloca i32
|
||||
%t3 = alloca i32
|
||||
%t0 = alloca i32
|
||||
store i32 %arg.n, i32* %t0
|
||||
store i32 0, i32* %t1
|
||||
store i32 0, i32* %t2
|
||||
store i32 0, i32* %t3
|
||||
store i32 0, i32* %t1
|
||||
store i32 0, i32* %t2
|
||||
br label %while.cond.1
|
||||
while.cond.1:
|
||||
%t4 = load i32, i32* %t1
|
||||
%t5 = load i32, i32* %t0
|
||||
%t6 = icmp slt i32 %t4, %t5
|
||||
%t7 = zext i1 %t6 to i32
|
||||
%t8 = icmp ne i32 %t7, 0
|
||||
br i1 %t8, label %while.body.2, label %while.end.3
|
||||
while.body.2:
|
||||
store i32 0, i32* %t2
|
||||
br label %while.cond.4
|
||||
while.end.3:
|
||||
store i32 0, i32* %t1
|
||||
store i32 0, i32* %t2
|
||||
store i32 0, i32* %t3
|
||||
br label %while.cond.7
|
||||
while.cond.4:
|
||||
%t9 = load i32, i32* %t2
|
||||
%t10 = load i32, i32* %t0
|
||||
%t11 = icmp slt i32 %t9, %t10
|
||||
%t12 = zext i1 %t11 to i32
|
||||
%t13 = icmp ne i32 %t12, 0
|
||||
br i1 %t13, label %while.body.5, label %while.end.6
|
||||
while.body.5:
|
||||
%t14 = load i32, i32* %t1
|
||||
%t15 = load i32, i32* %t2
|
||||
%t16 = mul i32 %t14, 1024
|
||||
%t17 = add i32 %t16, %t15
|
||||
%t18 = getelementptr inbounds i32, i32* %arg.C, i32 %t17
|
||||
store i32 0, i32* %t18
|
||||
%t19 = load i32, i32* %t2
|
||||
%t20 = add i32 %t19, 1
|
||||
store i32 %t20, i32* %t2
|
||||
br label %while.cond.4
|
||||
while.end.6:
|
||||
%t21 = load i32, i32* %t1
|
||||
%t22 = add i32 %t21, 1
|
||||
store i32 %t22, i32* %t1
|
||||
br label %while.cond.1
|
||||
while.cond.7:
|
||||
%t23 = load i32, i32* %t3
|
||||
%t24 = load i32, i32* %t0
|
||||
%t25 = icmp slt i32 %t23, %t24
|
||||
%t26 = zext i1 %t25 to i32
|
||||
%t27 = icmp ne i32 %t26, 0
|
||||
br i1 %t27, label %while.body.8, label %while.end.9
|
||||
while.body.8:
|
||||
store i32 0, i32* %t1
|
||||
br label %while.cond.10
|
||||
while.end.9:
|
||||
ret void
|
||||
while.cond.10:
|
||||
%t28 = load i32, i32* %t1
|
||||
%t29 = load i32, i32* %t0
|
||||
%t30 = icmp slt i32 %t28, %t29
|
||||
%t31 = zext i1 %t30 to i32
|
||||
%t32 = icmp ne i32 %t31, 0
|
||||
br i1 %t32, label %while.body.11, label %while.end.12
|
||||
while.body.11:
|
||||
%t33 = load i32, i32* %t1
|
||||
%t34 = load i32, i32* %t3
|
||||
%t35 = mul i32 %t33, 1024
|
||||
%t36 = add i32 %t35, %t34
|
||||
%t37 = getelementptr inbounds i32, i32* %arg.A, i32 %t36
|
||||
%t38 = load i32, i32* %t37
|
||||
%t39 = icmp eq i32 %t38, 0
|
||||
%t40 = zext i1 %t39 to i32
|
||||
%t41 = icmp ne i32 %t40, 0
|
||||
br i1 %t41, label %if.then.13, label %if.end.14
|
||||
while.end.12:
|
||||
%t78 = load i32, i32* %t3
|
||||
%t79 = add i32 %t78, 1
|
||||
store i32 %t79, i32* %t3
|
||||
br label %while.cond.7
|
||||
if.then.13:
|
||||
%t42 = load i32, i32* %t1
|
||||
%t43 = add i32 %t42, 1
|
||||
store i32 %t43, i32* %t1
|
||||
br label %while.cond.10
|
||||
if.end.14:
|
||||
store i32 0, i32* %t2
|
||||
br label %while.cond.15
|
||||
while.cond.15:
|
||||
%t44 = load i32, i32* %t2
|
||||
%t45 = load i32, i32* %t0
|
||||
%t46 = icmp slt i32 %t44, %t45
|
||||
%t47 = zext i1 %t46 to i32
|
||||
%t48 = icmp ne i32 %t47, 0
|
||||
br i1 %t48, label %while.body.16, label %while.end.17
|
||||
while.body.16:
|
||||
%t49 = load i32, i32* %t1
|
||||
%t50 = load i32, i32* %t2
|
||||
%t51 = mul i32 %t49, 1024
|
||||
%t52 = add i32 %t51, %t50
|
||||
%t53 = getelementptr inbounds i32, i32* %arg.C, i32 %t52
|
||||
%t54 = load i32, i32* %t1
|
||||
%t55 = load i32, i32* %t2
|
||||
%t56 = mul i32 %t54, 1024
|
||||
%t57 = add i32 %t56, %t55
|
||||
%t58 = getelementptr inbounds i32, i32* %arg.C, i32 %t57
|
||||
%t59 = load i32, i32* %t58
|
||||
%t60 = load i32, i32* %t1
|
||||
%t61 = load i32, i32* %t3
|
||||
%t62 = mul i32 %t60, 1024
|
||||
%t63 = add i32 %t62, %t61
|
||||
%t64 = getelementptr inbounds i32, i32* %arg.A, i32 %t63
|
||||
%t65 = load i32, i32* %t64
|
||||
%t66 = load i32, i32* %t3
|
||||
%t67 = load i32, i32* %t2
|
||||
%t68 = mul i32 %t66, 1024
|
||||
%t69 = add i32 %t68, %t67
|
||||
%t70 = getelementptr inbounds i32, i32* %arg.B, i32 %t69
|
||||
%t71 = load i32, i32* %t70
|
||||
%t72 = mul i32 %t65, %t71
|
||||
%t73 = add i32 %t59, %t72
|
||||
store i32 %t73, i32* %t53
|
||||
%t74 = load i32, i32* %t2
|
||||
%t75 = add i32 %t74, 1
|
||||
store i32 %t75, i32* %t2
|
||||
br label %while.cond.15
|
||||
while.end.17:
|
||||
%t76 = load i32, i32* %t1
|
||||
%t77 = add i32 %t76, 1
|
||||
store i32 %t77, i32* %t1
|
||||
br label %while.cond.10
|
||||
}
|
||||
define i32 @main() {
|
||||
entry:
|
||||
%t80 = alloca i32
|
||||
%t82 = alloca i32
|
||||
%t83 = alloca i32
|
||||
%t141 = alloca i32
|
||||
%t81 = call i32 @getint()
|
||||
store i32 %t81, i32* %t80
|
||||
store i32 0, i32* %t82
|
||||
store i32 0, i32* %t83
|
||||
store i32 0, i32* %t82
|
||||
store i32 0, i32* %t83
|
||||
br label %while.cond.18
|
||||
while.cond.18:
|
||||
%t84 = load i32, i32* %t82
|
||||
%t85 = load i32, i32* %t80
|
||||
%t86 = icmp slt i32 %t84, %t85
|
||||
%t87 = zext i1 %t86 to i32
|
||||
%t88 = icmp ne i32 %t87, 0
|
||||
br i1 %t88, label %while.body.19, label %while.end.20
|
||||
while.body.19:
|
||||
store i32 0, i32* %t83
|
||||
br label %while.cond.21
|
||||
while.end.20:
|
||||
store i32 0, i32* %t82
|
||||
store i32 0, i32* %t83
|
||||
br label %while.cond.24
|
||||
while.cond.21:
|
||||
%t89 = load i32, i32* %t83
|
||||
%t90 = load i32, i32* %t80
|
||||
%t91 = icmp slt i32 %t89, %t90
|
||||
%t92 = zext i1 %t91 to i32
|
||||
%t93 = icmp ne i32 %t92, 0
|
||||
br i1 %t93, label %while.body.22, label %while.end.23
|
||||
while.body.22:
|
||||
%t94 = load i32, i32* %t82
|
||||
%t95 = load i32, i32* %t83
|
||||
%t96 = mul i32 %t94, 1024
|
||||
%t97 = add i32 %t96, %t95
|
||||
%t98 = getelementptr inbounds [1048576 x i32], [1048576 x i32]* @A, i32 0, i32 %t97
|
||||
%t99 = call i32 @getint()
|
||||
store i32 %t99, i32* %t98
|
||||
%t100 = load i32, i32* %t83
|
||||
%t101 = add i32 %t100, 1
|
||||
store i32 %t101, i32* %t83
|
||||
br label %while.cond.21
|
||||
while.end.23:
|
||||
%t102 = load i32, i32* %t82
|
||||
%t103 = add i32 %t102, 1
|
||||
store i32 %t103, i32* %t82
|
||||
br label %while.cond.18
|
||||
while.cond.24:
|
||||
%t104 = load i32, i32* %t82
|
||||
%t105 = load i32, i32* %t80
|
||||
%t106 = icmp slt i32 %t104, %t105
|
||||
%t107 = zext i1 %t106 to i32
|
||||
%t108 = icmp ne i32 %t107, 0
|
||||
br i1 %t108, label %while.body.25, label %while.end.26
|
||||
while.body.25:
|
||||
store i32 0, i32* %t83
|
||||
br label %while.cond.27
|
||||
while.end.26:
|
||||
call void @starttime()
|
||||
store i32 0, i32* %t82
|
||||
br label %while.cond.30
|
||||
while.cond.27:
|
||||
%t109 = load i32, i32* %t83
|
||||
%t110 = load i32, i32* %t80
|
||||
%t111 = icmp slt i32 %t109, %t110
|
||||
%t112 = zext i1 %t111 to i32
|
||||
%t113 = icmp ne i32 %t112, 0
|
||||
br i1 %t113, label %while.body.28, label %while.end.29
|
||||
while.body.28:
|
||||
%t114 = load i32, i32* %t82
|
||||
%t115 = load i32, i32* %t83
|
||||
%t116 = mul i32 %t114, 1024
|
||||
%t117 = add i32 %t116, %t115
|
||||
%t118 = getelementptr inbounds [1048576 x i32], [1048576 x i32]* @B, i32 0, i32 %t117
|
||||
%t119 = call i32 @getint()
|
||||
store i32 %t119, i32* %t118
|
||||
%t120 = load i32, i32* %t83
|
||||
%t121 = add i32 %t120, 1
|
||||
store i32 %t121, i32* %t83
|
||||
br label %while.cond.27
|
||||
while.end.29:
|
||||
%t122 = load i32, i32* %t82
|
||||
%t123 = add i32 %t122, 1
|
||||
store i32 %t123, i32* %t82
|
||||
br label %while.cond.24
|
||||
while.cond.30:
|
||||
%t125 = load i32, i32* %t82
|
||||
%t126 = icmp slt i32 %t125, 5
|
||||
%t127 = zext i1 %t126 to i32
|
||||
%t128 = icmp ne i32 %t127, 0
|
||||
br i1 %t128, label %while.body.31, label %while.end.32
|
||||
while.body.31:
|
||||
%t129 = load i32, i32* %t80
|
||||
%t130 = getelementptr inbounds [1048576 x i32], [1048576 x i32]* @A, i32 0, i32 0
|
||||
%t131 = getelementptr inbounds [1048576 x i32], [1048576 x i32]* @B, i32 0, i32 0
|
||||
%t132 = getelementptr inbounds [1048576 x i32], [1048576 x i32]* @C, i32 0, i32 0
|
||||
call void @mm(i32 %t129, i32* %t130, i32* %t131, i32* %t132)
|
||||
%t134 = load i32, i32* %t80
|
||||
%t135 = getelementptr inbounds [1048576 x i32], [1048576 x i32]* @A, i32 0, i32 0
|
||||
%t136 = getelementptr inbounds [1048576 x i32], [1048576 x i32]* @C, i32 0, i32 0
|
||||
%t137 = getelementptr inbounds [1048576 x i32], [1048576 x i32]* @B, i32 0, i32 0
|
||||
call void @mm(i32 %t134, i32* %t135, i32* %t136, i32* %t137)
|
||||
%t139 = load i32, i32* %t82
|
||||
%t140 = add i32 %t139, 1
|
||||
store i32 %t140, i32* %t82
|
||||
br label %while.cond.30
|
||||
while.end.32:
|
||||
store i32 0, i32* %t141
|
||||
store i32 0, i32* %t82
|
||||
br label %while.cond.33
|
||||
while.cond.33:
|
||||
%t142 = load i32, i32* %t82
|
||||
%t143 = load i32, i32* %t80
|
||||
%t144 = icmp slt i32 %t142, %t143
|
||||
%t145 = zext i1 %t144 to i32
|
||||
%t146 = icmp ne i32 %t145, 0
|
||||
br i1 %t146, label %while.body.34, label %while.end.35
|
||||
while.body.34:
|
||||
store i32 0, i32* %t83
|
||||
br label %while.cond.36
|
||||
while.end.35:
|
||||
call void @stoptime()
|
||||
%t165 = load i32, i32* %t141
|
||||
call void @putint(i32 %t165)
|
||||
call void @putch(i32 10)
|
||||
ret i32 0
|
||||
while.cond.36:
|
||||
%t147 = load i32, i32* %t83
|
||||
%t148 = load i32, i32* %t80
|
||||
%t149 = icmp slt i32 %t147, %t148
|
||||
%t150 = zext i1 %t149 to i32
|
||||
%t151 = icmp ne i32 %t150, 0
|
||||
br i1 %t151, label %while.body.37, label %while.end.38
|
||||
while.body.37:
|
||||
%t152 = load i32, i32* %t141
|
||||
%t153 = load i32, i32* %t82
|
||||
%t154 = load i32, i32* %t83
|
||||
%t155 = mul i32 %t153, 1024
|
||||
%t156 = add i32 %t155, %t154
|
||||
%t157 = getelementptr inbounds [1048576 x i32], [1048576 x i32]* @B, i32 0, i32 %t156
|
||||
%t158 = load i32, i32* %t157
|
||||
%t159 = add i32 %t152, %t158
|
||||
store i32 %t159, i32* %t141
|
||||
%t160 = load i32, i32* %t83
|
||||
%t161 = add i32 %t160, 1
|
||||
store i32 %t161, i32* %t83
|
||||
br label %while.cond.36
|
||||
while.end.38:
|
||||
%t162 = load i32, i32* %t82
|
||||
%t163 = add i32 %t162, 1
|
||||
store i32 %t163, i32* %t82
|
||||
br label %while.cond.33
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
1691748973
|
||||
@ -0,0 +1,6 @@
|
||||
IR 已生成: ./lab2_results/test_case/performance/01_mm2.ll
|
||||
运行 ./lab2_results/test_case/performance/01_mm2 ...
|
||||
Total time: 1.457567 seconds
|
||||
1691748973
|
||||
退出码: 0
|
||||
输出匹配: ./test/test_case/performance/01_mm2.out
|
||||
Binary file not shown.
@ -0,0 +1,225 @@
|
||||
@x = global i32 0
|
||||
@N = global i32 2010
|
||||
@A = global [4040100 x i32] zeroinitializer
|
||||
@B = global [2010 x i32] zeroinitializer
|
||||
@C = global [2010 x i32] zeroinitializer
|
||||
|
||||
declare i32 @getint()
|
||||
declare float @getfloat()
|
||||
declare i32 @getarray(i32* %arg.a)
|
||||
declare i32 @getfarray(float* %arg.a)
|
||||
declare i32 @getch()
|
||||
declare void @putint(i32 %arg.x)
|
||||
declare void @putfloat(float %arg.x)
|
||||
declare void @putarray(i32 %arg.n, i32* %arg.a)
|
||||
declare void @putfarray(i32 %arg.n, float* %arg.a)
|
||||
declare void @putch(i32 %arg.x)
|
||||
declare void @starttime()
|
||||
declare void @stoptime()
|
||||
define void @mv(i32 %arg.n, i32* %arg.A, i32* %arg.b, i32* %arg.res) {
|
||||
entry:
|
||||
%t1 = alloca i32
|
||||
%t2 = alloca i32
|
||||
%t3 = alloca i32
|
||||
%t4 = alloca i32
|
||||
%t0 = alloca i32
|
||||
store i32 %arg.n, i32* %t0
|
||||
store i32 0, i32* %t1
|
||||
store i32 0, i32* %t2
|
||||
store i32 0, i32* %t2
|
||||
store i32 11, i32* %t1
|
||||
store i32 0, i32* %t3
|
||||
store i32 0, i32* %t4
|
||||
store i32 0, i32* %t3
|
||||
br label %while.cond.1
|
||||
while.cond.1:
|
||||
%t5 = load i32, i32* %t3
|
||||
%t6 = load i32, i32* %t0
|
||||
%t7 = icmp slt i32 %t5, %t6
|
||||
%t8 = zext i1 %t7 to i32
|
||||
%t9 = icmp ne i32 %t8, 0
|
||||
br i1 %t9, label %while.body.2, label %while.end.3
|
||||
while.body.2:
|
||||
%t10 = load i32, i32* %t3
|
||||
%t11 = getelementptr inbounds i32, i32* %arg.res, i32 %t10
|
||||
store i32 0, i32* %t11
|
||||
%t12 = load i32, i32* %t3
|
||||
%t13 = add i32 %t12, 1
|
||||
store i32 %t13, i32* %t3
|
||||
br label %while.cond.1
|
||||
while.end.3:
|
||||
store i32 0, i32* %t3
|
||||
store i32 0, i32* %t4
|
||||
br label %while.cond.4
|
||||
while.cond.4:
|
||||
%t14 = load i32, i32* %t3
|
||||
%t15 = load i32, i32* %t0
|
||||
%t16 = icmp slt i32 %t14, %t15
|
||||
%t17 = zext i1 %t16 to i32
|
||||
%t18 = icmp ne i32 %t17, 0
|
||||
br i1 %t18, label %while.body.5, label %while.end.6
|
||||
while.body.5:
|
||||
store i32 0, i32* %t4
|
||||
br label %while.cond.7
|
||||
while.end.6:
|
||||
ret void
|
||||
while.cond.7:
|
||||
%t19 = load i32, i32* %t4
|
||||
%t20 = load i32, i32* %t0
|
||||
%t21 = icmp slt i32 %t19, %t20
|
||||
%t22 = zext i1 %t21 to i32
|
||||
%t23 = icmp ne i32 %t22, 0
|
||||
br i1 %t23, label %while.body.8, label %while.end.9
|
||||
while.body.8:
|
||||
%t24 = load i32, i32* %t3
|
||||
%t25 = load i32, i32* %t4
|
||||
%t26 = mul i32 %t24, 2010
|
||||
%t27 = add i32 %t26, %t25
|
||||
%t28 = getelementptr inbounds i32, i32* %arg.A, i32 %t27
|
||||
%t29 = load i32, i32* %t28
|
||||
%t30 = icmp eq i32 %t29, 0
|
||||
%t31 = zext i1 %t30 to i32
|
||||
%t32 = icmp ne i32 %t31, 0
|
||||
br i1 %t32, label %if.then.10, label %if.else.11
|
||||
while.end.9:
|
||||
%t63 = load i32, i32* %t3
|
||||
%t64 = add i32 %t63, 1
|
||||
store i32 %t64, i32* %t3
|
||||
br label %while.cond.4
|
||||
if.then.10:
|
||||
%t33 = load i32, i32* %t1
|
||||
%t34 = load i32, i32* %t3
|
||||
%t35 = getelementptr inbounds i32, i32* %arg.b, i32 %t34
|
||||
%t36 = load i32, i32* %t35
|
||||
%t37 = mul i32 %t33, %t36
|
||||
%t38 = load i32, i32* %t4
|
||||
%t39 = getelementptr inbounds i32, i32* %arg.b, i32 %t38
|
||||
%t40 = load i32, i32* %t39
|
||||
%t41 = add i32 %t37, %t40
|
||||
store i32 %t41, i32* %t1
|
||||
%t42 = load i32, i32* %t2
|
||||
%t43 = load i32, i32* %t1
|
||||
%t44 = sub i32 %t42, %t43
|
||||
store i32 %t44, i32* %t2
|
||||
br label %if.end.12
|
||||
if.else.11:
|
||||
%t45 = load i32, i32* %t3
|
||||
%t46 = getelementptr inbounds i32, i32* %arg.res, i32 %t45
|
||||
%t47 = load i32, i32* %t3
|
||||
%t48 = getelementptr inbounds i32, i32* %arg.res, i32 %t47
|
||||
%t49 = load i32, i32* %t48
|
||||
%t50 = load i32, i32* %t3
|
||||
%t51 = load i32, i32* %t4
|
||||
%t52 = mul i32 %t50, 2010
|
||||
%t53 = add i32 %t52, %t51
|
||||
%t54 = getelementptr inbounds i32, i32* %arg.A, i32 %t53
|
||||
%t55 = load i32, i32* %t54
|
||||
%t56 = load i32, i32* %t4
|
||||
%t57 = getelementptr inbounds i32, i32* %arg.b, i32 %t56
|
||||
%t58 = load i32, i32* %t57
|
||||
%t59 = mul i32 %t55, %t58
|
||||
%t60 = add i32 %t49, %t59
|
||||
store i32 %t60, i32* %t46
|
||||
br label %if.end.12
|
||||
if.end.12:
|
||||
%t61 = load i32, i32* %t4
|
||||
%t62 = add i32 %t61, 1
|
||||
store i32 %t62, i32* %t4
|
||||
br label %while.cond.7
|
||||
}
|
||||
define i32 @main() {
|
||||
entry:
|
||||
%t65 = alloca i32
|
||||
%t67 = alloca i32
|
||||
%t68 = alloca i32
|
||||
%t66 = call i32 @getint()
|
||||
store i32 %t66, i32* %t65
|
||||
store i32 0, i32* %t67
|
||||
store i32 0, i32* %t68
|
||||
store i32 0, i32* %t67
|
||||
br label %while.cond.13
|
||||
while.cond.13:
|
||||
%t69 = load i32, i32* %t67
|
||||
%t70 = load i32, i32* %t65
|
||||
%t71 = icmp slt i32 %t69, %t70
|
||||
%t72 = zext i1 %t71 to i32
|
||||
%t73 = icmp ne i32 %t72, 0
|
||||
br i1 %t73, label %while.body.14, label %while.end.15
|
||||
while.body.14:
|
||||
store i32 0, i32* %t68
|
||||
br label %while.cond.16
|
||||
while.end.15:
|
||||
store i32 0, i32* %t67
|
||||
br label %while.cond.19
|
||||
while.cond.16:
|
||||
%t74 = load i32, i32* %t68
|
||||
%t75 = load i32, i32* %t65
|
||||
%t76 = icmp slt i32 %t74, %t75
|
||||
%t77 = zext i1 %t76 to i32
|
||||
%t78 = icmp ne i32 %t77, 0
|
||||
br i1 %t78, label %while.body.17, label %while.end.18
|
||||
while.body.17:
|
||||
%t79 = load i32, i32* %t67
|
||||
%t80 = load i32, i32* %t68
|
||||
%t81 = mul i32 %t79, 2010
|
||||
%t82 = add i32 %t81, %t80
|
||||
%t83 = getelementptr inbounds [4040100 x i32], [4040100 x i32]* @A, i32 0, i32 %t82
|
||||
%t84 = call i32 @getint()
|
||||
store i32 %t84, i32* %t83
|
||||
%t85 = load i32, i32* %t68
|
||||
%t86 = add i32 %t85, 1
|
||||
store i32 %t86, i32* %t68
|
||||
br label %while.cond.16
|
||||
while.end.18:
|
||||
%t87 = load i32, i32* %t67
|
||||
%t88 = add i32 %t87, 1
|
||||
store i32 %t88, i32* %t67
|
||||
br label %while.cond.13
|
||||
while.cond.19:
|
||||
%t89 = load i32, i32* %t67
|
||||
%t90 = load i32, i32* %t65
|
||||
%t91 = icmp slt i32 %t89, %t90
|
||||
%t92 = zext i1 %t91 to i32
|
||||
%t93 = icmp ne i32 %t92, 0
|
||||
br i1 %t93, label %while.body.20, label %while.end.21
|
||||
while.body.20:
|
||||
%t94 = load i32, i32* %t67
|
||||
%t95 = getelementptr inbounds [2010 x i32], [2010 x i32]* @B, i32 0, i32 %t94
|
||||
%t96 = call i32 @getint()
|
||||
store i32 %t96, i32* %t95
|
||||
%t97 = load i32, i32* %t67
|
||||
%t98 = add i32 %t97, 1
|
||||
store i32 %t98, i32* %t67
|
||||
br label %while.cond.19
|
||||
while.end.21:
|
||||
call void @starttime()
|
||||
store i32 0, i32* %t67
|
||||
br label %while.cond.22
|
||||
while.cond.22:
|
||||
%t100 = load i32, i32* %t67
|
||||
%t101 = icmp slt i32 %t100, 50
|
||||
%t102 = zext i1 %t101 to i32
|
||||
%t103 = icmp ne i32 %t102, 0
|
||||
br i1 %t103, label %while.body.23, label %while.end.24
|
||||
while.body.23:
|
||||
%t104 = load i32, i32* %t65
|
||||
%t105 = getelementptr inbounds [4040100 x i32], [4040100 x i32]* @A, i32 0, i32 0
|
||||
%t106 = getelementptr inbounds [2010 x i32], [2010 x i32]* @B, i32 0, i32 0
|
||||
%t107 = getelementptr inbounds [2010 x i32], [2010 x i32]* @C, i32 0, i32 0
|
||||
call void @mv(i32 %t104, i32* %t105, i32* %t106, i32* %t107)
|
||||
%t109 = load i32, i32* %t65
|
||||
%t110 = getelementptr inbounds [4040100 x i32], [4040100 x i32]* @A, i32 0, i32 0
|
||||
%t111 = getelementptr inbounds [2010 x i32], [2010 x i32]* @C, i32 0, i32 0
|
||||
%t112 = getelementptr inbounds [2010 x i32], [2010 x i32]* @B, i32 0, i32 0
|
||||
call void @mv(i32 %t109, i32* %t110, i32* %t111, i32* %t112)
|
||||
%t114 = load i32, i32* %t67
|
||||
%t115 = add i32 %t114, 1
|
||||
store i32 %t115, i32* %t67
|
||||
br label %while.cond.22
|
||||
while.end.24:
|
||||
call void @stoptime()
|
||||
%t117 = load i32, i32* %t65
|
||||
%t118 = getelementptr inbounds [2010 x i32], [2010 x i32]* @C, i32 0, i32 0
|
||||
call void @putarray(i32 %t117, i32* %t118)
|
||||
ret i32 0
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
@ -0,0 +1,490 @@
|
||||
@base = global i32 16
|
||||
@a = global [30000010 x i32] zeroinitializer
|
||||
@ans = global i32 0
|
||||
|
||||
declare i32 @getint()
|
||||
declare float @getfloat()
|
||||
declare i32 @getarray(i32* %arg.a)
|
||||
declare i32 @getfarray(float* %arg.a)
|
||||
declare i32 @getch()
|
||||
declare void @putint(i32 %arg.x)
|
||||
declare void @putfloat(float %arg.x)
|
||||
declare void @putarray(i32 %arg.n, i32* %arg.a)
|
||||
declare void @putfarray(i32 %arg.n, float* %arg.a)
|
||||
declare void @putch(i32 %arg.x)
|
||||
declare void @starttime()
|
||||
declare void @stoptime()
|
||||
define i32 @getMaxNum(i32 %arg.n, i32* %arg.arr) {
|
||||
entry:
|
||||
%t1 = alloca i32
|
||||
%t2 = alloca i32
|
||||
%t0 = alloca i32
|
||||
store i32 %arg.n, i32* %t0
|
||||
store i32 0, i32* %t1
|
||||
store i32 0, i32* %t2
|
||||
br label %while.cond.1
|
||||
while.cond.1:
|
||||
%t3 = load i32, i32* %t2
|
||||
%t4 = load i32, i32* %t0
|
||||
%t5 = icmp slt i32 %t3, %t4
|
||||
%t6 = zext i1 %t5 to i32
|
||||
%t7 = icmp ne i32 %t6, 0
|
||||
br i1 %t7, label %while.body.2, label %while.end.3
|
||||
while.body.2:
|
||||
%t8 = load i32, i32* %t2
|
||||
%t9 = getelementptr inbounds i32, i32* %arg.arr, i32 %t8
|
||||
%t10 = load i32, i32* %t9
|
||||
%t11 = load i32, i32* %t1
|
||||
%t12 = icmp sgt i32 %t10, %t11
|
||||
%t13 = zext i1 %t12 to i32
|
||||
%t14 = icmp ne i32 %t13, 0
|
||||
br i1 %t14, label %if.then.4, label %if.end.5
|
||||
while.end.3:
|
||||
%t20 = load i32, i32* %t1
|
||||
ret i32 %t20
|
||||
if.then.4:
|
||||
%t15 = load i32, i32* %t2
|
||||
%t16 = getelementptr inbounds i32, i32* %arg.arr, i32 %t15
|
||||
%t17 = load i32, i32* %t16
|
||||
store i32 %t17, i32* %t1
|
||||
br label %if.end.5
|
||||
if.end.5:
|
||||
%t18 = load i32, i32* %t2
|
||||
%t19 = add i32 %t18, 1
|
||||
store i32 %t19, i32* %t2
|
||||
br label %while.cond.1
|
||||
}
|
||||
define i32 @getNumPos(i32 %arg.num, i32 %arg.pos) {
|
||||
entry:
|
||||
%t23 = alloca i32
|
||||
%t24 = alloca i32
|
||||
%t21 = alloca i32
|
||||
store i32 %arg.num, i32* %t21
|
||||
%t22 = alloca i32
|
||||
store i32 %arg.pos, i32* %t22
|
||||
store i32 1, i32* %t23
|
||||
store i32 0, i32* %t24
|
||||
br label %while.cond.6
|
||||
while.cond.6:
|
||||
%t25 = load i32, i32* %t24
|
||||
%t26 = load i32, i32* %t22
|
||||
%t27 = icmp slt i32 %t25, %t26
|
||||
%t28 = zext i1 %t27 to i32
|
||||
%t29 = icmp ne i32 %t28, 0
|
||||
br i1 %t29, label %while.body.7, label %while.end.8
|
||||
while.body.7:
|
||||
%t30 = load i32, i32* %t21
|
||||
%t31 = sdiv i32 %t30, 16
|
||||
store i32 %t31, i32* %t21
|
||||
%t32 = load i32, i32* %t24
|
||||
%t33 = add i32 %t32, 1
|
||||
store i32 %t33, i32* %t24
|
||||
br label %while.cond.6
|
||||
while.end.8:
|
||||
%t34 = load i32, i32* %t21
|
||||
%t35 = srem i32 %t34, 16
|
||||
ret i32 %t35
|
||||
}
|
||||
define void @radixSort(i32 %arg.bitround, i32* %arg.a, i32 %arg.l, i32 %arg.r) {
|
||||
entry:
|
||||
%t39 = alloca i32, i32 16
|
||||
%t56 = alloca i32, i32 16
|
||||
%t73 = alloca i32, i32 16
|
||||
%t100 = alloca i32
|
||||
%t164 = alloca i32
|
||||
%t177 = alloca i32
|
||||
%t216 = alloca i32
|
||||
%t36 = alloca i32
|
||||
store i32 %arg.bitround, i32* %t36
|
||||
%t37 = alloca i32
|
||||
store i32 %arg.l, i32* %t37
|
||||
%t38 = alloca i32
|
||||
store i32 %arg.r, i32* %t38
|
||||
%t40 = getelementptr inbounds i32, i32* %t39, i32 0
|
||||
store i32 0, i32* %t40
|
||||
%t41 = getelementptr inbounds i32, i32* %t39, i32 1
|
||||
store i32 0, i32* %t41
|
||||
%t42 = getelementptr inbounds i32, i32* %t39, i32 2
|
||||
store i32 0, i32* %t42
|
||||
%t43 = getelementptr inbounds i32, i32* %t39, i32 3
|
||||
store i32 0, i32* %t43
|
||||
%t44 = getelementptr inbounds i32, i32* %t39, i32 4
|
||||
store i32 0, i32* %t44
|
||||
%t45 = getelementptr inbounds i32, i32* %t39, i32 5
|
||||
store i32 0, i32* %t45
|
||||
%t46 = getelementptr inbounds i32, i32* %t39, i32 6
|
||||
store i32 0, i32* %t46
|
||||
%t47 = getelementptr inbounds i32, i32* %t39, i32 7
|
||||
store i32 0, i32* %t47
|
||||
%t48 = getelementptr inbounds i32, i32* %t39, i32 8
|
||||
store i32 0, i32* %t48
|
||||
%t49 = getelementptr inbounds i32, i32* %t39, i32 9
|
||||
store i32 0, i32* %t49
|
||||
%t50 = getelementptr inbounds i32, i32* %t39, i32 10
|
||||
store i32 0, i32* %t50
|
||||
%t51 = getelementptr inbounds i32, i32* %t39, i32 11
|
||||
store i32 0, i32* %t51
|
||||
%t52 = getelementptr inbounds i32, i32* %t39, i32 12
|
||||
store i32 0, i32* %t52
|
||||
%t53 = getelementptr inbounds i32, i32* %t39, i32 13
|
||||
store i32 0, i32* %t53
|
||||
%t54 = getelementptr inbounds i32, i32* %t39, i32 14
|
||||
store i32 0, i32* %t54
|
||||
%t55 = getelementptr inbounds i32, i32* %t39, i32 15
|
||||
store i32 0, i32* %t55
|
||||
%t57 = getelementptr inbounds i32, i32* %t56, i32 0
|
||||
store i32 0, i32* %t57
|
||||
%t58 = getelementptr inbounds i32, i32* %t56, i32 1
|
||||
store i32 0, i32* %t58
|
||||
%t59 = getelementptr inbounds i32, i32* %t56, i32 2
|
||||
store i32 0, i32* %t59
|
||||
%t60 = getelementptr inbounds i32, i32* %t56, i32 3
|
||||
store i32 0, i32* %t60
|
||||
%t61 = getelementptr inbounds i32, i32* %t56, i32 4
|
||||
store i32 0, i32* %t61
|
||||
%t62 = getelementptr inbounds i32, i32* %t56, i32 5
|
||||
store i32 0, i32* %t62
|
||||
%t63 = getelementptr inbounds i32, i32* %t56, i32 6
|
||||
store i32 0, i32* %t63
|
||||
%t64 = getelementptr inbounds i32, i32* %t56, i32 7
|
||||
store i32 0, i32* %t64
|
||||
%t65 = getelementptr inbounds i32, i32* %t56, i32 8
|
||||
store i32 0, i32* %t65
|
||||
%t66 = getelementptr inbounds i32, i32* %t56, i32 9
|
||||
store i32 0, i32* %t66
|
||||
%t67 = getelementptr inbounds i32, i32* %t56, i32 10
|
||||
store i32 0, i32* %t67
|
||||
%t68 = getelementptr inbounds i32, i32* %t56, i32 11
|
||||
store i32 0, i32* %t68
|
||||
%t69 = getelementptr inbounds i32, i32* %t56, i32 12
|
||||
store i32 0, i32* %t69
|
||||
%t70 = getelementptr inbounds i32, i32* %t56, i32 13
|
||||
store i32 0, i32* %t70
|
||||
%t71 = getelementptr inbounds i32, i32* %t56, i32 14
|
||||
store i32 0, i32* %t71
|
||||
%t72 = getelementptr inbounds i32, i32* %t56, i32 15
|
||||
store i32 0, i32* %t72
|
||||
%t74 = getelementptr inbounds i32, i32* %t73, i32 0
|
||||
store i32 0, i32* %t74
|
||||
%t75 = getelementptr inbounds i32, i32* %t73, i32 1
|
||||
store i32 0, i32* %t75
|
||||
%t76 = getelementptr inbounds i32, i32* %t73, i32 2
|
||||
store i32 0, i32* %t76
|
||||
%t77 = getelementptr inbounds i32, i32* %t73, i32 3
|
||||
store i32 0, i32* %t77
|
||||
%t78 = getelementptr inbounds i32, i32* %t73, i32 4
|
||||
store i32 0, i32* %t78
|
||||
%t79 = getelementptr inbounds i32, i32* %t73, i32 5
|
||||
store i32 0, i32* %t79
|
||||
%t80 = getelementptr inbounds i32, i32* %t73, i32 6
|
||||
store i32 0, i32* %t80
|
||||
%t81 = getelementptr inbounds i32, i32* %t73, i32 7
|
||||
store i32 0, i32* %t81
|
||||
%t82 = getelementptr inbounds i32, i32* %t73, i32 8
|
||||
store i32 0, i32* %t82
|
||||
%t83 = getelementptr inbounds i32, i32* %t73, i32 9
|
||||
store i32 0, i32* %t83
|
||||
%t84 = getelementptr inbounds i32, i32* %t73, i32 10
|
||||
store i32 0, i32* %t84
|
||||
%t85 = getelementptr inbounds i32, i32* %t73, i32 11
|
||||
store i32 0, i32* %t85
|
||||
%t86 = getelementptr inbounds i32, i32* %t73, i32 12
|
||||
store i32 0, i32* %t86
|
||||
%t87 = getelementptr inbounds i32, i32* %t73, i32 13
|
||||
store i32 0, i32* %t87
|
||||
%t88 = getelementptr inbounds i32, i32* %t73, i32 14
|
||||
store i32 0, i32* %t88
|
||||
%t89 = getelementptr inbounds i32, i32* %t73, i32 15
|
||||
store i32 0, i32* %t89
|
||||
%t90 = load i32, i32* %t36
|
||||
%t91 = icmp eq i32 %t90, -1
|
||||
%t92 = zext i1 %t91 to i32
|
||||
%t93 = icmp ne i32 %t92, 0
|
||||
br i1 %t93, label %if.then.9, label %lor.rhs.11
|
||||
if.then.9:
|
||||
ret void
|
||||
if.end.10:
|
||||
%t101 = load i32, i32* %t37
|
||||
store i32 %t101, i32* %t100
|
||||
br label %while.cond.12
|
||||
lor.rhs.11:
|
||||
%t94 = load i32, i32* %t37
|
||||
%t95 = add i32 %t94, 1
|
||||
%t96 = load i32, i32* %t38
|
||||
%t97 = icmp sge i32 %t95, %t96
|
||||
%t98 = zext i1 %t97 to i32
|
||||
%t99 = icmp ne i32 %t98, 0
|
||||
br i1 %t99, label %if.then.9, label %if.end.10
|
||||
while.cond.12:
|
||||
%t102 = load i32, i32* %t100
|
||||
%t103 = load i32, i32* %t38
|
||||
%t104 = icmp slt i32 %t102, %t103
|
||||
%t105 = zext i1 %t104 to i32
|
||||
%t106 = icmp ne i32 %t105, 0
|
||||
br i1 %t106, label %while.body.13, label %while.end.14
|
||||
while.body.13:
|
||||
%t107 = load i32, i32* %t100
|
||||
%t108 = getelementptr inbounds i32, i32* %arg.a, i32 %t107
|
||||
%t109 = load i32, i32* %t108
|
||||
%t110 = load i32, i32* %t36
|
||||
%t111 = call i32 @getNumPos(i32 %t109, i32 %t110)
|
||||
%t112 = getelementptr inbounds i32, i32* %t73, i32 %t111
|
||||
%t113 = load i32, i32* %t100
|
||||
%t114 = getelementptr inbounds i32, i32* %arg.a, i32 %t113
|
||||
%t115 = load i32, i32* %t114
|
||||
%t116 = load i32, i32* %t36
|
||||
%t117 = call i32 @getNumPos(i32 %t115, i32 %t116)
|
||||
%t118 = getelementptr inbounds i32, i32* %t73, i32 %t117
|
||||
%t119 = load i32, i32* %t118
|
||||
%t120 = add i32 %t119, 1
|
||||
store i32 %t120, i32* %t112
|
||||
%t121 = load i32, i32* %t100
|
||||
%t122 = add i32 %t121, 1
|
||||
store i32 %t122, i32* %t100
|
||||
br label %while.cond.12
|
||||
while.end.14:
|
||||
%t123 = getelementptr inbounds i32, i32* %t39, i32 0
|
||||
%t124 = load i32, i32* %t37
|
||||
store i32 %t124, i32* %t123
|
||||
%t125 = getelementptr inbounds i32, i32* %t56, i32 0
|
||||
%t126 = load i32, i32* %t37
|
||||
%t127 = getelementptr inbounds i32, i32* %t73, i32 0
|
||||
%t128 = load i32, i32* %t127
|
||||
%t129 = add i32 %t126, %t128
|
||||
store i32 %t129, i32* %t125
|
||||
store i32 1, i32* %t100
|
||||
br label %while.cond.15
|
||||
while.cond.15:
|
||||
%t130 = load i32, i32* %t100
|
||||
%t131 = icmp slt i32 %t130, 16
|
||||
%t132 = zext i1 %t131 to i32
|
||||
%t133 = icmp ne i32 %t132, 0
|
||||
br i1 %t133, label %while.body.16, label %while.end.17
|
||||
while.body.16:
|
||||
%t134 = load i32, i32* %t100
|
||||
%t135 = getelementptr inbounds i32, i32* %t39, i32 %t134
|
||||
%t136 = load i32, i32* %t100
|
||||
%t137 = sub i32 %t136, 1
|
||||
%t138 = getelementptr inbounds i32, i32* %t56, i32 %t137
|
||||
%t139 = load i32, i32* %t138
|
||||
store i32 %t139, i32* %t135
|
||||
%t140 = load i32, i32* %t100
|
||||
%t141 = getelementptr inbounds i32, i32* %t56, i32 %t140
|
||||
%t142 = load i32, i32* %t100
|
||||
%t143 = getelementptr inbounds i32, i32* %t39, i32 %t142
|
||||
%t144 = load i32, i32* %t143
|
||||
%t145 = load i32, i32* %t100
|
||||
%t146 = getelementptr inbounds i32, i32* %t73, i32 %t145
|
||||
%t147 = load i32, i32* %t146
|
||||
%t148 = add i32 %t144, %t147
|
||||
store i32 %t148, i32* %t141
|
||||
%t149 = load i32, i32* %t100
|
||||
%t150 = add i32 %t149, 1
|
||||
store i32 %t150, i32* %t100
|
||||
br label %while.cond.15
|
||||
while.end.17:
|
||||
store i32 0, i32* %t100
|
||||
br label %while.cond.18
|
||||
while.cond.18:
|
||||
%t151 = load i32, i32* %t100
|
||||
%t152 = icmp slt i32 %t151, 16
|
||||
%t153 = zext i1 %t152 to i32
|
||||
%t154 = icmp ne i32 %t153, 0
|
||||
br i1 %t154, label %while.body.19, label %while.end.20
|
||||
while.body.19:
|
||||
br label %while.cond.21
|
||||
while.end.20:
|
||||
%t217 = load i32, i32* %t37
|
||||
store i32 %t217, i32* %t216
|
||||
%t218 = getelementptr inbounds i32, i32* %t39, i32 0
|
||||
%t219 = load i32, i32* %t37
|
||||
store i32 %t219, i32* %t218
|
||||
%t220 = getelementptr inbounds i32, i32* %t56, i32 0
|
||||
%t221 = load i32, i32* %t37
|
||||
%t222 = getelementptr inbounds i32, i32* %t73, i32 0
|
||||
%t223 = load i32, i32* %t222
|
||||
%t224 = add i32 %t221, %t223
|
||||
store i32 %t224, i32* %t220
|
||||
store i32 0, i32* %t216
|
||||
br label %while.cond.27
|
||||
while.cond.21:
|
||||
%t155 = load i32, i32* %t100
|
||||
%t156 = getelementptr inbounds i32, i32* %t39, i32 %t155
|
||||
%t157 = load i32, i32* %t156
|
||||
%t158 = load i32, i32* %t100
|
||||
%t159 = getelementptr inbounds i32, i32* %t56, i32 %t158
|
||||
%t160 = load i32, i32* %t159
|
||||
%t161 = icmp slt i32 %t157, %t160
|
||||
%t162 = zext i1 %t161 to i32
|
||||
%t163 = icmp ne i32 %t162, 0
|
||||
br i1 %t163, label %while.body.22, label %while.end.23
|
||||
while.body.22:
|
||||
%t165 = load i32, i32* %t100
|
||||
%t166 = getelementptr inbounds i32, i32* %t39, i32 %t165
|
||||
%t167 = load i32, i32* %t166
|
||||
%t168 = getelementptr inbounds i32, i32* %arg.a, i32 %t167
|
||||
%t169 = load i32, i32* %t168
|
||||
store i32 %t169, i32* %t164
|
||||
br label %while.cond.24
|
||||
while.end.23:
|
||||
%t214 = load i32, i32* %t100
|
||||
%t215 = add i32 %t214, 1
|
||||
store i32 %t215, i32* %t100
|
||||
br label %while.cond.18
|
||||
while.cond.24:
|
||||
%t170 = load i32, i32* %t164
|
||||
%t171 = load i32, i32* %t36
|
||||
%t172 = call i32 @getNumPos(i32 %t170, i32 %t171)
|
||||
%t173 = load i32, i32* %t100
|
||||
%t174 = icmp ne i32 %t172, %t173
|
||||
%t175 = zext i1 %t174 to i32
|
||||
%t176 = icmp ne i32 %t175, 0
|
||||
br i1 %t176, label %while.body.25, label %while.end.26
|
||||
while.body.25:
|
||||
%t178 = load i32, i32* %t164
|
||||
store i32 %t178, i32* %t177
|
||||
%t179 = load i32, i32* %t177
|
||||
%t180 = load i32, i32* %t36
|
||||
%t181 = call i32 @getNumPos(i32 %t179, i32 %t180)
|
||||
%t182 = getelementptr inbounds i32, i32* %t39, i32 %t181
|
||||
%t183 = load i32, i32* %t182
|
||||
%t184 = getelementptr inbounds i32, i32* %arg.a, i32 %t183
|
||||
%t185 = load i32, i32* %t184
|
||||
store i32 %t185, i32* %t164
|
||||
%t186 = load i32, i32* %t177
|
||||
%t187 = load i32, i32* %t36
|
||||
%t188 = call i32 @getNumPos(i32 %t186, i32 %t187)
|
||||
%t189 = getelementptr inbounds i32, i32* %t39, i32 %t188
|
||||
%t190 = load i32, i32* %t189
|
||||
%t191 = getelementptr inbounds i32, i32* %arg.a, i32 %t190
|
||||
%t192 = load i32, i32* %t177
|
||||
store i32 %t192, i32* %t191
|
||||
%t193 = load i32, i32* %t177
|
||||
%t194 = load i32, i32* %t36
|
||||
%t195 = call i32 @getNumPos(i32 %t193, i32 %t194)
|
||||
%t196 = getelementptr inbounds i32, i32* %t39, i32 %t195
|
||||
%t197 = load i32, i32* %t177
|
||||
%t198 = load i32, i32* %t36
|
||||
%t199 = call i32 @getNumPos(i32 %t197, i32 %t198)
|
||||
%t200 = getelementptr inbounds i32, i32* %t39, i32 %t199
|
||||
%t201 = load i32, i32* %t200
|
||||
%t202 = add i32 %t201, 1
|
||||
store i32 %t202, i32* %t196
|
||||
br label %while.cond.24
|
||||
while.end.26:
|
||||
%t203 = load i32, i32* %t100
|
||||
%t204 = getelementptr inbounds i32, i32* %t39, i32 %t203
|
||||
%t205 = load i32, i32* %t204
|
||||
%t206 = getelementptr inbounds i32, i32* %arg.a, i32 %t205
|
||||
%t207 = load i32, i32* %t164
|
||||
store i32 %t207, i32* %t206
|
||||
%t208 = load i32, i32* %t100
|
||||
%t209 = getelementptr inbounds i32, i32* %t39, i32 %t208
|
||||
%t210 = load i32, i32* %t100
|
||||
%t211 = getelementptr inbounds i32, i32* %t39, i32 %t210
|
||||
%t212 = load i32, i32* %t211
|
||||
%t213 = add i32 %t212, 1
|
||||
store i32 %t213, i32* %t209
|
||||
br label %while.cond.21
|
||||
while.cond.27:
|
||||
%t225 = load i32, i32* %t216
|
||||
%t226 = icmp slt i32 %t225, 16
|
||||
%t227 = zext i1 %t226 to i32
|
||||
%t228 = icmp ne i32 %t227, 0
|
||||
br i1 %t228, label %while.body.28, label %while.end.29
|
||||
while.body.28:
|
||||
%t229 = load i32, i32* %t216
|
||||
%t230 = icmp sgt i32 %t229, 0
|
||||
%t231 = zext i1 %t230 to i32
|
||||
%t232 = icmp ne i32 %t231, 0
|
||||
br i1 %t232, label %if.then.30, label %if.end.31
|
||||
while.end.29:
|
||||
ret void
|
||||
if.then.30:
|
||||
%t233 = load i32, i32* %t216
|
||||
%t234 = getelementptr inbounds i32, i32* %t39, i32 %t233
|
||||
%t235 = load i32, i32* %t216
|
||||
%t236 = sub i32 %t235, 1
|
||||
%t237 = getelementptr inbounds i32, i32* %t56, i32 %t236
|
||||
%t238 = load i32, i32* %t237
|
||||
store i32 %t238, i32* %t234
|
||||
%t239 = load i32, i32* %t216
|
||||
%t240 = getelementptr inbounds i32, i32* %t56, i32 %t239
|
||||
%t241 = load i32, i32* %t216
|
||||
%t242 = getelementptr inbounds i32, i32* %t39, i32 %t241
|
||||
%t243 = load i32, i32* %t242
|
||||
%t244 = load i32, i32* %t216
|
||||
%t245 = getelementptr inbounds i32, i32* %t73, i32 %t244
|
||||
%t246 = load i32, i32* %t245
|
||||
%t247 = add i32 %t243, %t246
|
||||
store i32 %t247, i32* %t240
|
||||
br label %if.end.31
|
||||
if.end.31:
|
||||
%t248 = load i32, i32* %t36
|
||||
%t249 = sub i32 %t248, 1
|
||||
%t250 = load i32, i32* %t216
|
||||
%t251 = getelementptr inbounds i32, i32* %t39, i32 %t250
|
||||
%t252 = load i32, i32* %t251
|
||||
%t253 = load i32, i32* %t216
|
||||
%t254 = getelementptr inbounds i32, i32* %t56, i32 %t253
|
||||
%t255 = load i32, i32* %t254
|
||||
call void @radixSort(i32 %t249, i32* %arg.a, i32 %t252, i32 %t255)
|
||||
%t257 = load i32, i32* %t216
|
||||
%t258 = add i32 %t257, 1
|
||||
store i32 %t258, i32* %t216
|
||||
br label %while.cond.27
|
||||
}
|
||||
define i32 @main() {
|
||||
entry:
|
||||
%t259 = alloca i32
|
||||
%t266 = alloca i32
|
||||
%t260 = getelementptr inbounds [30000010 x i32], [30000010 x i32]* @a, i32 0, i32 0
|
||||
%t261 = call i32 @getarray(i32* %t260)
|
||||
store i32 %t261, i32* %t259
|
||||
call void @starttime()
|
||||
%t263 = load i32, i32* %t259
|
||||
%t264 = getelementptr inbounds [30000010 x i32], [30000010 x i32]* @a, i32 0, i32 0
|
||||
call void @radixSort(i32 8, i32* %t264, i32 0, i32 %t263)
|
||||
store i32 0, i32* %t266
|
||||
br label %while.cond.32
|
||||
while.cond.32:
|
||||
%t267 = load i32, i32* %t266
|
||||
%t268 = load i32, i32* %t259
|
||||
%t269 = icmp slt i32 %t267, %t268
|
||||
%t270 = zext i1 %t269 to i32
|
||||
%t271 = icmp ne i32 %t270, 0
|
||||
br i1 %t271, label %while.body.33, label %while.end.34
|
||||
while.body.33:
|
||||
%t272 = load i32, i32* @ans
|
||||
%t273 = load i32, i32* %t266
|
||||
%t274 = load i32, i32* %t266
|
||||
%t275 = getelementptr inbounds [30000010 x i32], [30000010 x i32]* @a, i32 0, i32 %t274
|
||||
%t276 = load i32, i32* %t275
|
||||
%t277 = load i32, i32* %t266
|
||||
%t278 = add i32 2, %t277
|
||||
%t279 = srem i32 %t276, %t278
|
||||
%t280 = mul i32 %t273, %t279
|
||||
%t281 = add i32 %t272, %t280
|
||||
store i32 %t281, i32* @ans
|
||||
%t282 = load i32, i32* %t266
|
||||
%t283 = add i32 %t282, 1
|
||||
store i32 %t283, i32* %t266
|
||||
br label %while.cond.32
|
||||
while.end.34:
|
||||
%t284 = load i32, i32* @ans
|
||||
%t285 = icmp slt i32 %t284, 0
|
||||
%t286 = zext i1 %t285 to i32
|
||||
%t287 = icmp ne i32 %t286, 0
|
||||
br i1 %t287, label %if.then.35, label %if.end.36
|
||||
if.then.35:
|
||||
%t288 = load i32, i32* @ans
|
||||
%t289 = sub i32 0, %t288
|
||||
store i32 %t289, i32* @ans
|
||||
br label %if.end.36
|
||||
if.end.36:
|
||||
call void @stoptime()
|
||||
%t291 = load i32, i32* @ans
|
||||
call void @putint(i32 %t291)
|
||||
call void @putch(i32 10)
|
||||
ret i32 0
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
1576633458
|
||||
@ -0,0 +1,6 @@
|
||||
IR 已生成: ./lab2_results/test_case/performance/03_sort1.ll
|
||||
运行 ./lab2_results/test_case/performance/03_sort1 ...
|
||||
Total time: 0.450766 seconds
|
||||
1576633458
|
||||
退出码: 0
|
||||
输出匹配: ./test/test_case/performance/03_sort1.out
|
||||
Binary file not shown.
@ -0,0 +1,427 @@
|
||||
@A = global [1048576 x i32] zeroinitializer
|
||||
@B = global [1048576 x i32] zeroinitializer
|
||||
@C = global [1048576 x i32] zeroinitializer
|
||||
|
||||
declare i32 @getint()
|
||||
declare float @getfloat()
|
||||
declare i32 @getarray(i32* %arg.a)
|
||||
declare i32 @getfarray(float* %arg.a)
|
||||
declare i32 @getch()
|
||||
declare void @putint(i32 %arg.x)
|
||||
declare void @putfloat(float %arg.x)
|
||||
declare void @putarray(i32 %arg.n, i32* %arg.a)
|
||||
declare void @putfarray(i32 %arg.n, float* %arg.a)
|
||||
declare void @putch(i32 %arg.x)
|
||||
declare void @starttime()
|
||||
declare void @stoptime()
|
||||
define i32 @main() {
|
||||
entry:
|
||||
%t0 = alloca i32
|
||||
%t2 = alloca i32
|
||||
%t4 = alloca i32
|
||||
%t51 = alloca i32
|
||||
%t77 = alloca i32
|
||||
%t97 = alloca i32
|
||||
%t132 = alloca i32
|
||||
%t138 = alloca i32
|
||||
%t166 = alloca i32
|
||||
%t172 = alloca i32
|
||||
%t173 = alloca i32
|
||||
%t206 = alloca i32
|
||||
%t207 = alloca i32
|
||||
%t218 = alloca i32
|
||||
%t1 = call i32 @getint()
|
||||
store i32 %t1, i32* %t0
|
||||
%t3 = call i32 @getint()
|
||||
store i32 %t3, i32* %t2
|
||||
store i32 0, i32* %t4
|
||||
br label %while.cond.1
|
||||
while.cond.1:
|
||||
%t5 = load i32, i32* %t4
|
||||
%t6 = load i32, i32* %t0
|
||||
%t7 = icmp slt i32 %t5, %t6
|
||||
%t8 = zext i1 %t7 to i32
|
||||
%t9 = icmp ne i32 %t8, 0
|
||||
br i1 %t9, label %while.body.2, label %while.end.3
|
||||
while.body.2:
|
||||
%t10 = load i32, i32* %t4
|
||||
%t11 = load i32, i32* %t0
|
||||
%t12 = sdiv i32 %t11, 2
|
||||
%t13 = icmp slt i32 %t10, %t12
|
||||
%t14 = zext i1 %t13 to i32
|
||||
%t15 = icmp ne i32 %t14, 0
|
||||
br i1 %t15, label %if.then.4, label %if.end.5
|
||||
while.end.3:
|
||||
store i32 0, i32* %t4
|
||||
br label %while.cond.6
|
||||
if.then.4:
|
||||
%t16 = load i32, i32* %t4
|
||||
%t17 = mul i32 %t16, 1024
|
||||
%t18 = getelementptr inbounds [1048576 x i32], [1048576 x i32]* @A, i32 0, i32 %t17
|
||||
%t19 = call i32 @getarray(i32* %t18)
|
||||
br label %if.end.5
|
||||
if.end.5:
|
||||
%t20 = load i32, i32* %t4
|
||||
%t21 = add i32 %t20, 1
|
||||
store i32 %t21, i32* %t4
|
||||
br label %while.cond.1
|
||||
while.cond.6:
|
||||
%t22 = load i32, i32* %t4
|
||||
%t23 = load i32, i32* %t0
|
||||
%t24 = icmp slt i32 %t22, %t23
|
||||
%t25 = zext i1 %t24 to i32
|
||||
%t26 = icmp ne i32 %t25, 0
|
||||
br i1 %t26, label %while.body.7, label %while.end.8
|
||||
while.body.7:
|
||||
%t27 = load i32, i32* %t4
|
||||
%t28 = load i32, i32* %t0
|
||||
%t29 = sdiv i32 %t28, 2
|
||||
%t30 = icmp sge i32 %t27, %t29
|
||||
%t31 = zext i1 %t30 to i32
|
||||
%t32 = icmp ne i32 %t31, 0
|
||||
br i1 %t32, label %if.then.9, label %if.end.10
|
||||
while.end.8:
|
||||
call void @starttime()
|
||||
store i32 0, i32* %t4
|
||||
br label %while.cond.11
|
||||
if.then.9:
|
||||
%t33 = load i32, i32* %t4
|
||||
%t34 = mul i32 %t33, 1024
|
||||
%t35 = getelementptr inbounds [1048576 x i32], [1048576 x i32]* @B, i32 0, i32 %t34
|
||||
%t36 = call i32 @getarray(i32* %t35)
|
||||
br label %if.end.10
|
||||
if.end.10:
|
||||
%t37 = load i32, i32* %t4
|
||||
%t38 = add i32 %t37, 1
|
||||
store i32 %t38, i32* %t4
|
||||
br label %while.cond.6
|
||||
while.cond.11:
|
||||
%t40 = load i32, i32* %t4
|
||||
%t41 = load i32, i32* %t0
|
||||
%t42 = icmp slt i32 %t40, %t41
|
||||
%t43 = zext i1 %t42 to i32
|
||||
%t44 = icmp ne i32 %t43, 0
|
||||
br i1 %t44, label %while.body.12, label %while.end.13
|
||||
while.body.12:
|
||||
%t45 = load i32, i32* %t4
|
||||
%t46 = load i32, i32* %t0
|
||||
%t47 = sdiv i32 %t46, 2
|
||||
%t48 = icmp sge i32 %t45, %t47
|
||||
%t49 = zext i1 %t48 to i32
|
||||
%t50 = icmp ne i32 %t49, 0
|
||||
br i1 %t50, label %if.then.14, label %if.end.15
|
||||
while.end.13:
|
||||
store i32 0, i32* %t4
|
||||
br label %while.cond.19
|
||||
if.then.14:
|
||||
store i32 0, i32* %t51
|
||||
br label %while.cond.16
|
||||
if.end.15:
|
||||
%t64 = load i32, i32* %t4
|
||||
%t65 = add i32 %t64, 1
|
||||
store i32 %t65, i32* %t4
|
||||
br label %while.cond.11
|
||||
while.cond.16:
|
||||
%t52 = load i32, i32* %t51
|
||||
%t53 = load i32, i32* %t0
|
||||
%t54 = icmp slt i32 %t52, %t53
|
||||
%t55 = zext i1 %t54 to i32
|
||||
%t56 = icmp ne i32 %t55, 0
|
||||
br i1 %t56, label %while.body.17, label %while.end.18
|
||||
while.body.17:
|
||||
%t57 = load i32, i32* %t4
|
||||
%t58 = load i32, i32* %t51
|
||||
%t59 = mul i32 %t57, 1024
|
||||
%t60 = add i32 %t59, %t58
|
||||
%t61 = getelementptr inbounds [1048576 x i32], [1048576 x i32]* @A, i32 0, i32 %t60
|
||||
store i32 -1, i32* %t61
|
||||
%t62 = load i32, i32* %t51
|
||||
%t63 = add i32 %t62, 1
|
||||
store i32 %t63, i32* %t51
|
||||
br label %while.cond.16
|
||||
while.end.18:
|
||||
br label %if.end.15
|
||||
while.cond.19:
|
||||
%t66 = load i32, i32* %t4
|
||||
%t67 = load i32, i32* %t0
|
||||
%t68 = icmp slt i32 %t66, %t67
|
||||
%t69 = zext i1 %t68 to i32
|
||||
%t70 = icmp ne i32 %t69, 0
|
||||
br i1 %t70, label %while.body.20, label %while.end.21
|
||||
while.body.20:
|
||||
%t71 = load i32, i32* %t4
|
||||
%t72 = load i32, i32* %t0
|
||||
%t73 = sdiv i32 %t72, 2
|
||||
%t74 = icmp slt i32 %t71, %t73
|
||||
%t75 = zext i1 %t74 to i32
|
||||
%t76 = icmp ne i32 %t75, 0
|
||||
br i1 %t76, label %if.then.22, label %if.end.23
|
||||
while.end.21:
|
||||
store i32 0, i32* %t4
|
||||
br label %while.cond.27
|
||||
if.then.22:
|
||||
store i32 0, i32* %t77
|
||||
br label %while.cond.24
|
||||
if.end.23:
|
||||
%t90 = load i32, i32* %t4
|
||||
%t91 = add i32 %t90, 1
|
||||
store i32 %t91, i32* %t4
|
||||
br label %while.cond.19
|
||||
while.cond.24:
|
||||
%t78 = load i32, i32* %t77
|
||||
%t79 = load i32, i32* %t0
|
||||
%t80 = icmp slt i32 %t78, %t79
|
||||
%t81 = zext i1 %t80 to i32
|
||||
%t82 = icmp ne i32 %t81, 0
|
||||
br i1 %t82, label %while.body.25, label %while.end.26
|
||||
while.body.25:
|
||||
%t83 = load i32, i32* %t4
|
||||
%t84 = load i32, i32* %t77
|
||||
%t85 = mul i32 %t83, 1024
|
||||
%t86 = add i32 %t85, %t84
|
||||
%t87 = getelementptr inbounds [1048576 x i32], [1048576 x i32]* @B, i32 0, i32 %t86
|
||||
store i32 -1, i32* %t87
|
||||
%t88 = load i32, i32* %t77
|
||||
%t89 = add i32 %t88, 1
|
||||
store i32 %t89, i32* %t77
|
||||
br label %while.cond.24
|
||||
while.end.26:
|
||||
br label %if.end.23
|
||||
while.cond.27:
|
||||
%t92 = load i32, i32* %t4
|
||||
%t93 = load i32, i32* %t0
|
||||
%t94 = icmp slt i32 %t92, %t93
|
||||
%t95 = zext i1 %t94 to i32
|
||||
%t96 = icmp ne i32 %t95, 0
|
||||
br i1 %t96, label %while.body.28, label %while.end.29
|
||||
while.body.28:
|
||||
store i32 0, i32* %t97
|
||||
br label %while.cond.30
|
||||
while.end.29:
|
||||
store i32 0, i32* %t4
|
||||
br label %while.cond.33
|
||||
while.cond.30:
|
||||
%t98 = load i32, i32* %t97
|
||||
%t99 = load i32, i32* %t0
|
||||
%t100 = icmp slt i32 %t98, %t99
|
||||
%t101 = zext i1 %t100 to i32
|
||||
%t102 = icmp ne i32 %t101, 0
|
||||
br i1 %t102, label %while.body.31, label %while.end.32
|
||||
while.body.31:
|
||||
%t103 = load i32, i32* %t4
|
||||
%t104 = load i32, i32* %t97
|
||||
%t105 = mul i32 %t103, 1024
|
||||
%t106 = add i32 %t105, %t104
|
||||
%t107 = getelementptr inbounds [1048576 x i32], [1048576 x i32]* @C, i32 0, i32 %t106
|
||||
%t108 = load i32, i32* %t4
|
||||
%t109 = load i32, i32* %t97
|
||||
%t110 = mul i32 %t108, 1024
|
||||
%t111 = add i32 %t110, %t109
|
||||
%t112 = getelementptr inbounds [1048576 x i32], [1048576 x i32]* @A, i32 0, i32 %t111
|
||||
%t113 = load i32, i32* %t112
|
||||
%t114 = mul i32 %t113, 2
|
||||
%t115 = load i32, i32* %t4
|
||||
%t116 = load i32, i32* %t97
|
||||
%t117 = mul i32 %t115, 1024
|
||||
%t118 = add i32 %t117, %t116
|
||||
%t119 = getelementptr inbounds [1048576 x i32], [1048576 x i32]* @B, i32 0, i32 %t118
|
||||
%t120 = load i32, i32* %t119
|
||||
%t121 = mul i32 %t120, 3
|
||||
%t122 = add i32 %t114, %t121
|
||||
store i32 %t122, i32* %t107
|
||||
%t123 = load i32, i32* %t97
|
||||
%t124 = add i32 %t123, 1
|
||||
store i32 %t124, i32* %t97
|
||||
br label %while.cond.30
|
||||
while.end.32:
|
||||
%t125 = load i32, i32* %t4
|
||||
%t126 = add i32 %t125, 1
|
||||
store i32 %t126, i32* %t4
|
||||
br label %while.cond.27
|
||||
while.cond.33:
|
||||
%t127 = load i32, i32* %t4
|
||||
%t128 = load i32, i32* %t0
|
||||
%t129 = icmp slt i32 %t127, %t128
|
||||
%t130 = zext i1 %t129 to i32
|
||||
%t131 = icmp ne i32 %t130, 0
|
||||
br i1 %t131, label %while.body.34, label %while.end.35
|
||||
while.body.34:
|
||||
store i32 0, i32* %t132
|
||||
br label %while.cond.36
|
||||
while.end.35:
|
||||
store i32 0, i32* %t4
|
||||
br label %while.cond.39
|
||||
while.cond.36:
|
||||
%t133 = load i32, i32* %t132
|
||||
%t134 = load i32, i32* %t0
|
||||
%t135 = icmp slt i32 %t133, %t134
|
||||
%t136 = zext i1 %t135 to i32
|
||||
%t137 = icmp ne i32 %t136, 0
|
||||
br i1 %t137, label %while.body.37, label %while.end.38
|
||||
while.body.37:
|
||||
%t139 = load i32, i32* %t4
|
||||
%t140 = load i32, i32* %t132
|
||||
%t141 = mul i32 %t139, 1024
|
||||
%t142 = add i32 %t141, %t140
|
||||
%t143 = getelementptr inbounds [1048576 x i32], [1048576 x i32]* @C, i32 0, i32 %t142
|
||||
%t144 = load i32, i32* %t143
|
||||
store i32 %t144, i32* %t138
|
||||
%t145 = load i32, i32* %t138
|
||||
%t146 = load i32, i32* %t138
|
||||
%t147 = mul i32 %t145, %t146
|
||||
%t148 = add i32 %t147, 7
|
||||
store i32 %t148, i32* %t138
|
||||
%t149 = load i32, i32* %t138
|
||||
%t150 = sdiv i32 %t149, 3
|
||||
store i32 %t150, i32* %t138
|
||||
%t151 = load i32, i32* %t4
|
||||
%t152 = load i32, i32* %t132
|
||||
%t153 = mul i32 %t151, 1024
|
||||
%t154 = add i32 %t153, %t152
|
||||
%t155 = getelementptr inbounds [1048576 x i32], [1048576 x i32]* @C, i32 0, i32 %t154
|
||||
%t156 = load i32, i32* %t138
|
||||
store i32 %t156, i32* %t155
|
||||
%t157 = load i32, i32* %t132
|
||||
%t158 = add i32 %t157, 1
|
||||
store i32 %t158, i32* %t132
|
||||
br label %while.cond.36
|
||||
while.end.38:
|
||||
%t159 = load i32, i32* %t4
|
||||
%t160 = add i32 %t159, 1
|
||||
store i32 %t160, i32* %t4
|
||||
br label %while.cond.33
|
||||
while.cond.39:
|
||||
%t161 = load i32, i32* %t4
|
||||
%t162 = load i32, i32* %t0
|
||||
%t163 = icmp slt i32 %t161, %t162
|
||||
%t164 = zext i1 %t163 to i32
|
||||
%t165 = icmp ne i32 %t164, 0
|
||||
br i1 %t165, label %while.body.40, label %while.end.41
|
||||
while.body.40:
|
||||
store i32 0, i32* %t166
|
||||
br label %while.cond.42
|
||||
while.end.41:
|
||||
store i32 0, i32* %t206
|
||||
store i32 0, i32* %t207
|
||||
br label %while.cond.48
|
||||
while.cond.42:
|
||||
%t167 = load i32, i32* %t166
|
||||
%t168 = load i32, i32* %t0
|
||||
%t169 = icmp slt i32 %t167, %t168
|
||||
%t170 = zext i1 %t169 to i32
|
||||
%t171 = icmp ne i32 %t170, 0
|
||||
br i1 %t171, label %while.body.43, label %while.end.44
|
||||
while.body.43:
|
||||
store i32 0, i32* %t172
|
||||
store i32 0, i32* %t173
|
||||
br label %while.cond.45
|
||||
while.end.44:
|
||||
%t204 = load i32, i32* %t4
|
||||
%t205 = add i32 %t204, 1
|
||||
store i32 %t205, i32* %t4
|
||||
br label %while.cond.39
|
||||
while.cond.45:
|
||||
%t174 = load i32, i32* %t172
|
||||
%t175 = load i32, i32* %t0
|
||||
%t176 = icmp slt i32 %t174, %t175
|
||||
%t177 = zext i1 %t176 to i32
|
||||
%t178 = icmp ne i32 %t177, 0
|
||||
br i1 %t178, label %while.body.46, label %while.end.47
|
||||
while.body.46:
|
||||
%t179 = load i32, i32* %t173
|
||||
%t180 = load i32, i32* %t4
|
||||
%t181 = load i32, i32* %t172
|
||||
%t182 = mul i32 %t180, 1024
|
||||
%t183 = add i32 %t182, %t181
|
||||
%t184 = getelementptr inbounds [1048576 x i32], [1048576 x i32]* @C, i32 0, i32 %t183
|
||||
%t185 = load i32, i32* %t184
|
||||
%t186 = load i32, i32* %t172
|
||||
%t187 = load i32, i32* %t166
|
||||
%t188 = mul i32 %t186, 1024
|
||||
%t189 = add i32 %t188, %t187
|
||||
%t190 = getelementptr inbounds [1048576 x i32], [1048576 x i32]* @A, i32 0, i32 %t189
|
||||
%t191 = load i32, i32* %t190
|
||||
%t192 = mul i32 %t185, %t191
|
||||
%t193 = add i32 %t179, %t192
|
||||
store i32 %t193, i32* %t173
|
||||
%t194 = load i32, i32* %t172
|
||||
%t195 = add i32 %t194, 1
|
||||
store i32 %t195, i32* %t172
|
||||
br label %while.cond.45
|
||||
while.end.47:
|
||||
%t196 = load i32, i32* %t4
|
||||
%t197 = load i32, i32* %t166
|
||||
%t198 = mul i32 %t196, 1024
|
||||
%t199 = add i32 %t198, %t197
|
||||
%t200 = getelementptr inbounds [1048576 x i32], [1048576 x i32]* @A, i32 0, i32 %t199
|
||||
%t201 = load i32, i32* %t173
|
||||
store i32 %t201, i32* %t200
|
||||
%t202 = load i32, i32* %t166
|
||||
%t203 = add i32 %t202, 1
|
||||
store i32 %t203, i32* %t166
|
||||
br label %while.cond.42
|
||||
while.cond.48:
|
||||
%t208 = load i32, i32* %t207
|
||||
%t209 = load i32, i32* %t2
|
||||
%t210 = icmp slt i32 %t208, %t209
|
||||
%t211 = zext i1 %t210 to i32
|
||||
%t212 = icmp ne i32 %t211, 0
|
||||
br i1 %t212, label %while.body.49, label %while.end.50
|
||||
while.body.49:
|
||||
store i32 0, i32* %t4
|
||||
br label %while.cond.51
|
||||
while.end.50:
|
||||
call void @stoptime()
|
||||
%t246 = load i32, i32* %t206
|
||||
call void @putint(i32 %t246)
|
||||
call void @putch(i32 10)
|
||||
ret i32 0
|
||||
while.cond.51:
|
||||
%t213 = load i32, i32* %t4
|
||||
%t214 = load i32, i32* %t0
|
||||
%t215 = icmp slt i32 %t213, %t214
|
||||
%t216 = zext i1 %t215 to i32
|
||||
%t217 = icmp ne i32 %t216, 0
|
||||
br i1 %t217, label %while.body.52, label %while.end.53
|
||||
while.body.52:
|
||||
store i32 0, i32* %t218
|
||||
br label %while.cond.54
|
||||
while.end.53:
|
||||
%t243 = load i32, i32* %t207
|
||||
%t244 = add i32 %t243, 1
|
||||
store i32 %t244, i32* %t207
|
||||
br label %while.cond.48
|
||||
while.cond.54:
|
||||
%t219 = load i32, i32* %t218
|
||||
%t220 = load i32, i32* %t0
|
||||
%t221 = icmp slt i32 %t219, %t220
|
||||
%t222 = zext i1 %t221 to i32
|
||||
%t223 = icmp ne i32 %t222, 0
|
||||
br i1 %t223, label %while.body.55, label %while.end.56
|
||||
while.body.55:
|
||||
%t224 = load i32, i32* %t206
|
||||
%t225 = load i32, i32* %t4
|
||||
%t226 = load i32, i32* %t218
|
||||
%t227 = mul i32 %t225, 1024
|
||||
%t228 = add i32 %t227, %t226
|
||||
%t229 = getelementptr inbounds [1048576 x i32], [1048576 x i32]* @A, i32 0, i32 %t228
|
||||
%t230 = load i32, i32* %t229
|
||||
%t231 = load i32, i32* %t4
|
||||
%t232 = load i32, i32* %t218
|
||||
%t233 = mul i32 %t231, 1024
|
||||
%t234 = add i32 %t233, %t232
|
||||
%t235 = getelementptr inbounds [1048576 x i32], [1048576 x i32]* @A, i32 0, i32 %t234
|
||||
%t236 = load i32, i32* %t235
|
||||
%t237 = mul i32 %t230, %t236
|
||||
%t238 = add i32 %t224, %t237
|
||||
store i32 %t238, i32* %t206
|
||||
%t239 = load i32, i32* %t218
|
||||
%t240 = add i32 %t239, 1
|
||||
store i32 %t240, i32* %t218
|
||||
br label %while.cond.54
|
||||
while.end.56:
|
||||
%t241 = load i32, i32* %t4
|
||||
%t242 = add i32 %t241, 1
|
||||
store i32 %t242, i32* %t4
|
||||
br label %while.cond.51
|
||||
}
|
||||
@ -0,0 +1,2 @@
|
||||
IR 已生成: ./lab2_results/test_case/performance/2025-MYO-20.ll
|
||||
运行 ./lab2_results/test_case/performance/2025-MYO-20 ...
|
||||
Binary file not shown.
@ -0,0 +1,10 @@
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
mov w0, #3
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
Binary file not shown.
Binary file not shown.
@ -0,0 +1,87 @@
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #80
|
||||
mov w8, #893
|
||||
stur w8, [x29, #-4]
|
||||
mov w8, #716
|
||||
stur w8, [x29, #-8]
|
||||
mov w8, #837
|
||||
stur w8, [x29, #-12]
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-24]
|
||||
ldur w8, [x29, #-24]
|
||||
mov w9, #128
|
||||
add w8, w8, w9
|
||||
stur w8, [x29, #-12]
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-28]
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-32]
|
||||
ldur w8, [x29, #-28]
|
||||
ldur w9, [x29, #-32]
|
||||
add w8, w8, w9
|
||||
stur w8, [x29, #-8]
|
||||
mov w8, #241
|
||||
stur w8, [x29, #-16]
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-36]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-40]
|
||||
ldur w8, [x29, #-36]
|
||||
ldur w10, [x29, #-40]
|
||||
add w8, w8, w10
|
||||
mov w9, #412
|
||||
sub w8, w8, w9
|
||||
stur w8, [x29, #-12]
|
||||
mov w8, #771
|
||||
stur w8, [x29, #-20]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-44]
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-48]
|
||||
ldur w8, [x29, #-44]
|
||||
ldur w10, [x29, #-48]
|
||||
add w8, w8, w10
|
||||
mov w9, #18
|
||||
sub w8, w8, w9
|
||||
stur w8, [x29, #-16]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-52]
|
||||
ldur w8, [x29, #-52]
|
||||
mov w9, #66
|
||||
add w8, w8, w9
|
||||
stur w8, [x29, #-20]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-56]
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-60]
|
||||
ldur w8, [x29, #-56]
|
||||
ldur w10, [x29, #-60]
|
||||
add w8, w8, w10
|
||||
mov w9, #33
|
||||
sub w8, w8, w9
|
||||
stur w8, [x29, #-16]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-64]
|
||||
ldur w8, [x29, #-64]
|
||||
mov w9, #55
|
||||
sub w8, w8, w9
|
||||
stur w8, [x29, #-12]
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-68]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-72]
|
||||
ldur w0, [x29, #-68]
|
||||
ldur w9, [x29, #-72]
|
||||
add w0, w0, w9
|
||||
mov w8, #21
|
||||
sdiv w12, w0, w8
|
||||
msub w0, w12, w8, w0
|
||||
add sp, sp, #80
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
Binary file not shown.
@ -0,0 +1,265 @@
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #128
|
||||
mov w8, #1
|
||||
stur w8, [x29, #-4]
|
||||
mov w8, #2
|
||||
stur w8, [x29, #-8]
|
||||
mov w8, #3
|
||||
stur w8, [x29, #-12]
|
||||
mov w8, #4
|
||||
stur w8, [x29, #-16]
|
||||
mov w8, #5
|
||||
stur w8, [x29, #-20]
|
||||
mov w8, #6
|
||||
stur w8, [x29, #-24]
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-28]
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-32]
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-36]
|
||||
ldur w8, [x29, #-28]
|
||||
ldur w11, [x29, #-32]
|
||||
mul w8, w8, w11
|
||||
ldur w10, [x29, #-36]
|
||||
add w8, w8, w10
|
||||
mov w9, #6
|
||||
cmp w8, w9
|
||||
b.lt .L.main.4
|
||||
b .L.main.2
|
||||
.L.main.1:
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-40]
|
||||
ldur w8, [x29, #-40]
|
||||
mov w9, #0
|
||||
cmp w8, w9
|
||||
b.ne .L.main.5
|
||||
b .L.main.8
|
||||
.L.main.2:
|
||||
mov w0, #1
|
||||
add sp, sp, #128
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.main.3:
|
||||
mov w0, #0
|
||||
add sp, sp, #128
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.main.4:
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-44]
|
||||
ldur w8, [x29, #-44]
|
||||
mov w9, #0
|
||||
cmp w8, w9
|
||||
b.ne .L.main.1
|
||||
b .L.main.2
|
||||
.L.main.5:
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-48]
|
||||
ldur w8, [x29, #-48]
|
||||
mov w9, #2
|
||||
cmp w8, w9
|
||||
b.eq .L.main.12
|
||||
b .L.main.10
|
||||
.L.main.6:
|
||||
mov w0, #2
|
||||
add sp, sp, #128
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.main.7:
|
||||
mov w0, #0
|
||||
add sp, sp, #128
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.main.8:
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-52]
|
||||
ldur w8, [x29, #-52]
|
||||
mov w9, #0
|
||||
cmp w8, w9
|
||||
b.eq .L.main.5
|
||||
b .L.main.6
|
||||
.L.main.9:
|
||||
mov w0, #3
|
||||
add sp, sp, #128
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.main.10:
|
||||
ldur w8, [x29, #-24]
|
||||
stur w8, [x29, #-56]
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-60]
|
||||
ldur w8, [x29, #-56]
|
||||
ldur w9, [x29, #-60]
|
||||
sdiv w12, w8, w9
|
||||
msub w8, w12, w9, w8
|
||||
mov w9, #0
|
||||
cmp w8, w9
|
||||
b.ne .L.main.16
|
||||
b .L.main.14
|
||||
.L.main.11:
|
||||
mov w0, #0
|
||||
add sp, sp, #128
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.main.12:
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-64]
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-68]
|
||||
ldur w8, [x29, #-64]
|
||||
ldur w10, [x29, #-68]
|
||||
add w8, w8, w10
|
||||
mov w9, #2
|
||||
cmp w8, w9
|
||||
b.gt .L.main.9
|
||||
b .L.main.10
|
||||
.L.main.13:
|
||||
mov w0, #4
|
||||
add sp, sp, #128
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.main.14:
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-72]
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-76]
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-80]
|
||||
ldur w8, [x29, #-72]
|
||||
ldur w11, [x29, #-76]
|
||||
sdiv w8, w8, w11
|
||||
ldur w10, [x29, #-80]
|
||||
add w8, w8, w10
|
||||
mov w9, #2
|
||||
cmp w8, w9
|
||||
b.ge .L.main.17
|
||||
b .L.main.18
|
||||
.L.main.15:
|
||||
mov w0, #0
|
||||
add sp, sp, #128
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.main.16:
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-84]
|
||||
ldur w8, [x29, #-84]
|
||||
mov w9, #0
|
||||
cmp w8, w9
|
||||
b.ne .L.main.13
|
||||
b .L.main.14
|
||||
.L.main.17:
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-88]
|
||||
ldur w8, [x29, #-24]
|
||||
stur w8, [x29, #-92]
|
||||
ldur w8, [x29, #-88]
|
||||
ldur w10, [x29, #-92]
|
||||
sub w8, w8, w10
|
||||
mov w9, #0
|
||||
cmp w8, w9
|
||||
b.ge .L.main.20
|
||||
b .L.main.23
|
||||
.L.main.18:
|
||||
mov w0, #5
|
||||
add sp, sp, #128
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.main.19:
|
||||
mov w0, #0
|
||||
add sp, sp, #128
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.main.20:
|
||||
mov w0, #6
|
||||
add sp, sp, #128
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.main.21:
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-96]
|
||||
ldur w8, [x29, #-24]
|
||||
stur w8, [x29, #-100]
|
||||
ldur w8, [x29, #-96]
|
||||
ldur w9, [x29, #-100]
|
||||
cmp w8, w9
|
||||
b.ne .L.main.24
|
||||
b .L.main.25
|
||||
.L.main.22:
|
||||
mov w0, #0
|
||||
add sp, sp, #128
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.main.23:
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-104]
|
||||
ldur w8, [x29, #-104]
|
||||
mov w9, #4
|
||||
cmp w8, w9
|
||||
b.gt .L.main.20
|
||||
b .L.main.21
|
||||
.L.main.24:
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-108]
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-112]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-116]
|
||||
ldur w8, [x29, #-108]
|
||||
ldur w10, [x29, #-112]
|
||||
ldur w11, [x29, #-116]
|
||||
mul w10, w10, w11
|
||||
add w8, w8, w10
|
||||
mov w9, #10
|
||||
cmp w8, w9
|
||||
b.gt .L.main.27
|
||||
b .L.main.28
|
||||
.L.main.25:
|
||||
mov w0, #7
|
||||
add sp, sp, #128
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.main.26:
|
||||
mov w0, #0
|
||||
add sp, sp, #128
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.main.27:
|
||||
ldur w8, [x29, #-24]
|
||||
stur w8, [x29, #-120]
|
||||
ldur w8, [x29, #-120]
|
||||
mov w9, #0
|
||||
cmp w8, w9
|
||||
b.eq .L.main.30
|
||||
b .L.main.31
|
||||
.L.main.28:
|
||||
mov w0, #8
|
||||
add sp, sp, #128
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.main.29:
|
||||
mov w0, #0
|
||||
add sp, sp, #128
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.main.30:
|
||||
mov w0, #9
|
||||
add sp, sp, #128
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.main.31:
|
||||
mov w0, #10
|
||||
add sp, sp, #128
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.main.32:
|
||||
mov w0, #0
|
||||
add sp, sp, #128
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
Binary file not shown.
@ -0,0 +1,194 @@
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #96
|
||||
mov w8, #0
|
||||
stur w8, [x29, #-4]
|
||||
mov w8, #0
|
||||
stur w8, [x29, #-8]
|
||||
b .L.main.1
|
||||
.L.main.1:
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-28]
|
||||
ldur w8, [x29, #-28]
|
||||
mov w9, #20
|
||||
cmp w8, w9
|
||||
b.lt .L.main.2
|
||||
b .L.main.3
|
||||
.L.main.2:
|
||||
mov w8, #0
|
||||
stur w8, [x29, #-12]
|
||||
b .L.main.4
|
||||
.L.main.3:
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-32]
|
||||
ldur w0, [x29, #-32]
|
||||
add sp, sp, #96
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.main.4:
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-36]
|
||||
ldur w8, [x29, #-36]
|
||||
mov w9, #10
|
||||
cmp w8, w9
|
||||
b.lt .L.main.5
|
||||
b .L.main.6
|
||||
.L.main.5:
|
||||
mov w8, #0
|
||||
stur w8, [x29, #-16]
|
||||
b .L.main.7
|
||||
.L.main.6:
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-40]
|
||||
ldur w8, [x29, #-40]
|
||||
mov w9, #1
|
||||
add w8, w8, w9
|
||||
stur w8, [x29, #-8]
|
||||
b .L.main.1
|
||||
.L.main.7:
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-44]
|
||||
ldur w8, [x29, #-44]
|
||||
mov w9, #5
|
||||
cmp w8, w9
|
||||
b.lt .L.main.8
|
||||
b .L.main.9
|
||||
.L.main.8:
|
||||
mov w8, #0
|
||||
stur w8, [x29, #-20]
|
||||
b .L.main.10
|
||||
.L.main.9:
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-48]
|
||||
ldur w8, [x29, #-48]
|
||||
mov w9, #1
|
||||
add w8, w8, w9
|
||||
stur w8, [x29, #-12]
|
||||
b .L.main.4
|
||||
.L.main.10:
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-52]
|
||||
ldur w8, [x29, #-52]
|
||||
mov w9, #3
|
||||
cmp w8, w9
|
||||
b.lt .L.main.11
|
||||
b .L.main.12
|
||||
.L.main.11:
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-56]
|
||||
ldur w8, [x29, #-56]
|
||||
mov w10, #1
|
||||
add w8, w8, w10
|
||||
mov w9, #3
|
||||
cmp w8, w9
|
||||
b.ge .L.main.13
|
||||
b .L.main.14
|
||||
.L.main.12:
|
||||
b .L.main.25
|
||||
.L.main.13:
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-60]
|
||||
ldur w8, [x29, #-60]
|
||||
mov w9, #0
|
||||
cmp w8, w9
|
||||
b.ne .L.main.15
|
||||
b .L.main.16
|
||||
.L.main.14:
|
||||
mov w8, #0
|
||||
stur w8, [x29, #-24]
|
||||
b .L.main.22
|
||||
.L.main.15:
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-64]
|
||||
ldur w8, [x29, #-64]
|
||||
mov w9, #0
|
||||
cmp w8, w9
|
||||
b.ne .L.main.17
|
||||
b .L.main.19
|
||||
.L.main.16:
|
||||
b .L.main.14
|
||||
.L.main.17:
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-68]
|
||||
ldur w8, [x29, #-68]
|
||||
mov w10, #-1
|
||||
sub w8, w8, w10
|
||||
mov w9, #3
|
||||
cmp w8, w9
|
||||
b.ge .L.main.20
|
||||
b .L.main.21
|
||||
.L.main.18:
|
||||
b .L.main.16
|
||||
.L.main.19:
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-72]
|
||||
ldur w8, [x29, #-72]
|
||||
mov w9, #0
|
||||
cmp w8, w9
|
||||
b.eq .L.main.17
|
||||
b .L.main.18
|
||||
.L.main.20:
|
||||
b .L.main.12
|
||||
.L.main.21:
|
||||
b .L.main.18
|
||||
.L.main.22:
|
||||
ldur w8, [x29, #-24]
|
||||
stur w8, [x29, #-76]
|
||||
ldur w8, [x29, #-76]
|
||||
mov w9, #2
|
||||
cmp w8, w9
|
||||
b.lt .L.main.23
|
||||
b .L.main.24
|
||||
.L.main.23:
|
||||
ldur w8, [x29, #-24]
|
||||
stur w8, [x29, #-80]
|
||||
ldur w8, [x29, #-80]
|
||||
mov w9, #1
|
||||
add w8, w8, w9
|
||||
stur w8, [x29, #-24]
|
||||
b .L.main.22
|
||||
.L.main.24:
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-84]
|
||||
ldur w8, [x29, #-84]
|
||||
mov w9, #1
|
||||
add w8, w8, w9
|
||||
stur w8, [x29, #-20]
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-88]
|
||||
ldur w8, [x29, #-88]
|
||||
mov w9, #1
|
||||
add w8, w8, w9
|
||||
stur w8, [x29, #-4]
|
||||
b .L.main.10
|
||||
.L.main.25:
|
||||
mov w8, #1
|
||||
mov w9, #0
|
||||
cmp w8, w9
|
||||
b.ne .L.main.26
|
||||
b .L.main.27
|
||||
.L.main.26:
|
||||
b .L.main.28
|
||||
.L.main.27:
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-92]
|
||||
ldur w8, [x29, #-92]
|
||||
mov w9, #1
|
||||
add w8, w8, w9
|
||||
stur w8, [x29, #-16]
|
||||
b .L.main.7
|
||||
.L.main.28:
|
||||
mov w8, #1
|
||||
mov w9, #0
|
||||
cmp w8, w9
|
||||
b.ne .L.main.29
|
||||
b .L.main.30
|
||||
.L.main.29:
|
||||
b .L.main.30
|
||||
.L.main.30:
|
||||
b .L.main.27
|
||||
Binary file not shown.
@ -0,0 +1,35 @@
|
||||
.text
|
||||
.globl f
|
||||
.p2align 2
|
||||
f:
|
||||
.L.f.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #16
|
||||
stur w0, [x29, #-4]
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-8]
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-12]
|
||||
ldur w0, [x29, #-12]
|
||||
mov w8, #2
|
||||
lsl w0, w0, #1
|
||||
add sp, sp, #16
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #16
|
||||
mov w0, #10
|
||||
bl f
|
||||
stur w0, [x29, #-4]
|
||||
ldur w0, [x29, #-4]
|
||||
add sp, sp, #16
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
Binary file not shown.
@ -0,0 +1,27 @@
|
||||
.text
|
||||
.globl f
|
||||
.p2align 2
|
||||
f:
|
||||
.L.f.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
mov w0, #10
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #16
|
||||
mov w8, #20
|
||||
stur w8, [x29, #-4]
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-8]
|
||||
ldur w0, [x29, #-8]
|
||||
add sp, sp, #16
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
Binary file not shown.
@ -0,0 +1,594 @@
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #528
|
||||
mov x15, x29
|
||||
sub x15, x15, #124
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #124
|
||||
mov x14, #4
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #124
|
||||
mov x14, #8
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #124
|
||||
mov x14, #12
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #124
|
||||
mov x14, #16
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #124
|
||||
mov x14, #20
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #124
|
||||
mov x14, #24
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #124
|
||||
mov x14, #28
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #124
|
||||
mov x14, #32
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #124
|
||||
mov x14, #36
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #124
|
||||
mov x14, #40
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #124
|
||||
mov x14, #44
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #124
|
||||
mov x14, #48
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #124
|
||||
mov x14, #52
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #124
|
||||
mov x14, #56
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #188
|
||||
mov w8, #1
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #188
|
||||
mov x14, #4
|
||||
add x15, x15, x14
|
||||
mov w8, #2
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #188
|
||||
mov x14, #8
|
||||
add x15, x15, x14
|
||||
mov w8, #3
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #188
|
||||
mov x14, #12
|
||||
add x15, x15, x14
|
||||
mov w8, #4
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #188
|
||||
mov x14, #16
|
||||
add x15, x15, x14
|
||||
mov w8, #5
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #188
|
||||
mov x14, #20
|
||||
add x15, x15, x14
|
||||
mov w8, #6
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #188
|
||||
mov x14, #24
|
||||
add x15, x15, x14
|
||||
mov w8, #7
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #188
|
||||
mov x14, #28
|
||||
add x15, x15, x14
|
||||
mov w8, #8
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #188
|
||||
mov x14, #32
|
||||
add x15, x15, x14
|
||||
mov w8, #9
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #188
|
||||
mov x14, #36
|
||||
add x15, x15, x14
|
||||
mov w8, #10
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #188
|
||||
mov x14, #40
|
||||
add x15, x15, x14
|
||||
mov w8, #11
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #188
|
||||
mov x14, #44
|
||||
add x15, x15, x14
|
||||
mov w8, #12
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #188
|
||||
mov x14, #48
|
||||
add x15, x15, x14
|
||||
mov w8, #13
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #188
|
||||
mov x14, #52
|
||||
add x15, x15, x14
|
||||
mov w8, #14
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #188
|
||||
mov x14, #56
|
||||
add x15, x15, x14
|
||||
mov w8, #15
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #252
|
||||
mov w8, #1
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #252
|
||||
mov x14, #4
|
||||
add x15, x15, x14
|
||||
mov w8, #2
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #252
|
||||
mov x14, #8
|
||||
add x15, x15, x14
|
||||
mov w8, #3
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #252
|
||||
mov x14, #12
|
||||
add x15, x15, x14
|
||||
mov w8, #4
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #252
|
||||
mov x14, #16
|
||||
add x15, x15, x14
|
||||
mov w8, #5
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #252
|
||||
mov x14, #20
|
||||
add x15, x15, x14
|
||||
mov w8, #6
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #252
|
||||
mov x14, #24
|
||||
add x15, x15, x14
|
||||
mov w8, #7
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #252
|
||||
mov x14, #28
|
||||
add x15, x15, x14
|
||||
mov w8, #8
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #252
|
||||
mov x14, #32
|
||||
add x15, x15, x14
|
||||
mov w8, #9
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #252
|
||||
mov x14, #36
|
||||
add x15, x15, x14
|
||||
mov w8, #10
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #252
|
||||
mov x14, #40
|
||||
add x15, x15, x14
|
||||
mov w8, #11
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #252
|
||||
mov x14, #44
|
||||
add x15, x15, x14
|
||||
mov w8, #12
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #252
|
||||
mov x14, #48
|
||||
add x15, x15, x14
|
||||
mov w8, #13
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #252
|
||||
mov x14, #52
|
||||
add x15, x15, x14
|
||||
mov w8, #14
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #252
|
||||
mov x14, #56
|
||||
add x15, x15, x14
|
||||
mov w8, #15
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #316
|
||||
mov w8, #1
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #316
|
||||
mov x14, #4
|
||||
add x15, x15, x14
|
||||
mov w8, #2
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #316
|
||||
mov x14, #8
|
||||
add x15, x15, x14
|
||||
mov w8, #3
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #316
|
||||
mov x14, #12
|
||||
add x15, x15, x14
|
||||
mov w8, #4
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #316
|
||||
mov x14, #16
|
||||
add x15, x15, x14
|
||||
mov w8, #5
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #316
|
||||
mov x14, #20
|
||||
add x15, x15, x14
|
||||
mov w8, #6
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #316
|
||||
mov x14, #24
|
||||
add x15, x15, x14
|
||||
mov w8, #7
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #316
|
||||
mov x14, #28
|
||||
add x15, x15, x14
|
||||
mov w8, #8
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #316
|
||||
mov x14, #32
|
||||
add x15, x15, x14
|
||||
mov w8, #9
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #316
|
||||
mov x14, #36
|
||||
add x15, x15, x14
|
||||
mov w8, #10
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #316
|
||||
mov x14, #40
|
||||
add x15, x15, x14
|
||||
mov w8, #11
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #316
|
||||
mov x14, #44
|
||||
add x15, x15, x14
|
||||
mov w8, #12
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #316
|
||||
mov x14, #48
|
||||
add x15, x15, x14
|
||||
mov w8, #13
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #316
|
||||
mov x14, #52
|
||||
add x15, x15, x14
|
||||
mov w8, #14
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #316
|
||||
mov x14, #56
|
||||
add x15, x15, x14
|
||||
mov w8, #15
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #404
|
||||
mov w8, #1
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #404
|
||||
mov x14, #4
|
||||
add x15, x15, x14
|
||||
mov w8, #2
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #404
|
||||
mov x14, #8
|
||||
add x15, x15, x14
|
||||
mov w8, #3
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #404
|
||||
mov x14, #12
|
||||
add x15, x15, x14
|
||||
mov w8, #4
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #404
|
||||
mov x14, #16
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #404
|
||||
mov x14, #20
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #404
|
||||
mov x14, #24
|
||||
add x15, x15, x14
|
||||
mov w8, #7
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #404
|
||||
mov x14, #28
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #404
|
||||
mov x14, #32
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #404
|
||||
mov x14, #36
|
||||
add x15, x15, x14
|
||||
mov w8, #10
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #404
|
||||
mov x14, #40
|
||||
add x15, x15, x14
|
||||
mov w8, #11
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #404
|
||||
mov x14, #44
|
||||
add x15, x15, x14
|
||||
mov w8, #12
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #404
|
||||
mov x14, #48
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #404
|
||||
mov x14, #52
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #404
|
||||
mov x14, #56
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #520
|
||||
mov w8, #1
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #520
|
||||
mov x14, #4
|
||||
add x15, x15, x14
|
||||
mov w8, #2
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #520
|
||||
mov x14, #8
|
||||
add x15, x15, x14
|
||||
mov w8, #3
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #520
|
||||
mov x14, #12
|
||||
add x15, x15, x14
|
||||
mov w8, #4
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #520
|
||||
mov x14, #16
|
||||
add x15, x15, x14
|
||||
mov w8, #5
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #520
|
||||
mov x14, #20
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #520
|
||||
mov x14, #24
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #520
|
||||
mov x14, #28
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #520
|
||||
mov x14, #32
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #520
|
||||
mov x14, #36
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #520
|
||||
mov x14, #40
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #520
|
||||
mov x14, #44
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #520
|
||||
mov x14, #48
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #520
|
||||
mov x14, #52
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #520
|
||||
mov x14, #56
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #520
|
||||
mov x14, #60
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #520
|
||||
mov x14, #64
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #520
|
||||
mov x14, #68
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #520
|
||||
mov x14, #72
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #520
|
||||
mov x14, #76
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #520
|
||||
mov x14, #80
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #520
|
||||
mov x14, #84
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #520
|
||||
mov x14, #88
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov x15, x29
|
||||
sub x15, x15, #520
|
||||
mov x14, #92
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
mov w0, #4
|
||||
add sp, sp, #528
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
Binary file not shown.
@ -0,0 +1,189 @@
|
||||
.data
|
||||
.globl a0
|
||||
.p2align 2
|
||||
a0:
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.globl b0
|
||||
.p2align 2
|
||||
b0:
|
||||
.word 0
|
||||
.word 1
|
||||
.word 0
|
||||
.word 0
|
||||
.globl c0
|
||||
.p2align 2
|
||||
c0:
|
||||
.word 2
|
||||
.word 8
|
||||
.word 6
|
||||
.word 3
|
||||
.word 9
|
||||
.word 1
|
||||
.word 5
|
||||
.globl d0
|
||||
.p2align 2
|
||||
d0:
|
||||
.zero 44
|
||||
.globl e0
|
||||
.p2align 2
|
||||
e0:
|
||||
.word 22
|
||||
.word 33
|
||||
.globl f0
|
||||
.p2align 2
|
||||
f0:
|
||||
.zero 24
|
||||
.globl g0
|
||||
.p2align 2
|
||||
g0:
|
||||
.word 85
|
||||
.word 0
|
||||
.word 1
|
||||
.word 29
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.globl a
|
||||
.p2align 2
|
||||
a:
|
||||
.zero 60
|
||||
.globl b
|
||||
.p2align 2
|
||||
b:
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.globl c
|
||||
.p2align 2
|
||||
c:
|
||||
.word 1
|
||||
.word 2
|
||||
.word 3
|
||||
.word 4
|
||||
.word 5
|
||||
.word 6
|
||||
.word 7
|
||||
.word 8
|
||||
.word 9
|
||||
.word 10
|
||||
.word 11
|
||||
.word 12
|
||||
.word 13
|
||||
.word 14
|
||||
.word 15
|
||||
.globl d
|
||||
.p2align 2
|
||||
d:
|
||||
.word 1
|
||||
.word 2
|
||||
.word 3
|
||||
.word 4
|
||||
.word 5
|
||||
.word 6
|
||||
.word 7
|
||||
.word 8
|
||||
.word 9
|
||||
.word 10
|
||||
.word 11
|
||||
.word 12
|
||||
.word 13
|
||||
.word 14
|
||||
.word 15
|
||||
.globl e
|
||||
.p2align 2
|
||||
e:
|
||||
.word 1
|
||||
.word 2
|
||||
.word 3
|
||||
.word 4
|
||||
.word 5
|
||||
.word 6
|
||||
.word 7
|
||||
.word 8
|
||||
.word 9
|
||||
.word 10
|
||||
.word 11
|
||||
.word 12
|
||||
.word 13
|
||||
.word 14
|
||||
.word 15
|
||||
.globl f
|
||||
.p2align 2
|
||||
f:
|
||||
.zero 20
|
||||
.globl g
|
||||
.p2align 2
|
||||
g:
|
||||
.word 1
|
||||
.word 2
|
||||
.word 3
|
||||
.word 4
|
||||
.word 0
|
||||
.word 0
|
||||
.word 7
|
||||
.word 0
|
||||
.word 0
|
||||
.word 10
|
||||
.word 11
|
||||
.word 12
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.globl h
|
||||
.p2align 2
|
||||
h:
|
||||
.zero 12
|
||||
.globl i
|
||||
.p2align 2
|
||||
i:
|
||||
.word 1
|
||||
.word 2
|
||||
.word 3
|
||||
.word 4
|
||||
.word 5
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
mov w0, #5
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
Binary file not shown.
@ -0,0 +1,729 @@
|
||||
.data
|
||||
.globl n
|
||||
.p2align 2
|
||||
n:
|
||||
.word 0
|
||||
.globl m
|
||||
.p2align 2
|
||||
m:
|
||||
.word 0
|
||||
.globl maxn
|
||||
.p2align 2
|
||||
maxn:
|
||||
.word 1005
|
||||
.globl maxm
|
||||
.p2align 2
|
||||
maxm:
|
||||
.word 5005
|
||||
.globl to
|
||||
.p2align 2
|
||||
to:
|
||||
.zero 20020
|
||||
.globl next
|
||||
.p2align 2
|
||||
next:
|
||||
.zero 20020
|
||||
.globl head
|
||||
.p2align 2
|
||||
head:
|
||||
.zero 4020
|
||||
.globl cnt
|
||||
.p2align 2
|
||||
cnt:
|
||||
.word 0
|
||||
.globl que
|
||||
.p2align 2
|
||||
que:
|
||||
.zero 4020
|
||||
.globl h
|
||||
.p2align 2
|
||||
h:
|
||||
.word 0
|
||||
.globl tail
|
||||
.p2align 2
|
||||
tail:
|
||||
.word 0
|
||||
.globl inq
|
||||
.p2align 2
|
||||
inq:
|
||||
.zero 4020
|
||||
|
||||
.text
|
||||
.globl quick_read
|
||||
.p2align 2
|
||||
quick_read:
|
||||
.L.quick_read.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #64
|
||||
bl getch
|
||||
stur w0, [x29, #-16]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-4]
|
||||
mov w8, #0
|
||||
stur w8, [x29, #-8]
|
||||
mov w8, #0
|
||||
stur w8, [x29, #-12]
|
||||
b .L.quick_read.1
|
||||
.L.quick_read.1:
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-20]
|
||||
ldur w8, [x29, #-20]
|
||||
mov w9, #48
|
||||
cmp w8, w9
|
||||
b.lt .L.quick_read.2
|
||||
b .L.quick_read.4
|
||||
.L.quick_read.2:
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-24]
|
||||
ldur w8, [x29, #-24]
|
||||
mov w9, #45
|
||||
cmp w8, w9
|
||||
b.eq .L.quick_read.5
|
||||
b .L.quick_read.6
|
||||
.L.quick_read.3:
|
||||
b .L.quick_read.7
|
||||
.L.quick_read.4:
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-28]
|
||||
ldur w8, [x29, #-28]
|
||||
mov w9, #57
|
||||
cmp w8, w9
|
||||
b.gt .L.quick_read.2
|
||||
b .L.quick_read.3
|
||||
.L.quick_read.5:
|
||||
mov w8, #1
|
||||
stur w8, [x29, #-12]
|
||||
b .L.quick_read.6
|
||||
.L.quick_read.6:
|
||||
bl getch
|
||||
stur w0, [x29, #-32]
|
||||
ldur w8, [x29, #-32]
|
||||
stur w8, [x29, #-4]
|
||||
b .L.quick_read.1
|
||||
.L.quick_read.7:
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-36]
|
||||
ldur w8, [x29, #-36]
|
||||
mov w9, #48
|
||||
cmp w8, w9
|
||||
b.ge .L.quick_read.10
|
||||
b .L.quick_read.9
|
||||
.L.quick_read.8:
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-40]
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-44]
|
||||
ldur w8, [x29, #-40]
|
||||
mov w11, #10
|
||||
mul w8, w8, w11
|
||||
ldur w10, [x29, #-44]
|
||||
add w8, w8, w10
|
||||
mov w9, #48
|
||||
sub w8, w8, w9
|
||||
stur w8, [x29, #-8]
|
||||
bl getch
|
||||
stur w0, [x29, #-48]
|
||||
ldur w8, [x29, #-48]
|
||||
stur w8, [x29, #-4]
|
||||
b .L.quick_read.7
|
||||
.L.quick_read.9:
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-52]
|
||||
ldur w8, [x29, #-52]
|
||||
mov w9, #0
|
||||
cmp w8, w9
|
||||
b.ne .L.quick_read.11
|
||||
b .L.quick_read.12
|
||||
.L.quick_read.10:
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-56]
|
||||
ldur w8, [x29, #-56]
|
||||
mov w9, #57
|
||||
cmp w8, w9
|
||||
b.le .L.quick_read.8
|
||||
b .L.quick_read.9
|
||||
.L.quick_read.11:
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-60]
|
||||
mov w0, #0
|
||||
ldur w8, [x29, #-60]
|
||||
sub w0, w0, w8
|
||||
add sp, sp, #64
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.quick_read.12:
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-64]
|
||||
ldur w0, [x29, #-64]
|
||||
add sp, sp, #64
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.quick_read.13:
|
||||
mov w0, #0
|
||||
add sp, sp, #64
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.text
|
||||
.globl add_edge
|
||||
.p2align 2
|
||||
add_edge:
|
||||
.L.add_edge.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #80
|
||||
stur w0, [x29, #-4]
|
||||
stur w1, [x29, #-8]
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-12]
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-16]
|
||||
adrp x13, cnt
|
||||
ldr w8, [x13, #:lo12:cnt]
|
||||
stur w8, [x29, #-20]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-24]
|
||||
adrp x15, to
|
||||
add x15, x15, :lo12:to
|
||||
ldur w14, [x29, #-20]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldur w8, [x29, #-24]
|
||||
str w8, [x15]
|
||||
adrp x13, cnt
|
||||
ldr w8, [x13, #:lo12:cnt]
|
||||
stur w8, [x29, #-28]
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-32]
|
||||
adrp x15, head
|
||||
add x15, x15, :lo12:head
|
||||
ldur w14, [x29, #-32]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-36]
|
||||
adrp x15, next
|
||||
add x15, x15, :lo12:next
|
||||
ldur w14, [x29, #-28]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldur w8, [x29, #-36]
|
||||
str w8, [x15]
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-40]
|
||||
adrp x13, cnt
|
||||
ldr w8, [x13, #:lo12:cnt]
|
||||
stur w8, [x29, #-44]
|
||||
adrp x15, head
|
||||
add x15, x15, :lo12:head
|
||||
ldur w14, [x29, #-40]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldur w8, [x29, #-44]
|
||||
str w8, [x15]
|
||||
adrp x13, cnt
|
||||
ldr w8, [x13, #:lo12:cnt]
|
||||
stur w8, [x29, #-48]
|
||||
ldur w8, [x29, #-48]
|
||||
mov w9, #1
|
||||
add w8, w8, w9
|
||||
adrp x13, cnt
|
||||
str w8, [x13, #:lo12:cnt]
|
||||
adrp x13, cnt
|
||||
ldr w8, [x13, #:lo12:cnt]
|
||||
stur w8, [x29, #-52]
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-56]
|
||||
adrp x15, to
|
||||
add x15, x15, :lo12:to
|
||||
ldur w14, [x29, #-52]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldur w8, [x29, #-56]
|
||||
str w8, [x15]
|
||||
adrp x13, cnt
|
||||
ldr w8, [x13, #:lo12:cnt]
|
||||
stur w8, [x29, #-60]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-64]
|
||||
adrp x15, head
|
||||
add x15, x15, :lo12:head
|
||||
ldur w14, [x29, #-64]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-68]
|
||||
adrp x15, next
|
||||
add x15, x15, :lo12:next
|
||||
ldur w14, [x29, #-60]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldur w8, [x29, #-68]
|
||||
str w8, [x15]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-72]
|
||||
adrp x13, cnt
|
||||
ldr w8, [x13, #:lo12:cnt]
|
||||
stur w8, [x29, #-76]
|
||||
adrp x15, head
|
||||
add x15, x15, :lo12:head
|
||||
ldur w14, [x29, #-72]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldur w8, [x29, #-76]
|
||||
str w8, [x15]
|
||||
adrp x13, cnt
|
||||
ldr w8, [x13, #:lo12:cnt]
|
||||
stur w8, [x29, #-80]
|
||||
ldur w8, [x29, #-80]
|
||||
mov w9, #1
|
||||
add w8, w8, w9
|
||||
adrp x13, cnt
|
||||
str w8, [x13, #:lo12:cnt]
|
||||
add sp, sp, #80
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.text
|
||||
.globl init
|
||||
.p2align 2
|
||||
init:
|
||||
.L.init.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #16
|
||||
mov w8, #0
|
||||
stur w8, [x29, #-4]
|
||||
b .L.init.1
|
||||
.L.init.1:
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-8]
|
||||
ldur w8, [x29, #-8]
|
||||
mov w9, #1005
|
||||
cmp w8, w9
|
||||
b.lt .L.init.2
|
||||
b .L.init.3
|
||||
.L.init.2:
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-12]
|
||||
adrp x15, head
|
||||
add x15, x15, :lo12:head
|
||||
ldur w14, [x29, #-12]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
mov w8, #-1
|
||||
str w8, [x15]
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-16]
|
||||
ldur w8, [x29, #-16]
|
||||
mov w9, #1
|
||||
add w8, w8, w9
|
||||
stur w8, [x29, #-4]
|
||||
b .L.init.1
|
||||
.L.init.3:
|
||||
add sp, sp, #16
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.text
|
||||
.globl inqueue
|
||||
.p2align 2
|
||||
inqueue:
|
||||
.L.inqueue.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
stur w0, [x29, #-4]
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-8]
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-12]
|
||||
adrp x15, inq
|
||||
add x15, x15, :lo12:inq
|
||||
ldur w14, [x29, #-12]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
mov w8, #1
|
||||
str w8, [x15]
|
||||
adrp x13, tail
|
||||
ldr w8, [x13, #:lo12:tail]
|
||||
stur w8, [x29, #-16]
|
||||
ldur w8, [x29, #-16]
|
||||
mov w9, #1
|
||||
add w8, w8, w9
|
||||
adrp x13, tail
|
||||
str w8, [x13, #:lo12:tail]
|
||||
adrp x13, tail
|
||||
ldr w8, [x13, #:lo12:tail]
|
||||
stur w8, [x29, #-20]
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-24]
|
||||
adrp x15, que
|
||||
add x15, x15, :lo12:que
|
||||
ldur w14, [x29, #-20]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldur w8, [x29, #-24]
|
||||
str w8, [x15]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.text
|
||||
.globl pop_queue
|
||||
.p2align 2
|
||||
pop_queue:
|
||||
.L.pop_queue.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
adrp x13, h
|
||||
ldr w8, [x13, #:lo12:h]
|
||||
stur w8, [x29, #-8]
|
||||
ldur w8, [x29, #-8]
|
||||
mov w9, #1
|
||||
add w8, w8, w9
|
||||
adrp x13, h
|
||||
str w8, [x13, #:lo12:h]
|
||||
adrp x13, h
|
||||
ldr w8, [x13, #:lo12:h]
|
||||
stur w8, [x29, #-12]
|
||||
adrp x15, que
|
||||
add x15, x15, :lo12:que
|
||||
ldur w14, [x29, #-12]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-16]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-4]
|
||||
adrp x13, h
|
||||
ldr w8, [x13, #:lo12:h]
|
||||
stur w8, [x29, #-20]
|
||||
adrp x15, que
|
||||
add x15, x15, :lo12:que
|
||||
ldur w14, [x29, #-20]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-24]
|
||||
ldur w0, [x29, #-24]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.text
|
||||
.globl same
|
||||
.p2align 2
|
||||
same:
|
||||
.L.same.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #128
|
||||
stur w0, [x29, #-4]
|
||||
stur w1, [x29, #-8]
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-28]
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-32]
|
||||
mov w8, #0
|
||||
adrp x13, h
|
||||
str w8, [x13, #:lo12:h]
|
||||
mov w8, #0
|
||||
adrp x13, tail
|
||||
str w8, [x13, #:lo12:tail]
|
||||
ldur w8, [x29, #-28]
|
||||
stur w8, [x29, #-36]
|
||||
ldur w0, [x29, #-36]
|
||||
bl inqueue
|
||||
mov w8, #0
|
||||
stur w8, [x29, #-12]
|
||||
b .L.same.1
|
||||
.L.same.1:
|
||||
adrp x13, h
|
||||
ldr w8, [x13, #:lo12:h]
|
||||
stur w8, [x29, #-40]
|
||||
adrp x13, tail
|
||||
ldr w8, [x13, #:lo12:tail]
|
||||
stur w8, [x29, #-44]
|
||||
ldur w8, [x29, #-40]
|
||||
ldur w9, [x29, #-44]
|
||||
cmp w8, w9
|
||||
b.lt .L.same.2
|
||||
b .L.same.3
|
||||
.L.same.2:
|
||||
bl pop_queue
|
||||
stur w0, [x29, #-48]
|
||||
ldur w8, [x29, #-48]
|
||||
stur w8, [x29, #-16]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-52]
|
||||
ldur w8, [x29, #-32]
|
||||
stur w8, [x29, #-56]
|
||||
ldur w8, [x29, #-52]
|
||||
ldur w9, [x29, #-56]
|
||||
cmp w8, w9
|
||||
b.eq .L.same.4
|
||||
b .L.same.5
|
||||
.L.same.3:
|
||||
mov w8, #0
|
||||
stur w8, [x29, #-24]
|
||||
b .L.same.11
|
||||
.L.same.4:
|
||||
mov w8, #1
|
||||
stur w8, [x29, #-12]
|
||||
b .L.same.5
|
||||
.L.same.5:
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-60]
|
||||
adrp x15, head
|
||||
add x15, x15, :lo12:head
|
||||
ldur w14, [x29, #-60]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-64]
|
||||
ldur w8, [x29, #-64]
|
||||
stur w8, [x29, #-20]
|
||||
b .L.same.6
|
||||
.L.same.6:
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-68]
|
||||
ldur w8, [x29, #-68]
|
||||
mov w9, #-1
|
||||
cmp w8, w9
|
||||
b.ne .L.same.7
|
||||
b .L.same.8
|
||||
.L.same.7:
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-72]
|
||||
adrp x15, to
|
||||
add x15, x15, :lo12:to
|
||||
ldur w14, [x29, #-72]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-76]
|
||||
adrp x15, inq
|
||||
add x15, x15, :lo12:inq
|
||||
ldur w14, [x29, #-76]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-80]
|
||||
ldur w8, [x29, #-80]
|
||||
mov w9, #0
|
||||
cmp w8, w9
|
||||
b.eq .L.same.9
|
||||
b .L.same.10
|
||||
.L.same.8:
|
||||
b .L.same.1
|
||||
.L.same.9:
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-84]
|
||||
adrp x15, to
|
||||
add x15, x15, :lo12:to
|
||||
ldur w14, [x29, #-84]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-88]
|
||||
ldur w0, [x29, #-88]
|
||||
bl inqueue
|
||||
b .L.same.10
|
||||
.L.same.10:
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-92]
|
||||
adrp x15, next
|
||||
add x15, x15, :lo12:next
|
||||
ldur w14, [x29, #-92]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-96]
|
||||
ldur w8, [x29, #-96]
|
||||
stur w8, [x29, #-20]
|
||||
b .L.same.6
|
||||
.L.same.11:
|
||||
ldur w8, [x29, #-24]
|
||||
stur w8, [x29, #-100]
|
||||
adrp x13, tail
|
||||
ldr w8, [x13, #:lo12:tail]
|
||||
stur w8, [x29, #-104]
|
||||
ldur w8, [x29, #-100]
|
||||
ldur w9, [x29, #-104]
|
||||
cmp w8, w9
|
||||
b.le .L.same.12
|
||||
b .L.same.13
|
||||
.L.same.12:
|
||||
ldur w8, [x29, #-24]
|
||||
stur w8, [x29, #-108]
|
||||
adrp x15, que
|
||||
add x15, x15, :lo12:que
|
||||
ldur w14, [x29, #-108]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-112]
|
||||
adrp x15, inq
|
||||
add x15, x15, :lo12:inq
|
||||
ldur w14, [x29, #-112]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
ldur w8, [x29, #-24]
|
||||
stur w8, [x29, #-116]
|
||||
ldur w8, [x29, #-116]
|
||||
mov w9, #1
|
||||
add w8, w8, w9
|
||||
stur w8, [x29, #-24]
|
||||
b .L.same.11
|
||||
.L.same.13:
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-120]
|
||||
ldur w0, [x29, #-120]
|
||||
add sp, sp, #128
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #96
|
||||
bl quick_read
|
||||
stur w0, [x29, #-24]
|
||||
ldur w8, [x29, #-24]
|
||||
adrp x13, n
|
||||
str w8, [x13, #:lo12:n]
|
||||
bl quick_read
|
||||
stur w0, [x29, #-28]
|
||||
ldur w8, [x29, #-28]
|
||||
adrp x13, m
|
||||
str w8, [x13, #:lo12:m]
|
||||
bl init
|
||||
b .L.main.1
|
||||
.L.main.1:
|
||||
adrp x13, m
|
||||
ldr w8, [x13, #:lo12:m]
|
||||
stur w8, [x29, #-32]
|
||||
ldur w8, [x29, #-32]
|
||||
mov w9, #0
|
||||
cmp w8, w9
|
||||
b.ne .L.main.2
|
||||
b .L.main.3
|
||||
.L.main.2:
|
||||
bl getch
|
||||
stur w0, [x29, #-36]
|
||||
ldur w8, [x29, #-36]
|
||||
stur w8, [x29, #-4]
|
||||
b .L.main.4
|
||||
.L.main.3:
|
||||
mov w0, #0
|
||||
add sp, sp, #96
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.main.4:
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-40]
|
||||
ldur w8, [x29, #-40]
|
||||
mov w9, #81
|
||||
cmp w8, w9
|
||||
b.ne .L.main.7
|
||||
b .L.main.6
|
||||
.L.main.5:
|
||||
bl getch
|
||||
stur w0, [x29, #-44]
|
||||
ldur w8, [x29, #-44]
|
||||
stur w8, [x29, #-4]
|
||||
b .L.main.4
|
||||
.L.main.6:
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-48]
|
||||
ldur w8, [x29, #-48]
|
||||
mov w9, #81
|
||||
cmp w8, w9
|
||||
b.eq .L.main.8
|
||||
b .L.main.9
|
||||
.L.main.7:
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-52]
|
||||
ldur w8, [x29, #-52]
|
||||
mov w9, #85
|
||||
cmp w8, w9
|
||||
b.ne .L.main.5
|
||||
b .L.main.6
|
||||
.L.main.8:
|
||||
bl quick_read
|
||||
stur w0, [x29, #-56]
|
||||
ldur w8, [x29, #-56]
|
||||
stur w8, [x29, #-8]
|
||||
bl quick_read
|
||||
stur w0, [x29, #-60]
|
||||
ldur w8, [x29, #-60]
|
||||
stur w8, [x29, #-12]
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-64]
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-68]
|
||||
ldur w0, [x29, #-64]
|
||||
ldur w1, [x29, #-68]
|
||||
bl same
|
||||
stur w0, [x29, #-72]
|
||||
ldur w0, [x29, #-72]
|
||||
bl putint
|
||||
mov w0, #10
|
||||
bl putch
|
||||
b .L.main.10
|
||||
.L.main.9:
|
||||
bl quick_read
|
||||
stur w0, [x29, #-76]
|
||||
ldur w8, [x29, #-76]
|
||||
stur w8, [x29, #-16]
|
||||
bl quick_read
|
||||
stur w0, [x29, #-80]
|
||||
ldur w8, [x29, #-80]
|
||||
stur w8, [x29, #-20]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-84]
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-88]
|
||||
ldur w0, [x29, #-84]
|
||||
ldur w1, [x29, #-88]
|
||||
bl add_edge
|
||||
b .L.main.10
|
||||
.L.main.10:
|
||||
adrp x13, m
|
||||
ldr w8, [x13, #:lo12:m]
|
||||
stur w8, [x29, #-92]
|
||||
ldur w8, [x29, #-92]
|
||||
mov w9, #1
|
||||
sub w8, w8, w9
|
||||
adrp x13, m
|
||||
str w8, [x13, #:lo12:m]
|
||||
b .L.main.1
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -0,0 +1,617 @@
|
||||
.data
|
||||
.globl n
|
||||
.p2align 2
|
||||
n:
|
||||
.word 0
|
||||
.globl m
|
||||
.p2align 2
|
||||
m:
|
||||
.word 0
|
||||
.globl maxn
|
||||
.p2align 2
|
||||
maxn:
|
||||
.word 1005
|
||||
.globl maxm
|
||||
.p2align 2
|
||||
maxm:
|
||||
.word 5005
|
||||
.globl to
|
||||
.p2align 2
|
||||
to:
|
||||
.zero 20020
|
||||
.globl next
|
||||
.p2align 2
|
||||
next:
|
||||
.zero 20020
|
||||
.globl head
|
||||
.p2align 2
|
||||
head:
|
||||
.zero 4020
|
||||
.globl cnt
|
||||
.p2align 2
|
||||
cnt:
|
||||
.word 0
|
||||
.globl vis
|
||||
.p2align 2
|
||||
vis:
|
||||
.zero 4020
|
||||
|
||||
.text
|
||||
.globl quick_read
|
||||
.p2align 2
|
||||
quick_read:
|
||||
.L.quick_read.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #64
|
||||
bl getch
|
||||
stur w0, [x29, #-16]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-4]
|
||||
mov w8, #0
|
||||
stur w8, [x29, #-8]
|
||||
mov w8, #0
|
||||
stur w8, [x29, #-12]
|
||||
b .L.quick_read.1
|
||||
.L.quick_read.1:
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-20]
|
||||
ldur w8, [x29, #-20]
|
||||
mov w9, #48
|
||||
cmp w8, w9
|
||||
b.lt .L.quick_read.2
|
||||
b .L.quick_read.4
|
||||
.L.quick_read.2:
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-24]
|
||||
ldur w8, [x29, #-24]
|
||||
mov w9, #45
|
||||
cmp w8, w9
|
||||
b.eq .L.quick_read.5
|
||||
b .L.quick_read.6
|
||||
.L.quick_read.3:
|
||||
b .L.quick_read.7
|
||||
.L.quick_read.4:
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-28]
|
||||
ldur w8, [x29, #-28]
|
||||
mov w9, #57
|
||||
cmp w8, w9
|
||||
b.gt .L.quick_read.2
|
||||
b .L.quick_read.3
|
||||
.L.quick_read.5:
|
||||
mov w8, #1
|
||||
stur w8, [x29, #-12]
|
||||
b .L.quick_read.6
|
||||
.L.quick_read.6:
|
||||
bl getch
|
||||
stur w0, [x29, #-32]
|
||||
ldur w8, [x29, #-32]
|
||||
stur w8, [x29, #-4]
|
||||
b .L.quick_read.1
|
||||
.L.quick_read.7:
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-36]
|
||||
ldur w8, [x29, #-36]
|
||||
mov w9, #48
|
||||
cmp w8, w9
|
||||
b.ge .L.quick_read.10
|
||||
b .L.quick_read.9
|
||||
.L.quick_read.8:
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-40]
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-44]
|
||||
ldur w8, [x29, #-40]
|
||||
mov w11, #10
|
||||
mul w8, w8, w11
|
||||
ldur w10, [x29, #-44]
|
||||
add w8, w8, w10
|
||||
mov w9, #48
|
||||
sub w8, w8, w9
|
||||
stur w8, [x29, #-8]
|
||||
bl getch
|
||||
stur w0, [x29, #-48]
|
||||
ldur w8, [x29, #-48]
|
||||
stur w8, [x29, #-4]
|
||||
b .L.quick_read.7
|
||||
.L.quick_read.9:
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-52]
|
||||
ldur w8, [x29, #-52]
|
||||
mov w9, #0
|
||||
cmp w8, w9
|
||||
b.ne .L.quick_read.11
|
||||
b .L.quick_read.12
|
||||
.L.quick_read.10:
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-56]
|
||||
ldur w8, [x29, #-56]
|
||||
mov w9, #57
|
||||
cmp w8, w9
|
||||
b.le .L.quick_read.8
|
||||
b .L.quick_read.9
|
||||
.L.quick_read.11:
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-60]
|
||||
mov w0, #0
|
||||
ldur w8, [x29, #-60]
|
||||
sub w0, w0, w8
|
||||
add sp, sp, #64
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.quick_read.12:
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-64]
|
||||
ldur w0, [x29, #-64]
|
||||
add sp, sp, #64
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.quick_read.13:
|
||||
mov w0, #0
|
||||
add sp, sp, #64
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.text
|
||||
.globl add_edge
|
||||
.p2align 2
|
||||
add_edge:
|
||||
.L.add_edge.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #80
|
||||
stur w0, [x29, #-4]
|
||||
stur w1, [x29, #-8]
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-12]
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-16]
|
||||
adrp x13, cnt
|
||||
ldr w8, [x13, #:lo12:cnt]
|
||||
stur w8, [x29, #-20]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-24]
|
||||
adrp x15, to
|
||||
add x15, x15, :lo12:to
|
||||
ldur w14, [x29, #-20]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldur w8, [x29, #-24]
|
||||
str w8, [x15]
|
||||
adrp x13, cnt
|
||||
ldr w8, [x13, #:lo12:cnt]
|
||||
stur w8, [x29, #-28]
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-32]
|
||||
adrp x15, head
|
||||
add x15, x15, :lo12:head
|
||||
ldur w14, [x29, #-32]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-36]
|
||||
adrp x15, next
|
||||
add x15, x15, :lo12:next
|
||||
ldur w14, [x29, #-28]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldur w8, [x29, #-36]
|
||||
str w8, [x15]
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-40]
|
||||
adrp x13, cnt
|
||||
ldr w8, [x13, #:lo12:cnt]
|
||||
stur w8, [x29, #-44]
|
||||
adrp x15, head
|
||||
add x15, x15, :lo12:head
|
||||
ldur w14, [x29, #-40]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldur w8, [x29, #-44]
|
||||
str w8, [x15]
|
||||
adrp x13, cnt
|
||||
ldr w8, [x13, #:lo12:cnt]
|
||||
stur w8, [x29, #-48]
|
||||
ldur w8, [x29, #-48]
|
||||
mov w9, #1
|
||||
add w8, w8, w9
|
||||
adrp x13, cnt
|
||||
str w8, [x13, #:lo12:cnt]
|
||||
adrp x13, cnt
|
||||
ldr w8, [x13, #:lo12:cnt]
|
||||
stur w8, [x29, #-52]
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-56]
|
||||
adrp x15, to
|
||||
add x15, x15, :lo12:to
|
||||
ldur w14, [x29, #-52]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldur w8, [x29, #-56]
|
||||
str w8, [x15]
|
||||
adrp x13, cnt
|
||||
ldr w8, [x13, #:lo12:cnt]
|
||||
stur w8, [x29, #-60]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-64]
|
||||
adrp x15, head
|
||||
add x15, x15, :lo12:head
|
||||
ldur w14, [x29, #-64]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-68]
|
||||
adrp x15, next
|
||||
add x15, x15, :lo12:next
|
||||
ldur w14, [x29, #-60]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldur w8, [x29, #-68]
|
||||
str w8, [x15]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-72]
|
||||
adrp x13, cnt
|
||||
ldr w8, [x13, #:lo12:cnt]
|
||||
stur w8, [x29, #-76]
|
||||
adrp x15, head
|
||||
add x15, x15, :lo12:head
|
||||
ldur w14, [x29, #-72]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldur w8, [x29, #-76]
|
||||
str w8, [x15]
|
||||
adrp x13, cnt
|
||||
ldr w8, [x13, #:lo12:cnt]
|
||||
stur w8, [x29, #-80]
|
||||
ldur w8, [x29, #-80]
|
||||
mov w9, #1
|
||||
add w8, w8, w9
|
||||
adrp x13, cnt
|
||||
str w8, [x13, #:lo12:cnt]
|
||||
add sp, sp, #80
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.text
|
||||
.globl init
|
||||
.p2align 2
|
||||
init:
|
||||
.L.init.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #16
|
||||
mov w8, #0
|
||||
stur w8, [x29, #-4]
|
||||
b .L.init.1
|
||||
.L.init.1:
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-8]
|
||||
ldur w8, [x29, #-8]
|
||||
mov w9, #1005
|
||||
cmp w8, w9
|
||||
b.lt .L.init.2
|
||||
b .L.init.3
|
||||
.L.init.2:
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-12]
|
||||
adrp x15, head
|
||||
add x15, x15, :lo12:head
|
||||
ldur w14, [x29, #-12]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
mov w8, #-1
|
||||
str w8, [x15]
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-16]
|
||||
ldur w8, [x29, #-16]
|
||||
mov w9, #1
|
||||
add w8, w8, w9
|
||||
stur w8, [x29, #-4]
|
||||
b .L.init.1
|
||||
.L.init.3:
|
||||
add sp, sp, #16
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.text
|
||||
.globl clear
|
||||
.p2align 2
|
||||
clear:
|
||||
.L.clear.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
mov w8, #1
|
||||
stur w8, [x29, #-4]
|
||||
b .L.clear.1
|
||||
.L.clear.1:
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-8]
|
||||
adrp x13, n
|
||||
ldr w8, [x13, #:lo12:n]
|
||||
stur w8, [x29, #-12]
|
||||
ldur w8, [x29, #-8]
|
||||
ldur w9, [x29, #-12]
|
||||
cmp w8, w9
|
||||
b.le .L.clear.2
|
||||
b .L.clear.3
|
||||
.L.clear.2:
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-16]
|
||||
adrp x15, vis
|
||||
add x15, x15, :lo12:vis
|
||||
ldur w14, [x29, #-16]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
mov w8, #0
|
||||
str w8, [x15]
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-20]
|
||||
ldur w8, [x29, #-20]
|
||||
mov w9, #1
|
||||
add w8, w8, w9
|
||||
stur w8, [x29, #-4]
|
||||
b .L.clear.1
|
||||
.L.clear.3:
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.text
|
||||
.globl same
|
||||
.p2align 2
|
||||
same:
|
||||
.L.same.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #96
|
||||
stur w0, [x29, #-4]
|
||||
stur w1, [x29, #-8]
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-20]
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-24]
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-28]
|
||||
adrp x15, vis
|
||||
add x15, x15, :lo12:vis
|
||||
ldur w14, [x29, #-28]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
mov w8, #1
|
||||
str w8, [x15]
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-32]
|
||||
ldur w8, [x29, #-24]
|
||||
stur w8, [x29, #-36]
|
||||
ldur w8, [x29, #-32]
|
||||
ldur w9, [x29, #-36]
|
||||
cmp w8, w9
|
||||
b.eq .L.same.1
|
||||
b .L.same.2
|
||||
.L.same.1:
|
||||
mov w0, #1
|
||||
add sp, sp, #96
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.same.2:
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-40]
|
||||
adrp x15, head
|
||||
add x15, x15, :lo12:head
|
||||
ldur w14, [x29, #-40]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-44]
|
||||
ldur w8, [x29, #-44]
|
||||
stur w8, [x29, #-12]
|
||||
b .L.same.3
|
||||
.L.same.3:
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-48]
|
||||
ldur w8, [x29, #-48]
|
||||
mov w9, #-1
|
||||
cmp w8, w9
|
||||
b.ne .L.same.4
|
||||
b .L.same.5
|
||||
.L.same.4:
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-52]
|
||||
adrp x15, to
|
||||
add x15, x15, :lo12:to
|
||||
ldur w14, [x29, #-52]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-56]
|
||||
ldur w8, [x29, #-56]
|
||||
stur w8, [x29, #-16]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-60]
|
||||
adrp x15, vis
|
||||
add x15, x15, :lo12:vis
|
||||
ldur w14, [x29, #-60]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-64]
|
||||
ldur w8, [x29, #-64]
|
||||
mov w9, #0
|
||||
cmp w8, w9
|
||||
b.eq .L.same.8
|
||||
b .L.same.7
|
||||
.L.same.5:
|
||||
mov w0, #0
|
||||
add sp, sp, #96
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.same.6:
|
||||
mov w0, #1
|
||||
add sp, sp, #96
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.same.7:
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-68]
|
||||
adrp x15, next
|
||||
add x15, x15, :lo12:next
|
||||
ldur w14, [x29, #-68]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-72]
|
||||
ldur w8, [x29, #-72]
|
||||
stur w8, [x29, #-12]
|
||||
b .L.same.3
|
||||
.L.same.8:
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-76]
|
||||
ldur w8, [x29, #-24]
|
||||
stur w8, [x29, #-80]
|
||||
ldur w0, [x29, #-76]
|
||||
ldur w1, [x29, #-80]
|
||||
bl same
|
||||
stur w0, [x29, #-84]
|
||||
ldur w8, [x29, #-84]
|
||||
mov w9, #0
|
||||
cmp w8, w9
|
||||
b.ne .L.same.6
|
||||
b .L.same.7
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #96
|
||||
bl quick_read
|
||||
stur w0, [x29, #-24]
|
||||
ldur w8, [x29, #-24]
|
||||
adrp x13, n
|
||||
str w8, [x13, #:lo12:n]
|
||||
bl quick_read
|
||||
stur w0, [x29, #-28]
|
||||
ldur w8, [x29, #-28]
|
||||
adrp x13, m
|
||||
str w8, [x13, #:lo12:m]
|
||||
bl init
|
||||
b .L.main.1
|
||||
.L.main.1:
|
||||
adrp x13, m
|
||||
ldr w8, [x13, #:lo12:m]
|
||||
stur w8, [x29, #-32]
|
||||
ldur w8, [x29, #-32]
|
||||
mov w9, #0
|
||||
cmp w8, w9
|
||||
b.ne .L.main.2
|
||||
b .L.main.3
|
||||
.L.main.2:
|
||||
bl getch
|
||||
stur w0, [x29, #-36]
|
||||
ldur w8, [x29, #-36]
|
||||
stur w8, [x29, #-4]
|
||||
b .L.main.4
|
||||
.L.main.3:
|
||||
mov w0, #0
|
||||
add sp, sp, #96
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.main.4:
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-40]
|
||||
ldur w8, [x29, #-40]
|
||||
mov w9, #81
|
||||
cmp w8, w9
|
||||
b.ne .L.main.7
|
||||
b .L.main.6
|
||||
.L.main.5:
|
||||
bl getch
|
||||
stur w0, [x29, #-44]
|
||||
ldur w8, [x29, #-44]
|
||||
stur w8, [x29, #-4]
|
||||
b .L.main.4
|
||||
.L.main.6:
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-48]
|
||||
ldur w8, [x29, #-48]
|
||||
mov w9, #81
|
||||
cmp w8, w9
|
||||
b.eq .L.main.8
|
||||
b .L.main.9
|
||||
.L.main.7:
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-52]
|
||||
ldur w8, [x29, #-52]
|
||||
mov w9, #85
|
||||
cmp w8, w9
|
||||
b.ne .L.main.5
|
||||
b .L.main.6
|
||||
.L.main.8:
|
||||
bl quick_read
|
||||
stur w0, [x29, #-56]
|
||||
ldur w8, [x29, #-56]
|
||||
stur w8, [x29, #-8]
|
||||
bl quick_read
|
||||
stur w0, [x29, #-60]
|
||||
ldur w8, [x29, #-60]
|
||||
stur w8, [x29, #-12]
|
||||
bl clear
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-64]
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-68]
|
||||
ldur w0, [x29, #-64]
|
||||
ldur w1, [x29, #-68]
|
||||
bl same
|
||||
stur w0, [x29, #-72]
|
||||
ldur w0, [x29, #-72]
|
||||
bl putint
|
||||
mov w0, #10
|
||||
bl putch
|
||||
b .L.main.10
|
||||
.L.main.9:
|
||||
bl quick_read
|
||||
stur w0, [x29, #-76]
|
||||
ldur w8, [x29, #-76]
|
||||
stur w8, [x29, #-16]
|
||||
bl quick_read
|
||||
stur w0, [x29, #-80]
|
||||
ldur w8, [x29, #-80]
|
||||
stur w8, [x29, #-20]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-84]
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-88]
|
||||
ldur w0, [x29, #-84]
|
||||
ldur w1, [x29, #-88]
|
||||
bl add_edge
|
||||
b .L.main.10
|
||||
.L.main.10:
|
||||
adrp x13, m
|
||||
ldr w8, [x13, #:lo12:m]
|
||||
stur w8, [x29, #-92]
|
||||
ldur w8, [x29, #-92]
|
||||
mov w9, #1
|
||||
sub w8, w8, w9
|
||||
adrp x13, m
|
||||
str w8, [x13, #:lo12:m]
|
||||
b .L.main.1
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -0,0 +1,896 @@
|
||||
.data
|
||||
.globl space
|
||||
.p2align 2
|
||||
space:
|
||||
.word 32
|
||||
.globl LF
|
||||
.p2align 2
|
||||
LF:
|
||||
.word 10
|
||||
.globl maxNode
|
||||
.p2align 2
|
||||
maxNode:
|
||||
.word 10000
|
||||
.globl value
|
||||
.p2align 2
|
||||
value:
|
||||
.zero 40000
|
||||
.globl left_child
|
||||
.p2align 2
|
||||
left_child:
|
||||
.zero 40000
|
||||
.globl right_child
|
||||
.p2align 2
|
||||
right_child:
|
||||
.zero 40000
|
||||
.globl now
|
||||
.p2align 2
|
||||
now:
|
||||
.word 0
|
||||
|
||||
.text
|
||||
.globl search
|
||||
.p2align 2
|
||||
search:
|
||||
.L.search.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #80
|
||||
stur w0, [x29, #-4]
|
||||
stur w1, [x29, #-8]
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-12]
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-16]
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-20]
|
||||
ldur w8, [x29, #-20]
|
||||
mov w9, #-1
|
||||
cmp w8, w9
|
||||
b.eq .L.search.1
|
||||
b .L.search.4
|
||||
.L.search.1:
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-24]
|
||||
ldur w0, [x29, #-24]
|
||||
add sp, sp, #80
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.search.2:
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-28]
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-32]
|
||||
adrp x15, value
|
||||
add x15, x15, :lo12:value
|
||||
ldur w14, [x29, #-32]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-36]
|
||||
ldur w8, [x29, #-28]
|
||||
ldur w9, [x29, #-36]
|
||||
cmp w8, w9
|
||||
b.gt .L.search.5
|
||||
b .L.search.6
|
||||
.L.search.3:
|
||||
mov w0, #0
|
||||
add sp, sp, #80
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.search.4:
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-40]
|
||||
adrp x15, value
|
||||
add x15, x15, :lo12:value
|
||||
ldur w14, [x29, #-40]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-44]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-48]
|
||||
ldur w8, [x29, #-44]
|
||||
ldur w9, [x29, #-48]
|
||||
cmp w8, w9
|
||||
b.eq .L.search.1
|
||||
b .L.search.2
|
||||
.L.search.5:
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-52]
|
||||
adrp x15, right_child
|
||||
add x15, x15, :lo12:right_child
|
||||
ldur w14, [x29, #-52]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-56]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-60]
|
||||
ldur w0, [x29, #-56]
|
||||
ldur w1, [x29, #-60]
|
||||
bl search
|
||||
stur w0, [x29, #-64]
|
||||
ldur w0, [x29, #-64]
|
||||
add sp, sp, #80
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.search.6:
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-68]
|
||||
adrp x15, left_child
|
||||
add x15, x15, :lo12:left_child
|
||||
ldur w14, [x29, #-68]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-72]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-76]
|
||||
ldur w0, [x29, #-72]
|
||||
ldur w1, [x29, #-76]
|
||||
bl search
|
||||
stur w0, [x29, #-80]
|
||||
ldur w0, [x29, #-80]
|
||||
add sp, sp, #80
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.search.7:
|
||||
mov w0, #0
|
||||
add sp, sp, #80
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.text
|
||||
.globl find_minimum
|
||||
.p2align 2
|
||||
find_minimum:
|
||||
.L.find_minimum.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #48
|
||||
stur w0, [x29, #-4]
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-8]
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-12]
|
||||
ldur w8, [x29, #-12]
|
||||
mov w9, #-1
|
||||
cmp w8, w9
|
||||
b.eq .L.find_minimum.1
|
||||
b .L.find_minimum.2
|
||||
.L.find_minimum.1:
|
||||
mov w0, #-1
|
||||
add sp, sp, #48
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.find_minimum.2:
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-16]
|
||||
adrp x15, left_child
|
||||
add x15, x15, :lo12:left_child
|
||||
ldur w14, [x29, #-16]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-20]
|
||||
ldur w8, [x29, #-20]
|
||||
mov w9, #-1
|
||||
cmp w8, w9
|
||||
b.ne .L.find_minimum.4
|
||||
b .L.find_minimum.5
|
||||
.L.find_minimum.3:
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-24]
|
||||
ldur w0, [x29, #-24]
|
||||
add sp, sp, #48
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.find_minimum.4:
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-28]
|
||||
adrp x15, left_child
|
||||
add x15, x15, :lo12:left_child
|
||||
ldur w14, [x29, #-28]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-32]
|
||||
ldur w0, [x29, #-32]
|
||||
bl find_minimum
|
||||
stur w0, [x29, #-36]
|
||||
ldur w0, [x29, #-36]
|
||||
add sp, sp, #48
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.find_minimum.5:
|
||||
b .L.find_minimum.3
|
||||
|
||||
.text
|
||||
.globl new_node
|
||||
.p2align 2
|
||||
new_node:
|
||||
.L.new_node.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
stur w0, [x29, #-4]
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-8]
|
||||
adrp x13, now
|
||||
ldr w8, [x13, #:lo12:now]
|
||||
stur w8, [x29, #-12]
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-16]
|
||||
adrp x15, value
|
||||
add x15, x15, :lo12:value
|
||||
ldur w14, [x29, #-12]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldur w8, [x29, #-16]
|
||||
str w8, [x15]
|
||||
adrp x13, now
|
||||
ldr w8, [x13, #:lo12:now]
|
||||
stur w8, [x29, #-20]
|
||||
adrp x15, left_child
|
||||
add x15, x15, :lo12:left_child
|
||||
ldur w14, [x29, #-20]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
mov w8, #-1
|
||||
str w8, [x15]
|
||||
adrp x13, now
|
||||
ldr w8, [x13, #:lo12:now]
|
||||
stur w8, [x29, #-24]
|
||||
adrp x15, right_child
|
||||
add x15, x15, :lo12:right_child
|
||||
ldur w14, [x29, #-24]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
mov w8, #-1
|
||||
str w8, [x15]
|
||||
adrp x13, now
|
||||
ldr w8, [x13, #:lo12:now]
|
||||
stur w8, [x29, #-28]
|
||||
ldur w8, [x29, #-28]
|
||||
mov w9, #1
|
||||
add w8, w8, w9
|
||||
adrp x13, now
|
||||
str w8, [x13, #:lo12:now]
|
||||
adrp x13, now
|
||||
ldr w8, [x13, #:lo12:now]
|
||||
stur w8, [x29, #-32]
|
||||
ldur w0, [x29, #-32]
|
||||
mov w8, #1
|
||||
sub w0, w0, w8
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.text
|
||||
.globl insert
|
||||
.p2align 2
|
||||
insert:
|
||||
.L.insert.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #96
|
||||
stur w0, [x29, #-4]
|
||||
stur w1, [x29, #-8]
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-12]
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-16]
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-20]
|
||||
ldur w8, [x29, #-20]
|
||||
mov w9, #-1
|
||||
cmp w8, w9
|
||||
b.eq .L.insert.1
|
||||
b .L.insert.2
|
||||
.L.insert.1:
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-24]
|
||||
ldur w0, [x29, #-24]
|
||||
bl new_node
|
||||
stur w0, [x29, #-28]
|
||||
ldur w0, [x29, #-28]
|
||||
add sp, sp, #96
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.insert.2:
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-32]
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-36]
|
||||
adrp x15, value
|
||||
add x15, x15, :lo12:value
|
||||
ldur w14, [x29, #-36]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-40]
|
||||
ldur w8, [x29, #-32]
|
||||
ldur w9, [x29, #-40]
|
||||
cmp w8, w9
|
||||
b.gt .L.insert.4
|
||||
b .L.insert.5
|
||||
.L.insert.3:
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-44]
|
||||
ldur w0, [x29, #-44]
|
||||
add sp, sp, #96
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.insert.4:
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-48]
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-52]
|
||||
adrp x15, right_child
|
||||
add x15, x15, :lo12:right_child
|
||||
ldur w14, [x29, #-52]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-56]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-60]
|
||||
ldur w0, [x29, #-56]
|
||||
ldur w1, [x29, #-60]
|
||||
bl insert
|
||||
stur w0, [x29, #-64]
|
||||
adrp x15, right_child
|
||||
add x15, x15, :lo12:right_child
|
||||
ldur w14, [x29, #-48]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldur w8, [x29, #-64]
|
||||
str w8, [x15]
|
||||
b .L.insert.6
|
||||
.L.insert.5:
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-68]
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-72]
|
||||
adrp x15, left_child
|
||||
add x15, x15, :lo12:left_child
|
||||
ldur w14, [x29, #-72]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-76]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-80]
|
||||
ldur w0, [x29, #-76]
|
||||
ldur w1, [x29, #-80]
|
||||
bl insert
|
||||
stur w0, [x29, #-84]
|
||||
adrp x15, left_child
|
||||
add x15, x15, :lo12:left_child
|
||||
ldur w14, [x29, #-68]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldur w8, [x29, #-84]
|
||||
str w8, [x15]
|
||||
b .L.insert.6
|
||||
.L.insert.6:
|
||||
b .L.insert.3
|
||||
|
||||
.text
|
||||
.globl delete
|
||||
.p2align 2
|
||||
delete:
|
||||
.L.delete.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #208
|
||||
stur w0, [x29, #-4]
|
||||
stur w1, [x29, #-8]
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-16]
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-20]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-24]
|
||||
ldur w8, [x29, #-24]
|
||||
mov w9, #-1
|
||||
cmp w8, w9
|
||||
b.eq .L.delete.1
|
||||
b .L.delete.2
|
||||
.L.delete.1:
|
||||
mov w0, #-1
|
||||
add sp, sp, #208
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.delete.2:
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-28]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-32]
|
||||
adrp x15, value
|
||||
add x15, x15, :lo12:value
|
||||
ldur w14, [x29, #-32]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-36]
|
||||
ldur w8, [x29, #-28]
|
||||
ldur w9, [x29, #-36]
|
||||
cmp w8, w9
|
||||
b.gt .L.delete.3
|
||||
b .L.delete.4
|
||||
.L.delete.3:
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-40]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-44]
|
||||
adrp x15, right_child
|
||||
add x15, x15, :lo12:right_child
|
||||
ldur w14, [x29, #-44]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-48]
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-52]
|
||||
ldur w0, [x29, #-48]
|
||||
ldur w1, [x29, #-52]
|
||||
bl delete
|
||||
stur w0, [x29, #-56]
|
||||
adrp x15, right_child
|
||||
add x15, x15, :lo12:right_child
|
||||
ldur w14, [x29, #-40]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldur w8, [x29, #-56]
|
||||
str w8, [x15]
|
||||
b .L.delete.5
|
||||
.L.delete.4:
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-60]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-64]
|
||||
adrp x15, value
|
||||
add x15, x15, :lo12:value
|
||||
ldur w14, [x29, #-64]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-68]
|
||||
ldur w8, [x29, #-60]
|
||||
ldur w9, [x29, #-68]
|
||||
cmp w8, w9
|
||||
b.lt .L.delete.6
|
||||
b .L.delete.7
|
||||
.L.delete.5:
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-72]
|
||||
ldur w0, [x29, #-72]
|
||||
add sp, sp, #208
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.delete.6:
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-76]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-80]
|
||||
adrp x15, left_child
|
||||
add x15, x15, :lo12:left_child
|
||||
ldur w14, [x29, #-80]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-84]
|
||||
ldur w8, [x29, #-20]
|
||||
stur w8, [x29, #-88]
|
||||
ldur w0, [x29, #-84]
|
||||
ldur w1, [x29, #-88]
|
||||
bl delete
|
||||
stur w0, [x29, #-92]
|
||||
adrp x15, left_child
|
||||
add x15, x15, :lo12:left_child
|
||||
ldur w14, [x29, #-76]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldur w8, [x29, #-92]
|
||||
str w8, [x15]
|
||||
b .L.delete.8
|
||||
.L.delete.7:
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-96]
|
||||
adrp x15, left_child
|
||||
add x15, x15, :lo12:left_child
|
||||
ldur w14, [x29, #-96]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-100]
|
||||
ldur w8, [x29, #-100]
|
||||
mov w9, #-1
|
||||
cmp w8, w9
|
||||
b.eq .L.delete.12
|
||||
b .L.delete.10
|
||||
.L.delete.8:
|
||||
b .L.delete.5
|
||||
.L.delete.9:
|
||||
mov w0, #-1
|
||||
add sp, sp, #208
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.delete.10:
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-104]
|
||||
adrp x15, left_child
|
||||
add x15, x15, :lo12:left_child
|
||||
ldur w14, [x29, #-104]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-108]
|
||||
ldur w8, [x29, #-108]
|
||||
mov w9, #-1
|
||||
cmp w8, w9
|
||||
b.eq .L.delete.13
|
||||
b .L.delete.16
|
||||
.L.delete.11:
|
||||
b .L.delete.8
|
||||
.L.delete.12:
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-112]
|
||||
adrp x15, right_child
|
||||
add x15, x15, :lo12:right_child
|
||||
ldur w14, [x29, #-112]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-116]
|
||||
ldur w8, [x29, #-116]
|
||||
mov w9, #-1
|
||||
cmp w8, w9
|
||||
b.eq .L.delete.9
|
||||
b .L.delete.10
|
||||
.L.delete.13:
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-120]
|
||||
adrp x15, left_child
|
||||
add x15, x15, :lo12:left_child
|
||||
ldur w14, [x29, #-120]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-124]
|
||||
ldur w8, [x29, #-124]
|
||||
mov w9, #-1
|
||||
cmp w8, w9
|
||||
b.eq .L.delete.17
|
||||
b .L.delete.18
|
||||
.L.delete.14:
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-128]
|
||||
adrp x15, right_child
|
||||
add x15, x15, :lo12:right_child
|
||||
ldur w14, [x29, #-128]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-132]
|
||||
ldur w0, [x29, #-132]
|
||||
bl find_minimum
|
||||
stur w0, [x29, #-136]
|
||||
ldur w8, [x29, #-136]
|
||||
stur w8, [x29, #-12]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-140]
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-144]
|
||||
adrp x15, value
|
||||
add x15, x15, :lo12:value
|
||||
ldur w14, [x29, #-144]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-148]
|
||||
adrp x15, value
|
||||
add x15, x15, :lo12:value
|
||||
ldur w14, [x29, #-140]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldur w8, [x29, #-148]
|
||||
str w8, [x15]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-152]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-156]
|
||||
adrp x15, right_child
|
||||
add x15, x15, :lo12:right_child
|
||||
ldur w14, [x29, #-156]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-160]
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-164]
|
||||
adrp x15, value
|
||||
add x15, x15, :lo12:value
|
||||
ldur w14, [x29, #-164]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-168]
|
||||
ldur w0, [x29, #-160]
|
||||
ldur w1, [x29, #-168]
|
||||
bl delete
|
||||
stur w0, [x29, #-172]
|
||||
adrp x15, right_child
|
||||
add x15, x15, :lo12:right_child
|
||||
ldur w14, [x29, #-152]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldur w8, [x29, #-172]
|
||||
str w8, [x15]
|
||||
b .L.delete.15
|
||||
.L.delete.15:
|
||||
b .L.delete.11
|
||||
.L.delete.16:
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-176]
|
||||
adrp x15, right_child
|
||||
add x15, x15, :lo12:right_child
|
||||
ldur w14, [x29, #-176]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-180]
|
||||
ldur w8, [x29, #-180]
|
||||
mov w9, #-1
|
||||
cmp w8, w9
|
||||
b.eq .L.delete.13
|
||||
b .L.delete.14
|
||||
.L.delete.17:
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-184]
|
||||
adrp x15, right_child
|
||||
add x15, x15, :lo12:right_child
|
||||
ldur w14, [x29, #-184]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-188]
|
||||
ldur w0, [x29, #-188]
|
||||
add sp, sp, #208
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.delete.18:
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-192]
|
||||
adrp x15, left_child
|
||||
add x15, x15, :lo12:left_child
|
||||
ldur w14, [x29, #-192]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-196]
|
||||
ldur w0, [x29, #-196]
|
||||
add sp, sp, #208
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.delete.19:
|
||||
mov w0, #0
|
||||
add sp, sp, #208
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.text
|
||||
.globl inorder
|
||||
.p2align 2
|
||||
inorder:
|
||||
.L.inorder.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #48
|
||||
stur w0, [x29, #-4]
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-8]
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-12]
|
||||
ldur w8, [x29, #-12]
|
||||
mov w9, #-1
|
||||
cmp w8, w9
|
||||
b.ne .L.inorder.1
|
||||
b .L.inorder.2
|
||||
.L.inorder.1:
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-16]
|
||||
adrp x15, left_child
|
||||
add x15, x15, :lo12:left_child
|
||||
ldur w14, [x29, #-16]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-20]
|
||||
ldur w0, [x29, #-20]
|
||||
bl inorder
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-24]
|
||||
adrp x15, value
|
||||
add x15, x15, :lo12:value
|
||||
ldur w14, [x29, #-24]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-28]
|
||||
ldur w0, [x29, #-28]
|
||||
bl putint
|
||||
mov w0, #32
|
||||
bl putch
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-32]
|
||||
adrp x15, right_child
|
||||
add x15, x15, :lo12:right_child
|
||||
ldur w14, [x29, #-32]
|
||||
sxtw x14, w14
|
||||
lsl x14, x14, #2
|
||||
add x15, x15, x14
|
||||
ldr w8, [x15]
|
||||
stur w8, [x29, #-36]
|
||||
ldur w0, [x29, #-36]
|
||||
bl inorder
|
||||
b .L.inorder.2
|
||||
.L.inorder.2:
|
||||
add sp, sp, #48
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #96
|
||||
mov w8, #0
|
||||
adrp x13, now
|
||||
str w8, [x13, #:lo12:now]
|
||||
bl getint
|
||||
stur w0, [x29, #-16]
|
||||
ldur w8, [x29, #-16]
|
||||
stur w8, [x29, #-4]
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-20]
|
||||
ldur w8, [x29, #-20]
|
||||
mov w9, #0
|
||||
cmp w8, w9
|
||||
b.eq .L.main.1
|
||||
b .L.main.2
|
||||
.L.main.1:
|
||||
mov w0, #0
|
||||
add sp, sp, #96
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
.L.main.2:
|
||||
bl getint
|
||||
stur w0, [x29, #-24]
|
||||
ldur w0, [x29, #-24]
|
||||
bl new_node
|
||||
stur w0, [x29, #-28]
|
||||
ldur w8, [x29, #-28]
|
||||
stur w8, [x29, #-8]
|
||||
mov w8, #1
|
||||
stur w8, [x29, #-12]
|
||||
b .L.main.3
|
||||
.L.main.3:
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-32]
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-36]
|
||||
ldur w8, [x29, #-32]
|
||||
ldur w9, [x29, #-36]
|
||||
cmp w8, w9
|
||||
b.lt .L.main.4
|
||||
b .L.main.5
|
||||
.L.main.4:
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-40]
|
||||
bl getint
|
||||
stur w0, [x29, #-44]
|
||||
ldur w0, [x29, #-40]
|
||||
ldur w1, [x29, #-44]
|
||||
bl insert
|
||||
stur w0, [x29, #-48]
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-52]
|
||||
ldur w8, [x29, #-52]
|
||||
mov w9, #1
|
||||
add w8, w8, w9
|
||||
stur w8, [x29, #-12]
|
||||
b .L.main.3
|
||||
.L.main.5:
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-56]
|
||||
ldur w0, [x29, #-56]
|
||||
bl inorder
|
||||
mov w0, #10
|
||||
bl putch
|
||||
bl getint
|
||||
stur w0, [x29, #-60]
|
||||
ldur w8, [x29, #-60]
|
||||
stur w8, [x29, #-4]
|
||||
mov w8, #0
|
||||
stur w8, [x29, #-12]
|
||||
b .L.main.6
|
||||
.L.main.6:
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-64]
|
||||
ldur w8, [x29, #-4]
|
||||
stur w8, [x29, #-68]
|
||||
ldur w8, [x29, #-64]
|
||||
ldur w9, [x29, #-68]
|
||||
cmp w8, w9
|
||||
b.lt .L.main.7
|
||||
b .L.main.8
|
||||
.L.main.7:
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-72]
|
||||
bl getint
|
||||
stur w0, [x29, #-76]
|
||||
ldur w0, [x29, #-72]
|
||||
ldur w1, [x29, #-76]
|
||||
bl delete
|
||||
stur w0, [x29, #-80]
|
||||
ldur w8, [x29, #-80]
|
||||
stur w8, [x29, #-8]
|
||||
ldur w8, [x29, #-12]
|
||||
stur w8, [x29, #-84]
|
||||
ldur w8, [x29, #-84]
|
||||
mov w9, #1
|
||||
add w8, w8, w9
|
||||
stur w8, [x29, #-12]
|
||||
b .L.main.6
|
||||
.L.main.8:
|
||||
ldur w8, [x29, #-8]
|
||||
stur w8, [x29, #-88]
|
||||
ldur w0, [x29, #-88]
|
||||
bl inorder
|
||||
mov w0, #10
|
||||
bl putch
|
||||
mov w0, #0
|
||||
add sp, sp, #96
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue