diff --git a/lang/README.md b/lang/README.md index efc7e4b5..638343b9 100644 --- a/lang/README.md +++ b/lang/README.md @@ -527,6 +527,13 @@ main := fn(): uint { ### Purely Testing Examples +#### big_array_crash +```hb +SIN_TABLE := [int].(0, 174, 348, 523, 697, 871, 1045, 1218, 1391, 1564, 1736, 1908, 2079, 2249, 2419, 2588, 2756, 2923, 3090, 3255, 3420, 3583, 3746, 3907, 4067, 4226, 4384, 4540, 4695, 4848, 5000, 5150, 5299, 5446, 5591, 5735, 5877, 6018, 6156, 6293, 6427, 6560, 6691, 6819, 6946, 7071, 7193, 7313, 7431, 7547, 7660, 7771, 7880, 7986, 8090, 8191, 8290, 8386, 8480, 8571, 8660, 8746, 8829, 8910, 8987, 9063, 9135, 9205, 9271, 9335, 9396, 9455, 9510, 9563, 9612, 9659, 9702, 9743, 9781, 9816, 9848, 9877, 9902, 9925, 9945, 9961, 9975, 9986, 9993, 9998, 10000) + +main := fn(): int return SIN_TABLE[10] +``` + #### returning_global_struct ```hb Color := struct {r: u8, g: u8, b: u8, a: u8} diff --git a/lang/src/son.rs b/lang/src/son.rs index 530ff6a5..3ceb98e8 100644 --- a/lang/src/son.rs +++ b/lang/src/son.rs @@ -20,7 +20,6 @@ use { alloc::{borrow::ToOwned, string::String, vec::Vec}, core::{ assert_matches::debug_assert_matches, - borrow::Borrow, cell::RefCell, fmt::{self, Debug, Display, Write}, format_args as fa, mem, @@ -29,6 +28,7 @@ use { hashbrown::hash_map, hbbytecode::DisasmError, regalloc2::VReg, + std::panic, }; const VOID: Nid = 0; @@ -145,16 +145,16 @@ impl Nodes { fn graphviz_in_browser(&self, tys: &Types, files: &[parser::Ast]) { #[cfg(all(debug_assertions, feature = "std"))] { - let out = &mut String::new(); - _ = self.graphviz_low(tys, files, out); - if !std::process::Command::new("brave") - .arg(format!("https://dreampuf.github.io/GraphvizOnline/#{out}")) - .status() - .unwrap() - .success() - { - log::error!("{out}"); - } + // let out = &mut String::new(); + // _ = self.graphviz_low(tys, files, out); + // if !std::process::Command::new("brave") + // .arg(format!("https://dreampuf.github.io/GraphvizOnline/#{out}")) + // .status() + // .unwrap() + // .success() + // { + // log::error!("{out}"); + // } } } @@ -3755,7 +3755,7 @@ impl<'a> Function<'a> { return; } - let node = self.nodes[nid].clone(); + let mut node = self.nodes[nid].clone(); match node.kind { Kind::Start => { debug_assert_matches!(self.nodes[node.outputs[0]].kind, Kind::Entry); @@ -3801,6 +3801,7 @@ impl<'a> Function<'a> { block.push(self.rg(ph)); } self.blocks[self.nodes[nid].ralloc_backref as usize].params = block; + self.reschedule_block(&mut node.outputs); for o in node.outputs.into_iter().rev() { self.emit_node(o, nid); } @@ -3874,6 +3875,7 @@ impl<'a> Function<'a> { )]); } + self.reschedule_block(&mut node.outputs); for o in node.outputs.into_iter().rev() { self.emit_node(o, nid); } @@ -3881,6 +3883,7 @@ impl<'a> Function<'a> { Kind::Then | Kind::Else => { self.nodes[nid].ralloc_backref = self.add_block(nid); self.bridge(prev, nid); + self.reschedule_block(&mut node.outputs); for o in node.outputs.into_iter().rev() { self.emit_node(o, nid); } @@ -3981,6 +3984,7 @@ impl<'a> Function<'a> { self.add_instr(nid, ops); + self.reschedule_block(&mut node.outputs); for o in node.outputs.into_iter().rev() { if self.nodes[o].inputs[0] == nid || (matches!(self.nodes[o].kind, Kind::Loop | Kind::Region) @@ -4069,6 +4073,74 @@ impl<'a> Function<'a> { .preds .push(regalloc2::Block::new(self.nodes[pred].ralloc_backref as usize)); } + + fn reschedule_block(&mut self, outputs: &mut Vc) { + let mut buf = Vec::with_capacity(outputs.len()); + let mut seen = BitSet::default(); + seen.clear(self.nodes.values.len()); + + for &o in outputs.iter() { + if !self.nodes.is_cfg(o) { + continue; + } + + seen.set(o); + + let mut cursor = buf.len(); + buf.push(o); + while let Some(&n) = buf.get(cursor) { + for &i in &self.nodes[n].inputs[1..] { + if self.nodes[i].inputs.is_empty() { + std::println!("{:?}", self.nodes[i]); + } + if self.nodes[n].inputs.first() == self.nodes[i].inputs.first() + && self.nodes[i].outputs.iter().all(|&o| { + self.nodes[o].inputs.first() != self.nodes[i].inputs.first() + || seen.get(o) + }) + && seen.set(i) + { + buf.push(i); + } + } + cursor += 1; + } + } + + for &o in outputs.iter() { + if !seen.set(o) { + continue; + } + let mut cursor = buf.len(); + buf.push(o); + while let Some(&n) = buf.get(cursor) { + for &i in &self.nodes[n].inputs[1..] { + if self.nodes[i].inputs.is_empty() { + std::println!("{:?}", self.nodes[i]); + } + if self.nodes[n].inputs.first() == self.nodes[i].inputs.first() + && self.nodes[i].outputs.iter().all(|&o| { + self.nodes[o].inputs.first() != self.nodes[i].inputs.first() + || seen.get(o) + }) + && seen.set(i) + { + buf.push(i); + } + } + cursor += 1; + } + } + + debug_assert!(outputs.len() == buf.len() || outputs.len() == buf.len() + 1,); + + std::println!("{:?}\n{:?}", outputs, buf); + + if buf.len() + 1 == outputs.len() { + outputs.remove(outputs.len() - 1); + } + outputs.copy_from_slice(&buf); + } } impl regalloc2::Function for Function<'_> { @@ -4574,6 +4646,7 @@ mod tests { fb_driver; // Purely Testing Examples; + big_array_crash; returning_global_struct; small_struct_bitcast; small_struct_assignment; diff --git a/lang/tests/son_tests_arrays.txt b/lang/tests/son_tests_arrays.txt index 69efca3d..538c6c3f 100644 --- a/lang/tests/son_tests_arrays.txt +++ b/lang/tests/son_tests_arrays.txt @@ -1,21 +1,21 @@ main: ADDI64 r254, r254, -36d ST r31, r254, 28a, 8h - LI64 r7, 4d - LI64 r8, 2d - LI64 r9, 1d - LI8 r6, 1b - LI8 r10, 255b - LI8 r11, 0b - ADDI64 r12, r254, 0d - ST r11, r254, 0a, 1h - ST r11, r254, 1a, 1h - ST r10, r254, 2a, 1h - ST r6, r254, 3a, 1h + LI8 r1, 0b + ADDI64 r5, r254, 0d + ST r1, r254, 0a, 1h + ST r1, r254, 1a, 1h + LI8 r6, 255b + ST r6, r254, 2a, 1h + LI8 r9, 1b + ST r9, r254, 3a, 1h + LI64 r1, 1d ADDI64 r2, r254, 4d - ST r9, r254, 4a, 8h - ST r8, r254, 12a, 8h - ST r7, r254, 20a, 8h + ST r1, r254, 4a, 8h + LI64 r5, 2d + ST r5, r254, 12a, 8h + LI64 r8, 4d + ST r8, r254, 20a, 8h JAL r31, r0, :pass LD r2, r254, 3a, 1h ANDI r4, r2, 255d @@ -26,11 +26,11 @@ main: pass: LD r4, r2, 8a, 8h MULI64 r8, r4, 8d - ADD64 r10, r8, r2 - LD r8, r10, 0a, 8h - LD r7, r2, 0a, 8h - ADD64 r11, r4, r7 - ADD64 r1, r8, r11 + LD r5, r2, 0a, 8h + ADD64 r11, r8, r2 + ADD64 r10, r4, r5 + LD r11, r11, 0a, 8h + ADD64 r1, r11, r10 JALA r0, r31, 0a code size: 327 ret: 8 diff --git a/lang/tests/son_tests_big_array_crash.txt b/lang/tests/son_tests_big_array_crash.txt new file mode 100644 index 00000000..23c0121e --- /dev/null +++ b/lang/tests/son_tests_big_array_crash.txt @@ -0,0 +1,7 @@ +main: + LRA r1, r0, :SIN_TABLE + LD r1, r1, 80a, 8h + JALA r0, r31, 0a +code size: 767 +ret: 1736 +status: Ok(()) diff --git a/lang/tests/son_tests_different_types.txt b/lang/tests/son_tests_different_types.txt index ae9a9db0..cdcaf200 100644 --- a/lang/tests/son_tests_different_types.txt +++ b/lang/tests/son_tests_different_types.txt @@ -1,45 +1,45 @@ main: ADDI64 r254, r254, -24d - LI32 r6, 2w - LI32 r5, 0w - LI8 r8, 0b - LI8 r9, 255b - ADDI64 r10, r254, 0d - ADDI64 r7, r254, 12d - ST r9, r254, 12a, 1h - ST r8, r254, 13a, 1h - ST r8, r254, 14a, 1h - ST r9, r254, 15a, 1h - ST r5, r254, 16a, 4h - ST r6, r254, 20a, 4h - BMC r7, r10, 12h + LI8 r3, 255b + ADDI64 r2, r254, 12d + ST r3, r254, 12a, 1h + LI8 r6, 0b + ST r6, r254, 13a, 1h + ST r6, r254, 14a, 1h + ST r3, r254, 15a, 1h + LI32 r11, 0w + ST r11, r254, 16a, 4h + LI32 r3, 2w + ST r3, r254, 20a, 4h + ADDI64 r5, r254, 0d + BMC r2, r5, 12h LD r8, r254, 8a, 4h ANDI r8, r8, 4294967295d - ANDI r6, r6, 4294967295d - JEQ r8, r6, :0 + ANDI r3, r3, 4294967295d + JEQ r8, r3, :0 LI64 r1, 0d JMP :1 0: LD r2, r254, 4a, 4h ANDI r2, r2, 4294967295d - ANDI r5, r5, 4294967295d - JEQ r2, r5, :2 + ANDI r11, r11, 4294967295d + JEQ r2, r11, :2 LI64 r1, 64d JMP :1 - 2: LD r8, r254, 3a, 1h - ANDI r10, r8, 255d - LD r7, r254, 2a, 1h - ANDI r9, r7, 255d - LD r6, r254, 1a, 1h - ANDI r8, r6, 255d - LD r4, r254, 0a, 1h - ANDI r7, r4, 255d - LD r5, r254, 8a, 4h - LD r6, r254, 4a, 4h - ADD32 r11, r5, r6 - ADD32 r12, r11, r7 - ADD32 r4, r12, r8 - ADD32 r8, r4, r9 - ADD32 r12, r8, r10 + 2: LD r10, r254, 0a, 1h + LD r9, r254, 4a, 4h + LD r11, r254, 8a, 4h + LD r5, r254, 1a, 1h + ANDI r4, r10, 255d + ADD32 r6, r11, r9 + LD r11, r254, 2a, 1h + ANDI r10, r5, 255d + ADD32 r9, r6, r4 + LD r5, r254, 3a, 1h + ANDI r4, r11, 255d + ADD32 r3, r9, r10 + ANDI r9, r5, 255d + ADD32 r8, r3, r4 + ADD32 r12, r8, r9 ANDI r1, r12, 4294967295d 1: ADDI64 r254, r254, 24d JALA r0, r31, 0a diff --git a/lang/tests/son_tests_directives.txt b/lang/tests/son_tests_directives.txt index 9e047250..1f97eda8 100644 --- a/lang/tests/son_tests_directives.txt +++ b/lang/tests/son_tests_directives.txt @@ -1,20 +1,20 @@ main: ADDI64 r254, r254, -31d - LI64 r5, 5d + LI64 r1, 10d + ADDI64 r4, r254, 15d + ST r1, r254, 15a, 8h LI64 r7, 20d - LI64 r2, 1d - LI64 r4, 10d - LI64 r6, 6d - ADDI64 r8, r254, 15d - ST r4, r254, 15a, 8h ST r7, r254, 23a, 8h - LD r3, r8, 0a, 16h + LI64 r6, 6d + LI64 r5, 5d + LI64 r2, 1d + LD r3, r4, 0a, 16h ECA LRA r5, r0, :arbitrary text + ADDI64 r7, r254, 0d + BMC r5, r7, 15h LI64 r1, 0d - ADDI64 r8, r254, 0d - BMC r5, r8, 15h ADDI64 r254, r254, 31d JALA r0, r31, 0a ev: Ecall diff --git a/lang/tests/son_tests_exhaustive_loop_testing.txt b/lang/tests/son_tests_exhaustive_loop_testing.txt index 1b65983d..93f52741 100644 --- a/lang/tests/son_tests_exhaustive_loop_testing.txt +++ b/lang/tests/son_tests_exhaustive_loop_testing.txt @@ -21,14 +21,13 @@ main: LI64 r32, 0d CP r2, r32 JAL r31, r0, :multiple_breaks - CP r3, r1 - LI64 r1, 3d - LI64 r7, 1d - JEQ r3, r1, :0 - CP r1, r7 + LI64 r6, 1d + LI64 r7, 3d + JEQ r1, r7, :0 + CP r1, r6 JMP :1 - 0: CP r33, r7 - CP r34, r1 + 0: CP r33, r6 + CP r34, r7 LI64 r35, 4d CP r2, r35 JAL r31, r0, :multiple_breaks @@ -92,6 +91,6 @@ state_change_in_break: JMP :4 3: JALA r0, r31, 0a timed out -code size: 585 +code size: 582 ret: 10 status: Ok(()) diff --git a/lang/tests/son_tests_generic_types.txt b/lang/tests/son_tests_generic_types.txt index 17b20599..9dae5c76 100644 --- a/lang/tests/son_tests_generic_types.txt +++ b/lang/tests/son_tests_generic_types.txt @@ -1,9 +1,9 @@ deinit: ADDI64 r254, r254, -48d ST r31, r254, 24a, 24h - LI64 r4, 8d LD r5, r2, 16a, 8h CP r32, r2 + LI64 r4, 8d MUL64 r3, r5, r4 CP r5, r32 LD r2, r5, 0a, 8h @@ -31,9 +31,9 @@ main: ADDI64 r32, r254, 24d CP r1, r32 JAL r31, r0, :new - LI64 r3, 69d ADDI64 r33, r254, 0d BMC r32, r33, 24h + LI64 r3, 69d CP r2, r33 JAL r31, r0, :push LD r12, r254, 0a, 8h @@ -67,15 +67,15 @@ push: ST r31, r254, 0a, 72h CP r32, r3 LI64 r33, 1d - LD r7, r2, 16a, 8h - LD r8, r2, 8a, 8h + LD r6, r2, 8a, 8h + LD r8, r2, 16a, 8h CP r34, r2 - JNE r7, r8, :0 + JNE r8, r6, :0 LI64 r35, 0d - JNE r7, r35, :1 + JNE r8, r35, :1 CP r36, r33 JMP :2 - 1: MULI64 r36, r7, 2d + 1: MULI64 r36, r8, 2d 2: LI64 r37, 8d MUL64 r2, r36, r37 CP r3, r37 @@ -95,9 +95,9 @@ push: 9: JNE r11, r12, :5 LD r5, r38, 8a, 8h JEQ r5, r1, :6 - LD r2, r38, 0a, 8h CP r4, r37 MUL64 r3, r5, r4 + LD r2, r38, 0a, 8h JAL r31, r0, :free CP r5, r39 JMP :7 diff --git a/lang/tests/son_tests_inline.txt b/lang/tests/son_tests_inline.txt index 190db753..a0149ae5 100644 --- a/lang/tests/son_tests_inline.txt +++ b/lang/tests/son_tests_inline.txt @@ -1,17 +1,17 @@ main: - LI64 r5, 0d + LI64 r8, 6d LRA r4, r0, :gb - LI64 r10, 6d - LD r7, r4, 0a, 8h - CMPU r11, r7, r5 - CMPUI r11, r11, 0d - ORI r12, r11, 0d + LI64 r7, 0d + LD r9, r4, 0a, 8h + CMPU r10, r9, r7 + CMPUI r10, r10, 0d + ORI r12, r10, 0d ANDI r12, r12, 255d JNE r12, r0, :0 - CP r5, r10 + CP r5, r8 JMP :1 0: LI64 r5, 1d - 1: SUB64 r1, r5, r10 + 1: SUB64 r1, r5, r8 JALA r0, r31, 0a code size: 131 ret: 0 diff --git a/lang/tests/son_tests_inline_test.txt b/lang/tests/son_tests_inline_test.txt index aacd370e..cae5984c 100644 --- a/lang/tests/son_tests_inline_test.txt +++ b/lang/tests/son_tests_inline_test.txt @@ -23,27 +23,27 @@ scalar_values: JALA r0, r31, 0a structs: ADDI64 r254, r254, -48d - LI64 r7, 5d - LI64 r6, 20d - LI64 r4, 0d - ADDI64 r8, r254, 0d - ADDI64 r10, r254, 8d - ADDI64 r8, r254, 24d - ADDI64 r8, r254, 40d - ST r4, r254, 40a, 8h - ST r6, r254, 0a, 8h - ST r7, r254, 8a, 8h - ST r7, r254, 16a, 8h + ADDI64 r1, r254, 40d + LI64 r3, 0d + ST r3, r254, 40a, 8h + ADDI64 r7, r254, 0d + LI64 r9, 20d + ST r9, r254, 0a, 8h + LI64 r1, 5d + ADDI64 r2, r254, 8d + ST r1, r254, 8a, 8h + ST r1, r254, 16a, 8h + LD r6, r254, 0a, 8h LD r8, r254, 8a, 8h - LD r9, r254, 0a, 8h - ADD64 r12, r8, r9 - SUB64 r12, r12, r7 - ST r12, r254, 24a, 8h - ST r6, r254, 32a, 8h + ADD64 r11, r8, r6 + SUB64 r11, r11, r1 + ADDI64 r5, r254, 24d + ST r11, r254, 24a, 8h + ST r9, r254, 32a, 8h + LD r5, r254, 40a, 8h LD r7, r254, 24a, 8h - LD r8, r254, 40a, 8h - ADD64 r10, r7, r8 - SUB64 r1, r10, r6 + ADD64 r10, r7, r5 + SUB64 r1, r10, r9 ADDI64 r254, r254, 48d JALA r0, r31, 0a code size: 417 diff --git a/lang/tests/son_tests_intcast_store.txt b/lang/tests/son_tests_intcast_store.txt index 2b76f16a..0e38c1bd 100644 --- a/lang/tests/son_tests_intcast_store.txt +++ b/lang/tests/son_tests_intcast_store.txt @@ -1,13 +1,12 @@ main: ADDI64 r254, r254, -24d ST r31, r254, 16a, 8h - LI64 r4, 1024d - LI64 r2, 0d + ADDI64 r2, r254, 8d + LI64 r4, 0d + ST r4, r254, 8a, 8h ADDI64 r3, r254, 0d - ADDI64 r5, r254, 8d - ST r2, r254, 8a, 8h - ST r2, r254, 0a, 8h - CP r2, r5 + ST r4, r254, 0a, 8h + LI64 r4, 1024d JAL r31, r0, :set ANDI r1, r1, 4294967295d LD r31, r254, 16a, 8h @@ -15,18 +14,18 @@ main: JALA r0, r31, 0a set: ADDI64 r254, r254, -25d - LI32 r9, 8w - LI8 r8, 5b - ANDI r10, r4, 4294967295d - ADDI64 r1, r254, 0d - ST r8, r254, 0a, 1h - ST r10, r254, 1a, 4h - ST r9, r254, 5a, 4h + LI8 r7, 5b + ADDI64 r11, r254, 0d + ST r7, r254, 0a, 1h + ANDI r11, r4, 4294967295d + ST r11, r254, 1a, 4h + LI32 r4, 8w + ST r4, r254, 5a, 4h ST r2, r254, 9a, 8h ST r3, r254, 17a, 8h LD r1, r254, 1a, 4h ADDI64 r254, r254, 25d JALA r0, r31, 0a -code size: 298 +code size: 295 ret: 1024 status: Ok(()) diff --git a/lang/tests/son_tests_pointer_opts.txt b/lang/tests/son_tests_pointer_opts.txt index 10949787..ef17ebc3 100644 --- a/lang/tests/son_tests_pointer_opts.txt +++ b/lang/tests/son_tests_pointer_opts.txt @@ -5,13 +5,13 @@ clobber: main: ADDI64 r254, r254, -16d ST r31, r254, 8a, 8h - LI64 r3, 2d ADDI64 r2, r254, 0d - ST r3, r254, 0a, 8h + LI64 r4, 2d + ST r4, r254, 0a, 8h JAL r31, r0, :clobber - LI64 r6, 4d - LD r9, r254, 0a, 8h - SUB64 r1, r6, r9 + LD r8, r254, 0a, 8h + LI64 r7, 4d + SUB64 r1, r7, r8 LD r31, r254, 8a, 8h ADDI64 r254, r254, 16d JALA r0, r31, 0a diff --git a/lang/tests/son_tests_pointers.txt b/lang/tests/son_tests_pointers.txt index 279705df..ec81e27c 100644 --- a/lang/tests/son_tests_pointers.txt +++ b/lang/tests/son_tests_pointers.txt @@ -3,8 +3,8 @@ drop: main: ADDI64 r254, r254, -24d ST r31, r254, 8a, 16h - LI64 r32, 1d ADDI64 r2, r254, 0d + LI64 r32, 1d ST r32, r254, 0a, 8h JAL r31, r0, :modify CP r2, r32 diff --git a/lang/tests/son_tests_request_page.txt b/lang/tests/son_tests_request_page.txt index 1c088ce0..b7cf60cd 100644 --- a/lang/tests/son_tests_request_page.txt +++ b/lang/tests/son_tests_request_page.txt @@ -37,14 +37,13 @@ main: ADDI64 r254, r254, 8d JALA r0, r31, 0a request_page: - CP r12, r2 + LRA r4, r0, :"\0\u{1}xxxxxxxx\0" + ST r2, r4, 1a, 1h LI64 r5, 12d LI64 r3, 2d LI64 r2, 3d - LRA r4, r0, :"\0\u{1}xxxxxxxx\0" - ST r12, r4, 1a, 1h ECA JALA r0, r31, 0a -code size: 339 +code size: 336 ret: 42 status: Ok(()) diff --git a/lang/tests/son_tests_returning_global_struct.txt b/lang/tests/son_tests_returning_global_struct.txt index b6b214c3..4d3b48f8 100644 --- a/lang/tests/son_tests_returning_global_struct.txt +++ b/lang/tests/son_tests_returning_global_struct.txt @@ -6,16 +6,16 @@ main: ST r1, r254, 4a, 4h ADDI64 r5, r254, 0d BMC r32, r5, 4h - LD r3, r254, 3a, 1h - ANDI r5, r3, 255d - LD r2, r254, 2a, 1h - ANDI r4, r2, 255d - LD r1, r254, 1a, 1h - ANDI r3, r1, 255d - LD r2, r254, 0a, 8h - ADD64 r6, r2, r3 - ADD64 r10, r6, r4 - ADD64 r1, r10, r5 + LD r9, r254, 1a, 1h + LD r1, r254, 2a, 1h + ANDI r12, r9, 255d + LD r11, r254, 0a, 8h + LD r7, r254, 3a, 1h + ANDI r6, r1, 255d + ADD64 r5, r11, r12 + ANDI r11, r7, 255d + ADD64 r10, r5, r6 + ADD64 r1, r10, r11 LD r31, r254, 8a, 16h ADDI64 r254, r254, 24d JALA r0, r31, 0a diff --git a/lang/tests/son_tests_small_struct_assignment.txt b/lang/tests/son_tests_small_struct_assignment.txt index dd9ddbc3..dc49aef5 100644 --- a/lang/tests/son_tests_small_struct_assignment.txt +++ b/lang/tests/son_tests_small_struct_assignment.txt @@ -1,10 +1,10 @@ main: ADDI64 r254, r254, -4d - LRA r3, r0, :white - LRA r2, r0, :black - ADDI64 r4, r254, 0d - BMC r2, r4, 4h - BMC r3, r4, 4h + LRA r1, r0, :black + ADDI64 r3, r254, 0d + LRA r5, r0, :white + BMC r1, r3, 4h + BMC r5, r3, 4h LD r9, r254, 3a, 1h ANDI r1, r9, 255d ADDI64 r254, r254, 4d diff --git a/lang/tests/son_tests_string_flip.txt b/lang/tests/son_tests_string_flip.txt index 34fba884..517026cc 100644 --- a/lang/tests/son_tests_string_flip.txt +++ b/lang/tests/son_tests_string_flip.txt @@ -16,21 +16,21 @@ main: JNE r10, r6, :3 CP r7, r9 JMP :4 - 3: ADDI64 r12, r254, 32d - MUL64 r11, r7, r6 - SUB64 r1, r6, r9 - MUL64 r1, r1, r6 - ADD64 r9, r10, r8 - ADD64 r1, r1, r10 - MULI64 r1, r1, 8d - ADD64 r1, r1, r5 - ADD64 r2, r11, r10 - MULI64 r10, r2, 8d - ADD64 r10, r10, r5 + 3: ADD64 r3, r10, r8 + MUL64 r12, r7, r6 + SUB64 r11, r6, r9 + ADD64 r9, r12, r10 + MUL64 r11, r11, r6 + MULI64 r9, r9, 8d + ADD64 r11, r11, r10 + ADD64 r9, r9, r5 + MULI64 r11, r11, 8d + ADDI64 r10, r254, 32d + ADD64 r12, r11, r5 + BMC r9, r10, 8h + BMC r12, r9, 8h BMC r10, r12, 8h - BMC r1, r10, 8h - BMC r12, r1, 8h - CP r10, r9 + CP r10, r3 JMP :5 0: ADD64 r2, r9, r8 MULI64 r12, r9, 8d diff --git a/lang/tests/son_tests_struct_operators.txt b/lang/tests/son_tests_struct_operators.txt index df05924a..8f384d90 100644 --- a/lang/tests/son_tests_struct_operators.txt +++ b/lang/tests/son_tests_struct_operators.txt @@ -1,93 +1,93 @@ main: ADDI64 r254, r254, -168d - LI8 r11, 4b - LI8 r5, 1b - LI8 r3, 0b - ADDI64 r6, r254, 144d - ADDI64 r6, r254, 148d - ST r3, r254, 148a, 1h - ST r3, r254, 149a, 1h - ST r3, r254, 150a, 1h - ST r3, r254, 151a, 1h - ST r5, r254, 144a, 1h - ST r5, r254, 145a, 1h - ST r5, r254, 146a, 1h - ST r5, r254, 147a, 1h - LD r7, r254, 144a, 1h - LD r8, r254, 148a, 1h - ADD8 r10, r7, r8 - ST r10, r254, 148a, 1h - LD r2, r254, 145a, 1h - LD r3, r254, 149a, 1h - ADD8 r5, r3, r2 - ST r5, r254, 149a, 1h - LD r9, r254, 146a, 1h - LD r10, r254, 150a, 1h - ADD8 r12, r10, r9 - ST r12, r254, 150a, 1h - LD r4, r254, 147a, 1h - LD r5, r254, 151a, 1h - ADD8 r7, r5, r4 - ST r7, r254, 151a, 1h - LD r2, r254, 151a, 1h - LD r12, r254, 150a, 1h + LI8 r1, 0b + ADDI64 r3, r254, 148d + ST r1, r254, 148a, 1h + ST r1, r254, 149a, 1h + ST r1, r254, 150a, 1h + ST r1, r254, 151a, 1h + LI8 r10, 1b + ADDI64 r11, r254, 144d + ST r10, r254, 144a, 1h + ST r10, r254, 145a, 1h + ST r10, r254, 146a, 1h + ST r10, r254, 147a, 1h + LD r6, r254, 144a, 1h + LD r7, r254, 148a, 1h + ADD8 r9, r6, r7 + ST r9, r254, 148a, 1h + LD r1, r254, 145a, 1h + LD r2, r254, 149a, 1h + ADD8 r4, r2, r1 + ST r4, r254, 149a, 1h + LD r8, r254, 146a, 1h + LD r9, r254, 150a, 1h + ADD8 r11, r9, r8 + ST r11, r254, 150a, 1h + LD r3, r254, 147a, 1h + LD r4, r254, 151a, 1h + ADD8 r6, r4, r3 + ST r6, r254, 151a, 1h + LD r10, r254, 149a, 1h + LD r11, r254, 150a, 1h + ADD8 r1, r11, r10 LD r3, r254, 148a, 1h - LD r4, r254, 149a, 1h - ADD8 r4, r12, r4 - ADD8 r8, r3, r4 - ADD8 r12, r2, r8 - ANDI r12, r12, 255d + ADD8 r6, r3, r1 + LD r7, r254, 151a, 1h + LI8 r9, 4b + ADD8 r11, r7, r6 ANDI r11, r11, 255d - JEQ r12, r11, :0 + ANDI r9, r9, 255d + JEQ r11, r9, :0 LI64 r1, 1008d JMP :1 - 0: LI64 r1, 0d - LI64 r10, 4d - LI64 r2, 3d + 0: LI64 r5, 1d + ADDI64 r8, r254, 80d + ST r5, r254, 80a, 8h LI64 r9, 2d - LI64 r3, 1d - ADDI64 r5, r254, 0d - ADDI64 r4, r254, 32d - ADDI64 r4, r254, 48d - ADDI64 r12, r4, 16d - ADDI64 r4, r254, 80d - ADDI64 r6, r254, 96d - ADDI64 r11, r254, 112d - ST r3, r254, 80a, 8h ST r9, r254, 88a, 8h - ST r2, r254, 32a, 8h - ST r10, r254, 40a, 8h - LD r6, r254, 80a, 8h - LD r7, r254, 32a, 8h - ADD64 r8, r7, r6 - ST r8, r254, 0a, 8h - LD r2, r254, 40a, 8h - LD r3, r254, 88a, 8h - ADD64 r3, r2, r3 - ST r3, r254, 8a, 8h - LD r6, r254, 32a, 8h - LD r8, r254, 80a, 8h - SUB64 r10, r6, r8 - ST r10, r254, 16a, 8h - LD r2, r254, 88a, 8h - LD r3, r254, 40a, 8h - SUB64 r6, r3, r2 - ST r6, r254, 24a, 8h - BMC r5, r11, 32h - ST r1, r254, 96a, 8h - ST r1, r254, 104a, 8h + LI64 r1, 3d + ADDI64 r4, r254, 32d + ST r1, r254, 32a, 8h + LI64 r5, 4d + ST r5, r254, 40a, 8h + LD r12, r254, 32a, 8h + LD r1, r254, 80a, 8h + ADDI64 r11, r254, 0d + ADD64 r3, r12, r1 + ST r3, r254, 0a, 8h + LD r7, r254, 40a, 8h + LD r9, r254, 88a, 8h + ADD64 r10, r7, r9 + ST r10, r254, 8a, 8h + LD r2, r254, 80a, 8h + LD r3, r254, 32a, 8h + SUB64 r5, r3, r2 + ST r5, r254, 16a, 8h + LD r9, r254, 88a, 8h + LD r10, r254, 40a, 8h + SUB64 r12, r10, r9 + ST r12, r254, 24a, 8h + ADDI64 r3, r254, 112d + BMC r11, r3, 32h + LI64 r6, 0d + ADDI64 r9, r254, 96d + ST r6, r254, 96a, 8h + ST r6, r254, 104a, 8h + LD r1, r254, 32a, 8h LD r2, r254, 96a, 8h - LD r5, r254, 32a, 8h - SUB64 r6, r2, r5 - ST r6, r254, 48a, 8h + ADDI64 r9, r254, 48d + SUB64 r5, r2, r1 + ST r5, r254, 48a, 8h LD r10, r254, 40a, 8h LD r11, r254, 104a, 8h - SUB64 r1, r11, r10 - ST r1, r254, 56a, 8h - BMC r4, r12, 16h - LD r6, r254, 48a, 8h - LD r8, r254, 112a, 8h - ADD64 r10, r6, r8 + SUB64 r12, r11, r10 + ST r12, r254, 56a, 8h + ADDI64 r10, r9, 16d + BMC r8, r10, 16h + LD r7, r254, 112a, 8h + LD r8, r254, 48a, 8h + ADD64 r10, r8, r7 ST r10, r254, 48a, 8h LD r2, r254, 120a, 8h LD r3, r254, 56a, 8h @@ -101,11 +101,11 @@ main: LD r6, r254, 72a, 8h ADD64 r8, r5, r6 ST r8, r254, 72a, 8h - LD r11, r254, 48a, 8h - LD r1, r254, 64a, 8h - ADD64 r3, r1, r11 - ADDI64 r8, r254, 152d - ST r3, r254, 152a, 8h + LD r12, r254, 64a, 8h + LD r1, r254, 48a, 8h + ADDI64 r7, r254, 152d + ADD64 r4, r12, r1 + ST r4, r254, 152a, 8h LD r8, r254, 72a, 8h LD r9, r254, 56a, 8h ADD64 r11, r8, r9 diff --git a/lang/tests/son_tests_struct_return_from_module_function.txt b/lang/tests/son_tests_struct_return_from_module_function.txt index cf37ae20..fc46189f 100644 --- a/lang/tests/son_tests_struct_return_from_module_function.txt +++ b/lang/tests/son_tests_struct_return_from_module_function.txt @@ -1,12 +1,12 @@ foo: ADDI64 r254, r254, -16d - LI32 r3, 2w - LI64 r5, 3d - ADDI64 r4, r254, 0d - ST r5, r254, 0a, 8h - ST r3, r254, 8a, 4h - ST r3, r254, 12a, 4h - LD r1, r4, 0a, 16h + LI64 r3, 3d + ADDI64 r2, r254, 0d + ST r3, r254, 0a, 8h + LI32 r6, 2w + ST r6, r254, 8a, 4h + ST r6, r254, 12a, 4h + LD r1, r2, 0a, 16h ADDI64 r254, r254, 16d JALA r0, r31, 0a main: @@ -21,15 +21,15 @@ main: ADDI64 r2, r254, 0d JAL r31, r0, :foo ST r1, r254, 0a, 16h - LI64 r7, 7d - LD r8, r254, 12a, 4h - ANDI r9, r8, 4294967295d - LD r5, r254, 24a, 4h - ANDI r8, r5, 4294967295d - LD r3, r254, 32a, 8h - ADD64 r11, r3, r8 - ADD64 r3, r11, r9 - SUB64 r1, r7, r3 + LD r2, r254, 24a, 4h + LD r7, r254, 12a, 4h + ANDI r5, r2, 4294967295d + LD r1, r254, 32a, 8h + ANDI r11, r7, 4294967295d + ADD64 r10, r1, r5 + ADD64 r2, r10, r11 + LI64 r3, 7d + SUB64 r1, r3, r2 LD r31, r254, 48a, 8h ADDI64 r254, r254, 56d JALA r0, r31, 0a diff --git a/lang/tests/son_tests_structs.txt b/lang/tests/son_tests_structs.txt index 02945789..738936a8 100644 --- a/lang/tests/son_tests_structs.txt +++ b/lang/tests/son_tests_structs.txt @@ -1,21 +1,21 @@ main: ADDI64 r254, r254, -96d ST r31, r254, 64a, 32h - LI64 r32, 3d - LI64 r3, 4d - ADDI64 r33, r254, 0d - ADDI64 r34, r254, 48d - ST r3, r254, 48a, 8h - ST r32, r254, 56a, 8h - LD r3, r34, 0a, 16h + LI64 r2, 4d + ADDI64 r32, r254, 48d + ST r2, r254, 48a, 8h + LI64 r33, 3d + ST r33, r254, 56a, 8h + ADDI64 r34, r254, 0d + LD r3, r32, 0a, 16h JAL r31, r0, :odher_pass ST r1, r254, 0a, 16h ADDI64 r11, r254, 16d + BMC r32, r11, 16h ADDI64 r2, r254, 32d - BMC r34, r11, 16h - BMC r33, r2, 16h + BMC r34, r2, 16h LD r7, r254, 40a, 8h - JNE r7, r32, :0 + JNE r7, r33, :0 JAL r31, r0, :pass JMP :1 0: LI64 r1, 0d diff --git a/lang/tests/son_tests_wide_ret.txt b/lang/tests/son_tests_wide_ret.txt index 3b6709ad..22b2f4d2 100644 --- a/lang/tests/son_tests_wide_ret.txt +++ b/lang/tests/son_tests_wide_ret.txt @@ -1,8 +1,8 @@ main: ADDI64 r254, r254, -48d ST r31, r254, 32a, 16h - LI64 r4, 0d ADDI64 r32, r254, 16d + LI64 r4, 0d CP r3, r4 JAL r31, r0, :maina ST r1, r254, 16a, 16h @@ -21,27 +21,27 @@ maina: ADDI64 r32, r254, 36d JAL r31, r0, :small_struct ST r1, r254, 36a, 4h - LI8 r2, 1b - LI8 r3, 3b - LI8 r1, 0b - ADDI64 r6, r254, 0d - ADDI64 r8, r6, 8d - ADDI64 r7, r254, 16d - ADDI64 r4, r254, 24d - ADDI64 r5, r254, 32d - BMC r32, r5, 4h - ST r1, r254, 24a, 1h - ST r1, r254, 25a, 1h - ST r1, r254, 26a, 1h - ST r3, r254, 27a, 1h - ST r2, r254, 28a, 1h - ST r1, r254, 29a, 1h - ST r1, r254, 30a, 1h - ST r1, r254, 31a, 1h - BMC r4, r7, 8h - BMC r4, r6, 8h - BMC r7, r8, 8h - LD r1, r6, 0a, 16h + ADDI64 r9, r254, 32d + BMC r32, r9, 4h + LI8 r2, 0b + ADDI64 r1, r254, 24d + ST r2, r254, 24a, 1h + ST r2, r254, 25a, 1h + ST r2, r254, 26a, 1h + LI8 r7, 3b + ST r7, r254, 27a, 1h + LI8 r10, 1b + ST r10, r254, 28a, 1h + ST r2, r254, 29a, 1h + ST r2, r254, 30a, 1h + ST r2, r254, 31a, 1h + ADDI64 r4, r254, 16d + BMC r1, r4, 8h + ADDI64 r7, r254, 0d + BMC r1, r7, 8h + ADDI64 r10, r7, 8d + BMC r4, r10, 8h + LD r1, r7, 0a, 16h LD r31, r254, 40a, 16h ADDI64 r254, r254, 56d JALA r0, r31, 0a