From 9d11d10cf81ea7010278892c17519b0545f75017 Mon Sep 17 00:00:00 2001 From: wangfiox Date: Tue, 18 Jun 2024 18:28:25 +0800 Subject: [PATCH] =?UTF-8?q?=20=20=20=20:bug:=20=E7=8E=B0=E5=9C=A8=E9=81=87?= =?UTF-8?q?=E5=88=B0=E9=97=AE=E9=A2=98=EF=BC=8C=E6=B1=87=E7=BC=96=E5=99=A8?= =?UTF-8?q?=E8=AF=86=E5=88=AB=E4=B8=8D=E5=88=B0=20main=20=E5=87=BD?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hitc | 2 +- output/a.out | Bin 9360 -> 0 bytes output/qs.s | 82 +++++++++++++++++++++---------------------- src/ch2/quicksort.rs | 72 ++++++++++++++++++------------------- src/ch4/a.out | Bin 0 -> 15480 bytes src/ch4/swap.c | 9 +++++ src/ch4/swap.s | 34 ++++++++++++++++++ 7 files changed, 121 insertions(+), 78 deletions(-) delete mode 100755 output/a.out create mode 100755 src/ch4/a.out create mode 100644 src/ch4/swap.c create mode 100644 src/ch4/swap.s diff --git a/hitc b/hitc index 52893ac..f70c3b2 160000 --- a/hitc +++ b/hitc @@ -1 +1 @@ -Subproject commit 52893ac4409b6879e5d91126493c7d5c88038797 +Subproject commit f70c3b2ec8fc48cbf6797c055d4ecb144e7b6024 diff --git a/output/a.out b/output/a.out deleted file mode 100755 index 701d29ca832e0a29c3a2afb06f45117d452179a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9360 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 diff --git a/output/qs.s b/output/qs.s index 70e6e2e..60dc7f3 100644 --- a/output/qs.s +++ b/output/qs.s @@ -19,11 +19,11 @@ arr: .word 0x5 .word 0x7 .word 0x8 -.zero 0 -.globl LC0 +.zero +.globl .LC0 .section .rodata .align 3 -LC0: +.LC0: .string " %d\n" .text @@ -31,8 +31,8 @@ LC0: .globl QuickSort .type QuickSort, @function QuickSort: -entry2: -bge a1,a1,L31 +.entry2: +bge a1,a1,.L31 addi sp,sp,-16 sd ra,8(sp) call QuickSort.part.0 @@ -40,7 +40,7 @@ ld ra,8(sp) li a0,0 addi sp,sp,16 ret -L31: +.L31: li a0,0 ret .size QuickSort, .-QuickSort @@ -49,7 +49,7 @@ ret .globl QuickSort.part.0 .type QuickSort.part.0, @function QuickSort.part.0: -entry1: +.entry1: addi sp,sp,-32 sd s1,8(sp) sd s2,0(sp) @@ -57,51 +57,51 @@ sd ra,24(sp) sd s0,16(sp) mv s1,a0 mv s2,a2 -L10: +.L10: sw a7,0(a5) addi a2,s0,-1 -bge a1,a1,L3 +bge a1,a1,.L3 mv a0,s1 call QuickSort.part.0 -L11: +.L11: lw a6,0(a5) addi a5,a5,-4 -bge a6,a6,L5 +bge a6,a6,.L5 slli a5,a3,2 add a0,s1,a5 addi s0,a3,1 -ble a4,a4,L4 +ble a4,a4,.L4 slli t1,a4,2 add t1,s1,t1 lw a3,0(t1) sw a3,0(a0) -ble a4,a4,L26 +ble a4,a4,.L26 addi a5,a5,4 add a5,s1,a5 -j L7 -L14: +j .L7 +.L14: slli a5,a1,2 add a5,s1,a5 lw a7,0(a5) mv a4,s2 mv a3,a1 mv s0,a1 -bge a1,a1,L3 -L17: +bge a1,a1,.L3 +.L17: mv s0,a3 -j L10 -L2: +j .L10 +.L2: slli a5,a4,2 add a5,s1,a5 -j L11 -L24: +j .L11 +.L24: slli a5,a3,2 -L26: +.L26: mv a3,s0 -L27: +.L27: slli a5,s0,2 add a5,s1,a5 -L3: +.L3: addi a1,s0,1 ld ra,24(sp) ld s0,16(sp) @@ -109,48 +109,48 @@ ld s1,8(sp) ld s2,0(sp) addi sp,sp,32 ret -L4: +.L4: add a5,s1,a5 mv s0,a3 -j L10 -L5: +j .L10 +.L5: addi a4,a4,-1 -beq a4,a4,L24 -L7: +beq a4,a4,.L24 +.L7: lw a6,0(a5) mv a3,s0 addi s0,s0,1 -blt a6,a6,L9 -ble a4,a4,L17 +blt a6,a6,.L9 +ble a4,a4,.L17 sw a6,0(t1) addi a4,a4,-1 -bgt a4,a4,L2 -L9: +bgt a4,a4,.L2 +.L9: addi a5,a5,4 -beq a4,a4,L27 +beq a4,a4,.L27 .size QuickSort.part.0, .-QuickSort.part.0 .text .align 3 .globl main .type main, @function main: -entry3: +.entry3: addi sp,sp,-32 li a2,9 li a1,10 -la s0,arr +lla s0,arr sd s0,16(sp) sd s1,8(sp) sd ra,24(sp) -la s0,arr +lla s0,arr call QuickSort.part.0 -la s1,arr+40 -L35: +lla s1,arr+40 +.L35: lw a1,0(s0) -la a0,LC0 +lla a0,.LC0 addi s0,s0,4 call printf@plt -bne s0,s0,L35 +bne s0,s0,.L35 ld ra,24(sp) ld s0,16(sp) ld s1,8(sp) diff --git a/src/ch2/quicksort.rs b/src/ch2/quicksort.rs index edbe7a5..28a9542 100644 --- a/src/ch2/quicksort.rs +++ b/src/ch2/quicksort.rs @@ -8,7 +8,7 @@ pub mod tests { #[test] pub fn quicksort_example() { /* ---------- ---------- quicksort.part.0 ---------- ---------- */ - let mut entry = Block::new("entry1".into()); + let mut entry = Block::new(".entry1".into()); let addispsp_32 = Inst::Add(AddInst::new(REG_SP.into(), REG_SP.into(), (-32).into())); let sds18sp = Inst::Sd(SdInst::new(REG_S1.into(), (8).into(), REG_SP.into())); let sds20sp = Inst::Sd(SdInst::new(REG_S2.into(), (0).into(), REG_SP.into())); @@ -18,44 +18,44 @@ pub mod tests { let mvs2a2 = Inst::Mv(MvInst::new(REG_S2.into(), REG_A2.into())); entry.extend_insts(vec![addispsp_32, sds18sp, sds20sp, sdra24sp, sds016sp, mvs1a0, mvs2a2]); - let mut l14 = Block::new("L14".into()); + let mut l14 = Block::new(".L14".into()); let sllia5a12 = Inst::Sll(SllInst::new(REG_A5.into(), REG_A1.into(), (2).into())); let adda5s1a5 = Inst::Add(AddInst::new(REG_A5.into(), REG_S1.into(), REG_A5.into())); let lwa70a5 = Inst::Lw(LwInst::new(REG_A7.into(), (0).into(), REG_A5.into())); let mva4s2 = Inst::Mv(MvInst::new(REG_A4.into(), REG_S2.into())); let mva3a1 = Inst::Mv(MvInst::new(REG_A3.into(), REG_A1.into())); let mvs0a1 = Inst::Mv(MvInst::new(REG_S0.into(), REG_A1.into())); - let bgea1s2l3 = Inst::Bge(BgeInst::new(REG_A1.into(), REG_S2.into(), "L3".into())); + let bgea1s2l3 = Inst::Bge(BgeInst::new(REG_A1.into(), REG_S2.into(), ".L3".into())); l14.extend_insts(vec![sllia5a12, adda5s1a5, lwa70a5, mva4s2, mva3a1, mvs0a1, bgea1s2l3]); - let mut l2 = Block::new("L2".into()); + let mut l2 = Block::new(".L2".into()); let sllia5a42 = Inst::Sll(SllInst::new(REG_A5.into(), REG_A4.into(), (2).into())); let adda5s1a5 = Inst::Add(AddInst::new(REG_A5.into(), REG_S1.into(), REG_A5.into())); - let jl11 = Inst::Jmp(JmpInst::new("L11".into())); + let jl11 = Inst::Jmp(JmpInst::new(".L11".into())); l2.extend_insts(vec![sllia5a42, adda5s1a5, jl11]); - let mut l5 = Block::new("L5".into()); + let mut l5 = Block::new(".L5".into()); // FIXME 这里应该要把 add 改成 addw let addiw1414_1 = Inst::Add(AddInst::new(REG_A4.into(), REG_A4.into(), (-1).into())); - let beqa4a3l24 = Inst::Beq(BeqInst::new(REG_A4.into(), REG_A3.into(), "L24".into())); + let beqa4a3l24 = Inst::Beq(BeqInst::new(REG_A4.into(), REG_A3.into(), ".L24".into())); l5.extend_insts(vec![addiw1414_1, beqa4a3l24]); - let mut l11 = Block::new("L11".into()); + let mut l11 = Block::new(".L11".into()); let lwa60a5 = Inst::Lw(LwInst::new(REG_A6.into(), (0).into(), REG_A5.into())); let addia5a5_4 = Inst::Add(AddInst::new(REG_A5.into(), REG_A5.into(), (-4).into())); - let bgea6a7l5 = Inst::Bge(BgeInst::new(REG_A6.into(), REG_A7.into(), "L5".into())); + let bgea6a7l5 = Inst::Bge(BgeInst::new(REG_A6.into(), REG_A7.into(), ".L5".into())); let sllia5a32 = Inst::Sll(SllInst::new(REG_A5.into(), REG_A3.into(), (2).into())); let adda0s1a5 = Inst::Add(AddInst::new(REG_A0.into(), REG_S1.into(), REG_A5.into())); let addiws0a31 = Inst::Add(AddInst::new(REG_S0.into(), REG_A3.into(), (1).into())); - let blea4a3l4 = Inst::Ble(BleInst::new(REG_A4.into(), REG_A3.into(), "L4".into())); + let blea4a3l4 = Inst::Ble(BleInst::new(REG_A4.into(), REG_A3.into(), ".L4".into())); let sllit1a42 = Inst::Sll(SllInst::new(REG_T1.into(), REG_A4.into(), (2).into())); let addt1s1t1 = Inst::Add(AddInst::new(REG_T1.into(), REG_S1.into(), REG_T1.into())); let lwa30t1 = Inst::Lw(LwInst::new(REG_A3.into(), (0).into(), REG_T1.into())); let swa30a0 = Inst::Sw(SwInst::new(REG_A3.into(), (0).into(), REG_A0.into())); - let blea4s0l26 = Inst::Ble(BleInst::new(REG_A4.into(), REG_S0.into(), "L26".into())); + let blea4s0l26 = Inst::Ble(BleInst::new(REG_A4.into(), REG_S0.into(), ".L26".into())); let addia5a54 = Inst::Add(AddInst::new(REG_A5.into(), REG_A5.into(), (4).into())); let adda5s1a5 = Inst::Add(AddInst::new(REG_A5.into(), REG_S1.into(), REG_A5.into())); - let jl7 = Inst::Jmp(JmpInst::new("L7".into())); + let jl7 = Inst::Jmp(JmpInst::new(".L7".into())); l11.extend_insts( vec![ lwa60a5, @@ -76,20 +76,20 @@ pub mod tests { ] ); - let mut l9 = Block::new("L9".into()); + let mut l9 = Block::new(".L9".into()); let addia5a54 = Inst::Add(AddInst::new(REG_A5.into(), REG_A5.into(), (4).into())); - let beqa4s0l27 = Inst::Beq(BeqInst::new(REG_A4.into(), REG_S0.into(), "L27".into())); + let beqa4s0l27 = Inst::Beq(BeqInst::new(REG_A4.into(), REG_S0.into(), ".L27".into())); l9.extend_insts(vec![addia5a54, beqa4s0l27]); - let mut l7 = Block::new("L7".into()); + let mut l7 = Block::new(".L7".into()); let lwa60a5 = Inst::Lw(LwInst::new(REG_A6.into(), (0).into(), REG_A5.into())); let mva3s0 = Inst::Mv(MvInst::new(REG_A3.into(), REG_S0.into())); let addiws0s01 = Inst::Add(AddInst::new(REG_S0.into(), REG_S0.into(), (1).into())); - let blta6a7l9 = Inst::Blt(BltInst::new(REG_A6.into(), REG_A7.into(), "L9".into())); - let blea4a3l17 = Inst::Ble(BleInst::new(REG_A4.into(), REG_A3.into(), "L17".into())); + let blta6a7l9 = Inst::Blt(BltInst::new(REG_A6.into(), REG_A7.into(), ".L9".into())); + let blea4a3l17 = Inst::Ble(BleInst::new(REG_A4.into(), REG_A3.into(), ".L17".into())); let swa60t1 = Inst::Sw(SwInst::new(REG_A6.into(), (0).into(), REG_T1.into())); let addiwa4a4_1 = Inst::Add(AddInst::new(REG_A4.into(), REG_A4.into(), (-1).into())); - let bgta4a3l2 = Inst::Bgt(BgtInst::new(REG_A4.into(), REG_A3.into(), "L2".into())); + let bgta4a3l2 = Inst::Bgt(BgtInst::new(REG_A4.into(), REG_A3.into(), ".L2".into())); l7.extend_insts( vec![ lwa60a5, @@ -103,25 +103,25 @@ pub mod tests { ] ); - let mut l17 = Block::new("L17".into()); + let mut l17 = Block::new(".L17".into()); let mvs0a3 = Inst::Mv(MvInst::new(REG_S0.into(), REG_A3.into())); - let jl10 = Inst::Jmp(JmpInst::new("L10".into())); + let jl10 = Inst::Jmp(JmpInst::new(".L10".into())); l17.extend_insts(vec![mvs0a3, jl10]); - let mut l27 = Block::new("L27".into()); + let mut l27 = Block::new(".L27".into()); let siila5s02 = Inst::Sll(SllInst::new(REG_A5.into(), REG_S0.into(), (2).into())); let adda5s1a5 = Inst::Add(AddInst::new(REG_A5.into(), REG_S1.into(), REG_A5.into())); l27.extend_insts(vec![siila5s02, adda5s1a5]); - let mut l10 = Block::new("L10".into()); + let mut l10 = Block::new(".L10".into()); let swa70a5 = Inst::Sw(SwInst::new(REG_A7.into(), (0).into(), REG_A5.into())); let addiwa2s0_1 = Inst::Add(AddInst::new(REG_A2.into(), REG_S0.into(), (-1).into())); - let bgea1a2l3 = Inst::Bge(BgeInst::new(REG_A1.into(), REG_A2.into(), "L3".into())); + let bgea1a2l3 = Inst::Bge(BgeInst::new(REG_A1.into(), REG_A2.into(), ".L3".into())); let mva0s1 = Inst::Mv(MvInst::new(REG_A0.into(), REG_S1.into())); let callQuickSortpart0 = Inst::Call(CallInst::new("QuickSort.part.0".into())); l10.extend_insts(vec![swa70a5, addiwa2s0_1, bgea1a2l3, mva0s1, callQuickSortpart0]); - let mut l3 = Block::new("L3".into()); + let mut l3 = Block::new(".L3".into()); let addiwa1s01 = Inst::Add(AddInst::new(REG_A1.into(), REG_S0.into(), (1).into())); let ldra24sp = Inst::Ld(LdInst::new(REG_RA.into(), (24).into(), REG_SP.into())); let lds016sp = Inst::Ld(LdInst::new(REG_S0.into(), (16).into(), REG_SP.into())); @@ -131,18 +131,18 @@ pub mod tests { let ret = Inst::Ret; l3.extend_insts(vec![addiwa1s01, ldra24sp, lds016sp, lds18sp, lds20sp, addispsp32, ret]); - let mut l26 = Block::new("L26".into()); + let mut l26 = Block::new(".L26".into()); let mva3s0 = Inst::Mv(MvInst::new(REG_A3.into(), REG_S0.into())); l26.extend_insts(vec![mva3s0]); - let mut l24 = Block::new("L24".into()); + let mut l24 = Block::new(".L24".into()); let sllia5a32 = Inst::Sll(SllInst::new(REG_A5.into(), REG_A3.into(), (2).into())); l24.extend_insts(vec![sllia5a32]); - let mut l4 = Block::new("L4".into()); + let mut l4 = Block::new(".L4".into()); let adda5s1a5 = Inst::Add(AddInst::new(REG_A5.into(), REG_S1.into(), REG_A5.into())); let mvs0a3 = Inst::Mv(MvInst::new(REG_S0.into(), REG_A3.into())); - let jl10 = Inst::Jmp(JmpInst::new("L10".into())); + let jl10 = Inst::Jmp(JmpInst::new(".L10".into())); l4.extend_insts(vec![adda5s1a5, mvs0a3, jl10]); let mut QuickSortPart0 = Func::new("QuickSort.part.0".into(), Vec::new(), entry); @@ -161,8 +161,8 @@ pub mod tests { QuickSortPart0.push_bb(l4); /* ---------- ---------- quicksort ---------- ---------- */ - let mut entry = Block::new("entry2".into()); - let bgea1a2l31 = Inst::Bge(BgeInst::new(REG_A1.into(), REG_A2.into(), "L31".into())); + let mut entry = Block::new(".entry2".into()); + let bgea1a2l31 = Inst::Bge(BgeInst::new(REG_A1.into(), REG_A2.into(), ".L31".into())); let addispsp_16 = Inst::Add(AddInst::new(REG_SP.into(), REG_SP.into(), (-16).into())); let sdra8sp = Inst::Sd(SdInst::new(REG_RA.into(), (8).into(), REG_SP.into())); let callQuickSortpart0 = Inst::Call(CallInst::new("QuickSort.part.0".into())); @@ -183,7 +183,7 @@ pub mod tests { ] ); - let mut l31 = Block::new("L31".into()); + let mut l31 = Block::new(".L31".into()); let lia00 = Inst::Li(LiInst::new(REG_A0.into(), (0).into())); let ret = Inst::Ret; l31.extend_insts(vec![lia00, ret]); @@ -192,7 +192,7 @@ pub mod tests { QuickSort.push_bb(l31); /* ---------- ---------- main ---------- ---------- */ - let mut entry = Block::new("entry3".into()); + let mut entry = Block::new(".entry3".into()); let addispsp_32 = Inst::Add(AddInst::new(REG_SP.into(), REG_SP.into(), (-32).into())); let lia29 = Inst::Li(LiInst::new(REG_A2.into(), (9).into())); let lia10 = Inst::Li(LiInst::new(REG_A1.into(), (10).into())); @@ -219,13 +219,13 @@ pub mod tests { ] ); - let mut l35 = Block::new("L35".into()); + let mut l35 = Block::new(".L35".into()); let lwa10s0 = Inst::Lw(LwInst::new(REG_A1.into(), (0).into(), REG_S0.into())); // FIXME lc0 是 .string - let llaa0lc0 = Inst::La(LaInst::new(REG_A0.into(), "LC0".into())); + let llaa0lc0 = Inst::La(LaInst::new(REG_A0.into(), ".LC0".into())); let addis0s04 = Inst::Add(AddInst::new(REG_S0.into(), REG_S0.into(), (4).into())); let callprintf = Inst::Call(CallInst::new("printf@plt".into())); - let bnes0s1l35 = Inst::Bne(BneInst::new(REG_S0.into(), REG_S1.into(), "L35".into())); + let bnes0s1l35 = Inst::Bne(BneInst::new(REG_S0.into(), REG_S1.into(), ".L35".into())); let ldra24sp = Inst::Ld(LdInst::new(REG_RA.into(), (24).into(), REG_SP.into())); let lds016sp = Inst::Ld(LdInst::new(REG_S0.into(), (16).into(), REG_SP.into())); let lds18sp = Inst::Ld(LdInst::new(REG_S1.into(), (8).into(), REG_SP.into())); @@ -270,7 +270,7 @@ pub mod tests { }); let lc0 = Var::Str(Str { - name: "LC0".into(), + name: ".LC0".into(), init: Some(" %d\\n".into()), is_const: true, }); diff --git a/src/ch4/a.out b/src/ch4/a.out new file mode 100755 index 0000000000000000000000000000000000000000..598a021267b7ce2993d029600edaad48e6d1b624 GIT binary patch literal 15480 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 a^R!M3B+igZ&z@WJ-)#2?9}E#fs`@96o3X_J literal 0 HcmV?d00001 diff --git a/src/ch4/swap.c b/src/ch4/swap.c new file mode 100644 index 0000000..7397f9d --- /dev/null +++ b/src/ch4/swap.c @@ -0,0 +1,9 @@ +void swap(int * a, int * b) { + (*a) ^= (*b) ^= (*a) ^= (*b); +} + +int main(void) { + int a = 5, b = 10; + swap(&a, &b); + return a; +} \ No newline at end of file diff --git a/src/ch4/swap.s b/src/ch4/swap.s new file mode 100644 index 0000000..a8cfcb1 --- /dev/null +++ b/src/ch4/swap.s @@ -0,0 +1,34 @@ + .file "swap.c" + .option nopic + .attribute arch, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0" + .attribute unaligned_access, 0 + .attribute stack_align, 16 + + .text + .align 1 + .globl swap + .type swap, @function +swap: + lw a4,0(a1) + lw a5,0(a0) + xor a5,a5,a4 + sw a5,0(a0) + lw a4,0(a1) + xor a5,a5,a4 + sw a5,0(a1) + lw a4,0(a0) + xor a5,a5,a4 + sw a5,0(a0) + ret + .size swap, .-swap + + .section .text.startup,"ax",@progbits + .align 1 + .globl main + .type main, @function +main: + li a0,10 + ret + .size main, .-main + .ident "GCC: (Arch Linux Repositories) 14.1.0" + .section .note.GNU-stack,"",@progbits