From 8f796fc50d668e2b68ba7147c7eb8ea2b3a7943f Mon Sep 17 00:00:00 2001 From: wangfiox Date: Mon, 10 Jun 2024 20:52:47 +0800 Subject: [PATCH] modified: Cargo.toml modified: src/ch2/quicksort.rs --- Cargo.toml | 3 -- src/ch2/quicksort.rs | 74 +++++++++++++++++--------------------------- 2 files changed, 29 insertions(+), 48 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 628976f..3afdc9b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,6 +5,3 @@ edition = "2021" [dependencies] hitc = { path = "./hitc" } - -[features] -default = ["test"] diff --git a/src/ch2/quicksort.rs b/src/ch2/quicksort.rs index a04943b..ff02064 100644 --- a/src/ch2/quicksort.rs +++ b/src/ch2/quicksort.rs @@ -6,7 +6,7 @@ pub mod tests { pub fn quicksort_example() { let mut quickSort = Func::new("QuickSort".into(), Vec::new()); - let mut bb0 = Block::new("bb0".into()); + let mut entry = Block::new("entry".into()); let addispsp_32 = Inst::Add(AddInst::new(REG_SP.into(), REG_SP.into(), (-32).into())); let sdra24sp = Inst::Sd(SdInst::new(REG_RA.into(), (24).into(), REG_SP.into())); let sds016sp = Inst::Sd(SdInst::new(REG_S0.into(), (16).into(), REG_SP.into())); @@ -15,25 +15,23 @@ pub mod tests { let bgea1a2lbb0_17 = Inst::Branch( BranchInst::new(BranchOp::Bge, REG_A1.into(), REG_A2.into(), "LBB0_17".into()) ); - bb0.push_inst(addispsp_32); - bb0.push_inst(sdra24sp); - bb0.push_inst(sds016sp); - bb0.push_inst(sds18sp); - bb0.push_inst(sds20sp); - bb0.push_inst(bgea1a2lbb0_17); - - let mut bb1 = Block::new("bb1".into()); + entry.push_inst(addispsp_32); + entry.push_inst(sdra24sp); + entry.push_inst(sds016sp); + entry.push_inst(sds18sp); + entry.push_inst(sds20sp); + entry.push_inst(bgea1a2lbb0_17); let mvs2a2 = Inst::Mv(MvInst::new(REG_S2.into(), REG_A2.into())); let mvs1a0 = Inst::Mv(MvInst::new(REG_S1.into(), REG_A0.into())); let jlbb0_3 = Inst::Jmp(JmpInst::new("LBB0_3".into())); - bb1.push_inst(mvs2a2); - bb1.push_inst(mvs1a0); - bb1.push_inst(jlbb0_3); + entry.push_inst(mvs2a2); + entry.push_inst(mvs1a0); + entry.push_inst(jlbb0_3); let mut lbb0_2 = Block::new("lbb0_2".into()); let sllia2s02 = Inst::SLL(SllInst::new(REG_A2.into(), REG_S0.into(), (2).into())); let adda2a2s1 = Inst::Add(AddInst::new(REG_A2.into(), REG_A2.into(), REG_S1.into())); - let swa00a2 = Inst::Sd(SdInst::new(REG_A0.into(), (0).into(), REG_A2.into())); + let swa00a2 = Inst::Sw(SwInst::new(REG_A0.into(), (0).into(), REG_A2.into())); let addia2s0_1 = Inst::Add(AddInst::new(REG_A2.into(), REG_S0.into(), (-1).into())); let mva0s1 = Inst::Mv(MvInst::new(REG_A0.into(), REG_S1.into())); let callquicksort = Inst::Call(CallInst::new("QuickSort".into())); @@ -63,14 +61,12 @@ pub mod tests { // lbb0_3.push_inst(lwa00a0) lbb0_3.push_inst(mvs0a1); lbb0_3.push_inst(bgea1s2lbb0_2); - - let mut bb4 = Block::new("bb4".into()); let mvs0a1 = Inst::Mv(MvInst::new(REG_S0.into(), REG_A1.into())); let mva2s2 = Inst::Mv(MvInst::new(REG_A2.into(), REG_S2.into())); let jlbb0_7 = Inst::Jmp(JmpInst::new("LBB0_7".into())); - bb4.push_inst(mvs0a1); - bb4.push_inst(mva2s2); - bb4.push_inst(jlbb0_7); + lbb0_3.push_inst(mvs0a1); + lbb0_3.push_inst(mva2s2); + lbb0_3.push_inst(jlbb0_7); let mut lbb0_5 = Block::new("LBB0_5".into()); let sllis3s22 = Inst::SLL(SllInst::new(REG_S3.into(), REG_S2.into(), (2).into())); @@ -93,14 +89,12 @@ pub mod tests { BranchInst::new(BranchOp::Bge, REG_S0.into(), REG_A2.into(), "LBB0_11".into()) ); lbb0_7.push_inst(bges0a2lbb0_11); - - let mut bb8 = Block::new("bb8".into()); let sllia3a22 = Inst::SLL(SllInst::new(REG_A3.into(), REG_A2.into(), (2).into())); let adda3a3s1 = Inst::Add(AddInst::new(REG_A3.into(), REG_A3.into(), REG_S1.into())); let mva4a2 = Inst::Mv(MvInst::new(REG_A4.into(), REG_A2.into())); - bb8.push_inst(sllia3a22); - bb8.push_inst(adda3a3s1); - bb8.push_inst(mva4a2); + lbb0_7.push_inst(sllia3a22); + lbb0_7.push_inst(adda3a3s1); + lbb0_7.push_inst(mva4a2); let mut lbb0_9 = Block::new("LBB0_9".into()); let lwa50a3 = Inst::Ld(LdInst::new(REG_A5.into(), (0).into(), REG_A3.into())); @@ -109,17 +103,16 @@ pub mod tests { ); lbb0_9.push_inst(lwa50a3); lbb0_9.push_inst(blta5a0lbb0_12); - - let mut bb10 = Block::new("bb10".into()); let addia4a4_1 = Inst::Add(AddInst::new(REG_A4.into(), REG_A4.into(), (-1).into())); let addia2a2_1 = Inst::Add(AddInst::new(REG_A2.into(), REG_A2.into(), (-1).into())); let addia3a3_4 = Inst::Add(AddInst::new(REG_A3.into(), REG_A3.into(), (-4).into())); let blts0a4lbb0_9 = Inst::Branch( BranchInst::new(BranchOp::Blt, REG_S0.into(), REG_A4.into(), "LBB0_9".into()) ); - bb10.push_inst(addia4a4_1); - bb10.push_inst(addia2a2_1); - bb10.push_inst(addia3a3_4); + lbb0_9.push_inst(addia4a4_1); + lbb0_9.push_inst(addia2a2_1); + lbb0_9.push_inst(addia3a3_4); + lbb0_9.push_inst(blts0a4lbb0_9); let mut lbb0_11 = Block::new("LBB0_11".into()); let bges0a2lbb0_6 = Inst::Branch( @@ -154,24 +147,20 @@ pub mod tests { let bgea4a0lbb0_5 = Inst::Branch( BranchInst::new(BranchOp::Bge, REG_A4.into(), REG_A0.into(), "LBB0_5".into()) ); - // lw lbb0_14.push_inst(bgea4a0lbb0_5); - - let mut lbb0_15 = Block::new("LBB0_15".into()); + // push_inst lw let addis0s01 = Inst::Add(AddInst::new(REG_S0.into(), REG_S0.into(), (1).into())); let addia3a34 = Inst::Add(AddInst::new(REG_A3.into(), REG_A3.into(), (4).into())); let bnea2s0lbb0_14 = Inst::Branch( BranchInst::new(BranchOp::Bne, REG_A2.into(), REG_S0.into(), "LBB0_14".into()) ); - lbb0_15.push_inst(addis0s01); - lbb0_15.push_inst(addia3a34); - lbb0_15.push_inst(bnea2s0lbb0_14); - - let mut bb16 = Block::new("bb16".into()); + lbb0_14.push_inst(addis0s01); + lbb0_14.push_inst(addia3a34); + lbb0_14.push_inst(bnea2s0lbb0_14); let mvs0a2 = Inst::Mv(MvInst::new(REG_S0.into(), REG_A2.into())); let jlbb0_2 = Inst::Jmp(JmpInst::new("LBB0_2".into())); - bb16.push_inst(mvs0a2); - bb16.push_inst(jlbb0_2); + lbb0_14.push_inst(mvs0a2); + lbb0_14.push_inst(jlbb0_2); let mut lbb0_17 = Block::new("LBB0_17".into()); // let lia00 = Inst::Li(LiInst::new(REG_A0.into(), (0).into())); @@ -189,25 +178,20 @@ pub mod tests { lbb0_17.push_inst(addispsp32); lbb0_17.push_inst(ret); - quickSort.push_bb(bb0); - quickSort.push_bb(bb1); + quickSort.push_bb(entry); quickSort.push_bb(lbb0_2); quickSort.push_bb(lbb0_3); - quickSort.push_bb(bb4); quickSort.push_bb(lbb0_5); quickSort.push_bb(llb0_6); quickSort.push_bb(lbb0_7); - quickSort.push_bb(bb8); quickSort.push_bb(lbb0_9); - quickSort.push_bb(bb10); quickSort.push_bb(lbb0_11); quickSort.push_bb(lbb0_12); quickSort.push_bb(lbb0_13); quickSort.push_bb(lbb0_14); - quickSort.push_bb(lbb0_15); - quickSort.push_bb(bb16); quickSort.push_bb(lbb0_17); + quickSort.set_entry("entry".into()); let asm = quickSort.gen_asm(); print!("{}", asm); }