From e4eec1e81dd55bdde958ffccd63f7211934758a9 Mon Sep 17 00:00:00 2001 From: Chunmyong Park Date: Thu, 2 Jul 2020 14:28:58 +0000 Subject: [PATCH] Update skeleton --- examples/c/cond_and_loop.c | 2 +- examples/c/fibonacci.c | 2 +- examples/c/foo3.c | 2 +- examples/c/simple.c | 2 +- examples/c/while_continue_break.c | 2 +- examples/ir0/cond_and_loop.ir | 2 +- examples/ir0/fibonacci.ir | 2 +- examples/ir0/foo3.ir | 2 +- examples/ir0/simple.ir | 2 +- examples/ir0/while_continue_break.ir | 2 +- examples/ir1/cond_and_loop.ir | 2 +- examples/ir1/fibonacci.ir | 2 +- examples/ir1/foo3.ir | 2 +- examples/ir1/simple.ir | 2 +- examples/ir1/while_continue_break.ir | 2 +- examples/ir2/cond_and_loop.ir | 2 +- examples/ir2/fibonacci.ir | 2 +- examples/ir2/foo3.ir | 2 +- examples/ir2/simple.ir | 2 +- examples/ir2/while_continue_break.ir | 2 +- examples/ir3/cond_and_loop.ir | 2 +- examples/ir3/fibonacci.ir | 2 +- examples/ir3/foo3.ir | 2 +- examples/ir3/simple.ir | 2 +- examples/ir3/while_continue_break.ir | 2 +- examples/ir4/cond_and_loop.ir | 2 +- examples/ir4/fibonacci.ir | 2 +- examples/ir4/foo3.ir | 2 +- examples/ir4/simple.ir | 2 +- examples/ir4/while_continue_break.ir | 2 +- src/asm/mod.rs | 2 ++ src/asm/write_asm.rs | 1 + src/tests.rs | 3 +-- 33 files changed, 34 insertions(+), 32 deletions(-) diff --git a/examples/c/cond_and_loop.c b/examples/c/cond_and_loop.c index 94f6508..1e33551 100644 --- a/examples/c/cond_and_loop.c +++ b/examples/c/cond_and_loop.c @@ -1,4 +1,4 @@ -int nonce = 0; // For random input +int nonce = 1; // For random input int main() { int i; diff --git a/examples/c/fibonacci.c b/examples/c/fibonacci.c index b075716..151c39d 100644 --- a/examples/c/fibonacci.c +++ b/examples/c/fibonacci.c @@ -1,4 +1,4 @@ -int nonce = 0; // For random input +int nonce = 1; // For random input int fibonacci(int n) { if (n < 2) { diff --git a/examples/c/foo3.c b/examples/c/foo3.c index 6082508..95906a6 100644 --- a/examples/c/foo3.c +++ b/examples/c/foo3.c @@ -1,4 +1,4 @@ -int nonce = 0; // For random input +int nonce = 1; // For random input int g = 10; int foo(int, int k); diff --git a/examples/c/simple.c b/examples/c/simple.c index 99d18c3..ddec5b3 100644 --- a/examples/c/simple.c +++ b/examples/c/simple.c @@ -1,4 +1,4 @@ -int nonce = 0; // For random input +int nonce = 1; // For random input int main() { diff --git a/examples/c/while_continue_break.c b/examples/c/while_continue_break.c index 6dd9de6..30d3eac 100644 --- a/examples/c/while_continue_break.c +++ b/examples/c/while_continue_break.c @@ -1,4 +1,4 @@ -int nonce = 0; // For random input +int nonce = 1; // For random input int foo() { int sum = 0; diff --git a/examples/ir0/cond_and_loop.ir b/examples/ir0/cond_and_loop.ir index a560e57..5a12c22 100644 --- a/examples/ir0/cond_and_loop.ir +++ b/examples/ir0/cond_and_loop.ir @@ -1,4 +1,4 @@ -var i32 @nonce = 0 +var i32 @nonce = 1 fun i32 @main () { init: diff --git a/examples/ir0/fibonacci.ir b/examples/ir0/fibonacci.ir index b8e07d3..b1a213e 100644 --- a/examples/ir0/fibonacci.ir +++ b/examples/ir0/fibonacci.ir @@ -1,4 +1,4 @@ -var i32 @nonce = 0 +var i32 @nonce = 1 fun i32 @fibonacci (i32) { init: diff --git a/examples/ir0/foo3.ir b/examples/ir0/foo3.ir index 5966874..d21b8b7 100644 --- a/examples/ir0/foo3.ir +++ b/examples/ir0/foo3.ir @@ -1,5 +1,5 @@ var i32 @g = 10 -var i32 @nonce = 0 +var i32 @nonce = 1 fun i32 @foo (i32, i32) { init: diff --git a/examples/ir0/simple.ir b/examples/ir0/simple.ir index fdbc6ff..ab82861 100644 --- a/examples/ir0/simple.ir +++ b/examples/ir0/simple.ir @@ -1,4 +1,4 @@ -var i32 @nonce = 0 +var i32 @nonce = 1 fun i32 @main () { init: diff --git a/examples/ir0/while_continue_break.ir b/examples/ir0/while_continue_break.ir index c95fb3e..28958e9 100644 --- a/examples/ir0/while_continue_break.ir +++ b/examples/ir0/while_continue_break.ir @@ -1,4 +1,4 @@ -var i32 @nonce = 0 +var i32 @nonce = 1 fun i32 @foo () { init: diff --git a/examples/ir1/cond_and_loop.ir b/examples/ir1/cond_and_loop.ir index 4bbfaf0..e9bfd19 100644 --- a/examples/ir1/cond_and_loop.ir +++ b/examples/ir1/cond_and_loop.ir @@ -1,4 +1,4 @@ -var i32 @nonce = 0 +var i32 @nonce = 1 fun i32 @main () { init: diff --git a/examples/ir1/fibonacci.ir b/examples/ir1/fibonacci.ir index 4a8aa1a..8ee9ac3 100644 --- a/examples/ir1/fibonacci.ir +++ b/examples/ir1/fibonacci.ir @@ -1,4 +1,4 @@ -var i32 @nonce = 0 +var i32 @nonce = 1 fun i32 @fibonacci (i32) { init: diff --git a/examples/ir1/foo3.ir b/examples/ir1/foo3.ir index 244e6b7..18924b6 100644 --- a/examples/ir1/foo3.ir +++ b/examples/ir1/foo3.ir @@ -1,5 +1,5 @@ var i32 @g = 10 -var i32 @nonce = 0 +var i32 @nonce = 1 fun i32 @foo (i32, i32) { init: diff --git a/examples/ir1/simple.ir b/examples/ir1/simple.ir index aa4e58e..eac5417 100644 --- a/examples/ir1/simple.ir +++ b/examples/ir1/simple.ir @@ -1,4 +1,4 @@ -var i32 @nonce = 0 +var i32 @nonce = 1 fun i32 @main () { init: diff --git a/examples/ir1/while_continue_break.ir b/examples/ir1/while_continue_break.ir index b8a7650..c68bbf2 100644 --- a/examples/ir1/while_continue_break.ir +++ b/examples/ir1/while_continue_break.ir @@ -1,4 +1,4 @@ -var i32 @nonce = 0 +var i32 @nonce = 1 fun i32 @foo () { init: diff --git a/examples/ir2/cond_and_loop.ir b/examples/ir2/cond_and_loop.ir index 550f7d9..1bc9f49 100644 --- a/examples/ir2/cond_and_loop.ir +++ b/examples/ir2/cond_and_loop.ir @@ -1,4 +1,4 @@ -var i32 @nonce = 0 +var i32 @nonce = 1 fun i32 @main () { init: diff --git a/examples/ir2/fibonacci.ir b/examples/ir2/fibonacci.ir index b010132..b5af402 100644 --- a/examples/ir2/fibonacci.ir +++ b/examples/ir2/fibonacci.ir @@ -1,4 +1,4 @@ -var i32 @nonce = 0 +var i32 @nonce = 1 fun i32 @fibonacci (i32) { init: diff --git a/examples/ir2/foo3.ir b/examples/ir2/foo3.ir index f9c66db..858bb01 100644 --- a/examples/ir2/foo3.ir +++ b/examples/ir2/foo3.ir @@ -1,5 +1,5 @@ var i32 @g = 10 -var i32 @nonce = 0 +var i32 @nonce = 1 fun i32 @foo (i32, i32) { init: diff --git a/examples/ir2/simple.ir b/examples/ir2/simple.ir index 08f729c..27bcd25 100644 --- a/examples/ir2/simple.ir +++ b/examples/ir2/simple.ir @@ -1,4 +1,4 @@ -var i32 @nonce = 0 +var i32 @nonce = 1 fun i32 @main () { init: diff --git a/examples/ir2/while_continue_break.ir b/examples/ir2/while_continue_break.ir index d5a70a6..1772e6c 100644 --- a/examples/ir2/while_continue_break.ir +++ b/examples/ir2/while_continue_break.ir @@ -1,4 +1,4 @@ -var i32 @nonce = 0 +var i32 @nonce = 1 fun i32 @foo () { init: diff --git a/examples/ir3/cond_and_loop.ir b/examples/ir3/cond_and_loop.ir index 483b5d1..9d97c35 100644 --- a/examples/ir3/cond_and_loop.ir +++ b/examples/ir3/cond_and_loop.ir @@ -1,4 +1,4 @@ -var i32 @nonce = 0 +var i32 @nonce = 1 fun i32 @main () { init: diff --git a/examples/ir3/fibonacci.ir b/examples/ir3/fibonacci.ir index 3f8bbf9..b570e53 100644 --- a/examples/ir3/fibonacci.ir +++ b/examples/ir3/fibonacci.ir @@ -1,4 +1,4 @@ -var i32 @nonce = 0 +var i32 @nonce = 1 fun i32 @fibonacci (i32) { init: diff --git a/examples/ir3/foo3.ir b/examples/ir3/foo3.ir index a74d49c..41cd8a5 100644 --- a/examples/ir3/foo3.ir +++ b/examples/ir3/foo3.ir @@ -1,5 +1,5 @@ var i32 @g = 10 -var i32 @nonce = 0 +var i32 @nonce = 1 fun i32 @foo (i32, i32) { init: diff --git a/examples/ir3/simple.ir b/examples/ir3/simple.ir index ce4de28..d85f2be 100644 --- a/examples/ir3/simple.ir +++ b/examples/ir3/simple.ir @@ -1,4 +1,4 @@ -var i32 @nonce = 0 +var i32 @nonce = 1 fun i32 @main () { init: diff --git a/examples/ir3/while_continue_break.ir b/examples/ir3/while_continue_break.ir index 7256593..1f49e5c 100644 --- a/examples/ir3/while_continue_break.ir +++ b/examples/ir3/while_continue_break.ir @@ -1,4 +1,4 @@ -var i32 @nonce = 0 +var i32 @nonce = 1 fun i32 @foo () { init: diff --git a/examples/ir4/cond_and_loop.ir b/examples/ir4/cond_and_loop.ir index 4c93388..7ee3c90 100644 --- a/examples/ir4/cond_and_loop.ir +++ b/examples/ir4/cond_and_loop.ir @@ -1,4 +1,4 @@ -var i32 @nonce = 0 +var i32 @nonce = 1 fun i32 @main () { init: diff --git a/examples/ir4/fibonacci.ir b/examples/ir4/fibonacci.ir index 3f8bbf9..b570e53 100644 --- a/examples/ir4/fibonacci.ir +++ b/examples/ir4/fibonacci.ir @@ -1,4 +1,4 @@ -var i32 @nonce = 0 +var i32 @nonce = 1 fun i32 @fibonacci (i32) { init: diff --git a/examples/ir4/foo3.ir b/examples/ir4/foo3.ir index a74d49c..41cd8a5 100644 --- a/examples/ir4/foo3.ir +++ b/examples/ir4/foo3.ir @@ -1,5 +1,5 @@ var i32 @g = 10 -var i32 @nonce = 0 +var i32 @nonce = 1 fun i32 @foo (i32, i32) { init: diff --git a/examples/ir4/simple.ir b/examples/ir4/simple.ir index ce4de28..d85f2be 100644 --- a/examples/ir4/simple.ir +++ b/examples/ir4/simple.ir @@ -1,4 +1,4 @@ -var i32 @nonce = 0 +var i32 @nonce = 1 fun i32 @main () { init: diff --git a/examples/ir4/while_continue_break.ir b/examples/ir4/while_continue_break.ir index 7256593..1f49e5c 100644 --- a/examples/ir4/while_continue_break.ir +++ b/examples/ir4/while_continue_break.ir @@ -1,4 +1,4 @@ -var i32 @nonce = 0 +var i32 @nonce = 1 fun i32 @foo () { init: diff --git a/src/asm/mod.rs b/src/asm/mod.rs index 97c214c..7281031 100644 --- a/src/asm/mod.rs +++ b/src/asm/mod.rs @@ -523,6 +523,8 @@ pub enum UType { /// https://riscv.org/specifications/isa-spec-pdf/ (139p) #[derive(Debug, Clone, PartialEq)] pub enum Pseudo { + /// la rd, symbol + La { rd: Register, symbol: Label }, /// li rd, immediate Li { rd: Register, diff --git a/src/asm/write_asm.rs b/src/asm/write_asm.rs index 3f54159..cdd7524 100644 --- a/src/asm/write_asm.rs +++ b/src/asm/write_asm.rs @@ -384,6 +384,7 @@ impl WriteString for UType { impl WriteString for Pseudo { fn write_string(&self) -> String { match self { + Self::La { rd, symbol } => format!("la\t{},{}", rd.write_string(), symbol.0), Self::Li { rd, imm } => format!("li\t{},{}", rd.write_string(), *imm as i64), Self::Mv { rd, rs } => format!("mv\t{},{}", rd.write_string(), rs.write_string()), Self::Fmv { data_size, rd, rs } => format!( diff --git a/src/tests.rs b/src/tests.rs index b9adf8a..a916f68 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -18,7 +18,7 @@ fn modify_c(path: &Path, rand_num: i32) -> String { .expect("`src` must be converted to string"); drop(src); - let from = format!("int {} = 0", NONCE_NAME); + let from = format!("int {} = 1", NONCE_NAME); let to = format!("int {} = {}", NONCE_NAME, rand_num); data.replace(&from, &to) } @@ -107,7 +107,6 @@ pub fn test_irgen(path: &Path) { let rand_num = rand::thread_rng().gen(); let new_c = modify_c(path, rand_num); modify_ir(&mut ir, rand_num); - println!("{}", new_c); // compile recolved c example let temp_dir = tempdir().expect("temp dir creation failed");