diff --git a/hblang/README.md b/hblang/README.md index 3db5fe3..1da5531 100644 --- a/hblang/README.md +++ b/hblang/README.md @@ -197,7 +197,8 @@ main := fn(): int { b := Point.(3, 4) d := Rect.(a + b, b - a) - d2 := Rect.(Point.(0, 0) - b, a) + zp := Point.(0, 0) + d2 := Rect.(zp - b, a) d2 += d c := d2.a + d2.b diff --git a/hblang/src/codegen.rs b/hblang/src/codegen.rs index ce4b1c0..17e105c 100644 --- a/hblang/src/codegen.rs +++ b/hblang/src/codegen.rs @@ -109,17 +109,15 @@ mod stack { } pub fn free(&mut self, id: Id) { - if id.is_ref() { - return; - } - let meta = &mut self.meta[id.index()]; std::mem::forget(id); - meta.rc -= 1; - if meta.rc != 0 { - return; - } - meta.offset = self.height; - self.height -= meta.size; + //if id.is_ref() {} + //let meta = &mut self.meta[id.index()]; + //meta.rc -= 1; + //if meta.rc != 0 { + // return; + //} + //meta.offset = self.height; + //self.height -= meta.size; } pub fn dup_id(&mut self, id: &Id) -> Id { @@ -1367,13 +1365,7 @@ impl Codegen { self.ci.vars.iter_mut().enumerate().find(|(_, v)| v.id == id) => { var.uses_left -= 1; - let loc = match var.uses_left == 0 - && !self.ci.loops.last().is_some_and(|l| l.var_count > var_index as u32) - { - true => std::mem::take(&mut var.value.loc), - false => var.value.loc.as_ref(), - }; - + let loc = var.value.loc.as_ref(); Some(Value { ty: self.ci.vars[var_index].value.ty, loc }) } E::Ident { id, name, .. } => match self diff --git a/hblang/src/lib.rs b/hblang/src/lib.rs index d305722..137304f 100644 --- a/hblang/src/lib.rs +++ b/hblang/src/lib.rs @@ -269,6 +269,10 @@ mod ty { pub const fn repr(self) -> u32 { self.0.get() } + + pub(crate) fn is_struct(&self) -> bool { + matches!(self.expand(), Kind::Struct(_)) + } } impl From for Id { diff --git a/hblang/tests/codegen_tests_arrays.txt b/hblang/tests/codegen_tests_arrays.txt index 270c21c..f1ce147 100644 --- a/hblang/tests/codegen_tests_arrays.txt +++ b/hblang/tests/codegen_tests_arrays.txt @@ -1,44 +1,45 @@ main: - ADDI64 r254, r254, -68d - ST r31, r254, 28a, 40h + ADDI64 r254, r254, -80d + ST r31, r254, 32a, 48h LI64 r32, 511d LI64 r33, 0d - ST r33, r254, 24a, 1h + ST r33, r254, 0a, 1h LI64 r33, 0d - ST r33, r254, 25a, 1h + ST r33, r254, 1a, 1h CP r33, r32 ANDI r33, r33, 255d - ST r33, r254, 26a, 1h - SRUI16 r32, r32, 8b - ANDI r32, r32, 255d - ST r32, r254, 27a, 1h - CP r32, r0 - LD r32, r254, 24a, 4h - ST r32, r254, 0a, 4h - ADDI64 r32, r254, 0d - LI64 r33, 1d - ST r33, r254, 4a, 8h - LI64 r33, 2d - ST r33, r254, 12a, 8h - LI64 r33, 4d - ST r33, r254, 20a, 8h + ST r33, r254, 2a, 1h + CP r33, r32 + SRUI16 r33, r33, 8b + ANDI r33, r33, 255d + ST r33, r254, 3a, 1h + CP r33, r0 + LD r33, r254, 0a, 4h + ST r33, r254, 4a, 4h ADDI64 r33, r254, 4d - CP r2, r33 + LI64 r34, 1d + ST r34, r254, 8a, 8h + LI64 r34, 2d + ST r34, r254, 16a, 8h + LI64 r34, 4d + ST r34, r254, 24a, 8h + ADDI64 r34, r254, 8d + CP r2, r34 JAL r31, r0, :pass - CP r33, r1 - ADDI64 r34, r254, 0d - LI64 r35, 3d - ADD64 r34, r34, r35 - CP r35, r0 - LD r35, r34, 0a, 1h - SXT8 r35, r35 - ADD64 r1, r33, r35 - LD r31, r254, 28a, 40h - ADDI64 r254, r254, 68d + CP r34, r1 + ADDI64 r35, r254, 4d + LI64 r36, 3d + ADD64 r35, r35, r36 + CP r36, r0 + LD r36, r35, 4a, 1h + SXT8 r36, r36 + ADD64 r1, r34, r36 + LD r31, r254, 32a, 48h + ADDI64 r254, r254, 80d JALA r0, r31, 0a pass: - ADDI64 r254, r254, -40d - ST r31, r254, 0a, 40h + ADDI64 r254, r254, -48d + ST r31, r254, 0a, 48h CP r32, r2 CP r33, r32 LI64 r34, 0d @@ -52,17 +53,18 @@ pass: LD r35, r33, 0a, 8h ADD64 r34, r34, r35 CP r33, r32 - LI64 r35, 1d - MULI64 r35, r35, 8d - ADD64 r32, r32, r35 - LD r35, r32, 0a, 8h - MULI64 r35, r35, 8d - ADD64 r33, r33, r35 - LD r35, r33, 0a, 8h - ADD64 r1, r34, r35 - LD r31, r254, 0a, 40h - ADDI64 r254, r254, 40d + CP r35, r32 + LI64 r36, 1d + MULI64 r36, r36, 8d + ADD64 r35, r35, r36 + LD r36, r35, 0a, 8h + MULI64 r36, r36, 8d + ADD64 r33, r33, r36 + LD r36, r33, 0a, 8h + ADD64 r1, r34, r36 + LD r31, r254, 0a, 48h + ADDI64 r254, r254, 48d JALA r0, r31, 0a -code size: 580 -ret: 8 +code size: 586 +ret: 7 status: Ok(()) diff --git a/hblang/tests/codegen_tests_c_strings.txt b/hblang/tests/codegen_tests_c_strings.txt index b770918..97a7393 100644 --- a/hblang/tests/codegen_tests_c_strings.txt +++ b/hblang/tests/codegen_tests_c_strings.txt @@ -1,17 +1,17 @@ main: - ADDI64 r254, r254, -24d - ST r31, r254, 0a, 24h + ADDI64 r254, r254, -40d + ST r31, r254, 0a, 40h LRA r32, r0, :"abāļž\n\r\t56789\0" CP r2, r32 JAL r31, r0, :str_len - CP r32, r1 - LRA r33, r0, :"fff\0" - CP r2, r33 - JAL r31, r0, :str_len CP r33, r1 - ADD64 r1, r33, r32 - LD r31, r254, 0a, 24h - ADDI64 r254, r254, 24d + LRA r34, r0, :"fff\0" + CP r2, r34 + JAL r31, r0, :str_len + CP r35, r1 + ADD64 r1, r35, r33 + LD r31, r254, 0a, 40h + ADDI64 r254, r254, 40d JALA r0, r31, 0a str_len: ADDI64 r254, r254, -48d diff --git a/hblang/tests/codegen_tests_different_types.txt b/hblang/tests/codegen_tests_different_types.txt index 3bed30b..ecee632 100644 --- a/hblang/tests/codegen_tests_different_types.txt +++ b/hblang/tests/codegen_tests_different_types.txt @@ -1,6 +1,6 @@ main: - ADDI64 r254, r254, -44d - ST r31, r254, 12a, 32h + ADDI64 r254, r254, -52d + ST r31, r254, 12a, 40h LI64 r32, 255d ST r32, r254, 0a, 1h LI64 r32, 0d @@ -18,39 +18,39 @@ main: CP r34, r32 MULI64 r34, r34, 4d ADD64 r33, r33, r34 - CP r32, r0 - LD r32, r33, 0a, 4h - LI64 r34, 2d - JEQ r32, r34, :0 + CP r34, r0 + LD r34, r33, 0a, 4h + LI64 r35, 2d + JEQ r34, r35, :0 LI64 r1, 0d JMP :1 - 0: ADDI64 r34, r254, 8d - ADDI64 r34, r34, -4d - CP r32, r0 - LD r32, r34, 0a, 4h + 0: ADDI64 r35, r254, 8d + ADDI64 r35, r35, -4d + CP r34, r0 + LD r34, r35, 0a, 4h LI64 r33, 0d - JEQ r32, r33, :2 + JEQ r34, r33, :2 LI64 r1, 64d JMP :1 2: CP r33, r0 LD r33, r254, 4a, 4h - CP r32, r0 - LD r32, r254, 8a, 4h - ADD32 r33, r33, r32 - CP r32, r0 - LD r32, r254, 0a, 1h - ADD32 r33, r33, r32 - CP r32, r0 - LD r32, r254, 1a, 1h - ADD32 r33, r33, r32 - CP r32, r0 - LD r32, r254, 2a, 1h - ADD32 r33, r33, r32 - CP r32, r0 - LD r32, r254, 3a, 1h - ADD32 r1, r33, r32 - 1: LD r31, r254, 12a, 32h - ADDI64 r254, r254, 44d + CP r34, r0 + LD r34, r254, 8a, 4h + ADD32 r33, r33, r34 + CP r34, r0 + LD r34, r254, 0a, 1h + ADD32 r33, r33, r34 + CP r34, r0 + LD r34, r254, 1a, 1h + ADD32 r33, r33, r34 + CP r34, r0 + LD r34, r254, 2a, 1h + ADD32 r33, r33, r34 + CP r34, r0 + LD r34, r254, 3a, 1h + ADD32 r1, r33, r34 + 1: LD r31, r254, 12a, 40h + ADDI64 r254, r254, 52d JALA r0, r31, 0a code size: 474 ret: 512 diff --git a/hblang/tests/codegen_tests_directives.txt b/hblang/tests/codegen_tests_directives.txt index 19bb2cb..9eba683 100644 --- a/hblang/tests/codegen_tests_directives.txt +++ b/hblang/tests/codegen_tests_directives.txt @@ -1,27 +1,28 @@ main: - ADDI64 r254, r254, -80d - ST r31, r254, 16a, 64h + ADDI64 r254, r254, -88d + ST r31, r254, 16a, 72h LI64 r32, 10d LI64 r33, 30d LI64 r34, 40d - LI64 r35, 16d - LI64 r36, 8d - LI64 r37, 10d - LI64 r2, 1d + CP r35, r34 + LI64 r36, 16d + LI64 r37, 8d LI64 r38, 10d - ST r38, r254, 0a, 8h - LI64 r38, 20d - ST r38, r254, 8a, 8h + LI64 r2, 1d + LI64 r39, 10d + ST r39, r254, 0a, 8h + LI64 r39, 20d + ST r39, r254, 8a, 8h LD r3, r254, 0a, 16h LI64 r5, 5d LI64 r6, 6d ECA - CP r38, r1 + CP r39, r1 LI64 r1, 0d - LD r31, r254, 16a, 64h - ADDI64 r254, r254, 80d + LD r31, r254, 16a, 72h + ADDI64 r254, r254, 88d JALA r0, r31, 0a ev: Ecall -code size: 230 +code size: 233 ret: 0 status: Ok(()) diff --git a/hblang/tests/codegen_tests_generic_types.txt b/hblang/tests/codegen_tests_generic_types.txt index b15058d..93884ce 100644 --- a/hblang/tests/codegen_tests_generic_types.txt +++ b/hblang/tests/codegen_tests_generic_types.txt @@ -8,7 +8,8 @@ deinit: CP r3, r33 LI64 r4, 8d JAL r31, r0, :free - CP r1, r32 + CP r33, r32 + CP r1, r33 JAL r31, r0, :new LD r31, r254, 0a, 24h ADDI64 r254, r254, 24d @@ -124,19 +125,19 @@ push: LI64 r4, 8d JAL r31, r0, :free 8: ST r34, r32, 0a, 8h - 0: LD r34, r32, 0a, 8h - LD r39, r32, 8a, 8h - MULI64 r39, r39, 8d - ADD64 r34, r34, r39 - CP r39, r34 - ST r33, r39, 0a, 8h - LD r39, r32, 8a, 8h - ADDI64 r39, r39, 1d - ST r39, r32, 8a, 8h - CP r1, r34 + 0: LD r39, r32, 0a, 8h + LD r38, r32, 8a, 8h + MULI64 r38, r38, 8d + ADD64 r39, r39, r38 + CP r38, r39 + ST r33, r38, 0a, 8h + LD r38, r32, 8a, 8h + ADDI64 r38, r38, 1d + ST r38, r32, 8a, 8h + CP r1, r39 4: LD r31, r254, 0a, 72h ADDI64 r254, r254, 72d JALA r0, r31, 0a -code size: 1201 +code size: 1204 ret: 69 status: Ok(()) diff --git a/hblang/tests/codegen_tests_hex_octal_binary_literals.txt b/hblang/tests/codegen_tests_hex_octal_binary_literals.txt index 50c5429..186e7eb 100644 --- a/hblang/tests/codegen_tests_hex_octal_binary_literals.txt +++ b/hblang/tests/codegen_tests_hex_octal_binary_literals.txt @@ -1,28 +1,31 @@ main: - ADDI64 r254, r254, -40d - ST r31, r254, 0a, 40h + ADDI64 r254, r254, -56d + ST r31, r254, 0a, 56h LI64 r32, 255d LI64 r33, 255d LI64 r34, 255d LI64 r35, 255d - CMPS r32, r32, r33 - CMPUI r32, r32, 0d - NOT r32, r32 - CMPS r34, r34, r33 - CMPUI r34, r34, 0d - NOT r34, r34 - AND r32, r32, r34 - CMPS r35, r35, r33 - CMPUI r35, r35, 0d - NOT r35, r35 - AND r32, r32, r35 - JEQ r32, r0, :0 + CP r36, r32 + CMPS r36, r36, r33 + CMPUI r36, r36, 0d + NOT r36, r36 + CP r37, r34 + CMPS r37, r37, r33 + CMPUI r37, r37, 0d + NOT r37, r37 + AND r36, r36, r37 + CP r37, r35 + CMPS r37, r37, r33 + CMPUI r37, r37, 0d + NOT r37, r37 + AND r36, r36, r37 + JEQ r36, r0, :0 LI64 r1, 0d JMP :1 0: LI64 r1, 1d - 1: LD r31, r254, 0a, 40h - ADDI64 r254, r254, 40d + 1: LD r31, r254, 0a, 56h + ADDI64 r254, r254, 56d JALA r0, r31, 0a -code size: 199 +code size: 208 ret: 0 status: Ok(()) diff --git a/hblang/tests/codegen_tests_if_statements.txt b/hblang/tests/codegen_tests_if_statements.txt index b06c467..36393e1 100644 --- a/hblang/tests/codegen_tests_if_statements.txt +++ b/hblang/tests/codegen_tests_if_statements.txt @@ -1,6 +1,6 @@ fib: - ADDI64 r254, r254, -24d - ST r31, r254, 0a, 24h + ADDI64 r254, r254, -32d + ST r31, r254, 0a, 32h CP r32, r2 LI64 r33, 2d JGTS r32, r33, :0 @@ -11,13 +11,14 @@ fib: CP r2, r33 JAL r31, r0, :fib CP r33, r1 - ADDI64 r32, r32, -2d - CP r2, r32 + CP r34, r32 + ADDI64 r34, r34, -2d + CP r2, r34 JAL r31, r0, :fib - CP r32, r1 - ADD64 r1, r33, r32 - 1: LD r31, r254, 0a, 24h - ADDI64 r254, r254, 24d + CP r34, r1 + ADD64 r1, r33, r34 + 1: LD r31, r254, 0a, 32h + ADDI64 r254, r254, 32d JALA r0, r31, 0a main: ADDI64 r254, r254, -8d @@ -27,6 +28,6 @@ main: LD r31, r254, 0a, 8h ADDI64 r254, r254, 8d JALA r0, r31, 0a -code size: 231 +code size: 234 ret: 55 status: Ok(()) diff --git a/hblang/tests/codegen_tests_inline_test.txt b/hblang/tests/codegen_tests_inline_test.txt index 549680e..430f2b0 100644 --- a/hblang/tests/codegen_tests_inline_test.txt +++ b/hblang/tests/codegen_tests_inline_test.txt @@ -52,9 +52,10 @@ integer: OR r35, r35, r36 JEQ r35, r0, :0 CP r35, r34 - SUB64 r33, r33, r32 - ADDI64 r33, r33, 1d - DIRS64 r0, r35, r35, r33 + CP r36, r33 + SUB64 r36, r36, r32 + ADDI64 r36, r36, 1d + DIRS64 r0, r35, r35, r36 ADD64 r1, r35, r32 JMP :1 0: CP r1, r34 @@ -64,27 +65,27 @@ integer: line: ADDI64 r254, r254, -80d ST r31, r254, 48a, 32h - ST r2, r254, 16a, 16h - ST r4, r254, 0a, 16h + ST r2, r254, 0a, 16h + ST r4, r254, 16a, 16h ST r6, r254, 32a, 16h CP r32, r8 LI64 r33, 1d JEQ r33, r0, :0 - LD r33, r254, 16a, 8h - LD r34, r254, 0a, 8h + LD r33, r254, 0a, 8h + LD r34, r254, 16a, 8h JGTS r33, r34, :1 JMP :1 1: JMP :2 - 0: LD r34, r254, 24a, 8h - LD r33, r254, 8a, 8h + 0: LD r34, r254, 8a, 8h + LD r33, r254, 24a, 8h JGTS r34, r33, :2 JMP :2 2: LD r31, r254, 48a, 32h ADDI64 r254, r254, 80d JALA r0, r31, 0a main: - ADDI64 r254, r254, -64d - ST r31, r254, 48a, 16h + ADDI64 r254, r254, -112d + ST r31, r254, 96a, 16h LI64 r32, 0d ST r32, r254, 0a, 8h LI64 r32, 0d @@ -103,26 +104,26 @@ main: LI64 r8, 10d JAL r31, r0, :line LI64 r32, 0d - ST r32, r254, 0a, 8h + ST r32, r254, 48a, 8h LI64 r32, 0d - ST r32, r254, 8a, 8h - LD r2, r254, 0a, 16h + ST r32, r254, 56a, 8h + LD r2, r254, 48a, 16h LI64 r32, 0d - ST r32, r254, 16a, 8h + ST r32, r254, 64a, 8h LI64 r32, 0d - ST r32, r254, 24a, 8h - LD r4, r254, 16a, 16h + ST r32, r254, 72a, 8h + LD r4, r254, 64a, 16h LI64 r32, 0d - ST r32, r254, 32a, 8h + ST r32, r254, 80a, 8h LI64 r32, 0d - ST r32, r254, 40a, 8h - LD r6, r254, 32a, 16h + ST r32, r254, 88a, 8h + LD r6, r254, 80a, 16h LI64 r8, 10d JAL r31, r0, :rect_line JAL r31, r0, :example LI64 r1, 0d - LD r31, r254, 48a, 16h - ADDI64 r254, r254, 64d + LD r31, r254, 96a, 16h + ADDI64 r254, r254, 112d JALA r0, r31, 0a rect_line: ADDI64 r254, r254, -112d @@ -156,6 +157,6 @@ rect_line: 1: LD r31, r254, 48a, 64h ADDI64 r254, r254, 112d JALA r0, r31, 0a -code size: 1400 +code size: 1403 ret: 0 status: Ok(()) diff --git a/hblang/tests/codegen_tests_integer_inference_issues.txt b/hblang/tests/codegen_tests_integer_inference_issues.txt index db30783..dc604bb 100644 --- a/hblang/tests/codegen_tests_integer_inference_issues.txt +++ b/hblang/tests/codegen_tests_integer_inference_issues.txt @@ -1,18 +1,19 @@ integer_range: - ADDI64 r254, r254, -32d - ST r31, r254, 0a, 32h + ADDI64 r254, r254, -40d + ST r31, r254, 0a, 40h CP r32, r2 CP r33, r3 LI64 r2, 3d LI64 r3, 4d ECA CP r34, r1 - SUB64 r33, r33, r32 - ADDI64 r33, r33, 1d - DIRU64 r0, r34, r34, r33 + CP r35, r33 + SUB64 r35, r35, r32 + ADDI64 r35, r35, 1d + DIRU64 r0, r34, r34, r35 ADD64 r1, r34, r32 - LD r31, r254, 0a, 32h - ADDI64 r254, r254, 32d + LD r31, r254, 0a, 40h + ADDI64 r254, r254, 40d JALA r0, r31, 0a main: ADDI64 r254, r254, -16d @@ -24,6 +25,6 @@ main: LD r31, r254, 0a, 16h ADDI64 r254, r254, 16d JALA r0, r31, 0a -code size: 210 +code size: 213 ret: 42 status: Ok(()) diff --git a/hblang/tests/codegen_tests_pointers.txt b/hblang/tests/codegen_tests_pointers.txt index 8cde225..643ec20 100644 --- a/hblang/tests/codegen_tests_pointers.txt +++ b/hblang/tests/codegen_tests_pointers.txt @@ -6,8 +6,8 @@ drop: ADDI64 r254, r254, 16d JALA r0, r31, 0a main: - ADDI64 r254, r254, -40d - ST r31, r254, 8a, 32h + ADDI64 r254, r254, -48d + ST r31, r254, 8a, 40h LI64 r32, 1d ST r32, r254, 0a, 8h ADDI64 r32, r254, 0d @@ -16,20 +16,22 @@ main: LD r2, r254, 0a, 8h JAL r31, r0, :drop LI64 r33, 0d - LD r34, r32, 0a, 8h - ADDI64 r1, r34, -2d - LD r31, r254, 8a, 32h - ADDI64 r254, r254, 40d + CP r34, r32 + LD r35, r34, 0a, 8h + ADDI64 r1, r35, -2d + LD r31, r254, 8a, 40h + ADDI64 r254, r254, 48d JALA r0, r31, 0a modify: - ADDI64 r254, r254, -24d - ST r31, r254, 0a, 24h + ADDI64 r254, r254, -32d + ST r31, r254, 0a, 32h CP r32, r2 - LI64 r33, 2d - ST r33, r32, 0a, 8h - LD r31, r254, 0a, 24h - ADDI64 r254, r254, 24d + CP r33, r32 + LI64 r34, 2d + ST r34, r33, 0a, 8h + LD r31, r254, 0a, 32h + ADDI64 r254, r254, 32d JALA r0, r31, 0a -code size: 312 +code size: 318 ret: 0 status: Ok(()) diff --git a/hblang/tests/codegen_tests_request_page.txt b/hblang/tests/codegen_tests_request_page.txt index feb1b75..de7e4d6 100644 --- a/hblang/tests/codegen_tests_request_page.txt +++ b/hblang/tests/codegen_tests_request_page.txt @@ -1,6 +1,6 @@ create_back_buffer: - ADDI64 r254, r254, -32d - ST r31, r254, 0a, 32h + ADDI64 r254, r254, -40d + ST r31, r254, 0a, 40h CP r32, r2 LI64 r33, 255d JGTS r32, r33, :0 @@ -10,24 +10,25 @@ create_back_buffer: 0: LI64 r2, 255d JAL r31, r0, :request_page CP r33, r1 - ADDI64 r32, r32, -255d - 6: LI64 r34, 0d - JGTS r32, r34, :2 + CP r34, r32 + ADDI64 r34, r34, -255d + 6: LI64 r35, 0d + JGTS r34, r35, :2 JMP :3 - 2: LI64 r34, 255d - JLTS r32, r34, :4 + 2: LI64 r35, 255d + JLTS r34, r35, :4 LI64 r2, 255d JAL r31, r0, :request_page - CP r34, r1 + CP r35, r1 JMP :5 - 4: CP r2, r32 + 4: CP r2, r34 JAL r31, r0, :request_page - CP r34, r1 - 5: ADDI64 r32, r32, -255d + CP r35, r1 + 5: ADDI64 r34, r34, -255d JMP :6 3: CP r1, r33 - 1: LD r31, r254, 0a, 32h - ADDI64 r254, r254, 32d + 1: LD r31, r254, 0a, 40h + ADDI64 r254, r254, 40d JALA r0, r31, 0a main: ADDI64 r254, r254, -16d @@ -39,21 +40,22 @@ main: ADDI64 r254, r254, 16d JALA r0, r31, 0a request_page: - ADDI64 r254, r254, -32d - ST r31, r254, 0a, 32h + ADDI64 r254, r254, -40d + ST r31, r254, 0a, 40h CP r32, r2 LRA r33, r0, :"\0\u{1}xxxxxxxx\0" CP r34, r33 ADDI64 r34, r34, 1d - ST r32, r34, 0a, 1h + CP r35, r34 + ST r32, r35, 0a, 1h LI64 r2, 3d LI64 r3, 2d CP r4, r33 LI64 r5, 12d ECA - LD r31, r254, 0a, 32h - ADDI64 r254, r254, 32d + LD r31, r254, 0a, 40h + ADDI64 r254, r254, 40d JALA r0, r31, 0a -code size: 443 +code size: 449 ret: 42 status: Ok(()) diff --git a/hblang/tests/codegen_tests_struct_operators.txt b/hblang/tests/codegen_tests_struct_operators.txt index 010016a..76d58d9 100644 --- a/hblang/tests/codegen_tests_struct_operators.txt +++ b/hblang/tests/codegen_tests_struct_operators.txt @@ -1,74 +1,74 @@ main: - ADDI64 r254, r254, -136d - ST r31, r254, 112a, 24h + ADDI64 r254, r254, -152d + ST r31, r254, 128a, 24h LI64 r32, 1d - ST r32, r254, 32a, 8h + ST r32, r254, 0a, 8h LI64 r32, 2d - ST r32, r254, 40a, 8h + ST r32, r254, 8a, 8h LI64 r32, 3d ST r32, r254, 16a, 8h LI64 r32, 4d ST r32, r254, 24a, 8h - LD r32, r254, 32a, 8h + LD r32, r254, 0a, 8h LD r33, r254, 16a, 8h ADD64 r32, r32, r33 - ST r32, r254, 48a, 8h - LD r32, r254, 40a, 8h + ST r32, r254, 32a, 8h + LD r32, r254, 8a, 8h LD r33, r254, 24a, 8h ADD64 r32, r32, r33 - ST r32, r254, 56a, 8h + ST r32, r254, 40a, 8h LD r32, r254, 16a, 8h - LD r33, r254, 32a, 8h + LD r33, r254, 0a, 8h SUB64 r32, r32, r33 - ST r32, r254, 64a, 8h + ST r32, r254, 48a, 8h LD r32, r254, 24a, 8h - LD r33, r254, 40a, 8h + LD r33, r254, 8a, 8h SUB64 r32, r32, r33 + ST r32, r254, 56a, 8h + LI64 r32, 0d + ST r32, r254, 64a, 8h + LI64 r32, 0d ST r32, r254, 72a, 8h - LI64 r32, 0d - ST r32, r254, 0a, 8h - LI64 r32, 0d - ST r32, r254, 8a, 8h - LD r32, r254, 0a, 8h + LD r32, r254, 64a, 8h LD r33, r254, 16a, 8h SUB64 r32, r32, r33 ST r32, r254, 80a, 8h - LD r32, r254, 8a, 8h + LD r32, r254, 72a, 8h LD r33, r254, 24a, 8h SUB64 r32, r32, r33 ST r32, r254, 88a, 8h - ADDI64 r32, r254, 32d + ADDI64 r32, r254, 0d ADDI64 r33, r254, 96d BMC r32, r33, 16h LD r33, r254, 80a, 8h - LD r32, r254, 48a, 8h + LD r32, r254, 32a, 8h ADD64 r33, r33, r32 ST r33, r254, 80a, 8h LD r33, r254, 88a, 8h - LD r32, r254, 56a, 8h + LD r32, r254, 40a, 8h ADD64 r33, r33, r32 ST r33, r254, 88a, 8h LD r33, r254, 96a, 8h - LD r32, r254, 64a, 8h + LD r32, r254, 48a, 8h ADD64 r33, r33, r32 ST r33, r254, 96a, 8h LD r33, r254, 104a, 8h - LD r32, r254, 72a, 8h + LD r32, r254, 56a, 8h ADD64 r33, r33, r32 ST r33, r254, 104a, 8h LD r33, r254, 80a, 8h LD r32, r254, 96a, 8h ADD64 r33, r33, r32 - ST r33, r254, 96a, 8h + ST r33, r254, 112a, 8h LD r33, r254, 88a, 8h LD r32, r254, 104a, 8h ADD64 r33, r33, r32 - ST r33, r254, 104a, 8h - LD r33, r254, 96a, 8h - LD r32, r254, 104a, 8h + ST r33, r254, 120a, 8h + LD r33, r254, 112a, 8h + LD r32, r254, 120a, 8h ADD64 r1, r33, r32 - LD r31, r254, 112a, 24h - ADDI64 r254, r254, 136d + LD r31, r254, 128a, 24h + ADDI64 r254, r254, 152d JALA r0, r31, 0a code size: 778 ret: 10 diff --git a/hblang/tests/codegen_tests_struct_patterns.txt b/hblang/tests/codegen_tests_struct_patterns.txt index 616df10..fc64c9d 100644 --- a/hblang/tests/codegen_tests_struct_patterns.txt +++ b/hblang/tests/codegen_tests_struct_patterns.txt @@ -40,8 +40,8 @@ fib_iter: ADDI64 r254, r254, 40d JALA r0, r31, 0a main: - ADDI64 r254, r254, -26d - ST r31, r254, 2a, 24h + ADDI64 r254, r254, -42d + ST r31, r254, 2a, 40h LI64 r32, 10d ST r32, r254, 0a, 1h LI64 r32, 10d @@ -52,13 +52,13 @@ main: LD r33, r254, 1a, 1h CP r2, r32 JAL r31, r0, :fib - CP r32, r1 + CP r34, r1 CP r2, r33 JAL r31, r0, :fib_iter - CP r33, r1 - SUB64 r1, r32, r33 - LD r31, r254, 2a, 24h - ADDI64 r254, r254, 26d + CP r35, r1 + SUB64 r1, r34, r35 + LD r31, r254, 2a, 40h + ADDI64 r254, r254, 42d JALA r0, r31, 0a code size: 452 ret: 0 diff --git a/hblang/tests/codegen_tests_struct_return_from_module_function.txt b/hblang/tests/codegen_tests_struct_return_from_module_function.txt index db9c72b..89328a5 100644 --- a/hblang/tests/codegen_tests_struct_return_from_module_function.txt +++ b/hblang/tests/codegen_tests_struct_return_from_module_function.txt @@ -12,27 +12,27 @@ foo: ADDI64 r254, r254, 32d JALA r0, r31, 0a main: - ADDI64 r254, r254, -40d - ST r31, r254, 16a, 24h + ADDI64 r254, r254, -72d + ST r31, r254, 48a, 24h LI64 r32, 7d JAL r31, r0, :foo ST r1, r254, 0a, 16h LD r33, r254, 0a, 8h SUB64 r32, r32, r33 JAL r31, r0, :foo - ST r1, r254, 0a, 16h + ST r1, r254, 16a, 16h CP r33, r0 - LD r33, r254, 8a, 4h + LD r33, r254, 24a, 4h SXT32 r33, r33 SUB64 r32, r32, r33 JAL r31, r0, :foo - ST r1, r254, 0a, 16h + ST r1, r254, 32a, 16h CP r33, r0 - LD r33, r254, 12a, 4h + LD r33, r254, 44a, 4h SXT32 r33, r33 SUB64 r1, r32, r33 - LD r31, r254, 16a, 24h - ADDI64 r254, r254, 40d + LD r31, r254, 48a, 24h + ADDI64 r254, r254, 72d JALA r0, r31, 0a code size: 341 ret: 0 diff --git a/hblang/tests/codegen_tests_structs.txt b/hblang/tests/codegen_tests_structs.txt index b1bbd5e..7bc4e83 100644 --- a/hblang/tests/codegen_tests_structs.txt +++ b/hblang/tests/codegen_tests_structs.txt @@ -1,6 +1,6 @@ main: - ADDI64 r254, r254, -48d - ST r31, r254, 24a, 24h + ADDI64 r254, r254, -72d + ST r31, r254, 48a, 24h LI64 r32, 4d ST r32, r254, 0a, 8h LI64 r32, 1d @@ -8,39 +8,41 @@ main: LI64 r32, 3d ST r32, r254, 16a, 8h ADDI64 r2, r254, 0d - ADDI64 r1, r254, 0d + ADDI64 r1, r254, 24d JAL r31, r0, :odher_pass - LD r32, r254, 16a, 8h + LD r32, r254, 40a, 8h LI64 r33, 3d JNE r32, r33, :0 - ADDI64 r33, r254, 0d + ADDI64 r33, r254, 24d CP r2, r33 JAL r31, r0, :pass JMP :1 0: LI64 r1, 0d - 1: LD r31, r254, 24a, 24h - ADDI64 r254, r254, 48d + 1: LD r31, r254, 48a, 24h + ADDI64 r254, r254, 72d JALA r0, r31, 0a odher_pass: - ADDI64 r254, r254, -32d - ST r31, r254, 0a, 32h + ADDI64 r254, r254, -40d + ST r31, r254, 0a, 40h CP r32, r2 CP r33, r1 - CP r34, r33 - BMC r32, r34, 24h - LD r31, r254, 0a, 32h - ADDI64 r254, r254, 32d + CP r34, r32 + CP r35, r33 + BMC r34, r35, 24h + LD r31, r254, 0a, 40h + ADDI64 r254, r254, 40d JALA r0, r31, 0a pass: - ADDI64 r254, r254, -32d - ST r31, r254, 0a, 32h + ADDI64 r254, r254, -40d + ST r31, r254, 0a, 40h CP r32, r2 - LD r33, r32, 0a, 8h - LD r34, r32, 8a, 8h - SUB64 r1, r33, r34 - LD r31, r254, 0a, 32h - ADDI64 r254, r254, 32d + CP r33, r32 + LD r34, r33, 0a, 8h + LD r35, r33, 8a, 8h + SUB64 r1, r34, r35 + LD r31, r254, 0a, 40h + ADDI64 r254, r254, 40d JALA r0, r31, 0a -code size: 394 +code size: 400 ret: 3 status: Ok(()) diff --git a/hblang/tests/codegen_tests_wide_ret.txt b/hblang/tests/codegen_tests_wide_ret.txt index a5c0e26..d9d9bbd 100644 --- a/hblang/tests/codegen_tests_wide_ret.txt +++ b/hblang/tests/codegen_tests_wide_ret.txt @@ -1,32 +1,32 @@ main: - ADDI64 r254, r254, -48d - ST r31, r254, 16a, 32h + ADDI64 r254, r254, -56d + ST r31, r254, 24a, 32h CP r32, r3 CP r33, r4 JAL r31, r0, :small_struct CP r34, r1 LI64 r34, 0d - ST r34, r254, 8a, 1h + ST r34, r254, 0a, 1h LI64 r34, 0d - ST r34, r254, 9a, 1h + ST r34, r254, 1a, 1h LI64 r34, 0d - ST r34, r254, 10a, 1h + ST r34, r254, 2a, 1h LI64 r34, 0d - ST r34, r254, 11a, 1h + ST r34, r254, 3a, 1h LI64 r34, 0d - ST r34, r254, 12a, 1h + ST r34, r254, 4a, 1h LI64 r34, 0d - ST r34, r254, 13a, 1h + ST r34, r254, 5a, 1h LI64 r34, 0d - ST r34, r254, 14a, 1h + ST r34, r254, 6a, 1h LI64 r34, 0d - ST r34, r254, 15a, 1h - LD r34, r254, 8a, 8h - ST r34, r254, 0a, 8h + ST r34, r254, 7a, 1h + LD r34, r254, 0a, 8h ST r34, r254, 8a, 8h - LD r1, r254, 0a, 16h - LD r31, r254, 16a, 32h - ADDI64 r254, r254, 48d + ST r34, r254, 16a, 8h + LD r1, r254, 8a, 16h + LD r31, r254, 24a, 32h + ADDI64 r254, r254, 56d JALA r0, r31, 0a small_struct: ADDI64 r254, r254, -20d