From cc39f87783d7ce65d375f7d4a4ab8c13503f7b68 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Sat, 7 Mar 2026 13:59:25 +0100 Subject: [PATCH 01/85] tests(arch): simplify definition of common execution tests --- .../unit/arch/mips/mips_example_002.test.mts | 39 +--- .../unit/arch/mips/mips_example_003.test.mts | 45 ++--- .../unit/arch/mips/mips_example_004.test.mts | 43 ++--- .../unit/arch/mips/mips_example_005.test.mts | 37 +--- .../unit/arch/mips/mips_example_006.test.mts | 39 +--- .../unit/arch/mips/mips_example_007.test.mts | 39 +--- .../unit/arch/mips/mips_example_008.test.mts | 37 +--- .../unit/arch/mips/mips_example_011.test.mts | 40 +--- .../unit/arch/mips/mips_example_012.test.mts | 39 +--- tests/unit/arch/riscv/example_001.test.mts | 62 ++---- tests/unit/arch/riscv/example_002.test.mts | 111 +++++------ tests/unit/arch/riscv/example_003.test.mts | 78 +++----- tests/unit/arch/riscv/example_004.test.mts | 180 ++++++++---------- tests/unit/arch/riscv/example_005.test.mts | 54 ++---- tests/unit/arch/riscv/example_006.test.mts | 58 ++---- tests/unit/arch/riscv/example_007.test.mts | 37 +--- tests/unit/arch/riscv/example_008.test.mts | 76 +++----- tests/unit/arch/riscv/example_011.test.mts | 56 ++---- tests/unit/arch/riscv/example_012.test.mts | 55 ++---- tests/unit/arch/riscv/example_013.test.mts | 40 ++-- .../arch/riscv/floating_point_demo.test.mts | 12 +- tests/unit/arch/simulator-test-utils.mts | 25 +++ 22 files changed, 415 insertions(+), 787 deletions(-) diff --git a/tests/unit/arch/mips/mips_example_002.test.mts b/tests/unit/arch/mips/mips_example_002.test.mts index eaa100dea..ae1d29b32 100644 --- a/tests/unit/arch/mips/mips_example_002.test.mts +++ b/tests/unit/arch/mips/mips_example_002.test.mts @@ -1,44 +1,27 @@ -import { assertEquals } from "https://deno.land/std/assert/mod.ts"; -import { - setupSimulator, - executeN, - cleanupSimulator, - assertSimulatorState, -} from "../simulator-test-utils.mts"; - -Deno.test("MIPS Basic Arithmetic Operations", async () => { - const testAssembly = ` +import { assertExecution } from "../simulator-test-utils.mts"; +const testAssembly = ` # # Creator (https://creatorsim.github.io/creator/) # .text main: - + li $t0, 10 li $t1, 13 li $t2, 45 li $t3, 33 - + add $t4, $t0, $t1 # 10+13 sub $t5, $t2, $t3 # 45-33 mul $t6, $t3, $t3 # 33*33 div $t7, $t6, $t1 # $t6/13 +`; - `; - - const MIPS_ARCH_PATH = "../../../architecture/MIPS32.yml"; - - // Setup simulator with MIPS architecture - await setupSimulator(testAssembly, MIPS_ARCH_PATH); - - // Execute the program - const result = executeN(1000); - assertEquals(result.error, false, "Execution should not error"); - - // Assert all expected state using the wrapper function - assertSimulatorState({ +Deno.test( + "MIPS Basic Arithmetic Operations", + assertExecution("MIPS32.yml", testAssembly, { registers: { r8: 0xan, // t0 = 10 r9: 0xdn, // t1 = 13 @@ -51,7 +34,5 @@ main: }, display: "", // Display buffer should be empty keyboard: "", // Keyboard buffer should be empty - }); - - cleanupSimulator(); -}); + }), +); diff --git a/tests/unit/arch/mips/mips_example_003.test.mts b/tests/unit/arch/mips/mips_example_003.test.mts index b63d0c45d..0ee22eba5 100644 --- a/tests/unit/arch/mips/mips_example_003.test.mts +++ b/tests/unit/arch/mips/mips_example_003.test.mts @@ -1,14 +1,6 @@ -import { assertEquals } from "https://deno.land/std/assert/mod.ts"; -import { - setupSimulator, - executeN, - cleanupSimulator, - assertSimulatorState, -} from "../simulator-test-utils.mts"; - -Deno.test("MIPS Data Types and Memory Operations", async () => { - const testAssembly = ` +import { assertExecution } from "../simulator-test-utils.mts"; +const testAssembly = ` # # Creator (https://creatorsim.github.io/creator/) # @@ -27,37 +19,28 @@ Deno.test("MIPS Data Types and Memory Operations", async () => { .text main: - + la $t0, w1 #w1 address -> $t0 la $t1, b1 #b1 address -> $t1 la $t2, h1 #h1 address -> $t2 - + lw $t3, 0($t0) #Memory[$t0] -> $t3 lw $t4, w1 #Memory[w1] -> $t4 - + lb $t5, 0($t1) #Memory[$t1] -> $t5 lb $t6, b1 #Memory[b1] -> $t6 - + lh $t7, 0($t2) #Memory[$t2] -> $t7 lh $t8, h1 #Memory[h1] -> $t8 - + sw $t3, w2 #$t3 -> Memory[w2] sb $t5, b2 #$t5 -> Memory[b2] sh $t7, h2 #$t7 -> Memory[h2] +`; - `; - - const MIPS_ARCH_PATH = "../../../architecture/MIPS32.yml"; - - // Setup simulator with MIPS architecture - await setupSimulator(testAssembly, MIPS_ARCH_PATH); - - // Execute the program - const result = executeN(1000); - assertEquals(result.error, false, "Execution should not error"); - - // Assert all expected state using the wrapper function - assertSimulatorState({ +Deno.test( + "MIPS Data Types and Memory Operations", + assertExecution("MIPS32.yml", testAssembly, { registers: { r1: 0x20000en, // at r8: 0x200000n, // t0 @@ -77,7 +60,5 @@ main: }, display: "", // Display buffer should be empty keyboard: "", // Keyboard buffer should be empty - }); - - cleanupSimulator(); -}); + }), +); diff --git a/tests/unit/arch/mips/mips_example_004.test.mts b/tests/unit/arch/mips/mips_example_004.test.mts index 799293147..2d29e4c21 100644 --- a/tests/unit/arch/mips/mips_example_004.test.mts +++ b/tests/unit/arch/mips/mips_example_004.test.mts @@ -1,31 +1,24 @@ -import { assertEquals } from "https://deno.land/std/assert/mod.ts"; -import { - setupSimulator, - executeN, - cleanupSimulator, - assertSimulatorState, -} from "../simulator-test-utils.mts"; +import { assertExecution } from "../simulator-test-utils.mts"; -Deno.test("MIPS Floating Point Operations", async () => { - const testAssembly = ` +const testAssembly = ` # # Creator (https://creatorsim.github.io/creator/) # - + .data a: .double 34.544 b: .double 11.443 c: .double 665.4 - + d: .space 24 - + .text main: la $t0, a la $t1, b la $t2, c la $t3, d - + l.d $f0, 0($t0) l.d $f2, 0($t1) l.d $f10, 0($t2) @@ -41,20 +34,12 @@ main: li $v0, 10 syscall +`; - `; - - const MIPS_ARCH_PATH = "../../../architecture/MIPS32.yml"; - - // Setup simulator with MIPS architecture - await setupSimulator(testAssembly, MIPS_ARCH_PATH); - - // Execute the program - const result = executeN(1000); - assertEquals(result.error, false, "Execution should not error"); - // TODO: finish the conditions below - // Assert all expected state using the wrapper function - assertSimulatorState({ +Deno.test( + "MIPS Floating Point Operations", + assertExecution("MIPS32.yml", testAssembly, { + // TODO: finish the conditions below registers: { r1: 0x200018n, // at r2: 0xan, // v0 @@ -65,7 +50,5 @@ main: }, display: "", // Display buffer should be empty keyboard: "", // Keyboard buffer should be empty - }); - - cleanupSimulator(); -}); + }), +); diff --git a/tests/unit/arch/mips/mips_example_005.test.mts b/tests/unit/arch/mips/mips_example_005.test.mts index 698ee5827..19c0fea79 100644 --- a/tests/unit/arch/mips/mips_example_005.test.mts +++ b/tests/unit/arch/mips/mips_example_005.test.mts @@ -1,14 +1,6 @@ -import { assertEquals } from "https://deno.land/std/assert/mod.ts"; -import { - setupSimulator, - executeN, - cleanupSimulator, - assertSimulatorState, -} from "../simulator-test-utils.mts"; - -Deno.test("MIPS Loop and Print Sum", async () => { - const testAssembly = ` +import { assertExecution } from "../simulator-test-utils.mts"; +const testAssembly = ` # # Creator (https://creatorsim.github.io/creator/) # @@ -27,22 +19,11 @@ Deno.test("MIPS Loop and Print Sum", async () => { end_while: li $v0, 1 syscall #print_int +`; - - - `; - - const MIPS_ARCH_PATH = "../../../architecture/MIPS32.yml"; - - // Setup simulator with MIPS architecture - await setupSimulator(testAssembly, MIPS_ARCH_PATH); - - // Execute the program - const result = executeN(1000); - assertEquals(result.error, false, "Execution should not error"); - - // Assert all expected state using the wrapper function - assertSimulatorState({ +Deno.test( + "MIPS Loop and Print Sum", + assertExecution("MIPS32.yml", testAssembly, { registers: { r2: 0x1n, // v0 r4: 0x2dn, // a0 = 45 @@ -51,7 +32,5 @@ Deno.test("MIPS Loop and Print Sum", async () => { }, display: "45", // Should display '45' keyboard: "", // Keyboard buffer should be empty - }); - - cleanupSimulator(); -}); + }), +); diff --git a/tests/unit/arch/mips/mips_example_006.test.mts b/tests/unit/arch/mips/mips_example_006.test.mts index eb988f863..e06aa3b57 100644 --- a/tests/unit/arch/mips/mips_example_006.test.mts +++ b/tests/unit/arch/mips/mips_example_006.test.mts @@ -1,14 +1,6 @@ -import { assertEquals } from "https://deno.land/std/assert/mod.ts"; -import { - setupSimulator, - executeN, - cleanupSimulator, - assertSimulatorState, -} from "../simulator-test-utils.mts"; - -Deno.test("MIPS Branching Instructions", async () => { - const testAssembly = ` +import { assertExecution } from "../simulator-test-utils.mts"; +const testAssembly = ` # # Creator (https://creatorsim.github.io/creator/) # @@ -18,8 +10,8 @@ Deno.test("MIPS Branching Instructions", async () => { li $t0, 4 li $t1, 2 ble $t0, 5, jump1 - - jump2: + + jump2: li $t3, 34 li $v0, 10 syscall @@ -28,20 +20,11 @@ Deno.test("MIPS Branching Instructions", async () => { li $t9, 11 li $t8, 555 b jump2 +`; - `; - - const MIPS_ARCH_PATH = "../../../architecture/MIPS32.yml"; - - // Setup simulator with MIPS architecture - await setupSimulator(testAssembly, MIPS_ARCH_PATH); - - // Execute the program - const result = executeN(1000); - assertEquals(result.error, false, "Execution should not error"); - - // Assert all expected state using the wrapper function - assertSimulatorState({ +Deno.test( + "MIPS Branching Instructions", + assertExecution("MIPS32.yml", testAssembly, { registers: { r1: 0x1n, // at r2: 0xan, // v0 @@ -53,7 +36,5 @@ Deno.test("MIPS Branching Instructions", async () => { }, display: "", // Display buffer should be empty keyboard: "", // Keyboard buffer should be empty - }); - - cleanupSimulator(); -}); + }), +); diff --git a/tests/unit/arch/mips/mips_example_007.test.mts b/tests/unit/arch/mips/mips_example_007.test.mts index 25215688c..e8e872c71 100644 --- a/tests/unit/arch/mips/mips_example_007.test.mts +++ b/tests/unit/arch/mips/mips_example_007.test.mts @@ -1,14 +1,6 @@ -import { assertEquals } from "https://deno.land/std/assert/mod.ts"; -import { - setupSimulator, - executeN, - cleanupSimulator, - assertSimulatorState, -} from "../simulator-test-utils.mts"; - -Deno.test("MIPS Array Sum Loop", async () => { - const testAssembly = ` +import { assertExecution } from "../simulator-test-utils.mts"; +const testAssembly = ` # # Creator (https://creatorsim.github.io/creator/) # @@ -41,25 +33,14 @@ loop1: beq $t1, $t2, end1 #if($t1 == $t2) --> jump to fin1 b loop1 # loop end -end1: +end1: li $v0, 10 syscall +`; - - - `; - - const MIPS_ARCH_PATH = "../../../architecture/MIPS32.yml"; - - // Setup simulator with MIPS architecture - await setupSimulator(testAssembly, MIPS_ARCH_PATH); - - // Execute the program - const result = executeN(1000); - assertEquals(result.error, false, "Execution should not error"); - - // Assert all expected state using the wrapper function - assertSimulatorState({ +Deno.test( + "MIPS Array Sum Loop", + assertExecution("MIPS32.yml", testAssembly, { registers: { PC: 0x44n, r1: 0x200000n, // at @@ -74,7 +55,5 @@ end1: }, display: "", // Display buffer should be empty keyboard: "", // Keyboard buffer should be empty - }); - - cleanupSimulator(); -}); + }), +); diff --git a/tests/unit/arch/mips/mips_example_008.test.mts b/tests/unit/arch/mips/mips_example_008.test.mts index 1f172c007..e688cd312 100644 --- a/tests/unit/arch/mips/mips_example_008.test.mts +++ b/tests/unit/arch/mips/mips_example_008.test.mts @@ -1,14 +1,6 @@ -import { assertEquals } from "https://deno.land/std/assert/mod.ts"; -import { - setupSimulator, - executeN, - cleanupSimulator, - assertSimulatorState, -} from "../simulator-test-utils.mts"; - -Deno.test("MIPS Matrix Copy with Floats", async () => { - const testAssembly = ` +import { assertExecution } from "../simulator-test-utils.mts"; +const testAssembly = ` # # Creator (https://creatorsim.github.io/creator/) # @@ -33,7 +25,7 @@ main: li $t3, 4 move $t4, $zero move $t5, $zero - + loop1: beq $t2, $t4, end1 loop2: beq $t3, $t5, end2 l.s $f0, 0($t0) @@ -47,20 +39,11 @@ end2: addi $t4, $t4, 1 b loop1 end1: li $v0, 10 syscall +`; - `; - - const MIPS_ARCH_PATH = "../../../architecture/MIPS32.yml"; - - // Setup simulator with MIPS architecture - await setupSimulator(testAssembly, MIPS_ARCH_PATH); - - // Execute the program - const result = executeN(1000); - assertEquals(result.error, false, "Execution should not error"); - - // Assert all expected state using the wrapper function - assertSimulatorState({ +Deno.test( + "MIPS Matrix Copy with Floats", + assertExecution("MIPS32.yml", testAssembly, { registers: { r1: 0x200040n, // at r2: 0xan, // v0 @@ -117,7 +100,5 @@ end1: li $v0, 10 }, display: "", // Display buffer should be empty keyboard: "", // Keyboard buffer should be empty - }); - - cleanupSimulator(); -}); + }), +); diff --git a/tests/unit/arch/mips/mips_example_011.test.mts b/tests/unit/arch/mips/mips_example_011.test.mts index 379ef3f58..3e488fd2a 100644 --- a/tests/unit/arch/mips/mips_example_011.test.mts +++ b/tests/unit/arch/mips/mips_example_011.test.mts @@ -1,14 +1,6 @@ -import { assertEquals } from "https://deno.land/std/assert/mod.ts"; -import { - setupSimulator, - executeN, - cleanupSimulator, - assertSimulatorState, -} from "../simulator-test-utils.mts"; - -Deno.test("MIPS Function Calls", async () => { - const testAssembly = ` +import { assertExecution } from "../simulator-test-utils.mts"; +const testAssembly = ` # # Creator (https://creatorsim.github.io/creator/) # @@ -28,32 +20,22 @@ main: syscall li $v0, 10 syscall - + sum: add $t1, $a0, $a1 add $t2, $a2, $a2 move $v0, $t1 move $v1, $t2 - jr $ra + jr $ra sub: sub $v0, $a0, $a1 jr $ra - - - `; +`; - const MIPS_ARCH_PATH = "../../../architecture/MIPS32.yml"; - - // Setup simulator with MIPS architecture - await setupSimulator(testAssembly, MIPS_ARCH_PATH); - - // Execute the program - const result = executeN(1000); - assertEquals(result.error, false, "Execution should not error"); - - // Assert all expected state using the wrapper function - assertSimulatorState({ +Deno.test( + "MIPS Function Calls", + assertExecution("MIPS32.yml", testAssembly, { registers: { PC: 0x38n, r1: 0xffffffb3n, // at @@ -68,7 +50,5 @@ sub: }, display: "-144", // Should display '-144' keyboard: "", // Keyboard buffer should be empty - }); - - cleanupSimulator(); -}); + }), +); diff --git a/tests/unit/arch/mips/mips_example_012.test.mts b/tests/unit/arch/mips/mips_example_012.test.mts index 0fd08c544..702559876 100644 --- a/tests/unit/arch/mips/mips_example_012.test.mts +++ b/tests/unit/arch/mips/mips_example_012.test.mts @@ -1,14 +1,6 @@ -import { assertEquals } from "https://deno.land/std/assert/mod.ts"; -import { - setupSimulator, - executeN, - cleanupSimulator, - assertSimulatorState, -} from "../simulator-test-utils.mts"; - -Deno.test("MIPS Recursive Factorial", async () => { - const testAssembly = ` +import { assertExecution } from "../simulator-test-utils.mts"; +const testAssembly = ` # # ARCOS.INF.UC3M.ES # BY-NC-SA (https://creativecommons.org/licenses/by-nc-sa/4.0/deed.es) @@ -17,7 +9,7 @@ Deno.test("MIPS Recursive Factorial", async () => { .text - main: + main: # v1 = factorial(5) li $a0, 5 jal factorial @@ -42,7 +34,7 @@ factorial: # if ($a < 2): # return 1 bge $a0, 2, b_else - li $v0, 1 + li $v0, 1 b b_efs # else: # return $a0 * factorial($a0 - 1) @@ -59,20 +51,11 @@ factorial: # return $v0 jr $ra +`; - `; - - const MIPS_ARCH_PATH = "../../../architecture/MIPS32.yml"; - - // Setup simulator with MIPS architecture - await setupSimulator(testAssembly, MIPS_ARCH_PATH); - - // Execute the program - const result = executeN(1000); - assertEquals(result.error, false, "Execution should not error"); - - // Assert all expected state using the wrapper function - assertSimulatorState({ +Deno.test( + "MIPS Recursive Factorial", + assertExecution("MIPS32.yml", testAssembly, { registers: { PC: 0x1cn, r1: 0x1n, // at @@ -83,7 +66,5 @@ factorial: }, display: "120", // Should display '120' keyboard: "", // Keyboard buffer should be empty - }); - - cleanupSimulator(); -}); + }), +); diff --git a/tests/unit/arch/riscv/example_001.test.mts b/tests/unit/arch/riscv/example_001.test.mts index 4cafdc26f..38196a9da 100644 --- a/tests/unit/arch/riscv/example_001.test.mts +++ b/tests/unit/arch/riscv/example_001.test.mts @@ -1,36 +1,26 @@ -import { assertEquals } from "https://deno.land/std/assert/mod.ts"; -import { - setupSimulator, - executeN, - cleanupSimulator, - assertSimulatorState, -} from "../simulator-test-utils.mts"; - -Deno.test( - "Architecture-agnostic testing - RISC-V Basic Data Types and Print Operations", - async () => { - const testAssembly = ` +import { assertExecution } from "../simulator-test-utils.mts"; +const testAssembly = ` # # Creator (https://creatorsim.github.io/creator/) # .data - + byte: .byte 12 - + .align 1 half: .half 34 - + .text main: - - # print byte value + + # print byte value la a0, byte lb a0, 0(a0) li a7, 1 ecall - + # print half value la a0, half lh a0, 0(a0) @@ -40,31 +30,15 @@ Deno.test( # exit program li a7, 10 ecall +`; - `; - - const RISCV_ARCH_PATH = "../../../architecture/RISCV/RV32IMFD.yml"; - - // Setup simulator with RISC-V architecture - await setupSimulator(testAssembly, RISCV_ARCH_PATH); - - // Execute the program - const result = executeN(1000); - assertEquals( - result.error, - false, - `Execution should not error. ${result.output}`, - ); - - // Assert all expected state using the wrapper function - assertSimulatorState({ - registers: { - a0: 0x22n, // a0 should contain 34 (0x22) - }, - display: "1234", // Should show '1234' (12 followed by 34) - keyboard: "", // Keyboard buffer should be empty - }); - - cleanupSimulator(); - }, +Deno.test( + "Architecture-agnostic testing - RISC-V Basic Data Types and Print Operations", + assertExecution("RISCV/RV32IMFD.yml", testAssembly, { + registers: { + a0: 0x22n, // a0 should contain 34 (0x22) + }, + display: "1234", // Should show '1234' (12 followed by 34) + keyboard: "", // Keyboard buffer should be empty + }), ); diff --git a/tests/unit/arch/riscv/example_002.test.mts b/tests/unit/arch/riscv/example_002.test.mts index 1c30b9995..a3ab71f8b 100644 --- a/tests/unit/arch/riscv/example_002.test.mts +++ b/tests/unit/arch/riscv/example_002.test.mts @@ -1,16 +1,6 @@ -import { assertEquals } from "https://deno.land/std/assert/mod.ts"; -import { - setupSimulator, - executeN, - cleanupSimulator, - assertSimulatorState, -} from "../simulator-test-utils.mts"; +import { assertExecution } from "../simulator-test-utils.mts"; -Deno.test( - "Architecture-agnostic testing - RISC-V Store Hello World without Data Segment", - - async () => { - const testAssembly = ` +const testAssembly = ` # # Creator (https://creatorsim.github.io/creator/) # Example: Store "hello world" byte by byte without data segment @@ -18,102 +8,91 @@ Deno.test( .text main: - # Use a base memory address + # Use a base memory address li t1, 0x200000 - + # Store "hello world" byte by byte # 'h' = 104 li t0, 104 sb t0, 0(t1) - - # 'e' = 101 + + # 'e' = 101 li t0, 101 sb t0, 1(t1) - + # 'l' = 108 li t0, 108 sb t0, 2(t1) - + # 'l' = 108 li t0, 108 sb t0, 3(t1) - + # 'o' = 111 li t0, 111 sb t0, 4(t1) - + # ' ' = 32 (space) li t0, 32 sb t0, 5(t1) - + # 'w' = 119 li t0, 119 sb t0, 6(t1) - + # 'o' = 111 li t0, 111 sb t0, 7(t1) - + # 'r' = 114 li t0, 114 sb t0, 8(t1) - + # 'l' = 108 li t0, 108 sb t0, 9(t1) - + # 'd' = 100 li t0, 100 sb t0, 10(t1) - + # null terminator = 0 li t0, 0 sb t0, 11(t1) - + # Print the string (system call 4 - print string) mv a0, t1 # address of string li a7, 4 # system call for print string ecall - + # exit program li a7, 10 ecall - `; - - const RISCV_ARCH_PATH = "../../../architecture/RISCV/RV32IMFD.yml"; - - // Setup simulator with RISC-V architecture - await setupSimulator(testAssembly, RISCV_ARCH_PATH); - - // Execute the program - const result = executeN(1000); - assertEquals(result.error, false, "Execution should not error"); - - // Assert all expected state using the wrapper function - assertSimulatorState({ - registers: { - x5: 0x0n, // t0 - last value stored - x6: 0x200000n, // t1 - base address - x10: 0x200000n, // a0 - string address - }, - memory: { - "0x200000": 0x68n, // 'h' = 104 - "0x200001": 0x65n, // 'e' = 101 - "0x200002": 0x6cn, // 'l' = 108 - "0x200003": 0x6cn, // 'l' = 108 - "0x200004": 0x6fn, // 'o' = 111 - "0x200005": 0x20n, // ' ' = 32 (space) - "0x200006": 0x77n, // 'w' = 119 - "0x200007": 0x6fn, // 'o' = 111 - "0x200008": 0x72n, // 'r' = 114 - "0x200009": 0x6cn, // 'l' = 108 - "0x20000a": 0x64n, // 'd' = 100 - "0x20000b": 0x0n, // null terminator - }, - display: "hello world", - keyboard: "", - }); - - cleanupSimulator(); - }, +`; + +Deno.test( + "Architecture-agnostic testing - RISC-V Store Hello World without Data Segment", + assertExecution("RISCV/RV32IMFD.yml", testAssembly, { + registers: { + x5: 0x0n, // t0 - last value stored + x6: 0x200000n, // t1 - base address + x10: 0x200000n, // a0 - string address + }, + memory: { + "0x200000": 0x68n, // 'h' = 104 + "0x200001": 0x65n, // 'e' = 101 + "0x200002": 0x6cn, // 'l' = 108 + "0x200003": 0x6cn, // 'l' = 108 + "0x200004": 0x6fn, // 'o' = 111 + "0x200005": 0x20n, // ' ' = 32 (space) + "0x200006": 0x77n, // 'w' = 119 + "0x200007": 0x6fn, // 'o' = 111 + "0x200008": 0x72n, // 'r' = 114 + "0x200009": 0x6cn, // 'l' = 108 + "0x20000a": 0x64n, // 'd' = 100 + "0x20000b": 0x0n, // null terminator + }, + display: "hello world", + keyboard: "", + }), ); diff --git a/tests/unit/arch/riscv/example_003.test.mts b/tests/unit/arch/riscv/example_003.test.mts index 6c8003c53..5d8c4e50b 100644 --- a/tests/unit/arch/riscv/example_003.test.mts +++ b/tests/unit/arch/riscv/example_003.test.mts @@ -1,16 +1,6 @@ -import { assertEquals } from "https://deno.land/std/assert/mod.ts"; -import { - setupSimulator, - executeN, - cleanupSimulator, - assertSimulatorState, -} from "../simulator-test-utils.mts"; - -Deno.test( - "Architecture-agnostic testing - RISC-V Load and Store Operations", - async () => { - const testAssembly = ` +import { assertExecution } from "../simulator-test-utils.mts"; +const testAssembly = ` # # Creator (https://creatorsim.github.io/creator/) # @@ -29,13 +19,13 @@ Deno.test( .text main: - + la t0, w1 # w1 address -> t0 lw t3, 0(t0) # Memory[t0] -> t3 la t1, b1 # b1 address -> t1 lb t4, 0(t1) # Memory[t1] -> t4 - + la t2, h1 # h1 address -> t2 lh t5, 0 (t2) # Memory[t2] -> t5 @@ -47,44 +37,32 @@ main: la t0, h2 # h2 address -> t0 sh t5, 0(t0) # t5 -> Memory[h2] - + # exit program li a7, 10 ecall +`; - `; - - const RISCV_ARCH_PATH = "../../../architecture/RISCV/RV32IMFD.yml"; - - // Setup simulator with RISC-V architecture - await setupSimulator(testAssembly, RISCV_ARCH_PATH); - - // Execute the program - const result = executeN(1000); - assertEquals(result.error, false, "Execution should not error"); - - // Assert all expected state using the wrapper function - assertSimulatorState({ - registers: { - x5: 0x20000en, // t0 - h2 address - x6: 0x200004n, // t1 - b1 address - x7: 0x200006n, // t2 - h1 address - x28: 0xen, // t3 - loaded w1 value - x29: 0x78n, // t4 - loaded b1 value (120) - x30: 0x16n, // t5 - loaded h1 value - }, - memory: { - "0x200003": 0xen, // w1 = 14 - "0x200004": 0x78n, // b1 = 120 - "0x200007": 0x16n, // h1 = 22 - "0x20000b": 0xen, // w2 = copied from w1 - "0x20000c": 0x78n, // b2 = copied from b1 - "0x20000f": 0x16n, // h2 = copied from h1 - }, - display: "", - keyboard: "", - }); - - cleanupSimulator(); - }, +Deno.test( + "Architecture-agnostic testing - RISC-V Load and Store Operations", + assertExecution("RISCV/RV32IMFD.yml", testAssembly, { + registers: { + x5: 0x20000en, // t0 - h2 address + x6: 0x200004n, // t1 - b1 address + x7: 0x200006n, // t2 - h1 address + x28: 0xen, // t3 - loaded w1 value + x29: 0x78n, // t4 - loaded b1 value (120) + x30: 0x16n, // t5 - loaded h1 value + }, + memory: { + "0x200003": 0xen, // w1 = 14 + "0x200004": 0x78n, // b1 = 120 + "0x200007": 0x16n, // h1 = 22 + "0x20000b": 0xen, // w2 = copied from w1 + "0x20000c": 0x78n, // b2 = copied from b1 + "0x20000f": 0x16n, // h2 = copied from h1 + }, + display: "", + keyboard: "", + }), ); diff --git a/tests/unit/arch/riscv/example_004.test.mts b/tests/unit/arch/riscv/example_004.test.mts index e3cab9647..fe2bf33ce 100644 --- a/tests/unit/arch/riscv/example_004.test.mts +++ b/tests/unit/arch/riscv/example_004.test.mts @@ -1,43 +1,32 @@ -import { assertEquals } from "https://deno.land/std/assert/mod.ts"; -import { - setupSimulator, - executeN, - cleanupSimulator, - assertSimulatorState, -} from "../simulator-test-utils.mts"; -// This test has been verified with SPIKE -Deno.test( - "Architecture-agnostic testing - RISC-V Double Precision Floating Point Operations", - // eslint-disable-next-line max-lines-per-function - async () => { - const testAssembly = ` +import { assertExecution } from "../simulator-test-utils.mts"; +const testAssembly = ` # # Creator (https://creatorsim.github.io/creator/) # - + .data a: .double 34.544 b: .double 11.443 c: .double 665.4 - + d: .zero 24 - + .text main: - + la x5, a la x6, b la x7, c la x8, d - + fld f0, 0(x5) fld f2, 0(x6) fld f10, 0(x7) fadd.d f0, f0, f0 fsub.d f4, f10, f0 fdiv.d f12, f10, f2 - + fsd f0, 0(x8) addi x8, x8, 8 fsd f4, 0(x8) @@ -47,87 +36,76 @@ main: # exit program li a7, 10 ecall +`; - `; - - const RISCV_ARCH_PATH = "../../../architecture/RISCV/RV32IMFD.yml"; - - // Setup simulator with RISC-V architecture - await setupSimulator(testAssembly, RISCV_ARCH_PATH); - - // Execute the program - const result = executeN(1000); - assertEquals(result.error, false, "Execution should not error"); - - // Assert all expected state using the wrapper function - assertSimulatorState({ - registers: { - x5: 0x200000n, // should contain 0x200000 - x6: 0x200008n, // should contain 0x200008 - x7: 0x200010n, // should contain 0x200010 - x8: 0x200028n, // should contain 0x200028 - f0: 0x405145a1cac08312n, // should contain 0x405145A1CAC08312 - f2: 0x4026e2d0e5604189n, // should contain 0x4026E2D0E5604189 - f4: 0x4082a27ef9db22d1n, // should contain 0x4082A27EF9DB22D1 - f10: 0x4084cb3333333333n, // should contain 0x4084CB3333333333 - f12: 0x404d13154689c3e9n, // should contain 0x404D13154689C3E9 - }, - memory: { - // Original double values in memory - "0x200000": 0x40n, - "0x200001": 0x41n, - "0x200002": 0x45n, - "0x200003": 0xa1n, - "0x200004": 0xcan, - "0x200005": 0xc0n, - "0x200006": 0x83n, - "0x200007": 0x12n, // a: 34.544 - "0x200008": 0x40n, - "0x200009": 0x26n, - "0x20000a": 0xe2n, - "0x20000b": 0xd0n, - "0x20000c": 0xe5n, - "0x20000d": 0x60n, - "0x20000e": 0x41n, - "0x20000f": 0x89n, // b: 11.443 - "0x200010": 0x40n, - "0x200011": 0x84n, - "0x200012": 0xcbn, - "0x200013": 0x33n, - "0x200014": 0x33n, - "0x200015": 0x33n, - "0x200016": 0x33n, - "0x200017": 0x33n, // c: 665.4 - // Results stored by the program - "0x200018": 0x40n, - "0x200019": 0x51n, - "0x20001a": 0x45n, - "0x20001b": 0xa1n, - "0x20001c": 0xcan, - "0x20001d": 0xc0n, - "0x20001e": 0x83n, - "0x20001f": 0x12n, // f0: fadd.d result - "0x200020": 0x40n, - "0x200021": 0x82n, - "0x200022": 0xa2n, - "0x200023": 0x7en, - "0x200024": 0xf9n, - "0x200025": 0xdbn, - "0x200026": 0x22n, - "0x200027": 0xd1n, // f4: fsub.d result - "0x200028": 0x40n, - "0x200029": 0x4dn, - "0x20002a": 0x13n, - "0x20002b": 0x15n, - "0x20002c": 0x46n, - "0x20002d": 0x89n, - "0x20002e": 0xc3n, - "0x20002f": 0xe9n, // f12: fdiv.d result - }, - display: "", // Display buffer should be empty - keyboard: "", // Keyboard buffer should be empty - }); - - cleanupSimulator(); - }, +// This test has been verified with SPIKE +Deno.test( + "Architecture-agnostic testing - RISC-V Double Precision Floating Point Operations", + assertExecution("RISCV/RV32IMFD.yml", testAssembly, { + registers: { + x5: 0x200000n, + x6: 0x200008n, + x7: 0x200010n, + x8: 0x200028n, + f0: 0x405145a1cac08312n, + f2: 0x4026e2d0e5604189n, + f4: 0x4082a27ef9db22d1n, + f10: 0x4084cb3333333333n, + f12: 0x404d13154689c3e9n, + }, + memory: { + // Original double values in memory + "0x200000": 0x40n, + "0x200001": 0x41n, + "0x200002": 0x45n, + "0x200003": 0xa1n, + "0x200004": 0xcan, + "0x200005": 0xc0n, + "0x200006": 0x83n, + "0x200007": 0x12n, // a: 34.544 + "0x200008": 0x40n, + "0x200009": 0x26n, + "0x20000a": 0xe2n, + "0x20000b": 0xd0n, + "0x20000c": 0xe5n, + "0x20000d": 0x60n, + "0x20000e": 0x41n, + "0x20000f": 0x89n, // b: 11.443 + "0x200010": 0x40n, + "0x200011": 0x84n, + "0x200012": 0xcbn, + "0x200013": 0x33n, + "0x200014": 0x33n, + "0x200015": 0x33n, + "0x200016": 0x33n, + "0x200017": 0x33n, // c: 665.4 + // Results stored by the program + "0x200018": 0x40n, + "0x200019": 0x51n, + "0x20001a": 0x45n, + "0x20001b": 0xa1n, + "0x20001c": 0xcan, + "0x20001d": 0xc0n, + "0x20001e": 0x83n, + "0x20001f": 0x12n, // f0: fadd.d result + "0x200020": 0x40n, + "0x200021": 0x82n, + "0x200022": 0xa2n, + "0x200023": 0x7en, + "0x200024": 0xf9n, + "0x200025": 0xdbn, + "0x200026": 0x22n, + "0x200027": 0xd1n, // f4: fsub.d result + "0x200028": 0x40n, + "0x200029": 0x4dn, + "0x20002a": 0x13n, + "0x20002b": 0x15n, + "0x20002c": 0x46n, + "0x20002d": 0x89n, + "0x20002e": 0xc3n, + "0x20002f": 0xe9n, // f12: fdiv.d result + }, + display: "", // Display buffer should be empty + keyboard: "", // Keyboard buffer should be empty + }), ); diff --git a/tests/unit/arch/riscv/example_005.test.mts b/tests/unit/arch/riscv/example_005.test.mts index 959c3b7ff..03aeb701d 100644 --- a/tests/unit/arch/riscv/example_005.test.mts +++ b/tests/unit/arch/riscv/example_005.test.mts @@ -1,16 +1,6 @@ -import { assertEquals } from "https://deno.land/std/assert/mod.ts"; -import { - setupSimulator, - executeN, - cleanupSimulator, - assertSimulatorState, -} from "../simulator-test-utils.mts"; - -Deno.test( - "Architecture-agnostic testing - RISC-V Sum of First 10 Numbers", - async () => { - const testAssembly = ` +import { assertExecution } from "../simulator-test-utils.mts"; +const testAssembly = ` # # Creator (https://creatorsim.github.io/creator/) # @@ -20,12 +10,12 @@ Deno.test( max: .byte 10 .text - main: + main: la t0, max lb t0, 0 (t0) li t1, 0 li a0, 0 - + while: bge t1, t0, end_while add a0, a0, t1 addi t1, t1, 1 @@ -37,29 +27,17 @@ Deno.test( # exit program li a7, 10 ecall +`; - `; - - const RISCV_ARCH_PATH = "../../../architecture/RISCV/RV32IMFD.yml"; - - // Setup simulator with RISC-V architecture - await setupSimulator(testAssembly, RISCV_ARCH_PATH); - - // Execute the program - const result = executeN(1000); - assertEquals(result.error, false, "Execution should not error"); - - // Assert all expected state using the wrapper function - assertSimulatorState({ - registers: { - x5: 0xan, // t0 should contain 0xa (10) - x6: 0xan, // t1 should contain 0xa (10 - loop counter after completion) - x10: 0x2dn, // a0 should contain 0x2d (45 - sum of 0+1+2+...+9) - }, - display: "45", // Display should show '45' - keyboard: "", // Keyboard buffer should be empty - }); - - cleanupSimulator(); - }, +Deno.test( + "Architecture-agnostic testing - RISC-V Sum of First 10 Numbers", + assertExecution("RISCV/RV32IMFD.yml", testAssembly, { + registers: { + x5: 0xan, // t0 should contain 0xa (10) + x6: 0xan, // t1 should contain 0xa (10 - loop counter after completion) + x10: 0x2dn, // a0 should contain 0x2d (45 - sum of 0+1+2+...+9) + }, + display: "45", // Display should show '45' + keyboard: "", // Keyboard buffer should be empty + }), ); diff --git a/tests/unit/arch/riscv/example_006.test.mts b/tests/unit/arch/riscv/example_006.test.mts index 6b6d93d9f..a83ea0a76 100644 --- a/tests/unit/arch/riscv/example_006.test.mts +++ b/tests/unit/arch/riscv/example_006.test.mts @@ -1,16 +1,6 @@ -import { assertEquals } from "https://deno.land/std/assert/mod.ts"; -import { - setupSimulator, - executeN, - cleanupSimulator, - assertSimulatorState, -} from "../simulator-test-utils.mts"; - -Deno.test( - "Architecture-agnostic testing - RISC-V Branch and Jump Operations", - async () => { - const testAssembly = ` +import { assertExecution } from "../simulator-test-utils.mts"; +const testAssembly = ` # # Creator (https://creatorsim.github.io/creator/) # @@ -22,8 +12,8 @@ Deno.test( li t1, 2 li t3, 5 bge t3, t0, jump1 - - jump2: + + jump2: li t3, 34 li a7, 10 ecall @@ -36,32 +26,20 @@ Deno.test( # exit program li a7, 10 ecall - `; - const RISCV_ARCH_PATH = "../../../architecture/RISCV/RV32IMFD.yml"; - - // Setup simulator with RISC-V architecture - await setupSimulator(testAssembly, RISCV_ARCH_PATH); - - // Execute the program - const result = executeN(1000); - assertEquals(result.error, false, "Execution should not error"); - - // Assert all expected state using the wrapper function - assertSimulatorState({ - registers: { - x5: 0x4n, // t0 should contain 0x4 - x6: 0x2n, // t1 should contain 0x2 - x17: 0xan, // a7 should contain 0xa (syscall 10 - exit) - x28: 0x22n, // t3 should contain 0x22 (34 in decimal) - x29: 0xbn, // t4 should contain 0xb (11 in decimal) - x30: 0x22bn, // t5 should contain 0x22b (555 in decimal) - }, - display: "", // Display buffer should be empty - keyboard: "", // Keyboard buffer should be empty - }); - - cleanupSimulator(); - }, +Deno.test( + "Architecture-agnostic testing - RISC-V Branch and Jump Operations", + assertExecution("RISCV/RV32IMFD.yml", testAssembly, { + registers: { + x5: 0x4n, // t0 should contain 0x4 + x6: 0x2n, // t1 should contain 0x2 + x17: 0xan, // a7 should contain 0xa (syscall 10 - exit) + x28: 0x22n, // t3 should contain 0x22 (34 in decimal) + x29: 0xbn, // t4 should contain 0xb (11 in decimal) + x30: 0x22bn, // t5 should contain 0x22b (555 in decimal) + }, + display: "", // Display buffer should be empty + keyboard: "", // Keyboard buffer should be empty + }), ); diff --git a/tests/unit/arch/riscv/example_007.test.mts b/tests/unit/arch/riscv/example_007.test.mts index e3be55599..e38dd8f02 100644 --- a/tests/unit/arch/riscv/example_007.test.mts +++ b/tests/unit/arch/riscv/example_007.test.mts @@ -1,14 +1,6 @@ -import { assertEquals } from "https://deno.land/std/assert/mod.ts"; -import { - setupSimulator, - executeN, - cleanupSimulator, - assertSimulatorState, -} from "../simulator-test-utils.mts"; - -Deno.test("Architecture-agnostic testing - RISC-V Array Sum Loop", async () => { - const testAssembly = ` +import { assertExecution } from "../simulator-test-utils.mts"; +const testAssembly = ` # # Creator (https://creatorsim.github.io/creator/) # @@ -42,24 +34,15 @@ loop1: beq t1, t2, end1 # if(t1 == t2) --> jump to fin1 beq x0, x0, loop1 # loop end -end1: +end1: # exit program li a7, 10 ecall +`; - `; - - const RISCV_ARCH_PATH = "../../../architecture/RISCV/RV32IMFD.yml"; - - // Setup simulator with RISC-V architecture - await setupSimulator(testAssembly, RISCV_ARCH_PATH); - - // Execute the program - const result = executeN(1000); - assertEquals(result.error, false, "Execution should not error"); - - // Assert all expected state using the wrapper function - assertSimulatorState({ +Deno.test( + "Architecture-agnostic testing - RISC-V Array Sum Loop", + assertExecution("RISCV/RV32IMFD.yml", testAssembly, { registers: { x5: 0xfn, // t0 should contain 0xf (15 - sum of 1+2+3+4+5) x6: 0x5n, // t1 should contain 0x5 (loop counter after completion) @@ -71,7 +54,5 @@ end1: }, display: "", // Display buffer should be empty keyboard: "", // Keyboard buffer should be empty - }); - - cleanupSimulator(); -}); + }), +); diff --git a/tests/unit/arch/riscv/example_008.test.mts b/tests/unit/arch/riscv/example_008.test.mts index 2f497014f..2d56fbf31 100644 --- a/tests/unit/arch/riscv/example_008.test.mts +++ b/tests/unit/arch/riscv/example_008.test.mts @@ -1,17 +1,6 @@ -import { assertEquals } from "https://deno.land/std/assert/mod.ts"; -import { - setupSimulator, - executeN, - cleanupSimulator, - assertSimulatorState, -} from "../simulator-test-utils.mts"; - -Deno.test( - "Architecture-agnostic testing - RISC-V Matrix Copy with Floating Point", - - async () => { - const testAssembly = ` +import { assertExecution } from "../simulator-test-utils.mts"; +const testAssembly = ` # # Creator (https://creatorsim.github.io/creator/) # @@ -37,7 +26,7 @@ main: li t3, 4 add t4, zero, zero add t5, zero, zero - + loop1: beq t2, t4, end1 loop2: beq t3, t5, end2 flw f0, 0(t0) @@ -49,43 +38,32 @@ loop2: beq t3, t5, end2 end2: addi t4, t4, 1 add t5, zero, zero beq x0, x0, loop1 -end1: +end1: # exit program li a7, 10 ecall +`; - - `; - const RISCV_ARCH_PATH = "../../../architecture/RISCV/RV32IMFD.yml"; - // Setup simulator with RISC-V architecture - await setupSimulator(testAssembly, RISCV_ARCH_PATH); - - // Execute the program - const result = executeN(1000); - assertEquals(result.error, false, "Execution should not error"); - - // Assert all expected state using the wrapper function - assertSimulatorState({ - registers: { - x5: 0x200040n, - x6: 0x200080n, - x7: 0x4n, - x28: 0x4n, - x29: 0x4n, - f0: 0xffffffff33441124n, - }, - memory: { - "0x20007f": 0x24n, - "0x20007e": 0x11n, - "0x20007d": 0x44n, - "0x20007c": 0x33n, - "0x200040": 0x34n, - "0x200044": 0x34n, - "0x200048": 0x34n, - "0x20004c": 0x34n, - }, - }); - - cleanupSimulator(); - }, +Deno.test( + "Architecture-agnostic testing - RISC-V Matrix Copy with Floating Point", + assertExecution("RISCV/RV32IMFD.yml", testAssembly, { + registers: { + x5: 0x200040n, + x6: 0x200080n, + x7: 0x4n, + x28: 0x4n, + x29: 0x4n, + f0: 0xffffffff33441124n, + }, + memory: { + "0x20007f": 0x24n, + "0x20007e": 0x11n, + "0x20007d": 0x44n, + "0x20007c": 0x33n, + "0x200040": 0x34n, + "0x200044": 0x34n, + "0x200048": 0x34n, + "0x20004c": 0x34n, + }, + }), ); diff --git a/tests/unit/arch/riscv/example_011.test.mts b/tests/unit/arch/riscv/example_011.test.mts index 0689f843f..05d817460 100644 --- a/tests/unit/arch/riscv/example_011.test.mts +++ b/tests/unit/arch/riscv/example_011.test.mts @@ -1,16 +1,6 @@ -import { assertEquals } from "https://deno.land/std/assert/mod.ts"; -import { - setupSimulator, - executeN, - cleanupSimulator, - assertSimulatorState, -} from "../simulator-test-utils.mts"; - -Deno.test( - "Architecture-agnostic testing - RISC-V Function Calls and Stack Operations", - async () => { - const testAssembly = ` +import { assertExecution } from "../simulator-test-utils.mts"; +const testAssembly = ` # # Creator (https://creatorsim.github.io/creator/) # @@ -40,36 +30,24 @@ sum: add t2, a2, a2 add a0, t1, zero add a1, t2, zero - jr ra + jr ra sub: sub a0, a0, a1 jr ra +`; - `; - - const RISCV_ARCH_PATH = "../../../architecture/RISCV/RV32IMFD.yml"; - - // Setup simulator with RISC-V architecture - await setupSimulator(testAssembly, RISCV_ARCH_PATH); - - // Execute the program - const result = executeN(1000); - assertEquals(result.error, false, "Execution should not error"); - - // Assert all expected state using the wrapper function - assertSimulatorState({ - registers: { - x6: 0xffffffcan, // t1 should contain 0xffffffca (-54 in 2's complement) - x7: 0x5an, // t2 should contain 0x5a (90 in decimal) - x10: 0xffffff70n, // a0 should contain 0xffffff70 (-144 in 2's complement) - x11: 0x5an, // a1 should contain 0x5a (90 in decimal) - x12: 0x2dn, // a2 should contain 0x2d (45 in decimal) - }, - display: "-144", // Display should show '-144' - keyboard: "", // Keyboard buffer should be empty - }); - - cleanupSimulator(); - }, +Deno.test( + "Architecture-agnostic testing - RISC-V Function Calls and Stack Operations", + assertExecution("RISCV/RV32IMFD.yml", testAssembly, { + registers: { + x6: 0xffffffcan, // t1 should contain 0xffffffca (-54 in 2's complement) + x7: 0x5an, // t2 should contain 0x5a (90 in decimal) + x10: 0xffffff70n, // a0 should contain 0xffffff70 (-144 in 2's complement) + x11: 0x5an, // a1 should contain 0x5a (90 in decimal) + x12: 0x2dn, // a2 should contain 0x2d (45 in decimal) + }, + display: "-144", // Display should show '-144' + keyboard: "", // Keyboard buffer should be empty + }), ); diff --git a/tests/unit/arch/riscv/example_012.test.mts b/tests/unit/arch/riscv/example_012.test.mts index 05ba77ebc..d706f4565 100644 --- a/tests/unit/arch/riscv/example_012.test.mts +++ b/tests/unit/arch/riscv/example_012.test.mts @@ -1,17 +1,6 @@ -import { assertEquals } from "https://deno.land/std/assert/mod.ts"; -import { - setupSimulator, - executeN, - cleanupSimulator, - assertSimulatorState, -} from "../simulator-test-utils.mts"; - -Deno.test( - "Architecture-agnostic testing - RISC-V Recursive Factorial Function", - - async () => { - const testAssembly = ` +import { assertExecution } from "../simulator-test-utils.mts"; +const testAssembly = ` # # ARCOS.INF.UC3M.ES # BY-NC-SA (https://creativecommons.org/licenses/by-nc-sa/4.0/deed.es) @@ -20,7 +9,7 @@ Deno.test( .text - main: + main: addi sp, sp, -4 sw ra, 0(sp) @@ -51,7 +40,7 @@ factorial: # return 1 li x5, 2 bge a0, t0, b_else - li a0, 1 + li a0, 1 beq x0, x0, b_efs # else: # return a0 * factorial(a0 - 1) @@ -68,29 +57,17 @@ factorial: # return t0 jr ra +`; - `; - - const RISCV_ARCH_PATH = "../../../architecture/RISCV/RV32IMFD.yml"; - - // Setup simulator with RISC-V architecture - await setupSimulator(testAssembly, RISCV_ARCH_PATH); - - // Execute the program - const result = executeN(1000); - assertEquals(result.error, false, "Execution should not error"); - - // Assert all expected state using the wrapper function - assertSimulatorState({ - registers: { - x5: 0x2n, // t0 should contain 0x2 (comparison value) - x6: 0x5n, // t1 should contain 0x5 (last factorial parameter) - x10: 0x78n, // a0 should contain 0x78 (120 - factorial of 5) - }, - display: "120", // Display should show '120' (5! = 120) - keyboard: "", // Keyboard buffer should be empty - }); - - cleanupSimulator(); - }, +Deno.test( + "Architecture-agnostic testing - RISC-V Recursive Factorial Function", + assertExecution("RISCV/RV32IMFD.yml", testAssembly, { + registers: { + x5: 0x2n, // t0 should contain 0x2 (comparison value) + x6: 0x5n, // t1 should contain 0x5 (last factorial parameter) + x10: 0x78n, // a0 should contain 0x78 (120 - factorial of 5) + }, + display: "120", // Display should show '120' (5! = 120) + keyboard: "", // Keyboard buffer should be empty + }), ); diff --git a/tests/unit/arch/riscv/example_013.test.mts b/tests/unit/arch/riscv/example_013.test.mts index 800807de9..97f35b69e 100644 --- a/tests/unit/arch/riscv/example_013.test.mts +++ b/tests/unit/arch/riscv/example_013.test.mts @@ -7,11 +7,7 @@ import { } from "../simulator-test-utils.mts"; import * as creator from "@/core/core.mjs"; -Deno.test( - "Architecture-agnostic testing - RISC-V Nested Function Calls with Stack", - // eslint-disable-next-line max-lines-per-function - async () => { - const testAssembly = ` +const testAssembly = ` # # Creator (https://creatorsim.github.io/creator/) # @@ -30,13 +26,13 @@ main: li a0, 23 li a1, -77 li a2, 45 - + # Call the first level function (starts the nested calls) jal ra, level1 - + # Store result mv s0, a0 - + # Print result li a7, 1 ecall @@ -59,16 +55,16 @@ level1: sw s0, 8(sp) sw a0, 4(sp) # Save argument a0 sw a1, 0(sp) # Save argument a1 - + # Save arguments in saved registers mv s0, a0 - + # Call level2 jal ra, level2 - + # Add original a0 to result add a0, a0, s0 - + # Restore registers and return lw a1, 0(sp) lw s0, 8(sp) @@ -83,14 +79,14 @@ level2: sw ra, 8(sp) sw a1, 4(sp) sw a2, 0(sp) - + # Call level3 jal ra, level3 - + # Add original a2 to result lw t0, 0(sp) add a0, a0, t0 - + # Restore and return lw a1, 4(sp) lw ra, 8(sp) @@ -103,14 +99,14 @@ level3: addi sp, sp, -8 sw ra, 4(sp) sw a1, 0(sp) - + # First call the original sum function jal ra, sum - + # Then call sub with result from sum lw a1, 0(sp) jal ra, sub - + # Restore and return lw ra, 4(sp) addi sp, sp, 8 @@ -122,14 +118,16 @@ sum: add t2, a2, a2 add a0, t1, zero add a1, t2, zero - jr ra + jr ra sub: sub a0, a0, a1 jr ra +`; - `; - +Deno.test( + "Architecture-agnostic testing - RISC-V Nested Function Calls with Stack", + async () => { const RISCV_ARCH_PATH = "../../../architecture/RISCV/RV32IMFD.yml"; // Setup simulator with RISC-V architecture diff --git a/tests/unit/arch/riscv/floating_point_demo.test.mts b/tests/unit/arch/riscv/floating_point_demo.test.mts index 19306a1b3..a26e88474 100644 --- a/tests/unit/arch/riscv/floating_point_demo.test.mts +++ b/tests/unit/arch/riscv/floating_point_demo.test.mts @@ -12,27 +12,27 @@ const FLOATING_POINT_DEMO_ASSEMBLY = ` pi: .float 3.14159265 e: .float 2.71828183 radius: .float 5.0 - + .text main: # Load floating point constants la t0, pi flw f0, 0(t0) # f0 = pi - + la t0, e flw f1, 0(t0) # f1 = e - + la t0, radius flw f2, 0(t0) # f2 = radius (5.0) - + # Mathematical operations fadd.s f3, f0, f1 # f3 = pi + e fmul.s f4, f0, f1 # f4 = pi * e - + # Circle area calculation: area = pi * radius^2 fmul.s f5, f2, f2 # f5 = radius^2 fmul.s f6, f0, f5 # f6 = pi * radius^2 - + # exit program li a7, 10 ecall diff --git a/tests/unit/arch/simulator-test-utils.mts b/tests/unit/arch/simulator-test-utils.mts index d05ed3891..d80726f54 100644 --- a/tests/unit/arch/simulator-test-utils.mts +++ b/tests/unit/arch/simulator-test-utils.mts @@ -384,3 +384,28 @@ export function assertSimulatorState( ); } } + +/** + * Verifies the execution of an assembly code + * @param arch - Architecture file to use + * @param code - Assembly code to execute + * @param expected - Object containing expected values for registers, memory, display, and keyboard + */ +export function assertExecution( + arch: string, + code: string, + expected: ExpectedState, +): () => Promise { + return async () => { + const ARCH_PATH = "../../../architecture/" + arch; + await setupSimulator(code, ARCH_PATH); + const result = executeN(1000); + assertEquals( + result.error, + false, + `Execution should not error. ${result.output}`, + ); + assertSimulatorState(expected) + cleanupSimulator(); + } +} From 9d4b204c6beedf5bf43b0b266296ae5e019e3234 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Sat, 7 Mar 2026 14:23:47 +0100 Subject: [PATCH 02/85] tests(arch): add execution entry point test --- .../unit/arch/riscv/entry_point_demo.test.mts | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 tests/unit/arch/riscv/entry_point_demo.test.mts diff --git a/tests/unit/arch/riscv/entry_point_demo.test.mts b/tests/unit/arch/riscv/entry_point_demo.test.mts new file mode 100644 index 000000000..b437645a1 --- /dev/null +++ b/tests/unit/arch/riscv/entry_point_demo.test.mts @@ -0,0 +1,41 @@ +import { assertExecution } from "../simulator-test-utils.mts"; + +const testAssembly = ` +# +# Creator (https://creatorsim.github.io/creator/) +# +.text + foo: + # Not executed + addi t0, x0, 1 + addi t1, x0, 2 + addi t2, x0, 3 + addi t3, x0, 4 + addi t4, x0, 5 + main: + # Start of the program + addi t0, t0, 5 + addi t1, t1, 5 + addi t2, t2, 5 + addi t3, t3, 5 + addi t4, t4, 5 + + # exit program + li a7, 10 + ecall +`; + +Deno.test( + "Architecture-agnostic testing - RISC-V Execution entry point", + assertExecution("RISCV/RV32IMFD.yml", testAssembly, { + registers: { + t0: 5n, + t1: 5n, + t2: 5n, + t3: 5n, + t4: 5n, + }, + display: "", + keyboard: "", + }), +); From 9ddf6cb7541b5974c62ad692f1c5059b5cd4ac10 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Sun, 8 Mar 2026 14:51:16 +0100 Subject: [PATCH 03/85] fix: fix remaining usages of single label elements --- src/cli/commands/instructions.mts | 8 ++--- src/cli/commands/memory.mts | 6 ++-- src/cli/types.mts | 2 +- src/core/assembler/assembler.d.ts | 2 +- .../creatorAssembler/creatorAssemblerBase.mjs | 9 ++---- src/core/assembler/rasm/deno/rasm.mjs | 2 +- src/core/assembler/rasm/web/rasm.mjs | 2 +- .../assembler/sjasmplus/deno/sjasmplus.mjs | 2 +- src/core/capi/memory.mts | 4 +-- src/core/memory/Memory.mts | 29 ++++++++++--------- src/rpc/server.mts | 26 ++++++++--------- src/web/components/assembly/SaveLibrary.vue | 18 +++++++----- src/web/components/simulator/HexViewer.vue | 4 +-- .../components/simulator/TableExecution.vue | 2 +- 14 files changed, 58 insertions(+), 58 deletions(-) diff --git a/src/cli/commands/instructions.mts b/src/cli/commands/instructions.mts index 7ba9e72ad..1df840f8e 100644 --- a/src/cli/commands/instructions.mts +++ b/src/cli/commands/instructions.mts @@ -50,7 +50,7 @@ function displayInstruction( hideLibrary = false, ): void { const address = instr.Address.padEnd(8); - const label = (instr.Label || "").padEnd(11); + const label = instr.Label.join(",").padEnd(11); let loaded = (instr.loaded || "").padEnd(23); const loadedIsBinary = /^[01]+$/.test(loaded); const rightColumn = instr.user || ""; @@ -117,7 +117,7 @@ export function findInstructionByAddressOrLabel( address = userInput.toLowerCase(); } else { const labelMatch = instructions.find( - instr => instr.Label === userInput, + instr => instr.Label.includes(userInput), ); if (labelMatch) { @@ -159,7 +159,7 @@ export function toggleBreakpoint(index: number): void { console.log( `Breakpoint ${status} at ${instr!.Address}${ - instr!.Label ? ` (${instr!.Label})` : "" + instr!.Label.length > 0 ? ` (${instr!.Label.join(",")})` : "" }: ${instr!.loaded}`, ); } @@ -179,7 +179,7 @@ function listBreakpoints(): void { for (const bp of breakpoints) { console.log( - ` ${bp.Address}${bp.Label ? ` (${bp.Label})` : ""}: ${bp.loaded}`, + ` ${bp.Address}${bp.Label.length > 0 ? ` (${bp.Label.join(",")})` : ""}: ${bp.loaded}`, ); } } diff --git a/src/cli/commands/memory.mts b/src/cli/commands/memory.mts index 48d4d1a88..25f218727 100644 --- a/src/cli/commands/memory.mts +++ b/src/cli/commands/memory.mts @@ -68,7 +68,7 @@ function displayMemory(address: number, count: number): void { const formattedAddr = `0x${currentAddr.toString(16).padStart(8, "0")}`; const hintsInRange: Array<{ - hint: { tag: string; type: string; sizeInBits?: number }; + hint: { tag: string[]; type: string; sizeInBits?: number }; offset: number; }> = []; for (let j = 0; j < wordSize; j++) { @@ -95,8 +95,8 @@ function displayMemory(address: number, count: number): void { const colors = getHintColors(); for (let k = 0; k < hintsInRange.length; k++) { - const { hint, offset } = hintsInRange[k]; - const tag = hint.tag || ""; + const { hint, offset } = hintsInRange[k]!; + const tag = hint.tag.join(","); const type = hint.type || ""; const shortHint = type && tag ? `${tag}:${type}` : type || tag; const sizeInfo = hint.sizeInBits diff --git a/src/cli/types.mts b/src/cli/types.mts index cbe69b2f8..37b0a1b15 100644 --- a/src/cli/types.mts +++ b/src/cli/types.mts @@ -61,7 +61,7 @@ export interface ReturnType { */ export interface Instruction { Address: string; - Label: string | null; + Label: string[]; loaded: string; user: string; Break: boolean | null; diff --git a/src/core/assembler/assembler.d.ts b/src/core/assembler/assembler.d.ts index eebd4e3d6..94c0ccb85 100644 --- a/src/core/assembler/assembler.d.ts +++ b/src/core/assembler/assembler.d.ts @@ -1,7 +1,7 @@ type Instruction = { Address: string; Break: boolean | null; - Label: string; + Label: string[]; binary: string; hide: boolean; loaded: string; diff --git a/src/core/assembler/creatorAssembler/creatorAssemblerBase.mjs b/src/core/assembler/creatorAssembler/creatorAssemblerBase.mjs index 479a06e3a..1a185f813 100644 --- a/src/core/assembler/creatorAssembler/creatorAssemblerBase.mjs +++ b/src/core/assembler/creatorAssembler/creatorAssemblerBase.mjs @@ -548,12 +548,9 @@ export function assembleCreatorLibrary(code, wasmModules) { // Mark global labels on library instructions for (const instruction of libraryInstructions) { - if (instruction.Label !== "") { - if (label_table[instruction.Label].global === true) { - instruction.globl = true; - } else { - instruction.Label = ""; - } + instruction.Label = instruction.Label.filter(label => label_table[label].global); + if (instruction.Label.length > 0) { + instruction.globl = true; } } diff --git a/src/core/assembler/rasm/deno/rasm.mjs b/src/core/assembler/rasm/deno/rasm.mjs index 8f6699093..e41e7a926 100644 --- a/src/core/assembler/rasm/deno/rasm.mjs +++ b/src/core/assembler/rasm/deno/rasm.mjs @@ -126,7 +126,7 @@ export function rasmAssemble(code) { // Add hints to memory based on the parsed labels for (const [name, addr] of Object.entries(parsedSymbols)) { - main_memory.addHint(addr, name); + main_memory.addHint(addr, [name]); } // Set the tag instructions for the parsed symbols diff --git a/src/core/assembler/rasm/web/rasm.mjs b/src/core/assembler/rasm/web/rasm.mjs index f1190bb74..04fd01ba8 100644 --- a/src/core/assembler/rasm/web/rasm.mjs +++ b/src/core/assembler/rasm/web/rasm.mjs @@ -205,7 +205,7 @@ export async function rasmAssemble(code) { // Add hints to memory based on the parsed labels for (const [name, addr] of Object.entries(parsedSymbols)) { - main_memory.addHint(addr, name); + main_memory.addHint(addr, [name]); } // Set the tag instructions for the parsed symbols diff --git a/src/core/assembler/sjasmplus/deno/sjasmplus.mjs b/src/core/assembler/sjasmplus/deno/sjasmplus.mjs index 430bdd2c4..66ad4d0da 100644 --- a/src/core/assembler/sjasmplus/deno/sjasmplus.mjs +++ b/src/core/assembler/sjasmplus/deno/sjasmplus.mjs @@ -84,7 +84,7 @@ export function sjasmplusAssemble(code) { // Now add hints to memory based on the parsed symbols (its a dictionary) for (const [name, addr] of Object.entries(parsedSymbols)) { - main_memory.addHint(addr, name); + main_memory.addHint(addr, [name]); } // Clean up temp files diff --git a/src/core/capi/memory.mts b/src/core/capi/memory.mts index ef5ef4b38..5bb05d884 100644 --- a/src/core/capi/memory.mts +++ b/src/core/capi/memory.mts @@ -226,7 +226,7 @@ export const MEM = { if (hint) { try { const sizeInBits = bytes * BYTESIZE; - memory.addHint(BigInt(address), "", hint, sizeInBits); + memory.addHint(BigInt(address), [], hint, sizeInBits); } catch (e) { raise( "Failed to add hint for address '0x" + @@ -341,7 +341,7 @@ export const MEM = { : devices.get(deviceID)!.memory; try { - memory.addHint(address, "", hint, sizeInBits); + memory.addHint(address, [], hint, sizeInBits); return true; } catch (e) { raise( diff --git a/src/core/memory/Memory.mts b/src/core/memory/Memory.mts index d690075cc..7e92bde06 100644 --- a/src/core/memory/Memory.mts +++ b/src/core/memory/Memory.mts @@ -663,7 +663,7 @@ export class Memory { * const memory = new Memory({ sizeInBytes: 1000000 }); * memory.write(100n, 123); * memory.write(50000n, 456); - * memory.addHint(100n, "int32", 32); + * memory.addHint(100n, [], "int32", 32); * * const snapshot = memory.dump(); // Only contains 2 entries, not 1M, plus hints * memory.restore(snapshot); @@ -720,7 +720,7 @@ export class Memory { * @example Restoring memory state * ```typescript * const memory = new Memory({ sizeInBytes: 100000, bitsPerByte: 8 }); - * memory.addHint(0x100n, "int32", 32); + * memory.addHint(0x100n, [], "int32", 32); * const snapshot = memory.dump(); * // ... modify memory ... * memory.restore(snapshot); // Back to original state with hints @@ -1332,9 +1332,10 @@ export class Memory { * @example Adding hints * ```typescript * const memory = new Memory({ sizeInBytes: 1024 }); - * memory.addHint(0x100n, "", "double", 64); // No tag, just type - * memory.addHint(0x200n, "myVar", "int32", 32); - * memory.addHint(0x300n, "myString", "string"); // No size specified + * memory.addHint(0x100n, [], "double", 64); // No tag, just type + * memory.addHint(0x200n, ["myVar"], "int32", 32); + * memory.addHint(0x300n, ["myString"], "string"); // No size specified + * memory.addHint(0x400n, ["foo", "bar"], "int32", 32); // Multiple tags * ``` */ addHint( @@ -1370,7 +1371,7 @@ export class Memory { * @example Removing hints * ```typescript * const memory = new Memory({ sizeInBytes: 1024 }); - * memory.addHint(0x100n, "double", 64); + * memory.addHint(0x100n, [], "double", 64); * const removed = memory.removeHint(0x100n); // true * const notFound = memory.removeHint(0x200n); // false * ``` @@ -1388,7 +1389,7 @@ export class Memory { * @example Getting hints * ```typescript * const memory = new Memory({ sizeInBytes: 1024 }); - * memory.addHint(0x100n, "double", 64); + * memory.addHint(0x100n, [], "double", 64); * * const hint = memory.getHint(0x100n); * if (hint) { @@ -1411,8 +1412,8 @@ export class Memory { * @example Getting all hints * ```typescript * const memory = new Memory({ sizeInBytes: 1024 }); - * memory.addHint(0x200n, "int32", 32); - * memory.addHint(0x100n, "double", 64); + * memory.addHint(0x200n, [], "int32", 32); + * memory.addHint(0x100n, [], "double", 64); * * const hints = memory.getAllHints(); * for (const hint of hints) { @@ -1439,8 +1440,8 @@ export class Memory { * @example Clearing hints * ```typescript * const memory = new Memory({ sizeInBytes: 1024 }); - * memory.addHint(0x100n, "double", 64); - * memory.addHint(0x200n, "int32", 32); + * memory.addHint(0x100n, [], "double", 64); + * memory.addHint(0x200n, [], "int32", 32); * * console.log(memory.getAllHints().length); // 2 * memory.clearHints(); @@ -1478,9 +1479,9 @@ export class Memory { * @example Getting hints in range * ```typescript * const memory = new Memory({ sizeInBytes: 1024 }); - * memory.addHint(0x100n, "double", 64); - * memory.addHint(0x200n, "int32", 32); - * memory.addHint(0x300n, "string"); + * memory.addHint(0x100n, [], "double", 64); + * memory.addHint(0x200n, [], "int32", 32); + * memory.addHint(0x300n, [], "string"); * * const hintsInRange = memory.getHintsInRange(0x150n, 0x250n); * console.log(hintsInRange.length); // 1 (only the int32 at 0x200) diff --git a/src/rpc/server.mts b/src/rpc/server.mts index ae73d9ea5..848a619c2 100644 --- a/src/rpc/server.mts +++ b/src/rpc/server.mts @@ -84,7 +84,7 @@ interface EmulatorState { }; instructions: Array<{ address: string; - label?: string; + label: string[]; asm: string; machineCode: string; }>; @@ -597,13 +597,13 @@ class CreatorRpcServer { baseAddress: bigint, wordSize: number, ): Array<{ - tag: string; + tag: string[]; type: string; offset: number; sizeInBits?: number; }> { const hints: Array<{ - tag: string; + tag: string[]; type: string; offset: number; sizeInBits?: number; @@ -730,7 +730,7 @@ class CreatorRpcServer { // Get instruction list with better debugging info const instructionList = instructions.map((instr, index) => ({ address: instr.Address, - label: instr.Label || "", + label: instr.Label, asm: instr.loaded || instr.user || "", machineCode: instr.binary || instr.loaded || "", instructionIndex: index, @@ -767,7 +767,7 @@ class CreatorRpcServer { currentInstruction?: { index: number; address: string; - label?: string; + label: string[]; asm: string; machineCode: string; isBreakpoint?: boolean; @@ -775,7 +775,7 @@ class CreatorRpcServer { nextInstruction?: { index: number; address: string; - label?: string; + label: string[]; asm: string; machineCode: string; }; @@ -824,7 +824,7 @@ class CreatorRpcServer { currentInstruction = { index: i, address: instr.Address, - label: instr.Label || undefined, + label: instr.Label, asm: instr.loaded || instr.user || "", machineCode: instr.binary || instr.loaded || "", isBreakpoint: instr.Break === true, @@ -836,7 +836,7 @@ class CreatorRpcServer { nextInstruction = { index: i + 1, address: nextInstr.Address, - label: nextInstr.Label || undefined, + label: nextInstr.Label, asm: nextInstr.loaded || nextInstr.user || "", machineCode: nextInstr.binary || nextInstr.loaded || "", @@ -877,7 +877,7 @@ class CreatorRpcServer { }): Promise<{ index: number; address: string; - label?: string; + label: string[]; asm: string; machineCode: string; visible: boolean; @@ -918,7 +918,7 @@ class CreatorRpcServer { return { index, address: instruction.Address, - label: instruction.Label || undefined, + label: instruction.Label, asm: instruction.loaded || instruction.user || "", machineCode: instruction.binary || instruction.loaded || "", visible: instruction.visible !== false, @@ -980,7 +980,7 @@ class CreatorRpcServer { instruction: { index, address: instruction.Address, - label: instruction.Label || undefined, + label: instruction.Label, asm: instruction.loaded || instruction.user || "", machineCode: instruction.binary || instruction.loaded || "", isBreakpoint: instruction.Break === true, @@ -1001,7 +1001,7 @@ class CreatorRpcServer { Array<{ index: number; address: string; - label?: string; + label?: string[]; asm: string; machineCode: string; visible: boolean; @@ -1024,7 +1024,7 @@ class CreatorRpcServer { return instructions.map((instr, index) => ({ index, address: instr.Address, - label: instr.Label || undefined, + label: instr.Label, asm: instr.loaded || instr.user || "", user: instr.user || "", loaded: instr.loaded || "", diff --git a/src/web/components/assembly/SaveLibrary.vue b/src/web/components/assembly/SaveLibrary.vue index a564efd44..2441418c5 100644 --- a/src/web/components/assembly/SaveLibrary.vue +++ b/src/web/components/assembly/SaveLibrary.vue @@ -91,10 +91,11 @@ export default defineComponent({ } // Check for main symbol (not allowed in libraries) + const main = architecture.config.main_function; for (const instruction of libraryInstructions) { - if (instruction.Label === "main") { + if (instruction.Label.includes(main)) { show_notification( - 'You cannot use the "main" label in a library', + `You cannot use the "${main}" label in a library`, "danger", ); return false; @@ -114,16 +115,17 @@ export default defineComponent({ // Add symbol if instruction has a global label if ( - instruction.Label && - instruction.Label !== "" && + instruction.Label.length > 0 && instruction.globl === true ) { const addr = parseInt(instruction.Address, 16); - symbols.push({ - name: instruction.Label, - addr, - }); + for (const label of instruction.Label) { + symbols.push({ + name: label, + addr, + }); + } } } diff --git a/src/web/components/simulator/HexViewer.vue b/src/web/components/simulator/HexViewer.vue index 47f18c2d0..ec280ce99 100644 --- a/src/web/components/simulator/HexViewer.vue +++ b/src/web/components/simulator/HexViewer.vue @@ -536,7 +536,7 @@ export default defineComponent({ // Add hint for this instruction hints.push({ address: addr.toString(), - tag: instruction.loaded || instruction.user, + tag: [instruction.loaded || instruction.user], type: "instruction", sizeInBits: instructionSizeInBits, }); @@ -603,7 +603,7 @@ export default defineComponent({ for (let i = 0; i < sizeInBytes; i++) { this.hintMap.set(address + i, { - tag: typeof hint.tag === "string" ? hint.tag : hint.tag.join(", "), + tag: hint.tag.join(", "), type: hint.type, sizeInBits: hint.sizeInBits, colorIndex: hintColorIndex, diff --git a/src/web/components/simulator/TableExecution.vue b/src/web/components/simulator/TableExecution.vue index 771ea9394..9ccd8863a 100644 --- a/src/web/components/simulator/TableExecution.vue +++ b/src/web/components/simulator/TableExecution.vue @@ -211,7 +211,7 @@ export default {   {{ row.item.Address }} Date: Sun, 8 Mar 2026 14:52:31 +0100 Subject: [PATCH 04/85] refactor(memory): refactor duplicate get written addresses code --- src/core/memory/Memory.mts | 41 +++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/src/core/memory/Memory.mts b/src/core/memory/Memory.mts index 7e92bde06..3e8511d4a 100644 --- a/src/core/memory/Memory.mts +++ b/src/core/memory/Memory.mts @@ -627,13 +627,29 @@ export class Memory { } /** - * Returns the addresses that have been written + * Returns an array of all addresses that have been written to. + * + * @returns Array of written addresses (number), sorted in ascending order. + * + * @example + * ```typescript + * const memory = new Memory({ sizeInBytes: 100 }); + * memory.write(5n, 123); + * memory.write(10n, 255); + * const written = memory.getWrittenAddresses(); // [5, 10] + * ``` + */ + getWrittenAddresses(): number[] { + // Sort addresses to ensure consistent output + return Array.from(this.writtenAddresses).sort((a, b) => a - b); + } + + /** + * Returns the addresses that have been written to, along with their value */ getWritten(): Array<{ addr: number; value: number }> { return ( - Array.from(this.writtenAddresses) - // Sort addresses to ensure consistent output - .sort((a, b) => a - b) + this.getWrittenAddresses() .map((addr, _i, _arr) => ({ addr, value: this.read(BigInt(addr)), @@ -1452,23 +1468,6 @@ export class Memory { this.hints.clear(); } - /** - * Returns an array of all addresses that have been written to. - * - * @returns Array of written addresses (number), sorted in ascending order. - * - * @example - * ```typescript - * const memory = new Memory({ sizeInBytes: 100 }); - * memory.write(5n, 123); - * memory.write(10n, 255); - * const written = memory.getWrittenAddresses(); // [5, 10] - * ``` - */ - getWrittenAddresses(): number[] { - return Array.from(this.writtenAddresses).sort((a, b) => a - b); - } - /** * Gets hints within a specified address range. * From 9becfb71c622ce74cd181e08819d8f5ce4c159fe Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Sun, 8 Mar 2026 14:53:19 +0100 Subject: [PATCH 05/85] chore: add non-null assertions where TS can't see array index is in bounds --- src/cli/commands/instructions.mts | 2 +- src/cli/commands/memory.mts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cli/commands/instructions.mts b/src/cli/commands/instructions.mts index 1df840f8e..62eac4b77 100644 --- a/src/cli/commands/instructions.mts +++ b/src/cli/commands/instructions.mts @@ -100,7 +100,7 @@ export function handleInstructionsCommand(limit?: number): void { : instructions.length; for (let i = 0; i < count; i++) { - displayInstruction(instructions[i], currentPC); + displayInstruction(instructions[i]!, currentPC); } } diff --git a/src/cli/commands/memory.mts b/src/cli/commands/memory.mts index 25f218727..9f92fb711 100644 --- a/src/cli/commands/memory.mts +++ b/src/cli/commands/memory.mts @@ -36,7 +36,7 @@ function applyHintHighlighting( const colors = getHintColors(); for (let k = hintsInRange.length - 1; k >= 0; k--) { - const { hint, offset } = hintsInRange[k]; + const { hint, offset } = hintsInRange[k]!; if (!hint.sizeInBits) continue; const sizeInBytes = Math.ceil(hint.sizeInBits / 8); From a93649c1ad2cb934e5b1be07011f4db488cb07eb Mon Sep 17 00:00:00 2001 From: EUtrilla2002 <100451242@alumnos.uc3m.es> Date: Fri, 13 Mar 2026 10:42:18 +0100 Subject: [PATCH 06/85] Added function in interrupts --- src/core/capi/arduino_functions.mts | 4 ++-- src/core/events.mts | 2 ++ src/web/components/simulator/ArduinoTerminal.vue | 7 +++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/core/capi/arduino_functions.mts b/src/core/capi/arduino_functions.mts index f2663dc30..ca0e904b6 100644 --- a/src/core/capi/arduino_functions.mts +++ b/src/core/capi/arduino_functions.mts @@ -796,10 +796,10 @@ export function cr_digitalPinToInterrupt() { }); } export function cr_interrupts() { - //TODO + coreEvents.emit("arduino-interrupts-enabled", true); } export function cr_nointerrupts() { - // TODO + coreEvents.emit("arduino-interrupts-enabled", false); } export function cr_isDigit() { var ret1 = crex_findReg("a0"); diff --git a/src/core/events.mts b/src/core/events.mts index 3b44da169..6b8d4ba78 100644 --- a/src/core/events.mts +++ b/src/core/events.mts @@ -137,6 +137,8 @@ export type CoreEvents = { "arduino-find-vector-slot": ArduinoFindSlotEvent; /** Emitted when the simulator requests to get the pin assigned to an interrupt vector slot */ "arduino-get-pin-from-slot": ArduinoGetPinFromSlotEvent; + /** Emitted when interrupts are enabled/disabled */ + "arduino-interrupts-enabled": boolean; }; /** * Emitted when the simulator sends text to the Arduino Terminal diff --git a/src/web/components/simulator/ArduinoTerminal.vue b/src/web/components/simulator/ArduinoTerminal.vue index 1fb4d9179..cba81efe3 100644 --- a/src/web/components/simulator/ArduinoTerminal.vue +++ b/src/web/components/simulator/ArduinoTerminal.vue @@ -154,6 +154,7 @@ import { } from "../../../core/register/registerOperations.mjs"; import { crex_findReg } from "../../../core/register/registerLookup.mjs"; + export default { setup() { return { @@ -180,6 +181,7 @@ export default { isResizing: false, chipStyles: {}, interrupt: {}, + isInterruptsEnabled: true, }; }, @@ -239,6 +241,7 @@ export default { }); coreEvents.on("arduino-pin-interrupt", pinName => { + if (!this.isInterruptsEnabled) return; this.interrupt[pinName.pin] = true; esp32vect.value[pinName.position] = [ BigInt(pinName.pin.replace(/\D/g, "")), @@ -247,8 +250,12 @@ export default { ]; }); coreEvents.on("arduino-pin-detach-interrupt", pinName => { + if (!this.isInterruptsEnabled) return; delete this.interrupt[pinName.pin]; }); + coreEvents.on("arduino-interrupts-enabled", enabled => { + this.isInterruptsEnabled = enabled; + }); }, beforeUnmount() { From 87e0ea30bc99c46f182243eb4aded5284d56fd8c Mon Sep 17 00:00:00 2001 From: EUtrilla2002 <100451242@alumnos.uc3m.es> Date: Mon, 16 Mar 2026 10:23:02 +0100 Subject: [PATCH 07/85] Flush original function(does not erase terminal) --- src/core/capi/arduino_functions.mts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/core/capi/arduino_functions.mts b/src/core/capi/arduino_functions.mts index ca0e904b6..f62388391 100644 --- a/src/core/capi/arduino_functions.mts +++ b/src/core/capi/arduino_functions.mts @@ -1301,11 +1301,9 @@ export function cr_serial_flush() { }); if (serial_begin != 0 && initArduino != 0) { status.keyboard = ""; - status.display = ""; const root = (document as any).app; if (root) { root.keyboard = ""; - root.display = ""; root.enter = null; } } From d6f521058adf2ec152fe7010792fc004765281b2 Mon Sep 17 00:00:00 2001 From: EUtrilla2002 <100451242@alumnos.uc3m.es> Date: Mon, 16 Mar 2026 10:59:47 +0100 Subject: [PATCH 08/85] Erased flush example (does not work as it should) --- examples/RISCV-32-arduino/list.json | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/examples/RISCV-32-arduino/list.json b/examples/RISCV-32-arduino/list.json index e93c09329..242052ac5 100644 --- a/examples/RISCV-32-arduino/list.json +++ b/examples/RISCV-32-arduino/list.json @@ -74,30 +74,24 @@ { "name": "Example 11", "id": "e11", - "url": "examples/RISCV-32-arduino/example11.s", - "description": "Serial Flush example" + "url": "examples/RISCV-32-arduino/example12.s", + "description": "Serial readBytes example" }, { "name": "Example 12", "id": "e12", - "url": "examples/RISCV-32-arduino/example12.s", - "description": "Serial parseInt example" + "url": "examples/RISCV-32-arduino/example14.s", + "description": "Serial readBytes example" }, { "name": "Example 13", "id": "e13", - "url": "examples/RISCV-32-arduino/example13.s", - "description": "Serial readBytes example" - }, - { - "name": "Example 14", - "id": "e14", "url": "examples/RISCV-32-arduino/example14.s", "description": "Serial readBytesUntil example" }, { - "name": "Example 15", - "id": "e15", + "name": "Example 14", + "id": "e14", "url": "examples/RISCV-32-arduino/example15.s", "description": "High level interrupts example" } From 32630f730ab7ce1722818f7aff19a65a4decba56 Mon Sep 17 00:00:00 2001 From: EUtrilla2002 <100451242@alumnos.uc3m.es> Date: Mon, 16 Mar 2026 11:04:47 +0100 Subject: [PATCH 09/85] fixed readBytes examples --- examples/RISCV-32-arduino/example13.s | 2 +- examples/RISCV-32-arduino/example14.s | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/RISCV-32-arduino/example13.s b/examples/RISCV-32-arduino/example13.s index 763be1eae..bb3910e8c 100644 --- a/examples/RISCV-32-arduino/example13.s +++ b/examples/RISCV-32-arduino/example13.s @@ -4,7 +4,7 @@ space: .zero 100 .text setup: - li a0, 11520 + li a0, 115200 addi sp, sp, -4 sw ra, 0(sp) jal ra, serial_begin diff --git a/examples/RISCV-32-arduino/example14.s b/examples/RISCV-32-arduino/example14.s index af9de2c9e..1de9d30b2 100644 --- a/examples/RISCV-32-arduino/example14.s +++ b/examples/RISCV-32-arduino/example14.s @@ -6,7 +6,7 @@ .text setup: - li a0, 11520 + li a0, 115200 addi sp, sp, -4 sw ra, 0(sp) jal ra, serial_begin From e35bae074006719ac865410ff0eb3e0684677b9d Mon Sep 17 00:00:00 2001 From: EUtrilla2002 <100451242@alumnos.uc3m.es> Date: Mon, 16 Mar 2026 13:32:53 +0100 Subject: [PATCH 10/85] Fixed examples --- examples/RISCV-32-arduino/example10.s | 28 +++---- examples/RISCV-32-arduino/example11.s | 73 +++++++++++++----- examples/RISCV-32-arduino/example12.s | 79 ++++++++----------- examples/RISCV-32-arduino/example13.s | 31 +++++--- examples/RISCV-32-arduino/example14.s | 107 +++++++++++++++++++------- examples/RISCV-32-arduino/example15.s | 96 ----------------------- examples/RISCV-32-arduino/list.json | 10 +-- src/core/executor/IO.mjs | 10 ++- 8 files changed, 207 insertions(+), 227 deletions(-) delete mode 100644 examples/RISCV-32-arduino/example15.s diff --git a/examples/RISCV-32-arduino/example10.s b/examples/RISCV-32-arduino/example10.s index 0719e901d..e51c50043 100644 --- a/examples/RISCV-32-arduino/example10.s +++ b/examples/RISCV-32-arduino/example10.s @@ -18,16 +18,16 @@ not_found: lw ra, 0(sp) addi sp, sp, 4 - #li a0, 10000 - #addi sp, sp, -4 - #sw ra, 0(sp) - #jal ra, delay - #lw ra, 0(sp) - #addi sp, sp, 4 + li a0, 10000 + addi sp, sp, -4 + sw ra, 0(sp) + jal ra, delay + lw ra, 0(sp) + addi sp, sp, 4 jal ra, loop -founded: +found_text: la a0, found addi sp, sp, -4 sw ra, 0(sp) @@ -35,12 +35,12 @@ founded: lw ra, 0(sp) addi sp, sp, 4 - #li a0, 10000 - #addi sp, sp, -4 - #sw ra, 0(sp) - #jal ra, delay - #lw ra, 0(sp) - #addi sp, sp, 4 + li a0, 10000 + addi sp, sp, -4 + sw ra, 0(sp) + jal ra, delay + lw ra, 0(sp) + addi sp, sp, 4 jal ra, loop @@ -75,7 +75,7 @@ loop: addi sp, sp, 4 beqz a0, not_found - jal ra, founded + jal ra, found_text diff --git a/examples/RISCV-32-arduino/example11.s b/examples/RISCV-32-arduino/example11.s index 47ee83428..0e16ee683 100644 --- a/examples/RISCV-32-arduino/example11.s +++ b/examples/RISCV-32-arduino/example11.s @@ -1,24 +1,55 @@ -# Creatino Example: Starting Monitor Print + +#Creatino example: parseInt .data - msg: .string "Hello! Serial here" + msg: .string "Enter a integer number:\n" + sol: .string "You entered %d" + lookahead: .string "SKIP_NONE" - msg2: .string "Come soon!!" .text - main: - # ESP-IDF needs to initiate Arduino component first - jal ra, initArduino - # Baud rate depends on the board you are using. Maybe the same values don't fit everywhere - li a0, 115200 - jal ra, serial_begin - la a0, msg - jal ra, serial_printf - - #Now, we will wait all the data is transmitted - jal ra, serial_flush - - #Print again!! - la a0, msg2 - jal ra, serial_printf - - - jr ra \ No newline at end of file + +number: + mv a1, a0 + la a0, sol + addi sp, sp, -4 + sw ra, 0(sp) + jal ra, serial_printf + lw ra, 0(sp) + addi sp, sp, 4 + jal ra, loop + +setup: + li a0, 115200 + addi sp, sp, -4 + sw ra, 0(sp) + jal ra, serial_begin + lw ra, 0(sp) + addi sp, sp, 4 + + jr ra + +loop: + la a0, msg + addi sp, sp, -4 + sw ra, 0(sp) + jal ra, serial_printf + lw ra, 0(sp) + addi sp, sp, 4 + + la a0, lookahead + addi sp, sp, -4 + sw ra, 0(sp) + jal ra, serial_parseInt + lw ra, 0(sp) + addi sp, sp, 4 + bnez a0, number + jal ra, loop + + +main: + jal ra, initArduino + addi sp, sp, -4 + sw ra, 0(sp) + jal ra, setup + lw ra, 0(sp) + addi sp, sp, 4 + j loop \ No newline at end of file diff --git a/examples/RISCV-32-arduino/example12.s b/examples/RISCV-32-arduino/example12.s index cc7e0a446..bb3910e8c 100644 --- a/examples/RISCV-32-arduino/example12.s +++ b/examples/RISCV-32-arduino/example12.s @@ -1,55 +1,40 @@ - -#Creatino example: parse +#Template for Arduino proyects .data - msg: .string "Enter a integer number:\n" - sol: .string "You entered %d" - lookahead: .string "SKIP_NONE" +space: .zero 100 .text - -number: - mv a1, a0 - la a0, sol - addi sp, sp, -4 - sw ra, 0(sp) - jal ra, serial_printf - lw ra, 0(sp) - addi sp, sp, 4 - jal ra, loop - setup: - li a0, 115200 - addi sp, sp, -4 - sw ra, 0(sp) - jal ra, serial_begin - lw ra, 0(sp) - addi sp, sp, 4 - + li a0, 115200 + addi sp, sp, -4 + sw ra, 0(sp) + jal ra, serial_begin + lw ra, 0(sp) + addi sp, sp, 4 jr ra - -loop: - la a0, msg - addi sp, sp, -4 - sw ra, 0(sp) - jal ra, serial_printf - lw ra, 0(sp) - addi sp, sp, 4 - - la a0, lookahead - addi sp, sp, -4 - sw ra, 0(sp) - jal ra, serial_parseInt - lw ra, 0(sp) - addi sp, sp, 4 - bnez a0, number - jal ra, loop - - +loop: + + addi sp, sp, -4 + sw ra, 0(sp) + la a0, space + li a1, 5 + jal ra, serial_readBytes + lw ra, 0(sp) + addi sp, sp, 4 + + + addi sp, sp, -4 + sw ra, 0(sp) + la a0, space + jal ra, serial_printf + lw ra, 0(sp) + addi sp, sp, 4 + + j loop main: - jal ra, initArduino - addi sp, sp, -4 - sw ra, 0(sp) + addi sp, sp, -16 + sw ra, 12(sp) + jal ra, initArduino jal ra, setup - lw ra, 0(sp) - addi sp, sp, 4 + lw ra, 12(sp) + addi sp, sp, 16 j loop \ No newline at end of file diff --git a/examples/RISCV-32-arduino/example13.s b/examples/RISCV-32-arduino/example13.s index bb3910e8c..1de9d30b2 100644 --- a/examples/RISCV-32-arduino/example13.s +++ b/examples/RISCV-32-arduino/example13.s @@ -1,6 +1,8 @@ -#Template for Arduino proyects +# Creatino example:readBytes .data -space: .zero 100 + space: .zero 100 #Buffer to place the string + print: .string "%s\n" + char: .byte 65 #A .text setup: @@ -13,22 +15,27 @@ setup: jr ra loop: + # read int + la a0, char + lb a0, 0(a0) + la a1, space + la a2, 5 # number of letters it will have + addi sp, sp, -4 - sw ra, 0(sp) - la a0, space - li a1, 5 - jal ra, serial_readBytes - lw ra, 0(sp) + sw ra, 0(sp) + jal ra, serial_readBytesUntil + lw ra, 0(sp) addi sp, sp, 4 - - addi sp, sp, -4 - sw ra, 0(sp) + # print: la a0, space + addi sp, sp, -4 + sw ra, 0(sp) jal ra, serial_printf - lw ra, 0(sp) - addi sp, sp, 4 + lw ra, 0(sp) + addi sp, sp, 4 + # return j loop main: addi sp, sp, -16 diff --git a/examples/RISCV-32-arduino/example14.s b/examples/RISCV-32-arduino/example14.s index 1de9d30b2..96972db52 100644 --- a/examples/RISCV-32-arduino/example14.s +++ b/examples/RISCV-32-arduino/example14.s @@ -1,47 +1,96 @@ -# Creatino example:readBytes +# Creatino example: GPIO Interrupts .data - space: .zero 100 #Buffer to place the string - print: .string "%s\n" - char: .byte 65 #A - + ledPin: .byte 4 + interruptpin: .byte 6 + state: .byte 0 #LOW + change: .byte 0x04 .text -setup: - li a0, 115200 +blink: + la t1, ledPin + lb a0, 0(t1) + li a1, 1 addi sp, sp, -4 - sw ra, 0(sp) - jal ra, serial_begin - lw ra, 0(sp) + sw ra,0(sp) + jal ra, digitalWrite# digitalWrite(ledPin, state) + lw ra,0(sp) addi sp, sp, 4 jr ra + + loop: + la t1, ledPin + lb a0, 0(t1) + li a1,0 + addi sp, sp, -4 + sw ra,0(sp) + jal ra, digitalWrite# digitalWrite(ledPin, state) + lw ra,0(sp) + addi sp, sp, 4 + + li a0, 100 + addi sp, sp, -4 + sw ra,0(sp) + jal ra, delay # delay(1000) + lw ra,0(sp) + addi sp, sp, 4 + j loop - # read int - la a0, char - lb a0, 0(a0) - la a1, space - la a2, 5 # number of letters it will have +setup: + #Start pins + la t1, ledPin + lb a0, 0(t1) + li a1, 0x03 #OUTPUT + addi sp, sp, -4 + sw ra,0(sp) + jal ra, pinMode #pinMode(ledPin, OUTPUT); + lw ra,0(sp) + addi sp, sp, 4 + la t1, interruptpin + lb a0, 0(t1) + li a1, 0x05 #INPUT_PULLUP + addi sp, sp, -4 + sw ra,0(sp) + jal ra, pinMode# pinMode(ledPin, INPUT_PULLUP); + lw ra,0(sp) + addi sp, sp, 4 + + la t1, interruptpin + lb a0, 0(t1) + addi sp, sp, -4 + sw ra,0(sp) + jal ra, digitalPinToInterrupt #digitalPinToInterrupt(interruptpin); + lw ra,0(sp) + addi sp, sp, 4 + + la a1, blink + la t1, change + lb a2, 0(t1) + + addi sp, sp, -4 + sw ra,0(sp) + jal ra, attachInterrupt #attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE); + lw ra,0(sp) + addi sp, sp, 4 + jr ra + +main: + # Llamar a cr_initArduino() addi sp, sp, -4 sw ra, 0(sp) - jal ra, serial_readBytesUntil + jal ra, initArduino lw ra, 0(sp) addi sp, sp, 4 - # print: - la a0, space + # Llamar a setup() addi sp, sp, -4 sw ra, 0(sp) - jal ra, serial_printf + jal ra, setup lw ra, 0(sp) - addi sp, sp, 4 + addi sp, sp, 4 - # return + # Bucle infinito j loop -main: - addi sp, sp, -16 - sw ra, 12(sp) - jal ra, initArduino - jal ra, setup - lw ra, 12(sp) - addi sp, sp, 16 - j loop \ No newline at end of file + + + \ No newline at end of file diff --git a/examples/RISCV-32-arduino/example15.s b/examples/RISCV-32-arduino/example15.s deleted file mode 100644 index 96972db52..000000000 --- a/examples/RISCV-32-arduino/example15.s +++ /dev/null @@ -1,96 +0,0 @@ -# Creatino example: GPIO Interrupts -.data - ledPin: .byte 4 - interruptpin: .byte 6 - state: .byte 0 #LOW - change: .byte 0x04 -.text -blink: - la t1, ledPin - lb a0, 0(t1) - li a1, 1 - addi sp, sp, -4 - sw ra,0(sp) - jal ra, digitalWrite# digitalWrite(ledPin, state) - lw ra,0(sp) - addi sp, sp, 4 - jr ra - - -loop: - la t1, ledPin - lb a0, 0(t1) - li a1,0 - addi sp, sp, -4 - sw ra,0(sp) - jal ra, digitalWrite# digitalWrite(ledPin, state) - lw ra,0(sp) - addi sp, sp, 4 - - li a0, 100 - addi sp, sp, -4 - sw ra,0(sp) - jal ra, delay # delay(1000) - lw ra,0(sp) - addi sp, sp, 4 - j loop - -setup: - #Start pins - la t1, ledPin - lb a0, 0(t1) - li a1, 0x03 #OUTPUT - addi sp, sp, -4 - sw ra,0(sp) - jal ra, pinMode #pinMode(ledPin, OUTPUT); - lw ra,0(sp) - addi sp, sp, 4 - la t1, interruptpin - lb a0, 0(t1) - li a1, 0x05 #INPUT_PULLUP - addi sp, sp, -4 - sw ra,0(sp) - jal ra, pinMode# pinMode(ledPin, INPUT_PULLUP); - lw ra,0(sp) - addi sp, sp, 4 - - la t1, interruptpin - lb a0, 0(t1) - addi sp, sp, -4 - sw ra,0(sp) - jal ra, digitalPinToInterrupt #digitalPinToInterrupt(interruptpin); - lw ra,0(sp) - addi sp, sp, 4 - - la a1, blink - - la t1, change - lb a2, 0(t1) - - addi sp, sp, -4 - sw ra,0(sp) - jal ra, attachInterrupt #attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE); - lw ra,0(sp) - addi sp, sp, 4 - jr ra - -main: - # Llamar a cr_initArduino() - addi sp, sp, -4 - sw ra, 0(sp) - jal ra, initArduino - lw ra, 0(sp) - addi sp, sp, 4 - - # Llamar a setup() - addi sp, sp, -4 - sw ra, 0(sp) - jal ra, setup - lw ra, 0(sp) - addi sp, sp, 4 - - # Bucle infinito - j loop - - - \ No newline at end of file diff --git a/examples/RISCV-32-arduino/list.json b/examples/RISCV-32-arduino/list.json index 242052ac5..640a1f39b 100644 --- a/examples/RISCV-32-arduino/list.json +++ b/examples/RISCV-32-arduino/list.json @@ -74,25 +74,25 @@ { "name": "Example 11", "id": "e11", - "url": "examples/RISCV-32-arduino/example12.s", - "description": "Serial readBytes example" + "url": "examples/RISCV-32-arduino/example11.s", + "description": "Serial parseInt example" }, { "name": "Example 12", "id": "e12", - "url": "examples/RISCV-32-arduino/example14.s", + "url": "examples/RISCV-32-arduino/example12.s", "description": "Serial readBytes example" }, { "name": "Example 13", "id": "e13", - "url": "examples/RISCV-32-arduino/example14.s", + "url": "examples/RISCV-32-arduino/example13.s", "description": "Serial readBytesUntil example" }, { "name": "Example 14", "id": "e14", - "url": "examples/RISCV-32-arduino/example15.s", + "url": "examples/RISCV-32-arduino/example14.s", "description": "High level interrupts example" } diff --git a/src/core/executor/IO.mjs b/src/core/executor/IO.mjs index 1f545e932..2572f6fe3 100644 --- a/src/core/executor/IO.mjs +++ b/src/core/executor/IO.mjs @@ -623,6 +623,9 @@ export function keyboard_read_find(fn_post_read, fn_post_params,fn_post_length,f ); } length = readRegister(ret2.indexComp, ret2.indexElem); + if (length <= 0) { + length = Infinity; // No length limit + } } @@ -666,19 +669,20 @@ export function keyboard_read_find(fn_post_read, fn_post_params,fn_post_length,f if (typeof Deno !== "undefined") { let keystroke = rawPrompt(); - if (until && typeof until === "string") { + if (until && typeof until === "string" && until !== "" ) { const idx = keystroke.indexOf(until); if (idx !== -1) { keystroke = keystroke.substring(0, idx); } } - - if (keystroke.includes(target) && keystroke.length <= (length || keystroke.length) && !keystroke.includes(until)) { + if (keystroke.includes(target) && keystroke.length <= length) { writeRegister(1n, ret1.indexComp, ret1.indexElem); } else { writeRegister(0n, ret1.indexComp, ret1.indexElem); } + + status.run_program = 0; return packExecute( false, From 808c94d02704156662c4c7cf03c7db3b9cba5acd Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Mon, 16 Mar 2026 13:43:49 +0100 Subject: [PATCH 11/85] fix(mips): allow reading doubles from `FP\d+` registers --- src/core/capi/arch/mips.mjs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/core/capi/arch/mips.mjs b/src/core/capi/arch/mips.mjs index e7a62b532..8a62c5692 100644 --- a/src/core/capi/arch/mips.mjs +++ b/src/core/capi/arch/mips.mjs @@ -39,13 +39,14 @@ export const ARCH = { /** * Reads a double precision floating point value from a register pair. - * @param {string} regName - The base register name (must be even, e.g., "f0") + * @param {string} regName - The base register name (must be even, e.g., "f0" or "FP0") * @returns {number} The JavaScript number representation of the double */ readDouble(regName) { this.validateEvenRegister(regName); - const regNumber = parseInt(regName.substring(1), 10); + const offset = regName.substring(0, 2) === "FP"? 2 : 1; + const regNumber = parseInt(regName.substring(offset), 10); const highReg = regName; const lowRegName = "f" + (regNumber + 1); From 64cdd42d887dcdaa5694f267cc19f7ccc17c0eef Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Mon, 16 Mar 2026 13:45:12 +0100 Subject: [PATCH 12/85] fix(stackTracker): properly reset stack frames This avoids creating a new stack frame each time the first instruction of main is executed --- src/core/executor/executor.mjs | 10 ---------- src/core/memory/StackTracker.mts | 1 + 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/src/core/executor/executor.mjs b/src/core/executor/executor.mjs index 987fbabeb..3d8963411 100644 --- a/src/core/executor/executor.mjs +++ b/src/core/executor/executor.mjs @@ -367,16 +367,6 @@ function executeInstructionCycle() { logger.debug("Execution Index:" + status.execution_index); logger.debug("PC Register: " + getPC()); - // Special check for stack visualization purposes - if ( - status.execution_index === - instructions.findIndex( - i => parseInt(i.Address, 16) === get_entrypoint(), - ) - ) { - stackTracker.newFrame(tag_instructions[getPC()]?.tag || ""); - } - // Check for conditions that would stop execution const inLoopCheckResult = performExecutionChecks(); if (inLoopCheckResult !== null) { diff --git a/src/core/memory/StackTracker.mts b/src/core/memory/StackTracker.mts index cc462fa56..54664d2da 100644 --- a/src/core/memory/StackTracker.mts +++ b/src/core/memory/StackTracker.mts @@ -71,6 +71,7 @@ export class StackTracker { public reset() { this.frames.length = 0; this.hints.clear(); + this.newFrame("main"); } /** From 88e74bd7278c02b55ad4b43e51174b5711986321 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Mon, 16 Mar 2026 13:46:17 +0100 Subject: [PATCH 13/85] fix(capi.stack): fix `.endFrame()` popping multiple stack frames --- src/core/capi/stack.mts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/core/capi/stack.mts b/src/core/capi/stack.mts index 4a98abf41..c8a8cc7d3 100644 --- a/src/core/capi/stack.mts +++ b/src/core/capi/stack.mts @@ -47,8 +47,7 @@ export const STACK = { } }, endFrame() { - // stack tracker: pop both frames - stackTracker.popFrame(); + // stack tracker: pop frame stackTracker.popFrame(); // sentinel From f98606835897c81d176df8bada3c55ae2fa67c64 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Mon, 16 Mar 2026 13:47:49 +0100 Subject: [PATCH 14/85] refactor(core): remove redundant bigint conversion when reading PC --- src/core/core.mjs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/core/core.mjs b/src/core/core.mjs index b22d072c3..2c94cd499 100644 --- a/src/core/core.mjs +++ b/src/core/core.mjs @@ -682,11 +682,10 @@ export function getRegisterInfo(regName) { } export function getPC() { - const pc_address = readRegister( + return readRegister( PC_REG_INDEX.indexComp, PC_REG_INDEX.indexElem, ); - return BigInt(pc_address); } export function getSP() { From 357d32d03a5e3ba3de6834d5d410f35866c89086 Mon Sep 17 00:00:00 2001 From: EUtrilla2002 <100451242@alumnos.uc3m.es> Date: Mon, 16 Mar 2026 13:49:36 +0100 Subject: [PATCH 15/85] Fixed find --- src/core/executor/IO.mjs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/core/executor/IO.mjs b/src/core/executor/IO.mjs index 2572f6fe3..daa1832ad 100644 --- a/src/core/executor/IO.mjs +++ b/src/core/executor/IO.mjs @@ -710,7 +710,13 @@ export function keyboard_read_find(fn_post_read, fn_post_params,fn_post_length,f // Find logic // console.log("keystroke:", `"${keystroke}"`, keystroke.length); // console.log("until:", `"${until}"`, until.length); - if (keystroke.includes(target) && keystroke.length <= (length || keystroke.length) && !keystroke.includes(until)) { + if (until && typeof until === "string" && until !== "" ) { + const idx = keystroke.indexOf(until); + if (idx !== -1) { + keystroke = keystroke.substring(0, idx); + } + } + if (keystroke.includes(target) && keystroke.length <= length) { writeRegister(1n, ret1.indexComp, ret1.indexElem); } else { writeRegister(0n, ret1.indexComp, ret1.indexElem); From afb9f712022cfdf220226ec539ace8c52060f4a9 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Mon, 16 Mar 2026 13:54:40 +0100 Subject: [PATCH 16/85] fix(architecture): allow `jr ra` on the `main` function to exit the program --- architecture/MIPS32.yml | 6 ++++-- architecture/RISCV/RV32IMFD.yml | 10 ++++++---- architecture/RISCV/RV64IMFD.yml | 6 ++++-- architecture/RISCV/SRV32.yml | 8 +++++--- architecture/RISCV/SRV64.yml | 8 +++++--- 5 files changed, 24 insertions(+), 14 deletions(-) diff --git a/architecture/MIPS32.yml b/architecture/MIPS32.yml index d61d0743b..28be3ea44 100644 --- a/architecture/MIPS32.yml +++ b/architecture/MIPS32.yml @@ -2279,8 +2279,10 @@ instructions: stopbit: 0 value: "001000" definition: |- - registers.PC = registers[rs]; - CAPI.STACK.endFrame(); + const pc = registers[rs] + registers.PC = pc; + if (BigInt.asIntN(32, pc) === -1n) CAPI.SYSCALL.exit(); + else CAPI.STACK.endFrame(); - name: lb template: Custom type: Memory access diff --git a/architecture/RISCV/RV32IMFD.yml b/architecture/RISCV/RV32IMFD.yml index a9434c2f8..16f1050b5 100644 --- a/architecture/RISCV/RV32IMFD.yml +++ b/architecture/RISCV/RV32IMFD.yml @@ -166,8 +166,8 @@ components: - x1 - ra nbits: 32 - value: 0xFFFFFF00 - default_value: 0xFFFFFF00 + value: 0xFFFFFFFF + default_value: 0xFFFFFFFF encoding: 1 properties: - read @@ -1601,8 +1601,10 @@ instructions: value: "000" definition: | registers[rd] = registers.pc + 4n; - registers.pc = (registers[rs1] + imm) & ~1n; - CAPI.STACK.endFrame(); + const pc = registers[rs1] + imm; + registers.pc = pc & ~1n; + if (BigInt.asIntN(32, pc) === -1n) CAPI.SYSCALL.exit(); + else CAPI.STACK.endFrame(); help: Jump to address and place return address in rd. - name: lb diff --git a/architecture/RISCV/RV64IMFD.yml b/architecture/RISCV/RV64IMFD.yml index 6492c5a1b..5604d4265 100644 --- a/architecture/RISCV/RV64IMFD.yml +++ b/architecture/RISCV/RV64IMFD.yml @@ -1619,8 +1619,10 @@ instructions: value: "000" definition: | registers[rd] = registers.pc + 4n; - registers.pc = (registers[rs1] + imm) & ~1n; - CAPI.STACK.endFrame(); + const pc = registers[rs1] + imm; + registers.pc = pc & ~1n; + if (BigInt.asIntN(64, pc) === -1n) CAPI.SYSCALL.exit(); + else CAPI.STACK.endFrame(); help: Jump to address and place return address in rd. - name: lb diff --git a/architecture/RISCV/SRV32.yml b/architecture/RISCV/SRV32.yml index acb3049ed..4857310d4 100644 --- a/architecture/RISCV/SRV32.yml +++ b/architecture/RISCV/SRV32.yml @@ -2160,9 +2160,11 @@ instructions: - field: funct3 value: "000" definition: | - registers[rd] = registers["PC"] + 4n; - registers["PC"] = (registers[rs1] + imm) & ~1n; - CAPI.CHECK_STACK.end(); CAPI.DRAW_STACK.end(registers["PC"]); + registers[rd] = registers.pc + 4n; + const pc = registers[rs1] + imm; + registers.pc = pc & ~1n; + if (BigInt.asIntN(32, pc) === -1n) CAPI.SYSCALL.exit(); + else CAPI.STACK.endFrame(); help: Jump to address and place return address in rd. - name: lb extension: I diff --git a/architecture/RISCV/SRV64.yml b/architecture/RISCV/SRV64.yml index ee506592c..e3d6e6cba 100644 --- a/architecture/RISCV/SRV64.yml +++ b/architecture/RISCV/SRV64.yml @@ -2171,9 +2171,11 @@ instructions: - field: funct3 value: "000" definition: | - registers[rd] = registers["PC"] + 4n; - registers["PC"] = (registers[rs1] + imm) & ~1n; - CAPI.CHECK_STACK.end(); CAPI.DRAW_STACK.end(registers["PC"]); + registers[rd] = registers.pc + 4n; + const pc = registers[rs1] + imm; + registers.pc = pc & ~1n; + if (BigInt.asIntN(64, pc) === -1n) CAPI.SYSCALL.exit(); + else CAPI.STACK.endFrame(); help: Jump to address and place return address in rd. - name: lb extension: I From 37746c3161337735f8acc62a52b4d001bec1d65c Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Mon, 16 Mar 2026 13:55:27 +0100 Subject: [PATCH 17/85] fix(MIPS): fix incorrect numerical int register names --- architecture/MIPS32.yml | 64 +++++++++---------- .../unit/arch/mips/mips_example_002.test.mts | 16 ++--- .../unit/arch/mips/mips_example_003.test.mts | 20 +++--- .../unit/arch/mips/mips_example_004.test.mts | 12 ++-- .../unit/arch/mips/mips_example_005.test.mts | 8 +-- .../unit/arch/mips/mips_example_006.test.mts | 14 ++-- .../unit/arch/mips/mips_example_007.test.mts | 18 +++--- .../unit/arch/mips/mips_example_008.test.mts | 14 ++-- .../unit/arch/mips/mips_example_011.test.mts | 18 +++--- .../unit/arch/mips/mips_example_012.test.mts | 10 +-- 10 files changed, 97 insertions(+), 97 deletions(-) diff --git a/architecture/MIPS32.yml b/architecture/MIPS32.yml index 28be3ea44..863a8625a 100644 --- a/architecture/MIPS32.yml +++ b/architecture/MIPS32.yml @@ -132,7 +132,7 @@ components: double_precision: false elements: - name: - - r0 + - "0" - zero nbits: 32 value: 0 @@ -141,7 +141,7 @@ components: properties: - read - name: - - r1 + - "1" - at nbits: 32 value: 0 @@ -151,7 +151,7 @@ components: - read - write - name: - - r2 + - "2" - v0 nbits: 32 value: 0 @@ -161,7 +161,7 @@ components: - read - write - name: - - r3 + - "3" - v1 nbits: 32 value: 0 @@ -171,7 +171,7 @@ components: - read - write - name: - - r4 + - "4" - a0 nbits: 32 value: 0 @@ -181,7 +181,7 @@ components: - read - write - name: - - r5 + - "5" - a1 nbits: 32 value: 0 @@ -191,7 +191,7 @@ components: - read - write - name: - - r6 + - "6" - a2 nbits: 32 value: 0 @@ -201,7 +201,7 @@ components: - read - write - name: - - r7 + - "7" - a3 nbits: 32 value: 0 @@ -211,7 +211,7 @@ components: - read - write - name: - - r8 + - "8" - t0 nbits: 32 value: 0 @@ -221,7 +221,7 @@ components: - read - write - name: - - r9 + - "9" - t1 nbits: 32 value: 0 @@ -231,7 +231,7 @@ components: - read - write - name: - - r10 + - "10" - t2 nbits: 32 value: 0 @@ -241,7 +241,7 @@ components: - read - write - name: - - r11 + - "11" - t3 nbits: 32 value: 0 @@ -251,7 +251,7 @@ components: - read - write - name: - - r12 + - "12" - t4 nbits: 32 value: 0 @@ -261,7 +261,7 @@ components: - read - write - name: - - r13 + - "13" - t5 nbits: 32 value: 0 @@ -271,7 +271,7 @@ components: - read - write - name: - - r14 + - "14" - t6 nbits: 32 value: 0 @@ -281,7 +281,7 @@ components: - read - write - name: - - r15 + - "15" - t7 nbits: 32 value: 0 @@ -291,7 +291,7 @@ components: - read - write - name: - - r16 + - "16" - s0 nbits: 32 value: 0 @@ -302,7 +302,7 @@ components: - write - saved - name: - - r17 + - "17" - s1 nbits: 32 value: 0 @@ -313,7 +313,7 @@ components: - write - saved - name: - - r18 + - "18" - s2 nbits: 32 value: 0 @@ -324,7 +324,7 @@ components: - write - saved - name: - - r19 + - "19" - s3 nbits: 32 value: 0 @@ -335,7 +335,7 @@ components: - write - saved - name: - - r20 + - "20" - s4 nbits: 32 value: 0 @@ -346,7 +346,7 @@ components: - write - saved - name: - - r21 + - "21" - s5 nbits: 32 value: 0 @@ -357,7 +357,7 @@ components: - write - saved - name: - - r22 + - "22" - s6 nbits: 32 value: 0 @@ -368,7 +368,7 @@ components: - write - saved - name: - - r23 + - "23" - s7 nbits: 32 value: 0 @@ -379,7 +379,7 @@ components: - write - saved - name: - - r24 + - "24" - t8 nbits: 32 value: 0 @@ -389,7 +389,7 @@ components: - read - write - name: - - r25 + - "25" - t9 nbits: 32 value: 0 @@ -399,7 +399,7 @@ components: - read - write - name: - - r26 + - "26" - k0 nbits: 32 value: 0 @@ -409,7 +409,7 @@ components: - read - write - name: - - r27 + - "27" - k1 nbits: 32 value: 0 @@ -419,7 +419,7 @@ components: - read - write - name: - - r28 + - "28" - gp nbits: 32 value: 0 @@ -430,7 +430,7 @@ components: - write - global_pointer - name: - - r29 + - "29" - sp nbits: 32 value: 268435452 @@ -441,7 +441,7 @@ components: - write - stack_pointer - name: - - r30 + - "30" - fp nbits: 32 value: 0 @@ -452,7 +452,7 @@ components: - write - frame_pointer - name: - - r31 + - "31" - ra nbits: 32 value: 4294967295 diff --git a/tests/unit/arch/mips/mips_example_002.test.mts b/tests/unit/arch/mips/mips_example_002.test.mts index ae1d29b32..59632a9c2 100644 --- a/tests/unit/arch/mips/mips_example_002.test.mts +++ b/tests/unit/arch/mips/mips_example_002.test.mts @@ -23,14 +23,14 @@ Deno.test( "MIPS Basic Arithmetic Operations", assertExecution("MIPS32.yml", testAssembly, { registers: { - r8: 0xan, // t0 = 10 - r9: 0xdn, // t1 = 13 - r10: 0x2dn, // t2 = 45 - r11: 0x21n, // t3 = 33 - r12: 0x17n, // t4 = 23 - r13: 0xcn, // t5 = 12 - r14: 0x441n, // t6 = 1089 - r15: 0x53n, // t7 = 83 + "8": 0xan, // t0 = 10 + "9": 0xdn, // t1 = 13 + "10": 0x2dn, // t2 = 45 + "11": 0x21n, // t3 = 33 + "12": 0x17n, // t4 = 23 + "13": 0xcn, // t5 = 12 + "14": 0x441n, // t6 = 1089 + "15": 0x53n, // t7 = 83 }, display: "", // Display buffer should be empty keyboard: "", // Keyboard buffer should be empty diff --git a/tests/unit/arch/mips/mips_example_003.test.mts b/tests/unit/arch/mips/mips_example_003.test.mts index 0ee22eba5..7a0fdc02f 100644 --- a/tests/unit/arch/mips/mips_example_003.test.mts +++ b/tests/unit/arch/mips/mips_example_003.test.mts @@ -42,16 +42,16 @@ Deno.test( "MIPS Data Types and Memory Operations", assertExecution("MIPS32.yml", testAssembly, { registers: { - r1: 0x20000en, // at - r8: 0x200000n, // t0 - r9: 0x200004n, // t1 - r10: 0x200006n, // t2 - r11: 0xen, // t3 - r12: 0xen, // t4 - r13: 0x78n, // t5 - r14: 0x78n, // t6 - r15: 0x16n, // t7 - r24: 0x16n, // t8 + "1": 0x20000en, // at + "8": 0x200000n, // t0 + "9": 0x200004n, // t1 + "10": 0x200006n, // t2 + "11": 0xen, // t3 + "12": 0xen, // t4 + "13": 0x78n, // t5 + "14": 0x78n, // t6 + "15": 0x16n, // t7 + "24": 0x16n, // t8 }, memory: { "0x20000f": 0x16n, diff --git a/tests/unit/arch/mips/mips_example_004.test.mts b/tests/unit/arch/mips/mips_example_004.test.mts index 2d29e4c21..aeac318a1 100644 --- a/tests/unit/arch/mips/mips_example_004.test.mts +++ b/tests/unit/arch/mips/mips_example_004.test.mts @@ -41,12 +41,12 @@ Deno.test( assertExecution("MIPS32.yml", testAssembly, { // TODO: finish the conditions below registers: { - r1: 0x200018n, // at - r2: 0xan, // v0 - r8: 0x200000n, // t0 - r9: 0x200008n, // t1 - r10: 0x200010n, // t2 - r11: 0x200028n, // t3 + "1": 0x200018n, // at + "2": 0xan, // v0 + "8": 0x200000n, // t0 + "9": 0x200008n, // t1 + "10": 0x200010n, // t2 + "11": 0x200028n, // t3 }, display: "", // Display buffer should be empty keyboard: "", // Keyboard buffer should be empty diff --git a/tests/unit/arch/mips/mips_example_005.test.mts b/tests/unit/arch/mips/mips_example_005.test.mts index 19c0fea79..a57a96587 100644 --- a/tests/unit/arch/mips/mips_example_005.test.mts +++ b/tests/unit/arch/mips/mips_example_005.test.mts @@ -25,10 +25,10 @@ Deno.test( "MIPS Loop and Print Sum", assertExecution("MIPS32.yml", testAssembly, { registers: { - r2: 0x1n, // v0 - r4: 0x2dn, // a0 = 45 - r8: 0xan, // t0 = 10 - r9: 0xan, // t1 = 10 + "2": 0x1n, // v0 + "4": 0x2dn, // a0 = 45 + "8": 0xan, // t0 = 10 + "9": 0xan, // t1 = 10 }, display: "45", // Should display '45' keyboard: "", // Keyboard buffer should be empty diff --git a/tests/unit/arch/mips/mips_example_006.test.mts b/tests/unit/arch/mips/mips_example_006.test.mts index e06aa3b57..3ae682947 100644 --- a/tests/unit/arch/mips/mips_example_006.test.mts +++ b/tests/unit/arch/mips/mips_example_006.test.mts @@ -26,13 +26,13 @@ Deno.test( "MIPS Branching Instructions", assertExecution("MIPS32.yml", testAssembly, { registers: { - r1: 0x1n, // at - r2: 0xan, // v0 - r8: 0x4n, // t0 - r9: 0x2n, // t1 - r11: 0x22n, // t3 - r24: 0x22bn, // t8 - r25: 0xbn, // t9 + "1": 0x1n, // at + "2": 0xan, // v0 + "8": 0x4n, // t0 + "9": 0x2n, // t1 + "11": 0x22n, // t3 + "24": 0x22bn, // t8 + "25": 0xbn, // t9 }, display: "", // Display buffer should be empty keyboard: "", // Keyboard buffer should be empty diff --git a/tests/unit/arch/mips/mips_example_007.test.mts b/tests/unit/arch/mips/mips_example_007.test.mts index e8e872c71..3c3af6981 100644 --- a/tests/unit/arch/mips/mips_example_007.test.mts +++ b/tests/unit/arch/mips/mips_example_007.test.mts @@ -43,15 +43,15 @@ Deno.test( assertExecution("MIPS32.yml", testAssembly, { registers: { PC: 0x44n, - r1: 0x200000n, // at - r2: 0xan, // v0 - r9: 0x5n, // t1 - r10: 0x5n, // t2 - r11: 0x1n, // t3 - r12: 0x4n, // t4 - r13: 0x200014n, // t5 - r14: 0x5n, // t6 - r15: 0xfn, // t7 + "1": 0x200000n, // at + "2": 0xan, // v0 + "9": 0x5n, // t1 + "10": 0x5n, // t2 + "11": 0x1n, // t3 + "12": 0x4n, // t4 + "13": 0x200014n, // t5 + "14": 0x5n, // t6 + "15": 0xfn, // t7 }, display: "", // Display buffer should be empty keyboard: "", // Keyboard buffer should be empty diff --git a/tests/unit/arch/mips/mips_example_008.test.mts b/tests/unit/arch/mips/mips_example_008.test.mts index e688cd312..8f06781a8 100644 --- a/tests/unit/arch/mips/mips_example_008.test.mts +++ b/tests/unit/arch/mips/mips_example_008.test.mts @@ -45,13 +45,13 @@ Deno.test( "MIPS Matrix Copy with Floats", assertExecution("MIPS32.yml", testAssembly, { registers: { - r1: 0x200040n, // at - r2: 0xan, // v0 - r8: 0x200040n, // t0 - r9: 0x200080n, // t1 - r10: 0x4n, // t2 - r11: 0x4n, // t3 - r12: 0x4n, // t4 + "1": 0x200040n, // at + "2": 0xan, // v0 + "8": 0x200040n, // t0 + "9": 0x200080n, // t1 + "10": 0x4n, // t2 + "11": 0x4n, // t3 + "12": 0x4n, // t4 }, memory: { "0x20007f": 0x24n, diff --git a/tests/unit/arch/mips/mips_example_011.test.mts b/tests/unit/arch/mips/mips_example_011.test.mts index 3e488fd2a..64beb4195 100644 --- a/tests/unit/arch/mips/mips_example_011.test.mts +++ b/tests/unit/arch/mips/mips_example_011.test.mts @@ -38,15 +38,15 @@ Deno.test( assertExecution("MIPS32.yml", testAssembly, { registers: { PC: 0x38n, - r1: 0xffffffb3n, // at - r2: 0xan, // v0 - r3: 0x5an, // v1 - r4: 0xffffff70n, // a0 - r5: 0x5an, // a1 - r6: 0x2dn, // a2 - r9: 0xffffffcan, // t1 - r10: 0x5an, // t2 - r31: 0x24n, // ra + "1": 0xffffffb3n, // at + "2": 0xan, // v0 + "3": 0x5an, // v1 + "4": 0xffffff70n, // a0 + "5": 0x5an, // a1 + "6": 0x2dn, // a2 + "9": 0xffffffcan, // t1 + "10": 0x5an, // t2 + "31": 0x24n, // ra }, display: "-144", // Should display '-144' keyboard: "", // Keyboard buffer should be empty diff --git a/tests/unit/arch/mips/mips_example_012.test.mts b/tests/unit/arch/mips/mips_example_012.test.mts index 702559876..973a01705 100644 --- a/tests/unit/arch/mips/mips_example_012.test.mts +++ b/tests/unit/arch/mips/mips_example_012.test.mts @@ -58,11 +58,11 @@ Deno.test( assertExecution("MIPS32.yml", testAssembly, { registers: { PC: 0x1cn, - r1: 0x1n, // at - r2: 0xan, // v0 - r4: 0x78n, // a0 - r9: 0x5n, // t1 - r31: 0x8n, // ra + "1": 0x1n, // at + "2": 0xan, // v0 + "4": 0x78n, // a0 + "9": 0x5n, // t1 + "31": 0x8n, // ra }, display: "120", // Should display '120' keyboard: "", // Keyboard buffer should be empty From 7a3965738c9a34998945e36bb0dd2c0a41e20636 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Mon, 16 Mar 2026 13:56:11 +0100 Subject: [PATCH 18/85] fix(MIPS): add missing `FP\d+` float register aliases --- architecture/MIPS32.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/architecture/MIPS32.yml b/architecture/MIPS32.yml index 863a8625a..51dc9055b 100644 --- a/architecture/MIPS32.yml +++ b/architecture/MIPS32.yml @@ -467,6 +467,7 @@ components: elements: - name: - f0 + - FP0 nbits: 32 value: 0 default_value: 0 @@ -485,6 +486,7 @@ components: - write - name: - f2 + - FP2 nbits: 32 value: 0 default_value: 0 @@ -503,6 +505,7 @@ components: - write - name: - f4 + - FP4 nbits: 32 value: 0 default_value: 0 @@ -521,6 +524,7 @@ components: - write - name: - f6 + - FP6 nbits: 32 value: 0 default_value: 0 @@ -539,6 +543,7 @@ components: - write - name: - f8 + - FP8 nbits: 32 value: 0 default_value: 0 @@ -557,6 +562,7 @@ components: - write - name: - f10 + - FP10 nbits: 32 value: 0 default_value: 0 @@ -575,6 +581,7 @@ components: - write - name: - f12 + - FP12 nbits: 32 value: 0 default_value: 0 @@ -593,6 +600,7 @@ components: - write - name: - f14 + - FP14 nbits: 32 value: 0 default_value: 0 @@ -611,6 +619,7 @@ components: - write - name: - f16 + - FP16 nbits: 32 value: 0 default_value: 0 @@ -629,6 +638,7 @@ components: - write - name: - f18 + - FP18 nbits: 32 value: 0 default_value: 0 @@ -647,6 +657,7 @@ components: - write - name: - f20 + - FP20 nbits: 32 value: 0 default_value: 0 @@ -665,6 +676,7 @@ components: - write - name: - f22 + - FP22 nbits: 32 value: 0 default_value: 0 @@ -683,6 +695,7 @@ components: - write - name: - f24 + - FP24 nbits: 32 value: 0 default_value: 0 @@ -701,6 +714,7 @@ components: - write - name: - f26 + - FP26 nbits: 32 value: 0 default_value: 0 @@ -719,6 +733,7 @@ components: - write - name: - f28 + - FP28 nbits: 32 value: 0 default_value: 0 @@ -737,6 +752,7 @@ components: - write - name: - f30 + - FP30 nbits: 32 value: 0 default_value: 0 From b240da29aa543853a776f9161bd44f4d70ca9702 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Mon, 16 Mar 2026 13:58:29 +0100 Subject: [PATCH 19/85] fix(IO): fix kbd_read_char returning incorrect value --- src/core/executor/IO.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/executor/IO.mjs b/src/core/executor/IO.mjs index daa1832ad..953d38273 100644 --- a/src/core/executor/IO.mjs +++ b/src/core/executor/IO.mjs @@ -58,7 +58,7 @@ export function kbd_read_char(keystroke, params) { } writeRegister(BigInt(value), params.indexComp, params.indexElem); - return value; + return keystroke[0] || ""; } export function kbd_read_int(keystroke, params) { From de92c761f5d5da79107701990506790f01a1814f Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Mon, 16 Mar 2026 14:00:36 +0100 Subject: [PATCH 20/85] fix(IO): fix kbd_read_double erroring out on the CLI --- src/core/executor/IO.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/executor/IO.mjs b/src/core/executor/IO.mjs index 953d38273..2ae7eb7b8 100644 --- a/src/core/executor/IO.mjs +++ b/src/core/executor/IO.mjs @@ -125,7 +125,7 @@ export function kbd_read_double(keystroke, params) { const value = parseFloat(keystroke, 10); // validate input - if (typeof document.app !== "undefined" && isNaN(value)) { + if (typeof document !== "undefined" && document.app && isNaN(value)) { show_notification( `Invalid input: '${keystroke}' is not a double`, "danger", From 9516080adde1a82089d35929dfe2ecce82b0c598 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Mon, 16 Mar 2026 14:09:43 +0100 Subject: [PATCH 21/85] fix(RISCV): fix many incorrect instruction definitions --- architecture/RISCV/RV32IMFD.yml | 120 +++++++----------------- architecture/RISCV/RV64IMFD.yml | 101 +++++++------------- architecture/RISCV/SRV32.yml | 157 ++++++++++++-------------------- architecture/RISCV/SRV64.yml | 140 ++++++++++++---------------- 4 files changed, 179 insertions(+), 339 deletions(-) diff --git a/architecture/RISCV/RV32IMFD.yml b/architecture/RISCV/RV32IMFD.yml index 16f1050b5..34656289f 100644 --- a/architecture/RISCV/RV32IMFD.yml +++ b/architecture/RISCV/RV32IMFD.yml @@ -1733,7 +1733,7 @@ instructions: - field: funct7 value: "0100000" definition: | - if (shamt > 0) registers[rd] = CAPI.FP.int2uint(registers[rs1] >> shamt); + if (shamt > 0) registers[rd] = CAPI.FP.int2uint(CAPI.FP.uint2int(registers[rs1]) >> shamt); help: Performs arithmetic right shift on the value in register rs1 by the shift amount held in the lower 5 bits of the immediate. - name: srli @@ -2108,11 +2108,9 @@ instructions: - field: funct3 value: "101" definition: | - if (registers[rs2] != 0) { - registers[rd] = BigInt.asIntN( - 32, - (BigInt.asUintN(32, BigInt(registers[rs1])) / BigInt.asUintN(32, BigInt(registers[rs2]))) - ); + const div = registers[rs2] + if (div != 0) { + registers[rd] = CAPI.FP.int2uint(registers[rs1] / div); } else CAPI.VALIDATION.raise('Division by zero not allowed'); help: Perform an XLEN-bit by XLEN-bit unsigned integer division of rs1 by @@ -2142,12 +2140,8 @@ instructions: - field: funct3 value: "001" definition: | - registers[rd] = BigInt.asIntN( - 32, - BigInt.asIntN( - 64, - BigInt.asIntN(32, BigInt(registers[rs1])) * BigInt.asIntN(32, BigInt(registers[rs2])), - ) >> 32n, + registers[rd] = CAPI.FP.int2uint( + (CAPI.FP.uint2int(registers[rs1]) * CAPI.FP.uint2int(registers[rs2])) >> 32n, ); help: Performs an XLEN-bit by XLEN-bit multiplication of signed rs1 by signed rs2 and places the lower XLEN bits in the destination register. @@ -2162,12 +2156,8 @@ instructions: - field: funct3 value: "010" definition: | - registers[rd] = BigInt.asIntN( - 32, - BigInt.asIntN( - 64, - BigInt.asIntN(32, BigInt(registers[rs1])) * BigInt.asUintN(32, BigInt(registers[rs2])), - ) >> 32n, + registers[rd] = CAPI.FP.int2uint( + (CAPI.FP.uint2int(registers[rs1]) * registers[rs2]) >> 32n, ); help: Performs an XLEN-bit by XLEN-bit multiplication of signed rs1 by unsigned rs2 and places the upper XLEN bits in the destination register. @@ -2182,12 +2172,8 @@ instructions: - field: funct3 value: "011" definition: | - registers[rd] = BigInt.asIntN( - 32, - BigInt.asUintN( - 64, - BigInt.asUintN(32, BigInt(registers[rs1])) * BigInt.asUintN(32, BigInt(registers[rs2])), - ) >> 32n, + registers[rd] = CAPI.FP.int2uint( + (registers[rs1] * registers[rs2]) >> 32n, ); help: Performs an XLEN-bit by XLEN-bit multiplication of unsigned rs1 by unsigned rs2 and places the upper XLEN bits in the destination register. @@ -2321,9 +2307,9 @@ instructions: optional: true order: 3 postoperation: | - registers[rd] = CAPI.ARCH.toBigInt(registers[rd],'NaNBfloat32_64'); + registers[rd] = CAPI.ARCH.toBigInt(result,'NaNBfloat32_64'); definition: | - registers[rd] = CAPI.FP.uint2int(registers[rs1]) + const result = CAPI.FP.uint2int(registers[rs1]) help: Converts a 32-bit signed integer, in integer register rs1 into a floating-point number in floating-point register rd. - name: fcvt.s.wu @@ -2439,17 +2425,11 @@ instructions: - field: rd type: INT-Reg preoperation: | - let result, rs1Number, rs2Number, type_rs1, type_rs2; + let rs1Number, rs2Number, type_rs1, type_rs2; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - postoperation: | - if (CAPI.FP.isNaN(result)) { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); - } else { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaNBfloat32_64"); - } definition: | - result = (rs1Number === rs2Number) ? 1 : 0; + registers[rd] = (rs1Number === rs2Number)? 1n : 0n; help: Performs a quiet equal comparison between floating-point registers rs1 and rs2 and record the Boolean result in integer register rd. Only signaling NaN inputs cause an Invalid Operation exception. The result is @@ -2467,17 +2447,11 @@ instructions: - field: rd type: INT-Reg preoperation: | - let result, rs1Number, rs2Number, type_rs1, type_rs2; + let rs1Number, rs2Number, type_rs1, type_rs2; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - postoperation: | - if (CAPI.FP.isNaN(result)) { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); - } else { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaNBfloat32_64"); - } definition: | - result = (rs1Number <= rs2Number) ? 1 : 0; + registers[rd] = (rs1Number <= rs2Number)? 1n : 0n; help: Performs a quiet less or equal comparison between floating-point registers rs1 and rs2 and record the Boolean result in integer register rd. Only signaling NaN inputs cause an Invalid Operation exception. The @@ -2495,17 +2469,11 @@ instructions: - field: rd type: INT-Reg preoperation: | - let result, rs1Number, rs2Number, type_rs1, type_rs2; + let rs1Number, rs2Number, type_rs1, type_rs2; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - postoperation: | - if (CAPI.FP.isNaN(result)) { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); - } else { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaNBfloat32_64"); - } definition: | - result = (rs1Number < rs2Number) ? 1 : 0; + registers[rd] = (rs1Number < rs2Number)? 1n : 0n; help: Performs a quiet less comparison between floating-point registers rs1 and rs2 and record the Boolean result in integer register rd. Only signaling NaN inputs cause an Invalid Operation exception. The result is @@ -2724,9 +2692,8 @@ instructions: optional: true order: 3 preoperation: | - let result, rs1Number, rs2Number, type_rs1, type_rs2; + let result, rs1Number, type_rs1; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); - [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); postoperation: | if (CAPI.FP.isNaN(result)) { registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); @@ -2738,7 +2705,7 @@ instructions: result = Math.sqrt(rs1Number); } else { CAPI.VALIDATION.raise( - 'Square root of a negative number is not allowed.' + "Square root of a negative number is not allowed." ); } help: Perform single-precision square root. @@ -2785,7 +2752,7 @@ instructions: let result, rs1Number, rs2Number, rs3Number, type_rs1, type_rs2, type_rs3; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(rs3); + [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(registers[rs3]); postoperation: | if (CAPI.FP.isNaN(result)) { registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); @@ -2812,7 +2779,7 @@ instructions: let result, rs1Number, rs2Number, rs3Number, type_rs1, type_rs2, type_rs3; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(rs3); + [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(registers[rs3]); postoperation: | if (CAPI.FP.isNaN(result)) { registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); @@ -2839,7 +2806,7 @@ instructions: let result, rs1Number, rs2Number, rs3Number, type_rs1, type_rs2, type_rs3; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(rs3); + [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(registers[rs3]); postoperation: | if (CAPI.FP.isNaN(result)) { registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); @@ -2866,7 +2833,7 @@ instructions: let result, rs1Number, rs2Number, rs3Number, type_rs1, type_rs2, type_rs3; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(rs3); + [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(registers[rs3]); postoperation: | if (CAPI.FP.isNaN(result)) { registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); @@ -3033,8 +3000,8 @@ instructions: - field: rs1 type: INT-Reg preoperation: | - let result, rs1Number, type_rs1; - [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); + let result, rs1Number; + rs1Number = registers[rs1]; postoperation: | registers[rd] = CAPI.ARCH.toBigInt(result, 'float64'); definition: | @@ -3207,17 +3174,11 @@ instructions: - field: rd type: INT-Reg preoperation: | - let result, rs1Number, rs2Number, type_rs1, type_rs2; + let rs1Number, rs2Number, type_rs1, type_rs2; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - postoperation: | - if (CAPI.FP.isNaN(result)) { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaN64"); - } else { - registers[rd] = CAPI.ARCH.toBigInt(result, "float64"); - } definition: | - registers[rd] = (rs1Number == rs2Number) ? 1 : 0; + registers[rd] = (rs1Number === rs2Number)? 1n : 0n; help: Performs a quiet equal comparison between double-precision floating-point registers rs1 and rs2 and record the Boolean result in integer register rd. Only signaling NaN inputs cause an Invalid @@ -3238,14 +3199,8 @@ instructions: let rs1Number, rs2Number, type_rs1, type_rs2; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - postoperation: | - if (CAPI.FP.isNaN(result)) { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaN64"); - } else { - registers[rd] = CAPI.ARCH.toBigInt(result, "float64"); - } definition: | - registers[rd] = (rs1Number <= rs2Number) ? 1 : 0; + registers[rd] = (rs1Number <= rs2Number)? 1n : 0n; help: Performs a quiet less or equal comparison between double-precision floating-point registers rs1 and rs2 and record the Boolean result in integer register rd. Only signaling NaN inputs cause an Invalid @@ -3266,14 +3221,8 @@ instructions: let rs1Number, rs2Number, type_rs1, type_rs2; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - postoperation: | - if (CAPI.FP.isNaN(result)) { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaN64"); - } else { - registers[rd] = CAPI.ARCH.toBigInt(result, "float64"); - } definition: | - registers[rd] = (rs1Number < rs2Number) ? 1 : 0; + registers[rd] = (rs1Number < rs2Number) ? 1n : 0n; help: Performs a quiet less comparison between double-precision floating-point registers rs1 and rs2 and record the Boolean result in integer register rd. Only signaling NaN inputs cause an Invalid @@ -3394,7 +3343,7 @@ instructions: registers[rd] = CAPI.ARCH.toBigInt(result, "float64"); } definition: | - registers[rd] = (rs2Number > 0) ? -Math.abs(rs1Number) : +Math.abs(rs1Number); + result = (rs2Number > 0) ? -Math.abs(rs1Number) : +Math.abs(rs1Number); help: Produce a result that takes all bits except the sign bit from rs1. The result's sign bit is opposite of rs2's sign bit. @@ -3420,7 +3369,7 @@ instructions: definition: | let a = rs1Number < 0; let b = rs2Number < 0; - registers[rd] = a ^ b ? -Math.abs(rs1Number) : Math.abs(rs1Number); + result = a ^ b ? -Math.abs(rs1Number) : Math.abs(rs1Number); help: Produce a result that takes all bits except the sign bit from rs1. The result's sign bit is XOR of sign bit of rs1 and rs2. @@ -3441,9 +3390,8 @@ instructions: optional: true order: 3 preoperation: | - let result, rs1Number, rs2Number, type_rs1, type_rs2; + let result, rs1Number, type_rs1; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); - [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); postoperation: | if (CAPI.FP.isNaN(result)) { registers[rd] = CAPI.ARCH.toBigInt(result, "NaN64"); @@ -3452,7 +3400,7 @@ instructions: } definition: | if (rs1Number >= 0) { - registers[rd] = Math.sqrt(rs1Number); + result = Math.sqrt(rs1Number); } else { CAPI.VALIDATION.raise( "Square root of a negative number is not allowed." diff --git a/architecture/RISCV/RV64IMFD.yml b/architecture/RISCV/RV64IMFD.yml index 5604d4265..a3de7308c 100644 --- a/architecture/RISCV/RV64IMFD.yml +++ b/architecture/RISCV/RV64IMFD.yml @@ -1830,7 +1830,7 @@ instructions: - field: funct7 value: "0000000" definition: | - if (shamt > 0) rd = (rs1 >> shamt); + if (shamt > 0) registers[rd] = CAPI.FP.int2uint(registers[rs1] >> shamt); help: Performs logical right shift on the value in register rs1 by the shift amount held in the lower 5 bits of the immediate. - name: srliw @@ -1846,7 +1846,7 @@ instructions: definition: | if (shamt > 0) { const temp = - ((BigInt(registers[rs1]) & 0xffffffffn) >> BigInt(shamt)) & 0xffffffffn; + ((registers[rs1] & 0xffffffffn) >> shamt) & 0xffffffffn; registers[rd] = temp & 0x80000000n ? temp | 0xffffffff00000000n : temp; registers[rd] = CAPI.FP.int2uint(registers[rd]); } @@ -2098,8 +2098,8 @@ instructions: - field: funct3 value: "000" definition: | - const temp = (BigInt(rs1) + BigInt(rs2)) & 0xFFFFFFFFn; - rd = temp & 0x80000000n ? temp | 0xFFFFFFFF00000000n : temp; + const temp = (registers[rs1] + registers[rs2]) & 0xFFFFFFFFn; + registers[rd] = temp & 0x80000000n ? temp | 0xFFFFFFFF00000000n : temp; help: Subtract the 32-bit of registers rs1 and 32-bit of register rs2 and stores the result in rd. Arithmetic overflow is ignored and the low 32-bits of the result is sign-extended to 64-bits and written to the @@ -2293,10 +2293,11 @@ instructions: - field: funct3 value: "101" definition: | - if (registers[rs2] != 0) { + const div = registers[rs2] + if (div != 0) { registers[rd] = BigInt.asIntN( 32, - (BigInt.asUintN(32, BigInt(registers[rs1])) / BigInt.asUintN(32, BigInt(registers[rs2]))) + (BigInt.asUintN(32, registers[rs1]) / BigInt.asUintN(32, div)) ); } else CAPI.VALIDATION.raise('Division by zero not allowed'); @@ -2327,7 +2328,7 @@ instructions: - field: funct3 value: "001" definition: | - registers[rd] = BigInt.asIntN( + registers[rd] = BigInt.asUintN( 32, BigInt.asIntN( 64, @@ -2503,9 +2504,9 @@ instructions: optional: true order: 3 postoperation: | - registers[rd] = CAPI.ARCH.toBigInt(registers[rd],'NaNBfloat32_64'); + registers[rd] = CAPI.ARCH.toBigInt(result,'NaNBfloat32_64'); definition: | - registers[rd] = CAPI.FP.uint2int(registers[rs1]) + result = CAPI.FP.uint2int(registers[rs1]) help: Converts a 32-bit signed integer, in integer register rs1 into a floating-point number in floating-point register rd. - name: fcvt.s.wu @@ -2621,17 +2622,11 @@ instructions: - field: rd type: INT-Reg preoperation: | - let result, rs1Number, rs2Number, type_rs1, type_rs2; + let rs1Number, rs2Number, type_rs1, type_rs2; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - postoperation: | - if (CAPI.FP.isNaN(result)) { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); - } else { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaNBfloat32_64"); - } definition: | - result = (rs1Number === rs2Number) ? 1 : 0; + registers[rd] = (rs1Number === rs2Number)? 1n : 0n; help: Performs a quiet equal comparison between floating-point registers rs1 and rs2 and record the Boolean result in integer register rd. Only signaling NaN inputs cause an Invalid Operation exception. The result is @@ -2649,17 +2644,11 @@ instructions: - field: rd type: INT-Reg preoperation: | - let result, rs1Number, rs2Number, type_rs1, type_rs2; + let rs1Number, rs2Number, type_rs1, type_rs2; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - postoperation: | - if (CAPI.FP.isNaN(result)) { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); - } else { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaNBfloat32_64"); - } definition: | - result = (rs1Number <= rs2Number) ? 1 : 0; + registers[rd] = (rs1Number <= rs2Number)? 1n : 0n; help: Performs a quiet equal comparison between floating-point registers rs1 and rs2 and record the Boolean result in integer register rd. Only signaling NaN inputs cause an Invalid Operation exception. The result is @@ -2677,17 +2666,11 @@ instructions: - field: rd type: INT-Reg preoperation: | - let result, rs1Number, rs2Number, type_rs1, type_rs2; + let rs1Number, rs2Number, type_rs1, type_rs2; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - postoperation: | - if (CAPI.FP.isNaN(result)) { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); - } else { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaNBfloat32_64"); - } definition: | - result = (rs1Number < rs2Number) ? 1 : 0; + registers[rd] = (rs1Number < rs2Number)? 1n : 0n; help: Performs a quiet less or equal comparison between floating-point registers rs1 and rs2 and record the Boolean result in integer register rd. Only signaling NaN inputs cause an Invalid Operation exception. The @@ -2906,9 +2889,8 @@ instructions: optional: true order: 3 preoperation: | - let result, rs1Number, rs2Number, type_rs1, type_rs2; + let result, rs1Number, type_rs1; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); - [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); postoperation: | if (CAPI.FP.isNaN(result)) { registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); @@ -2920,7 +2902,7 @@ instructions: result = Math.sqrt(rs1Number); } else { CAPI.VALIDATION.raise( - 'Square root of a negative number is not allowed.' + "Square root of a negative number is not allowed." ); } help: Perform single-precision square root. @@ -2967,7 +2949,7 @@ instructions: let result, rs1Number, rs2Number, rs3Number, type_rs1, type_rs2, type_rs3; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(rs3); + [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(registers[rs3]); postoperation: | if (CAPI.FP.isNaN(result)) { registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); @@ -2994,7 +2976,7 @@ instructions: let result, rs1Number, rs2Number, rs3Number, type_rs1, type_rs2, type_rs3; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(rs3); + [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(registers[rs3]); postoperation: | if (CAPI.FP.isNaN(result)) { registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); @@ -3021,7 +3003,7 @@ instructions: let result, rs1Number, rs2Number, rs3Number, type_rs1, type_rs2, type_rs3; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(rs3); + [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(registers[rs3]); postoperation: | if (CAPI.FP.isNaN(result)) { registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); @@ -3048,7 +3030,7 @@ instructions: let result, rs1Number, rs2Number, rs3Number, type_rs1, type_rs2, type_rs3; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(rs3); + [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(registers[rs3]); postoperation: | if (CAPI.FP.isNaN(result)) { registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); @@ -3213,8 +3195,8 @@ instructions: - field: rs1 type: INT-Reg preoperation: | - let result, rs1Number, type_rs1; - [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); + let result, rs1Number; + rs1Number = registers[rs1]; postoperation: | registers[rd] = CAPI.ARCH.toBigInt(result, 'float64'); definition: | @@ -3387,17 +3369,11 @@ instructions: - field: rd type: INT-Reg preoperation: | - let result, rs1Number, rs2Number, type_rs1, type_rs2; + let rs1Number, rs2Number, type_rs1, type_rs2; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - postoperation: | - if (CAPI.FP.isNaN(result)) { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaN64"); - } else { - registers[rd] = CAPI.ARCH.toBigInt(result, "float64"); - } definition: | - registers[rd] = (rs1Number == rs2Number) ? 1 : 0; + registers[rd] = (rs1Number === rs2Number)? 1n : 0n; help: Performs a quiet equal comparison between double-precision floating-point registers rs1 and rs2 and record the Boolean result in integer register rd. Only signaling NaN inputs cause an Invalid @@ -3418,14 +3394,8 @@ instructions: let rs1Number, rs2Number, type_rs1, type_rs2; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - postoperation: | - if (CAPI.FP.isNaN(result)) { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaN64"); - } else { - registers[rd] = CAPI.ARCH.toBigInt(result, "float64"); - } definition: | - registers[rd] = (rs1Number <= rs2Number) ? 1 : 0; + registers[rd] = (rs1Number <= rs2Number)? 1n : 0n; help: Performs a quiet less or equal comparison between double-precision floating-point registers rs1 and rs2 and record the Boolean result in integer register rd. Only signaling NaN inputs cause an Invalid @@ -3446,14 +3416,8 @@ instructions: let rs1Number, rs2Number, type_rs1, type_rs2; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - postoperation: | - if (CAPI.FP.isNaN(result)) { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaN64"); - } else { - registers[rd] = CAPI.ARCH.toBigInt(result, "float64"); - } definition: | - registers[rd] = (rs1Number < rs2Number) ? 1 : 0; + registers[rd] = (rs1Number < rs2Number)? 1n : 0n; help: Performs a quiet less comparison between double-precision floating-point registers rs1 and rs2 and record the Boolean result in integer register rd. Only signaling NaN inputs cause an Invalid @@ -3574,7 +3538,7 @@ instructions: registers[rd] = CAPI.ARCH.toBigInt(result, "float64"); } definition: | - registers[rd] = (rs2Number > 0) ? -Math.abs(rs1Number) : +Math.abs(rs1Number); + result = (rs2Number > 0) ? -Math.abs(rs1Number) : +Math.abs(rs1Number); help: Produce a result that takes all bits except the sign bit from rs1. The result's sign bit is opposite of rs2's sign bit. @@ -3600,7 +3564,7 @@ instructions: definition: | let a = rs1Number < 0; let b = rs2Number < 0; - registers[rd] = a ^ b ? -Math.abs(rs1Number) : Math.abs(rs1Number); + result = a ^ b ? -Math.abs(rs1Number) : Math.abs(rs1Number); help: Produce a result that takes all bits except the sign bit from rs1. The result's sign bit is XOR of sign bit of rs1 and rs2. @@ -3621,9 +3585,8 @@ instructions: optional: true order: 3 preoperation: | - let result, rs1Number, rs2Number, type_rs1, type_rs2; + let result, rs1Number, type_rs1; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); - [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); postoperation: | if (CAPI.FP.isNaN(result)) { registers[rd] = CAPI.ARCH.toBigInt(result, "NaN64"); @@ -3632,7 +3595,7 @@ instructions: } definition: | if (rs1Number >= 0) { - registers[rd] = Math.sqrt(rs1Number); + result = Math.sqrt(rs1Number); } else { CAPI.VALIDATION.raise( "Square root of a negative number is not allowed." diff --git a/architecture/RISCV/SRV32.yml b/architecture/RISCV/SRV32.yml index 4857310d4..39758f959 100644 --- a/architecture/RISCV/SRV32.yml +++ b/architecture/RISCV/SRV32.yml @@ -2284,7 +2284,7 @@ instructions: - field: funct3 value: "010" definition: | - registers[rd] = (CAPI.FP.uint2int(registers[rs1]) < CAPI.FP.uint2int(imm)) ? 1 : 0; + registers[rd] = (CAPI.FP.uint2int(registers[rs1]) < CAPI.FP.uint2int(imm)) ? 1n : 0n; help: Place the value 1 in register rd if register rs1 is less than the signextended immediate when both are treated as signed numbers, else 0 is written to rd. - name: sltiu @@ -2297,7 +2297,7 @@ instructions: - field: funct3 value: "011" definition: | - registers[rd] = (CAPI.FP.int2uint(registers[rs1]) < CAPI.FP.int2uint(imm)) ? 1: 0; + registers[rd] = (CAPI.FP.int2uint(registers[rs1]) < CAPI.FP.int2uint(imm)) ? 1n: 0n; help: Place the value 1 in register rd if register rs1 is less than the immediate when both are treated as unsigned numbers, else 0 is written to rd. - name: srai extension: I @@ -2421,7 +2421,7 @@ instructions: - field: funct3 value: "010" definition: | - registers[rd] = (CAPI.FP.uint2int(registers[rs1]) < CAPI.FP.uint2int(registers[rs2])) ? 1 : 0; + registers[rd] = (CAPI.FP.uint2int(registers[rs1]) < CAPI.FP.uint2int(registers[rs2])) ? 1n : 0n; help: Place the value 1 in register rd if register rs1 is less than register rs2 when both are treated as signed numbers, else 0 is written to rd. - name: sltu @@ -2676,13 +2676,11 @@ instructions: - field: funct3 value: "101" definition: | - if (registers[rs2] != 0) { - registers[rd] = BigInt.asIntN( - 32, - (BigInt.asUintN(32, BigInt(registers[rs1])) / BigInt.asUintN(32, BigInt(registers[rs2]))) - ); + const div = registers[rs2] + if (div != 0) { + registers[rd] = CAPI.FP.int2uint(registers[rs1] / div); } - else CAPI.VALIDATION.raise('Division by registers[zero] not allowed'); + else CAPI.VALIDATION.raise('Division by zero not allowed'); help: Perform an XLEN-bit by XLEN-bit unsigned integer division of rs1 by rs2, rounding towards zero. - name: mul extension: M @@ -2709,12 +2707,8 @@ instructions: - field: funct3 value: "001" definition: | - registers[rd] = BigInt.asIntN( - 32, - BigInt.asIntN( - 64, - BigInt.asIntN(32, BigInt(registers[rs1])) * BigInt.asIntN(32, BigInt(registers[rs2])), - ) >> 32n, + registers[rd] = CAPI.FP.int2uint( + (CAPI.FP.uint2int(registers[rs1]) * CAPI.FP.uint2int(registers[rs2])) >> 32n, ); help: Performs an XLEN-bit by XLEN-bit multiplication of signed rs1 by signed rs2 and places the lower XLEN bits in the destination register. - name: mulhsu @@ -2728,12 +2722,8 @@ instructions: - field: funct3 value: "010" definition: | - registers[rd] = BigInt.asIntN( - 32, - BigInt.asIntN( - 64, - BigInt.asIntN(32, BigInt(registers[rs1])) * BigInt.asUintN(32, BigInt(registers[rs2])), - ) >> 32n, + registers[rd] = CAPI.FP.int2uint( + (CAPI.FP.uint2int(registers[rs1]) * registers[rs2]) >> 32n, ); help: Performs an XLEN-bit by XLEN-bit multiplication of signed rs1 by unsigned rs2 and places the upper XLEN bits in the destination register. - name: mulhu @@ -2747,12 +2737,8 @@ instructions: - field: funct3 value: "011" definition: | - registers[rd] = BigInt.asIntN( - 32, - BigInt.asUintN( - 64, - BigInt.asUintN(32, BigInt(registers[rs1])) * BigInt.asUintN(32, BigInt(registers[rs2])), - ) >> 32n, + registers[rd] = CAPI.FP.int2uint( + (registers[rs1] * registers[rs2]) >> 32n, ); help: Performs an XLEN-bit by XLEN-bit multiplication of unsigned rs1 by unsigned rs2 and places the upper XLEN bits in the destination register. - name: rem @@ -2884,9 +2870,9 @@ instructions: optional: true order: 3 postoperation: | - registers[rd] = CAPI.ARCH.toBigInt(registers[rd],'NaNBfloat32_64'); + registers[rd] = CAPI.ARCH.toBigInt(result,'NaNBfloat32_64'); definition: | - registers[rd] = CAPI.FP.uint2int(registers[rs1]) + result = CAPI.FP.uint2int(registers[rs1]) help: Converts a 32-bit signed integer, in integer register rs1 into a floating-point number in floating-point register rd. - name: fcvt.s.wu @@ -3008,18 +2994,11 @@ instructions: - field: rd type: INT-Reg preoperation: | - let result, rs1Number, rs2Number, type_rs1, type_rs2; + let rs1Number, rs2Number, type_rs1, type_rs2; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - postoperation: | - if (isNaN(result)) { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); - } else { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaNBfloat32_64"); - } - definition: | - result = (rs1Number === rs2Number) ? 1 : 0; + registers[rd] = (rs1Number === rs2Number)? 1n : 0n; help: Performs a quiet equal comparison between floating-point registers rs1 and rs2 and record the Boolean result in integer register rd. Only signaling NaN inputs cause an Invalid Operation exception. The result is 0 if either operand is NaN. - name: fle.s @@ -3035,18 +3014,11 @@ instructions: - field: rd type: INT-Reg preoperation: | - let result, rs1Number, rs2Number, type_rs1, type_rs2; + let rs1Number, rs2Number, type_rs1, type_rs2; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - postoperation: | - if (isNaN(result)) { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); - } else { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaNBfloat32_64"); - } - definition: | - result = (rs1Number <= rs2Number) ? 1 : 0; + registers[rd] = (rs1Number <= rs2Number)? 1n : 0n; help: Performs a quiet less or equal comparison between floating-point registers rs1 and rs2 and record the Boolean result in integer register rd. Only signaling NaN inputs cause an Invalid Operation exception. The result is 0 if either operand is NaN. - name: flt.s @@ -3062,18 +3034,11 @@ instructions: - field: rd type: INT-Reg preoperation: | - let result, rs1Number, rs2Number, type_rs1, type_rs2; + let rs1Number, rs2Number, type_rs1, type_rs2; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - postoperation: | - if (isNaN(result)) { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); - } else { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaNBfloat32_64"); - } - definition: | - result = (rs1Number < rs2Number) ? 1 : 0; + registers[rd] = (rs1Number < rs2Number)? 1n : 0n; help: Performs a quiet less comparison between floating-point registers rs1 and rs2 and record the Boolean result in integer register rd. Only signaling NaN inputs cause an Invalid Operation exception. The result is 0 if either operand is NaN. - name: fmax.s @@ -3295,9 +3260,8 @@ instructions: optional: true order: 3 preoperation: | - let result, rs1Number, rs2Number, type_rs1, type_rs2; + let result, rs1Number, type_rs1; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); - [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); postoperation: | if (isNaN(result)) { registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); @@ -3310,7 +3274,7 @@ instructions: result = Math.sqrt(rs1Number); } else { CAPI.VALIDATION.raise( - 'Square root of a negative number is not allowed.' + "Square root of a negative number is not allowed." ); } help: Perform single-precision square root. @@ -3359,7 +3323,7 @@ instructions: let result, rs1Number, rs2Number, rs3Number, type_rs1, type_rs2, type_rs3; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(rs3); + [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(registers[rs3]); postoperation: | if (isNaN(result)) { registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); @@ -3388,7 +3352,7 @@ instructions: let result, rs1Number, rs2Number, rs3Number, type_rs1, type_rs2, type_rs3; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(rs3); + [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(registers[rs3]); postoperation: | if (isNaN(result)) { registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); @@ -3417,7 +3381,7 @@ instructions: let result, rs1Number, rs2Number, rs3Number, type_rs1, type_rs2, type_rs3; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(rs3); + [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(registers[rs3]); postoperation: | if (isNaN(result)) { registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); @@ -3446,7 +3410,7 @@ instructions: let result, rs1Number, rs2Number, rs3Number, type_rs1, type_rs2, type_rs3; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(rs3); + [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(registers[rs3]); postoperation: | if (isNaN(result)) { registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); @@ -3606,8 +3570,8 @@ instructions: - field: rs1 type: INT-Reg preoperation: | - let result, rs1Number, type_rs1; - [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); + let result, rs1Number; + rs1Number = registers[rs1]; postoperation: | registers[rd] = CAPI.ARCH.toBigInt(result, 'float64'); definition: | @@ -3680,7 +3644,7 @@ instructions: result = rs1Number; // TODO: This doesn't seem right, check the RISC-V manual help: Converts double floating-point register in rs1 into a floating-point number in floating-point register rd. - - name: fcvt.w.d + - name: fcvt.w.d extension: D template: R-Conversion fields: @@ -3714,7 +3678,7 @@ instructions: result = CAPI.FP.int2uint(parseInt(rs1Number)); help: Converts a double-precision floating-point number in floating-point register rs1 to a signed 32-bit integer, in integer register rd. - - name: fcvt.wu.d + - name: fcvt.wu.d extension: D template: R-Conversion fields: @@ -3748,7 +3712,7 @@ instructions: result = CAPI.FP.int2uint(parseInt(rs1Number)); help: Converts a double-precision floating-point number in floating-point register rs1 to a unsigned 32-bit integer, in integer register rd. - - name: fdiv.d + - name: fdiv.d extension: D template: R-Double fields: @@ -3775,7 +3739,7 @@ instructions: definition: | result = rs1Number / rs2Number; help: Perform double-precision floating-point division. - - name: feq.d + - name: feq.d extension: D template: R-Double fields: @@ -3788,16 +3752,14 @@ instructions: - field: rd type: INT-Reg preoperation: | - let result, rs1Number, rs2Number, type_rs1, type_rs2; + let rs1Number, rs2Number, type_rs1, type_rs2; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - postoperation: | - definition: | - registers[rd] = (rs1Number == rs2Number) ? 1 : 0; + registers[rd] = (rs1Number === rs2Number)? 1n : 0n; help: Performs a quiet equal comparison between double-precision floating-point registers rs1 and rs2 and record the Boolean result in integer register rd. Only signaling NaN inputs cause an Invalid Operation exception. The result is 0 if either operand is NaN. - - name: fle.d + - name: fle.d extension: D template: R-Double fields: @@ -3813,13 +3775,11 @@ instructions: let rs1Number, rs2Number, type_rs1, type_rs2; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - postoperation: | - definition: | - registers[rd] = (rs1Number <= rs2Number) ? 1 : 0; + registers[rd] = (rs1Number <= rs2Number)? 1n : 0n; help: Performs a quiet less or equal comparison between double-precision floating-point registers rs1 and rs2 and record the Boolean result in integer register rd. Only signaling NaN inputs cause an Invalid Operation exception. The result is 0 if either operand is NaN. - - name: flt.d + - name: flt.d extension: D template: R-Double fields: @@ -3835,13 +3795,11 @@ instructions: let rs1Number, rs2Number, type_rs1, type_rs2; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - postoperation: | - definition: | - registers[rd] = (rs1Number < rs2Number) ? 1 : 0; + registers[rd] = (rs1Number < rs2Number)? 1n : 0n; help: Performs a quiet less comparison between double-precision floating-point registers rs1 and rs2 and record the Boolean result in integer register rd. Only signaling NaN inputs cause an Invalid Operation exception. The result is 0 if either operand is NaN. - - name: fmax.d + - name: fmax.d extension: D template: R-Double fields: @@ -3866,7 +3824,7 @@ instructions: result = Math.max(rs1Number, rs2Number); help: Write the larger of double precision data in rs1 and rs2 to rd. - - name: fmin.d + - name: fmin.d extension: D template: R-Double fields: @@ -3891,7 +3849,7 @@ instructions: result = Math.min(rs1Number, rs2Number); help: Write the smaller of double precision data in rs1 and rs2 to rd. - - name: fmul.d + - name: fmul.d extension: D template: R-Double fields: @@ -3919,7 +3877,7 @@ instructions: result = rs1Number * rs2Number; help: Perform double-precision floating-point addition. - - name: fsgnj.d + - name: fsgnj.d extension: D template: R-Double fields: @@ -3943,7 +3901,7 @@ instructions: definition: | registers[rd] = (rs2Number > 0) ? Math.abs(rs1Number) : -Math.abs(rs1Number); help: Perform double-precision floating-point multiplication. - - name: fsgnjn.d + - name: fsgnjn.d extension: D template: R-Double fields: @@ -3965,10 +3923,10 @@ instructions: } definition: | - registers[rd] = (rs2Number > 0) ? -Math.abs(rs1Number) : +Math.abs(rs1Number); + result = (rs2Number > 0) ? -Math.abs(rs1Number) : +Math.abs(rs1Number); help: Produce a result that takes all bits except the sign bit from rs1. The result's sign bit is opposite of rs2's sign bit. - - name: fsgnjx.d + - name: fsgnjx.d extension: D template: R-Double fields: @@ -3992,9 +3950,9 @@ instructions: definition: | let a = rs1Number < 0; let b = rs2Number < 0; - registers[rd] = a ^ b ? -Math.abs(rs1Number) : Math.abs(rs1Number); + result = a ^ b ? -Math.abs(rs1Number) : Math.abs(rs1Number); help: Produce a result that takes all bits except the sign bit from rs1. The result's sign bit is XOR of sign bit of rs1 and rs2. - - name: fsqrt.d + - name: fsqrt.d extension: D template: R-Double fields: @@ -4012,9 +3970,8 @@ instructions: optional: true order: 3 preoperation: | - let result, rs1Number, rs2Number, type_rs1, type_rs2; + let result, rs1Number, type_rs1; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); - [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); postoperation: | if (isNaN(result)) { registers[rd] = CAPI.ARCH.toBigInt(result, "NaN64"); @@ -4024,14 +3981,14 @@ instructions: definition: | if (rs1Number >= 0) { - registers[rd] = Math.sqrt(rs1Number); + result = Math.sqrt(rs1Number); } else { CAPI.VALIDATION.raise( "Square root of a negative number is not allowed." ); } help: Perform double-precision square root. - - name: fsub.d + - name: fsub.d extension: D template: R-Double fields: @@ -4059,7 +4016,7 @@ instructions: result = rs1Number - rs2Number; help: Perform double-precision floating-point addition. - - name: fmadd.d + - name: fmadd.d extension: D template: R4-Double fields: @@ -4089,7 +4046,7 @@ instructions: result = rs1Number * rs2Number + rs3Number; help: Perform double-precision fused multiply addition. - - name: fmsub.d + - name: fmsub.d extension: D template: R4-Double fields: @@ -4119,7 +4076,7 @@ instructions: result = rs1Number * rs2Number - rs3Number; help: Perform double-precision fused multiply subtraction. - - name: fnmadd.d + - name: fnmadd.d extension: D template: R4-Double fields: @@ -4149,7 +4106,7 @@ instructions: result = -rs1Number * rs2Number - rs3Number; help: Perform negated double-precision fused multiply addition. - - name: fnmsub.d + - name: fnmsub.d extension: D template: R4-Double fields: @@ -4179,7 +4136,7 @@ instructions: result = -rs1Number * rs2Number + rs3Number; help: Perform negated double-precision fused multiply subtraction. - - name: fsd + - name: fsd extension: D template: S fields: @@ -4197,7 +4154,7 @@ instructions: CAPI.MEM.addHint(registers[rs1] + imm, "float64", 64); help: Store a double-precision value from the floating-point registers to memory. Zifencei: - - name: fence.i + - name: fence.i extension: D template: Custom type: Syscall diff --git a/architecture/RISCV/SRV64.yml b/architecture/RISCV/SRV64.yml index e3d6e6cba..e6d6813a7 100644 --- a/architecture/RISCV/SRV64.yml +++ b/architecture/RISCV/SRV64.yml @@ -2282,7 +2282,7 @@ instructions: - field: funct3 value: "010" definition: | - registers[rd] = (CAPI.FP.uint2int(registers[rs1]) < CAPI.FP.uint2int(imm)) ? 1 : 0; + registers[rd] = (CAPI.FP.uint2int(registers[rs1]) < CAPI.FP.uint2int(imm)) ? 1n : 0n; help: Place the value 1 in register rd if register rs1 is less than the signextended immediate when both are treated as signed numbers, else 0 is written to rd. - name: sltiu @@ -2295,7 +2295,7 @@ instructions: - field: funct3 value: "011" definition: | - registers[rd] = (CAPI.FP.int2uint(registers[rs1]) < CAPI.FP.int2uint(imm)) ? 1: 0; + registers[rd] = (CAPI.FP.int2uint(registers[rs1]) < CAPI.FP.int2uint(imm)) ? 1n: 0n; help: Place the value 1 in register rd if register rs1 is less than the immediate when both are treated as unsigned numbers, else 0 is written to rd. - name: srai extension: I @@ -2309,7 +2309,7 @@ instructions: - field: funct7 value: "0100000" definition: | - if (shamt > 0) registers[rd] = CAPI.FP.int2uint(registers[rs1] >> shamt); + if (shamt > 0) registers[rd] = (BigInt.asIntN(64, registers[rs1]) >> shamt); help: Performs arithmetic right shift on the value in register rs1 by the shift amount held in the lower 5 bits of the immediate. - name: srli @@ -2419,7 +2419,7 @@ instructions: - field: funct3 value: "010" definition: | - registers[rd] = (CAPI.FP.uint2int(registers[rs1]) < CAPI.FP.uint2int(registers[rs2])) ? 1 : 0; + registers[rd] = (CAPI.FP.uint2int(registers[rs1]) < CAPI.FP.uint2int(registers[rs2])) ? 1n : 0n; help: Place the value 1 in register rd if register rs1 is less than register rs2 when both are treated as signed numbers, else 0 is written to rd. - name: sltu @@ -2655,13 +2655,14 @@ instructions: - field: funct3 value: "101" definition: | - if (registers[rs2] != 0) { + const div = registers[rs2] + if (div != 0) { registers[rd] = BigInt.asIntN( 32, - (BigInt.asUintN(32, BigInt(registers[rs1])) / BigInt.asUintN(32, BigInt(registers[rs2]))) + (BigInt.asUintN(32, registers[rs1]) / BigInt.asUintN(32, div)) ); } - else CAPI.VALIDATION.raise('Division by registers[zero] not allowed'); + else CAPI.VALIDATION.raise('Division by zero not allowed'); help: Perform an XLEN-bit by XLEN-bit unsigned integer division of rs1 by rs2, rounding towards zero. - name: mul extension: M @@ -2688,11 +2689,11 @@ instructions: - field: funct3 value: "001" definition: | - registers[rd] = BigInt.asIntN( + registers[rd] = BigInt.asUintN( 32, BigInt.asIntN( 64, - BigInt.asIntN(32, BigInt(registers[rs1])) * BigInt.asIntN(32, BigInt(registers[rs2])), + BigInt.asIntN(32, registers[rs1]) * BigInt.asIntN(32, registers[rs2]), ) >> 32n, ); help: Performs an XLEN-bit by XLEN-bit multiplication of signed rs1 by signed rs2 and places the lower XLEN bits in the destination register. @@ -2711,7 +2712,7 @@ instructions: 32, BigInt.asIntN( 64, - BigInt.asIntN(32, BigInt(registers[rs1])) * BigInt.asUintN(32, BigInt(registers[rs2])), + BigInt.asIntN(32, registers[rs1]) * BigInt.asUintN(32, registers[rs2]), ) >> 32n, ); help: Performs an XLEN-bit by XLEN-bit multiplication of signed rs1 by unsigned rs2 and places the upper XLEN bits in the destination register. @@ -2730,7 +2731,7 @@ instructions: 32, BigInt.asUintN( 64, - BigInt.asUintN(32, BigInt(registers[rs1])) * BigInt.asUintN(32, BigInt(registers[rs2])), + BigInt.asUintN(32, registers[rs1]) * BigInt.asUintN(32, registers[rs2]), ) >> 32n, ); help: Performs an XLEN-bit by XLEN-bit multiplication of unsigned rs1 by unsigned rs2 and places the upper XLEN bits in the destination register. @@ -2863,9 +2864,9 @@ instructions: optional: true order: 3 postoperation: | - registers[rd] = CAPI.ARCH.toBigInt(registers[rd],'NaNBfloat32_64'); + registers[rd] = CAPI.ARCH.toBigInt(result,'NaNBfloat32_64'); definition: | - registers[rd] = CAPI.FP.uint2int(registers[rs1]) + result = CAPI.FP.uint2int(registers[rs1]) help: Converts a 32-bit signed integer, in integer register rs1 into a floating-point number in floating-point register rd. - name: fcvt.s.wu @@ -2987,18 +2988,11 @@ instructions: - field: rd type: INT-Reg preoperation: | - let result, rs1Number, rs2Number, type_rs1, type_rs2; + let rs1Number, rs2Number, type_rs1, type_rs2; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - postoperation: | - if (isNaN(result)) { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); - } else { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaNBfloat32_64"); - } - definition: | - result = (rs1Number === rs2Number) ? 1 : 0; + registers[rd] = (rs1Number === rs2Number)? 1n : 0n; help: Performs a quiet equal comparison between floating-point registers rs1 and rs2 and record the Boolean result in integer register rd. Only signaling NaN inputs cause an Invalid Operation exception. The result is 0 if either operand is NaN. - name: fle.s @@ -3014,18 +3008,11 @@ instructions: - field: rd type: INT-Reg preoperation: | - let result, rs1Number, rs2Number, type_rs1, type_rs2; + let rs1Number, rs2Number, type_rs1, type_rs2; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - postoperation: | - if (isNaN(result)) { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); - } else { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaNBfloat32_64"); - } - definition: | - result = (rs1Number <= rs2Number) ? 1 : 0; + registers[rd] = (rs1Number <= rs2Number)? 1n : 0n; help: Performs a quiet less or equal comparison between floating-point registers rs1 and rs2 and record the Boolean result in integer register rd. Only signaling NaN inputs cause an Invalid Operation exception. The result is 0 if either operand is NaN. - name: flt.s @@ -3041,18 +3028,11 @@ instructions: - field: rd type: INT-Reg preoperation: | - let result, rs1Number, rs2Number, type_rs1, type_rs2; + let rs1Number, rs2Number, type_rs1, type_rs2; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - postoperation: | - if (isNaN(result)) { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); - } else { - registers[rd] = CAPI.ARCH.toBigInt(result, "NaNBfloat32_64"); - } - definition: | - result = (rs1Number < rs2Number) ? 1 : 0; + registers[rd] = (rs1Number < rs2Number)? 1n : 0n; help: Performs a quiet less comparison between floating-point registers rs1 and rs2 and record the Boolean result in integer register rd. Only signaling NaN inputs cause an Invalid Operation exception. The result is 0 if either operand is NaN. - name: fmax.s @@ -3274,9 +3254,8 @@ instructions: optional: true order: 3 preoperation: | - let result, rs1Number, rs2Number, type_rs1, type_rs2; + let result, rs1Number, type_rs1; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); - [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); postoperation: | if (isNaN(result)) { registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); @@ -3289,7 +3268,7 @@ instructions: result = Math.sqrt(rs1Number); } else { CAPI.VALIDATION.raise( - 'Square root of a negative number is not allowed.' + "Square root of a negative number is not allowed." ); } help: Perform single-precision square root. @@ -3338,7 +3317,7 @@ instructions: let result, rs1Number, rs2Number, rs3Number, type_rs1, type_rs2, type_rs3; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(rs3); + [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(registers[rs3]); postoperation: | if (isNaN(result)) { registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); @@ -3367,7 +3346,7 @@ instructions: let result, rs1Number, rs2Number, rs3Number, type_rs1, type_rs2, type_rs3; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(rs3); + [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(registers[rs3]); postoperation: | if (isNaN(result)) { registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); @@ -3396,7 +3375,7 @@ instructions: let result, rs1Number, rs2Number, rs3Number, type_rs1, type_rs2, type_rs3; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(rs3); + [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(registers[rs3]); postoperation: | if (isNaN(result)) { registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); @@ -3425,7 +3404,7 @@ instructions: let result, rs1Number, rs2Number, rs3Number, type_rs1, type_rs2, type_rs3; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(rs3); + [rs3Number, type_rs3] = CAPI.ARCH.toJSNumberD(registers[rs3]); postoperation: | if (isNaN(result)) { registers[rd] = CAPI.ARCH.toBigInt(result, "NaN32"); @@ -3585,8 +3564,8 @@ instructions: - field: rs1 type: INT-Reg preoperation: | - let result, rs1Number, type_rs1; - [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); + let result, rs1Number; + rs1Number = registers[rs1]; postoperation: | registers[rd] = CAPI.ARCH.toBigInt(result, 'float64'); definition: | @@ -3659,7 +3638,7 @@ instructions: result = rs1Number; // TODO: This doesn't seem right, check the RISC-V manual help: Converts double floating-point register in rs1 into a floating-point number in floating-point register rd. - - name: fcvt.w.d + - name: fcvt.w.d extension: D template: R-Conversion fields: @@ -3693,7 +3672,7 @@ instructions: result = CAPI.FP.int2uint(parseInt(rs1Number)); help: Converts a double-precision floating-point number in floating-point register rs1 to a signed 32-bit integer, in integer register rd. - - name: fcvt.wu.d + - name: fcvt.wu.d extension: D template: R-Conversion fields: @@ -3727,7 +3706,7 @@ instructions: result = CAPI.FP.int2uint(parseInt(rs1Number)); help: Converts a double-precision floating-point number in floating-point register rs1 to a unsigned 32-bit integer, in integer register rd. - - name: fdiv.d + - name: fdiv.d extension: D template: R-Double fields: @@ -3754,7 +3733,7 @@ instructions: definition: | result = rs1Number / rs2Number; help: Perform double-precision floating-point division. - - name: feq.d + - name: feq.d extension: D template: R-Double fields: @@ -3767,16 +3746,14 @@ instructions: - field: rd type: INT-Reg preoperation: | - let result, rs1Number, rs2Number, type_rs1, type_rs2; + let rs1Number, rs2Number, type_rs1, type_rs2; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - postoperation: | - definition: | - registers[rd] = (rs1Number == rs2Number) ? 1 : 0; + registers[rd] = (rs1Number == rs2Number)? 1n : 0n; help: Performs a quiet equal comparison between double-precision floating-point registers rs1 and rs2 and record the Boolean result in integer register rd. Only signaling NaN inputs cause an Invalid Operation exception. The result is 0 if either operand is NaN. - - name: fle.d + - name: fle.d extension: D template: R-Double fields: @@ -3792,13 +3769,11 @@ instructions: let rs1Number, rs2Number, type_rs1, type_rs2; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - postoperation: | - definition: | - registers[rd] = (rs1Number <= rs2Number) ? 1 : 0; + registers[rd] = (rs1Number <= rs2Number) ? 1n : 0n; help: Performs a quiet less or equal comparison between double-precision floating-point registers rs1 and rs2 and record the Boolean result in integer register rd. Only signaling NaN inputs cause an Invalid Operation exception. The result is 0 if either operand is NaN. - - name: flt.d + - name: flt.d extension: D template: R-Double fields: @@ -3814,13 +3789,11 @@ instructions: let rs1Number, rs2Number, type_rs1, type_rs2; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); - postoperation: | - definition: | - registers[rd] = (rs1Number < rs2Number) ? 1 : 0; + registers[rd] = (rs1Number < rs2Number)? 1n : 0n; help: Performs a quiet less comparison between double-precision floating-point registers rs1 and rs2 and record the Boolean result in integer register rd. Only signaling NaN inputs cause an Invalid Operation exception. The result is 0 if either operand is NaN. - - name: fmax.d + - name: fmax.d extension: D template: R-Double fields: @@ -3845,7 +3818,7 @@ instructions: result = Math.max(rs1Number, rs2Number); help: Write the larger of double precision data in rs1 and rs2 to rd. - - name: fmin.d + - name: fmin.d extension: D template: R-Double fields: @@ -3870,7 +3843,7 @@ instructions: result = Math.min(rs1Number, rs2Number); help: Write the smaller of double precision data in rs1 and rs2 to rd. - - name: fmul.d + - name: fmul.d extension: D template: R-Double fields: @@ -3898,7 +3871,7 @@ instructions: result = rs1Number * rs2Number; help: Perform double-precision floating-point addition. - - name: fsgnj.d + - name: fsgnj.d extension: D template: R-Double fields: @@ -3922,7 +3895,7 @@ instructions: definition: | registers[rd] = (rs2Number > 0) ? Math.abs(rs1Number) : -Math.abs(rs1Number); help: Perform double-precision floating-point multiplication. - - name: fsgnjn.d + - name: fsgnjn.d extension: D template: R-Double fields: @@ -3944,10 +3917,10 @@ instructions: } definition: | - registers[rd] = (rs2Number > 0) ? -Math.abs(rs1Number) : +Math.abs(rs1Number); + result = (rs2Number > 0) ? -Math.abs(rs1Number) : +Math.abs(rs1Number); help: Produce a result that takes all bits except the sign bit from rs1. The result's sign bit is opposite of rs2's sign bit. - - name: fsgnjx.d + - name: fsgnjx.d extension: D template: R-Double fields: @@ -3971,9 +3944,9 @@ instructions: definition: | let a = rs1Number < 0; let b = rs2Number < 0; - registers[rd] = a ^ b ? -Math.abs(rs1Number) : Math.abs(rs1Number); + result = a ^ b ? -Math.abs(rs1Number) : Math.abs(rs1Number); help: Produce a result that takes all bits except the sign bit from rs1. The result's sign bit is XOR of sign bit of rs1 and rs2. - - name: fsqrt.d + - name: fsqrt.d extension: D template: R-Double fields: @@ -3991,9 +3964,8 @@ instructions: optional: true order: 3 preoperation: | - let result, rs1Number, rs2Number, type_rs1, type_rs2; + let result, rs1Number, type_rs1; [rs1Number, type_rs1] = CAPI.ARCH.toJSNumberD(registers[rs1]); - [rs2Number, type_rs2] = CAPI.ARCH.toJSNumberD(registers[rs2]); postoperation: | if (isNaN(result)) { registers[rd] = CAPI.ARCH.toBigInt(result, "NaN64"); @@ -4003,14 +3975,14 @@ instructions: definition: | if (rs1Number >= 0) { - registers[rd] = Math.sqrt(rs1Number); + result = Math.sqrt(rs1Number); } else { CAPI.VALIDATION.raise( "Square root of a negative number is not allowed." ); } help: Perform double-precision square root. - - name: fsub.d + - name: fsub.d extension: D template: R-Double fields: @@ -4038,7 +4010,7 @@ instructions: result = rs1Number - rs2Number; help: Perform double-precision floating-point addition. - - name: fmadd.d + - name: fmadd.d extension: D template: R4-Double fields: @@ -4068,7 +4040,7 @@ instructions: result = rs1Number * rs2Number + rs3Number; help: Perform double-precision fused multiply addition. - - name: fmsub.d + - name: fmsub.d extension: D template: R4-Double fields: @@ -4098,7 +4070,7 @@ instructions: result = rs1Number * rs2Number - rs3Number; help: Perform double-precision fused multiply subtraction. - - name: fnmadd.d + - name: fnmadd.d extension: D template: R4-Double fields: @@ -4128,7 +4100,7 @@ instructions: result = -rs1Number * rs2Number - rs3Number; help: Perform negated double-precision fused multiply addition. - - name: fnmsub.d + - name: fnmsub.d extension: D template: R4-Double fields: @@ -4158,7 +4130,7 @@ instructions: result = -rs1Number * rs2Number + rs3Number; help: Perform negated double-precision fused multiply subtraction. - - name: fsd + - name: fsd extension: D template: S fields: @@ -4176,7 +4148,7 @@ instructions: CAPI.MEM.addHint(registers[rs1] + imm, "float64", 64); help: Store a double-precision value from the floating-point registers to memory. Zifencei: - - name: fence.i + - name: fence.i extension: D template: Custom type: Syscall From 7656b99847c67d337060282eda4e66c5d0590d60 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Mon, 16 Mar 2026 14:11:49 +0100 Subject: [PATCH 22/85] fix(RISCV): fix ecall handler not popping the stack frame --- architecture/RISCV/RV32IMFD.yml | 1 + architecture/RISCV/RV64IMFD.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/architecture/RISCV/RV32IMFD.yml b/architecture/RISCV/RV32IMFD.yml index 34656289f..dc6ea9c8d 100644 --- a/architecture/RISCV/RV32IMFD.yml +++ b/architecture/RISCV/RV32IMFD.yml @@ -4033,6 +4033,7 @@ interrupts: break; } CAPI.INTERRUPTS.clearHighlight(); + CAPI.STACK.endFrame(); custom: | CAPI.INTERRUPTS.globalDisable(); diff --git a/architecture/RISCV/RV64IMFD.yml b/architecture/RISCV/RV64IMFD.yml index a3de7308c..a87bb6f19 100644 --- a/architecture/RISCV/RV64IMFD.yml +++ b/architecture/RISCV/RV64IMFD.yml @@ -4222,6 +4222,7 @@ interrupts: break; } CAPI.INTERRUPTS.clearHighlight(); + CAPI.STACK.endFrame(); custom: | CAPI.INTERRUPTS.globalDisable(); From 4d95f60c754ae6ee7041faa3f1fde61185672c7c Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Mon, 16 Mar 2026 15:16:10 +0100 Subject: [PATCH 23/85] fix(MIPS): fix many incorrect instruction definitions --- architecture/MIPS32.yml | 154 ++++++++++++++++++++++++---------------- 1 file changed, 94 insertions(+), 60 deletions(-) diff --git a/architecture/MIPS32.yml b/architecture/MIPS32.yml index 51dc9055b..fe560f84e 100644 --- a/architecture/MIPS32.yml +++ b/architecture/MIPS32.yml @@ -1035,13 +1035,36 @@ instructions: fields: - field: function value: "000101" + - field: fmt + type: cop + value: "00000" - field: ft order: null value: "00000" preoperation: | - let fsValue = CAPI.FS.uint2float32(registers[fs]); + let fsValue = CAPI.FP.uint2float32(registers[fs]); postoperation: | - fd = CAPI.FS.float322uint(result); + registers[fd] = CAPI.FP.float322uint(result); + definition: | + let result = Math.abs(fsValue); + - name: abs.d + type: Arithmetic floating point + template: FPU_R + nwords: 1 + clk_cycles: 1 + fields: + - field: function + value: "000101" + - field: fmt + type: cop + value: "00001" + - field: ft + order: null + value: "00000" + preoperation: | + let fsValue = CAPI.ARCH.readDouble(fs); + postoperation: | + CAPI.ARCH.writeDouble(result, fd) definition: | let result = Math.abs(fsValue); @@ -1074,10 +1097,10 @@ instructions: value: "00000" type: cop preoperation: | - fsValue = CAPI.FS.uint2float32(registers[fs]); - ftValue = CAPI.FS.uint2float32(registers[ft]); + fsValue = CAPI.FP.uint2float32(registers[fs]); + ftValue = CAPI.FP.uint2float32(registers[ft]); postoperation: | - registers[fd] = CAPI.FS.float322uint(result); + registers[fd] = CAPI.FP.float322uint(result); definition: | let result = fsValue + ftValue; @@ -1167,7 +1190,7 @@ instructions: - field: opcode value: "001100" definition: | - registers[rt] = registers[rs] & (imm & 0xFFFF); + registers[rt] = registers[rs] & (imm & 0xFFFFn); - name: bc template: Custom @@ -1337,8 +1360,10 @@ instructions: - field: imm type: offset_bytes definition: | + const pc = registers.PC + registers.ra = pc if (CAPI.FP.uint2int(registers[rs]) >= 0) { - registers.PC = registers.PC - 4n + imm; + registers.PC = pc - 4n + imm; CAPI.STACK.beginFrame(registers[rs]); } @@ -1691,7 +1716,9 @@ instructions: startbit: 5 stopbit: 0 value: "100001" - definition: registers[fd] = registers[fs]; + definition: | + let val = CAPI.FP.uint2float32(registers[fs]); + CAPI.ARCH.writeDouble(val, fd); - name: cvt.d.w template: Custom type: Arithmetic floating point @@ -1712,7 +1739,7 @@ instructions: stopbit: 21 value: "00001" - field: fs - type: SFP-Reg + type: INT-Reg startbit: 15 stopbit: 11 order: 2 @@ -1730,7 +1757,7 @@ instructions: startbit: 5 stopbit: 0 value: "100001" - definition: registers[fd] = registers[fs]; + definition: CAPI.ARCH.writeDouble(Number(CAPI.FP.uint2int(registers[fs])), fd); - name: cvt.s.d template: Custom type: Arithmetic floating point @@ -1770,8 +1797,8 @@ instructions: stopbit: 0 value: "100000" definition: | - let val = CAPI.FS.uint2float32(registers[fs]); - CAPI.ARCH.writeDouble(val, fd); + let val = CAPI.ARCH.readDouble(fs); + registers[fd] = CAPI.FP.float322uint(val, fd); - name: cvt.s.w template: Custom type: Arithmetic floating point @@ -1792,7 +1819,7 @@ instructions: stopbit: 21 value: "00010" - field: fs - type: SFP-Reg + type: INT-Reg startbit: 15 stopbit: 11 order: 2 @@ -1810,7 +1837,7 @@ instructions: startbit: 5 stopbit: 0 value: "100000" - definition: registers[fd] = parseFloat(float2int_v2(registers[fs])); + definition: registers[fd] = CAPI.FP.float322uint(Number(CAPI.FP.uint2int(registers[fs]))); - name: cvt.w.d template: Custom type: Arithmetic floating point @@ -1838,7 +1865,7 @@ instructions: prefix: $ suffix: "," - field: fd - type: SFP-Reg + type: INT-Reg startbit: 10 stopbit: 6 order: 1 @@ -1851,7 +1878,7 @@ instructions: value: "100100" definition: | let val = CAPI.ARCH.readDouble(fs); - CAPI.REG.write(BigInt(Math.trunc(val)), fd); + CAPI.REG.write(CAPI.FP.int2uint(BigInt(Math.trunc(val))), fd); - name: cvt.w.s template: Custom type: Arithmetic floating point @@ -1879,7 +1906,7 @@ instructions: prefix: $ suffix: "," - field: fd - type: SFP-Reg + type: INT-Reg startbit: 10 stopbit: 6 order: 1 @@ -1890,7 +1917,9 @@ instructions: startbit: 5 stopbit: 0 value: "100100" - definition: registers[fd] = parseInt(registers[fs]); + definition: | + let val = CAPI.FP.uint2float32(registers[fs]); + CAPI.REG.write(CAPI.FP.int2uint(BigInt(Math.trunc(val))), fd); - name: div template: Custom type: Arithmetic integer @@ -2093,10 +2122,10 @@ instructions: stopbit: 0 value: "000011" preoperation: | - fsValue = CAPI.FS.uint2float32(fs); - ftValue = CAPI.FS.uint2float32(ft); + fsValue = CAPI.FP.uint2float32(registers[fs]); + ftValue = CAPI.FP.uint2float32(registers[ft]); postoperation: | - fd = CAPI.FS.float322uint(result); + registers[fd] = CAPI.FP.float322uint(result); definition: |- let result; if (ftValue != 0) @@ -2148,7 +2177,7 @@ instructions: value: "011011" definition: |- if (registers[rt] != 0) - { registers[rd] = Math.floor(CAPI.FP.int2uint(registers[rs]) / CAPI.FP.int2uint(registers[rt])); } + { registers[rd] = CAPI.FP.int2uint(registers[rs]) / CAPI.FP.int2uint(registers[rt]); } else { CAPI.VALIDATION.raise('Division by zero not allowed'); } - name: divu template: Custom @@ -2184,9 +2213,9 @@ instructions: value: "011011" definition: |- if (registers[rt] != 0) - { registers.LO = Math.floor(CAPI.FP.int2uint(registers[rs]) / CAPI.FP.int2uint(registers[rt])); - registers.HI = CAPI.FP.int2uint(registers[rs]) % CAPI.FP.int2uint(registers[rt]); } - else { CAPI.VALIDATION.raise('Division by zero not allowed'); } + { registers.LO = CAPI.FP.int2uint(registers[rs]) / CAPI.FP.int2uint(registers[rt]); + registers.HI = CAPI.FP.int2uint(registers[rs]) % CAPI.FP.int2uint(registers[rt]); } + else { CAPI.VALIDATION.raise('Division by zero not allowed'); } - name: j template: Custom type: Unconditional bifurcation @@ -2839,9 +2868,9 @@ instructions: stopbit: 0 value: "000110" preoperation: | - fsValue = CAPI.FS.uint2float32(fs); + fsValue = CAPI.FP.uint2float32(fs); postoperation: | - registers[fd] = CAPI.FS.float322uint(result); + registers[fd] = CAPI.FP.float322uint(result); definition: let result = fsValue; - name: mtc1 template: Custom @@ -2875,7 +2904,7 @@ instructions: stopbit: 11 order: 2 prefix: $ - definition: registers[fs] = CAPI.FP.uint2float32(registers[rt]); + definition: registers[fs] = registers[rt]; - name: mthi template: Custom type: Transfer between registers @@ -3064,10 +3093,10 @@ instructions: stopbit: 0 value: "000010" preoperation: | - fsValue = CAPI.FS.uint2float32(fs); - ftValue = CAPI.FS.uint2float32(ft); + fsValue = CAPI.FP.uint2float32(registers[fs]); + ftValue = CAPI.FP.uint2float32(registers[ft]); postoperation: | - registers[fd] = CAPI.FS.float322uint(result); + registers[fd] = CAPI.FP.float322uint(result); definition: | let result = fsValue * ftValue; - name: mult @@ -3104,8 +3133,8 @@ instructions: value: "011000" definition: |- let result = CAPI.FP.uint2int(registers[rs]) * CAPI.FP.uint2int(registers[rt]); - registers.HI = Math.floor(result / Math.pow (2, 32)); - registers.LO = result % Math.pow(2, 32); + registers.HI = CAPI.FP.int2uint(result >> 32n); + registers.LO = CAPI.FP.int2uint(result & 0xFFFFFFFFn); - name: multu template: Custom type: Arithmetic integer @@ -3140,10 +3169,8 @@ instructions: value: "011001" definition: |- let result = CAPI.FP.int2uint(registers[rs]) * CAPI.FP.int2uint(registers[rt]); - registers.HI = Math.floor(result / Math.pow(2, 32)); - registers.HI = registers.HI >>> 0; // TODO: This is broken with bigints. - registers.LO = result % Math.pow(2, 32); - registers.LO = registers.LO >>> 0; + registers.HI = CAPI.FP.int2uint(result >> 32n); + registers.LO = CAPI.FP.int2uint(result & 0xFFFFFFFFn); - name: nop template: Custom type: Logic @@ -3322,7 +3349,7 @@ instructions: stopbit: 0 value: "000010" definition: | - registers[rd] = CAPI.FP.int2uint((registers[rt] >>> sa) | (registers[rt] << (32 - sa))); // TODO: This is broken with bigints. + registers[rd] = CAPI.FP.int2uint((CAPI.FP.int2uint(registers[rt]) >> sa) | (registers[rt] << (32n - sa))); - name: rsqrt.d template: Custom type: Arithmetic floating point @@ -3409,9 +3436,9 @@ instructions: stopbit: 0 value: "010110" preoperation: | - fsValue = CAPI.FS.uint2float32(fs); + fsValue = CAPI.FP.uint2float32(registers[fs]); postoperation: | - fd = CAPI.FS.float322uint(fd); + registers[fd] = CAPI.FP.float322uint(result); definition: |- let result; if (fsValue >= 0) { @@ -3495,8 +3522,8 @@ instructions: if (CAPI.VALIDATION.isMisaligned(registers[base] + off, 'd')) { CAPI.VALIDATION.raise('The memory must be aligned'); } - CAPI.MEM.write(registers[base] + off, 4, BigInt(parts[0]), ft); - CAPI.MEM.write(registers[base] + off + 4n, 4, BigInt(parts[1])); + CAPI.MEM.write(registers[base] + off, 4, BigInt(parts[1]), ft); + CAPI.MEM.write(registers[base] + off + 4n, 4, BigInt(parts[0])); - name: sh template: Custom type: Memory access @@ -3570,7 +3597,7 @@ instructions: startbit: 5 stopbit: 0 value: "111111" - definition: rd = CAPI.FP.int2uint(registers[rt] << sa); + definition: registers[rd] = CAPI.FP.int2uint(registers[rt] << sa); - name: slt template: Custom type: Logic @@ -3805,9 +3832,9 @@ instructions: stopbit: 0 value: "000100" preoperation: | - fsValue = CAPI.FS.uint2float32(fs); + fsValue = CAPI.FP.uint2float32(registers[fs]); postoperation: | - registers[fd] = CAPI.FS.float322uint(result); + registers[fd] = CAPI.FP.float322uint(result); definition: |- let result; if (fsValue >= 0) { @@ -3854,7 +3881,7 @@ instructions: stopbit: 0 value: "000011" definition: | - registers[rd] = CAPI.FP.int2uint(registers[rt] >> sa); + registers[rd] = CAPI.FP.int2uint(CAPI.FP.uint2int(registers[rt]) >> sa); - name: srl template: Custom type: Arithmetic integer @@ -3899,7 +3926,7 @@ instructions: stopbit: 0 value: "000010" definition: | - registers[rd] = registers[rt] >>> sa; // TODO:broken with bigints. + registers[rd] = CAPI.FP.int2uint(registers[rt]) >> sa; - name: sub template: Custom type: Arithmetic integer @@ -4037,10 +4064,10 @@ instructions: stopbit: 0 value: "000001" preoperation: | - fsValue = CAPI.FS.uint2float32(fs); - ftValue = CAPI.FS.uint2float32(ft); + fsValue = CAPI.FP.uint2float32(registers[fs]); + ftValue = CAPI.FP.uint2float32(registers[ft]); postoperation: | - registers[fd] = CAPI.FS.float322uint(result); + registers[fd] = CAPI.FP.float322uint(result); definition: let result = fsValue - ftValue; - name: subu template: Custom @@ -4174,6 +4201,7 @@ instructions: value: "001100" definition: |- let FP0 = CAPI.ARCH.readDouble('f0'); + let f12 = CAPI.FP.uint2float32(registers.f12); let FP12 = CAPI.ARCH.readDouble('f12'); switch(registers["v0"]) { case 1n: @@ -4192,10 +4220,10 @@ instructions: CAPI.SYSCALL.read('v0', 'int32'); break; case 6n: - CAPI.SYSCALL.read(f0, 'float'); + CAPI.SYSCALL.read('f0', 'float'); break; case 7n: - CAPI.SYSCALL.read(FP0, 'double'); + CAPI.SYSCALL.read('FP0', 'double'); break; case 8n: CAPI.SYSCALL.read('a0', 'string', 'a1'); @@ -4999,18 +5027,24 @@ pseudoinstructions: - field: val type: imm-signed definition: |- - no_ret_op{tmp0=Field.2.(63,32).double; - tmp_low0=tmp0&0x0000FFFF; - tmp_hi0=tmp0>>>16; - tmp1=Field.2.(31,0).double; - tmp_low1=tmp1&0x0000FFFF; - tmp_hi1=tmp1>>>16}; + no_ret_op{ + tmp0=Field.2.(63,32).double; + tmp_low0=tmp0&0x0000FFFF; + tmp_hi0=tmp0>>>16; + tmp1=Field.2.(31,0).double; + tmp_low1=tmp1&0x0000FFFF; + tmp_hi1=tmp1>>>16; + tmp_reg=reg_name{1}; + regNumber=parseInt(tmp_reg.substring(2), 10); + reg0="f" + regNumber; + reg1="f" + (regNumber + 1); + }; lui $at, op{tmp_hi1}; ori $at, $at, op{tmp_low1}; - mtc1 $at, $aliasDouble(rd;1); + mtc1 $at, $op{reg1}; lui $at, op{tmp_hi0}; ori $at, $at, op{tmp_low0}; - mtc1 $at, $aliasDouble(rd;0); + mtc1 $at, $op{reg0}; - name: li.s help: "" properties: [] From f26bae4e72fc3c6fa75d2bfd708b7f59d952a073 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Mon, 16 Mar 2026 15:17:05 +0100 Subject: [PATCH 24/85] tests(IO): allow tests to override IO keyboard input for non-interactive execution --- src/core/executor/IO.mjs | 42 ++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/src/core/executor/IO.mjs b/src/core/executor/IO.mjs index 2ae7eb7b8..b314bd499 100644 --- a/src/core/executor/IO.mjs +++ b/src/core/executor/IO.mjs @@ -33,6 +33,13 @@ import { coreEvents, CoreEventTypes } from "../events.mts"; import { crex_findReg } from "../register/registerLookup.mjs"; import { Memory } from "../memory/Memory.mts"; +/** Keyboard data override. Intended exclusively for running interactive tests */ +export const testKeyboard = { + enable: false, + /** @type {string[]} */ + data: [], +} + export function display_print(info) { if (typeof document !== "undefined" && document.app) { document.app.$data.display += info; @@ -54,7 +61,7 @@ export function kbd_read_char(keystroke, params) { sailexec._send_char_to_C(value); document.app.$data.execution_mode_run = document.app.$data.last_execution_mode_run; - document.app.$data.last_execution_mode_run = -1; + document.app.$data.last_execution_mode_run = -1; } writeRegister(BigInt(value), params.indexComp, params.indexElem); @@ -84,7 +91,7 @@ export function kbd_read_int(keystroke, params) { sailexec._send_int_to_C(value); document.app.$data.execution_mode_run = document.app.$data.last_execution_mode_run; - document.app.$data.last_execution_mode_run = -1; + document.app.$data.last_execution_mode_run = -1; } value = BigInt(value); @@ -109,14 +116,14 @@ export function kbd_read_float(keystroke, params) { document.app.$data.execution_mode_run = document.app.$data.last_execution_mode_run; - document.app.$data.last_execution_mode_run = -1; + document.app.$data.last_execution_mode_run = -1; } const buffer = new ArrayBuffer(4); const view = new DataView(buffer); view.setFloat32(0,value, false); const bits = view.getUint32(0, false); - writeRegister(BigInt(("0x" + bits.toString(16).padStart(8, "0"))), params.indexComp, params.indexElem); + writeRegister(BigInt(bits), params.indexComp, params.indexElem); return value; } @@ -137,7 +144,7 @@ export function kbd_read_double(keystroke, params) { sailexec._send_double_to_C(value); document.app.$data.execution_mode_run = document.app.$data.last_execution_mode_run; - document.app.$data.last_execution_mode_run = -1; + document.app.$data.last_execution_mode_run = -1; } writeRegister(value, params.indexComp, params.indexElem, "DFP-Reg"); @@ -170,7 +177,7 @@ export function kbd_read_string(keystroke, params) { } document.app.$data.execution_mode_run = document.app.$data.last_execution_mode_run; - document.app.$data.last_execution_mode_run = -1; + document.app.$data.last_execution_mode_run = -1; } return keystroke; } @@ -192,6 +199,11 @@ function checkEnter(buf) { * @returns {string} - The user input without extra space or newline */ function rawPrompt() { + if (testKeyboard.enable) { + const data = testKeyboard.data.shift() || "" + process.stdout.write(data); // Echo the character + return data + } // Build input character by character until we hit Enter const chunks = []; const decoder = new TextDecoder(); @@ -247,7 +259,7 @@ export function keyboard_parseInt(fn_post_read, fn_post_params) { const addr = readRegister(ret1.indexComp, ret1.indexElem); // Get the memory instance const memory = main_memory; - + // Validate address is within memory bounds if (addr >= BigInt(memory.getSize())) { throw packExecute( @@ -278,10 +290,10 @@ export function keyboard_parseInt(fn_post_read, fn_post_params) { var regex = new RegExp("^\\s*(-?\\d+)"); } - - // Deno / CLI mode + + // Deno / CLI mode if (typeof Deno !== "undefined") { let keystroke = rawPrompt(); var match = regex.exec(keystroke); @@ -385,7 +397,7 @@ export function keyboard_read(fn_post_read, fn_post_params) { if (typeof Deno !== "undefined") { const keystroke = rawPrompt(); const value = fn_post_read(keystroke, fn_post_params); - status.keyboard = status.keyboard + " " + value; + status.keyboard += " " + value; status.run_program = 0; // Reset run_program status return null; @@ -485,9 +497,9 @@ export function keyboard_read_until(fn_post_read, fn_post_params, fn_post_until) if (idx !== -1) { keystroke = keystroke.slice(0, idx); } - + } - // console.log("Extracted keystroke until 'until':", `"${keystroke}"`); + // console.log("Extracted keystroke until 'until':", `"${keystroke}"`); const value = fn_post_read(keystroke, fn_post_params); status.keyboard = status.keyboard + " " + value; status.run_program = 0; // Reset run_program status @@ -590,7 +602,7 @@ export function keyboard_read_find(fn_post_read, fn_post_params,fn_post_length,f const addr = readRegister(ret1.indexComp, ret1.indexElem); // Get the memory instance const memory = main_memory; - + // Validate address is within memory bounds if (addr >= BigInt(memory.getSize())) { throw packExecute( @@ -662,10 +674,10 @@ export function keyboard_read_find(fn_post_read, fn_post_params,fn_post_length,f memoryAddr++; } - // console.log("Until string: ", until); + // console.log("Until string: ", until); } - // Deno / CLI mode + // Deno / CLI mode if (typeof Deno !== "undefined") { let keystroke = rawPrompt(); From 5ac6598624df8781ff6440468a904c0bd640abb4 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Mon, 16 Mar 2026 15:45:18 +0100 Subject: [PATCH 25/85] tests: add architecture snapshot tests --- tests/arch/arch_utils.mts | 102 +++++++++++++++++++++++ tests/arch/mips/correct.test.mts | 24 ++++++ tests/arch/mips/instructions.test.mts | 5 ++ tests/arch/mips/sentinel.test.mts | 3 + tests/arch/riscv/correct.test.mts | 24 ++++++ tests/arch/riscv/instructions.test.mts | 3 + tests/arch/riscv/sentinel.test.mts | 3 + tests/unit/arch/simulator-test-utils.mts | 55 ++++++++---- 8 files changed, 204 insertions(+), 15 deletions(-) create mode 100644 tests/arch/arch_utils.mts create mode 100644 tests/arch/mips/correct.test.mts create mode 100644 tests/arch/mips/instructions.test.mts create mode 100644 tests/arch/mips/sentinel.test.mts create mode 100644 tests/arch/riscv/correct.test.mts create mode 100644 tests/arch/riscv/instructions.test.mts create mode 100644 tests/arch/riscv/sentinel.test.mts diff --git a/tests/arch/arch_utils.mts b/tests/arch/arch_utils.mts new file mode 100644 index 000000000..67e2464be --- /dev/null +++ b/tests/arch/arch_utils.mts @@ -0,0 +1,102 @@ +import { assertSnapshot } from "jsr:@std/testing/snapshot"; +import * as path from "jsr:@std/path"; +import fs from "node:fs"; +import { + executeStep, + loadArchitecture, + compileAssembly, +} from "../unit/arch/simulator-test-utils.mts"; +import { testKeyboard } from "../../src/core/executor/IO.mjs"; +import * as creator from "../../src/core/core.mjs"; +import { coreEvents } from "../../src/core/events.mts"; +import { logger } from "../../src/core/utils/creator_logger.mjs"; + +export const ARCH = { + riscv: "RISCV/RV32IMFD.yml", + riscv64: "RISCV/RV64IMFD.yml", + mips: "MIPS32.yml", + simple8: "simple8.yml", +}; + +const PREFIX = path.fromFileUrl(import.meta.url + "/../../../"); + +/** + * Executes a group of execution snapshot tests + * @param archPath - Path to the YAML architecture configuration file, from the architectures folder + * @param dir - Path to the directory with the assembly files + * @param keyboard - Map of test file name to its corresponding keyboard input. Unspecified files + * use an empty input + * @param expect_error - Set of test file names that are expected to throw errors during execution + */ +export function snapshot_tests( + archPath: string, + dir: string, + keyboard: Map = new Map(), + expect_error: Set = new Set(), +): void { + logger.disable(); + const ARCH_PATH = "architecture/" + archPath; + loadArchitecture(ARCH_PATH); + const DIR = `${PREFIX}tests/arch/${dir}`; + testKeyboard.enable = true; + for (const file of fs.globSync("*.s", { cwd: DIR })) { + Deno.test(`${dir}/${file}`, async t => { + const errors = expect_error.has(file); + // Record passing convention errors + const sentinel_errors: { function: string; msg: string }[] = []; + coreEvents.on("sentinel-error", e => + sentinel_errors.push({ + function: e.functionName, + msg: e.message, + }), + ); + + // Compile code + const path = `${DIR}/${file}`; + const testAssembly = fs.readFileSync(path, "utf8"); + await compileAssembly(testAssembly); + + // Setup keyboard input if specified + testKeyboard.data = keyboard.get(file) || []; + + // Execute code + let result = { output: "", error: false }; + const instruction_errors: {i: number, error: string}[] = []; + for (let i = 0; i < 1000; i++) { + try { + result = executeStep(); + if (result.error || creator.status.execution_index === -2) + break; + } catch (e) { + if (errors) + instruction_errors.push({i, error: (e as Error).message}); + else throw e; + } + } + + // Save state + const memory = creator.main_memory + .getWritten() + .map(d => [d.addr, d.value]) + .filter(x => x[1] !== 0); + + const registers = creator.REGISTERS.flatMap(r => r.elements) + .filter(r => r.value !== r.default_value) + .map(r => [r.name.join(","), "0x" + r.value.toString(16)]); + + const state = { + error: result.error === false ? false : result.output, + memory: Object.fromEntries(memory), + registers: Object.fromEntries(registers), + display: creator.status.display, + keyboard: creator.status.keyboard, + sentinel_errors, + ...(errors ? { instruction_errors } : {}), + }; + + await assertSnapshot(t, state, { + path: `${PREFIX}/tests/arch/__snapshots__/${dir}/${file}.snap`, + }); + }); + } +} diff --git a/tests/arch/mips/correct.test.mts b/tests/arch/mips/correct.test.mts new file mode 100644 index 000000000..dab94b20c --- /dev/null +++ b/tests/arch/mips/correct.test.mts @@ -0,0 +1,24 @@ +import { ARCH, snapshot_tests } from "../arch_utils.mts"; + +const long_str = + "This is a very long string with many characters and a lot of data. :) 123\n"; + +snapshot_tests( + ARCH.mips, + "mips/correct/examples", + new Map([ + ["test_mips_example_009.s", ["123\n", "456\n"]], + ["test_mips_example_010.s", [long_str.length + "\n", long_str]], + ]), +); +snapshot_tests( + ARCH.mips, + "mips/correct/syscalls", + new Map([ + ["test_mips_syscall_005.s", ["1234567\n"]], + ["test_mips_syscall_006.s", ["1.234567\n"]], + ["test_mips_syscall_007.s", ["1.234567890123456\n"]], + ["test_mips_syscall_008.s", ["This is a long string\n"]], + ["test_mips_syscall_012.s", ["a\n"]], + ]), +); diff --git a/tests/arch/mips/instructions.test.mts b/tests/arch/mips/instructions.test.mts new file mode 100644 index 000000000..fcf5b9933 --- /dev/null +++ b/tests/arch/mips/instructions.test.mts @@ -0,0 +1,5 @@ +import { ARCH, snapshot_tests } from "../arch_utils.mts" + +snapshot_tests(ARCH.mips, "mips/instructions", undefined, new Set([ + "test_mips_instruction_058.s", "test_mips_instruction_064.s" +])); diff --git a/tests/arch/mips/sentinel.test.mts b/tests/arch/mips/sentinel.test.mts new file mode 100644 index 000000000..542729330 --- /dev/null +++ b/tests/arch/mips/sentinel.test.mts @@ -0,0 +1,3 @@ +import { ARCH, snapshot_tests } from "../arch_utils.mts" + +snapshot_tests(ARCH.mips, "mips/sentinel"); diff --git a/tests/arch/riscv/correct.test.mts b/tests/arch/riscv/correct.test.mts new file mode 100644 index 000000000..d9d47b778 --- /dev/null +++ b/tests/arch/riscv/correct.test.mts @@ -0,0 +1,24 @@ +import { ARCH, snapshot_tests } from "../arch_utils.mts"; + +const long_str = + "This is a very long string with many characters and a lot of data. :) 123\n"; + +snapshot_tests( + ARCH.riscv, + "riscv/correct/examples", + new Map([ + ["test_riscv_example_009.s", ["123\n", "456\n"]], + ["test_riscv_example_010.s", [long_str.length + "\n", long_str]], + ]), +); +snapshot_tests( + ARCH.riscv, + "riscv/correct/syscalls", + new Map([ + ["test_riscv_syscall_005.s", ["1234567\n"]], + ["test_riscv_syscall_006.s", ["1.234567\n"]], + ["test_riscv_syscall_007.s", ["1.234567890123456\n"]], + ["test_riscv_syscall_008.s", ["This is a long string\n"]], + ["test_riscv_syscall_012.s", ["a\n"]], + ]), +); diff --git a/tests/arch/riscv/instructions.test.mts b/tests/arch/riscv/instructions.test.mts new file mode 100644 index 000000000..b8af0fe04 --- /dev/null +++ b/tests/arch/riscv/instructions.test.mts @@ -0,0 +1,3 @@ +import { ARCH, snapshot_tests } from "../arch_utils.mts" + +snapshot_tests(ARCH.riscv, "riscv/instructions"); diff --git a/tests/arch/riscv/sentinel.test.mts b/tests/arch/riscv/sentinel.test.mts new file mode 100644 index 000000000..3e145cc39 --- /dev/null +++ b/tests/arch/riscv/sentinel.test.mts @@ -0,0 +1,3 @@ +import { ARCH, snapshot_tests } from "../arch_utils.mts" + +snapshot_tests(ARCH.riscv, "riscv/sentinel"); diff --git a/tests/unit/arch/simulator-test-utils.mts b/tests/unit/arch/simulator-test-utils.mts index d80726f54..1dd960c0d 100644 --- a/tests/unit/arch/simulator-test-utils.mts +++ b/tests/unit/arch/simulator-test-utils.mts @@ -98,24 +98,13 @@ export function getByteAtAddress(address: bigint): bigint { } /** - * Setup function to initialize simulator state with architecture from YAML file - * @param testAssembly - Assembly code to compile and load + * Load an architecture from YAML file into the simulator * @param yamlPath - Path to the YAML architecture configuration file - * @returns Setup results including architecture and compilation status + * @returns Architecture loading result */ -export async function setupSimulator( - testAssembly: string, - yamlPath: string, - assembler: string = "default", -): Promise<{ - archResult: ArchResult; - compileResult: CompileResult; -}> { - logger.disable(); - +export function loadArchitecture(yamlPath: string|URL): ArchResult { // Load architecture configuration from file synchronously - const archPath = new URL(yamlPath, import.meta.url); - const architectureConfigContent = fs.readFileSync(archPath, "utf8"); + const architectureConfigContent = fs.readFileSync(yamlPath, "utf8"); // yaml.load returns unknown; narrow its type and validate at runtime const archObject = yaml.load(architectureConfigContent) as | { config?: { plugin?: string } } @@ -145,6 +134,19 @@ export async function setupSimulator( `Failed to load architecture from ${yamlPath}: ${archResult.token}`, ); } + return archResult; +} + +/** + * Setup function to initialize simulator state with architecture from YAML file + * @param testAssembly - Assembly code to compile and load + * @param assembler - Name of the assembler to use + * @returns Setup results including architecture and compilation status + */ +export async function compileAssembly( + testAssembly: string, + assembler: string = "default", +): Promise { const compilerKey = assembler || "default"; if (!isValidCompilerKey(compilerKey)) { @@ -153,6 +155,8 @@ export async function setupSimulator( ); } + creator.reset(); + const compilerFunction = compiler_map[compilerKey]; // Compile assembly code const compileResult = (await creator.assembly_compile( @@ -165,6 +169,27 @@ export async function setupSimulator( creator.reset(); + return compileResult; +} + +/** + * Setup function to initialize simulator state with architecture from YAML file + * @param testAssembly - Assembly code to compile and load + * @param yamlPath - Path to the YAML architecture configuration file + * @returns Setup results including architecture and compilation status + */ +export async function setupSimulator( + testAssembly: string, + yamlPath: string, + assembler: string = "default", +): Promise<{ + archResult: ArchResult; + compileResult: CompileResult; +}> { + logger.disable(); + const archPath = new URL(yamlPath, import.meta.url); + const archResult = loadArchitecture(archPath) + const compileResult = await compileAssembly(testAssembly, assembler) return { archResult, compileResult }; } From 5ac8da46f1786316c0848cc52168909b8b233c82 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Mon, 16 Mar 2026 15:50:19 +0100 Subject: [PATCH 26/85] tests: initial migration of old snapshot tests results --- .../examples/test_mips_example_001.out | 5 +++ .../examples/test_mips_example_013.out | 41 +++++++++++++++++++ .../syscalls/test_mips_syscall_001.out | 2 +- .../compiler/test_mips_error_compiler_001.out | 18 +++++--- .../compiler/test_mips_error_compiler_002.out | 12 +++--- .../compiler/test_mips_error_compiler_003.out | 32 +++++++++++++-- .../compiler/test_mips_error_compiler_004.out | 14 ++++--- .../compiler/test_mips_error_compiler_005.out | 15 ++++--- .../compiler/test_mips_error_compiler_006.out | 25 ++++++++--- .../compiler/test_mips_error_compiler_007.out | 14 ++++--- .../compiler/test_mips_error_compiler_008.out | 14 ++++--- .../compiler/test_mips_error_compiler_009.out | 24 +++++++++-- .../compiler/test_mips_error_compiler_014.out | 12 +++--- .../compiler/test_mips_error_compiler_015.out | 13 +++--- .../compiler/test_mips_error_compiler_016.out | 15 ++++--- .../compiler/test_mips_error_compiler_017.out | 15 ++++--- .../compiler/test_mips_error_compiler_018.out | 15 ++++--- .../compiler/test_mips_error_compiler_019.out | 15 ++++--- .../compiler/test_mips_error_compiler_021.out | 13 +++--- .../compiler/test_mips_error_compiler_022.out | 13 +++--- .../compiler/test_mips_error_compiler_023.out | 14 ++++--- .../compiler/test_mips_error_compiler_030.out | 11 +++-- .../executor/test_mips_error_executor_009.out | 2 +- .../test_mips_instruction_022.out | 2 +- .../test_mips_instruction_023.out | 2 +- .../test_mips_instruction_027.out | 2 +- .../test_mips_instruction_028.out | 2 +- .../test_mips_instruction_033.out | 12 +++--- .../test_mips_instruction_037.out | 12 +++--- .../test_mips_instruction_066.out | 13 +++--- .../test_mips_instruction_067.out | 13 +++--- .../mips/sentinel/test_mips_sentinels_018.out | 10 +---- .../examples/test_riscv_example_001.out | 5 +++ .../examples/test_riscv_example_013.out | 41 +++++++++++++++++++ .../test_riscv_error_compiler_001.out | 18 +++++--- .../test_riscv_error_compiler_002.out | 12 +++--- .../test_riscv_error_compiler_003.out | 24 +++++++++-- .../test_riscv_error_compiler_004.out | 14 ++++--- .../test_riscv_error_compiler_005.out | 15 ++++--- .../test_riscv_error_compiler_006.out | 25 ++++++++--- .../test_riscv_error_compiler_007.out | 14 ++++--- .../test_riscv_error_compiler_008.out | 20 ++++++--- .../test_riscv_error_compiler_009.out | 24 +++++++++-- .../test_riscv_error_compiler_014.out | 12 +++--- .../test_riscv_error_compiler_015.out | 13 +++--- .../test_riscv_error_compiler_016.out | 15 ++++--- .../test_riscv_error_compiler_017.out | 15 ++++--- .../test_riscv_error_compiler_018.out | 15 ++++--- .../test_riscv_error_compiler_019.out | 15 ++++--- .../test_riscv_error_compiler_021.out | 13 +++--- .../test_riscv_error_compiler_022.out | 13 +++--- .../test_riscv_error_compiler_023.out | 14 ++++--- .../test_riscv_error_compiler_030.out | 11 +++-- .../test_riscv_instruction_004.out | 2 +- .../test_riscv_instruction_013.out | 3 ++ .../test_riscv_instruction_022.out | 2 +- .../test_riscv_instruction_035.out | 2 +- .../test_riscv_instruction_036.out | 2 +- .../test_riscv_instruction_037.out | 2 +- .../test_riscv_instruction_039.out | 2 +- .../test_riscv_instruction_040.out | 2 +- .../test_riscv_instruction_043.out | 2 +- .../test_riscv_instruction_045.out | 2 +- .../test_riscv_instruction_046.out | 2 +- .../test_riscv_instruction_047.out | 2 +- .../test_riscv_instruction_048.out | 2 +- .../test_riscv_instruction_049.out | 2 +- .../test_riscv_instruction_050.out | 2 +- .../test_riscv_instruction_051.out | 2 +- 69 files changed, 551 insertions(+), 252 deletions(-) create mode 100644 tests/arch/mips/correct/examples/test_mips_example_001.out create mode 100644 tests/arch/mips/correct/examples/test_mips_example_013.out create mode 100644 tests/arch/riscv/correct/examples/test_riscv_example_001.out create mode 100644 tests/arch/riscv/correct/examples/test_riscv_example_013.out create mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_013.out diff --git a/tests/arch/mips/correct/examples/test_mips_example_001.out b/tests/arch/mips/correct/examples/test_mips_example_001.out new file mode 100644 index 000000000..b48eb7374 --- /dev/null +++ b/tests/arch/mips/correct/examples/test_mips_example_001.out @@ -0,0 +1,5 @@ + +12 +34 +cr[PC]:0xffffffff; ir[1,at]:0x200002; ir[2,v0]:0x1; ir[4,a0]:0x22; keyboard[0x0]:''; display[0x0]:'1234'; + diff --git a/tests/arch/mips/correct/examples/test_mips_example_013.out b/tests/arch/mips/correct/examples/test_mips_example_013.out new file mode 100644 index 000000000..97dfc5ec5 --- /dev/null +++ b/tests/arch/mips/correct/examples/test_mips_example_013.out @@ -0,0 +1,41 @@ + +83 +116 +114 +105 +110 +103 +32 +105 +110 +32 +85 +84 +70 +45 +56 +58 +32 +-30 +-120 +-128 +32 +-30 +-120 +-85 +32 +-30 +-120 +-121 +32 +-30 +-120 +-120 +32 +-16 +-97 +-96 +-84 +0 +cr[PC]:0x20; ir[1,at]:0x200000; ir[2,v0]:0x1; ir[8,t0]:0x200026; keyboard[0x0]:''; display[0x0]:'83116114105110103321051103285847045565832-30-120-12832-30-120-8532-30-120-12132-30-120-12032-16-97-96-840'; + diff --git a/tests/arch/mips/correct/syscalls/test_mips_syscall_001.out b/tests/arch/mips/correct/syscalls/test_mips_syscall_001.out index 1192ad0e9..601697ff4 100644 --- a/tests/arch/mips/correct/syscalls/test_mips_syscall_001.out +++ b/tests/arch/mips/correct/syscalls/test_mips_syscall_001.out @@ -6,5 +6,5 @@ -5678 1 1416128883 -cr[PC]:0x74; ir[1,at]:0x200008; ir[2,v0]:0x1; ir[4,a0]:0x54686973; ir[8,t0]:0x4; ir[9,t1]:0x200000; keyboard[0x0]:''; display[0x0]:'6673120134-567811416128883'; +cr[PC]:0x6c; ir[1,at]:0x200008; ir[2,v0]:0x1; ir[4,a0]:0x54686973; ir[8,t0]:0x4; ir[9,t1]:0x200000; keyboard[0x0]:''; display[0x0]:'6673120134-567811416128883'; diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_001.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_001.out index d8f77e300..5c7476c32 100644 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_001.out +++ b/tests/arch/mips/error/compiler/test_mips_error_compiler_001.out @@ -1,10 +1,18 @@ -Error at line 9 (A): -Repeated tag: A - - 8 a: .byte -1 -->9 A: .half 23 +[E12] Error: Label `A` is already defined + ╭─[ assembly:9:4 ] + │ + 7 │ A: .word -1 + │ ─┬ + │ ╰── Note: Label also defined here + │ + 9 │ A: .half 23 + │ ─┬ + │ ╰── Duplicate label + │ + │ Help: Consider renaming either of the labels +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_002.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_002.out index 18b3b2fc0..10ce10d62 100644 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_002.out +++ b/tests/arch/mips/error/compiler/test_mips_error_compiler_002.out @@ -1,10 +1,12 @@ -Error at line 12 (suma): -Instruction 'suma' not found - - 11 main: -->12 suma $t0, $t1, $t2 +[E02] Error: Instruction `suma` isn't defined + ╭─[ assembly:12:4 ] + │ + 12 │ suma $t0, $t1, $t2 + │ ──┬─ + │ ╰─── Unknown instruction +────╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_003.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_003.out index cbf7e3143..d2bf39ee3 100644 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_003.out +++ b/tests/arch/mips/error/compiler/test_mips_error_compiler_003.out @@ -1,10 +1,34 @@ -Error at line 12 (add $reg3 $reg2 $reg1): -Incorrect instruction syntax for 'add $reg3 $reg2 $reg1' +[E09] Error: Incorrect instruction syntax + ╭─[ assembly:12:8 ] + │ + 12 │ add 25, $t1, 12 + │ ─────┬───── + │ ╰─────── Incorrect syntax + │ + │ Note: Allowed formats: + │ add $reg3,$reg2,$reg1 + │ add $rs,$rt,inm +────╯ - 11 main: -->12 add 25, $t1, 12 +The syntax `add $reg3,$reg2,$reg1` failed with the following reason: +Error: found `integer (25)` but expected `$` + ╭─[ assembly:12:8 ] + │ + 12 │ add 25, $t1, 12 + │ ─┬ + │ ╰── Unexpected input +────╯ + +The syntax `add $rs,$rt,inm` failed with the following reason: +Error: found `integer (25)` but expected `$` + ╭─[ assembly:12:8 ] + │ + 12 │ add 25, $t1, 12 + │ ─┬ + │ ╰── Unexpected input +────╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_004.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_004.out index 639433294..682367df3 100644 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_004.out +++ b/tests/arch/mips/error/compiler/test_mips_error_compiler_004.out @@ -1,10 +1,14 @@ -Error at line 12 (s50): -Register 's50' not found - - 11 main: -->12 add $t0, $t1, $s50 +[E05] Error: Register `s50` isn't defined in file type `Integer` + ╭─[ assembly:12:19 ] + │ + 12 │ add $t0, $t1, $s50 + │ ─┬─ + │ ╰─── Unknown register + │ + │ Help: Did you mean `s0` or `s5`? +────╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_005.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_005.out index 8a51b1caa..5c0fd2a61 100644 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_005.out +++ b/tests/arch/mips/error/compiler/test_mips_error_compiler_005.out @@ -1,11 +1,14 @@ -Error at line 7 (0x123): -Number '0x123' is too big - - 6 .data -->7 a: .byte 0x123 - 8 +[E23] Error: Value `291` is outside of the valid range of the field + ╭─[ assembly:7:19 ] + │ + 7 │ a: .byte 0x123 + │ ──┬── + │ ╰──── This expression has value `291` + │ + │ Note: Allowed range is [-128, 255] +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_006.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_006.out index 8a51b1caa..a77e8dcd5 100644 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_006.out +++ b/tests/arch/mips/error/compiler/test_mips_error_compiler_006.out @@ -1,11 +1,26 @@ -Error at line 7 (0x123): -Number '0x123' is too big +[E09] Error: Incorrect instruction syntax + ╭─[ assembly:11:7 ] + │ + 11 │ li $t0, 0xhello + │ ──────┬───── + │ ╰─────── Incorrect syntax + │ + │ Note: Allowed formats: + │ li $rd,val +────╯ - 6 .data -->7 a: .byte 0x123 - 8 +The syntax `li $rd,val` failed with the following reason: +Error: found `identifier (xhello)` but expected `\n`, `binary operator`, or `end of input` + ╭─[ assembly:11:13 ] + │ + 11 │ li $t0, 0xhello + │ ┬───┬── + │ ╰──────── While parsing this `expression` + │ │ + │ ╰──── Unexpected input +────╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_007.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_007.out index d181ef242..c966e8c00 100644 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_007.out +++ b/tests/arch/mips/error/compiler/test_mips_error_compiler_007.out @@ -1,10 +1,14 @@ -Error at line 11 (mains): -Tag 'mains' is not valid - - 10 li $t0, 10 -->11 j mains +[E03] Error: Label `mains` isn't defined + ╭─[ assembly:11:7 ] + │ + 11 │ j mains + │ ──┬── + │ ╰──── Unknown label + │ + │ Help: Did you mean `main`? +────╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_008.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_008.out index 1a1fa1532..eb758f055 100644 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_008.out +++ b/tests/arch/mips/error/compiler/test_mips_error_compiler_008.out @@ -1,10 +1,14 @@ -Error at line 8: -Please check instruction syntax, inmediate ranges, register name, etc. - - 7 main: -->8 j 0x12345678 +[E23] Error: Value `305419896` is outside of the valid range of the field + ╭─[ assembly:8:6 ] + │ + 8 │ j 0x12345678 + │ ─────┬──── + │ ╰────── This expression has value `305419896` + │ + │ Note: Allowed range is [-33554432, 33554431] +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_009.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_009.out index b902b990c..dc58ec9fa 100644 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_009.out +++ b/tests/arch/mips/error/compiler/test_mips_error_compiler_009.out @@ -1,10 +1,26 @@ -Error at line 8 (0xhello): -Immediate number '0xhello' is not valid +[E09] Error: Incorrect instruction syntax + ╭─[ assembly:8:6 ] + │ + 8 │ j 0xhello + │ ───┬─── + │ ╰───── Incorrect syntax + │ + │ Note: Allowed formats: + │ j addr +───╯ - 7 main: -->8 j 0xhello +The syntax `j addr` failed with the following reason: +Error: found `identifier (xhello)` but expected `\n`, `binary operator`, or `end of input` + ╭─[ assembly:8:7 ] + │ + 8 │ j 0xhello + │ ┬───┬── + │ ╰──────── While parsing this `expression` + │ │ + │ ╰──── Unexpected input +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_014.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_014.out index a4744db4d..81e4462e8 100644 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_014.out +++ b/tests/arch/mips/error/compiler/test_mips_error_compiler_014.out @@ -1,10 +1,12 @@ -Error at line 8 (.directive): -Invalid directive: .directive - - 7 .align 2 -->8 example: .directive 221 +[E01] Error: Directive `.directive` isn't defined + ╭─[ assembly:8:14 ] + │ + 8 │ example: .directive 221 + │ ─────┬──── + │ ╰────── Unknown directive +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_015.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_015.out index 691cbf761..0c8632ae4 100644 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_015.out +++ b/tests/arch/mips/error/compiler/test_mips_error_compiler_015.out @@ -1,11 +1,12 @@ -Error at line 8 (hello): -Invalid value 'hello' as number. - - 7 .align 2 -->8 example: .word hello - 9 +[E03] Error: Label `hello` isn't defined + ╭─[ assembly:8:22 ] + │ + 8 │ example: .word hello + │ ──┬── + │ ╰──── Unknown label +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_016.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_016.out index 16bbdbcf2..ea7274441 100644 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_016.out +++ b/tests/arch/mips/error/compiler/test_mips_error_compiler_016.out @@ -1,11 +1,14 @@ -Error at line 8: -The string of characters must start with " - - 7 .align 2 -->8 example: .ascii hello world" - 9 +Error: Unterminated string literal + ╭─[ assembly:8:32 ] + │ + 8 │ example: .ascii hello world" + │ ───┬─┬ + │ ╰──── While parsing this `identifier` + │ │ + │ ╰── Caused by this +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_017.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_017.out index 252b00265..543ea4f4a 100644 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_017.out +++ b/tests/arch/mips/error/compiler/test_mips_error_compiler_017.out @@ -1,11 +1,14 @@ -Error at line 8: -The string of characters must end with " - - 7 .align 2 -->8 example: .ascii "hello world - 9 +Error: Unterminated string literal + ╭─[ assembly:8:33 ] + │ + 8 │ example: .ascii "hello world + │ ──────┬─────┬ + │ ╰──────── While parsing this `string` + │ │ + │ ╰── Caused by this +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_018.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_018.out index 89c84b0f2..da5e6eec9 100644 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_018.out +++ b/tests/arch/mips/error/compiler/test_mips_error_compiler_018.out @@ -1,11 +1,14 @@ -Error at line 7 (0x12345): -Number '0x12345' is too big - - 6 .data -->7 example: .half 0x12345 - 8 +[E23] Error: Value `74565` is outside of the valid range of the field + ╭─[ assembly:7:20 ] + │ + 7 │ example: .half 0x12345 + │ ───┬─── + │ ╰───── This expression has value `74565` + │ + │ Note: Allowed range is [-32768, 65535] +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_019.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_019.out index d1dc21973..61d170cee 100644 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_019.out +++ b/tests/arch/mips/error/compiler/test_mips_error_compiler_019.out @@ -1,11 +1,14 @@ -Error at line 7 (0x): -Number '0x' is empty - - 6 .data -->7 .byte 0x - 8 +Error: found `identifier (x)` but expected `,`, `\n`, `binary operator`, or `end of input` + ╭─[ assembly:7:12 ] + │ + 7 │ .byte 0x + │ ┬┬ + │ ╰─── While parsing this `expression` + │ │ + │ ╰── Unexpected input +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_021.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_021.out index 35a2ef06c..0fae5b507 100644 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_021.out +++ b/tests/arch/mips/error/compiler/test_mips_error_compiler_021.out @@ -1,11 +1,12 @@ -Error at line 9: -The data must be aligned - - 8 example: .byte 23 -->9 example2: .half 2 - 10 string: .asciiz "hello" +[E17] Error: Data at address `0x200001` isn't aligned to size `2` nor word size `4` + ╭─[ assembly:9:21 ] + │ + 9 │ example2: .half 2 + │ ┬ + │ ╰── This value isn't aligned +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_022.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_022.out index 780eee03b..f4c45383c 100644 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_022.out +++ b/tests/arch/mips/error/compiler/test_mips_error_compiler_022.out @@ -1,11 +1,12 @@ -Error at line 7 (-10): -The space directive value should be positive and greater than zero - - 6 .data -->7 .space -10 - 8 +[E22] Error: Negative values aren't allowed here + ╭─[ assembly:7:12 ] + │ + 7 │ .space -10 + │ ─┬─ + │ ╰─── This expression has value `-10` +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_023.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_023.out index a99e652c7..deb0a1708 100644 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_023.out +++ b/tests/arch/mips/error/compiler/test_mips_error_compiler_023.out @@ -1,10 +1,14 @@ -Error at line 10: -Empty directive - - 9 example2: .half -->10 +[E10] Error: Incorrect amount of arguments, expected at least `1` but found `0` + ╭─[ assembly:9:20 ] + │ + 9 │ example2: .half + │ │ + │ ╰─ This directive has `0` arguments + │ + │ Help: Consider adding the missing `1` argument +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_030.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_030.out index e7ae53a33..a02fc0290 100644 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_030.out +++ b/tests/arch/mips/error/compiler/test_mips_error_compiler_030.out @@ -1,9 +1,12 @@ -Error at line 1 (Please enter the assembly code before compiling): -Please enter the assembly code before compiling - -->1 +[E13] Error: Main label `main` not found + ╭─[ assembly:8:15 ] + │ + 8 │ li $t0, 10 + │ │ + │ ╰─ Consider adding a label called `main` to an instruction +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/error/executor/test_mips_error_executor_009.out b/tests/arch/mips/error/executor/test_mips_error_executor_009.out index 8be2fd58a..4250e5e73 100644 --- a/tests/arch/mips/error/executor/test_mips_error_executor_009.out +++ b/tests/arch/mips/error/executor/test_mips_error_executor_009.out @@ -1,6 +1,6 @@ Error found. - The register 0 | zero is not writeable + The register 0 | zero cannot be written cr[PC]:0x4; keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/instructions/test_mips_instruction_022.out b/tests/arch/mips/instructions/test_mips_instruction_022.out index f99b8375d..688c96a0a 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_022.out +++ b/tests/arch/mips/instructions/test_mips_instruction_022.out @@ -1,3 +1,3 @@ -cr[PC]:0x20; ir[1,at]:0xffffdaf2; ir[8,t0]:0xaad4; ir[9,t1]:0x11d7; ir[10,t2]:0xffffdaf2; ir[11,t3]:0x2ab5; ir[12,t4]:0x7000011d; ir[13,t5]:0xb5e5ffff; keyboard[0x0]:''; display[0x0]:''; +cr[PC]:0x28; ir[1,at]:0xffffdaf2; ir[8,t0]:0xaad4; ir[9,t1]:0x11d7; ir[10,t2]:0xffffdaf2; ir[11,t3]:0x2ab5; ir[12,t4]:0x7000011d; ir[13,t5]:0xb5e5ffff; keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/instructions/test_mips_instruction_023.out b/tests/arch/mips/instructions/test_mips_instruction_023.out index 17e3993e1..206f0d6eb 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_023.out +++ b/tests/arch/mips/instructions/test_mips_instruction_023.out @@ -1,3 +1,3 @@ -cr[PC]:0x20; ir[1,at]:0xffffdaf2; ir[8,t0]:0xaad4; ir[9,t1]:0x11d7; ir[10,t2]:0xffffdaf2; ir[11,t3]:0x2ab50; ir[12,t4]:0x11d70; ir[13,t5]:0xed790000; keyboard[0x0]:''; display[0x0]:''; +cr[PC]:0x28; ir[1,at]:0xffffdaf2; ir[8,t0]:0xaad4; ir[9,t1]:0x11d7; ir[10,t2]:0xffffdaf2; ir[11,t3]:0x2ab50; ir[12,t4]:0x11d70; ir[13,t5]:0xed790000; keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/instructions/test_mips_instruction_027.out b/tests/arch/mips/instructions/test_mips_instruction_027.out index 82a1d683e..103850674 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_027.out +++ b/tests/arch/mips/instructions/test_mips_instruction_027.out @@ -1,3 +1,3 @@ -cr[PC]:0x20; ir[1,at]:0xffffdaf2; ir[8,t0]:0xaad4; ir[9,t1]:0x11d7; ir[10,t2]:0xffffdaf2; ir[11,t3]:0x2ab5; ir[12,t4]:0x11d; ir[13,t5]:0x1ffff; keyboard[0x0]:''; display[0x0]:''; +cr[PC]:0x28; ir[1,at]:0xffffdaf2; ir[8,t0]:0xaad4; ir[9,t1]:0x11d7; ir[10,t2]:0xffffdaf2; ir[11,t3]:0x2ab5; ir[12,t4]:0x11d; ir[13,t5]:0x1ffff; keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/instructions/test_mips_instruction_028.out b/tests/arch/mips/instructions/test_mips_instruction_028.out index 4a38129f0..96e538869 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_028.out +++ b/tests/arch/mips/instructions/test_mips_instruction_028.out @@ -1,3 +1,3 @@ -cr[PC]:0x20; ir[1,at]:0xffffdaf2; ir[8,t0]:0xaad4; ir[9,t1]:0x11d7; ir[10,t2]:0xffffdaf2; ir[11,t3]:0x2ab5; ir[12,t4]:0x11d; ir[13,t5]:0xffffffff; keyboard[0x0]:''; display[0x0]:''; +cr[PC]:0x28; ir[1,at]:0xffffdaf2; ir[8,t0]:0xaad4; ir[9,t1]:0x11d7; ir[10,t2]:0xffffdaf2; ir[11,t3]:0x2ab5; ir[12,t4]:0x11d; ir[13,t5]:0xffffffff; keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/instructions/test_mips_instruction_033.out b/tests/arch/mips/instructions/test_mips_instruction_033.out index 18e6769ae..c870908e4 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_033.out +++ b/tests/arch/mips/instructions/test_mips_instruction_033.out @@ -1,10 +1,12 @@ -Error at line 16 (Please enter the assembly code before compiling): -Please enter the assembly code before compiling - - 15 # srli x10, x7, 15 -->16 +[E13] Error: Main label `main` not found + ╭─[ assembly:1:1 ] + │ + 1 │ + │ │ + │ ╰─ Consider adding a label called `main` to an instruction +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/instructions/test_mips_instruction_037.out b/tests/arch/mips/instructions/test_mips_instruction_037.out index ba5eddb6d..c870908e4 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_037.out +++ b/tests/arch/mips/instructions/test_mips_instruction_037.out @@ -1,10 +1,12 @@ -Error at line 19 (Please enter the assembly code before compiling): -Please enter the assembly code before compiling - - 18 # mulhu x12, x8, x5 -->19 +[E13] Error: Main label `main` not found + ╭─[ assembly:1:1 ] + │ + 1 │ + │ │ + │ ╰─ Consider adding a label called `main` to an instruction +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/instructions/test_mips_instruction_066.out b/tests/arch/mips/instructions/test_mips_instruction_066.out index a7f2fc49f..aa4e53991 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_066.out +++ b/tests/arch/mips/instructions/test_mips_instruction_066.out @@ -1,11 +1,12 @@ -Error at line 15 (t0): -Register 't0' not found - - 14 -->15 cvt.w.d $t0, $FP0 - 16 cvt.w.d $t1, $FP2 +[E05] Error: Register `t0` isn't defined in file type `DoubleFloatingPoint` + ╭─[ assembly:15:14 ] + │ + 15 │ cvt.w.d $t0, $FP0 + │ ─┬ + │ ╰── Unknown register +────╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/instructions/test_mips_instruction_067.out b/tests/arch/mips/instructions/test_mips_instruction_067.out index 9bfd1f418..6b18c9b6f 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_067.out +++ b/tests/arch/mips/instructions/test_mips_instruction_067.out @@ -1,11 +1,12 @@ -Error at line 17 (t0): -Register 't0' not found - - 16 -->17 cvt.d.w $FP0, $t0 - 18 cvt.d.w $FP2, $t1 +[E05] Error: Register `t0` isn't defined in file type `DoubleFloatingPoint` + ╭─[ assembly:17:20 ] + │ + 17 │ cvt.d.w $FP0, $t0 + │ ─┬ + │ ╰── Unknown register +────╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_018.out b/tests/arch/mips/sentinel/test_mips_sentinels_018.out index 5142e9336..d4255a064 100644 --- a/tests/arch/mips/sentinel/test_mips_sentinels_018.out +++ b/tests/arch/mips/sentinel/test_mips_sentinels_018.out @@ -1,11 +1,3 @@ - -Error at line 29 (addi $reg2 $reg1 val): -Incorrect instruction syntax for 'addi $reg2 $reg1 val' - - 28 undefined -->29 undefined - -Not executed -keyboard[0x0]:''; display[0x0]:''; +cr[PC]:0x10; ir[2,v0]:0xa; ir[29,sp]:0x9; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/correct/examples/test_riscv_example_001.out b/tests/arch/riscv/correct/examples/test_riscv_example_001.out new file mode 100644 index 000000000..b813595e7 --- /dev/null +++ b/tests/arch/riscv/correct/examples/test_riscv_example_001.out @@ -0,0 +1,5 @@ + +12 +34 +cr[PC]:0xfffffffe; ir[x10,a0]:0x22; ir[x17,a7]:0x1; keyboard[0x0]:''; display[0x0]:'1234'; + diff --git a/tests/arch/riscv/correct/examples/test_riscv_example_013.out b/tests/arch/riscv/correct/examples/test_riscv_example_013.out new file mode 100644 index 000000000..fa87a5452 --- /dev/null +++ b/tests/arch/riscv/correct/examples/test_riscv_example_013.out @@ -0,0 +1,41 @@ + +83 +116 +114 +105 +110 +103 +32 +105 +110 +32 +85 +84 +70 +45 +56 +58 +32 +-30 +-120 +-128 +32 +-30 +-120 +-85 +32 +-30 +-120 +-121 +32 +-30 +-120 +-120 +32 +-16 +-97 +-96 +-84 +0 +cr[PC]:0x1c; ir[x5,t0]:0x200026; ir[x17,a7]:0x1; keyboard[0x0]:''; display[0x0]:'83116114105110103321051103285847045565832-30-120-12832-30-120-8532-30-120-12132-30-120-12032-16-97-96-840'; + diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_001.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_001.out index 8155de365..5131c282f 100644 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_001.out +++ b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_001.out @@ -1,10 +1,18 @@ -Error at line 9 (A): -Repeated tag: A - - 8 a: .byte -1 -->9 A: .half 23 +[E12] Error: Label `A` is already defined + ╭─[ assembly:9:2 ] + │ + 7 │ A: .word -1 + │ ─┬ + │ ╰─────── Note: Label also defined here + │ + 9 │ A: .half 23 + │ ─┬ + │ ╰───── Duplicate label + │ + │ Help: Consider renaming either of the labels +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_002.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_002.out index 3c2aa4610..fad0e52c0 100644 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_002.out +++ b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_002.out @@ -1,10 +1,12 @@ -Error at line 12 (suma): -Instruction 'suma' not found - - 11 main: -->12 suma t0, t1, t2 +[E02] Error: Instruction `suma` isn't defined + ╭─[ assembly:12:2 ] + │ + 12 │ suma t0, t1, t2 + │ ──┬─ + │ ╰─── Unknown instruction +────╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_003.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_003.out index 5a0b754b2..c14b5930e 100644 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_003.out +++ b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_003.out @@ -1,10 +1,26 @@ -Error at line 12 (add rd rs1 rs2): -Incorrect instruction syntax for 'add rd rs1 rs2' +[E09] Error: Incorrect instruction syntax + ╭─[ assembly:12:8 ] + │ + 12 │ add t0, t1 + │ ───┬── + │ ╰──── Incorrect syntax + │ + │ Note: Allowed formats: + │ add rd,rs1,rs2 +────╯ - 11 main: -->12 add t0, t1 +The syntax `add rd,rs1,rs2` failed with the following reason: +Error: found `end of input` but expected `,`, `\n`, or `binary operator` + ╭─[ assembly:12:14 ] + │ + 12 │ add t0, t1 + │ ─┬│ + │ ╰── While parsing this `expression` + │ │ + │ ╰─ Unexpected input +────╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_004.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_004.out index 9b2d1dc38..b942b63b9 100644 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_004.out +++ b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_004.out @@ -1,10 +1,14 @@ -Error at line 12 (s50): -Register 's50' not found - - 11 main: -->12 add t0, t1, s50 +[E05] Error: Register `s50` isn't defined in file type `Integer` + ╭─[ assembly:12:14 ] + │ + 12 │ add t0, t1, s50 + │ ─┬─ + │ ╰─── Unknown register + │ + │ Help: Did you mean `s0`, `s10`, or `s5`? +────╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_005.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_005.out index 8a51b1caa..5c0fd2a61 100644 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_005.out +++ b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_005.out @@ -1,11 +1,14 @@ -Error at line 7 (0x123): -Number '0x123' is too big - - 6 .data -->7 a: .byte 0x123 - 8 +[E23] Error: Value `291` is outside of the valid range of the field + ╭─[ assembly:7:19 ] + │ + 7 │ a: .byte 0x123 + │ ──┬── + │ ╰──── This expression has value `291` + │ + │ Note: Allowed range is [-128, 255] +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_006.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_006.out index 8a51b1caa..38fa6dacb 100644 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_006.out +++ b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_006.out @@ -1,11 +1,26 @@ -Error at line 7 (0x123): -Number '0x123' is too big +[E09] Error: Incorrect instruction syntax + ╭─[ assembly:11:7 ] + │ + 11 │ li t0, 0xhello + │ ─────┬───── + │ ╰─────── Incorrect syntax + │ + │ Note: Allowed formats: + │ li rd,val +────╯ - 6 .data -->7 a: .byte 0x123 - 8 +The syntax `li rd,val` failed with the following reason: +Error: found `identifier (xhello)` but expected `\n`, `binary operator`, or `end of input` + ╭─[ assembly:11:12 ] + │ + 11 │ li t0, 0xhello + │ ┬───┬── + │ ╰──────── While parsing this `expression` + │ │ + │ ╰──── Unexpected input +────╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_007.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_007.out index 77e040699..c966e8c00 100644 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_007.out +++ b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_007.out @@ -1,10 +1,14 @@ -Error at line 11 (mains): -Tag 'mains' is not valid - - 10 li t0, 10 -->11 j mains +[E03] Error: Label `mains` isn't defined + ╭─[ assembly:11:7 ] + │ + 11 │ j mains + │ ──┬── + │ ╰──── Unknown label + │ + │ Help: Did you mean `main`? +────╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_008.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_008.out index 1a1fa1532..a310e0504 100644 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_008.out +++ b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_008.out @@ -1,10 +1,20 @@ -Error at line 8: -Please check instruction syntax, inmediate ranges, register name, etc. - - 7 main: -->8 j 0x12345678 +[E23] Error: Value `305419896` is outside of the valid range of the field + ╭─[ :1:17 ] + │ + 1 │ beq zero, zero, off; + │ ─┬─ + │ ╰─── This expression has value `305419896` + │ + ├─[ assembly:8:4 ] + │ + 8 │ j 0x12345678 + │ ──────┬───── + │ ╰─────── Generated by this pseudoinstruction + │ + │ Note: Allowed range is [-4096, 4095] +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_009.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_009.out index 338606755..e000c91dc 100644 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_009.out +++ b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_009.out @@ -1,10 +1,26 @@ -Error at line 8: -Please check instruction syntax, inmediate ranges, register name, etc. +[E09] Error: Incorrect instruction syntax + ╭─[ assembly:8:6 ] + │ + 8 │ j 0xhello + │ ───┬─── + │ ╰───── Incorrect syntax + │ + │ Note: Allowed formats: + │ j off +───╯ - 7 main: -->8 j 0xhello +The syntax `j off` failed with the following reason: +Error: found `identifier (xhello)` but expected `\n`, `binary operator`, or `end of input` + ╭─[ assembly:8:7 ] + │ + 8 │ j 0xhello + │ ┬───┬── + │ ╰──────── While parsing this `expression` + │ │ + │ ╰──── Unexpected input +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_014.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_014.out index a4744db4d..81e4462e8 100644 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_014.out +++ b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_014.out @@ -1,10 +1,12 @@ -Error at line 8 (.directive): -Invalid directive: .directive - - 7 .align 2 -->8 example: .directive 221 +[E01] Error: Directive `.directive` isn't defined + ╭─[ assembly:8:14 ] + │ + 8 │ example: .directive 221 + │ ─────┬──── + │ ╰────── Unknown directive +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_015.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_015.out index 691cbf761..0c8632ae4 100644 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_015.out +++ b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_015.out @@ -1,11 +1,12 @@ -Error at line 8 (hello): -Invalid value 'hello' as number. - - 7 .align 2 -->8 example: .word hello - 9 +[E03] Error: Label `hello` isn't defined + ╭─[ assembly:8:22 ] + │ + 8 │ example: .word hello + │ ──┬── + │ ╰──── Unknown label +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_016.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_016.out index d56d429ca..daa5fb858 100644 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_016.out +++ b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_016.out @@ -1,11 +1,14 @@ -Error at line 8: -The string of characters must start with " - - 7 .align 2 -->8 example: .string hello world" - 9 +Error: Unterminated string literal + ╭─[ assembly:8:33 ] + │ + 8 │ example: .string hello world" + │ ───┬─┬ + │ ╰──── While parsing this `identifier` + │ │ + │ ╰── Caused by this +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_017.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_017.out index 81a724a14..ade735b68 100644 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_017.out +++ b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_017.out @@ -1,11 +1,14 @@ -Error at line 8: -The string of characters must end with " - - 7 .align 2 -->8 example: .string "hello world - 9 +Error: Unterminated string literal + ╭─[ assembly:8:34 ] + │ + 8 │ example: .string "hello world + │ ──────┬─────┬ + │ ╰──────── While parsing this `string` + │ │ + │ ╰── Caused by this +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_018.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_018.out index 89c84b0f2..da5e6eec9 100644 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_018.out +++ b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_018.out @@ -1,11 +1,14 @@ -Error at line 7 (0x12345): -Number '0x12345' is too big - - 6 .data -->7 example: .half 0x12345 - 8 +[E23] Error: Value `74565` is outside of the valid range of the field + ╭─[ assembly:7:20 ] + │ + 7 │ example: .half 0x12345 + │ ───┬─── + │ ╰───── This expression has value `74565` + │ + │ Note: Allowed range is [-32768, 65535] +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_019.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_019.out index d1dc21973..61d170cee 100644 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_019.out +++ b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_019.out @@ -1,11 +1,14 @@ -Error at line 7 (0x): -Number '0x' is empty - - 6 .data -->7 .byte 0x - 8 +Error: found `identifier (x)` but expected `,`, `\n`, `binary operator`, or `end of input` + ╭─[ assembly:7:12 ] + │ + 7 │ .byte 0x + │ ┬┬ + │ ╰─── While parsing this `expression` + │ │ + │ ╰── Unexpected input +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_021.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_021.out index 90b6f30f3..0fae5b507 100644 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_021.out +++ b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_021.out @@ -1,11 +1,12 @@ -Error at line 9: -The data must be aligned - - 8 example: .byte 23 -->9 example2: .half 2 - 10 string: .string "hello" +[E17] Error: Data at address `0x200001` isn't aligned to size `2` nor word size `4` + ╭─[ assembly:9:21 ] + │ + 9 │ example2: .half 2 + │ ┬ + │ ╰── This value isn't aligned +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_022.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_022.out index df7b1e2b4..e9a31f9c7 100644 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_022.out +++ b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_022.out @@ -1,11 +1,12 @@ -Error at line 7 (-10): -The space directive value should be positive and greater than zero - - 6 .data -->7 .zero -10 - 8 +[E22] Error: Negative values aren't allowed here + ╭─[ assembly:7:11 ] + │ + 7 │ .zero -10 + │ ─┬─ + │ ╰─── This expression has value `-10` +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_023.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_023.out index a99e652c7..deb0a1708 100644 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_023.out +++ b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_023.out @@ -1,10 +1,14 @@ -Error at line 10: -Empty directive - - 9 example2: .half -->10 +[E10] Error: Incorrect amount of arguments, expected at least `1` but found `0` + ╭─[ assembly:9:20 ] + │ + 9 │ example2: .half + │ │ + │ ╰─ This directive has `0` arguments + │ + │ Help: Consider adding the missing `1` argument +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_030.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_030.out index e7ae53a33..660623da0 100644 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_030.out +++ b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_030.out @@ -1,9 +1,12 @@ -Error at line 1 (Please enter the assembly code before compiling): -Please enter the assembly code before compiling - -->1 +[E13] Error: Main label `main` not found + ╭─[ assembly:8:14 ] + │ + 8 │ li t0, 10 + │ │ + │ ╰─ Consider adding a label called `main` to an instruction +───╯ Not executed keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_004.out b/tests/arch/riscv/instructions/test_riscv_instruction_004.out index 3804ee956..d36f27819 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_004.out +++ b/tests/arch/riscv/instructions/test_riscv_instruction_004.out @@ -1,3 +1,3 @@ -cr[PC]:0x14; ir[x5,t0]:0x23000; ir[x6,t1]:0x56db000; ir[x7,t2]:0x34000; ir[x8,fp,s0]:0xff002000; ir[x9,s1]:0x2000; keyboard[0x0]:''; display[0x0]:''; +cr[PC]:0x14; ir[x5,t0]:0x23000; ir[x6,t1]:0x56db000; ir[x7,t2]:0x34000; ir[x8,fp,s0]:0x7f002000; ir[x9,s1]:0x2000; keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_013.out b/tests/arch/riscv/instructions/test_riscv_instruction_013.out new file mode 100644 index 000000000..5d7a09fa8 --- /dev/null +++ b/tests/arch/riscv/instructions/test_riscv_instruction_013.out @@ -0,0 +1,3 @@ + +cr[PC]:0x48; ir[x5,t0]:0x200000; ir[x6,t1]:0x200004; ir[x7,t2]:0x200006; ir[x8,fp,s0]:0xe; ir[x10,a0]:0x7f; ir[x12,a2]:0x7fff; ir[x14,a4]:0x20000e; memory[0x20000f]:0xff; memory[0x20000e]:0x7f; memory[0x20000c]:0x7f; memory[0x20000b]:0x0e; keyboard[0x0]:''; display[0x0]:''; + diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_022.out b/tests/arch/riscv/instructions/test_riscv_instruction_022.out index 4061495a9..f08cdef68 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_022.out +++ b/tests/arch/riscv/instructions/test_riscv_instruction_022.out @@ -1,3 +1,3 @@ -cr[PC]:0x24; ir[x5,t0]:0xaad4; ir[x6,t1]:0x11d7; ir[x7,t2]:0xffffdaf2; ir[x8,fp,s0]:0x2ab5; ir[x9,s1]:0x11d; ir[x10,a0]:0x1ffff; keyboard[0x0]:''; display[0x0]:''; +cr[PC]:0x24; ir[x5,t0]:0xaad4; ir[x6,t1]:0x11d7; ir[x7,t2]:0xffffdaf2; ir[x8,fp,s0]:0x2ab5; ir[x9,s1]:0x11d; ir[x10,a0]:0xffffffff; keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_035.out b/tests/arch/riscv/instructions/test_riscv_instruction_035.out index f44fa7a68..11914d179 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_035.out +++ b/tests/arch/riscv/instructions/test_riscv_instruction_035.out @@ -1,3 +1,3 @@ -cr[PC]:0x20; ir[x5,t0]:0xa; ir[x6,t1]:0xd; ir[x7,t2]:0x2d; ir[x8,fp,s0]:0xfffffffe; ir[x11,a1]:0xffffffff; ir[x12,a2]:0xffffffff; keyboard[0x0]:''; display[0x0]:''; +cr[PC]:0x20; ir[x5,t0]:0xa; ir[x6,t1]:0xd; ir[x7,t2]:0x2d; ir[x8,fp,s0]:0xfffffffe; ir[x9,s1]:0x82; ir[x10,a0]:0x249; ir[x11,a1]:0xffffffa6; ir[x12,a2]:0xffffffec; keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_036.out b/tests/arch/riscv/instructions/test_riscv_instruction_036.out index ea927e21c..11914d179 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_036.out +++ b/tests/arch/riscv/instructions/test_riscv_instruction_036.out @@ -1,3 +1,3 @@ -cr[PC]:0x20; ir[x5,t0]:0xa; ir[x6,t1]:0xd; ir[x7,t2]:0x2d; ir[x8,fp,s0]:0xfffffffe; ir[x11,a1]:0x2c; ir[x12,a2]:0xffffffff; keyboard[0x0]:''; display[0x0]:''; +cr[PC]:0x20; ir[x5,t0]:0xa; ir[x6,t1]:0xd; ir[x7,t2]:0x2d; ir[x8,fp,s0]:0xfffffffe; ir[x9,s1]:0x82; ir[x10,a0]:0x249; ir[x11,a1]:0xffffffa6; ir[x12,a2]:0xffffffec; keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_037.out b/tests/arch/riscv/instructions/test_riscv_instruction_037.out index 28c4473a5..11914d179 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_037.out +++ b/tests/arch/riscv/instructions/test_riscv_instruction_037.out @@ -1,3 +1,3 @@ -cr[PC]:0x20; ir[x5,t0]:0xa; ir[x6,t1]:0xd; ir[x7,t2]:0x2d; ir[x8,fp,s0]:0xfffffffe; ir[x11,a1]:0x2c; ir[x12,a2]:0x9; keyboard[0x0]:''; display[0x0]:''; +cr[PC]:0x20; ir[x5,t0]:0xa; ir[x6,t1]:0xd; ir[x7,t2]:0x2d; ir[x8,fp,s0]:0xfffffffe; ir[x9,s1]:0x82; ir[x10,a0]:0x249; ir[x11,a1]:0xffffffa6; ir[x12,a2]:0xffffffec; keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_039.out b/tests/arch/riscv/instructions/test_riscv_instruction_039.out index f7fe5caf1..8308a6c53 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_039.out +++ b/tests/arch/riscv/instructions/test_riscv_instruction_039.out @@ -1,3 +1,3 @@ -cr[PC]:0x24; ir[x5,t0]:0x10; ir[x6,t1]:0x100; ir[x7,t2]:0xffffe000; ir[x8,fp,s0]:0x18; ir[x9,s1]:0xffffe00; ir[x10,a0]:0x10; ir[x11,a1]:0xaaaa955; keyboard[0x0]:''; display[0x0]:''; +cr[PC]:0x24; ir[x5,t0]:0x10; ir[x6,t1]:0x100; ir[x7,t2]:0xffffe000; ir[x8,fp,s0]:0x18; ir[x9,s1]:0xffffe00; ir[x10,a0]:0x10; ir[x11,a1]:0xaaaa955; ir[x12,a2]:0x5; keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_040.out b/tests/arch/riscv/instructions/test_riscv_instruction_040.out index 2faa31cb3..a6c4184e4 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_040.out +++ b/tests/arch/riscv/instructions/test_riscv_instruction_040.out @@ -1,3 +1,3 @@ -cr[pc]:0x24; ir[x5,t0]:0x10; ir[x6,t1]:0x100; ir[x7,t2]:0xffffe000; ir[x8,fp,s0]:0x18; ir[x11,a1]:0x8; ir[x12,a2]:0x18; keyboard[0x0]:''; display[0x0]:''; +cr[PC]:0x24; ir[x5,t0]:0x10; ir[x6,t1]:0x100; ir[x7,t2]:0xffffe000; ir[x8,fp,s0]:0x18; ir[x11,a1]:0x8; ir[x12,a2]:0x18; keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_043.out b/tests/arch/riscv/instructions/test_riscv_instruction_043.out index b1e9bb09b..d540a9815 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_043.out +++ b/tests/arch/riscv/instructions/test_riscv_instruction_043.out @@ -1,3 +1,3 @@ -cr[pc]:0x24; ir[x5,t0]:0xb; ir[x6,t1]:0x22b; ir[x7,t2]:0x5; ir[x8,fp,s0]:0x21f; ir[x17,a7]:0xa; ir[x28,t3]:0x22; keyboard[0x0]:''; display[0x0]:''; +cr[PC]:0x24; ir[x5,t0]:0xb; ir[x6,t1]:0x22b; ir[x7,t2]:0x5; ir[x8,fp,s0]:0x21f; ir[x17,a7]:0xa; ir[x28,t3]:0x22; keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_045.out b/tests/arch/riscv/instructions/test_riscv_instruction_045.out index 5f5ed833a..4b5977236 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_045.out +++ b/tests/arch/riscv/instructions/test_riscv_instruction_045.out @@ -1,3 +1,3 @@ -cr[pc]:0x24; ir[x5,t0]:0xb; ir[x6,t1]:0xfffffdd5; ir[x7,t2]:0x5; ir[x8,fp,s0]:0xfffffde1; ir[x17,a7]:0xa; ir[x28,t3]:0x22; keyboard[0x0]:''; display[0x0]:''; +cr[PC]:0x24; ir[x5,t0]:0xb; ir[x6,t1]:0xfffffdd5; ir[x7,t2]:0x5; ir[x8,fp,s0]:0xfffffde1; ir[x17,a7]:0xa; ir[x28,t3]:0x22; keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_046.out b/tests/arch/riscv/instructions/test_riscv_instruction_046.out index 3764481ae..5c8366988 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_046.out +++ b/tests/arch/riscv/instructions/test_riscv_instruction_046.out @@ -1,3 +1,3 @@ -cr[pc]:0x24; ir[x5,t0]:0x22346; ir[x6,t1]:0x11d7; ir[x7,t2]:0xffffdaf2; ir[x8,fp,s0]:0xfffddcb9; ir[x9,s1]:0xffffee28; ir[x10,a0]:0x250d; keyboard[0x0]:''; display[0x0]:''; +cr[PC]:0x24; ir[x5,t0]:0x22346; ir[x6,t1]:0x11d7; ir[x7,t2]:0xffffdaf2; ir[x8,fp,s0]:0xfffddcb9; ir[x9,s1]:0xffffee28; ir[x10,a0]:0x250d; keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_047.out b/tests/arch/riscv/instructions/test_riscv_instruction_047.out index a33577387..e899ec914 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_047.out +++ b/tests/arch/riscv/instructions/test_riscv_instruction_047.out @@ -1,3 +1,3 @@ -cr[pc]:0x24; ir[x5,t0]:0x22346; ir[x6,t1]:0x11d7; ir[x7,t2]:0xffffdaf2; ir[x8,fp,s0]:0xfffddcba; ir[x9,s1]:0xffffee29; ir[x10,a0]:0x250e; keyboard[0x0]:''; display[0x0]:''; +cr[PC]:0x24; ir[x5,t0]:0x22346; ir[x6,t1]:0x11d7; ir[x7,t2]:0xffffdaf2; ir[x8,fp,s0]:0xfffddcba; ir[x9,s1]:0xffffee29; ir[x10,a0]:0x250e; keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_048.out b/tests/arch/riscv/instructions/test_riscv_instruction_048.out index fb4cb4600..79919eac7 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_048.out +++ b/tests/arch/riscv/instructions/test_riscv_instruction_048.out @@ -1,3 +1,3 @@ -cr[pc]:0x18; ir[x4,tp]:0x1; ir[x6,t1]:0xffffffff; ir[x9,s1]:0x1; keyboard[0x0]:''; display[0x0]:''; +cr[PC]:0x18; ir[x4,tp]:0x1; ir[x6,t1]:0xffffffff; ir[x9,s1]:0x1; keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_049.out b/tests/arch/riscv/instructions/test_riscv_instruction_049.out index 3e9ef139c..468629a21 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_049.out +++ b/tests/arch/riscv/instructions/test_riscv_instruction_049.out @@ -1,3 +1,3 @@ -cr[pc]:0x18; ir[x4,tp]:0x1; ir[x6,t1]:0xffffffff; ir[x8,fp,s0]:0x1; ir[x10,a0]:0x1; keyboard[0x0]:''; display[0x0]:''; +cr[PC]:0x18; ir[x4,tp]:0x1; ir[x6,t1]:0xffffffff; ir[x8,fp,s0]:0x1; ir[x10,a0]:0x1; keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_050.out b/tests/arch/riscv/instructions/test_riscv_instruction_050.out index 6a6e64bc5..3fe384ae6 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_050.out +++ b/tests/arch/riscv/instructions/test_riscv_instruction_050.out @@ -1,3 +1,3 @@ -cr[pc]:0x18; ir[x4,tp]:0x1; ir[x6,t1]:0xffffffff; ir[x8,fp,s0]:0x1; keyboard[0x0]:''; display[0x0]:''; +cr[PC]:0x18; ir[x4,tp]:0x1; ir[x6,t1]:0xffffffff; ir[x8,fp,s0]:0x1; keyboard[0x0]:''; display[0x0]:''; diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_051.out b/tests/arch/riscv/instructions/test_riscv_instruction_051.out index e4b537b15..e2fa0a4f7 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_051.out +++ b/tests/arch/riscv/instructions/test_riscv_instruction_051.out @@ -1,3 +1,3 @@ -cr[pc]:0x18; ir[x4,tp]:0x1; ir[x6,t1]:0xffffffff; ir[x10,a0]:0x1; keyboard[0x0]:''; display[0x0]:''; +cr[PC]:0x18; ir[x4,tp]:0x1; ir[x6,t1]:0xffffffff; ir[x10,a0]:0x1; keyboard[0x0]:''; display[0x0]:''; From c5e26e1530606d726f79112ec15dc91bc97d7ef5 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Mon, 16 Mar 2026 15:50:45 +0100 Subject: [PATCH 27/85] tests: migration of old snapshot tests --- deno.lock | 35 +++ .../examples/test_mips_example_001.s.snap | 106 +++++++++ .../examples/test_mips_example_002.s.snap | 54 +++++ .../examples/test_mips_example_003.s.snap | 113 +++++++++ .../examples/test_mips_example_004.s.snap | 145 ++++++++++++ .../examples/test_mips_example_005.s.snap | 56 +++++ .../examples/test_mips_example_006.s.snap | 58 +++++ .../examples/test_mips_example_007.s.snap | 78 ++++++ .../examples/test_mips_example_008.s.snap | 171 ++++++++++++++ .../examples/test_mips_example_009.s.snap | 169 +++++++++++++ .../examples/test_mips_example_010.s.snap | 221 +++++++++++++++++ .../examples/test_mips_example_011.s.snap | 85 +++++++ .../examples/test_mips_example_012.s.snap | 119 ++++++++++ .../examples/test_mips_example_013.s.snap | 79 +++++++ .../syscalls/test_mips_syscall_001.s.snap | 114 +++++++++ .../syscalls/test_mips_syscall_002.s.snap | 59 +++++ .../syscalls/test_mips_syscall_003.s.snap | 89 +++++++ .../syscalls/test_mips_syscall_004.s.snap | 87 +++++++ .../syscalls/test_mips_syscall_005.s.snap | 23 ++ .../syscalls/test_mips_syscall_006.s.snap | 24 ++ .../syscalls/test_mips_syscall_008.s.snap | 43 ++++ .../syscalls/test_mips_syscall_010.s.snap | 27 +++ .../syscalls/test_mips_syscall_011.s.snap | 27 +++ .../syscalls/test_mips_syscall_012.s.snap | 23 ++ .../test_mips_instruction_001.s.snap | 56 +++++ .../test_mips_instruction_002.s.snap | 36 +++ .../test_mips_instruction_003.s.snap | 66 ++++++ .../test_mips_instruction_004.s.snap | 40 ++++ .../test_mips_instruction_005.s.snap | 68 ++++++ .../test_mips_instruction_006.s.snap | 73 ++++++ .../test_mips_instruction_007.s.snap | 71 ++++++ .../test_mips_instruction_008.s.snap | 72 ++++++ .../test_mips_instruction_009.s.snap | 80 +++++++ .../test_mips_instruction_010.s.snap | 80 +++++++ .../test_mips_instruction_011.s.snap | 81 +++++++ .../test_mips_instruction_012.s.snap | 80 +++++++ .../test_mips_instruction_013.s.snap | 125 ++++++++++ .../test_mips_instruction_014.s.snap | 71 ++++++ .../test_mips_instruction_015.s.snap | 70 ++++++ .../test_mips_instruction_016.s.snap | 70 ++++++ .../test_mips_instruction_017.s.snap | 62 +++++ .../test_mips_instruction_018.s.snap | 62 +++++ .../test_mips_instruction_019.s.snap | 62 +++++ .../test_mips_instruction_020.s.snap | 55 +++++ .../test_mips_instruction_021.s.snap | 55 +++++ .../test_mips_instruction_022.s.snap | 58 +++++ .../test_mips_instruction_023.s.snap | 58 +++++ .../test_mips_instruction_024.s.snap | 55 +++++ .../test_mips_instruction_025.s.snap | 55 +++++ .../test_mips_instruction_026.s.snap | 77 ++++++ .../test_mips_instruction_027.s.snap | 58 +++++ .../test_mips_instruction_028.s.snap | 58 +++++ .../test_mips_instruction_029.s.snap | 77 ++++++ .../test_mips_instruction_030.s.snap | 77 ++++++ .../test_mips_instruction_031.s.snap | 122 ++++++++++ .../test_mips_instruction_032.s.snap | 71 ++++++ .../test_mips_instruction_034.s.snap | 63 +++++ .../test_mips_instruction_035.s.snap | 78 ++++++ .../test_mips_instruction_036.s.snap | 71 ++++++ .../test_mips_instruction_037.s.snap | 71 ++++++ .../test_mips_instruction_038.s.snap | 61 +++++ .../test_mips_instruction_039.s.snap | 61 +++++ .../test_mips_instruction_040.s.snap | 65 +++++ .../test_mips_instruction_041.s.snap | 60 +++++ .../test_mips_instruction_042.s.snap | 75 ++++++ .../test_mips_instruction_043.s.snap | 89 +++++++ .../test_mips_instruction_044.s.snap | 74 ++++++ .../test_mips_instruction_045.s.snap | 102 ++++++++ .../test_mips_instruction_046.s.snap | 62 +++++ .../test_mips_instruction_047.s.snap | 47 ++++ .../test_mips_instruction_048.s.snap | 60 +++++ .../test_mips_instruction_049.s.snap | 55 +++++ .../test_mips_instruction_050.s.snap | 66 ++++++ .../test_mips_instruction_051.s.snap | 52 ++++ .../test_mips_instruction_052.s.snap | 44 ++++ .../test_mips_instruction_053.s.snap | 45 ++++ .../test_mips_instruction_054.s.snap | 43 ++++ .../test_mips_instruction_055.s.snap | 52 ++++ .../test_mips_instruction_056.s.snap | 71 ++++++ .../test_mips_instruction_057.s.snap | 65 +++++ .../test_mips_instruction_058.s.snap | 140 +++++++++++ .../test_mips_instruction_059.s.snap | 133 +++++++++++ .../test_mips_instruction_060.s.snap | 135 +++++++++++ .../test_mips_instruction_061.s.snap | 132 +++++++++++ .../test_mips_instruction_062.s.snap | 130 ++++++++++ .../test_mips_instruction_063.s.snap | 132 +++++++++++ .../test_mips_instruction_064.s.snap | 141 +++++++++++ .../test_mips_instruction_065.s.snap | 112 +++++++++ .../test_mips_instruction_066.s.snap | 95 ++++++++ .../test_mips_instruction_067.s.snap | 109 +++++++++ .../sentinel/test_mips_sentinels_001.s.snap | 60 +++++ .../sentinel/test_mips_sentinels_002.s.snap | 60 +++++ .../sentinel/test_mips_sentinels_003.s.snap | 60 +++++ .../sentinel/test_mips_sentinels_004.s.snap | 60 +++++ .../sentinel/test_mips_sentinels_005.s.snap | 33 +++ .../sentinel/test_mips_sentinels_006.s.snap | 33 +++ .../sentinel/test_mips_sentinels_007.s.snap | 33 +++ .../sentinel/test_mips_sentinels_008.s.snap | 33 +++ .../sentinel/test_mips_sentinels_009.s.snap | 32 +++ .../sentinel/test_mips_sentinels_010.s.snap | 67 ++++++ .../sentinel/test_mips_sentinels_011.s.snap | 67 ++++++ .../sentinel/test_mips_sentinels_012.s.snap | 67 ++++++ .../sentinel/test_mips_sentinels_013.s.snap | 67 ++++++ .../sentinel/test_mips_sentinels_014.s.snap | 67 ++++++ .../sentinel/test_mips_sentinels_015.s.snap | 67 ++++++ .../sentinel/test_mips_sentinels_016.s.snap | 67 ++++++ .../sentinel/test_mips_sentinels_017.s.snap | 67 ++++++ .../sentinel/test_mips_sentinels_018.s.snap | 39 +++ .../sentinel/test_mips_sentinels_019.s.snap | 64 +++++ .../sentinel/test_mips_sentinels_020.s.snap | 64 +++++ .../sentinel/test_mips_sentinels_021.s.snap | 64 +++++ .../sentinel/test_mips_sentinels_022.s.snap | 64 +++++ .../sentinel/test_mips_sentinels_023.s.snap | 64 +++++ .../sentinel/test_mips_sentinels_024.s.snap | 64 +++++ .../sentinel/test_mips_sentinels_025.s.snap | 64 +++++ .../sentinel/test_mips_sentinels_026.s.snap | 64 +++++ .../sentinel/test_mips_sentinels_027.s.snap | 64 +++++ .../sentinel/test_mips_sentinels_028.s.snap | 64 +++++ .../sentinel/test_mips_sentinels_029.s.snap | 59 +++++ .../sentinel/test_mips_sentinels_030.s.snap | 60 +++++ .../sentinel/test_mips_sentinels_031.s.snap | 49 ++++ .../sentinel/test_mips_sentinels_032.s.snap | 53 +++++ .../sentinel/test_mips_sentinels_033.s.snap | 56 +++++ .../sentinel/test_mips_sentinels_034.s.snap | 55 +++++ .../sentinel/test_mips_sentinels_035.s.snap | 55 +++++ .../examples/test_riscv_example_001.s.snap | 124 ++++++++++ .../examples/test_riscv_example_002.s.snap | 61 +++++ .../examples/test_riscv_example_003.s.snap | 92 ++++++++ .../examples/test_riscv_example_004.s.snap | 133 +++++++++++ .../examples/test_riscv_example_005.s.snap | 52 ++++ .../examples/test_riscv_example_006.s.snap | 54 +++++ .../examples/test_riscv_example_007.s.snap | 74 ++++++ .../examples/test_riscv_example_008.s.snap | 167 +++++++++++++ .../examples/test_riscv_example_009.s.snap | 177 ++++++++++++++ .../examples/test_riscv_example_010.s.snap | 223 ++++++++++++++++++ .../examples/test_riscv_example_011.s.snap | 83 +++++++ .../examples/test_riscv_example_012.s.snap | 129 ++++++++++ .../examples/test_riscv_example_013.s.snap | 78 ++++++ .../examples/test_riscv_example_014.s.snap | 221 +++++++++++++++++ .../examples/test_riscv_example_015.s.snap | 126 ++++++++++ .../examples/test_riscv_tutorial_001.s.snap | 71 ++++++ .../syscalls/test_riscv_syscall_001.s.snap | 117 +++++++++ .../syscalls/test_riscv_syscall_002.s.snap | 52 ++++ .../syscalls/test_riscv_syscall_003.s.snap | 52 ++++ .../syscalls/test_riscv_syscall_004.s.snap | 81 +++++++ .../syscalls/test_riscv_syscall_005.s.snap | 24 ++ .../syscalls/test_riscv_syscall_006.s.snap | 24 ++ .../syscalls/test_riscv_syscall_008.s.snap | 41 ++++ .../syscalls/test_riscv_syscall_010.s.snap | 27 +++ .../syscalls/test_riscv_syscall_011.s.snap | 28 +++ .../syscalls/test_riscv_syscall_012.s.snap | 24 ++ .../test_riscv_instruction_001.s.snap | 49 ++++ .../test_riscv_instruction_002.s.snap | 36 +++ .../test_riscv_instruction_003.s.snap | 55 +++++ .../test_riscv_instruction_004.s.snap | 38 +++ .../test_riscv_instruction_005.s.snap | 58 +++++ .../test_riscv_instruction_006.s.snap | 61 +++++ .../test_riscv_instruction_007.s.snap | 66 ++++++ .../test_riscv_instruction_008.s.snap | 62 +++++ .../test_riscv_instruction_009.s.snap | 67 ++++++ .../test_riscv_instruction_010.s.snap | 66 ++++++ .../test_riscv_instruction_011.s.snap | 67 ++++++ .../test_riscv_instruction_012.s.snap | 66 ++++++ .../test_riscv_instruction_013.s.snap | 91 +++++++ .../test_riscv_instruction_014.s.snap | 67 ++++++ .../test_riscv_instruction_015.s.snap | 62 +++++ .../test_riscv_instruction_016.s.snap | 62 +++++ .../test_riscv_instruction_017.s.snap | 57 +++++ .../test_riscv_instruction_018.s.snap | 57 +++++ .../test_riscv_instruction_019.s.snap | 57 +++++ .../test_riscv_instruction_020.s.snap | 53 +++++ .../test_riscv_instruction_021.s.snap | 53 +++++ .../test_riscv_instruction_022.s.snap | 56 +++++ .../test_riscv_instruction_023.s.snap | 66 ++++++ .../test_riscv_instruction_024.s.snap | 57 +++++ .../test_riscv_instruction_025.s.snap | 57 +++++ .../test_riscv_instruction_026.s.snap | 71 ++++++ .../test_riscv_instruction_027.s.snap | 66 ++++++ .../test_riscv_instruction_028.s.snap | 68 ++++++ .../test_riscv_instruction_029.s.snap | 71 ++++++ .../test_riscv_instruction_030.s.snap | 71 ++++++ .../test_riscv_instruction_031.s.snap | 116 +++++++++ .../test_riscv_instruction_032.s.snap | 53 +++++ .../test_riscv_instruction_033.s.snap | 53 +++++ .../test_riscv_instruction_034.s.snap | 56 +++++ .../test_riscv_instruction_035.s.snap | 54 +++++ .../test_riscv_instruction_036.s.snap | 54 +++++ .../test_riscv_instruction_037.s.snap | 54 +++++ .../test_riscv_instruction_038.s.snap | 58 +++++ .../test_riscv_instruction_039.s.snap | 58 +++++ .../test_riscv_instruction_040.s.snap | 57 +++++ .../test_riscv_instruction_041.s.snap | 57 +++++ .../test_riscv_instruction_042.s.snap | 62 +++++ .../test_riscv_instruction_043.s.snap | 62 +++++ .../test_riscv_instruction_044.s.snap | 62 +++++ .../test_riscv_instruction_045.s.snap | 62 +++++ .../test_riscv_instruction_046.s.snap | 57 +++++ .../test_riscv_instruction_047.s.snap | 57 +++++ .../test_riscv_instruction_048.s.snap | 39 +++ .../test_riscv_instruction_049.s.snap | 40 ++++ .../test_riscv_instruction_050.s.snap | 39 +++ .../test_riscv_instruction_051.s.snap | 39 +++ .../test_riscv_instruction_052.s.snap | 152 ++++++++++++ .../test_riscv_instruction_053.s.snap | 155 ++++++++++++ .../test_riscv_instruction_054.s.snap | 154 ++++++++++++ .../test_riscv_instruction_055.s.snap | 154 ++++++++++++ .../test_riscv_instruction_056.s.snap | 155 ++++++++++++ .../test_riscv_instruction_057.s.snap | 155 ++++++++++++ .../test_riscv_instruction_058.s.snap | 131 ++++++++++ .../test_riscv_instruction_059.s.snap | 131 ++++++++++ .../test_riscv_instruction_060.s.snap | 131 ++++++++++ .../test_riscv_instruction_061.s.snap | 134 +++++++++++ .../test_riscv_instruction_062.s.snap | 134 +++++++++++ .../test_riscv_instruction_063.s.snap | 154 ++++++++++++ .../test_riscv_instruction_064.s.snap | 156 ++++++++++++ .../test_riscv_instruction_065.s.snap | 153 ++++++++++++ .../sentinel/test_riscv_sentinels_001.s.snap | 56 +++++ .../sentinel/test_riscv_sentinels_002.s.snap | 56 +++++ .../sentinel/test_riscv_sentinels_003.s.snap | 56 +++++ .../sentinel/test_riscv_sentinels_004.s.snap | 56 +++++ .../sentinel/test_riscv_sentinels_005.s.snap | 56 +++++ .../sentinel/test_riscv_sentinels_006.s.snap | 56 +++++ .../sentinel/test_riscv_sentinels_007.s.snap | 56 +++++ .../sentinel/test_riscv_sentinels_008.s.snap | 55 +++++ .../sentinel/test_riscv_sentinels_009.s.snap | 60 +++++ .../sentinel/test_riscv_sentinels_010.s.snap | 60 +++++ .../sentinel/test_riscv_sentinels_011.s.snap | 60 +++++ .../sentinel/test_riscv_sentinels_012.s.snap | 60 +++++ .../sentinel/test_riscv_sentinels_013.s.snap | 60 +++++ .../sentinel/test_riscv_sentinels_014.s.snap | 60 +++++ .../sentinel/test_riscv_sentinels_015.s.snap | 60 +++++ .../sentinel/test_riscv_sentinels_016.s.snap | 57 +++++ .../sentinel/test_riscv_sentinels_017.s.snap | 63 +++++ .../sentinel/test_riscv_sentinels_018.s.snap | 63 +++++ .../sentinel/test_riscv_sentinels_019.s.snap | 63 +++++ .../sentinel/test_riscv_sentinels_020.s.snap | 63 +++++ .../sentinel/test_riscv_sentinels_021.s.snap | 63 +++++ .../sentinel/test_riscv_sentinels_022.s.snap | 63 +++++ .../sentinel/test_riscv_sentinels_023.s.snap | 63 +++++ .../sentinel/test_riscv_sentinels_024.s.snap | 63 +++++ .../sentinel/test_riscv_sentinels_025.s.snap | 63 +++++ .../sentinel/test_riscv_sentinels_026.s.snap | 63 +++++ .../sentinel/test_riscv_sentinels_027.s.snap | 63 +++++ .../sentinel/test_riscv_sentinels_028.s.snap | 33 +++ .../sentinel/test_riscv_sentinels_029.s.snap | 37 +++ .../sentinel/test_riscv_sentinels_030.s.snap | 33 +++ .../sentinel/test_riscv_sentinels_031.s.snap | 33 +++ .../sentinel/test_riscv_sentinels_032.s.snap | 47 ++++ .../sentinel/test_riscv_sentinels_033.s.snap | 50 ++++ .../sentinel/test_riscv_sentinels_034.s.snap | 53 +++++ .../sentinel/test_riscv_sentinels_035.s.snap | 53 +++++ .../sentinel/test_riscv_sentinels_036.s.snap | 54 +++++ .../sentinel/test_riscv_sentinels_037.s.snap | 120 ++++++++++ .../examples/test_mips_example_001.out | 5 - .../correct/examples/test_mips_example_001.s | 40 +++- .../examples/test_mips_example_002.out | 3 - .../correct/examples/test_mips_example_002.s | 1 + .../examples/test_mips_example_003.out | 3 - .../correct/examples/test_mips_example_003.s | 8 +- .../examples/test_mips_example_004.out | 3 - .../correct/examples/test_mips_example_004.s | 12 +- .../examples/test_mips_example_005.out | 4 - .../correct/examples/test_mips_example_005.s | 24 +- .../examples/test_mips_example_006.out | 3 - .../examples/test_mips_example_007.out | 3 - .../correct/examples/test_mips_example_007.s | 2 +- .../examples/test_mips_example_008.out | 3 - .../examples/test_mips_example_011.out | 4 - .../examples/test_mips_example_012.out | 4 - .../correct/examples/test_mips_example_012.s | 2 +- .../examples/test_mips_example_013.out | 41 ---- .../correct/examples/test_mips_example_013.s | 16 ++ .../syscalls/test_mips_syscall_001.out | 10 - .../correct/syscalls/test_mips_syscall_001.s | 10 +- .../syscalls/test_mips_syscall_002.out | 6 - .../correct/syscalls/test_mips_syscall_002.s | 3 +- .../syscalls/test_mips_syscall_003.out | 6 - .../correct/syscalls/test_mips_syscall_003.s | 3 +- .../syscalls/test_mips_syscall_004.out | 8 - .../correct/syscalls/test_mips_syscall_004.s | 1 + .../correct/syscalls/test_mips_syscall_005.s | 3 +- .../correct/syscalls/test_mips_syscall_006.s | 1 + .../correct/syscalls/test_mips_syscall_007.s | 2 +- .../correct/syscalls/test_mips_syscall_008.s | 3 +- .../correct/syscalls/test_mips_syscall_009.s | 5 +- .../syscalls/test_mips_syscall_010.out | 3 - .../correct/syscalls/test_mips_syscall_010.s | 1 + .../syscalls/test_mips_syscall_011.out | 4 - .../correct/syscalls/test_mips_syscall_011.s | 1 + .../correct/syscalls/test_mips_syscall_012.s | 7 +- .../test_mips_instruction_001.out | 3 - .../instructions/test_mips_instruction_001.s | 4 +- .../test_mips_instruction_002.out | 3 - .../instructions/test_mips_instruction_002.s | 2 + .../test_mips_instruction_003.out | 3 - .../instructions/test_mips_instruction_003.s | 4 +- .../test_mips_instruction_004.out | 3 - .../instructions/test_mips_instruction_004.s | 4 +- .../test_mips_instruction_005.out | 3 - .../instructions/test_mips_instruction_005.s | 4 +- .../test_mips_instruction_006.out | 3 - .../instructions/test_mips_instruction_006.s | 4 +- .../test_mips_instruction_007.out | 3 - .../instructions/test_mips_instruction_007.s | 1 - .../test_mips_instruction_008.out | 12 - .../instructions/test_mips_instruction_008.s | 22 +- .../test_mips_instruction_009.out | 3 - .../test_mips_instruction_010.out | 3 - .../test_mips_instruction_011.out | 3 - .../test_mips_instruction_012.out | 3 - .../test_mips_instruction_013.out | 3 - .../instructions/test_mips_instruction_013.s | 2 + .../test_mips_instruction_014.out | 3 - .../instructions/test_mips_instruction_014.s | 2 + .../test_mips_instruction_015.out | 3 - .../instructions/test_mips_instruction_015.s | 2 + .../test_mips_instruction_016.out | 3 - .../instructions/test_mips_instruction_016.s | 2 + .../test_mips_instruction_017.out | 3 - .../instructions/test_mips_instruction_017.s | 1 + .../test_mips_instruction_018.out | 3 - .../instructions/test_mips_instruction_018.s | 2 + .../test_mips_instruction_019.out | 3 - .../instructions/test_mips_instruction_019.s | 3 +- .../test_mips_instruction_020.out | 3 - .../instructions/test_mips_instruction_020.s | 2 + .../test_mips_instruction_021.out | 3 - .../instructions/test_mips_instruction_021.s | 2 + .../test_mips_instruction_022.out | 3 - .../instructions/test_mips_instruction_022.s | 2 + .../test_mips_instruction_023.out | 3 - .../instructions/test_mips_instruction_023.s | 2 + .../test_mips_instruction_024.out | 3 - .../instructions/test_mips_instruction_024.s | 3 +- .../test_mips_instruction_025.out | 3 - .../instructions/test_mips_instruction_025.s | 2 + .../test_mips_instruction_026.out | 3 - .../instructions/test_mips_instruction_026.s | 3 +- .../test_mips_instruction_027.out | 3 - .../instructions/test_mips_instruction_027.s | 2 + .../test_mips_instruction_028.out | 3 - .../instructions/test_mips_instruction_028.s | 2 + .../test_mips_instruction_029.out | 3 - .../instructions/test_mips_instruction_029.s | 3 +- .../test_mips_instruction_030.out | 3 - .../instructions/test_mips_instruction_030.s | 2 + .../test_mips_instruction_031.out | 3 - .../instructions/test_mips_instruction_031.s | 2 +- .../test_mips_instruction_032.out | 3 - .../instructions/test_mips_instruction_032.s | 8 + .../test_mips_instruction_033.out | 13 - .../instructions/test_mips_instruction_033.s | 15 -- .../test_mips_instruction_034.out | 3 - .../instructions/test_mips_instruction_034.s | 2 + .../test_mips_instruction_035.out | 3 - .../instructions/test_mips_instruction_035.s | 4 +- .../test_mips_instruction_036.out | 3 - .../instructions/test_mips_instruction_036.s | 4 +- .../test_mips_instruction_037.out | 13 - .../instructions/test_mips_instruction_037.s | 28 ++- .../test_mips_instruction_038.out | 3 - .../instructions/test_mips_instruction_038.s | 2 + .../test_mips_instruction_039.out | 3 - .../instructions/test_mips_instruction_039.s | 2 + .../test_mips_instruction_040.out | 3 - .../instructions/test_mips_instruction_040.s | 2 + .../test_mips_instruction_041.out | 3 - .../instructions/test_mips_instruction_041.s | 2 + .../test_mips_instruction_042.out | 3 - .../test_mips_instruction_043.out | 3 - .../test_mips_instruction_044.out | 3 - .../test_mips_instruction_045.out | 3 - .../test_mips_instruction_046.out | 3 - .../instructions/test_mips_instruction_046.s | 5 +- .../test_mips_instruction_047.out | 3 - .../instructions/test_mips_instruction_047.s | 2 + .../test_mips_instruction_048.out | 3 - .../instructions/test_mips_instruction_048.s | 2 + .../test_mips_instruction_049.out | 3 - .../instructions/test_mips_instruction_049.s | 2 + .../test_mips_instruction_050.out | 3 - .../instructions/test_mips_instruction_050.s | 2 + .../test_mips_instruction_051.out | 3 - .../instructions/test_mips_instruction_051.s | 2 - .../test_mips_instruction_052.out | 3 - .../test_mips_instruction_053.out | 3 - .../test_mips_instruction_054.out | 3 - .../test_mips_instruction_055.out | 3 - .../test_mips_instruction_056.out | 3 - .../test_mips_instruction_057.out | 12 - .../instructions/test_mips_instruction_057.s | 11 +- .../test_mips_instruction_058.out | 5 - .../test_mips_instruction_059.out | 3 - .../test_mips_instruction_060.out | 3 - .../test_mips_instruction_061.out | 3 - .../test_mips_instruction_062.out | 3 - .../test_mips_instruction_063.out | 3 - .../test_mips_instruction_064.out | 5 - .../test_mips_instruction_065.out | 3 - .../test_mips_instruction_066.out | 13 - .../test_mips_instruction_067.out | 13 - .../mips/sentinel/test_mips_sentinels_001.out | 3 - .../mips/sentinel/test_mips_sentinels_002.out | 3 - .../mips/sentinel/test_mips_sentinels_003.out | 3 - .../mips/sentinel/test_mips_sentinels_004.out | 3 - .../mips/sentinel/test_mips_sentinels_005.out | 3 - .../mips/sentinel/test_mips_sentinels_006.out | 3 - .../mips/sentinel/test_mips_sentinels_007.out | 3 - .../mips/sentinel/test_mips_sentinels_008.out | 3 - .../mips/sentinel/test_mips_sentinels_009.out | 3 - .../mips/sentinel/test_mips_sentinels_010.out | 4 - .../mips/sentinel/test_mips_sentinels_011.out | 4 - .../mips/sentinel/test_mips_sentinels_012.out | 4 - .../mips/sentinel/test_mips_sentinels_013.out | 4 - .../mips/sentinel/test_mips_sentinels_014.out | 4 - .../mips/sentinel/test_mips_sentinels_015.out | 4 - .../mips/sentinel/test_mips_sentinels_015.s | 2 +- .../mips/sentinel/test_mips_sentinels_016.out | 4 - .../mips/sentinel/test_mips_sentinels_017.out | 4 - .../mips/sentinel/test_mips_sentinels_018.out | 3 - .../mips/sentinel/test_mips_sentinels_018.s | 2 +- .../mips/sentinel/test_mips_sentinels_019.out | 3 - .../mips/sentinel/test_mips_sentinels_020.out | 3 - .../mips/sentinel/test_mips_sentinels_021.out | 3 - .../mips/sentinel/test_mips_sentinels_021.s | 2 +- .../mips/sentinel/test_mips_sentinels_022.out | 3 - .../mips/sentinel/test_mips_sentinels_023.out | 3 - .../mips/sentinel/test_mips_sentinels_024.out | 3 - .../mips/sentinel/test_mips_sentinels_024.s | 6 +- .../mips/sentinel/test_mips_sentinels_025.out | 3 - .../mips/sentinel/test_mips_sentinels_026.out | 3 - .../mips/sentinel/test_mips_sentinels_027.out | 3 - .../mips/sentinel/test_mips_sentinels_028.out | 3 - .../mips/sentinel/test_mips_sentinels_029.out | 3 - .../mips/sentinel/test_mips_sentinels_030.out | 3 - .../mips/sentinel/test_mips_sentinels_031.out | 3 - .../mips/sentinel/test_mips_sentinels_031.s | 4 +- .../mips/sentinel/test_mips_sentinels_032.out | 4 - .../mips/sentinel/test_mips_sentinels_032.s | 2 +- .../mips/sentinel/test_mips_sentinels_033.out | 4 - .../mips/sentinel/test_mips_sentinels_033.s | 4 +- .../mips/sentinel/test_mips_sentinels_034.out | 4 - .../mips/sentinel/test_mips_sentinels_034.s | 4 +- .../mips/sentinel/test_mips_sentinels_035.out | 4 - .../mips/sentinel/test_mips_sentinels_035.s | 6 +- .../examples/test_riscv_example_001.out | 5 - .../examples/test_riscv_example_002.out | 4 - .../correct/examples/test_riscv_example_002.s | 82 ++----- .../examples/test_riscv_example_003.out | 3 - .../correct/examples/test_riscv_example_003.s | 1 - .../examples/test_riscv_example_004.out | 3 - .../examples/test_riscv_example_005.out | 4 - .../examples/test_riscv_example_006.out | 3 - .../examples/test_riscv_example_007.out | 3 - .../examples/test_riscv_example_008.out | 3 - .../examples/test_riscv_example_011.out | 4 - .../examples/test_riscv_example_012.out | 4 - .../examples/test_riscv_example_013.out | 41 ---- .../correct/examples/test_riscv_example_013.s | 119 +--------- .../correct/examples/test_riscv_example_014.s | 186 ++++++++------- .../correct/examples/test_riscv_example_015.s | 68 ++++++ .../syscalls/test_riscv_syscall_001.out | 9 - .../syscalls/test_riscv_syscall_002.out | 6 - .../syscalls/test_riscv_syscall_003.out | 6 - .../syscalls/test_riscv_syscall_004.out | 8 - .../correct/syscalls/test_riscv_syscall_005.s | 3 +- .../correct/syscalls/test_riscv_syscall_006.s | 1 + .../correct/syscalls/test_riscv_syscall_007.s | 2 +- .../correct/syscalls/test_riscv_syscall_008.s | 3 +- .../correct/syscalls/test_riscv_syscall_009.s | 3 +- .../syscalls/test_riscv_syscall_010.out | 3 - .../correct/syscalls/test_riscv_syscall_010.s | 1 + .../syscalls/test_riscv_syscall_011.out | 4 - .../correct/syscalls/test_riscv_syscall_011.s | 1 + .../correct/syscalls/test_riscv_syscall_012.s | 1 + .../test_riscv_instruction_001.out | 3 - .../instructions/test_riscv_instruction_001.s | 2 +- .../test_riscv_instruction_002.out | 3 - .../instructions/test_riscv_instruction_002.s | 4 +- .../test_riscv_instruction_003.out | 3 - .../instructions/test_riscv_instruction_003.s | 4 +- .../test_riscv_instruction_004.out | 3 - .../instructions/test_riscv_instruction_004.s | 4 +- .../test_riscv_instruction_005.out | 3 - .../test_riscv_instruction_006.out | 3 - .../instructions/test_riscv_instruction_006.s | 5 +- .../test_riscv_instruction_007.out | 3 - .../test_riscv_instruction_008.out | 3 - .../test_riscv_instruction_009.out | 3 - .../test_riscv_instruction_010.out | 3 - .../test_riscv_instruction_011.out | 3 - .../test_riscv_instruction_012.out | 3 - .../test_riscv_instruction_013.out | 3 - .../instructions/test_riscv_instruction_013.s | 43 ++++ .../test_riscv_instruction_014.out | 3 - .../instructions/test_riscv_instruction_014.s | 2 +- .../test_riscv_instruction_015.out | 3 - .../instructions/test_riscv_instruction_015.s | 2 + .../test_riscv_instruction_016.out | 3 - .../instructions/test_riscv_instruction_016.s | 3 +- .../test_riscv_instruction_017.out | 3 - .../instructions/test_riscv_instruction_017.s | 3 +- .../test_riscv_instruction_018.out | 3 - .../instructions/test_riscv_instruction_018.s | 3 +- .../test_riscv_instruction_019.out | 3 - .../instructions/test_riscv_instruction_019.s | 3 +- .../test_riscv_instruction_020.out | 3 - .../instructions/test_riscv_instruction_020.s | 4 +- .../test_riscv_instruction_021.out | 3 - .../instructions/test_riscv_instruction_021.s | 4 +- .../test_riscv_instruction_022.out | 3 - .../instructions/test_riscv_instruction_022.s | 4 +- .../test_riscv_instruction_023.out | 3 - .../instructions/test_riscv_instruction_023.s | 4 +- .../test_riscv_instruction_024.out | 3 - .../instructions/test_riscv_instruction_024.s | 4 +- .../test_riscv_instruction_025.out | 3 - .../instructions/test_riscv_instruction_025.s | 4 +- .../test_riscv_instruction_026.out | 3 - .../instructions/test_riscv_instruction_026.s | 3 +- .../test_riscv_instruction_027.out | 3 - .../instructions/test_riscv_instruction_027.s | 4 +- .../test_riscv_instruction_028.out | 3 - .../instructions/test_riscv_instruction_028.s | 4 +- .../test_riscv_instruction_029.out | 3 - .../instructions/test_riscv_instruction_029.s | 3 +- .../test_riscv_instruction_030.out | 3 - .../instructions/test_riscv_instruction_030.s | 3 +- .../test_riscv_instruction_031.out | 3 - .../test_riscv_instruction_032.out | 3 - .../instructions/test_riscv_instruction_032.s | 4 +- .../test_riscv_instruction_033.out | 3 - .../instructions/test_riscv_instruction_033.s | 4 +- .../test_riscv_instruction_034.out | 3 - .../instructions/test_riscv_instruction_034.s | 4 +- .../test_riscv_instruction_035.out | 3 - .../instructions/test_riscv_instruction_035.s | 4 +- .../test_riscv_instruction_036.out | 3 - .../instructions/test_riscv_instruction_036.s | 4 +- .../test_riscv_instruction_037.out | 3 - .../instructions/test_riscv_instruction_037.s | 4 +- .../test_riscv_instruction_038.out | 3 - .../instructions/test_riscv_instruction_038.s | 4 +- .../test_riscv_instruction_039.out | 3 - .../instructions/test_riscv_instruction_039.s | 4 +- .../test_riscv_instruction_040.out | 3 - .../instructions/test_riscv_instruction_040.s | 4 +- .../test_riscv_instruction_041.out | 3 - .../instructions/test_riscv_instruction_041.s | 4 +- .../test_riscv_instruction_042.out | 3 - .../test_riscv_instruction_043.out | 3 - .../test_riscv_instruction_044.out | 3 - .../test_riscv_instruction_045.out | 3 - .../test_riscv_instruction_046.out | 3 - .../instructions/test_riscv_instruction_046.s | 3 +- .../test_riscv_instruction_047.out | 3 - .../instructions/test_riscv_instruction_047.s | 3 +- .../test_riscv_instruction_048.out | 3 - .../instructions/test_riscv_instruction_048.s | 4 +- .../test_riscv_instruction_049.out | 3 - .../instructions/test_riscv_instruction_049.s | 4 +- .../test_riscv_instruction_050.out | 3 - .../instructions/test_riscv_instruction_050.s | 4 +- .../test_riscv_instruction_051.out | 3 - .../instructions/test_riscv_instruction_051.s | 4 +- .../test_riscv_instruction_052.out | 3 - .../test_riscv_instruction_053.out | 3 - .../test_riscv_instruction_054.out | 3 - .../test_riscv_instruction_055.out | 3 - .../test_riscv_instruction_056.out | 3 - .../test_riscv_instruction_057.out | 3 - .../test_riscv_instruction_058.out | 3 - .../test_riscv_instruction_059.out | 3 - .../test_riscv_instruction_060.out | 3 - .../test_riscv_instruction_061.out | 3 - .../test_riscv_instruction_062.out | 3 - .../test_riscv_instruction_063.out | 3 - .../instructions/test_riscv_instruction_063.s | 30 ++- .../test_riscv_instruction_064.out | 3 - .../instructions/test_riscv_instruction_064.s | 30 ++- .../test_riscv_instruction_065.out | 3 - .../instructions/test_riscv_instruction_065.s | 30 ++- .../sentinel/test_riscv_sentinels_001.out | 3 - .../sentinel/test_riscv_sentinels_002.out | 3 - .../sentinel/test_riscv_sentinels_003.out | 3 - .../sentinel/test_riscv_sentinels_004.out | 3 - .../sentinel/test_riscv_sentinels_005.out | 3 - .../sentinel/test_riscv_sentinels_006.out | 3 - .../sentinel/test_riscv_sentinels_007.out | 3 - .../sentinel/test_riscv_sentinels_008.out | 3 - .../sentinel/test_riscv_sentinels_009.out | 3 - .../sentinel/test_riscv_sentinels_010.out | 3 - .../sentinel/test_riscv_sentinels_011.out | 3 - .../sentinel/test_riscv_sentinels_012.out | 3 - .../sentinel/test_riscv_sentinels_013.out | 3 - .../sentinel/test_riscv_sentinels_014.out | 3 - .../sentinel/test_riscv_sentinels_015.out | 3 - .../sentinel/test_riscv_sentinels_016.out | 3 - .../sentinel/test_riscv_sentinels_017.out | 4 - .../riscv/sentinel/test_riscv_sentinels_017.s | 50 +--- .../sentinel/test_riscv_sentinels_018.out | 4 - .../sentinel/test_riscv_sentinels_019.out | 4 - .../sentinel/test_riscv_sentinels_020.out | 4 - .../sentinel/test_riscv_sentinels_021.out | 4 - .../sentinel/test_riscv_sentinels_022.out | 4 - .../sentinel/test_riscv_sentinels_023.out | 4 - .../sentinel/test_riscv_sentinels_024.out | 4 - .../sentinel/test_riscv_sentinels_025.out | 4 - .../sentinel/test_riscv_sentinels_026.out | 4 - .../sentinel/test_riscv_sentinels_027.out | 4 - .../sentinel/test_riscv_sentinels_028.out | 3 - .../sentinel/test_riscv_sentinels_029.out | 4 - .../riscv/sentinel/test_riscv_sentinels_029.s | 2 +- .../sentinel/test_riscv_sentinels_030.out | 3 - .../sentinel/test_riscv_sentinels_031.out | 3 - .../sentinel/test_riscv_sentinels_032.out | 3 - .../sentinel/test_riscv_sentinels_033.out | 4 - .../sentinel/test_riscv_sentinels_034.out | 4 - .../sentinel/test_riscv_sentinels_035.out | 4 - .../sentinel/test_riscv_sentinels_036.out | 4 - .../riscv/sentinel/test_riscv_sentinels_037.s | 62 +++++ tests/arch/riscv64/add_test.s | 1 + tests/arch/riscv64/addiw_test.s | 3 +- tests/arch/riscv64/addw_test.s | 1 + tests/arch/riscv64/beq_test.s | 3 +- tests/arch/riscv64/load_test.s | 97 ++++++++ tests/arch/riscv64/lui_test.s | 9 +- tests/arch/riscv64/memory_test.s | 3 +- tests/arch/riscv64/slli_test.s | 6 +- tests/arch/riscv64/slliw_test.s | 3 +- tests/arch/riscv64/sllw_test.s | 3 +- tests/arch/riscv64/subw_test.s | 3 +- .../unit/arch/mips/mips_example_002.test.mts | 1 + .../unit/arch/mips/mips_example_003.test.mts | 1 + .../unit/arch/mips/mips_example_005.test.mts | 1 + 635 files changed, 19376 insertions(+), 1437 deletions(-) create mode 100644 tests/arch/__snapshots__/mips/correct/examples/test_mips_example_001.s.snap create mode 100644 tests/arch/__snapshots__/mips/correct/examples/test_mips_example_002.s.snap create mode 100644 tests/arch/__snapshots__/mips/correct/examples/test_mips_example_003.s.snap create mode 100644 tests/arch/__snapshots__/mips/correct/examples/test_mips_example_004.s.snap create mode 100644 tests/arch/__snapshots__/mips/correct/examples/test_mips_example_005.s.snap create mode 100644 tests/arch/__snapshots__/mips/correct/examples/test_mips_example_006.s.snap create mode 100644 tests/arch/__snapshots__/mips/correct/examples/test_mips_example_007.s.snap create mode 100644 tests/arch/__snapshots__/mips/correct/examples/test_mips_example_008.s.snap create mode 100644 tests/arch/__snapshots__/mips/correct/examples/test_mips_example_009.s.snap create mode 100644 tests/arch/__snapshots__/mips/correct/examples/test_mips_example_010.s.snap create mode 100644 tests/arch/__snapshots__/mips/correct/examples/test_mips_example_011.s.snap create mode 100644 tests/arch/__snapshots__/mips/correct/examples/test_mips_example_012.s.snap create mode 100644 tests/arch/__snapshots__/mips/correct/examples/test_mips_example_013.s.snap create mode 100644 tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_001.s.snap create mode 100644 tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_002.s.snap create mode 100644 tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_003.s.snap create mode 100644 tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_004.s.snap create mode 100644 tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_005.s.snap create mode 100644 tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_006.s.snap create mode 100644 tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_008.s.snap create mode 100644 tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_010.s.snap create mode 100644 tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_011.s.snap create mode 100644 tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_012.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_001.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_002.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_003.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_004.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_005.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_006.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_007.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_008.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_009.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_010.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_011.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_012.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_013.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_014.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_015.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_016.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_017.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_018.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_019.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_020.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_021.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_022.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_023.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_024.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_025.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_026.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_027.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_028.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_029.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_030.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_031.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_032.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_034.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_035.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_036.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_037.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_038.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_039.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_040.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_041.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_042.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_043.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_044.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_045.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_046.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_047.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_048.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_049.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_050.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_051.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_052.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_053.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_054.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_055.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_056.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_057.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_058.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_059.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_060.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_061.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_062.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_063.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_064.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_065.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_066.s.snap create mode 100644 tests/arch/__snapshots__/mips/instructions/test_mips_instruction_067.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_001.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_002.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_003.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_004.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_005.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_006.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_007.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_008.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_009.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_010.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_011.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_012.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_013.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_014.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_015.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_016.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_017.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_018.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_019.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_020.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_021.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_022.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_023.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_024.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_025.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_026.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_027.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_028.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_029.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_030.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_031.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_032.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_033.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_034.s.snap create mode 100644 tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_035.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_001.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_002.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_003.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_004.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_005.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_006.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_007.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_008.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_009.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_010.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_011.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_012.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_013.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_014.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_015.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/examples/test_riscv_tutorial_001.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_001.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_002.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_003.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_004.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_005.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_006.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_008.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_010.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_011.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_012.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_001.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_002.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_003.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_004.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_005.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_006.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_007.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_008.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_009.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_010.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_011.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_012.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_013.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_014.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_015.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_016.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_017.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_018.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_019.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_020.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_021.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_022.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_023.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_024.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_025.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_026.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_027.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_028.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_029.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_030.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_031.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_032.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_033.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_034.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_035.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_036.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_037.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_038.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_039.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_040.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_041.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_042.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_043.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_044.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_045.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_046.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_047.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_048.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_049.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_050.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_051.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_052.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_053.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_054.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_055.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_056.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_057.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_058.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_059.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_060.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_061.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_062.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_063.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_064.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_065.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_001.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_002.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_003.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_004.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_005.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_006.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_007.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_008.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_009.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_010.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_011.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_012.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_013.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_014.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_015.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_016.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_017.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_018.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_019.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_020.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_021.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_022.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_023.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_024.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_025.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_026.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_027.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_028.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_029.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_030.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_031.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_032.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_033.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_034.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_035.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_036.s.snap create mode 100644 tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_037.s.snap delete mode 100644 tests/arch/mips/correct/examples/test_mips_example_001.out delete mode 100644 tests/arch/mips/correct/examples/test_mips_example_002.out delete mode 100644 tests/arch/mips/correct/examples/test_mips_example_003.out delete mode 100644 tests/arch/mips/correct/examples/test_mips_example_004.out delete mode 100644 tests/arch/mips/correct/examples/test_mips_example_005.out delete mode 100644 tests/arch/mips/correct/examples/test_mips_example_006.out delete mode 100644 tests/arch/mips/correct/examples/test_mips_example_007.out delete mode 100644 tests/arch/mips/correct/examples/test_mips_example_008.out delete mode 100644 tests/arch/mips/correct/examples/test_mips_example_011.out delete mode 100644 tests/arch/mips/correct/examples/test_mips_example_012.out delete mode 100644 tests/arch/mips/correct/examples/test_mips_example_013.out create mode 100644 tests/arch/mips/correct/examples/test_mips_example_013.s delete mode 100644 tests/arch/mips/correct/syscalls/test_mips_syscall_001.out delete mode 100644 tests/arch/mips/correct/syscalls/test_mips_syscall_002.out delete mode 100644 tests/arch/mips/correct/syscalls/test_mips_syscall_003.out delete mode 100644 tests/arch/mips/correct/syscalls/test_mips_syscall_004.out delete mode 100644 tests/arch/mips/correct/syscalls/test_mips_syscall_010.out delete mode 100644 tests/arch/mips/correct/syscalls/test_mips_syscall_011.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_001.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_002.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_003.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_004.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_005.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_006.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_007.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_008.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_009.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_010.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_011.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_012.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_013.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_014.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_015.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_016.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_017.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_018.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_019.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_020.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_021.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_022.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_023.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_024.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_025.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_026.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_027.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_028.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_029.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_030.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_031.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_032.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_033.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_033.s delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_034.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_035.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_036.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_037.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_038.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_039.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_040.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_041.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_042.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_043.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_044.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_045.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_046.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_047.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_048.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_049.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_050.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_051.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_052.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_053.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_054.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_055.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_056.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_057.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_058.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_059.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_060.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_061.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_062.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_063.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_064.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_065.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_066.out delete mode 100644 tests/arch/mips/instructions/test_mips_instruction_067.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_001.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_002.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_003.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_004.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_005.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_006.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_007.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_008.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_009.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_010.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_011.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_012.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_013.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_014.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_015.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_016.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_017.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_018.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_019.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_020.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_021.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_022.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_023.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_024.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_025.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_026.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_027.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_028.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_029.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_030.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_031.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_032.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_033.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_034.out delete mode 100644 tests/arch/mips/sentinel/test_mips_sentinels_035.out delete mode 100644 tests/arch/riscv/correct/examples/test_riscv_example_001.out delete mode 100644 tests/arch/riscv/correct/examples/test_riscv_example_002.out delete mode 100644 tests/arch/riscv/correct/examples/test_riscv_example_003.out delete mode 100644 tests/arch/riscv/correct/examples/test_riscv_example_004.out delete mode 100644 tests/arch/riscv/correct/examples/test_riscv_example_005.out delete mode 100644 tests/arch/riscv/correct/examples/test_riscv_example_006.out delete mode 100644 tests/arch/riscv/correct/examples/test_riscv_example_007.out delete mode 100644 tests/arch/riscv/correct/examples/test_riscv_example_008.out delete mode 100644 tests/arch/riscv/correct/examples/test_riscv_example_011.out delete mode 100644 tests/arch/riscv/correct/examples/test_riscv_example_012.out delete mode 100644 tests/arch/riscv/correct/examples/test_riscv_example_013.out create mode 100644 tests/arch/riscv/correct/examples/test_riscv_example_015.s delete mode 100644 tests/arch/riscv/correct/syscalls/test_riscv_syscall_001.out delete mode 100644 tests/arch/riscv/correct/syscalls/test_riscv_syscall_002.out delete mode 100644 tests/arch/riscv/correct/syscalls/test_riscv_syscall_003.out delete mode 100644 tests/arch/riscv/correct/syscalls/test_riscv_syscall_004.out delete mode 100644 tests/arch/riscv/correct/syscalls/test_riscv_syscall_010.out delete mode 100644 tests/arch/riscv/correct/syscalls/test_riscv_syscall_011.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_001.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_002.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_003.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_004.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_005.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_006.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_007.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_008.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_009.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_010.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_011.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_012.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_013.out create mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_013.s delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_014.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_015.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_016.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_017.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_018.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_019.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_020.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_021.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_022.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_023.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_024.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_025.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_026.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_027.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_028.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_029.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_030.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_031.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_032.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_033.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_034.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_035.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_036.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_037.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_038.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_039.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_040.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_041.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_042.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_043.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_044.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_045.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_046.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_047.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_048.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_049.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_050.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_051.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_052.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_053.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_054.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_055.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_056.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_057.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_058.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_059.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_060.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_061.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_062.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_063.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_064.out delete mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_065.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_001.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_002.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_003.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_004.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_005.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_006.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_007.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_008.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_009.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_010.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_011.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_012.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_013.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_014.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_015.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_016.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_017.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_018.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_019.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_020.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_021.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_022.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_023.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_024.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_025.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_026.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_027.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_028.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_029.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_030.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_031.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_032.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_033.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_034.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_035.out delete mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_036.out create mode 100644 tests/arch/riscv/sentinel/test_riscv_sentinels_037.s create mode 100644 tests/arch/riscv64/load_test.s diff --git a/deno.lock b/deno.lock index 36ad7990d..0ea81da64 100644 --- a/deno.lock +++ b/deno.lock @@ -1,6 +1,12 @@ { "version": "5", "specifiers": { + "jsr:@std/assert@^1.0.17": "1.0.19", + "jsr:@std/fs@^1.0.22": "1.0.23", + "jsr:@std/internal@^1.0.12": "1.0.12", + "jsr:@std/path@*": "1.1.4", + "jsr:@std/path@^1.1.4": "1.1.4", + "jsr:@std/testing@*": "1.0.17", "npm:@codemirror/lang-yaml@^6.1.2": "6.1.2", "npm:@codemirror/language@^6.11.3": "6.12.1", "npm:@codemirror/legacy-modes@^6.5.1": "6.5.2", @@ -69,6 +75,35 @@ "npm:xterm@^5.3.0": "5.3.0", "npm:yargs@18": "18.0.0" }, + "jsr": { + "@std/assert@1.0.19": { + "integrity": "eaada96ee120cb980bc47e040f82814d786fe8162ecc53c91d8df60b8755991e" + }, + "@std/fs@1.0.23": { + "integrity": "3ecbae4ce4fee03b180fa710caff36bb5adb66631c46a6460aaad49515565a37", + "dependencies": [ + "jsr:@std/path@^1.1.4" + ] + }, + "@std/internal@1.0.12": { + "integrity": "972a634fd5bc34b242024402972cd5143eac68d8dffaca5eaa4dba30ce17b027" + }, + "@std/path@1.1.4": { + "integrity": "1d2d43f39efb1b42f0b1882a25486647cb851481862dc7313390b2bb044314b5", + "dependencies": [ + "jsr:@std/internal" + ] + }, + "@std/testing@1.0.17": { + "integrity": "87bdc2700fa98249d48a17cd72413352d3d3680dcfbdb64947fd0982d6bbf681", + "dependencies": [ + "jsr:@std/assert", + "jsr:@std/fs", + "jsr:@std/internal", + "jsr:@std/path@^1.1.4" + ] + } + }, "npm": { "@aesoper/normal-utils@0.1.5": { "integrity": "sha512-LFF/6y6h5mfwhnJaWqqxuC8zzDaHCG62kMRkd8xhDtq62TQj9dM17A9DhE87W7DhiARJsHLgcina/9P4eNCN1w==" diff --git a/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_001.s.snap b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_001.s.snap new file mode 100644 index 000000000..ef55d71b2 --- /dev/null +++ b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_001.s.snap @@ -0,0 +1,106 @@ +export const snapshot = {}; + +snapshot[`mips/correct/examples/test_mips_example_001.s 1`] = ` +{ + display: "1234", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 32, + "11": 32, + "12": 128, + "13": 132, + "16": 32, + "17": 2, + "19": 1, + "2097152": 12, + "2097155": 34, + "2097156": 255, + "2097157": 255, + "2097158": 233, + "2097159": 210, + "2097160": 67, + "2097161": 228, + "2097162": 41, + "2097163": 55, + "2097164": 64, + "2097165": 195, + "2097166": 6, + "2097167": 171, + "2097168": 133, + "2097169": 30, + "2097170": 184, + "2097171": 82, + "2097172": 84, + "2097173": 104, + "2097174": 105, + "2097175": 115, + "2097176": 32, + "2097177": 105, + "2097178": 115, + "2097179": 32, + "2097180": 97, + "2097181": 32, + "2097182": 115, + "2097183": 116, + "2097184": 114, + "2097185": 105, + "2097186": 110, + "2097187": 103, + "2097189": 84, + "2097190": 104, + "2097191": 105, + "2097192": 115, + "2097193": 32, + "2097194": 105, + "2097195": 115, + "2097196": 32, + "2097197": 97, + "2097198": 110, + "2097199": 111, + "2097200": 116, + "2097201": 104, + "2097202": 101, + "2097203": 114, + "2097204": 32, + "2097205": 115, + "2097206": 116, + "2097207": 114, + "2097208": 105, + "2097209": 110, + "2097210": 103, + "23": 12, + "24": 60, + "25": 1, + "27": 32, + "28": 52, + "29": 33, + "3": 32, + "31": 2, + "33": 32, + "34": 32, + "35": 32, + "36": 132, + "37": 132, + "4": 52, + "40": 32, + "41": 2, + "43": 1, + "47": 12, + "48": 3, + "49": 224, + "5": 33, + "51": 8, + "9": 32, + }, + registers: { + "1,at": "0x200002", + "2,v0": "0x1", + "4,a0": "0x22", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_002.s.snap b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_002.s.snap new file mode 100644 index 000000000..ba6eca87e --- /dev/null +++ b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_002.s.snap @@ -0,0 +1,54 @@ +export const snapshot = {}; + +snapshot[`mips/correct/examples/test_mips_example_002.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "11": 45, + "12": 32, + "13": 11, + "15": 33, + "16": 1, + "17": 40, + "18": 96, + "19": 32, + "20": 1, + "21": 170, + "22": 88, + "23": 34, + "24": 113, + "25": 203, + "26": 88, + "27": 2, + "28": 1, + "29": 201, + "3": 10, + "30": 120, + "31": 154, + "32": 3, + "33": 224, + "35": 8, + "4": 32, + "5": 9, + "7": 13, + "8": 32, + "9": 10, + }, + registers: { + "10,t2": "0x2d", + "11,t3": "0x21", + "12,t4": "0x17", + "13,t5": "0xc", + "14,t6": "0x441", + "15,t7": "0x53", + "8,t0": "0xa", + "9,t1": "0xd", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_003.s.snap b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_003.s.snap new file mode 100644 index 000000000..0a85e28b9 --- /dev/null +++ b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_003.s.snap @@ -0,0 +1,113 @@ +export const snapshot = {}; + +snapshot[`mips/correct/examples/test_mips_example_003.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "100": 52, + "101": 33, + "103": 12, + "104": 160, + "105": 45, + "108": 60, + "109": 1, + "11": 32, + "111": 32, + "112": 52, + "113": 33, + "115": 14, + "116": 164, + "117": 47, + "12": 60, + "120": 3, + "121": 224, + "123": 8, + "13": 1, + "15": 32, + "16": 52, + "17": 33, + "19": 4, + "2097155": 14, + "2097156": 120, + "2097159": 22, + "2097163": 14, + "2097164": 120, + "2097167": 22, + "21": 32, + "22": 72, + "23": 32, + "24": 60, + "25": 1, + "27": 32, + "28": 52, + "29": 33, + "3": 32, + "31": 6, + "33": 32, + "34": 80, + "35": 32, + "36": 141, + "37": 11, + "4": 52, + "40": 60, + "41": 1, + "43": 32, + "44": 52, + "45": 33, + "48": 140, + "49": 44, + "5": 33, + "52": 129, + "53": 45, + "56": 60, + "57": 1, + "59": 32, + "60": 52, + "61": 33, + "63": 4, + "64": 128, + "65": 46, + "68": 133, + "69": 79, + "72": 60, + "73": 1, + "75": 32, + "76": 52, + "77": 33, + "79": 6, + "80": 132, + "81": 56, + "84": 60, + "85": 1, + "87": 32, + "88": 52, + "89": 33, + "9": 32, + "91": 8, + "92": 172, + "93": 43, + "96": 60, + "97": 1, + "99": 32, + }, + registers: { + "1,at": "0x20000e", + "10,t2": "0x200006", + "11,t3": "0xe", + "12,t4": "0xe", + "13,t5": "0x78", + "14,t6": "0x78", + "15,t7": "0x16", + "24,t8": "0x16", + "8,t0": "0x200000", + "9,t1": "0x200004", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_004.s.snap b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_004.s.snap new file mode 100644 index 000000000..ee838237c --- /dev/null +++ b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_004.s.snap @@ -0,0 +1,145 @@ +export const snapshot = {}; + +snapshot[`mips/correct/examples/test_mips_example_004.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "11": 32, + "12": 60, + "13": 1, + "15": 32, + "16": 52, + "17": 33, + "19": 8, + "2097152": 64, + "2097153": 65, + "2097154": 69, + "2097155": 161, + "2097156": 202, + "2097157": 192, + "2097158": 131, + "2097159": 18, + "2097160": 64, + "2097161": 38, + "2097162": 226, + "2097163": 208, + "2097164": 229, + "2097165": 96, + "2097166": 65, + "2097167": 137, + "2097168": 64, + "2097169": 132, + "2097170": 203, + "2097171": 51, + "2097172": 51, + "2097173": 51, + "2097174": 51, + "2097175": 51, + "2097176": 64, + "2097177": 81, + "2097178": 69, + "2097179": 161, + "2097180": 202, + "2097181": 192, + "2097182": 131, + "2097183": 18, + "2097184": 64, + "2097185": 130, + "2097186": 162, + "2097187": 126, + "2097188": 249, + "2097189": 219, + "2097190": 34, + "2097191": 209, + "2097192": 64, + "2097193": 77, + "2097194": 19, + "2097195": 21, + "2097196": 70, + "2097197": 137, + "2097198": 195, + "2097199": 233, + "21": 32, + "22": 72, + "23": 32, + "24": 60, + "25": 1, + "27": 32, + "28": 52, + "29": 33, + "3": 32, + "31": 16, + "33": 32, + "34": 80, + "35": 32, + "36": 60, + "37": 1, + "39": 32, + "4": 52, + "40": 52, + "41": 33, + "43": 24, + "45": 32, + "46": 88, + "47": 32, + "48": 213, + "5": 33, + "52": 213, + "53": 34, + "56": 213, + "57": 74, + "60": 68, + "61": 32, + "64": 68, + "65": 32, + "66": 81, + "67": 1, + "68": 68, + "69": 34, + "70": 83, + "71": 3, + "72": 245, + "73": 96, + "76": 33, + "77": 107, + "79": 8, + "80": 245, + "81": 100, + "84": 33, + "85": 107, + "87": 8, + "88": 245, + "89": 108, + "9": 32, + "92": 32, + "93": 2, + "95": 10, + "99": 12, + }, + registers: { + "1,at": "0x200018", + "10,t2": "0x200010", + "11,t3": "0x200028", + "2,v0": "0xa", + "8,t0": "0x200000", + "9,t1": "0x200008", + "f0,FP0": "0x405145a1", + "f10,FP10": "0x4084cb33", + "f12,FP12": "0x404d1315", + "f2,FP2": "0x4026e2d0", + "f4,FP4": "0x4082a27e", + PC: "0x64", + f11: "0x33333333", + f13: "0x4689c3e9", + f1: "0xcac08312", + f3: "0xe5604189", + f5: "0xf9db22d1", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_005.s.snap b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_005.s.snap new file mode 100644 index 000000000..4f41b6af9 --- /dev/null +++ b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_005.s.snap @@ -0,0 +1,56 @@ +export const snapshot = {}; + +snapshot[`mips/correct/examples/test_mips_example_005.s 1`] = ` +{ + display: "45", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "12": 32, + "13": 9, + "16": 32, + "17": 4, + "20": 1, + "2097152": 10, + "21": 40, + "22": 8, + "23": 42, + "24": 16, + "25": 1, + "27": 16, + "28": 1, + "29": 36, + "3": 32, + "30": 32, + "31": 32, + "32": 33, + "33": 41, + "35": 1, + "36": 4, + "37": 1, + "38": 255, + "39": 240, + "4": 52, + "40": 32, + "41": 2, + "43": 1, + "47": 12, + "48": 3, + "49": 224, + "5": 33, + "51": 8, + "8": 128, + "9": 40, + }, + registers: { + "2,v0": "0x1", + "4,a0": "0x2d", + "8,t0": "0xa", + "9,t1": "0xa", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_006.s.snap b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_006.s.snap new file mode 100644 index 000000000..e5b07a381 --- /dev/null +++ b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_006.s.snap @@ -0,0 +1,58 @@ +export const snapshot = {}; + +snapshot[`mips/correct/examples/test_mips_example_006.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "11": 5, + "12": 32, + "13": 33, + "15": 1, + "16": 41, + "17": 1, + "19": 5, + "20": 20, + "21": 1, + "23": 16, + "24": 32, + "25": 11, + "27": 34, + "28": 32, + "29": 2, + "3": 4, + "31": 10, + "35": 12, + "36": 32, + "37": 25, + "39": 11, + "4": 32, + "40": 32, + "41": 24, + "42": 2, + "43": 43, + "44": 4, + "45": 1, + "46": 255, + "47": 236, + "5": 9, + "7": 2, + "8": 32, + "9": 1, + }, + registers: { + "1,at": "0x1", + "11,t3": "0x22", + "2,v0": "0xa", + "24,t8": "0x22b", + "25,t9": "0xb", + "8,t0": "0x4", + "9,t1": "0x2", + PC: "0x24", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_007.s.snap b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_007.s.snap new file mode 100644 index 000000000..7a394b823 --- /dev/null +++ b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_007.s.snap @@ -0,0 +1,78 @@ +export const snapshot = {}; + +snapshot[`mips/correct/examples/test_mips_example_007.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 11, + "11": 32, + "12": 52, + "13": 33, + "17": 32, + "18": 104, + "19": 32, + "20": 32, + "2097155": 1, + "2097159": 2, + "2097163": 3, + "2097167": 4, + "2097171": 5, + "21": 15, + "24": 32, + "25": 9, + "28": 32, + "29": 10, + "3": 1, + "31": 5, + "32": 17, + "33": 73, + "35": 28, + "36": 113, + "37": 201, + "38": 96, + "39": 2, + "4": 32, + "40": 141, + "41": 174, + "44": 1, + "45": 207, + "46": 120, + "47": 32, + "48": 1, + "49": 105, + "5": 12, + "50": 72, + "51": 32, + "52": 33, + "53": 173, + "55": 4, + "56": 4, + "57": 1, + "58": 255, + "59": 232, + "60": 32, + "61": 2, + "63": 10, + "67": 12, + "7": 4, + "8": 60, + "9": 1, + }, + registers: { + "1,at": "0x200000", + "10,t2": "0x5", + "11,t3": "0x1", + "12,t4": "0x4", + "13,t5": "0x200014", + "14,t6": "0x5", + "15,t7": "0xf", + "2,v0": "0xa", + "9,t1": "0x5", + PC: "0x44", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_008.s.snap b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_008.s.snap new file mode 100644 index 000000000..f161c277d --- /dev/null +++ b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_008.s.snap @@ -0,0 +1,171 @@ +export const snapshot = {}; + +snapshot[`mips/correct/examples/test_mips_example_008.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "11": 32, + "12": 60, + "13": 1, + "15": 32, + "16": 52, + "17": 33, + "19": 64, + "2097152": 52, + "2097156": 52, + "2097160": 52, + "2097164": 52, + "2097168": 35, + "2097169": 69, + "2097173": 67, + "2097174": 34, + "2097175": 16, + "2097176": 119, + "2097177": 81, + "2097178": 33, + "2097179": 32, + "2097180": 20, + "2097181": 20, + "2097182": 20, + "2097183": 20, + "2097186": 2, + "2097187": 20, + "2097188": 68, + "2097189": 85, + "2097190": 17, + "2097191": 34, + "2097192": 170, + "2097193": 191, + "2097194": 240, + "2097195": 18, + "2097196": 119, + "2097197": 208, + "2097202": 255, + "2097203": 35, + "2097204": 18, + "2097205": 52, + "2097206": 86, + "2097207": 120, + "2097208": 135, + "2097209": 101, + "2097210": 67, + "2097211": 33, + "2097212": 51, + "2097213": 68, + "2097214": 17, + "2097215": 36, + "2097216": 52, + "2097220": 52, + "2097224": 52, + "2097228": 52, + "2097232": 35, + "2097233": 69, + "2097237": 67, + "2097238": 34, + "2097239": 16, + "2097240": 119, + "2097241": 81, + "2097242": 33, + "2097243": 32, + "2097244": 20, + "2097245": 20, + "2097246": 20, + "2097247": 20, + "2097250": 2, + "2097251": 20, + "2097252": 68, + "2097253": 85, + "2097254": 17, + "2097255": 34, + "2097256": 170, + "2097257": 191, + "2097258": 240, + "2097259": 18, + "2097260": 119, + "2097261": 208, + "2097266": 255, + "2097267": 35, + "2097268": 18, + "2097269": 52, + "2097270": 86, + "2097271": 120, + "2097272": 135, + "2097273": 101, + "2097274": 67, + "2097275": 33, + "2097276": 51, + "2097277": 68, + "2097278": 17, + "2097279": 36, + "21": 32, + "22": 72, + "23": 32, + "24": 32, + "25": 10, + "27": 4, + "28": 32, + "29": 11, + "3": 32, + "31": 4, + "34": 96, + "35": 32, + "38": 104, + "39": 32, + "4": 52, + "40": 17, + "41": 138, + "43": 44, + "44": 17, + "45": 171, + "47": 28, + "48": 197, + "5": 33, + "52": 229, + "53": 32, + "56": 33, + "57": 8, + "59": 4, + "60": 33, + "61": 41, + "63": 4, + "64": 33, + "65": 173, + "67": 1, + "68": 4, + "69": 1, + "70": 255, + "71": 232, + "72": 33, + "73": 140, + "75": 1, + "78": 104, + "79": 32, + "80": 4, + "81": 1, + "82": 255, + "83": 216, + "84": 32, + "85": 2, + "87": 10, + "9": 32, + "91": 12, + }, + registers: { + "1,at": "0x200040", + "10,t2": "0x4", + "11,t3": "0x4", + "12,t4": "0x4", + "2,v0": "0xa", + "8,t0": "0x200040", + "9,t1": "0x200080", + "f0,FP0": "0x33441124", + PC: "0x5c", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_009.s.snap b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_009.s.snap new file mode 100644 index 000000000..6460ae63b --- /dev/null +++ b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_009.s.snap @@ -0,0 +1,169 @@ +export const snapshot = {}; + +snapshot[`mips/correct/examples/test_mips_example_009.s 1`] = ` +{ + display: "Please, insert the first number.Please, insert the second number.The result is: 579", + error: false, + keyboard: " 123 456", + memory: { + "0": 60, + "1": 1, + "10": 32, + "100": 32, + "101": 2, + "103": 10, + "107": 12, + "11": 32, + "12": 32, + "13": 2, + "15": 4, + "19": 12, + "20": 32, + "2097152": 80, + "2097153": 108, + "2097154": 101, + "2097155": 97, + "2097156": 115, + "2097157": 101, + "2097158": 44, + "2097159": 32, + "2097160": 105, + "2097161": 110, + "2097162": 115, + "2097163": 101, + "2097164": 114, + "2097165": 116, + "2097166": 32, + "2097167": 116, + "2097168": 104, + "2097169": 101, + "2097170": 32, + "2097171": 102, + "2097172": 105, + "2097173": 114, + "2097174": 115, + "2097175": 116, + "2097176": 32, + "2097177": 110, + "2097178": 117, + "2097179": 109, + "2097180": 98, + "2097181": 101, + "2097182": 114, + "2097183": 46, + "2097185": 80, + "2097186": 108, + "2097187": 101, + "2097188": 97, + "2097189": 115, + "2097190": 101, + "2097191": 44, + "2097192": 32, + "2097193": 105, + "2097194": 110, + "2097195": 115, + "2097196": 101, + "2097197": 114, + "2097198": 116, + "2097199": 32, + "2097200": 116, + "2097201": 104, + "2097202": 101, + "2097203": 32, + "2097204": 115, + "2097205": 101, + "2097206": 99, + "2097207": 111, + "2097208": 110, + "2097209": 100, + "2097210": 32, + "2097211": 110, + "2097212": 117, + "2097213": 109, + "2097214": 98, + "2097215": 101, + "2097216": 114, + "2097217": 46, + "2097219": 84, + "2097220": 104, + "2097221": 101, + "2097222": 32, + "2097223": 114, + "2097224": 101, + "2097225": 115, + "2097226": 117, + "2097227": 108, + "2097228": 116, + "2097229": 32, + "2097230": 105, + "2097231": 115, + "2097232": 58, + "2097233": 32, + "21": 2, + "23": 5, + "27": 12, + "29": 64, + "3": 32, + "30": 64, + "31": 32, + "32": 60, + "33": 1, + "35": 32, + "36": 52, + "37": 33, + "39": 33, + "4": 52, + "41": 32, + "42": 32, + "43": 32, + "44": 32, + "45": 2, + "47": 4, + "5": 33, + "51": 12, + "52": 32, + "53": 2, + "55": 5, + "59": 12, + "61": 64, + "62": 72, + "63": 32, + "64": 1, + "65": 40, + "66": 80, + "67": 32, + "68": 60, + "69": 1, + "71": 32, + "72": 52, + "73": 33, + "75": 67, + "77": 32, + "78": 32, + "79": 32, + "80": 32, + "81": 2, + "83": 4, + "87": 12, + "88": 1, + "89": 64, + "9": 32, + "90": 32, + "91": 32, + "92": 32, + "93": 2, + "95": 1, + "99": 12, + }, + registers: { + "1,at": "0x200043", + "10,t2": "0x243", + "2,v0": "0xa", + "4,a0": "0x243", + "8,t0": "0x7b", + "9,t1": "0x1c8", + PC: "0x6c", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_010.s.snap b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_010.s.snap new file mode 100644 index 000000000..ebe2c0e70 --- /dev/null +++ b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_010.s.snap @@ -0,0 +1,221 @@ +export const snapshot = {}; + +snapshot[`mips/correct/examples/test_mips_example_010.s 1`] = ` +{ + display: "Insert the string length (no more than 100 characters) Insert the string This is a very long string with many characters and a lot of data. :) 123 +", + error: false, + keyboard: " 74 This is a very long string with many characters and a lot of data. :) 123 +", + memory: { + "0": 60, + "1": 1, + "10": 32, + "11": 32, + "12": 32, + "13": 2, + "15": 4, + "19": 12, + "20": 32, + "2097152": 73, + "2097153": 110, + "2097154": 115, + "2097155": 101, + "2097156": 114, + "2097157": 116, + "2097158": 32, + "2097159": 116, + "2097160": 104, + "2097161": 101, + "2097162": 32, + "2097163": 115, + "2097164": 116, + "2097165": 114, + "2097166": 105, + "2097167": 110, + "2097168": 103, + "2097169": 32, + "2097170": 108, + "2097171": 101, + "2097172": 110, + "2097173": 103, + "2097174": 116, + "2097175": 104, + "2097176": 32, + "2097177": 40, + "2097178": 110, + "2097179": 111, + "2097180": 32, + "2097181": 109, + "2097182": 111, + "2097183": 114, + "2097184": 101, + "2097185": 32, + "2097186": 116, + "2097187": 104, + "2097188": 97, + "2097189": 110, + "2097190": 32, + "2097191": 49, + "2097192": 48, + "2097193": 48, + "2097194": 32, + "2097195": 99, + "2097196": 104, + "2097197": 97, + "2097198": 114, + "2097199": 97, + "2097200": 99, + "2097201": 116, + "2097202": 101, + "2097203": 114, + "2097204": 115, + "2097205": 41, + "2097206": 32, + "2097208": 73, + "2097209": 110, + "2097210": 115, + "2097211": 101, + "2097212": 114, + "2097213": 116, + "2097214": 32, + "2097215": 116, + "2097216": 104, + "2097217": 101, + "2097218": 32, + "2097219": 115, + "2097220": 116, + "2097221": 114, + "2097222": 105, + "2097223": 110, + "2097224": 103, + "2097225": 32, + "2097227": 84, + "2097228": 104, + "2097229": 105, + "2097230": 115, + "2097231": 32, + "2097232": 105, + "2097233": 115, + "2097234": 32, + "2097235": 97, + "2097236": 32, + "2097237": 118, + "2097238": 101, + "2097239": 114, + "2097240": 121, + "2097241": 32, + "2097242": 108, + "2097243": 111, + "2097244": 110, + "2097245": 103, + "2097246": 32, + "2097247": 115, + "2097248": 116, + "2097249": 114, + "2097250": 105, + "2097251": 110, + "2097252": 103, + "2097253": 32, + "2097254": 119, + "2097255": 105, + "2097256": 116, + "2097257": 104, + "2097258": 32, + "2097259": 109, + "2097260": 97, + "2097261": 110, + "2097262": 121, + "2097263": 32, + "2097264": 99, + "2097265": 104, + "2097266": 97, + "2097267": 114, + "2097268": 97, + "2097269": 99, + "2097270": 116, + "2097271": 101, + "2097272": 114, + "2097273": 115, + "2097274": 32, + "2097275": 97, + "2097276": 110, + "2097277": 100, + "2097278": 32, + "2097279": 97, + "2097280": 32, + "2097281": 108, + "2097282": 111, + "2097283": 116, + "2097284": 32, + "2097285": 111, + "2097286": 102, + "2097287": 32, + "2097288": 100, + "2097289": 97, + "2097290": 116, + "2097291": 97, + "2097292": 46, + "2097293": 32, + "2097294": 58, + "2097295": 41, + "2097296": 32, + "2097297": 49, + "2097298": 50, + "2097299": 51, + "2097300": 10, + "21": 2, + "23": 5, + "27": 12, + "29": 64, + "3": 32, + "30": 64, + "31": 32, + "32": 60, + "33": 1, + "35": 32, + "36": 52, + "37": 33, + "39": 56, + "4": 52, + "41": 32, + "42": 32, + "43": 32, + "44": 32, + "45": 2, + "47": 4, + "5": 33, + "51": 12, + "52": 60, + "53": 1, + "55": 32, + "56": 52, + "57": 33, + "59": 75, + "61": 32, + "62": 32, + "63": 32, + "64": 1, + "66": 40, + "67": 32, + "68": 32, + "69": 2, + "71": 8, + "75": 12, + "76": 32, + "77": 2, + "79": 4, + "83": 12, + "9": 32, + }, + registers: { + "1,at": "0x20004b", + "2,v0": "0x4", + "4,a0": "0x20004b", + "5,a1": "0x4a", + "8,t0": "0x4a", + PC: "0xfa0", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_011.s.snap b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_011.s.snap new file mode 100644 index 000000000..aa1fe0e7b --- /dev/null +++ b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_011.s.snap @@ -0,0 +1,85 @@ +export const snapshot = {}; + +snapshot[`mips/correct/examples/test_mips_example_011.s 1`] = ` +{ + display: "-144", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 4, + "10": 255, + "11": 179, + "13": 32, + "14": 40, + "15": 32, + "16": 32, + "17": 6, + "19": 45, + "20": 12, + "23": 56, + "25": 64, + "26": 32, + "27": 32, + "29": 96, + "3": 23, + "30": 40, + "31": 32, + "32": 12, + "35": 76, + "37": 64, + "38": 32, + "39": 32, + "4": 60, + "40": 32, + "41": 2, + "43": 1, + "47": 12, + "48": 32, + "49": 2, + "5": 1, + "51": 10, + "55": 12, + "57": 164, + "58": 72, + "59": 32, + "6": 255, + "61": 198, + "62": 80, + "63": 32, + "64": 1, + "65": 32, + "66": 16, + "67": 32, + "68": 1, + "69": 64, + "7": 255, + "70": 24, + "71": 32, + "72": 3, + "73": 224, + "75": 8, + "77": 68, + "78": 40, + "79": 34, + "8": 52, + "80": 3, + "81": 224, + "83": 8, + "9": 33, + }, + registers: { + "1,at": "0xffffffb3", + "10,t2": "0x5a", + "2,v0": "0xa", + "3,v1": "0x5a", + "31,ra": "0x24", + "4,a0": "0xffffff70", + "5,a1": "0x5a", + "6,a2": "0x2d", + "9,t1": "0xffffffca", + PC: "0x38", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_012.s.snap b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_012.s.snap new file mode 100644 index 000000000..d75d13a91 --- /dev/null +++ b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_012.s.snap @@ -0,0 +1,119 @@ +export const snapshot = {}; + +snapshot[`mips/correct/examples/test_mips_example_012.s 1`] = ` +{ + display: "120", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 4, + "10": 32, + "11": 32, + "12": 32, + "13": 2, + "15": 1, + "19": 12, + "20": 32, + "21": 2, + "23": 10, + "268435396": 15, + "268435397": 255, + "268435398": 255, + "268435399": 208, + "268435403": 76, + "268435407": 2, + "268435408": 15, + "268435409": 255, + "268435410": 255, + "268435411": 220, + "268435415": 76, + "268435419": 3, + "268435420": 15, + "268435421": 255, + "268435422": 255, + "268435423": 232, + "268435427": 76, + "268435431": 4, + "268435432": 15, + "268435433": 255, + "268435434": 255, + "268435435": 244, + "268435439": 76, + "268435443": 5, + "268435451": 8, + "27": 12, + "28": 32, + "29": 1, + "3": 5, + "31": 12, + "32": 3, + "33": 161, + "34": 232, + "35": 35, + "36": 175, + "37": 191, + "39": 8, + "4": 12, + "40": 175, + "41": 190, + "43": 4, + "44": 39, + "45": 190, + "47": 4, + "48": 40, + "49": 129, + "51": 2, + "52": 16, + "53": 1, + "55": 12, + "56": 32, + "57": 2, + "59": 1, + "60": 4, + "61": 1, + "63": 24, + "64": 175, + "65": 196, + "66": 255, + "67": 252, + "68": 32, + "69": 132, + "7": 28, + "70": 255, + "71": 255, + "72": 12, + "75": 28, + "76": 143, + "77": 201, + "78": 255, + "79": 252, + "80": 112, + "81": 66, + "82": 72, + "83": 2, + "84": 143, + "85": 191, + "87": 8, + "88": 143, + "89": 190, + "9": 64, + "91": 4, + "92": 39, + "93": 189, + "95": 12, + "96": 3, + "97": 224, + "99": 8, + }, + registers: { + "1,at": "0x1", + "2,v0": "0xa", + "31,ra": "0x8", + "4,a0": "0x78", + "9,t1": "0x5", + PC: "0x1c", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_013.s.snap b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_013.s.snap new file mode 100644 index 000000000..e1ad6b48b --- /dev/null +++ b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_013.s.snap @@ -0,0 +1,79 @@ +export const snapshot = {}; + +snapshot[`mips/correct/examples/test_mips_example_013.s 1`] = ` +{ + display: "83116114105110103321051103285847045565832226136128322261361713222613613532226136136322401591601720", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 2, + "13": 32, + "14": 64, + "15": 32, + "16": 129, + "17": 4, + "2097152": 83, + "2097153": 116, + "2097154": 114, + "2097155": 105, + "2097156": 110, + "2097157": 103, + "2097158": 32, + "2097159": 105, + "2097160": 110, + "2097161": 32, + "2097162": 85, + "2097163": 84, + "2097164": 70, + "2097165": 45, + "2097166": 56, + "2097167": 58, + "2097168": 32, + "2097169": 226, + "2097170": 136, + "2097171": 128, + "2097172": 32, + "2097173": 226, + "2097174": 136, + "2097175": 171, + "2097176": 32, + "2097177": 226, + "2097178": 136, + "2097179": 135, + "2097180": 32, + "2097181": 226, + "2097182": 136, + "2097183": 136, + "2097184": 32, + "2097185": 240, + "2097186": 159, + "2097187": 160, + "2097188": 172, + "23": 12, + "24": 33, + "25": 8, + "27": 1, + "28": 20, + "29": 4, + "3": 1, + "30": 255, + "31": 244, + "32": 3, + "33": 224, + "35": 8, + "4": 60, + "5": 1, + "7": 32, + "8": 52, + "9": 33, + }, + registers: { + "1,at": "0x200000", + "2,v0": "0x1", + "8,t0": "0x200026", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_001.s.snap b/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_001.s.snap new file mode 100644 index 000000000..9d4d8ed5a --- /dev/null +++ b/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_001.s.snap @@ -0,0 +1,114 @@ +export const snapshot = {}; + +snapshot[`mips/correct/syscalls/test_mips_syscall_001.s 1`] = ` +{ + display: "6673120134-567811416128883", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 2, + "100": 140, + "101": 36, + "107": 12, + "108": 3, + "109": 224, + "11": 12, + "111": 8, + "12": 60, + "13": 1, + "15": 32, + "16": 52, + "17": 33, + "20": 128, + "2097152": 120, + "2097153": 1, + "2097155": 34, + "2097156": 255, + "2097157": 255, + "2097158": 233, + "2097159": 210, + "2097160": 84, + "2097161": 104, + "2097162": 105, + "2097163": 115, + "2097164": 32, + "2097165": 105, + "2097166": 115, + "2097167": 32, + "2097168": 97, + "2097169": 110, + "2097170": 111, + "2097171": 116, + "2097172": 104, + "2097173": 101, + "2097174": 114, + "2097175": 32, + "2097176": 115, + "2097177": 116, + "2097178": 114, + "2097179": 105, + "2097180": 110, + "2097181": 103, + "21": 36, + "27": 12, + "28": 32, + "29": 8, + "3": 1, + "31": 4, + "32": 60, + "33": 1, + "35": 32, + "36": 52, + "37": 33, + "4": 32, + "41": 32, + "42": 72, + "43": 32, + "44": 129, + "45": 36, + "47": 1, + "5": 4, + "51": 12, + "52": 60, + "53": 1, + "55": 32, + "56": 52, + "57": 33, + "59": 2, + "6": 26, + "60": 132, + "61": 36, + "67": 12, + "68": 60, + "69": 1, + "7": 17, + "71": 32, + "72": 52, + "73": 33, + "75": 4, + "76": 140, + "77": 36, + "83": 12, + "84": 32, + "85": 4, + "87": 1, + "91": 12, + "92": 60, + "93": 1, + "95": 32, + "96": 52, + "97": 33, + "99": 8, + }, + registers: { + "1,at": "0x200008", + "2,v0": "0x1", + "4,a0": "0x54686973", + "8,t0": "0x4", + "9,t1": "0x200000", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_002.s.snap b/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_002.s.snap new file mode 100644 index 000000000..132e5d0ec --- /dev/null +++ b/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_002.s.snap @@ -0,0 +1,59 @@ +export const snapshot = {}; + +snapshot[`mips/correct/syscalls/test_mips_syscall_002.s 1`] = ` +{ + display: "6673-86.97399902343751.100000023841858", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 2, + "10": 136, + "12": 68, + "13": 129, + "14": 96, + "19": 12, + "20": 60, + "21": 1, + "22": 194, + "23": 173, + "24": 52, + "25": 33, + "26": 242, + "27": 176, + "28": 68, + "29": 129, + "3": 2, + "30": 96, + "35": 12, + "36": 60, + "37": 1, + "38": 63, + "39": 140, + "4": 60, + "40": 52, + "41": 33, + "42": 204, + "43": 205, + "44": 68, + "45": 129, + "46": 96, + "5": 1, + "51": 12, + "52": 3, + "53": 224, + "55": 8, + "6": 69, + "7": 208, + "8": 52, + "9": 33, + }, + registers: { + "1,at": "0x3f8ccccd", + "2,v0": "0x2", + "f12,FP12": "0x3f8ccccd", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_003.s.snap b/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_003.s.snap new file mode 100644 index 000000000..d58147cdc --- /dev/null +++ b/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_003.s.snap @@ -0,0 +1,89 @@ +export const snapshot = {}; + +snapshot[`mips/correct/syscalls/test_mips_syscall_003.s 1`] = ` +{ + display: "6673-86.9741.1", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 2, + "12": 68, + "13": 129, + "14": 104, + "16": 60, + "17": 1, + "18": 64, + "19": 186, + "20": 52, + "21": 33, + "22": 17, + "24": 68, + "25": 129, + "26": 96, + "3": 3, + "31": 12, + "32": 60, + "33": 1, + "34": 4, + "35": 24, + "36": 52, + "37": 33, + "38": 147, + "39": 117, + "4": 60, + "40": 68, + "41": 129, + "42": 104, + "44": 60, + "45": 1, + "46": 192, + "47": 85, + "48": 52, + "49": 33, + "5": 1, + "50": 190, + "51": 86, + "52": 68, + "53": 129, + "54": 96, + "59": 12, + "60": 60, + "61": 1, + "62": 153, + "63": 153, + "64": 52, + "65": 33, + "66": 153, + "67": 154, + "68": 68, + "69": 129, + "70": 104, + "72": 60, + "73": 1, + "74": 63, + "75": 241, + "76": 52, + "77": 33, + "78": 153, + "79": 153, + "8": 52, + "80": 68, + "81": 129, + "82": 96, + "87": 12, + "88": 3, + "89": 224, + "9": 33, + "91": 8, + }, + registers: { + "1,at": "0x3ff19999", + "2,v0": "0x3", + "f12,FP12": "0x3ff19999", + PC: "0xffffffff", + f13: "0x9999999a", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_004.s.snap b/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_004.s.snap new file mode 100644 index 000000000..4264ac178 --- /dev/null +++ b/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_004.s.snap @@ -0,0 +1,87 @@ +export const snapshot = {}; + +snapshot[`mips/correct/syscalls/test_mips_syscall_004.s 1`] = ` +{ + display: "First StringSecond Stringaa +", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 2, + "13": 32, + "14": 32, + "15": 32, + "19": 12, + "20": 60, + "2097152": 70, + "2097153": 105, + "2097154": 114, + "2097155": 115, + "2097156": 116, + "2097157": 32, + "2097158": 83, + "2097159": 116, + "2097160": 114, + "2097161": 105, + "2097162": 110, + "2097163": 103, + "2097165": 83, + "2097166": 101, + "2097167": 99, + "2097168": 111, + "2097169": 110, + "2097170": 100, + "2097171": 32, + "2097172": 83, + "2097173": 116, + "2097174": 114, + "2097175": 105, + "2097176": 110, + "2097177": 103, + "2097178": 97, + "21": 1, + "23": 32, + "24": 52, + "25": 33, + "27": 13, + "29": 32, + "3": 4, + "30": 32, + "31": 32, + "35": 12, + "36": 60, + "37": 1, + "39": 32, + "4": 60, + "40": 52, + "41": 33, + "43": 26, + "45": 32, + "46": 32, + "47": 32, + "5": 1, + "51": 12, + "52": 32, + "53": 4, + "55": 10, + "56": 32, + "57": 2, + "59": 11, + "63": 12, + "64": 3, + "65": 224, + "67": 8, + "7": 32, + "8": 52, + "9": 33, + }, + registers: { + "1,at": "0x20001a", + "2,v0": "0xb", + "4,a0": "0xa", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_005.s.snap b/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_005.s.snap new file mode 100644 index 000000000..41ba70e46 --- /dev/null +++ b/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_005.s.snap @@ -0,0 +1,23 @@ +export const snapshot = {}; + +snapshot[`mips/correct/syscalls/test_mips_syscall_005.s 1`] = ` +{ + display: "", + error: false, + keyboard: " 1234567", + memory: { + "0": 32, + "1": 2, + "11": 8, + "3": 5, + "7": 12, + "8": 3, + "9": 224, + }, + registers: { + "2,v0": "0x12d687", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_006.s.snap b/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_006.s.snap new file mode 100644 index 000000000..4ace707da --- /dev/null +++ b/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_006.s.snap @@ -0,0 +1,24 @@ +export const snapshot = {}; + +snapshot[`mips/correct/syscalls/test_mips_syscall_006.s 1`] = ` +{ + display: "", + error: false, + keyboard: " 1.234567", + memory: { + "0": 32, + "1": 2, + "11": 8, + "3": 6, + "7": 12, + "8": 3, + "9": 224, + }, + registers: { + "2,v0": "0x6", + "f0,FP0": "0x3f9e064b", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_008.s.snap b/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_008.s.snap new file mode 100644 index 000000000..a181eae7b --- /dev/null +++ b/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_008.s.snap @@ -0,0 +1,43 @@ +export const snapshot = {}; + +snapshot[`mips/correct/syscalls/test_mips_syscall_008.s 1`] = ` +{ + display: "", + error: false, + keyboard: " This is a long string +", + memory: { + "0": 32, + "1": 2, + "13": 32, + "14": 32, + "15": 32, + "16": 32, + "17": 5, + "19": 5, + "2097152": 84, + "2097153": 104, + "2097154": 105, + "2097155": 115, + "2097156": 32, + "23": 12, + "24": 3, + "25": 224, + "27": 8, + "3": 8, + "4": 60, + "5": 1, + "7": 32, + "8": 52, + "9": 33, + }, + registers: { + "1,at": "0x200000", + "2,v0": "0x8", + "4,a0": "0x200000", + "5,a1": "0x5", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_010.s.snap b/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_010.s.snap new file mode 100644 index 000000000..6837374a0 --- /dev/null +++ b/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_010.s.snap @@ -0,0 +1,27 @@ +export const snapshot = {}; + +snapshot[`mips/correct/syscalls/test_mips_syscall_010.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 2, + "10": 1, + "11": 197, + "12": 3, + "13": 224, + "15": 8, + "3": 10, + "7": 12, + "8": 32, + "9": 8, + }, + registers: { + "2,v0": "0xa", + PC: "0x8", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_011.s.snap b/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_011.s.snap new file mode 100644 index 000000000..ba6c0b63a --- /dev/null +++ b/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_011.s.snap @@ -0,0 +1,27 @@ +export const snapshot = {}; + +snapshot[`mips/correct/syscalls/test_mips_syscall_011.s 1`] = ` +{ + display: "c", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 2, + "11": 12, + "12": 3, + "13": 224, + "15": 8, + "3": 11, + "4": 32, + "5": 4, + "7": 99, + }, + registers: { + "2,v0": "0xb", + "4,a0": "0x63", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_012.s.snap b/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_012.s.snap new file mode 100644 index 000000000..4c6defe87 --- /dev/null +++ b/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_012.s.snap @@ -0,0 +1,23 @@ +export const snapshot = {}; + +snapshot[`mips/correct/syscalls/test_mips_syscall_012.s 1`] = ` +{ + display: "", + error: false, + keyboard: " a", + memory: { + "0": 32, + "1": 2, + "11": 8, + "3": 12, + "7": 12, + "8": 3, + "9": 224, + }, + registers: { + "2,v0": "0x61", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_001.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_001.s.snap new file mode 100644 index 000000000..ce753f488 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_001.s.snap @@ -0,0 +1,56 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_001.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "10": 255, + "11": 226, + "13": 32, + "14": 72, + "15": 32, + "16": 32, + "17": 10, + "20": 32, + "21": 11, + "23": 18, + "24": 1, + "25": 40, + "26": 96, + "27": 32, + "28": 1, + "29": 73, + "3": 10, + "30": 104, + "31": 32, + "32": 1, + "33": 106, + "34": 112, + "35": 32, + "36": 3, + "37": 224, + "39": 8, + "4": 60, + "5": 1, + "6": 255, + "7": 255, + "8": 52, + "9": 33, + }, + registers: { + "1,at": "0xffffffe2", + "11,t3": "0x12", + "12,t4": "0xffffffec", + "13,t5": "0xffffffe2", + "14,t6": "0x12", + "8,t0": "0xa", + "9,t1": "0xffffffe2", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_002.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_002.s.snap new file mode 100644 index 000000000..dba5cd9b9 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_002.s.snap @@ -0,0 +1,36 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_002.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "10": 1, + "11": 155, + "12": 33, + "13": 75, + "15": 12, + "16": 3, + "17": 224, + "19": 8, + "3": 10, + "4": 33, + "5": 9, + "6": 255, + "7": 226, + "8": 33, + "9": 42, + }, + registers: { + "10,t2": "0x187", + "11,t3": "0x193", + "8,t0": "0xa", + "9,t1": "0xffffffec", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_003.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_003.s.snap new file mode 100644 index 000000000..8ddb7c836 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_003.s.snap @@ -0,0 +1,66 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_003.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "10": 252, + "11": 87, + "13": 32, + "14": 72, + "15": 32, + "16": 32, + "17": 10, + "19": 12, + "2": 2, + "20": 60, + "21": 1, + "23": 18, + "24": 52, + "25": 33, + "26": 53, + "27": 21, + "29": 32, + "3": 35, + "30": 88, + "31": 32, + "32": 1, + "33": 136, + "34": 72, + "35": 34, + "36": 1, + "37": 170, + "38": 96, + "39": 34, + "4": 60, + "40": 1, + "41": 203, + "42": 104, + "43": 34, + "44": 3, + "45": 224, + "47": 8, + "5": 1, + "6": 255, + "7": 255, + "8": 52, + "9": 33, + }, + registers: { + "1,at": "0x123515", + "10,t2": "0xc", + "11,t3": "0x123515", + "12,t4": "0x5cc", + "13,t5": "0xfffffa40", + "14,t6": "0x123ad5", + "8,t0": "0x223", + "9,t1": "0xfffffc57", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_004.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_004.s.snap new file mode 100644 index 000000000..27cc3fc15 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_004.s.snap @@ -0,0 +1,40 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_004.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 8, + "11": 52, + "12": 60, + "13": 24, + "14": 15, + "15": 240, + "16": 60, + "17": 25, + "19": 2, + "20": 3, + "21": 224, + "23": 8, + "3": 35, + "4": 60, + "5": 14, + "6": 86, + "7": 219, + "8": 60, + "9": 15, + }, + registers: { + "14,t6": "0x56db0000", + "15,t7": "0x340000", + "24,t8": "0xff00000", + "25,t9": "0x20000", + "8,t0": "0x230000", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_005.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_005.s.snap new file mode 100644 index 000000000..906e28f0d --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_005.s.snap @@ -0,0 +1,68 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_005.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 13, + "10": 252, + "11": 87, + "13": 32, + "14": 112, + "15": 32, + "16": 32, + "17": 15, + "19": 12, + "2": 2, + "20": 60, + "21": 1, + "23": 18, + "24": 52, + "25": 33, + "26": 53, + "27": 21, + "29": 32, + "3": 35, + "30": 192, + "31": 32, + "32": 12, + "35": 48, + "36": 3, + "37": 45, + "38": 112, + "39": 34, + "4": 60, + "40": 2, + "41": 47, + "42": 200, + "43": 34, + "44": 2, + "45": 88, + "46": 136, + "47": 34, + "48": 32, + "49": 2, + "5": 1, + "51": 10, + "55": 12, + "6": 255, + "7": 255, + "8": 52, + "9": 33, + }, + registers: { + "1,at": "0x123515", + "13,t5": "0x223", + "14,t6": "0xfffffc57", + "15,t7": "0xc", + "2,v0": "0xa", + "24,t8": "0x123515", + "31,ra": "0x24", + PC: "0x38", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_006.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_006.s.snap new file mode 100644 index 000000000..5eb7c08ff --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_006.s.snap @@ -0,0 +1,73 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_006.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "10": 252, + "11": 87, + "13": 32, + "14": 72, + "15": 32, + "16": 32, + "17": 10, + "19": 12, + "2": 2, + "20": 60, + "21": 1, + "23": 18, + "24": 52, + "25": 33, + "26": 53, + "27": 21, + "29": 32, + "3": 35, + "30": 88, + "31": 32, + "32": 32, + "33": 24, + "35": 52, + "36": 3, + "38": 96, + "39": 9, + "4": 60, + "40": 1, + "41": 169, + "42": 80, + "43": 34, + "44": 1, + "45": 202, + "46": 88, + "47": 34, + "48": 1, + "49": 235, + "5": 1, + "50": 96, + "51": 34, + "52": 32, + "53": 2, + "55": 10, + "59": 12, + "6": 255, + "7": 255, + "8": 52, + "9": 33, + }, + registers: { + "1,at": "0x123515", + "10,t2": "0xc", + "11,t3": "0x123515", + "12,t4": "0x28", + "2,v0": "0xa", + "24,t8": "0x34", + "8,t0": "0x223", + "9,t1": "0xfffffc57", + PC: "0x3c", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_007.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_007.s.snap new file mode 100644 index 000000000..6f46b2f72 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_007.s.snap @@ -0,0 +1,71 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_007.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "11": 32, + "12": 32, + "13": 9, + "15": 2, + "16": 32, + "17": 10, + "19": 5, + "20": 60, + "21": 1, + "23": 4, + "24": 52, + "25": 33, + "26": 69, + "27": 98, + "29": 32, + "3": 4, + "30": 88, + "31": 32, + "32": 17, + "33": 104, + "35": 16, + "36": 32, + "37": 14, + "39": 34, + "4": 52, + "40": 32, + "41": 2, + "43": 10, + "47": 12, + "48": 32, + "49": 12, + "5": 33, + "51": 11, + "52": 32, + "53": 13, + "54": 2, + "55": 43, + "56": 17, + "57": 8, + "58": 255, + "59": 236, + "6": 69, + "7": 98, + "9": 32, + }, + registers: { + "1,at": "0x44562", + "10,t2": "0x5", + "11,t3": "0x44562", + "12,t4": "0xb", + "13,t5": "0x22b", + "14,t6": "0x22", + "2,v0": "0xa", + "8,t0": "0x44562", + "9,t1": "0x2", + PC: "0x30", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_008.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_008.s.snap new file mode 100644 index 000000000..8658cac21 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_008.s.snap @@ -0,0 +1,72 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_008.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "11": 32, + "12": 32, + "13": 9, + "15": 2, + "16": 32, + "17": 10, + "19": 5, + "20": 60, + "21": 1, + "23": 4, + "24": 52, + "25": 33, + "26": 69, + "27": 98, + "29": 32, + "3": 4, + "30": 88, + "31": 32, + "32": 21, + "33": 10, + "35": 16, + "36": 32, + "37": 14, + "39": 34, + "4": 52, + "40": 32, + "41": 2, + "43": 10, + "47": 12, + "48": 32, + "49": 12, + "5": 33, + "50": 7, + "51": 84, + "52": 32, + "53": 13, + "54": 2, + "55": 43, + "56": 21, + "57": 72, + "58": 255, + "59": 236, + "6": 69, + "7": 98, + "9": 32, + }, + registers: { + "1,at": "0x44562", + "10,t2": "0x5", + "11,t3": "0x44562", + "12,t4": "0x754", + "13,t5": "0x22b", + "14,t6": "0x22", + "2,v0": "0xa", + "8,t0": "0x44562", + "9,t1": "0x2", + PC: "0x30", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_009.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_009.s.snap new file mode 100644 index 000000000..1d0ade045 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_009.s.snap @@ -0,0 +1,80 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_009.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "11": 5, + "12": 60, + "13": 1, + "15": 4, + "16": 52, + "17": 33, + "18": 69, + "19": 98, + "2": 1, + "21": 32, + "22": 88, + "23": 32, + "24": 1, + "25": 10, + "26": 8, + "27": 42, + "28": 20, + "29": 1, + "3": 105, + "31": 24, + "32": 1, + "33": 40, + "34": 8, + "35": 42, + "36": 20, + "37": 1, + "39": 16, + "4": 32, + "40": 32, + "41": 14, + "43": 34, + "44": 32, + "45": 2, + "47": 10, + "5": 9, + "51": 12, + "52": 32, + "53": 12, + "55": 11, + "56": 32, + "57": 13, + "58": 2, + "59": 43, + "60": 1, + "61": 141, + "62": 8, + "63": 42, + "64": 20, + "65": 1, + "66": 255, + "67": 232, + "7": 2, + "8": 32, + "9": 10, + }, + registers: { + "1,at": "0x1", + "10,t2": "0x5", + "11,t3": "0x44562", + "12,t4": "0xb", + "13,t5": "0x22b", + "14,t6": "0x22", + "2,v0": "0xa", + "8,t0": "0x169", + "9,t1": "0x2", + PC: "0x34", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_010.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_010.s.snap new file mode 100644 index 000000000..32ea81a2b --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_010.s.snap @@ -0,0 +1,80 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_010.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "11": 5, + "12": 60, + "13": 1, + "15": 4, + "16": 52, + "17": 33, + "18": 69, + "19": 98, + "2": 1, + "21": 32, + "22": 88, + "23": 32, + "24": 1, + "25": 11, + "26": 8, + "27": 42, + "28": 16, + "29": 1, + "3": 105, + "31": 24, + "32": 1, + "33": 104, + "34": 8, + "35": 42, + "36": 16, + "37": 1, + "39": 16, + "4": 32, + "40": 32, + "41": 14, + "43": 34, + "44": 32, + "45": 2, + "47": 10, + "5": 9, + "51": 12, + "52": 32, + "53": 12, + "54": 7, + "55": 84, + "56": 32, + "57": 13, + "58": 2, + "59": 43, + "60": 1, + "61": 141, + "62": 8, + "63": 42, + "64": 16, + "65": 1, + "66": 255, + "67": 232, + "7": 2, + "8": 32, + "9": 10, + }, + registers: { + "10,t2": "0x5", + "11,t3": "0x44562", + "12,t4": "0x754", + "13,t5": "0x22b", + "14,t6": "0x22", + "2,v0": "0xa", + "8,t0": "0x169", + "9,t1": "0x2", + PC: "0x34", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_011.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_011.s.snap new file mode 100644 index 000000000..84df901c2 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_011.s.snap @@ -0,0 +1,81 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_011.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "11": 5, + "12": 60, + "13": 1, + "15": 4, + "16": 52, + "17": 33, + "18": 69, + "19": 98, + "2": 1, + "21": 32, + "22": 88, + "23": 32, + "24": 1, + "25": 10, + "26": 8, + "27": 43, + "28": 20, + "29": 1, + "3": 105, + "31": 24, + "32": 1, + "33": 40, + "34": 8, + "35": 43, + "36": 20, + "37": 1, + "39": 16, + "4": 32, + "40": 32, + "41": 14, + "43": 34, + "44": 32, + "45": 2, + "47": 10, + "5": 9, + "51": 12, + "52": 32, + "53": 12, + "54": 7, + "55": 84, + "56": 32, + "57": 13, + "58": 2, + "59": 43, + "60": 1, + "61": 172, + "62": 8, + "63": 43, + "64": 20, + "65": 1, + "66": 255, + "67": 232, + "7": 2, + "8": 32, + "9": 10, + }, + registers: { + "1,at": "0x1", + "10,t2": "0x5", + "11,t3": "0x44562", + "12,t4": "0x754", + "13,t5": "0x22b", + "14,t6": "0x22", + "2,v0": "0xa", + "8,t0": "0x169", + "9,t1": "0x2", + PC: "0x34", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_012.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_012.s.snap new file mode 100644 index 000000000..5e91a5ec5 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_012.s.snap @@ -0,0 +1,80 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_012.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "11": 5, + "12": 60, + "13": 1, + "15": 4, + "16": 52, + "17": 33, + "18": 69, + "19": 98, + "2": 1, + "21": 32, + "22": 88, + "23": 32, + "24": 1, + "25": 11, + "26": 8, + "27": 43, + "28": 16, + "29": 1, + "3": 105, + "31": 24, + "32": 1, + "33": 106, + "34": 8, + "35": 43, + "36": 16, + "37": 1, + "39": 16, + "4": 32, + "40": 32, + "41": 14, + "43": 34, + "44": 32, + "45": 2, + "47": 10, + "5": 9, + "51": 12, + "52": 32, + "53": 12, + "54": 7, + "55": 84, + "56": 32, + "57": 13, + "58": 2, + "59": 43, + "60": 1, + "61": 141, + "62": 8, + "63": 43, + "64": 16, + "65": 1, + "66": 255, + "67": 232, + "7": 2, + "8": 32, + "9": 10, + }, + registers: { + "10,t2": "0x5", + "11,t3": "0x44562", + "12,t4": "0x754", + "13,t5": "0x22b", + "14,t6": "0x22", + "2,v0": "0xa", + "8,t0": "0x169", + "9,t1": "0x2", + PC: "0x34", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_013.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_013.s.snap new file mode 100644 index 000000000..c2afafd66 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_013.s.snap @@ -0,0 +1,125 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_013.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "100": 60, + "101": 1, + "103": 32, + "104": 52, + "105": 33, + "107": 12, + "109": 32, + "11": 32, + "110": 200, + "111": 32, + "112": 163, + "113": 45, + "116": 60, + "117": 1, + "119": 32, + "12": 60, + "120": 52, + "121": 33, + "123": 14, + "125": 32, + "126": 200, + "127": 32, + "128": 167, + "129": 47, + "13": 1, + "132": 3, + "133": 224, + "135": 8, + "15": 32, + "16": 52, + "17": 33, + "19": 4, + "2097155": 14, + "2097156": 127, + "2097158": 127, + "2097159": 255, + "2097163": 14, + "2097164": 127, + "2097166": 127, + "2097167": 255, + "21": 32, + "22": 72, + "23": 32, + "24": 60, + "25": 1, + "27": 32, + "28": 52, + "29": 33, + "3": 32, + "31": 6, + "33": 32, + "34": 80, + "35": 32, + "36": 141, + "37": 11, + "4": 52, + "40": 60, + "41": 1, + "43": 32, + "44": 52, + "45": 33, + "48": 140, + "49": 44, + "5": 33, + "52": 129, + "53": 45, + "56": 60, + "57": 1, + "59": 32, + "60": 52, + "61": 33, + "63": 4, + "64": 144, + "65": 46, + "68": 133, + "69": 79, + "72": 60, + "73": 1, + "75": 32, + "76": 52, + "77": 33, + "79": 6, + "80": 148, + "81": 56, + "84": 60, + "85": 1, + "87": 32, + "88": 52, + "89": 33, + "9": 32, + "91": 8, + "93": 32, + "94": 200, + "95": 32, + "96": 175, + "97": 43, + }, + registers: { + "1,at": "0x20000e", + "10,t2": "0x200006", + "11,t3": "0xe", + "12,t4": "0xe", + "13,t5": "0x7f", + "14,t6": "0x7f", + "15,t7": "0x7fff", + "24,t8": "0x7fff", + "25,t9": "0x20000e", + "8,t0": "0x200000", + "9,t1": "0x200004", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_014.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_014.s.snap new file mode 100644 index 000000000..ad613abdf --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_014.s.snap @@ -0,0 +1,71 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_014.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "11": 32, + "12": 60, + "13": 1, + "15": 32, + "16": 52, + "17": 33, + "19": 2, + "2097152": 127, + "2097154": 255, + "2097155": 255, + "21": 32, + "22": 72, + "23": 32, + "24": 145, + "25": 10, + "28": 149, + "29": 43, + "3": 32, + "32": 60, + "33": 1, + "35": 32, + "36": 52, + "37": 33, + "39": 4, + "4": 52, + "41": 32, + "42": 96, + "43": 32, + "44": 161, + "45": 141, + "48": 60, + "49": 1, + "5": 33, + "51": 32, + "52": 52, + "53": 33, + "55": 6, + "57": 32, + "58": 112, + "59": 32, + "60": 165, + "61": 207, + "64": 3, + "65": 224, + "67": 8, + "9": 32, + }, + registers: { + "1,at": "0x200006", + "10,t2": "0x7f", + "11,t3": "0xffff", + "12,t4": "0x200004", + "14,t6": "0x200006", + "8,t0": "0x200000", + "9,t1": "0x200002", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_015.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_015.s.snap new file mode 100644 index 000000000..850ca19f5 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_015.s.snap @@ -0,0 +1,70 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_015.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "10": 252, + "13": 32, + "14": 104, + "15": 32, + "16": 41, + "17": 9, + "18": 2, + "19": 239, + "2": 2, + "20": 41, + "21": 10, + "22": 2, + "23": 240, + "24": 41, + "25": 11, + "26": 2, + "27": 241, + "28": 41, + "29": 12, + "3": 240, + "30": 2, + "31": 242, + "32": 41, + "33": 174, + "34": 251, + "35": 255, + "36": 41, + "37": 175, + "38": 252, + "4": 60, + "40": 41, + "41": 184, + "42": 252, + "43": 1, + "44": 41, + "45": 185, + "46": 252, + "47": 2, + "48": 3, + "49": 224, + "5": 1, + "51": 8, + "6": 255, + "7": 255, + "8": 52, + "9": 33, + }, + registers: { + "1,at": "0xfffffc00", + "11,t3": "0x1", + "12,t4": "0x1", + "13,t5": "0xfffffc00", + "24,t8": "0x1", + "25,t9": "0x1", + "8,t0": "0x2f0", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_016.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_016.s.snap new file mode 100644 index 000000000..925eca3aa --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_016.s.snap @@ -0,0 +1,70 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_016.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "10": 252, + "13": 32, + "14": 104, + "15": 32, + "16": 45, + "17": 9, + "18": 2, + "19": 239, + "2": 2, + "20": 45, + "21": 10, + "22": 2, + "23": 240, + "24": 45, + "25": 11, + "26": 2, + "27": 241, + "28": 45, + "29": 12, + "3": 240, + "30": 2, + "31": 242, + "32": 45, + "33": 174, + "34": 251, + "35": 255, + "36": 45, + "37": 175, + "38": 252, + "4": 60, + "40": 45, + "41": 184, + "42": 252, + "43": 1, + "44": 45, + "45": 185, + "46": 252, + "47": 2, + "48": 3, + "49": 224, + "5": 1, + "51": 8, + "6": 255, + "7": 255, + "8": 52, + "9": 33, + }, + registers: { + "1,at": "0xfffffc00", + "11,t3": "0x1", + "12,t4": "0x1", + "13,t5": "0xfffffc00", + "24,t8": "0x1", + "25,t9": "0x1", + "8,t0": "0x2f0", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_017.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_017.s.snap new file mode 100644 index 000000000..bde27f869 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_017.s.snap @@ -0,0 +1,62 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_017.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "11": 32, + "12": 32, + "13": 9, + "14": 17, + "15": 215, + "16": 60, + "17": 1, + "18": 255, + "19": 255, + "20": 52, + "21": 33, + "22": 218, + "23": 242, + "25": 32, + "26": 80, + "27": 32, + "28": 57, + "29": 104, + "3": 2, + "30": 4, + "31": 85, + "32": 57, + "33": 137, + "34": 2, + "35": 34, + "36": 57, + "37": 170, + "38": 15, + "39": 255, + "4": 52, + "40": 3, + "41": 224, + "43": 8, + "5": 33, + "6": 35, + "7": 70, + "9": 32, + }, + registers: { + "1,at": "0xffffdaf2", + "10,t2": "0xffffdaf2", + "11,t3": "0x22713", + "12,t4": "0x13f5", + "13,t5": "0xffffd50d", + "8,t0": "0x22346", + "9,t1": "0x11d7", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_018.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_018.s.snap new file mode 100644 index 000000000..de1b4a071 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_018.s.snap @@ -0,0 +1,62 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_018.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "11": 32, + "12": 32, + "13": 9, + "14": 17, + "15": 215, + "16": 60, + "17": 1, + "18": 255, + "19": 255, + "20": 52, + "21": 33, + "22": 218, + "23": 242, + "25": 32, + "26": 80, + "27": 32, + "28": 53, + "29": 104, + "3": 2, + "30": 4, + "31": 85, + "32": 53, + "33": 137, + "34": 2, + "35": 34, + "36": 53, + "37": 170, + "38": 15, + "39": 255, + "4": 52, + "40": 3, + "41": 224, + "43": 8, + "5": 33, + "6": 35, + "7": 70, + "9": 32, + }, + registers: { + "1,at": "0xffffdaf2", + "10,t2": "0xffffdaf2", + "11,t3": "0x22757", + "12,t4": "0x13f7", + "13,t5": "0xffffdfff", + "8,t0": "0x22346", + "9,t1": "0x11d7", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_019.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_019.s.snap new file mode 100644 index 000000000..3a78f89f0 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_019.s.snap @@ -0,0 +1,62 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_019.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "11": 32, + "12": 32, + "13": 9, + "14": 17, + "15": 215, + "16": 60, + "17": 1, + "18": 255, + "19": 255, + "20": 52, + "21": 33, + "22": 218, + "23": 242, + "25": 32, + "26": 80, + "27": 32, + "28": 49, + "29": 11, + "3": 2, + "30": 4, + "31": 85, + "32": 49, + "33": 44, + "34": 2, + "35": 34, + "36": 49, + "37": 77, + "38": 15, + "39": 255, + "4": 52, + "40": 3, + "41": 224, + "43": 8, + "5": 33, + "6": 35, + "7": 70, + "9": 32, + }, + registers: { + "1,at": "0xffffdaf2", + "10,t2": "0xffffdaf2", + "11,t3": "0x44", + "12,t4": "0x2", + "13,t5": "0xaf2", + "8,t0": "0x22346", + "9,t1": "0x11d7", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_020.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_020.s.snap new file mode 100644 index 000000000..2dc28abe2 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_020.s.snap @@ -0,0 +1,55 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_020.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "10": 255, + "11": 255, + "12": 52, + "13": 33, + "14": 224, + "17": 32, + "18": 80, + "19": 32, + "20": 32, + "21": 11, + "23": 24, + "24": 1, + "25": 72, + "27": 26, + "28": 1, + "29": 40, + "3": 16, + "31": 26, + "32": 1, + "33": 75, + "35": 26, + "36": 1, + "37": 106, + "39": 26, + "4": 32, + "40": 3, + "41": 224, + "43": 8, + "5": 9, + "6": 1, + "8": 60, + "9": 1, + }, + registers: { + "1,at": "0xffffe000", + "10,t2": "0xffffe000", + "11,t3": "0x18", + "8,t0": "0x10", + "9,t1": "0x100", + HI: "0x18", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_021.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_021.s.snap new file mode 100644 index 000000000..2190af87d --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_021.s.snap @@ -0,0 +1,55 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_021.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "10": 255, + "11": 255, + "12": 52, + "13": 33, + "14": 224, + "17": 32, + "18": 80, + "19": 32, + "20": 32, + "21": 11, + "23": 24, + "24": 1, + "25": 72, + "27": 27, + "28": 1, + "29": 40, + "3": 16, + "31": 27, + "32": 1, + "33": 75, + "35": 27, + "36": 1, + "37": 106, + "39": 27, + "4": 32, + "40": 3, + "41": 224, + "43": 8, + "5": 9, + "6": 1, + "8": 60, + "9": 1, + }, + registers: { + "1,at": "0xffffe000", + "10,t2": "0xffffe000", + "11,t3": "0x18", + "8,t0": "0x10", + "9,t1": "0x100", + HI: "0x18", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_022.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_022.s.snap new file mode 100644 index 000000000..c8c481e4e --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_022.s.snap @@ -0,0 +1,58 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_022.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "11": 32, + "12": 32, + "13": 9, + "14": 17, + "15": 215, + "16": 60, + "17": 1, + "18": 255, + "19": 255, + "20": 52, + "21": 33, + "22": 218, + "23": 242, + "25": 32, + "26": 80, + "27": 32, + "29": 40, + "30": 88, + "31": 130, + "33": 41, + "34": 97, + "35": 2, + "37": 42, + "38": 107, + "39": 194, + "4": 52, + "40": 3, + "41": 224, + "43": 8, + "5": 33, + "6": 170, + "7": 212, + "9": 32, + }, + registers: { + "1,at": "0xffffdaf2", + "10,t2": "0xffffdaf2", + "11,t3": "0x2ab5", + "12,t4": "0x7000011d", + "13,t5": "0xb5e5ffff", + "8,t0": "0xaad4", + "9,t1": "0x11d7", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_023.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_023.s.snap new file mode 100644 index 000000000..85876f8bf --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_023.s.snap @@ -0,0 +1,58 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_023.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "11": 32, + "12": 32, + "13": 9, + "14": 17, + "15": 215, + "16": 60, + "17": 1, + "18": 255, + "19": 255, + "20": 52, + "21": 33, + "22": 218, + "23": 242, + "25": 32, + "26": 80, + "27": 32, + "29": 8, + "30": 88, + "31": 191, + "33": 9, + "34": 97, + "35": 63, + "37": 10, + "38": 107, + "39": 255, + "4": 52, + "40": 3, + "41": 224, + "43": 8, + "5": 33, + "6": 170, + "7": 212, + "9": 32, + }, + registers: { + "1,at": "0xffffdaf2", + "10,t2": "0xffffdaf2", + "11,t3": "0x2ab50", + "12,t4": "0x11d70", + "13,t5": "0xed790000", + "8,t0": "0xaad4", + "9,t1": "0x11d7", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_024.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_024.s.snap new file mode 100644 index 000000000..ca1acc358 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_024.s.snap @@ -0,0 +1,55 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_024.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "10": 32, + "11": 1, + "12": 32, + "13": 11, + "14": 32, + "15": 2, + "16": 1, + "17": 40, + "18": 96, + "19": 42, + "2": 31, + "20": 1, + "21": 41, + "22": 104, + "23": 42, + "24": 1, + "25": 42, + "26": 112, + "27": 42, + "28": 1, + "29": 43, + "3": 255, + "30": 120, + "31": 42, + "32": 3, + "33": 224, + "35": 8, + "4": 32, + "5": 9, + "6": 32, + "8": 32, + "9": 10, + }, + registers: { + "10,t2": "0x2001", + "11,t3": "0x2002", + "14,t6": "0x1", + "15,t7": "0x1", + "8,t0": "0x1fff", + "9,t1": "0x2000", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_025.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_025.s.snap new file mode 100644 index 000000000..15ffb81c0 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_025.s.snap @@ -0,0 +1,55 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_025.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "10": 32, + "11": 1, + "12": 32, + "13": 11, + "14": 32, + "15": 2, + "16": 1, + "17": 40, + "18": 96, + "19": 43, + "2": 31, + "20": 1, + "21": 41, + "22": 104, + "23": 43, + "24": 1, + "25": 42, + "26": 112, + "27": 43, + "28": 1, + "29": 43, + "3": 255, + "30": 120, + "31": 43, + "32": 3, + "33": 224, + "35": 8, + "4": 32, + "5": 9, + "6": 32, + "8": 32, + "9": 10, + }, + registers: { + "10,t2": "0x2001", + "11,t3": "0x2002", + "14,t6": "0x1", + "15,t7": "0x1", + "8,t0": "0x1fff", + "9,t1": "0x2000", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_026.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_026.s.snap new file mode 100644 index 000000000..1a616168a --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_026.s.snap @@ -0,0 +1,77 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_026.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "11": 32, + "12": 32, + "13": 9, + "14": 17, + "15": 215, + "16": 60, + "17": 1, + "18": 255, + "19": 255, + "20": 52, + "21": 33, + "22": 218, + "23": 242, + "25": 32, + "26": 80, + "27": 32, + "28": 32, + "29": 11, + "3": 2, + "30": 4, + "31": 85, + "32": 32, + "33": 12, + "34": 2, + "35": 34, + "36": 32, + "37": 13, + "38": 15, + "39": 255, + "4": 52, + "40": 1, + "41": 200, + "42": 88, + "43": 38, + "44": 1, + "45": 233, + "46": 96, + "47": 38, + "48": 3, + "49": 10, + "5": 33, + "50": 104, + "51": 38, + "52": 3, + "53": 224, + "55": 8, + "6": 35, + "7": 70, + "9": 32, + }, + registers: { + "1,at": "0xffffdaf2", + "10,t2": "0xffffdaf2", + "11,t3": "0x455", + "12,t4": "0x222", + "13,t5": "0xfff", + "14,t6": "0x22713", + "15,t7": "0x13f5", + "24,t8": "0xffffd50d", + "8,t0": "0x22346", + "9,t1": "0x11d7", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_027.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_027.s.snap new file mode 100644 index 000000000..82f6dfb1e --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_027.s.snap @@ -0,0 +1,58 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_027.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "11": 32, + "12": 32, + "13": 9, + "14": 17, + "15": 215, + "16": 60, + "17": 1, + "18": 255, + "19": 255, + "20": 52, + "21": 33, + "22": 218, + "23": 242, + "25": 32, + "26": 80, + "27": 32, + "29": 8, + "30": 88, + "31": 130, + "33": 9, + "34": 97, + "35": 2, + "37": 10, + "38": 107, + "39": 194, + "4": 52, + "40": 3, + "41": 224, + "43": 8, + "5": 33, + "6": 170, + "7": 212, + "9": 32, + }, + registers: { + "1,at": "0xffffdaf2", + "10,t2": "0xffffdaf2", + "11,t3": "0x2ab5", + "12,t4": "0x11d", + "13,t5": "0x1ffff", + "8,t0": "0xaad4", + "9,t1": "0x11d7", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_028.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_028.s.snap new file mode 100644 index 000000000..5089860e6 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_028.s.snap @@ -0,0 +1,58 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_028.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "11": 32, + "12": 32, + "13": 9, + "14": 17, + "15": 215, + "16": 60, + "17": 1, + "18": 255, + "19": 255, + "20": 52, + "21": 33, + "22": 218, + "23": 242, + "25": 32, + "26": 80, + "27": 32, + "29": 8, + "30": 88, + "31": 131, + "33": 9, + "34": 97, + "35": 3, + "37": 10, + "38": 107, + "39": 195, + "4": 52, + "40": 3, + "41": 224, + "43": 8, + "5": 33, + "6": 170, + "7": 212, + "9": 32, + }, + registers: { + "1,at": "0xffffdaf2", + "10,t2": "0xffffdaf2", + "11,t3": "0x2ab5", + "12,t4": "0x11d", + "13,t5": "0xffffffff", + "8,t0": "0xaad4", + "9,t1": "0x11d7", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_029.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_029.s.snap new file mode 100644 index 000000000..cc0bc1ae8 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_029.s.snap @@ -0,0 +1,77 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_029.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "11": 32, + "12": 32, + "13": 9, + "14": 17, + "15": 215, + "16": 60, + "17": 1, + "18": 255, + "19": 255, + "20": 52, + "21": 33, + "22": 218, + "23": 242, + "25": 32, + "26": 80, + "27": 32, + "28": 32, + "29": 11, + "3": 2, + "30": 4, + "31": 85, + "32": 32, + "33": 12, + "34": 2, + "35": 34, + "36": 32, + "37": 13, + "38": 15, + "39": 255, + "4": 52, + "40": 1, + "41": 200, + "42": 88, + "43": 37, + "44": 1, + "45": 233, + "46": 96, + "47": 37, + "48": 3, + "49": 10, + "5": 33, + "50": 104, + "51": 37, + "52": 3, + "53": 224, + "55": 8, + "6": 35, + "7": 70, + "9": 32, + }, + registers: { + "1,at": "0xffffdaf2", + "10,t2": "0xffffdaf2", + "11,t3": "0x455", + "12,t4": "0x222", + "13,t5": "0xfff", + "14,t6": "0x22757", + "15,t7": "0x13f7", + "24,t8": "0xffffdfff", + "8,t0": "0x22346", + "9,t1": "0x11d7", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_030.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_030.s.snap new file mode 100644 index 000000000..154fbfc68 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_030.s.snap @@ -0,0 +1,77 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_030.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "11": 32, + "12": 32, + "13": 9, + "14": 17, + "15": 215, + "16": 60, + "17": 1, + "18": 255, + "19": 255, + "20": 52, + "21": 33, + "22": 218, + "23": 242, + "25": 32, + "26": 80, + "27": 32, + "28": 32, + "29": 11, + "3": 2, + "30": 4, + "31": 85, + "32": 32, + "33": 12, + "34": 2, + "35": 34, + "36": 32, + "37": 13, + "38": 15, + "39": 255, + "4": 52, + "40": 1, + "41": 104, + "42": 112, + "43": 36, + "44": 1, + "45": 137, + "46": 120, + "47": 36, + "48": 1, + "49": 170, + "5": 33, + "50": 192, + "51": 36, + "52": 3, + "53": 224, + "55": 8, + "6": 35, + "7": 70, + "9": 32, + }, + registers: { + "1,at": "0xffffdaf2", + "10,t2": "0xffffdaf2", + "11,t3": "0x455", + "12,t4": "0x222", + "13,t5": "0xfff", + "14,t6": "0x44", + "15,t7": "0x2", + "24,t8": "0xaf2", + "8,t0": "0x22346", + "9,t1": "0x11d7", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_031.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_031.s.snap new file mode 100644 index 000000000..a4b82bd9d --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_031.s.snap @@ -0,0 +1,122 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_031.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "11": 32, + "12": 60, + "13": 1, + "15": 32, + "16": 52, + "17": 33, + "19": 8, + "2097152": 64, + "2097153": 65, + "2097154": 69, + "2097155": 161, + "2097156": 202, + "2097157": 192, + "2097158": 131, + "2097159": 18, + "2097160": 64, + "2097161": 38, + "2097162": 226, + "2097163": 208, + "2097164": 229, + "2097165": 96, + "2097166": 65, + "2097167": 137, + "2097172": 7, + "2097173": 84, + "2097174": 79, + "2097175": 251, + "2097176": 64, + "2097177": 65, + "2097178": 69, + "2097179": 161, + "2097180": 202, + "2097181": 192, + "2097182": 131, + "2097183": 18, + "2097184": 64, + "2097185": 38, + "2097186": 226, + "2097187": 208, + "2097188": 229, + "2097189": 96, + "2097190": 65, + "2097191": 137, + "2097196": 7, + "2097197": 84, + "2097198": 79, + "2097199": 251, + "21": 32, + "22": 72, + "23": 32, + "24": 60, + "25": 1, + "27": 32, + "28": 52, + "29": 33, + "3": 32, + "31": 16, + "33": 32, + "34": 80, + "35": 32, + "36": 60, + "37": 1, + "39": 32, + "4": 52, + "40": 52, + "41": 33, + "43": 24, + "45": 32, + "46": 88, + "47": 32, + "48": 213, + "5": 33, + "52": 213, + "53": 34, + "56": 213, + "57": 68, + "60": 245, + "61": 96, + "64": 33, + "65": 107, + "67": 8, + "68": 245, + "69": 98, + "72": 33, + "73": 107, + "75": 8, + "76": 245, + "77": 100, + "80": 32, + "81": 2, + "83": 10, + "87": 12, + "9": 32, + }, + registers: { + "1,at": "0x200018", + "10,t2": "0x200010", + "11,t3": "0x200028", + "2,v0": "0xa", + "8,t0": "0x200000", + "9,t1": "0x200008", + "f0,FP0": "0x404145a1", + "f2,FP2": "0x4026e2d0", + PC: "0x58", + f1: "0xcac08312", + f3: "0xe5604189", + f5: "0x7544ffb", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_032.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_032.s.snap new file mode 100644 index 000000000..1a48cccd9 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_032.s.snap @@ -0,0 +1,71 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_032.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "11": 45, + "12": 60, + "13": 1, + "14": 255, + "15": 255, + "16": 52, + "17": 33, + "18": 255, + "19": 254, + "21": 32, + "22": 88, + "23": 32, + "24": 1, + "25": 40, + "27": 24, + "3": 10, + "30": 128, + "31": 16, + "34": 136, + "35": 18, + "36": 1, + "37": 73, + "39": 24, + "4": 32, + "42": 144, + "43": 16, + "46": 152, + "47": 18, + "48": 1, + "49": 106, + "5": 9, + "51": 24, + "54": 160, + "55": 16, + "58": 168, + "59": 18, + "60": 1, + "61": 139, + "63": 24, + "64": 3, + "65": 224, + "67": 8, + "7": 13, + "8": 32, + "9": 10, + }, + registers: { + "1,at": "0xfffffffe", + "10,t2": "0x2d", + "11,t3": "0xfffffffe", + "17,s1": "0x82", + "19,s3": "0x249", + "20,s4": "0xffffffff", + "21,s5": "0xffffffa6", + "8,t0": "0xa", + "9,t1": "0xd", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_034.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_034.s.snap new file mode 100644 index 000000000..c6580c8f9 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_034.s.snap @@ -0,0 +1,63 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_034.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "11": 45, + "12": 60, + "13": 1, + "14": 255, + "15": 255, + "16": 52, + "17": 33, + "18": 255, + "19": 254, + "21": 32, + "22": 88, + "23": 32, + "24": 113, + "25": 136, + "26": 72, + "27": 2, + "28": 113, + "29": 169, + "3": 10, + "30": 80, + "31": 2, + "32": 113, + "33": 202, + "34": 88, + "35": 2, + "36": 113, + "37": 235, + "38": 96, + "39": 2, + "4": 32, + "40": 3, + "41": 224, + "43": 8, + "5": 9, + "7": 13, + "8": 32, + "9": 10, + }, + registers: { + "1,at": "0xfffffffe", + "10,t2": "0x2d", + "11,t3": "0xfffffffe", + "12,t4": "0x82", + "13,t5": "0x249", + "14,t6": "0xffffffa6", + "15,t7": "0xfffffefc", + "8,t0": "0xa", + "9,t1": "0xd", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_035.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_035.s.snap new file mode 100644 index 000000000..5c3617f1d --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_035.s.snap @@ -0,0 +1,78 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_035.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "11": 32, + "12": 32, + "13": 9, + "15": 222, + "16": 60, + "17": 1, + "19": 250, + "2": 1, + "20": 52, + "21": 33, + "22": 187, + "23": 83, + "25": 32, + "26": 80, + "27": 32, + "28": 60, + "29": 1, + "3": 101, + "30": 254, + "31": 154, + "32": 52, + "33": 33, + "34": 17, + "35": 61, + "37": 32, + "38": 88, + "39": 32, + "4": 52, + "40": 1, + "41": 40, + "42": 96, + "43": 33, + "44": 1, + "45": 73, + "46": 104, + "47": 33, + "48": 1, + "49": 106, + "5": 33, + "50": 112, + "51": 33, + "52": 1, + "53": 11, + "54": 120, + "55": 33, + "56": 3, + "57": 224, + "59": 8, + "6": 238, + "7": 184, + "9": 32, + }, + registers: { + "1,at": "0xfe9a113d", + "10,t2": "0xfabb53", + "11,t3": "0xfe9a113d", + "12,t4": "0x165ef96", + "13,t5": "0xfabc31", + "14,t6": "0xff94cc90", + "15,t7": "0xfffffff5", + "8,t0": "0x165eeb8", + "9,t1": "0xde", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_036.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_036.s.snap new file mode 100644 index 000000000..e84c30f5b --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_036.s.snap @@ -0,0 +1,71 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_036.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "10": 1, + "11": 35, + "12": 60, + "13": 1, + "14": 255, + "15": 255, + "16": 52, + "17": 33, + "18": 169, + "19": 18, + "2": 37, + "21": 32, + "22": 88, + "23": 32, + "24": 37, + "25": 12, + "26": 179, + "27": 56, + "28": 37, + "29": 45, + "3": 184, + "30": 21, + "31": 235, + "32": 37, + "33": 78, + "34": 1, + "35": 36, + "36": 60, + "37": 1, + "39": 3, + "4": 32, + "40": 52, + "41": 33, + "42": 113, + "43": 131, + "45": 43, + "46": 120, + "47": 33, + "48": 3, + "49": 224, + "5": 9, + "51": 8, + "7": 222, + "8": 32, + "9": 10, + }, + registers: { + "1,at": "0x37183", + "10,t2": "0x123", + "11,t3": "0xffffa912", + "12,t4": "0xffffd8f0", + "13,t5": "0x16c9", + "14,t6": "0x247", + "15,t7": "0x31a95", + "8,t0": "0x25b8", + "9,t1": "0xde", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_037.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_037.s.snap new file mode 100644 index 000000000..18128e117 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_037.s.snap @@ -0,0 +1,71 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_037.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "11": 45, + "12": 60, + "13": 1, + "14": 255, + "15": 255, + "16": 52, + "17": 33, + "18": 255, + "19": 254, + "21": 32, + "22": 88, + "23": 32, + "24": 1, + "25": 40, + "27": 25, + "3": 10, + "30": 128, + "31": 16, + "34": 136, + "35": 18, + "36": 1, + "37": 73, + "39": 25, + "4": 32, + "42": 144, + "43": 16, + "46": 152, + "47": 18, + "48": 1, + "49": 106, + "5": 9, + "51": 25, + "54": 160, + "55": 16, + "58": 168, + "59": 18, + "60": 1, + "61": 139, + "63": 25, + "64": 3, + "65": 224, + "67": 8, + "7": 13, + "8": 32, + "9": 10, + }, + registers: { + "1,at": "0xfffffffe", + "10,t2": "0x2d", + "11,t3": "0xfffffffe", + "17,s1": "0x82", + "19,s3": "0x249", + "20,s4": "0x2c", + "21,s5": "0xffffffa6", + "8,t0": "0xa", + "9,t1": "0xd", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_038.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_038.s.snap new file mode 100644 index 000000000..a8a07d867 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_038.s.snap @@ -0,0 +1,61 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_038.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "10": 255, + "11": 255, + "12": 52, + "13": 33, + "14": 224, + "17": 32, + "18": 80, + "19": 32, + "20": 32, + "21": 11, + "23": 24, + "24": 1, + "25": 72, + "26": 96, + "27": 154, + "28": 1, + "29": 40, + "3": 16, + "30": 104, + "31": 154, + "32": 1, + "33": 75, + "34": 112, + "35": 154, + "36": 1, + "37": 106, + "38": 120, + "39": 154, + "4": 32, + "40": 3, + "41": 224, + "43": 8, + "5": 9, + "6": 1, + "8": 60, + "9": 1, + }, + registers: { + "1,at": "0xffffe000", + "10,t2": "0xffffe000", + "11,t3": "0x18", + "12,t4": "0xfffffe00", + "13,t5": "0x10", + "14,t6": "0xfffffeab", + "8,t0": "0x10", + "9,t1": "0x100", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_039.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_039.s.snap new file mode 100644 index 000000000..07bdc3394 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_039.s.snap @@ -0,0 +1,61 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_039.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "10": 255, + "11": 255, + "12": 52, + "13": 33, + "14": 224, + "17": 32, + "18": 80, + "19": 32, + "20": 32, + "21": 11, + "23": 24, + "24": 1, + "25": 72, + "26": 96, + "27": 155, + "28": 1, + "29": 40, + "3": 16, + "30": 104, + "31": 155, + "32": 1, + "33": 75, + "34": 112, + "35": 155, + "36": 1, + "37": 106, + "38": 120, + "39": 155, + "4": 32, + "40": 3, + "41": 224, + "43": 8, + "5": 9, + "6": 1, + "8": 60, + "9": 1, + }, + registers: { + "1,at": "0xffffe000", + "10,t2": "0xffffe000", + "11,t3": "0x18", + "12,t4": "0xffffe00", + "13,t5": "0x10", + "14,t6": "0xaaaa955", + "8,t0": "0x10", + "9,t1": "0x100", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_040.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_040.s.snap new file mode 100644 index 000000000..037fbaad8 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_040.s.snap @@ -0,0 +1,65 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_040.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "10": 255, + "11": 255, + "12": 52, + "13": 33, + "14": 224, + "17": 32, + "18": 80, + "19": 32, + "20": 32, + "21": 11, + "23": 24, + "24": 1, + "25": 72, + "27": 26, + "3": 16, + "30": 96, + "31": 16, + "32": 1, + "33": 40, + "35": 26, + "38": 104, + "39": 16, + "4": 32, + "40": 1, + "41": 75, + "43": 26, + "46": 112, + "47": 16, + "48": 1, + "49": 106, + "5": 9, + "51": 26, + "54": 120, + "55": 16, + "56": 3, + "57": 224, + "59": 8, + "6": 1, + "8": 60, + "9": 1, + }, + registers: { + "1,at": "0xffffe000", + "10,t2": "0xffffe000", + "11,t3": "0x18", + "14,t6": "0xfffffff8", + "15,t7": "0x18", + "8,t0": "0x10", + "9,t1": "0x100", + HI: "0x18", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_041.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_041.s.snap new file mode 100644 index 000000000..5003b1dd2 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_041.s.snap @@ -0,0 +1,60 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_041.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "10": 255, + "11": 255, + "12": 52, + "13": 33, + "14": 224, + "17": 32, + "18": 80, + "19": 32, + "20": 32, + "21": 11, + "23": 24, + "24": 1, + "25": 72, + "26": 96, + "27": 219, + "28": 1, + "29": 40, + "3": 16, + "30": 104, + "31": 219, + "32": 1, + "33": 75, + "34": 112, + "35": 219, + "36": 1, + "37": 106, + "38": 120, + "39": 219, + "4": 32, + "40": 3, + "41": 224, + "43": 8, + "5": 9, + "6": 1, + "8": 60, + "9": 1, + }, + registers: { + "1,at": "0xffffe000", + "10,t2": "0xffffe000", + "11,t3": "0x18", + "14,t6": "0x8", + "15,t7": "0x18", + "8,t0": "0x10", + "9,t1": "0x100", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_042.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_042.s.snap new file mode 100644 index 000000000..543a522b7 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_042.s.snap @@ -0,0 +1,75 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_042.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "11": 5, + "12": 32, + "13": 11, + "14": 2, + "15": 31, + "16": 1, + "17": 9, + "18": 8, + "19": 42, + "2": 3, + "20": 20, + "21": 1, + "23": 24, + "24": 1, + "25": 104, + "26": 8, + "27": 42, + "28": 20, + "29": 1, + "3": 114, + "31": 16, + "32": 32, + "33": 14, + "35": 34, + "36": 32, + "37": 2, + "39": 10, + "4": 32, + "43": 12, + "44": 32, + "45": 12, + "47": 11, + "48": 32, + "49": 13, + "5": 9, + "50": 2, + "51": 43, + "52": 1, + "53": 141, + "54": 8, + "55": 42, + "56": 20, + "57": 1, + "58": 255, + "59": 232, + "6": 3, + "7": 113, + "8": 32, + "9": 10, + }, + registers: { + "1,at": "0x1", + "10,t2": "0x5", + "11,t3": "0x21f", + "12,t4": "0xb", + "13,t5": "0x22b", + "14,t6": "0x22", + "2,v0": "0xa", + "8,t0": "0x372", + "9,t1": "0x371", + PC: "0x2c", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_043.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_043.s.snap new file mode 100644 index 000000000..f20aee26f --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_043.s.snap @@ -0,0 +1,89 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_043.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "11": 32, + "12": 60, + "13": 1, + "14": 255, + "15": 255, + "16": 52, + "17": 33, + "18": 252, + "19": 143, + "2": 255, + "21": 32, + "22": 72, + "23": 32, + "24": 32, + "25": 10, + "27": 5, + "28": 32, + "29": 11, + "3": 255, + "30": 2, + "31": 31, + "32": 1, + "33": 40, + "34": 8, + "35": 43, + "36": 20, + "37": 1, + "39": 24, + "4": 52, + "40": 1, + "41": 75, + "42": 8, + "43": 43, + "44": 20, + "45": 1, + "47": 16, + "48": 32, + "49": 14, + "5": 33, + "51": 34, + "52": 32, + "53": 2, + "55": 10, + "59": 12, + "6": 252, + "60": 32, + "61": 12, + "63": 11, + "64": 32, + "65": 13, + "66": 2, + "67": 43, + "68": 1, + "69": 141, + "7": 142, + "70": 8, + "71": 43, + "72": 20, + "73": 1, + "74": 255, + "75": 232, + "9": 32, + }, + registers: { + "1,at": "0x1", + "10,t2": "0x5", + "11,t3": "0x21f", + "12,t4": "0xb", + "13,t5": "0x22b", + "14,t6": "0x22", + "2,v0": "0xa", + "8,t0": "0xfffffc8e", + "9,t1": "0xfffffc8f", + PC: "0x3c", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_044.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_044.s.snap new file mode 100644 index 000000000..ac7db661b --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_044.s.snap @@ -0,0 +1,74 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_044.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "11": 5, + "12": 32, + "13": 11, + "14": 2, + "15": 31, + "16": 1, + "17": 40, + "18": 8, + "19": 42, + "2": 3, + "20": 16, + "21": 1, + "23": 24, + "24": 1, + "25": 106, + "26": 8, + "27": 42, + "28": 16, + "29": 1, + "3": 114, + "31": 16, + "32": 32, + "33": 14, + "35": 34, + "36": 32, + "37": 2, + "39": 10, + "4": 32, + "43": 12, + "44": 32, + "45": 12, + "47": 11, + "48": 32, + "49": 13, + "5": 9, + "50": 2, + "51": 43, + "52": 1, + "53": 172, + "54": 8, + "55": 42, + "56": 16, + "57": 1, + "58": 255, + "59": 232, + "6": 3, + "7": 113, + "8": 32, + "9": 10, + }, + registers: { + "10,t2": "0x5", + "11,t3": "0x21f", + "12,t4": "0xb", + "13,t5": "0x22b", + "14,t6": "0x22", + "2,v0": "0xa", + "8,t0": "0x372", + "9,t1": "0x371", + PC: "0x2c", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_045.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_045.s.snap new file mode 100644 index 000000000..d9a0adfac --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_045.s.snap @@ -0,0 +1,102 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_045.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "11": 32, + "12": 60, + "13": 1, + "14": 255, + "15": 255, + "16": 52, + "17": 33, + "18": 252, + "19": 143, + "2": 255, + "21": 32, + "22": 72, + "23": 32, + "24": 32, + "25": 10, + "27": 5, + "28": 60, + "29": 1, + "3": 255, + "30": 255, + "31": 255, + "32": 52, + "33": 33, + "34": 253, + "35": 225, + "37": 32, + "38": 88, + "39": 32, + "4": 52, + "40": 1, + "41": 9, + "42": 8, + "43": 43, + "44": 16, + "45": 1, + "47": 24, + "48": 1, + "49": 105, + "5": 33, + "50": 8, + "51": 43, + "52": 16, + "53": 1, + "55": 16, + "56": 32, + "57": 14, + "59": 34, + "6": 252, + "60": 32, + "61": 2, + "63": 10, + "67": 12, + "68": 32, + "69": 12, + "7": 142, + "71": 11, + "72": 60, + "73": 1, + "74": 255, + "75": 255, + "76": 52, + "77": 33, + "78": 253, + "79": 213, + "81": 32, + "82": 104, + "83": 32, + "84": 1, + "85": 141, + "86": 8, + "87": 43, + "88": 16, + "89": 1, + "9": 32, + "90": 255, + "91": 224, + }, + registers: { + "10,t2": "0x5", + "11,t3": "0xfffffde1", + "12,t4": "0xb", + "13,t5": "0xfffffdd5", + "14,t6": "0x22", + "2,v0": "0xa", + "8,t0": "0xfffffc8e", + "9,t1": "0xfffffc8f", + PC: "0x44", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_046.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_046.s.snap new file mode 100644 index 000000000..fae6e06ed --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_046.s.snap @@ -0,0 +1,62 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_046.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "11": 32, + "12": 32, + "13": 9, + "14": 17, + "15": 215, + "16": 60, + "17": 1, + "18": 255, + "19": 255, + "20": 52, + "21": 33, + "22": 218, + "23": 242, + "25": 32, + "26": 80, + "27": 32, + "28": 1, + "29": 9, + "3": 2, + "30": 88, + "31": 47, + "32": 1, + "33": 42, + "34": 96, + "35": 47, + "36": 1, + "37": 72, + "38": 104, + "39": 47, + "4": 52, + "40": 3, + "41": 224, + "43": 8, + "5": 33, + "6": 35, + "7": 70, + "9": 32, + }, + registers: { + "1,at": "0xffffdaf2", + "10,t2": "0xffffdaf2", + "11,t3": "0xfffdcc28", + "12,t4": "0x2408", + "13,t5": "0x409", + "8,t0": "0x22346", + "9,t1": "0x11d7", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_047.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_047.s.snap new file mode 100644 index 000000000..e1c21c7ff --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_047.s.snap @@ -0,0 +1,47 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_047.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "11": 32, + "12": 32, + "13": 9, + "14": 17, + "15": 215, + "20": 60, + "21": 1, + "22": 255, + "23": 255, + "24": 52, + "25": 33, + "26": 218, + "27": 242, + "29": 32, + "3": 2, + "30": 80, + "31": 32, + "32": 3, + "33": 224, + "35": 8, + "4": 52, + "5": 33, + "6": 35, + "7": 70, + "9": 32, + }, + registers: { + "1,at": "0xffffdaf2", + "10,t2": "0xffffdaf2", + "8,t0": "0x22346", + "9,t1": "0x11d7", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_048.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_048.s.snap new file mode 100644 index 000000000..824d6a417 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_048.s.snap @@ -0,0 +1,60 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_048.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "10": 66, + "11": 53, + "13": 32, + "14": 72, + "15": 32, + "16": 60, + "17": 1, + "18": 255, + "19": 255, + "20": 52, + "21": 33, + "22": 255, + "23": 255, + "25": 32, + "26": 80, + "27": 32, + "28": 1, + "3": 1, + "30": 88, + "31": 32, + "32": 1, + "33": 32, + "34": 96, + "35": 32, + "36": 1, + "37": 64, + "38": 104, + "39": 32, + "4": 60, + "40": 3, + "41": 224, + "43": 8, + "5": 1, + "7": 35, + "8": 52, + "9": 33, + }, + registers: { + "1,at": "0xffffffff", + "10,t2": "0xffffffff", + "11,t3": "0x1", + "12,t4": "0x234235", + "13,t5": "0xffffffff", + "8,t0": "0x1", + "9,t1": "0x234235", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_049.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_049.s.snap new file mode 100644 index 000000000..ba3d394c1 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_049.s.snap @@ -0,0 +1,55 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_049.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "11": 32, + "12": 60, + "13": 1, + "14": 255, + "15": 248, + "16": 52, + "17": 33, + "18": 224, + "19": 202, + "21": 32, + "22": 72, + "23": 32, + "24": 1, + "27": 17, + "28": 1, + "29": 32, + "3": 35, + "31": 19, + "34": 88, + "35": 16, + "38": 96, + "39": 18, + "4": 52, + "40": 3, + "41": 224, + "43": 8, + "5": 33, + "6": 69, + "7": 102, + "9": 32, + }, + registers: { + "1,at": "0xfff8e0ca", + "11,t3": "0x234566", + "12,t4": "0xfff8e0ca", + "8,t0": "0x234566", + "9,t1": "0xfff8e0ca", + HI: "0x234566", + LO: "0xfff8e0ca", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_050.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_050.s.snap new file mode 100644 index 000000000..cefbdbc6a --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_050.s.snap @@ -0,0 +1,66 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_050.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "10": 252, + "11": 87, + "13": 32, + "14": 72, + "15": 32, + "16": 32, + "17": 10, + "19": 12, + "2": 2, + "20": 60, + "21": 1, + "23": 18, + "24": 52, + "25": 33, + "26": 53, + "27": 21, + "29": 32, + "3": 35, + "30": 88, + "31": 32, + "32": 1, + "33": 9, + "34": 96, + "35": 35, + "36": 1, + "37": 76, + "38": 104, + "39": 35, + "4": 60, + "40": 1, + "41": 109, + "42": 112, + "43": 35, + "44": 3, + "45": 224, + "47": 8, + "5": 1, + "6": 255, + "7": 255, + "8": 52, + "9": 33, + }, + registers: { + "1,at": "0x123515", + "10,t2": "0xc", + "11,t3": "0x123515", + "12,t4": "0x5cc", + "13,t5": "0xfffffa40", + "14,t6": "0x123ad5", + "8,t0": "0x223", + "9,t1": "0xfffffc57", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_051.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_051.s.snap new file mode 100644 index 000000000..1087c338e --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_051.s.snap @@ -0,0 +1,52 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_051.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "10": 255, + "11": 255, + "12": 52, + "13": 33, + "14": 255, + "15": 255, + "17": 32, + "18": 80, + "19": 32, + "20": 16, + "21": 9, + "23": 16, + "24": 32, + "25": 14, + "27": 34, + "28": 32, + "29": 2, + "3": 1, + "31": 10, + "35": 12, + "36": 32, + "37": 12, + "4": 32, + "40": 16, + "41": 12, + "42": 255, + "43": 240, + "5": 9, + "8": 60, + "9": 1, + }, + registers: { + "1,at": "0xffffffff", + "10,t2": "0xffffffff", + "14,t6": "0x22", + "2,v0": "0xa", + "8,t0": "0x1", + PC: "0x24", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_052.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_052.s.snap new file mode 100644 index 000000000..3e48bb1cb --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_052.s.snap @@ -0,0 +1,44 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_052.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "11": 20, + "12": 5, + "13": 1, + "15": 16, + "16": 32, + "17": 14, + "19": 34, + "20": 32, + "21": 2, + "23": 10, + "27": 12, + "28": 32, + "29": 12, + "3": 1, + "31": 2, + "32": 5, + "33": 129, + "34": 255, + "35": 240, + "4": 32, + "5": 9, + "8": 5, + "9": 33, + }, + registers: { + "12,t4": "0x2", + "14,t6": "0x22", + "2,v0": "0xa", + "8,t0": "0x1", + PC: "0x1c", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_053.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_053.s.snap new file mode 100644 index 000000000..62966623a --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_053.s.snap @@ -0,0 +1,45 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_053.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "11": 20, + "12": 5, + "13": 17, + "15": 16, + "16": 32, + "17": 14, + "19": 34, + "20": 32, + "21": 2, + "23": 10, + "27": 12, + "28": 32, + "29": 12, + "3": 1, + "31": 2, + "32": 5, + "33": 145, + "34": 255, + "35": 240, + "4": 32, + "5": 9, + "8": 5, + "9": 49, + }, + registers: { + "12,t4": "0x2", + "14,t6": "0x22", + "2,v0": "0xa", + "31,ra": "0x24", + "8,t0": "0x1", + PC: "0x1c", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_054.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_054.s.snap new file mode 100644 index 000000000..4f5d8f033 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_054.s.snap @@ -0,0 +1,43 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_054.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "11": 20, + "12": 29, + "15": 16, + "16": 32, + "17": 14, + "19": 34, + "20": 32, + "21": 2, + "23": 10, + "27": 12, + "28": 32, + "29": 12, + "3": 1, + "31": 2, + "32": 29, + "33": 128, + "34": 255, + "35": 240, + "4": 32, + "5": 9, + "8": 29, + "9": 32, + }, + registers: { + "12,t4": "0x2", + "14,t6": "0x22", + "2,v0": "0xa", + "8,t0": "0x1", + PC: "0x1c", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_055.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_055.s.snap new file mode 100644 index 000000000..4d9144f27 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_055.s.snap @@ -0,0 +1,52 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_055.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "10": 255, + "11": 255, + "13": 32, + "14": 72, + "15": 32, + "16": 25, + "19": 20, + "20": 25, + "21": 32, + "23": 16, + "24": 32, + "25": 14, + "27": 34, + "28": 32, + "29": 2, + "3": 1, + "31": 10, + "35": 12, + "36": 32, + "37": 12, + "4": 60, + "40": 25, + "41": 128, + "42": 255, + "43": 240, + "5": 1, + "6": 255, + "7": 255, + "8": 52, + "9": 33, + }, + registers: { + "1,at": "0xffffffff", + "14,t6": "0x22", + "2,v0": "0xa", + "8,t0": "0x1", + "9,t1": "0xffffffff", + PC: "0x24", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_056.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_056.s.snap new file mode 100644 index 000000000..2c0eec16a --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_056.s.snap @@ -0,0 +1,71 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_056.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "10": 2, + "11": 31, + "12": 1, + "13": 9, + "14": 8, + "15": 42, + "16": 20, + "17": 1, + "19": 24, + "2": 3, + "20": 1, + "21": 73, + "22": 8, + "23": 42, + "24": 20, + "25": 1, + "27": 16, + "28": 32, + "29": 14, + "3": 114, + "31": 34, + "32": 32, + "33": 2, + "35": 10, + "39": 12, + "4": 32, + "40": 32, + "41": 12, + "43": 11, + "44": 32, + "45": 13, + "46": 2, + "47": 43, + "48": 1, + "49": 141, + "5": 9, + "50": 8, + "51": 42, + "52": 20, + "53": 1, + "54": 255, + "55": 232, + "6": 3, + "7": 113, + "8": 32, + "9": 10, + }, + registers: { + "1,at": "0x1", + "10,t2": "0x21f", + "12,t4": "0xb", + "13,t5": "0x22b", + "14,t6": "0x22", + "2,v0": "0xa", + "8,t0": "0x372", + "9,t1": "0x371", + PC: "0x28", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_057.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_057.s.snap new file mode 100644 index 000000000..4784adc3c --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_057.s.snap @@ -0,0 +1,65 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_057.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "10": 255, + "11": 255, + "12": 52, + "13": 33, + "14": 255, + "15": 255, + "17": 32, + "18": 80, + "19": 32, + "20": 20, + "21": 8, + "23": 16, + "24": 32, + "25": 14, + "27": 34, + "28": 32, + "29": 2, + "3": 1, + "31": 10, + "35": 12, + "36": 60, + "37": 1, + "39": 3, + "4": 32, + "40": 52, + "41": 33, + "42": 151, + "43": 99, + "45": 32, + "46": 96, + "47": 32, + "48": 32, + "49": 13, + "5": 9, + "51": 170, + "52": 20, + "53": 12, + "54": 255, + "55": 228, + "8": 60, + "9": 1, + }, + registers: { + "1,at": "0x39763", + "10,t2": "0xffffffff", + "12,t4": "0x39763", + "13,t5": "0xaa", + "14,t6": "0x22", + "2,v0": "0xa", + "8,t0": "0x1", + PC: "0x24", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_058.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_058.s.snap new file mode 100644 index 000000000..94a60725e --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_058.s.snap @@ -0,0 +1,140 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_058.s 1`] = ` +{ + display: "", + error: false, + instruction_errors: [ + { + error: "Square root of a negative number is not allowed.", + i: 28, + }, + { + error: "Square root of a negative number is not allowed.", + i: 31, + }, + ], + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 8, + "100": 52, + "101": 33, + "104": 68, + "105": 129, + "106": 64, + "108": 68, + "109": 32, + "110": 2, + "111": 132, + "112": 68, + "113": 32, + "114": 19, + "115": 4, + "116": 68, + "117": 32, + "118": 35, + "119": 132, + "12": 60, + "120": 68, + "122": 52, + "123": 4, + "124": 68, + "126": 60, + "127": 68, + "128": 68, + "13": 1, + "130": 68, + "131": 132, + "132": 32, + "133": 2, + "135": 10, + "139": 12, + "14": 64, + "15": 112, + "16": 52, + "17": 33, + "20": 68, + "21": 129, + "24": 60, + "25": 1, + "28": 52, + "29": 33, + "32": 68, + "33": 129, + "34": 24, + "36": 60, + "37": 1, + "38": 192, + "39": 171, + "4": 52, + "40": 52, + "41": 33, + "42": 50, + "44": 68, + "45": 129, + "46": 16, + "48": 60, + "49": 1, + "5": 33, + "52": 52, + "53": 33, + "56": 68, + "57": 129, + "58": 40, + "60": 60, + "61": 1, + "62": 64, + "63": 181, + "64": 52, + "65": 33, + "66": 100, + "68": 68, + "69": 129, + "70": 32, + "72": 60, + "73": 1, + "74": 70, + "75": 25, + "76": 52, + "77": 33, + "78": 36, + "8": 68, + "80": 68, + "81": 129, + "82": 48, + "84": 60, + "85": 1, + "86": 198, + "87": 1, + "88": 52, + "89": 33, + "9": 129, + "90": 100, + "92": 68, + "93": 129, + "94": 56, + "96": 60, + "97": 1, + "98": 70, + "99": 16, + }, + registers: { + "1,at": "0x46100000", + "2,v0": "0xa", + "f0,FP0": "0x40700000", + "f10,FP10": "0x40300000", + "f14,FP14": "0x40528000", + "f16,FP16": "0x42c60000", + "f18,FP18": "0x42c00000", + "f2,FP2": "0xc0ab3200", + "f4,FP4": "0x40b56400", + "f6,FP6": "0x46192400", + "f8,FP8": "0x46100000", + PC: "0x8c", + f7: "0xc6016400", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_059.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_059.s.snap new file mode 100644 index 000000000..4e98bab36 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_059.s.snap @@ -0,0 +1,133 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_059.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 8, + "100": 52, + "101": 33, + "104": 68, + "105": 129, + "106": 64, + "108": 68, + "109": 32, + "110": 2, + "111": 128, + "112": 68, + "113": 34, + "114": 19, + "116": 68, + "117": 36, + "118": 35, + "119": 128, + "12": 60, + "120": 68, + "121": 6, + "122": 52, + "124": 68, + "125": 7, + "126": 60, + "127": 64, + "128": 68, + "129": 8, + "13": 1, + "130": 68, + "131": 128, + "132": 32, + "133": 2, + "135": 10, + "139": 12, + "14": 64, + "15": 112, + "16": 52, + "17": 33, + "20": 68, + "21": 129, + "24": 60, + "25": 1, + "28": 52, + "29": 33, + "32": 68, + "33": 129, + "34": 24, + "36": 60, + "37": 1, + "38": 64, + "39": 171, + "4": 52, + "40": 52, + "41": 33, + "42": 50, + "44": 68, + "45": 129, + "46": 16, + "48": 60, + "49": 1, + "5": 33, + "52": 52, + "53": 33, + "56": 68, + "57": 129, + "58": 40, + "60": 60, + "61": 1, + "62": 64, + "63": 181, + "64": 52, + "65": 33, + "66": 100, + "68": 68, + "69": 129, + "70": 32, + "72": 60, + "73": 1, + "74": 70, + "75": 25, + "76": 52, + "77": 33, + "78": 36, + "8": 68, + "80": 68, + "81": 129, + "82": 48, + "84": 60, + "85": 1, + "86": 70, + "87": 1, + "88": 52, + "89": 33, + "9": 129, + "90": 100, + "92": 68, + "93": 129, + "94": 56, + "96": 60, + "97": 1, + "98": 70, + "99": 16, + }, + registers: { + "1,at": "0x46100000", + "2,v0": "0xa", + "f0,FP0": "0x40700000", + "f10,FP10": "0x40800000", + "f12,FP12": "0x40bb3200", + "f14,FP14": "0x40c56400", + "f16,FP16": "0x46992400", + "f18,FP18": "0x46900000", + "f2,FP2": "0x40ab3200", + "f4,FP4": "0x40b56400", + "f6,FP6": "0x46192400", + "f8,FP8": "0x46100000", + PC: "0x8c", + f17: "0x46816400", + f7: "0x46016400", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_060.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_060.s.snap new file mode 100644 index 000000000..c4dcee483 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_060.s.snap @@ -0,0 +1,135 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_060.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 8, + "100": 52, + "101": 33, + "104": 68, + "105": 129, + "106": 64, + "108": 68, + "109": 34, + "110": 2, + "111": 129, + "112": 68, + "113": 36, + "114": 19, + "115": 1, + "116": 68, + "117": 32, + "118": 35, + "119": 129, + "12": 60, + "120": 68, + "121": 7, + "122": 52, + "123": 1, + "124": 68, + "125": 8, + "126": 60, + "127": 65, + "128": 68, + "129": 6, + "13": 1, + "130": 68, + "131": 129, + "132": 32, + "133": 2, + "135": 10, + "139": 12, + "14": 64, + "15": 112, + "16": 52, + "17": 33, + "20": 68, + "21": 129, + "24": 60, + "25": 1, + "28": 52, + "29": 33, + "32": 68, + "33": 129, + "34": 24, + "36": 60, + "37": 1, + "38": 64, + "39": 171, + "4": 52, + "40": 52, + "41": 33, + "42": 50, + "44": 68, + "45": 129, + "46": 16, + "48": 60, + "49": 1, + "5": 33, + "52": 52, + "53": 33, + "56": 68, + "57": 129, + "58": 40, + "60": 60, + "61": 1, + "62": 64, + "63": 181, + "64": 52, + "65": 33, + "66": 100, + "68": 68, + "69": 129, + "70": 32, + "72": 60, + "73": 1, + "74": 70, + "75": 25, + "76": 52, + "77": 33, + "78": 36, + "8": 68, + "80": 68, + "81": 129, + "82": 48, + "84": 60, + "85": 1, + "86": 70, + "87": 1, + "88": 52, + "89": 33, + "9": 129, + "90": 100, + "92": 68, + "93": 129, + "94": 56, + "96": 60, + "97": 1, + "98": 70, + "99": 16, + }, + registers: { + "1,at": "0x46100000", + "2,v0": "0xa", + "f0,FP0": "0x40700000", + "f10,FP10": "0xc0a93200", + "f12,FP12": "0xc09f2c00", + "f14,FP14": "0x40b46400", + "f16,FP16": "0x44be0000", + "f18,FP18": "0xc4124000", + "f2,FP2": "0x40ab3200", + "f4,FP4": "0x40b56400", + "f6,FP6": "0x46192400", + "f8,FP8": "0x46100000", + PC: "0x8c", + f17: "0xc469c000", + f7: "0x46016400", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_061.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_061.s.snap new file mode 100644 index 000000000..6bd73b644 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_061.s.snap @@ -0,0 +1,132 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_061.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 8, + "100": 52, + "101": 33, + "104": 68, + "105": 129, + "106": 64, + "108": 68, + "109": 32, + "110": 2, + "111": 133, + "112": 68, + "113": 32, + "114": 19, + "115": 5, + "116": 68, + "117": 32, + "118": 35, + "119": 133, + "12": 60, + "120": 68, + "122": 52, + "123": 5, + "124": 68, + "126": 60, + "127": 69, + "128": 68, + "13": 1, + "130": 68, + "131": 133, + "132": 32, + "133": 2, + "135": 10, + "139": 12, + "14": 64, + "15": 112, + "16": 52, + "17": 33, + "20": 68, + "21": 129, + "24": 60, + "25": 1, + "28": 52, + "29": 33, + "32": 68, + "33": 129, + "34": 24, + "36": 60, + "37": 1, + "38": 192, + "39": 171, + "4": 52, + "40": 52, + "41": 33, + "42": 50, + "44": 68, + "45": 129, + "46": 16, + "48": 60, + "49": 1, + "5": 33, + "52": 52, + "53": 33, + "56": 68, + "57": 129, + "58": 40, + "60": 60, + "61": 1, + "62": 64, + "63": 181, + "64": 52, + "65": 33, + "66": 100, + "68": 68, + "69": 129, + "70": 32, + "72": 60, + "73": 1, + "74": 198, + "75": 25, + "76": 52, + "77": 33, + "78": 36, + "8": 68, + "80": 68, + "81": 129, + "82": 48, + "84": 60, + "85": 1, + "86": 70, + "87": 1, + "88": 52, + "89": 33, + "9": 129, + "90": 100, + "92": 68, + "93": 129, + "94": 56, + "96": 60, + "97": 1, + "98": 198, + "99": 16, + }, + registers: { + "1,at": "0xc6100000", + "2,v0": "0xa", + "f0,FP0": "0x40700000", + "f10,FP10": "0x40700000", + "f12,FP12": "0x40ab3200", + "f14,FP14": "0x40b56400", + "f16,FP16": "0x46192400", + "f18,FP18": "0x46100000", + "f2,FP2": "0xc0ab3200", + "f4,FP4": "0x40b56400", + "f6,FP6": "0xc6192400", + "f8,FP8": "0xc6100000", + PC: "0x8c", + f17: "0x46016400", + f7: "0x46016400", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_062.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_062.s.snap new file mode 100644 index 000000000..ddd888b59 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_062.s.snap @@ -0,0 +1,130 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_062.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 8, + "100": 52, + "101": 33, + "104": 68, + "105": 129, + "106": 64, + "108": 68, + "109": 34, + "110": 2, + "111": 130, + "112": 68, + "113": 36, + "114": 19, + "115": 2, + "116": 68, + "117": 32, + "118": 35, + "119": 130, + "12": 60, + "120": 68, + "121": 7, + "122": 52, + "123": 2, + "124": 68, + "125": 8, + "126": 60, + "127": 66, + "128": 68, + "129": 6, + "13": 1, + "130": 68, + "131": 130, + "132": 32, + "133": 2, + "135": 10, + "139": 12, + "14": 64, + "15": 112, + "16": 52, + "17": 33, + "20": 68, + "21": 129, + "24": 60, + "25": 1, + "28": 52, + "29": 33, + "32": 68, + "33": 129, + "34": 24, + "36": 60, + "37": 1, + "38": 192, + "39": 176, + "4": 52, + "40": 52, + "41": 33, + "44": 68, + "45": 129, + "46": 16, + "48": 60, + "49": 1, + "5": 33, + "52": 52, + "53": 33, + "56": 68, + "57": 129, + "58": 40, + "60": 60, + "61": 1, + "62": 64, + "63": 8, + "64": 52, + "65": 33, + "68": 68, + "69": 129, + "70": 32, + "72": 60, + "73": 1, + "74": 195, + "75": 150, + "76": 52, + "77": 33, + "8": 68, + "80": 68, + "81": 129, + "82": 48, + "84": 60, + "85": 1, + "86": 64, + "87": 160, + "88": 52, + "89": 33, + "9": 129, + "92": 68, + "93": 129, + "94": 56, + "96": 60, + "97": 1, + "98": 196, + }, + registers: { + "1,at": "0xc4000000", + "2,v0": "0xa", + "f0,FP0": "0x40700000", + "f10,FP10": "0xc1300000", + "f12,FP12": "0xc0c80000", + "f14,FP14": "0x40880000", + "f16,FP16": "0xc4bb8000", + "f18,FP18": "0x48160000", + "f2,FP2": "0xc0b00000", + "f4,FP4": "0x40080000", + "f6,FP6": "0xc3960000", + "f8,FP8": "0xc4000000", + PC: "0x8c", + f17: "0xc5200000", + f7: "0x40a00000", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_063.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_063.s.snap new file mode 100644 index 000000000..490c1be1c --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_063.s.snap @@ -0,0 +1,132 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_063.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 8, + "100": 52, + "101": 33, + "104": 68, + "105": 129, + "106": 64, + "108": 68, + "109": 34, + "110": 2, + "111": 131, + "112": 68, + "113": 36, + "114": 19, + "115": 3, + "116": 68, + "117": 36, + "118": 3, + "119": 131, + "12": 60, + "120": 68, + "121": 7, + "122": 52, + "123": 3, + "124": 68, + "125": 8, + "126": 60, + "127": 67, + "128": 68, + "129": 6, + "13": 1, + "130": 68, + "131": 131, + "132": 32, + "133": 2, + "135": 10, + "139": 12, + "14": 64, + "15": 112, + "16": 52, + "17": 33, + "20": 68, + "21": 129, + "24": 60, + "25": 1, + "28": 52, + "29": 33, + "32": 68, + "33": 129, + "34": 24, + "36": 60, + "37": 1, + "38": 192, + "39": 176, + "4": 52, + "40": 52, + "41": 33, + "44": 68, + "45": 129, + "46": 16, + "48": 60, + "49": 1, + "5": 33, + "52": 52, + "53": 33, + "56": 68, + "57": 129, + "58": 40, + "60": 60, + "61": 1, + "62": 64, + "63": 8, + "64": 52, + "65": 33, + "68": 68, + "69": 129, + "70": 32, + "72": 60, + "73": 1, + "74": 195, + "75": 150, + "76": 52, + "77": 33, + "8": 68, + "80": 68, + "81": 129, + "82": 48, + "84": 60, + "85": 1, + "86": 64, + "87": 160, + "88": 52, + "89": 33, + "9": 129, + "92": 68, + "93": 129, + "94": 56, + "96": 60, + "97": 1, + "98": 196, + }, + registers: { + "1,at": "0xc4000000", + "2,v0": "0xa", + "f0,FP0": "0x40700000", + "f10,FP10": "0xbfb00000", + "f12,FP12": "0xc0955555", + "f14,FP14": "0x40555555", + "f16,FP16": "0xc2700000", + "f18,FP18": "0x3fda740e", + "f2,FP2": "0xc0b00000", + "f4,FP4": "0x40080000", + "f6,FP6": "0xc3960000", + "f8,FP8": "0xc4000000", + PC: "0x8c", + f13: "0x55555555", + f15: "0x55555555", + f17: "0xbc200000", + f7: "0x40a00000", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_064.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_064.s.snap new file mode 100644 index 000000000..4598a17c2 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_064.s.snap @@ -0,0 +1,141 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_064.s 1`] = ` +{ + display: "", + error: false, + instruction_errors: [ + { + error: "Square root of a negative number is not allowed.", + i: 28, + }, + { + error: "Square root of a negative number is not allowed.", + i: 31, + }, + ], + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 8, + "100": 52, + "101": 33, + "104": 68, + "105": 129, + "106": 64, + "108": 68, + "109": 32, + "110": 2, + "111": 150, + "112": 68, + "113": 32, + "114": 19, + "115": 22, + "116": 68, + "117": 32, + "118": 35, + "119": 150, + "12": 60, + "120": 68, + "122": 52, + "123": 22, + "124": 68, + "126": 60, + "127": 86, + "128": 68, + "13": 1, + "130": 68, + "131": 150, + "132": 32, + "133": 2, + "135": 10, + "139": 12, + "14": 64, + "15": 112, + "16": 52, + "17": 33, + "20": 68, + "21": 129, + "24": 60, + "25": 1, + "28": 52, + "29": 33, + "32": 68, + "33": 129, + "34": 24, + "36": 60, + "37": 1, + "38": 192, + "39": 171, + "4": 52, + "40": 52, + "41": 33, + "42": 50, + "44": 68, + "45": 129, + "46": 16, + "48": 60, + "49": 1, + "5": 33, + "52": 52, + "53": 33, + "56": 68, + "57": 129, + "58": 40, + "60": 60, + "61": 1, + "62": 64, + "63": 181, + "64": 52, + "65": 33, + "66": 100, + "68": 68, + "69": 129, + "70": 32, + "72": 60, + "73": 1, + "74": 70, + "75": 25, + "76": 52, + "77": 33, + "78": 36, + "8": 68, + "80": 68, + "81": 129, + "82": 48, + "84": 60, + "85": 1, + "86": 198, + "87": 1, + "88": 52, + "89": 33, + "9": 129, + "90": 100, + "92": 68, + "93": 129, + "94": 56, + "96": 60, + "97": 1, + "98": 70, + "99": 16, + }, + registers: { + "1,at": "0x46100000", + "2,v0": "0xa", + "f0,FP0": "0x40700000", + "f10,FP10": "0x3fb00000", + "f14,FP14": "0x3f8bacf9", + "f16,FP16": "0x3c257eb5", + "f18,FP18": "0x3c2aaaab", + "f2,FP2": "0xc0ab3200", + "f4,FP4": "0x40b56400", + "f6,FP6": "0x46192400", + "f8,FP8": "0x46100000", + PC: "0x8c", + f15: "0x14c1bad0", + f7: "0xc6016400", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_065.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_065.s.snap new file mode 100644 index 000000000..ff2f42b32 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_065.s.snap @@ -0,0 +1,112 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_065.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 8, + "100": 52, + "101": 33, + "104": 68, + "105": 129, + "106": 64, + "108": 68, + "110": 50, + "111": 161, + "112": 68, + "113": 32, + "114": 96, + "115": 160, + "116": 32, + "117": 2, + "119": 10, + "12": 60, + "123": 12, + "13": 1, + "14": 64, + "15": 112, + "16": 52, + "17": 33, + "20": 68, + "21": 129, + "24": 60, + "25": 1, + "28": 52, + "29": 33, + "32": 68, + "33": 129, + "34": 24, + "36": 60, + "37": 1, + "38": 192, + "39": 171, + "4": 52, + "40": 52, + "41": 33, + "42": 50, + "44": 68, + "45": 129, + "46": 16, + "48": 60, + "49": 1, + "5": 33, + "52": 52, + "53": 33, + "56": 68, + "57": 129, + "58": 40, + "60": 60, + "61": 1, + "62": 64, + "63": 181, + "64": 52, + "65": 33, + "66": 100, + "68": 68, + "69": 129, + "70": 32, + "72": 60, + "73": 1, + "74": 70, + "75": 25, + "76": 52, + "77": 33, + "78": 36, + "8": 68, + "80": 68, + "81": 129, + "82": 48, + "84": 60, + "85": 1, + "86": 198, + "87": 1, + "88": 52, + "89": 33, + "9": 129, + "90": 100, + "92": 68, + "93": 129, + "94": 56, + "96": 60, + "97": 1, + "98": 70, + "99": 16, + }, + registers: { + "1,at": "0x46100000", + "2,v0": "0xa", + "f0,FP0": "0x40700000", + "f10,FP10": "0x40c32480", + "f4,FP4": "0x40b56400", + "f6,FP6": "0x46192400", + "f8,FP8": "0x46100000", + PC: "0x7c", + f7: "0xc6016400", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_066.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_066.s.snap new file mode 100644 index 000000000..bf9b48bcd --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_066.s.snap @@ -0,0 +1,95 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_066.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 8, + "12": 60, + "13": 1, + "14": 64, + "15": 112, + "16": 52, + "17": 33, + "20": 68, + "21": 129, + "24": 60, + "25": 1, + "28": 52, + "29": 33, + "32": 68, + "33": 129, + "34": 24, + "36": 60, + "37": 1, + "38": 192, + "39": 171, + "4": 52, + "40": 52, + "41": 33, + "42": 50, + "44": 68, + "45": 129, + "46": 16, + "48": 60, + "49": 1, + "5": 33, + "50": 70, + "51": 25, + "52": 52, + "53": 33, + "54": 36, + "56": 68, + "57": 129, + "58": 48, + "60": 60, + "61": 1, + "62": 198, + "63": 1, + "64": 52, + "65": 33, + "66": 100, + "68": 68, + "69": 129, + "70": 56, + "72": 68, + "73": 32, + "74": 2, + "75": 36, + "76": 68, + "77": 32, + "78": 18, + "79": 100, + "8": 68, + "80": 68, + "82": 50, + "83": 164, + "84": 68, + "86": 58, + "87": 228, + "88": 32, + "89": 2, + "9": 129, + "91": 10, + "95": 12, + }, + registers: { + "1,at": "0xc6016400", + "10,t2": "0x2649", + "11,t3": "0xffffdfa7", + "2,v0": "0xa", + "8,t0": "0x100", + "9,t1": "0xfffff267", + "f0,FP0": "0x40700000", + "f2,FP2": "0xc0ab3200", + "f6,FP6": "0x46192400", + PC: "0x60", + f7: "0xc6016400", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_067.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_067.s.snap new file mode 100644 index 000000000..c2558cb60 --- /dev/null +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_067.s.snap @@ -0,0 +1,109 @@ +export const snapshot = {}; + +snapshot[`mips/instructions/test_mips_instruction_067.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "11": 32, + "12": 60, + "13": 1, + "14": 255, + "15": 220, + "16": 52, + "17": 33, + "18": 53, + "19": 154, + "21": 32, + "22": 72, + "23": 32, + "24": 60, + "25": 1, + "26": 2, + "27": 52, + "28": 52, + "29": 33, + "3": 1, + "30": 103, + "31": 255, + "33": 32, + "34": 80, + "35": 32, + "36": 60, + "37": 1, + "38": 255, + "39": 169, + "4": 52, + "40": 52, + "41": 33, + "42": 175, + "43": 159, + "45": 32, + "46": 88, + "47": 32, + "48": 32, + "49": 12, + "5": 33, + "50": 30, + "51": 219, + "52": 32, + "53": 13, + "54": 22, + "55": 46, + "56": 68, + "57": 32, + "58": 64, + "59": 33, + "6": 226, + "60": 68, + "61": 32, + "62": 72, + "63": 161, + "64": 68, + "65": 32, + "66": 81, + "67": 33, + "68": 68, + "69": 64, + "7": 174, + "70": 89, + "71": 160, + "72": 68, + "73": 64, + "74": 97, + "75": 224, + "76": 68, + "77": 64, + "78": 106, + "79": 32, + "80": 32, + "81": 2, + "83": 10, + "87": 12, + "9": 32, + }, + registers: { + "1,at": "0xffa9af9f", + "10,t2": "0x23467ff", + "11,t3": "0xffa9af9f", + "12,t4": "0x1edb", + "13,t5": "0x162e", + "2,v0": "0xa", + "8,t0": "0x1e2ae", + "9,t1": "0xffdc359a", + "f0,FP0": "0x40fe2ae0", + "f2,FP2": "0xc141e533", + "f4,FP4": "0x4181a33f", + "f6,FP6": "0xcaaca0c2", + "f8,FP8": "0x45b17000", + PC: "0x58", + f5: "0xf8000000", + f7: "0x45f6d800", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_001.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_001.s.snap new file mode 100644 index 000000000..61e91bc93 --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_001.s.snap @@ -0,0 +1,60 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_001.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 4, + "11": 10, + "15": 12, + "16": 32, + "17": 1, + "19": 12, + "20": 3, + "21": 161, + "22": 232, + "23": 35, + "24": 175, + "25": 191, + "268435451": 8, + "27": 8, + "28": 175, + "29": 190, + "3": 5, + "31": 4, + "32": 39, + "33": 190, + "35": 4, + "36": 32, + "37": 4, + "39": 2, + "4": 12, + "40": 143, + "41": 191, + "43": 8, + "44": 143, + "45": 190, + "47": 4, + "48": 39, + "49": 189, + "51": 12, + "52": 3, + "53": 224, + "55": 8, + "7": 16, + "8": 32, + "9": 2, + }, + registers: { + "1,at": "0xc", + "2,v0": "0xa", + "31,ra": "0x8", + "4,a0": "0x2", + PC: "0x10", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_002.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_002.s.snap new file mode 100644 index 000000000..9e9ca32aa --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_002.s.snap @@ -0,0 +1,60 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_002.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 5, + "11": 10, + "15": 12, + "16": 32, + "17": 1, + "19": 12, + "20": 3, + "21": 161, + "22": 232, + "23": 35, + "24": 175, + "25": 191, + "268435451": 8, + "27": 8, + "28": 175, + "29": 190, + "3": 5, + "31": 4, + "32": 39, + "33": 190, + "35": 4, + "36": 32, + "37": 5, + "39": 2, + "4": 12, + "40": 143, + "41": 191, + "43": 8, + "44": 143, + "45": 190, + "47": 4, + "48": 39, + "49": 189, + "51": 12, + "52": 3, + "53": 224, + "55": 8, + "7": 16, + "8": 32, + "9": 2, + }, + registers: { + "1,at": "0xc", + "2,v0": "0xa", + "31,ra": "0x8", + "5,a1": "0x2", + PC: "0x10", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_003.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_003.s.snap new file mode 100644 index 000000000..b87ce2183 --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_003.s.snap @@ -0,0 +1,60 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_003.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 6, + "11": 10, + "15": 12, + "16": 32, + "17": 1, + "19": 12, + "20": 3, + "21": 161, + "22": 232, + "23": 35, + "24": 175, + "25": 191, + "268435451": 8, + "27": 8, + "28": 175, + "29": 190, + "3": 5, + "31": 4, + "32": 39, + "33": 190, + "35": 4, + "36": 32, + "37": 6, + "39": 2, + "4": 12, + "40": 143, + "41": 191, + "43": 8, + "44": 143, + "45": 190, + "47": 4, + "48": 39, + "49": 189, + "51": 12, + "52": 3, + "53": 224, + "55": 8, + "7": 16, + "8": 32, + "9": 2, + }, + registers: { + "1,at": "0xc", + "2,v0": "0xa", + "31,ra": "0x8", + "6,a2": "0x2", + PC: "0x10", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_004.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_004.s.snap new file mode 100644 index 000000000..105920296 --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_004.s.snap @@ -0,0 +1,60 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_004.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 7, + "11": 10, + "15": 12, + "16": 32, + "17": 1, + "19": 12, + "20": 3, + "21": 161, + "22": 232, + "23": 35, + "24": 175, + "25": 191, + "268435451": 8, + "27": 8, + "28": 175, + "29": 190, + "3": 5, + "31": 4, + "32": 39, + "33": 190, + "35": 4, + "36": 32, + "37": 7, + "39": 2, + "4": 12, + "40": 143, + "41": 191, + "43": 8, + "44": 143, + "45": 190, + "47": 4, + "48": 39, + "49": 189, + "51": 12, + "52": 3, + "53": 224, + "55": 8, + "7": 16, + "8": 32, + "9": 2, + }, + registers: { + "1,at": "0xc", + "2,v0": "0xa", + "31,ra": "0x8", + "7,a3": "0x2", + PC: "0x10", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_005.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_005.s.snap new file mode 100644 index 000000000..fbd1ca9a2 --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_005.s.snap @@ -0,0 +1,33 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_005.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 30, + "11": 10, + "15": 12, + "16": 32, + "17": 30, + "19": 5, + "20": 3, + "21": 224, + "23": 8, + "3": 5, + "4": 12, + "7": 16, + "8": 32, + "9": 2, + }, + registers: { + "2,v0": "0xa", + "30,fp": "0x5", + "31,ra": "0x8", + PC: "0x10", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_006.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_006.s.snap new file mode 100644 index 000000000..be7427858 --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_006.s.snap @@ -0,0 +1,33 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_006.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 28, + "11": 10, + "15": 12, + "16": 32, + "17": 28, + "19": 5, + "20": 3, + "21": 224, + "23": 8, + "3": 5, + "4": 12, + "7": 16, + "8": 32, + "9": 2, + }, + registers: { + "2,v0": "0xa", + "28,gp": "0x5", + "31,ra": "0x8", + PC: "0x10", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_007.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_007.s.snap new file mode 100644 index 000000000..3020f8f0b --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_007.s.snap @@ -0,0 +1,33 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_007.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 26, + "11": 10, + "15": 12, + "16": 32, + "17": 26, + "19": 5, + "20": 3, + "21": 224, + "23": 8, + "3": 5, + "4": 12, + "7": 16, + "8": 32, + "9": 2, + }, + registers: { + "2,v0": "0xa", + "26,k0": "0x5", + "31,ra": "0x8", + PC: "0x10", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_008.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_008.s.snap new file mode 100644 index 000000000..82d869b69 --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_008.s.snap @@ -0,0 +1,33 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_008.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 27, + "11": 10, + "15": 12, + "16": 32, + "17": 27, + "19": 5, + "20": 3, + "21": 224, + "23": 8, + "3": 5, + "4": 12, + "7": 16, + "8": 32, + "9": 2, + }, + registers: { + "2,v0": "0xa", + "27,k1": "0x5", + "31,ra": "0x8", + PC: "0x10", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_009.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_009.s.snap new file mode 100644 index 000000000..48acc183a --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_009.s.snap @@ -0,0 +1,32 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_009.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 31, + "11": 10, + "15": 12, + "16": 32, + "17": 31, + "18": 16, + "19": 138, + "20": 3, + "21": 224, + "23": 8, + "3": 5, + "4": 12, + "7": 16, + "8": 32, + "9": 2, + }, + registers: { + "31,ra": "0x108a", + PC: "0x201a", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_010.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_010.s.snap new file mode 100644 index 000000000..4e7546130 --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_010.s.snap @@ -0,0 +1,67 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_010.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 16, + "11": 10, + "15": 12, + "16": 32, + "17": 1, + "19": 12, + "20": 3, + "21": 161, + "22": 232, + "23": 35, + "24": 175, + "25": 191, + "268435451": 8, + "27": 8, + "28": 175, + "29": 190, + "3": 5, + "31": 4, + "32": 39, + "33": 190, + "35": 4, + "36": 32, + "37": 16, + "39": 2, + "4": 12, + "40": 143, + "41": 191, + "43": 8, + "44": 143, + "45": 190, + "47": 4, + "48": 39, + "49": 189, + "51": 12, + "52": 3, + "53": 224, + "55": 8, + "7": 16, + "8": 32, + "9": 2, + }, + registers: { + "1,at": "0xc", + "16,s0": "0x2", + "2,v0": "0xa", + "31,ra": "0x8", + PC: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register 16,s0 was used but never saved to memory + - Register 16,s0 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_011.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_011.s.snap new file mode 100644 index 000000000..8a042d16f --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_011.s.snap @@ -0,0 +1,67 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_011.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 17, + "11": 10, + "15": 12, + "16": 32, + "17": 1, + "19": 12, + "20": 3, + "21": 161, + "22": 232, + "23": 35, + "24": 175, + "25": 191, + "268435451": 8, + "27": 8, + "28": 175, + "29": 190, + "3": 5, + "31": 4, + "32": 39, + "33": 190, + "35": 4, + "36": 32, + "37": 17, + "39": 2, + "4": 12, + "40": 143, + "41": 191, + "43": 8, + "44": 143, + "45": 190, + "47": 4, + "48": 39, + "49": 189, + "51": 12, + "52": 3, + "53": 224, + "55": 8, + "7": 16, + "8": 32, + "9": 2, + }, + registers: { + "1,at": "0xc", + "17,s1": "0x2", + "2,v0": "0xa", + "31,ra": "0x8", + PC: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register 17,s1 was used but never saved to memory + - Register 17,s1 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_012.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_012.s.snap new file mode 100644 index 000000000..6a8c3a649 --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_012.s.snap @@ -0,0 +1,67 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_012.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 18, + "11": 10, + "15": 12, + "16": 32, + "17": 1, + "19": 12, + "20": 3, + "21": 161, + "22": 232, + "23": 35, + "24": 175, + "25": 191, + "268435451": 8, + "27": 8, + "28": 175, + "29": 190, + "3": 5, + "31": 4, + "32": 39, + "33": 190, + "35": 4, + "36": 32, + "37": 18, + "39": 2, + "4": 12, + "40": 143, + "41": 191, + "43": 8, + "44": 143, + "45": 190, + "47": 4, + "48": 39, + "49": 189, + "51": 12, + "52": 3, + "53": 224, + "55": 8, + "7": 16, + "8": 32, + "9": 2, + }, + registers: { + "1,at": "0xc", + "18,s2": "0x2", + "2,v0": "0xa", + "31,ra": "0x8", + PC: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register 18,s2 was used but never saved to memory + - Register 18,s2 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_013.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_013.s.snap new file mode 100644 index 000000000..ca9f05292 --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_013.s.snap @@ -0,0 +1,67 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_013.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 19, + "11": 10, + "15": 12, + "16": 32, + "17": 1, + "19": 12, + "20": 3, + "21": 161, + "22": 232, + "23": 35, + "24": 175, + "25": 191, + "268435451": 8, + "27": 8, + "28": 175, + "29": 190, + "3": 5, + "31": 4, + "32": 39, + "33": 190, + "35": 4, + "36": 32, + "37": 19, + "39": 2, + "4": 12, + "40": 143, + "41": 191, + "43": 8, + "44": 143, + "45": 190, + "47": 4, + "48": 39, + "49": 189, + "51": 12, + "52": 3, + "53": 224, + "55": 8, + "7": 16, + "8": 32, + "9": 2, + }, + registers: { + "1,at": "0xc", + "19,s3": "0x2", + "2,v0": "0xa", + "31,ra": "0x8", + PC: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register 19,s3 was used but never saved to memory + - Register 19,s3 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_014.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_014.s.snap new file mode 100644 index 000000000..ebab8f212 --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_014.s.snap @@ -0,0 +1,67 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_014.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 20, + "11": 10, + "15": 12, + "16": 32, + "17": 1, + "19": 12, + "20": 3, + "21": 161, + "22": 232, + "23": 35, + "24": 175, + "25": 191, + "268435451": 8, + "27": 8, + "28": 175, + "29": 190, + "3": 5, + "31": 4, + "32": 39, + "33": 190, + "35": 4, + "36": 32, + "37": 20, + "39": 2, + "4": 12, + "40": 143, + "41": 191, + "43": 8, + "44": 143, + "45": 190, + "47": 4, + "48": 39, + "49": 189, + "51": 12, + "52": 3, + "53": 224, + "55": 8, + "7": 16, + "8": 32, + "9": 2, + }, + registers: { + "1,at": "0xc", + "2,v0": "0xa", + "20,s4": "0x2", + "31,ra": "0x8", + PC: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register 20,s4 was used but never saved to memory + - Register 20,s4 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_015.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_015.s.snap new file mode 100644 index 000000000..7afae490d --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_015.s.snap @@ -0,0 +1,67 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_015.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 21, + "11": 10, + "15": 12, + "16": 32, + "17": 1, + "19": 12, + "20": 3, + "21": 161, + "22": 232, + "23": 35, + "24": 175, + "25": 191, + "268435451": 8, + "27": 8, + "28": 175, + "29": 190, + "3": 5, + "31": 4, + "32": 39, + "33": 190, + "35": 4, + "36": 32, + "37": 21, + "39": 2, + "4": 12, + "40": 143, + "41": 191, + "43": 8, + "44": 143, + "45": 190, + "47": 4, + "48": 39, + "49": 189, + "51": 12, + "52": 3, + "53": 224, + "55": 8, + "7": 16, + "8": 32, + "9": 2, + }, + registers: { + "1,at": "0xc", + "2,v0": "0xa", + "21,s5": "0x2", + "31,ra": "0x8", + PC: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register 21,s5 was used but never saved to memory + - Register 21,s5 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_016.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_016.s.snap new file mode 100644 index 000000000..5a0bf5d4c --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_016.s.snap @@ -0,0 +1,67 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_016.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 22, + "11": 10, + "15": 12, + "16": 32, + "17": 1, + "19": 12, + "20": 3, + "21": 161, + "22": 232, + "23": 35, + "24": 175, + "25": 191, + "268435451": 8, + "27": 8, + "28": 175, + "29": 190, + "3": 5, + "31": 4, + "32": 39, + "33": 190, + "35": 4, + "36": 32, + "37": 22, + "39": 2, + "4": 12, + "40": 143, + "41": 191, + "43": 8, + "44": 143, + "45": 190, + "47": 4, + "48": 39, + "49": 189, + "51": 12, + "52": 3, + "53": 224, + "55": 8, + "7": 16, + "8": 32, + "9": 2, + }, + registers: { + "1,at": "0xc", + "2,v0": "0xa", + "22,s6": "0x2", + "31,ra": "0x8", + PC: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register 22,s6 was used but never saved to memory + - Register 22,s6 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_017.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_017.s.snap new file mode 100644 index 000000000..f68e2030d --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_017.s.snap @@ -0,0 +1,67 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_017.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 23, + "11": 10, + "15": 12, + "16": 32, + "17": 1, + "19": 12, + "20": 3, + "21": 161, + "22": 232, + "23": 35, + "24": 175, + "25": 191, + "268435451": 8, + "27": 8, + "28": 175, + "29": 190, + "3": 5, + "31": 4, + "32": 39, + "33": 190, + "35": 4, + "36": 32, + "37": 23, + "39": 2, + "4": 12, + "40": 143, + "41": 191, + "43": 8, + "44": 143, + "45": 190, + "47": 4, + "48": 39, + "49": 189, + "51": 12, + "52": 3, + "53": 224, + "55": 8, + "7": 16, + "8": 32, + "9": 2, + }, + registers: { + "1,at": "0xc", + "2,v0": "0xa", + "23,s7": "0x2", + "31,ra": "0x8", + PC: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register 23,s7 was used but never saved to memory + - Register 23,s7 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_018.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_018.s.snap new file mode 100644 index 000000000..27c5a83da --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_018.s.snap @@ -0,0 +1,39 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_018.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 29, + "11": 10, + "15": 12, + "16": 35, + "17": 189, + "19": 4, + "20": 3, + "21": 224, + "23": 8, + "3": 5, + "4": 12, + "7": 16, + "8": 32, + "9": 2, + }, + registers: { + "2,v0": "0xa", + "29,sp": "0x9", + "31,ra": "0x8", + PC: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Stack pointer not restored: entered at 0x5, exited at 0x9", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_019.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_019.s.snap new file mode 100644 index 000000000..5cc2a97be --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_019.s.snap @@ -0,0 +1,64 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_019.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 8, + "11": 20, + "12": 32, + "13": 2, + "15": 10, + "19": 12, + "20": 32, + "21": 1, + "23": 12, + "24": 3, + "25": 161, + "26": 232, + "268435451": 12, + "27": 35, + "28": 175, + "29": 191, + "3": 1, + "31": 8, + "32": 175, + "33": 190, + "35": 4, + "36": 39, + "37": 190, + "39": 4, + "4": 32, + "40": 32, + "41": 8, + "43": 2, + "44": 143, + "45": 191, + "47": 8, + "48": 143, + "49": 190, + "5": 4, + "51": 4, + "52": 39, + "53": 189, + "55": 12, + "56": 3, + "57": 224, + "59": 8, + "7": 5, + "8": 12, + }, + registers: { + "1,at": "0xc", + "2,v0": "0xa", + "31,ra": "0xc", + "4,a0": "0x5", + "8,t0": "0x2", + PC: "0x14", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_020.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_020.s.snap new file mode 100644 index 000000000..37c630c32 --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_020.s.snap @@ -0,0 +1,64 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_020.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 9, + "11": 20, + "12": 32, + "13": 2, + "15": 10, + "19": 12, + "20": 32, + "21": 1, + "23": 12, + "24": 3, + "25": 161, + "26": 232, + "268435451": 12, + "27": 35, + "28": 175, + "29": 191, + "3": 1, + "31": 8, + "32": 175, + "33": 190, + "35": 4, + "36": 39, + "37": 190, + "39": 4, + "4": 32, + "40": 32, + "41": 9, + "43": 2, + "44": 143, + "45": 191, + "47": 8, + "48": 143, + "49": 190, + "5": 4, + "51": 4, + "52": 39, + "53": 189, + "55": 12, + "56": 3, + "57": 224, + "59": 8, + "7": 5, + "8": 12, + }, + registers: { + "1,at": "0xc", + "2,v0": "0xa", + "31,ra": "0xc", + "4,a0": "0x5", + "9,t1": "0x2", + PC: "0x14", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_021.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_021.s.snap new file mode 100644 index 000000000..09f8476b4 --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_021.s.snap @@ -0,0 +1,64 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_021.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 10, + "11": 20, + "12": 32, + "13": 2, + "15": 10, + "19": 12, + "20": 32, + "21": 1, + "23": 12, + "24": 3, + "25": 161, + "26": 232, + "268435451": 12, + "27": 35, + "28": 175, + "29": 191, + "3": 1, + "31": 8, + "32": 175, + "33": 190, + "35": 4, + "36": 39, + "37": 190, + "39": 4, + "4": 32, + "40": 32, + "41": 10, + "43": 2, + "44": 143, + "45": 191, + "47": 8, + "48": 143, + "49": 190, + "5": 4, + "51": 4, + "52": 39, + "53": 189, + "55": 12, + "56": 3, + "57": 224, + "59": 8, + "7": 5, + "8": 12, + }, + registers: { + "1,at": "0xc", + "10,t2": "0x2", + "2,v0": "0xa", + "31,ra": "0xc", + "4,a0": "0x5", + PC: "0x14", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_022.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_022.s.snap new file mode 100644 index 000000000..45b69ce9e --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_022.s.snap @@ -0,0 +1,64 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_022.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 11, + "11": 20, + "12": 32, + "13": 2, + "15": 10, + "19": 12, + "20": 32, + "21": 1, + "23": 12, + "24": 3, + "25": 161, + "26": 232, + "268435451": 12, + "27": 35, + "28": 175, + "29": 191, + "3": 1, + "31": 8, + "32": 175, + "33": 190, + "35": 4, + "36": 39, + "37": 190, + "39": 4, + "4": 32, + "40": 32, + "41": 11, + "43": 2, + "44": 143, + "45": 191, + "47": 8, + "48": 143, + "49": 190, + "5": 4, + "51": 4, + "52": 39, + "53": 189, + "55": 12, + "56": 3, + "57": 224, + "59": 8, + "7": 5, + "8": 12, + }, + registers: { + "1,at": "0xc", + "11,t3": "0x2", + "2,v0": "0xa", + "31,ra": "0xc", + "4,a0": "0x5", + PC: "0x14", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_023.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_023.s.snap new file mode 100644 index 000000000..090bcda82 --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_023.s.snap @@ -0,0 +1,64 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_023.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 12, + "11": 20, + "12": 32, + "13": 2, + "15": 10, + "19": 12, + "20": 32, + "21": 1, + "23": 12, + "24": 3, + "25": 161, + "26": 232, + "268435451": 12, + "27": 35, + "28": 175, + "29": 191, + "3": 1, + "31": 8, + "32": 175, + "33": 190, + "35": 4, + "36": 39, + "37": 190, + "39": 4, + "4": 32, + "40": 32, + "41": 12, + "43": 2, + "44": 143, + "45": 191, + "47": 8, + "48": 143, + "49": 190, + "5": 4, + "51": 4, + "52": 39, + "53": 189, + "55": 12, + "56": 3, + "57": 224, + "59": 8, + "7": 5, + "8": 12, + }, + registers: { + "1,at": "0xc", + "12,t4": "0x2", + "2,v0": "0xa", + "31,ra": "0xc", + "4,a0": "0x5", + PC: "0x14", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_024.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_024.s.snap new file mode 100644 index 000000000..2f9d42493 --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_024.s.snap @@ -0,0 +1,64 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_024.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 13, + "11": 20, + "12": 32, + "13": 2, + "15": 10, + "19": 12, + "20": 32, + "21": 1, + "23": 12, + "24": 3, + "25": 161, + "26": 232, + "268435451": 12, + "27": 35, + "28": 175, + "29": 191, + "3": 1, + "31": 8, + "32": 175, + "33": 190, + "35": 4, + "36": 39, + "37": 190, + "39": 4, + "4": 32, + "40": 32, + "41": 13, + "43": 2, + "44": 143, + "45": 191, + "47": 8, + "48": 143, + "49": 190, + "5": 4, + "51": 4, + "52": 39, + "53": 189, + "55": 12, + "56": 3, + "57": 224, + "59": 8, + "7": 5, + "8": 12, + }, + registers: { + "1,at": "0xc", + "13,t5": "0x2", + "2,v0": "0xa", + "31,ra": "0xc", + "4,a0": "0x5", + PC: "0x14", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_025.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_025.s.snap new file mode 100644 index 000000000..6aea5b61f --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_025.s.snap @@ -0,0 +1,64 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_025.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 14, + "11": 20, + "12": 32, + "13": 2, + "15": 10, + "19": 12, + "20": 32, + "21": 1, + "23": 12, + "24": 3, + "25": 161, + "26": 232, + "268435451": 12, + "27": 35, + "28": 175, + "29": 191, + "3": 1, + "31": 8, + "32": 175, + "33": 190, + "35": 4, + "36": 39, + "37": 190, + "39": 4, + "4": 32, + "40": 32, + "41": 14, + "43": 2, + "44": 143, + "45": 191, + "47": 8, + "48": 143, + "49": 190, + "5": 4, + "51": 4, + "52": 39, + "53": 189, + "55": 12, + "56": 3, + "57": 224, + "59": 8, + "7": 5, + "8": 12, + }, + registers: { + "1,at": "0xc", + "14,t6": "0x2", + "2,v0": "0xa", + "31,ra": "0xc", + "4,a0": "0x5", + PC: "0x14", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_026.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_026.s.snap new file mode 100644 index 000000000..bd81fa898 --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_026.s.snap @@ -0,0 +1,64 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_026.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 15, + "11": 20, + "12": 32, + "13": 2, + "15": 10, + "19": 12, + "20": 32, + "21": 1, + "23": 12, + "24": 3, + "25": 161, + "26": 232, + "268435451": 12, + "27": 35, + "28": 175, + "29": 191, + "3": 1, + "31": 8, + "32": 175, + "33": 190, + "35": 4, + "36": 39, + "37": 190, + "39": 4, + "4": 32, + "40": 32, + "41": 15, + "43": 2, + "44": 143, + "45": 191, + "47": 8, + "48": 143, + "49": 190, + "5": 4, + "51": 4, + "52": 39, + "53": 189, + "55": 12, + "56": 3, + "57": 224, + "59": 8, + "7": 5, + "8": 12, + }, + registers: { + "1,at": "0xc", + "15,t7": "0x2", + "2,v0": "0xa", + "31,ra": "0xc", + "4,a0": "0x5", + PC: "0x14", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_027.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_027.s.snap new file mode 100644 index 000000000..77e2679b1 --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_027.s.snap @@ -0,0 +1,64 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_027.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 24, + "11": 20, + "12": 32, + "13": 2, + "15": 10, + "19": 12, + "20": 32, + "21": 1, + "23": 12, + "24": 3, + "25": 161, + "26": 232, + "268435451": 12, + "27": 35, + "28": 175, + "29": 191, + "3": 1, + "31": 8, + "32": 175, + "33": 190, + "35": 4, + "36": 39, + "37": 190, + "39": 4, + "4": 32, + "40": 32, + "41": 24, + "43": 2, + "44": 143, + "45": 191, + "47": 8, + "48": 143, + "49": 190, + "5": 4, + "51": 4, + "52": 39, + "53": 189, + "55": 12, + "56": 3, + "57": 224, + "59": 8, + "7": 5, + "8": 12, + }, + registers: { + "1,at": "0xc", + "2,v0": "0xa", + "24,t8": "0x2", + "31,ra": "0xc", + "4,a0": "0x5", + PC: "0x14", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_028.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_028.s.snap new file mode 100644 index 000000000..01c45e942 --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_028.s.snap @@ -0,0 +1,64 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_028.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 25, + "11": 20, + "12": 32, + "13": 2, + "15": 10, + "19": 12, + "20": 32, + "21": 1, + "23": 12, + "24": 3, + "25": 161, + "26": 232, + "268435451": 12, + "27": 35, + "28": 175, + "29": 191, + "3": 1, + "31": 8, + "32": 175, + "33": 190, + "35": 4, + "36": 39, + "37": 190, + "39": 4, + "4": 32, + "40": 32, + "41": 25, + "43": 2, + "44": 143, + "45": 191, + "47": 8, + "48": 143, + "49": 190, + "5": 4, + "51": 4, + "52": 39, + "53": 189, + "55": 12, + "56": 3, + "57": 224, + "59": 8, + "7": 5, + "8": 12, + }, + registers: { + "1,at": "0xc", + "2,v0": "0xa", + "25,t9": "0x2", + "31,ra": "0xc", + "4,a0": "0x5", + PC: "0x14", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_029.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_029.s.snap new file mode 100644 index 000000000..56f652ae1 --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_029.s.snap @@ -0,0 +1,59 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_029.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 2, + "11": 10, + "15": 12, + "16": 32, + "17": 1, + "19": 12, + "20": 3, + "21": 161, + "22": 232, + "23": 35, + "24": 175, + "25": 191, + "268435451": 8, + "27": 8, + "28": 175, + "29": 190, + "3": 5, + "31": 4, + "32": 39, + "33": 190, + "35": 4, + "36": 32, + "37": 2, + "39": 2, + "4": 12, + "40": 143, + "41": 191, + "43": 8, + "44": 143, + "45": 190, + "47": 4, + "48": 39, + "49": 189, + "51": 12, + "52": 3, + "53": 224, + "55": 8, + "7": 16, + "8": 32, + "9": 2, + }, + registers: { + "1,at": "0xc", + "2,v0": "0xa", + "31,ra": "0x8", + PC: "0x10", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_030.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_030.s.snap new file mode 100644 index 000000000..4bf706229 --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_030.s.snap @@ -0,0 +1,60 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_030.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 3, + "11": 10, + "15": 12, + "16": 32, + "17": 1, + "19": 12, + "20": 3, + "21": 161, + "22": 232, + "23": 35, + "24": 175, + "25": 191, + "268435451": 8, + "27": 8, + "28": 175, + "29": 190, + "3": 5, + "31": 4, + "32": 39, + "33": 190, + "35": 4, + "36": 32, + "37": 3, + "39": 2, + "4": 12, + "40": 143, + "41": 191, + "43": 8, + "44": 143, + "45": 190, + "47": 4, + "48": 39, + "49": 189, + "51": 12, + "52": 3, + "53": 224, + "55": 8, + "7": 16, + "8": 32, + "9": 2, + }, + registers: { + "1,at": "0xc", + "2,v0": "0xa", + "3,v1": "0x2", + "31,ra": "0x8", + PC: "0x10", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_031.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_031.s.snap new file mode 100644 index 000000000..79eb6925b --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_031.s.snap @@ -0,0 +1,49 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_031.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 16, + "11": 10, + "15": 12, + "16": 32, + "17": 1, + "19": 8, + "20": 3, + "21": 161, + "22": 232, + "23": 35, + "24": 175, + "25": 176, + "268435447": 2, + "28": 32, + "29": 16, + "3": 2, + "31": 2, + "32": 143, + "33": 176, + "36": 39, + "37": 189, + "39": 8, + "4": 12, + "40": 3, + "41": 224, + "43": 8, + "7": 16, + "8": 32, + "9": 2, + }, + registers: { + "1,at": "0x8", + "16,s0": "0x2", + "2,v0": "0xa", + "31,ra": "0x8", + PC: "0x10", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_032.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_032.s.snap new file mode 100644 index 000000000..8564afcd1 --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_032.s.snap @@ -0,0 +1,53 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_032.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 16, + "11": 10, + "15": 12, + "16": 32, + "17": 1, + "19": 4, + "20": 3, + "21": 161, + "22": 232, + "23": 35, + "24": 175, + "25": 176, + "268435451": 5, + "28": 32, + "29": 16, + "3": 5, + "31": 5, + "32": 39, + "33": 189, + "35": 4, + "36": 3, + "37": 224, + "39": 8, + "4": 12, + "7": 16, + "8": 32, + "9": 2, + }, + registers: { + "1,at": "0x4", + "16,s0": "0x5", + "2,v0": "0xa", + "31,ra": "0x8", + PC: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register 16,s0 was saved but never restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_033.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_033.s.snap new file mode 100644 index 000000000..3f434801d --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_033.s.snap @@ -0,0 +1,56 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_033.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 16, + "11": 10, + "15": 12, + "16": 32, + "17": 1, + "19": 8, + "20": 3, + "21": 161, + "22": 232, + "23": 35, + "24": 175, + "25": 176, + "268435447": 2, + "28": 32, + "29": 16, + "3": 2, + "31": 2, + "32": 143, + "33": 176, + "35": 4, + "36": 39, + "37": 189, + "39": 8, + "4": 12, + "40": 3, + "41": 224, + "43": 8, + "7": 16, + "8": 32, + "9": 2, + }, + registers: { + "1,at": "0x8", + "2,v0": "0xa", + "31,ra": "0x8", + PC: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register 16,s0 saved at 0xffffff4 but restored from 0xffffff8 + - Register 16,s0 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_034.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_034.s.snap new file mode 100644 index 000000000..44782e1fa --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_034.s.snap @@ -0,0 +1,55 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_034.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 16, + "11": 10, + "15": 12, + "16": 32, + "17": 1, + "19": 8, + "20": 3, + "21": 161, + "22": 232, + "23": 35, + "24": 175, + "25": 176, + "268435447": 2, + "28": 32, + "29": 16, + "3": 2, + "31": 2, + "32": 135, + "33": 176, + "36": 39, + "37": 189, + "39": 8, + "4": 12, + "40": 3, + "41": 224, + "43": 8, + "7": 16, + "8": 32, + "9": 2, + }, + registers: { + "1,at": "0x8", + "2,v0": "0xa", + "31,ra": "0x8", + PC: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register 16,s0 saved with 4 bytes but restored with 2 bytes + - Register 16,s0 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_035.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_035.s.snap new file mode 100644 index 000000000..bcd912727 --- /dev/null +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_035.s.snap @@ -0,0 +1,55 @@ +export const snapshot = {}; + +snapshot[`mips/sentinel/test_mips_sentinels_035.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 32, + "1": 16, + "11": 10, + "15": 12, + "16": 32, + "17": 1, + "19": 8, + "20": 3, + "21": 161, + "22": 232, + "23": 35, + "24": 175, + "25": 176, + "28": 175, + "29": 168, + "3": 2, + "32": 32, + "33": 16, + "35": 2, + "36": 143, + "37": 176, + "4": 12, + "40": 39, + "41": 189, + "43": 8, + "44": 3, + "45": 224, + "47": 8, + "7": 16, + "8": 32, + "9": 2, + }, + registers: { + "1,at": "0x8", + "2,v0": "0xa", + "31,ra": "0x8", + PC: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register 16,s0 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_001.s.snap b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_001.s.snap new file mode 100644 index 000000000..bbbd78127 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_001.s.snap @@ -0,0 +1,124 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/examples/test_riscv_example_001.s 1`] = ` +{ + display: "1234", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 5, + "11": 3, + "13": 16, + "14": 8, + "15": 147, + "19": 115, + "2": 5, + "2097152": 12, + "2097155": 34, + "2097156": 255, + "2097157": 255, + "2097158": 233, + "2097159": 210, + "2097160": 67, + "2097161": 228, + "2097162": 41, + "2097163": 55, + "2097164": 64, + "2097165": 195, + "2097166": 6, + "2097167": 171, + "2097168": 133, + "2097169": 30, + "2097170": 184, + "2097171": 82, + "2097172": 84, + "2097173": 104, + "2097174": 105, + "2097175": 115, + "2097176": 32, + "2097177": 105, + "2097178": 115, + "2097179": 32, + "2097180": 97, + "2097181": 32, + "2097182": 115, + "2097183": 116, + "2097184": 114, + "2097185": 105, + "2097186": 110, + "2097187": 103, + "2097189": 84, + "2097190": 104, + "2097191": 105, + "2097192": 115, + "2097193": 32, + "2097194": 105, + "2097195": 115, + "2097196": 32, + "2097197": 97, + "2097198": 110, + "2097199": 111, + "2097200": 116, + "2097201": 104, + "2097202": 101, + "2097203": 114, + "2097204": 32, + "2097205": 115, + "2097206": 116, + "2097207": 114, + "2097208": 105, + "2097209": 110, + "2097210": 103, + "21": 32, + "22": 5, + "23": 23, + "24": 254, + "25": 229, + "26": 5, + "27": 19, + "29": 5, + "3": 23, + "30": 21, + "31": 3, + "33": 16, + "34": 8, + "35": 147, + "39": 115, + "41": 32, + "42": 5, + "43": 23, + "44": 254, + "45": 69, + "46": 5, + "47": 19, + "49": 5, + "5": 5, + "50": 48, + "51": 7, + "53": 32, + "54": 5, + "55": 23, + "56": 253, + "57": 133, + "58": 5, + "59": 19, + "6": 5, + "61": 5, + "62": 48, + "63": 39, + "66": 128, + "67": 103, + "7": 19, + "9": 5, + }, + registers: { + "f0,ft0": "0x40c306ab851eb852", + "x10,a0": "0x20000c", + "x17,a7": "0x1", + mtime: "0x11", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_002.s.snap b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_002.s.snap new file mode 100644 index 000000000..5fd239c1c --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_002.s.snap @@ -0,0 +1,61 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/examples/test_riscv_example_002.s 1`] = ` +{ + display: "4", + error: false, + keyboard: "", + memory: { + "1": 160, + "10": 3, + "11": 147, + "12": 2, + "13": 16, + "14": 14, + "15": 19, + "17": 98, + "18": 142, + "19": 179, + "2": 2, + "20": 65, + "21": 195, + "22": 142, + "23": 179, + "24": 3, + "25": 206, + "26": 14, + "27": 179, + "28": 2, + "29": 83, + "3": 147, + "30": 206, + "31": 179, + "33": 14, + "34": 133, + "35": 19, + "37": 16, + "38": 8, + "39": 147, + "43": 115, + "46": 128, + "47": 103, + "5": 208, + "6": 3, + "7": 19, + "8": 2, + "9": 208, + }, + registers: { + "x10,a0": "0x4", + "x17,a7": "0x1", + "x28,t3": "0x21", + "x29,t4": "0x4", + "x5,t0": "0xa", + "x6,t1": "0xd", + "x7,t2": "0x2d", + mtime: "0xc", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_003.s.snap b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_003.s.snap new file mode 100644 index 000000000..424e76c87 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_003.s.snap @@ -0,0 +1,92 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/examples/test_riscv_example_003.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 174, + "11": 3, + "13": 32, + "14": 3, + "15": 23, + "16": 255, + "17": 131, + "18": 3, + "19": 19, + "2": 2, + "2097155": 14, + "2097156": 120, + "2097159": 22, + "2097163": 14, + "2097164": 120, + "2097167": 22, + "21": 3, + "22": 14, + "23": 131, + "25": 32, + "26": 3, + "27": 151, + "28": 254, + "29": 227, + "3": 151, + "30": 131, + "31": 147, + "33": 3, + "34": 159, + "35": 3, + "37": 32, + "38": 2, + "39": 151, + "40": 254, + "41": 66, + "42": 130, + "43": 147, + "44": 1, + "45": 194, + "46": 160, + "47": 35, + "49": 32, + "5": 2, + "50": 2, + "51": 151, + "52": 253, + "53": 194, + "54": 130, + "55": 147, + "56": 1, + "57": 210, + "58": 128, + "59": 35, + "6": 130, + "61": 32, + "62": 2, + "63": 151, + "64": 253, + "65": 34, + "66": 130, + "67": 147, + "68": 1, + "69": 226, + "7": 147, + "70": 144, + "71": 35, + "74": 128, + "75": 103, + "9": 2, + }, + registers: { + "x28,t3": "0xe", + "x29,t4": "0x78", + "x30,t5": "0x16", + "x5,t0": "0x20000e", + "x6,t1": "0x200004", + "x7,t2": "0x200006", + mtime: "0x13", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_004.s.snap b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_004.s.snap new file mode 100644 index 000000000..c6b7e9d3d --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_004.s.snap @@ -0,0 +1,133 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/examples/test_riscv_example_004.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 3, + "11": 23, + "13": 3, + "14": 3, + "15": 19, + "17": 32, + "18": 3, + "19": 151, + "2": 2, + "2097152": 64, + "2097153": 65, + "2097154": 69, + "2097155": 161, + "2097156": 202, + "2097157": 192, + "2097158": 131, + "2097159": 18, + "2097160": 64, + "2097161": 38, + "2097162": 226, + "2097163": 208, + "2097164": 229, + "2097165": 96, + "2097166": 65, + "2097167": 137, + "2097168": 64, + "2097169": 132, + "2097170": 203, + "2097171": 51, + "2097172": 51, + "2097173": 51, + "2097174": 51, + "2097175": 51, + "2097176": 64, + "2097177": 81, + "2097178": 69, + "2097179": 161, + "2097180": 202, + "2097181": 192, + "2097182": 131, + "2097183": 18, + "2097184": 64, + "2097185": 130, + "2097186": 162, + "2097187": 126, + "2097188": 249, + "2097189": 219, + "2097190": 34, + "2097191": 209, + "2097192": 64, + "2097193": 77, + "2097194": 19, + "2097195": 21, + "2097196": 70, + "2097197": 137, + "2097198": 195, + "2097199": 233, + "21": 3, + "22": 131, + "23": 147, + "25": 32, + "26": 4, + "27": 23, + "29": 4, + "3": 151, + "30": 4, + "31": 19, + "33": 2, + "34": 176, + "35": 7, + "37": 3, + "38": 49, + "39": 7, + "41": 3, + "42": 181, + "43": 7, + "44": 2, + "47": 83, + "48": 10, + "49": 5, + "5": 2, + "50": 2, + "51": 83, + "52": 26, + "53": 37, + "54": 6, + "55": 83, + "57": 4, + "58": 48, + "59": 39, + "6": 130, + "61": 132, + "62": 4, + "63": 19, + "65": 68, + "66": 48, + "67": 39, + "69": 132, + "7": 147, + "70": 4, + "71": 19, + "73": 196, + "74": 48, + "75": 39, + "78": 128, + "79": 103, + "9": 32, + }, + registers: { + "f0,ft0": "0x405145a1cac08312", + "f10,fa0": "0x4084cb3333333333", + "f12,fa2": "0x404d13154689c3e9", + "f2,ft2": "0x4026e2d0e5604189", + "f4,ft4": "0x4082a27ef9db22d1", + "x5,t0": "0x200000", + "x6,t1": "0x200008", + "x7,t2": "0x200010", + "x8,fp,s0": "0x200028", + mtime: "0x14", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_005.s.snap b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_005.s.snap new file mode 100644 index 000000000..9087fc2cf --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_005.s.snap @@ -0,0 +1,52 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/examples/test_riscv_example_005.s 1`] = ` +{ + display: "45", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 130, + "11": 131, + "14": 3, + "15": 19, + "18": 5, + "19": 19, + "2": 2, + "2097152": 10, + "21": 83, + "22": 88, + "23": 99, + "25": 101, + "26": 5, + "27": 51, + "29": 19, + "3": 151, + "30": 3, + "31": 19, + "32": 254, + "34": 10, + "35": 227, + "37": 16, + "38": 8, + "39": 147, + "43": 115, + "46": 128, + "47": 103, + "5": 2, + "6": 130, + "7": 147, + "9": 2, + }, + registers: { + "x10,a0": "0x2d", + "x17,a7": "0x1", + "x5,t0": "0xa", + "x6,t1": "0xa", + mtime: "0x31", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_006.s.snap b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_006.s.snap new file mode 100644 index 000000000..b2b9594e4 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_006.s.snap @@ -0,0 +1,54 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/examples/test_riscv_example_006.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 64, + "10": 14, + "11": 19, + "13": 94, + "14": 88, + "15": 99, + "16": 2, + "17": 32, + "18": 14, + "19": 19, + "2": 2, + "21": 160, + "22": 8, + "23": 147, + "27": 115, + "29": 176, + "3": 147, + "30": 14, + "31": 147, + "32": 34, + "33": 176, + "34": 15, + "35": 19, + "36": 254, + "38": 6, + "39": 227, + "42": 128, + "43": 103, + "5": 32, + "6": 3, + "7": 19, + "9": 80, + }, + registers: { + "x17,a7": "0xa", + "x28,t3": "0x22", + "x29,t4": "0xb", + "x30,t5": "0x22b", + "x5,t0": "0x4", + "x6,t1": "0x2", + mtime: "0xa", + pc: "0x1c", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_007.s.snap b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_007.s.snap new file mode 100644 index 000000000..019a7bd29 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_007.s.snap @@ -0,0 +1,74 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/examples/test_riscv_example_007.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 16, + "10": 15, + "11": 23, + "12": 255, + "13": 143, + "14": 15, + "15": 19, + "18": 2, + "19": 147, + "2": 14, + "2097155": 1, + "2097159": 2, + "2097163": 3, + "2097167": 4, + "2097171": 5, + "22": 3, + "23": 19, + "25": 80, + "26": 3, + "27": 147, + "29": 115, + "3": 19, + "30": 14, + "31": 99, + "32": 3, + "33": 211, + "34": 15, + "35": 179, + "37": 15, + "38": 47, + "39": 131, + "40": 1, + "41": 242, + "42": 130, + "43": 179, + "44": 1, + "45": 195, + "46": 3, + "47": 51, + "49": 79, + "5": 64, + "50": 15, + "51": 19, + "52": 254, + "54": 4, + "55": 227, + "58": 128, + "59": 103, + "6": 14, + "7": 147, + "9": 32, + }, + registers: { + "x28,t3": "0x1", + "x29,t4": "0x4", + "x30,t5": "0x200014", + "x31,t6": "0x5", + "x5,t0": "0xf", + "x6,t1": "0x5", + "x7,t2": "0x5", + mtime: "0x2c", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_008.s.snap b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_008.s.snap new file mode 100644 index 000000000..41e88affb --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_008.s.snap @@ -0,0 +1,167 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/examples/test_riscv_example_008.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 3, + "11": 55, + "12": 4, + "13": 3, + "14": 3, + "15": 19, + "17": 64, + "18": 3, + "19": 147, + "2": 2, + "2097152": 52, + "2097156": 52, + "2097160": 52, + "2097164": 52, + "2097168": 35, + "2097169": 69, + "2097173": 67, + "2097174": 34, + "2097175": 16, + "2097176": 119, + "2097177": 81, + "2097178": 33, + "2097179": 32, + "2097180": 20, + "2097181": 20, + "2097182": 20, + "2097183": 20, + "2097186": 2, + "2097187": 20, + "2097188": 68, + "2097189": 85, + "2097190": 17, + "2097191": 34, + "2097192": 170, + "2097193": 191, + "2097194": 240, + "2097195": 18, + "2097196": 119, + "2097197": 208, + "2097202": 255, + "2097203": 35, + "2097204": 18, + "2097205": 52, + "2097206": 86, + "2097207": 120, + "2097208": 135, + "2097209": 101, + "2097210": 67, + "2097211": 33, + "2097212": 51, + "2097213": 68, + "2097214": 17, + "2097215": 36, + "2097216": 52, + "2097220": 52, + "2097224": 52, + "2097228": 52, + "2097232": 35, + "2097233": 69, + "2097237": 67, + "2097238": 34, + "2097239": 16, + "2097240": 119, + "2097241": 81, + "2097242": 33, + "2097243": 32, + "2097244": 20, + "2097245": 20, + "2097246": 20, + "2097247": 20, + "2097250": 2, + "2097251": 20, + "2097252": 68, + "2097253": 85, + "2097254": 17, + "2097255": 34, + "2097256": 170, + "2097257": 191, + "2097258": 240, + "2097259": 18, + "2097260": 119, + "2097261": 208, + "2097266": 255, + "2097267": 35, + "2097268": 18, + "2097269": 52, + "2097270": 86, + "2097271": 120, + "2097272": 135, + "2097273": 101, + "2097274": 67, + "2097275": 33, + "2097276": 51, + "2097277": 68, + "2097278": 17, + "2097279": 36, + "21": 64, + "22": 14, + "23": 19, + "26": 14, + "27": 179, + "3": 151, + "30": 15, + "31": 51, + "32": 3, + "33": 211, + "34": 134, + "35": 99, + "36": 1, + "37": 238, + "38": 14, + "39": 99, + "41": 2, + "42": 160, + "43": 7, + "45": 3, + "46": 32, + "47": 39, + "49": 66, + "5": 2, + "50": 130, + "51": 147, + "53": 67, + "54": 3, + "55": 19, + "57": 31, + "58": 15, + "59": 19, + "6": 130, + "60": 254, + "62": 4, + "63": 227, + "65": 30, + "66": 142, + "67": 147, + "7": 147, + "70": 15, + "71": 51, + "72": 252, + "74": 12, + "75": 227, + "78": 128, + "79": 103, + "9": 32, + }, + registers: { + "f0,ft0": "0xffffffff33441124", + "x28,t3": "0x4", + "x29,t4": "0x4", + "x5,t0": "0x200040", + "x6,t1": "0x200080", + "x7,t2": "0x4", + mtime: "0x8e", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_009.s.snap b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_009.s.snap new file mode 100644 index 000000000..948839d47 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_009.s.snap @@ -0,0 +1,177 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/examples/test_riscv_example_009.s 1`] = ` +{ + display: " +Please, insert the first number: +Please, insert the second number: +The result is: 579 +", + error: false, + keyboard: " 123 456", + memory: { + "1": 32, + "10": 8, + "103": 115, + "106": 128, + "107": 103, + "11": 147, + "15": 115, + "17": 80, + "18": 8, + "19": 147, + "2": 5, + "2097152": 10, + "2097153": 80, + "2097154": 108, + "2097155": 101, + "2097156": 97, + "2097157": 115, + "2097158": 101, + "2097159": 44, + "2097160": 32, + "2097161": 105, + "2097162": 110, + "2097163": 115, + "2097164": 101, + "2097165": 114, + "2097166": 116, + "2097167": 32, + "2097168": 116, + "2097169": 104, + "2097170": 101, + "2097171": 32, + "2097172": 102, + "2097173": 105, + "2097174": 114, + "2097175": 115, + "2097176": 116, + "2097177": 32, + "2097178": 110, + "2097179": 117, + "2097180": 109, + "2097181": 98, + "2097182": 101, + "2097183": 114, + "2097184": 58, + "2097185": 32, + "2097187": 10, + "2097188": 80, + "2097189": 108, + "2097190": 101, + "2097191": 97, + "2097192": 115, + "2097193": 101, + "2097194": 44, + "2097195": 32, + "2097196": 105, + "2097197": 110, + "2097198": 115, + "2097199": 101, + "2097200": 114, + "2097201": 116, + "2097202": 32, + "2097203": 116, + "2097204": 104, + "2097205": 101, + "2097206": 32, + "2097207": 115, + "2097208": 101, + "2097209": 99, + "2097210": 111, + "2097211": 110, + "2097212": 100, + "2097213": 32, + "2097214": 110, + "2097215": 117, + "2097216": 109, + "2097217": 98, + "2097218": 101, + "2097219": 114, + "2097220": 58, + "2097221": 32, + "2097223": 10, + "2097224": 84, + "2097225": 104, + "2097226": 101, + "2097227": 32, + "2097228": 114, + "2097229": 101, + "2097230": 115, + "2097231": 117, + "2097232": 108, + "2097233": 116, + "2097234": 32, + "2097235": 105, + "2097236": 115, + "2097237": 58, + "2097238": 32, + "2097240": 10, + "23": 115, + "25": 5, + "26": 2, + "27": 179, + "29": 32, + "3": 23, + "30": 5, + "31": 23, + "33": 117, + "34": 5, + "35": 19, + "37": 64, + "38": 8, + "39": 147, + "43": 115, + "45": 80, + "46": 8, + "47": 147, + "5": 5, + "51": 115, + "53": 5, + "54": 3, + "55": 51, + "57": 98, + "58": 131, + "59": 179, + "6": 5, + "61": 32, + "62": 5, + "63": 23, + "65": 181, + "66": 5, + "67": 19, + "69": 64, + "7": 19, + "70": 8, + "71": 147, + "75": 115, + "77": 3, + "78": 133, + "79": 51, + "81": 16, + "82": 8, + "83": 147, + "87": 115, + "89": 32, + "9": 64, + "90": 5, + "91": 23, + "93": 5, + "94": 5, + "95": 19, + "97": 64, + "98": 8, + "99": 147, + }, + registers: { + "x10,a0": "0x200058", + "x17,a7": "0x4", + "x5,t0": "0x7b", + "x6,t1": "0x1c8", + "x7,t2": "0x243", + mtime: "0x1b", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_010.s.snap b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_010.s.snap new file mode 100644 index 000000000..7734d0aa9 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_010.s.snap @@ -0,0 +1,223 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/examples/test_riscv_example_010.s 1`] = ` +{ + display: "Insert the string length (no more than 100 characters) Insert the string This is a very long string with many characters and a lot of data. :) 123 +", + error: false, + keyboard: " 74 This is a very long string with many characters and a lot of data. :) 123 +", + memory: { + "1": 32, + "10": 8, + "11": 147, + "15": 115, + "17": 80, + "18": 8, + "19": 147, + "2": 5, + "2097152": 73, + "2097153": 110, + "2097154": 115, + "2097155": 101, + "2097156": 114, + "2097157": 116, + "2097158": 32, + "2097159": 116, + "2097160": 104, + "2097161": 101, + "2097162": 32, + "2097163": 115, + "2097164": 116, + "2097165": 114, + "2097166": 105, + "2097167": 110, + "2097168": 103, + "2097169": 32, + "2097170": 108, + "2097171": 101, + "2097172": 110, + "2097173": 103, + "2097174": 116, + "2097175": 104, + "2097176": 32, + "2097177": 40, + "2097178": 110, + "2097179": 111, + "2097180": 32, + "2097181": 109, + "2097182": 111, + "2097183": 114, + "2097184": 101, + "2097185": 32, + "2097186": 116, + "2097187": 104, + "2097188": 97, + "2097189": 110, + "2097190": 32, + "2097191": 49, + "2097192": 48, + "2097193": 48, + "2097194": 32, + "2097195": 99, + "2097196": 104, + "2097197": 97, + "2097198": 114, + "2097199": 97, + "2097200": 99, + "2097201": 116, + "2097202": 101, + "2097203": 114, + "2097204": 115, + "2097205": 41, + "2097206": 32, + "2097208": 73, + "2097209": 110, + "2097210": 115, + "2097211": 101, + "2097212": 114, + "2097213": 116, + "2097214": 32, + "2097215": 116, + "2097216": 104, + "2097217": 101, + "2097218": 32, + "2097219": 115, + "2097220": 116, + "2097221": 114, + "2097222": 105, + "2097223": 110, + "2097224": 103, + "2097225": 32, + "2097227": 84, + "2097228": 104, + "2097229": 105, + "2097230": 115, + "2097231": 32, + "2097232": 105, + "2097233": 115, + "2097234": 32, + "2097235": 97, + "2097236": 32, + "2097237": 118, + "2097238": 101, + "2097239": 114, + "2097240": 121, + "2097241": 32, + "2097242": 108, + "2097243": 111, + "2097244": 110, + "2097245": 103, + "2097246": 32, + "2097247": 115, + "2097248": 116, + "2097249": 114, + "2097250": 105, + "2097251": 110, + "2097252": 103, + "2097253": 32, + "2097254": 119, + "2097255": 105, + "2097256": 116, + "2097257": 104, + "2097258": 32, + "2097259": 109, + "2097260": 97, + "2097261": 110, + "2097262": 121, + "2097263": 32, + "2097264": 99, + "2097265": 104, + "2097266": 97, + "2097267": 114, + "2097268": 97, + "2097269": 99, + "2097270": 116, + "2097271": 101, + "2097272": 114, + "2097273": 115, + "2097274": 32, + "2097275": 97, + "2097276": 110, + "2097277": 100, + "2097278": 32, + "2097279": 97, + "2097280": 32, + "2097281": 108, + "2097282": 111, + "2097283": 116, + "2097284": 32, + "2097285": 111, + "2097286": 102, + "2097287": 32, + "2097288": 100, + "2097289": 97, + "2097290": 116, + "2097291": 97, + "2097292": 46, + "2097293": 32, + "2097294": 58, + "2097295": 41, + "2097296": 32, + "2097297": 49, + "2097298": 50, + "2097299": 51, + "2097300": 10, + "23": 115, + "25": 5, + "26": 2, + "27": 179, + "29": 32, + "3": 23, + "30": 5, + "31": 23, + "32": 1, + "33": 197, + "34": 5, + "35": 19, + "37": 64, + "38": 8, + "39": 147, + "43": 115, + "45": 32, + "46": 5, + "47": 23, + "48": 1, + "49": 245, + "5": 5, + "50": 5, + "51": 19, + "53": 2, + "54": 133, + "55": 179, + "57": 128, + "58": 8, + "59": 147, + "6": 5, + "63": 115, + "65": 32, + "66": 5, + "67": 23, + "69": 181, + "7": 19, + "70": 5, + "71": 19, + "73": 64, + "74": 8, + "75": 147, + "79": 115, + "82": 128, + "83": 103, + "9": 64, + }, + registers: { + "x10,a0": "0x20004b", + "x11,a1": "0x4a", + "x17,a7": "0x4", + "x5,t0": "0x4a", + mtime: "0x15", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_011.s.snap b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_011.s.snap new file mode 100644 index 000000000..58a4eaf89 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_011.s.snap @@ -0,0 +1,83 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/examples/test_riscv_example_011.s 1`] = ` +{ + display: "-144", + error: false, + keyboard: "", + memory: { + "0": 255, + "1": 193, + "10": 5, + "11": 19, + "12": 251, + "13": 48, + "14": 5, + "15": 147, + "16": 2, + "17": 208, + "18": 6, + "19": 19, + "2": 1, + "20": 1, + "21": 192, + "23": 239, + "24": 2, + "25": 192, + "268435448": 255, + "268435449": 255, + "268435450": 255, + "268435451": 255, + "27": 239, + "29": 16, + "3": 19, + "30": 8, + "31": 147, + "35": 115, + "37": 1, + "38": 32, + "39": 131, + "41": 65, + "42": 1, + "43": 19, + "46": 128, + "47": 103, + "49": 181, + "5": 17, + "50": 3, + "51": 51, + "53": 198, + "54": 3, + "55": 179, + "57": 3, + "58": 5, + "59": 51, + "6": 32, + "61": 3, + "62": 133, + "63": 179, + "66": 128, + "67": 103, + "68": 64, + "69": 181, + "7": 35, + "70": 5, + "71": 51, + "74": 128, + "75": 103, + "8": 1, + "9": 112, + }, + registers: { + "x10,a0": "0xffffff70", + "x11,a1": "0x5a", + "x12,a2": "0x2d", + "x17,a7": "0x1", + "x6,t1": "0xffffffca", + "x7,t2": "0x5a", + mtime: "0x13", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_012.s.snap b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_012.s.snap new file mode 100644 index 000000000..08411b28d --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_012.s.snap @@ -0,0 +1,129 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/examples/test_riscv_example_012.s 1`] = ` +{ + display: "120", + error: false, + keyboard: "", + memory: { + "0": 255, + "1": 193, + "10": 5, + "102": 128, + "103": 103, + "11": 19, + "12": 1, + "13": 128, + "15": 239, + "17": 16, + "18": 8, + "19": 147, + "2": 1, + "23": 115, + "25": 1, + "26": 32, + "268435392": 15, + "268435393": 255, + "268435394": 255, + "268435395": 204, + "268435399": 80, + "268435403": 2, + "268435404": 15, + "268435405": 255, + "268435406": 255, + "268435407": 216, + "268435411": 80, + "268435415": 3, + "268435416": 15, + "268435417": 255, + "268435418": 255, + "268435419": 228, + "268435423": 80, + "268435427": 4, + "268435428": 15, + "268435429": 255, + "268435430": 255, + "268435431": 240, + "268435435": 80, + "268435439": 5, + "268435447": 16, + "268435448": 255, + "268435449": 255, + "268435450": 255, + "268435451": 255, + "27": 131, + "29": 65, + "3": 19, + "30": 1, + "31": 19, + "34": 128, + "35": 103, + "36": 255, + "37": 65, + "38": 1, + "39": 19, + "41": 17, + "42": 36, + "43": 35, + "45": 129, + "46": 34, + "47": 35, + "49": 65, + "5": 17, + "50": 4, + "51": 19, + "53": 32, + "54": 2, + "55": 147, + "57": 85, + "58": 86, + "59": 99, + "6": 32, + "61": 16, + "62": 5, + "63": 19, + "66": 12, + "67": 99, + "68": 254, + "69": 164, + "7": 35, + "70": 46, + "71": 35, + "72": 255, + "73": 245, + "74": 5, + "75": 19, + "76": 253, + "77": 159, + "78": 240, + "79": 239, + "80": 255, + "81": 196, + "82": 35, + "83": 3, + "84": 2, + "85": 101, + "86": 5, + "87": 51, + "89": 129, + "9": 80, + "90": 32, + "91": 131, + "93": 65, + "94": 36, + "95": 3, + "97": 193, + "98": 1, + "99": 19, + }, + registers: { + "x10,a0": "0x78", + "x17,a7": "0x1", + "x5,t0": "0x2", + "x6,t1": "0x5", + mtime: "0x51", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_013.s.snap b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_013.s.snap new file mode 100644 index 000000000..312fa8936 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_013.s.snap @@ -0,0 +1,78 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/examples/test_riscv_example_013.s 1`] = ` +{ + display: "83116114105110103321051103285847045565832226136128322261361713222613613532226136136322401591601720", + error: false, + keyboard: "", + memory: { + "1": 16, + "10": 130, + "11": 147, + "13": 2, + "14": 133, + "15": 3, + "19": 115, + "2": 8, + "2097152": 83, + "2097153": 116, + "2097154": 114, + "2097155": 105, + "2097156": 110, + "2097157": 103, + "2097158": 32, + "2097159": 105, + "2097160": 110, + "2097161": 32, + "2097162": 85, + "2097163": 84, + "2097164": 70, + "2097165": 45, + "2097166": 56, + "2097167": 58, + "2097168": 32, + "2097169": 226, + "2097170": 136, + "2097171": 128, + "2097172": 32, + "2097173": 226, + "2097174": 136, + "2097175": 171, + "2097176": 32, + "2097177": 226, + "2097178": 136, + "2097179": 135, + "2097180": 32, + "2097181": 226, + "2097182": 136, + "2097183": 136, + "2097184": 32, + "2097185": 240, + "2097186": 159, + "2097187": 160, + "2097188": 172, + "21": 18, + "22": 130, + "23": 147, + "24": 254, + "25": 5, + "26": 26, + "27": 227, + "3": 147, + "30": 128, + "31": 103, + "5": 32, + "6": 2, + "7": 151, + "8": 255, + "9": 194, + }, + registers: { + "x17,a7": "0x1", + "x5,t0": "0x200026", + mtime: "0x9c", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_014.s.snap b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_014.s.snap new file mode 100644 index 000000000..6c18595ad --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_014.s.snap @@ -0,0 +1,221 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/examples/test_riscv_example_014.s 1`] = ` +{ + display: "91", + error: false, + keyboard: "", + memory: { + "0": 255, + "1": 1, + "10": 36, + "101": 133, + "102": 5, + "103": 51, + "105": 1, + "106": 37, + "107": 131, + "109": 129, + "11": 35, + "110": 36, + "111": 3, + "113": 193, + "114": 32, + "115": 131, + "116": 1, + "117": 1, + "118": 1, + "119": 19, + "122": 128, + "123": 103, + "124": 255, + "125": 65, + "126": 1, + "127": 19, + "129": 17, + "13": 145, + "130": 36, + "131": 35, + "133": 177, + "134": 34, + "135": 35, + "137": 193, + "138": 32, + "139": 35, + "14": 34, + "140": 1, + "141": 192, + "143": 239, + "145": 1, + "146": 34, + "147": 131, + "149": 85, + "15": 35, + "150": 5, + "151": 51, + "153": 65, + "154": 37, + "155": 131, + "157": 129, + "158": 32, + "159": 131, + "16": 1, + "161": 193, + "162": 1, + "163": 19, + "166": 128, + "167": 103, + "168": 255, + "169": 129, + "17": 33, + "170": 1, + "171": 19, + "173": 17, + "174": 34, + "175": 35, + "177": 177, + "178": 32, + "179": 35, + "18": 32, + "180": 1, + "181": 128, + "183": 239, + "185": 1, + "186": 37, + "187": 131, + "188": 2, + "189": 64, + "19": 35, + "191": 239, + "193": 65, + "194": 32, + "195": 131, + "197": 129, + "198": 1, + "199": 19, + "2": 1, + "20": 1, + "202": 128, + "203": 103, + "205": 181, + "206": 3, + "207": 51, + "209": 198, + "21": 112, + "210": 3, + "211": 179, + "213": 3, + "214": 5, + "215": 51, + "217": 3, + "218": 133, + "219": 179, + "22": 5, + "222": 128, + "223": 103, + "224": 64, + "225": 181, + "226": 5, + "227": 51, + "23": 19, + "230": 128, + "231": 103, + "24": 251, + "25": 48, + "26": 5, + "268435400": 255, + "268435401": 255, + "268435402": 255, + "268435403": 179, + "268435407": 144, + "268435411": 45, + "268435412": 255, + "268435413": 255, + "268435414": 255, + "268435415": 179, + "268435419": 100, + "268435420": 255, + "268435421": 255, + "268435422": 255, + "268435423": 179, + "268435427": 23, + "268435435": 36, + "268435448": 255, + "268435449": 255, + "268435450": 255, + "268435451": 255, + "27": 147, + "28": 2, + "29": 208, + "3": 19, + "30": 6, + "31": 19, + "32": 2, + "33": 128, + "35": 239, + "37": 5, + "38": 4, + "39": 19, + "41": 16, + "42": 8, + "43": 147, + "47": 115, + "49": 1, + "5": 17, + "50": 41, + "51": 3, + "53": 65, + "54": 36, + "55": 131, + "57": 129, + "58": 36, + "59": 3, + "6": 38, + "61": 193, + "62": 32, + "63": 131, + "64": 1, + "65": 1, + "66": 1, + "67": 19, + "7": 35, + "70": 128, + "71": 103, + "72": 255, + "73": 1, + "74": 1, + "75": 19, + "77": 17, + "78": 38, + "79": 35, + "81": 129, + "82": 36, + "83": 35, + "85": 161, + "86": 34, + "87": 35, + "89": 177, + "9": 129, + "90": 32, + "91": 35, + "93": 5, + "94": 4, + "95": 19, + "96": 1, + "97": 192, + "99": 239, + }, + registers: { + "x10,a0": "0x5b", + "x11,a1": "0xffffffb3", + "x12,a2": "0x2d", + "x17,a7": "0x1", + "x5,t0": "0x2d", + "x6,t1": "0xffffffca", + "x7,t2": "0x5a", + mtime: "0x3a", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_015.s.snap b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_015.s.snap new file mode 100644 index 000000000..8ffc81532 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_015.s.snap @@ -0,0 +1,126 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/examples/test_riscv_example_015.s 1`] = ` +{ + display: "hello world", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 2, + "101": 83, + "102": 5, + "103": 163, + "105": 3, + "106": 5, + "107": 19, + "109": 64, + "11": 147, + "110": 8, + "111": 147, + "115": 115, + "117": 160, + "118": 8, + "119": 147, + "123": 115, + "13": 83, + "15": 35, + "16": 6, + "17": 80, + "18": 2, + "19": 147, + "2": 3, + "2097152": 104, + "2097153": 101, + "2097154": 108, + "2097155": 108, + "2097156": 111, + "2097157": 32, + "2097158": 119, + "2097159": 111, + "2097160": 114, + "2097161": 108, + "2097162": 100, + "21": 83, + "23": 163, + "24": 6, + "25": 192, + "26": 2, + "27": 147, + "29": 83, + "3": 55, + "30": 1, + "31": 35, + "32": 6, + "33": 192, + "34": 2, + "35": 147, + "37": 83, + "38": 1, + "39": 163, + "40": 6, + "41": 240, + "42": 2, + "43": 147, + "45": 83, + "46": 2, + "47": 35, + "48": 2, + "5": 3, + "50": 2, + "51": 147, + "53": 83, + "54": 2, + "55": 163, + "56": 7, + "57": 112, + "58": 2, + "59": 147, + "6": 3, + "61": 83, + "62": 3, + "63": 35, + "64": 6, + "65": 240, + "66": 2, + "67": 147, + "69": 83, + "7": 19, + "70": 3, + "71": 163, + "72": 7, + "73": 32, + "74": 2, + "75": 147, + "77": 83, + "78": 4, + "79": 35, + "8": 6, + "80": 6, + "81": 192, + "82": 2, + "83": 147, + "85": 83, + "86": 4, + "87": 163, + "88": 6, + "89": 64, + "9": 128, + "90": 2, + "91": 147, + "93": 83, + "94": 5, + "95": 35, + "98": 2, + "99": 147, + }, + registers: { + "x10,a0": "0x200000", + "x17,a7": "0xa", + "x6,t1": "0x200000", + mtime: "0x1f", + pc: "0x7c", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_tutorial_001.s.snap b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_tutorial_001.s.snap new file mode 100644 index 000000000..1cbc7b4e0 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_tutorial_001.s.snap @@ -0,0 +1,71 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/examples/test_riscv_tutorial_001.s 1`] = ` +{ + display: "2097152This is a string", + error: false, + keyboard: "", + memory: { + "0": 18, + "1": 48, + "10": 5, + "11": 19, + "13": 5, + "14": 37, + "15": 131, + "17": 16, + "18": 8, + "19": 147, + "2": 3, + "2097152": 18, + "2097153": 52, + "2097154": 86, + "2097155": 120, + "2097156": 84, + "2097157": 104, + "2097158": 105, + "2097159": 115, + "2097160": 32, + "2097161": 105, + "2097162": 115, + "2097163": 32, + "2097164": 97, + "2097165": 32, + "2097166": 115, + "2097167": 116, + "2097168": 114, + "2097169": 105, + "2097170": 110, + "2097171": 103, + "23": 115, + "25": 32, + "26": 5, + "27": 23, + "28": 254, + "29": 197, + "3": 19, + "30": 5, + "31": 19, + "33": 64, + "34": 8, + "35": 147, + "39": 115, + "42": 128, + "43": 103, + "5": 32, + "6": 5, + "7": 23, + "8": 255, + "9": 197, + }, + registers: { + "x10,a0": "0x200004", + "x11,a1": "0x12345678", + "x17,a7": "0x4", + "x6,t1": "0x123", + mtime: "0xb", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_001.s.snap b/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_001.s.snap new file mode 100644 index 000000000..7b15a7f13 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_001.s.snap @@ -0,0 +1,117 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/syscalls/test_riscv_syscall_001.s 1`] = ` +{ + display: "667312034-56781316893491This is a string", + error: false, + keyboard: "", + memory: { + "1": 16, + "10": 5, + "102": 128, + "103": 103, + "11": 19, + "15": 115, + "17": 32, + "18": 3, + "19": 23, + "2": 8, + "20": 255, + "2097152": 120, + "2097153": 255, + "2097155": 34, + "2097156": 255, + "2097157": 255, + "2097158": 233, + "2097159": 210, + "2097160": 84, + "2097161": 104, + "2097162": 105, + "2097163": 115, + "2097164": 32, + "2097165": 105, + "2097166": 115, + "2097167": 32, + "2097168": 97, + "2097169": 32, + "2097170": 115, + "2097171": 116, + "2097172": 114, + "2097173": 105, + "2097174": 110, + "2097175": 103, + "2097180": 63, + "2097181": 140, + "2097182": 204, + "2097183": 205, + "21": 3, + "22": 3, + "23": 19, + "25": 3, + "26": 5, + "27": 3, + "3": 147, + "31": 115, + "33": 32, + "34": 3, + "35": 23, + "36": 254, + "37": 35, + "38": 3, + "39": 19, + "41": 3, + "42": 21, + "43": 3, + "47": 115, + "49": 32, + "50": 3, + "51": 23, + "52": 253, + "53": 67, + "54": 3, + "55": 19, + "57": 3, + "58": 37, + "59": 3, + "6": 37, + "63": 115, + "65": 32, + "66": 3, + "67": 23, + "68": 253, + "69": 195, + "7": 55, + "70": 3, + "71": 19, + "73": 3, + "74": 32, + "75": 7, + "76": 224, + "78": 5, + "79": 83, + "8": 161, + "83": 115, + "85": 64, + "86": 8, + "87": 147, + "89": 32, + "9": 21, + "90": 5, + "91": 23, + "92": 251, + "93": 5, + "94": 5, + "95": 19, + "99": 115, + }, + registers: { + "f0,ft0": "0xffffffff3f8ccccd", + "x10,a0": "0x200008", + "x17,a7": "0x4", + "x6,t1": "0x20001c", + mtime: "0x1a", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_002.s.snap b/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_002.s.snap new file mode 100644 index 000000000..69ba4738c --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_002.s.snap @@ -0,0 +1,52 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/syscalls/test_riscv_syscall_002.s 1`] = ` +{ + display: "6673-861", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 130, + "11": 147, + "12": 208, + "13": 2, + "14": 133, + "15": 83, + "19": 115, + "2": 8, + "20": 250, + "21": 160, + "22": 2, + "23": 147, + "24": 208, + "25": 2, + "26": 133, + "27": 83, + "3": 147, + "31": 115, + "33": 16, + "34": 2, + "35": 147, + "36": 208, + "37": 2, + "38": 133, + "39": 83, + "43": 115, + "46": 128, + "47": 103, + "6": 34, + "7": 183, + "8": 161, + "9": 18, + }, + registers: { + "f10,fa0": "0xffffffff3f800000", + "x17,a7": "0x2", + "x5,t0": "0x1", + mtime: "0xc", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_003.s.snap b/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_003.s.snap new file mode 100644 index 000000000..d3220d1c7 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_003.s.snap @@ -0,0 +1,52 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/syscalls/test_riscv_syscall_003.s 1`] = ` +{ + display: "6673-861", + error: false, + keyboard: "", + memory: { + "1": 48, + "10": 130, + "11": 147, + "12": 210, + "13": 2, + "14": 133, + "15": 83, + "19": 115, + "2": 8, + "20": 250, + "21": 160, + "22": 2, + "23": 147, + "24": 210, + "25": 2, + "26": 133, + "27": 83, + "3": 147, + "31": 115, + "33": 16, + "34": 2, + "35": 147, + "36": 210, + "37": 2, + "38": 133, + "39": 83, + "43": 115, + "46": 128, + "47": 103, + "6": 34, + "7": 183, + "8": 161, + "9": 18, + }, + registers: { + "f10,fa0": "0x3ff0000000000000", + "x17,a7": "0x3", + "x5,t0": "0x1", + mtime: "0xc", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_004.s.snap b/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_004.s.snap new file mode 100644 index 000000000..2803b1ca4 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_004.s.snap @@ -0,0 +1,81 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/syscalls/test_riscv_syscall_004.s 1`] = ` +{ + display: "First StringSecond Stringa +", + error: false, + keyboard: "", + memory: { + "1": 64, + "10": 5, + "11": 19, + "15": 115, + "17": 32, + "18": 5, + "19": 23, + "2": 8, + "20": 255, + "2097152": 70, + "2097153": 105, + "2097154": 114, + "2097155": 115, + "2097156": 116, + "2097157": 32, + "2097158": 83, + "2097159": 116, + "2097160": 114, + "2097161": 105, + "2097162": 110, + "2097163": 103, + "2097165": 83, + "2097166": 101, + "2097167": 99, + "2097168": 111, + "2097169": 110, + "2097170": 100, + "2097171": 32, + "2097172": 83, + "2097173": 116, + "2097174": 114, + "2097175": 105, + "2097176": 110, + "2097177": 103, + "2097179": 97, + "21": 213, + "22": 5, + "23": 19, + "27": 115, + "29": 32, + "3": 147, + "30": 5, + "31": 23, + "32": 255, + "33": 245, + "34": 5, + "35": 19, + "39": 115, + "41": 160, + "42": 5, + "43": 19, + "45": 176, + "46": 8, + "47": 147, + "5": 32, + "51": 115, + "54": 128, + "55": 103, + "6": 5, + "7": 23, + "8": 255, + "9": 197, + }, + registers: { + "x10,a0": "0xa", + "x17,a7": "0xb", + mtime: "0xe", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_005.s.snap b/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_005.s.snap new file mode 100644 index 000000000..f0eecc9ea --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_005.s.snap @@ -0,0 +1,24 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/syscalls/test_riscv_syscall_005.s 1`] = ` +{ + display: "", + error: false, + keyboard: " 1234567", + memory: { + "1": 80, + "10": 128, + "11": 103, + "2": 8, + "3": 147, + "7": 115, + }, + registers: { + "x10,a0": "0x12d687", + "x17,a7": "0x5", + mtime: "0x3", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_006.s.snap b/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_006.s.snap new file mode 100644 index 000000000..0f0971512 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_006.s.snap @@ -0,0 +1,24 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/syscalls/test_riscv_syscall_006.s 1`] = ` +{ + display: "", + error: false, + keyboard: " 1.234567", + memory: { + "1": 96, + "10": 128, + "11": 103, + "2": 8, + "3": 147, + "7": 115, + }, + registers: { + "f10,fa0": "0x3f9e064b", + "x17,a7": "0x6", + mtime: "0x3", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_008.s.snap b/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_008.s.snap new file mode 100644 index 000000000..c3bb3aaba --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_008.s.snap @@ -0,0 +1,41 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/syscalls/test_riscv_syscall_008.s 1`] = ` +{ + display: "", + error: false, + keyboard: " This is a long string +", + memory: { + "1": 128, + "10": 5, + "11": 19, + "13": 80, + "14": 5, + "15": 147, + "19": 115, + "2": 8, + "2097152": 84, + "2097153": 104, + "2097154": 105, + "2097155": 115, + "2097156": 32, + "22": 128, + "23": 103, + "3": 147, + "5": 32, + "6": 5, + "7": 23, + "8": 255, + "9": 197, + }, + registers: { + "x10,a0": "0x200000", + "x11,a1": "0x5", + "x17,a7": "0x8", + mtime: "0x6", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_010.s.snap b/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_010.s.snap new file mode 100644 index 000000000..a0a109688 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_010.s.snap @@ -0,0 +1,27 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/syscalls/test_riscv_syscall_010.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 160, + "10": 2, + "11": 147, + "14": 128, + "15": 103, + "2": 8, + "3": 147, + "7": 115, + "8": 28, + "9": 80, + }, + registers: { + "x17,a7": "0xa", + mtime: "0x2", + pc: "0x8", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_011.s.snap b/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_011.s.snap new file mode 100644 index 000000000..6b8f0e75c --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_011.s.snap @@ -0,0 +1,28 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/syscalls/test_riscv_syscall_011.s 1`] = ` +{ + display: "c", + error: false, + keyboard: "", + memory: { + "1": 176, + "11": 115, + "14": 128, + "15": 103, + "2": 8, + "3": 147, + "4": 6, + "5": 48, + "6": 5, + "7": 19, + }, + registers: { + "x10,a0": "0x63", + "x17,a7": "0xb", + mtime: "0x4", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_012.s.snap b/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_012.s.snap new file mode 100644 index 000000000..80a8b24f4 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_012.s.snap @@ -0,0 +1,24 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/syscalls/test_riscv_syscall_012.s 1`] = ` +{ + display: "", + error: false, + keyboard: " a", + memory: { + "1": 192, + "10": 128, + "11": 103, + "2": 8, + "3": 147, + "7": 115, + }, + registers: { + "x10,a0": "0x61", + "x17,a7": "0xc", + mtime: "0x3", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_001.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_001.s.snap new file mode 100644 index 000000000..39793573c --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_001.s.snap @@ -0,0 +1,49 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_001.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 160, + "10": 3, + "11": 147, + "12": 1, + "14": 4, + "15": 55, + "16": 255, + "17": 244, + "18": 4, + "19": 19, + "2": 2, + "21": 98, + "22": 132, + "23": 179, + "25": 147, + "26": 133, + "27": 51, + "29": 164, + "3": 147, + "30": 5, + "31": 179, + "34": 128, + "35": 103, + "4": 254, + "5": 32, + "6": 3, + "7": 19, + }, + registers: { + "x10,a0": "0xffffffec", + "x11,a1": "0xffffeb", + "x5,t0": "0xa", + "x6,t1": "0xffffffe2", + "x8,fp,s0": "0xffffff", + "x9,s1": "0xffffffec", + mtime: "0x9", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_002.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_002.s.snap new file mode 100644 index 000000000..20a7e772f --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_002.s.snap @@ -0,0 +1,36 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_002.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 160, + "10": 133, + "11": 19, + "13": 197, + "14": 5, + "15": 147, + "18": 128, + "19": 103, + "2": 2, + "3": 147, + "4": 254, + "5": 34, + "6": 132, + "7": 147, + "8": 25, + "9": 180, + }, + registers: { + "x10,a0": "0x187", + "x11,a1": "0x193", + "x5,t0": "0xa", + "x9,s1": "0xffffffec", + mtime: "0x5", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_003.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_003.s.snap new file mode 100644 index 000000000..aeecc28e9 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_003.s.snap @@ -0,0 +1,55 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_003.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 34, + "1": 48, + "10": 3, + "11": 147, + "13": 18, + "14": 52, + "15": 55, + "16": 81, + "17": 84, + "18": 4, + "19": 19, + "2": 2, + "20": 64, + "21": 98, + "22": 132, + "23": 179, + "24": 64, + "25": 147, + "26": 133, + "27": 51, + "28": 64, + "29": 164, + "3": 147, + "30": 5, + "31": 179, + "34": 128, + "35": 103, + "4": 197, + "5": 112, + "6": 3, + "7": 19, + "9": 192, + }, + registers: { + "x10,a0": "0xfffffa40", + "x11,a1": "0x123ad5", + "x5,t0": "0x223", + "x6,t1": "0xfffffc57", + "x7,t2": "0xc", + "x8,fp,s0": "0x123515", + "x9,s1": "0x5cc", + mtime: "0x9", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_004.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_004.s.snap new file mode 100644 index 000000000..8ba0a97d5 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_004.s.snap @@ -0,0 +1,38 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_004.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 2, + "10": 67, + "11": 183, + "12": 255, + "14": 36, + "15": 55, + "18": 36, + "19": 183, + "2": 50, + "22": 128, + "23": 103, + "3": 183, + "4": 5, + "5": 109, + "6": 179, + "7": 55, + "9": 3, + }, + registers: { + "x5,t0": "0x23000", + "x6,t1": "0x56db000", + "x7,t2": "0x34000", + "x8,fp,s0": "0xff002000", + "x9,s1": "0x2000", + mtime: "0x6", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_005.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_005.s.snap new file mode 100644 index 000000000..24bd3e43d --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_005.s.snap @@ -0,0 +1,58 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_005.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 34, + "1": 48, + "10": 3, + "11": 147, + "13": 18, + "14": 52, + "15": 55, + "16": 81, + "17": 84, + "18": 4, + "19": 19, + "2": 2, + "20": 1, + "23": 239, + "24": 64, + "25": 98, + "26": 132, + "27": 179, + "28": 64, + "29": 147, + "3": 147, + "30": 133, + "31": 51, + "32": 64, + "33": 164, + "34": 5, + "35": 179, + "37": 160, + "38": 8, + "39": 147, + "4": 197, + "43": 115, + "5": 112, + "6": 3, + "7": 19, + "9": 192, + }, + registers: { + "x1,ra": "0x18", + "x17,a7": "0xa", + "x5,t0": "0x223", + "x6,t1": "0xfffffc57", + "x7,t2": "0xc", + "x8,fp,s0": "0x123515", + mtime: "0x8", + pc: "0x2c", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_006.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_006.s.snap new file mode 100644 index 000000000..2aab05046 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_006.s.snap @@ -0,0 +1,61 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_006.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 34, + "1": 48, + "10": 3, + "11": 147, + "13": 18, + "14": 52, + "15": 55, + "16": 81, + "17": 84, + "18": 4, + "19": 19, + "2": 2, + "21": 64, + "23": 111, + "24": 2, + "25": 128, + "27": 231, + "28": 64, + "29": 98, + "3": 147, + "30": 132, + "31": 179, + "32": 64, + "33": 147, + "34": 133, + "35": 51, + "36": 64, + "37": 164, + "38": 5, + "39": 179, + "4": 197, + "41": 160, + "42": 8, + "43": 147, + "47": 115, + "5": 112, + "6": 3, + "7": 19, + "9": 192, + }, + registers: { + "x1,ra": "0x1c", + "x17,a7": "0xa", + "x5,t0": "0x223", + "x6,t1": "0xfffffc57", + "x7,t2": "0xc", + "x8,fp,s0": "0x123515", + mtime: "0x9", + pc: "0x30", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_007.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_007.s.snap new file mode 100644 index 000000000..3d1143eed --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_007.s.snap @@ -0,0 +1,66 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_007.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 4, + "10": 3, + "11": 19, + "13": 80, + "14": 3, + "15": 147, + "17": 4, + "18": 68, + "19": 55, + "2": 66, + "20": 86, + "21": 36, + "22": 4, + "23": 19, + "25": 83, + "26": 138, + "27": 99, + "29": 98, + "3": 183, + "30": 136, + "31": 99, + "32": 2, + "33": 32, + "34": 14, + "35": 19, + "37": 160, + "38": 8, + "39": 147, + "4": 86, + "43": 115, + "45": 176, + "46": 2, + "47": 147, + "48": 34, + "49": 176, + "5": 34, + "50": 3, + "51": 19, + "52": 254, + "54": 6, + "55": 227, + "6": 130, + "7": 147, + "9": 32, + }, + registers: { + "x17,a7": "0xa", + "x28,t3": "0x22", + "x5,t0": "0x44562", + "x6,t1": "0x2", + "x7,t2": "0x5", + "x8,fp,s0": "0x44562", + mtime: "0xb", + pc: "0x2c", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_008.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_008.s.snap new file mode 100644 index 000000000..61a54cef8 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_008.s.snap @@ -0,0 +1,62 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_008.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 22, + "1": 144, + "10": 3, + "11": 147, + "13": 4, + "14": 68, + "15": 55, + "16": 86, + "17": 36, + "18": 4, + "19": 19, + "2": 2, + "21": 114, + "22": 152, + "23": 99, + "24": 2, + "25": 32, + "26": 14, + "27": 19, + "29": 160, + "3": 147, + "30": 8, + "31": 147, + "35": 115, + "36": 117, + "37": 64, + "38": 2, + "39": 147, + "40": 34, + "41": 176, + "42": 3, + "43": 19, + "44": 254, + "45": 98, + "46": 150, + "47": 227, + "5": 32, + "6": 3, + "7": 19, + "9": 80, + }, + registers: { + "x17,a7": "0xa", + "x28,t3": "0x22", + "x5,t0": "0x754", + "x6,t1": "0x22b", + "x7,t2": "0x5", + "x8,fp,s0": "0x44562", + mtime: "0xc", + pc: "0x24", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_009.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_009.s.snap new file mode 100644 index 000000000..86fa6b008 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_009.s.snap @@ -0,0 +1,67 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_009.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 22, + "1": 144, + "10": 3, + "11": 147, + "13": 4, + "14": 68, + "15": 55, + "16": 86, + "17": 36, + "18": 4, + "19": 19, + "2": 2, + "21": 114, + "22": 202, + "23": 99, + "25": 83, + "26": 72, + "27": 99, + "28": 2, + "29": 32, + "3": 147, + "30": 14, + "31": 19, + "33": 160, + "34": 8, + "35": 147, + "39": 115, + "40": 117, + "41": 64, + "42": 4, + "43": 147, + "44": 34, + "45": 176, + "46": 5, + "47": 19, + "48": 254, + "49": 149, + "5": 32, + "50": 70, + "51": 227, + "6": 3, + "7": 19, + "9": 80, + }, + registers: { + "x10,a0": "0x22b", + "x17,a7": "0xa", + "x28,t3": "0x22", + "x5,t0": "0x169", + "x6,t1": "0x2", + "x7,t2": "0x5", + "x8,fp,s0": "0x44562", + "x9,s1": "0x754", + mtime: "0xd", + pc: "0x28", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_010.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_010.s.snap new file mode 100644 index 000000000..99f9ae882 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_010.s.snap @@ -0,0 +1,66 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_010.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 22, + "1": 144, + "10": 3, + "11": 147, + "13": 4, + "14": 68, + "15": 55, + "16": 86, + "17": 36, + "18": 4, + "19": 19, + "2": 2, + "21": 130, + "22": 218, + "23": 99, + "25": 84, + "26": 88, + "27": 99, + "28": 2, + "29": 32, + "3": 147, + "30": 14, + "31": 19, + "33": 160, + "34": 8, + "35": 147, + "39": 115, + "40": 117, + "41": 64, + "42": 2, + "43": 147, + "44": 34, + "45": 176, + "46": 15, + "47": 147, + "48": 254, + "49": 98, + "5": 32, + "50": 214, + "51": 227, + "6": 3, + "7": 19, + "9": 80, + }, + registers: { + "x17,a7": "0xa", + "x28,t3": "0x22", + "x31,t6": "0x22b", + "x5,t0": "0x754", + "x6,t1": "0x2", + "x7,t2": "0x5", + "x8,fp,s0": "0x44562", + mtime: "0xd", + pc: "0x28", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_011.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_011.s.snap new file mode 100644 index 000000000..e0c5bd98b --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_011.s.snap @@ -0,0 +1,67 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_011.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 22, + "1": 144, + "10": 3, + "11": 147, + "13": 4, + "14": 68, + "15": 55, + "16": 86, + "17": 36, + "18": 4, + "19": 19, + "2": 2, + "21": 114, + "22": 234, + "23": 99, + "25": 83, + "26": 104, + "27": 99, + "28": 2, + "29": 32, + "3": 147, + "30": 14, + "31": 19, + "33": 160, + "34": 8, + "35": 147, + "39": 115, + "40": 117, + "41": 64, + "42": 4, + "43": 147, + "44": 34, + "45": 176, + "46": 5, + "47": 19, + "48": 254, + "49": 149, + "5": 32, + "50": 102, + "51": 227, + "6": 3, + "7": 19, + "9": 80, + }, + registers: { + "x10,a0": "0x22b", + "x17,a7": "0xa", + "x28,t3": "0x22", + "x5,t0": "0x169", + "x6,t1": "0x2", + "x7,t2": "0x5", + "x8,fp,s0": "0x44562", + "x9,s1": "0x754", + mtime: "0xd", + pc: "0x28", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_012.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_012.s.snap new file mode 100644 index 000000000..aa0c49dab --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_012.s.snap @@ -0,0 +1,66 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_012.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 22, + "1": 144, + "10": 3, + "11": 147, + "13": 4, + "14": 68, + "15": 55, + "16": 86, + "17": 36, + "18": 4, + "19": 19, + "2": 2, + "21": 130, + "22": 250, + "23": 99, + "25": 84, + "26": 120, + "27": 99, + "28": 2, + "29": 32, + "3": 147, + "30": 14, + "31": 19, + "33": 160, + "34": 8, + "35": 147, + "39": 115, + "40": 117, + "41": 64, + "42": 2, + "43": 147, + "44": 34, + "45": 176, + "46": 15, + "47": 147, + "48": 254, + "49": 98, + "5": 32, + "50": 246, + "51": 227, + "6": 3, + "7": 19, + "9": 80, + }, + registers: { + "x17,a7": "0xa", + "x28,t3": "0x22", + "x31,t6": "0x22b", + "x5,t0": "0x754", + "x6,t1": "0x2", + "x7,t2": "0x5", + "x8,fp,s0": "0x44562", + mtime: "0xd", + pc: "0x28", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_013.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_013.s.snap new file mode 100644 index 000000000..28d1fef2f --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_013.s.snap @@ -0,0 +1,91 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_013.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 3, + "11": 23, + "12": 255, + "13": 195, + "14": 3, + "15": 19, + "17": 32, + "18": 3, + "19": 151, + "2": 2, + "20": 255, + "2097155": 14, + "2097156": 127, + "2097158": 127, + "2097159": 255, + "2097163": 14, + "2097164": 127, + "2097166": 127, + "2097167": 255, + "21": 99, + "22": 131, + "23": 147, + "25": 2, + "26": 164, + "27": 3, + "29": 3, + "3": 151, + "30": 5, + "31": 3, + "33": 3, + "34": 150, + "35": 3, + "37": 32, + "38": 7, + "39": 23, + "40": 254, + "41": 71, + "42": 7, + "43": 19, + "45": 135, + "46": 32, + "47": 35, + "49": 32, + "5": 2, + "50": 7, + "51": 23, + "52": 253, + "53": 199, + "54": 7, + "55": 19, + "57": 167, + "59": 35, + "6": 130, + "61": 32, + "62": 7, + "63": 23, + "64": 253, + "65": 39, + "66": 7, + "67": 19, + "69": 199, + "7": 147, + "70": 16, + "71": 35, + "74": 128, + "75": 103, + "9": 32, + }, + registers: { + "x10,a0": "0x7f", + "x12,a2": "0x7fff", + "x14,a4": "0x20000e", + "x5,t0": "0x200000", + "x6,t1": "0x200004", + "x7,t2": "0x200006", + "x8,fp,s0": "0xe", + mtime: "0x13", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_014.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_014.s.snap new file mode 100644 index 000000000..a292e0e0c --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_014.s.snap @@ -0,0 +1,67 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_014.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 3, + "11": 151, + "12": 255, + "13": 163, + "14": 131, + "15": 147, + "17": 3, + "18": 69, + "19": 3, + "2": 3, + "2097152": 127, + "2097154": 255, + "2097155": 255, + "2097156": 127, + "2097158": 255, + "2097159": 255, + "21": 3, + "22": 214, + "23": 3, + "25": 32, + "26": 7, + "27": 23, + "28": 254, + "29": 199, + "3": 23, + "30": 7, + "31": 19, + "33": 167, + "35": 35, + "37": 32, + "38": 7, + "39": 23, + "40": 254, + "41": 39, + "42": 7, + "43": 19, + "45": 199, + "46": 16, + "47": 35, + "5": 3, + "50": 128, + "51": 103, + "6": 3, + "7": 19, + "9": 32, + }, + registers: { + "x10,a0": "0x7f", + "x12,a2": "0xffff", + "x14,a4": "0x200006", + "x6,t1": "0x200000", + "x7,t2": "0x200002", + mtime: "0xd", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_015.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_015.s.snap new file mode 100644 index 000000000..add3f7ae4 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_015.s.snap @@ -0,0 +1,62 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_015.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 47, + "10": 163, + "11": 19, + "12": 47, + "13": 2, + "14": 163, + "15": 147, + "16": 47, + "17": 18, + "18": 164, + "19": 19, + "2": 2, + "20": 47, + "21": 34, + "22": 164, + "23": 147, + "24": 191, + "25": 245, + "26": 37, + "27": 147, + "28": 192, + "29": 5, + "3": 147, + "30": 38, + "31": 19, + "32": 192, + "33": 21, + "34": 38, + "35": 147, + "36": 192, + "37": 37, + "38": 39, + "39": 19, + "4": 192, + "42": 128, + "43": 103, + "6": 5, + "7": 19, + "8": 46, + "9": 242, + }, + registers: { + "x10,a0": "0xfffffc00", + "x13,a3": "0x1", + "x14,a4": "0x1", + "x5,t0": "0x2f0", + "x8,fp,s0": "0x1", + "x9,s1": "0x1", + mtime: "0xb", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_016.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_016.s.snap new file mode 100644 index 000000000..cf00a3cfa --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_016.s.snap @@ -0,0 +1,62 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_016.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 47, + "10": 179, + "11": 19, + "12": 47, + "13": 2, + "14": 179, + "15": 147, + "16": 47, + "17": 18, + "18": 180, + "19": 19, + "2": 2, + "20": 47, + "21": 34, + "22": 180, + "23": 147, + "24": 191, + "25": 245, + "26": 53, + "27": 147, + "28": 192, + "29": 5, + "3": 147, + "30": 54, + "31": 19, + "32": 192, + "33": 21, + "34": 54, + "35": 147, + "36": 192, + "37": 37, + "38": 55, + "39": 19, + "4": 192, + "42": 128, + "43": 103, + "6": 5, + "7": 19, + "8": 46, + "9": 242, + }, + registers: { + "x10,a0": "0xfffffc00", + "x13,a3": "0x1", + "x14,a4": "0x1", + "x5,t0": "0x2f0", + "x8,fp,s0": "0x1", + "x9,s1": "0x1", + mtime: "0xb", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_017.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_017.s.snap new file mode 100644 index 000000000..65e9a59a2 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_017.s.snap @@ -0,0 +1,57 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_017.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 2, + "10": 19, + "11": 55, + "12": 29, + "13": 115, + "14": 3, + "15": 19, + "16": 255, + "17": 255, + "18": 227, + "19": 183, + "2": 34, + "20": 175, + "21": 35, + "22": 131, + "23": 147, + "24": 69, + "25": 82, + "26": 196, + "27": 19, + "28": 34, + "29": 35, + "3": 183, + "30": 68, + "31": 147, + "32": 127, + "33": 243, + "34": 197, + "35": 19, + "38": 128, + "39": 103, + "4": 52, + "5": 98, + "6": 130, + "7": 147, + }, + registers: { + "x10,a0": "0xffffdd0d", + "x5,t0": "0x22346", + "x6,t1": "0x11d7", + "x7,t2": "0xffffdaf2", + "x8,fp,s0": "0x22713", + "x9,s1": "0x13f5", + mtime: "0xa", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_018.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_018.s.snap new file mode 100644 index 000000000..e23ae4b36 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_018.s.snap @@ -0,0 +1,57 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_018.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 2, + "10": 19, + "11": 55, + "12": 29, + "13": 115, + "14": 3, + "15": 19, + "16": 255, + "17": 255, + "18": 227, + "19": 183, + "2": 34, + "20": 175, + "21": 35, + "22": 131, + "23": 147, + "24": 69, + "25": 82, + "26": 228, + "27": 19, + "28": 34, + "29": 35, + "3": 183, + "30": 100, + "31": 147, + "32": 127, + "33": 243, + "34": 229, + "35": 19, + "38": 128, + "39": 103, + "4": 52, + "5": 98, + "6": 130, + "7": 147, + }, + registers: { + "x10,a0": "0xffffdfff", + "x5,t0": "0x22346", + "x6,t1": "0x11d7", + "x7,t2": "0xffffdaf2", + "x8,fp,s0": "0x22757", + "x9,s1": "0x13f7", + mtime: "0xa", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_019.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_019.s.snap new file mode 100644 index 000000000..4fa06300f --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_019.s.snap @@ -0,0 +1,57 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_019.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 2, + "10": 19, + "11": 55, + "12": 29, + "13": 115, + "14": 3, + "15": 19, + "16": 255, + "17": 255, + "18": 227, + "19": 183, + "2": 34, + "20": 175, + "21": 35, + "22": 131, + "23": 147, + "24": 69, + "25": 82, + "26": 244, + "27": 19, + "28": 34, + "29": 35, + "3": 183, + "30": 116, + "31": 147, + "32": 127, + "33": 243, + "34": 245, + "35": 19, + "38": 128, + "39": 103, + "4": 52, + "5": 98, + "6": 130, + "7": 147, + }, + registers: { + "x10,a0": "0x2f2", + "x5,t0": "0x22346", + "x6,t1": "0x11d7", + "x7,t2": "0xffffdaf2", + "x8,fp,s0": "0x44", + "x9,s1": "0x2", + mtime: "0xa", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_020.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_020.s.snap new file mode 100644 index 000000000..6095567a2 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_020.s.snap @@ -0,0 +1,53 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_020.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "10": 19, + "11": 55, + "12": 29, + "13": 115, + "14": 3, + "15": 19, + "16": 255, + "17": 255, + "18": 227, + "19": 183, + "2": 178, + "20": 175, + "21": 35, + "22": 131, + "23": 147, + "25": 34, + "26": 148, + "27": 19, + "29": 67, + "3": 183, + "30": 20, + "31": 147, + "33": 243, + "34": 149, + "35": 19, + "38": 128, + "39": 103, + "4": 173, + "5": 66, + "6": 130, + "7": 147, + }, + registers: { + "x10,a0": "0xed790000", + "x5,t0": "0xaad4", + "x6,t1": "0x11d7", + "x7,t2": "0xffffdaf2", + "x8,fp,s0": "0x2ab50", + "x9,s1": "0x11d70", + mtime: "0xa", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_021.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_021.s.snap new file mode 100644 index 000000000..adfb55eca --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_021.s.snap @@ -0,0 +1,53 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_021.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "10": 19, + "11": 55, + "12": 29, + "13": 115, + "14": 3, + "15": 19, + "16": 255, + "17": 255, + "18": 227, + "19": 183, + "2": 178, + "20": 175, + "21": 35, + "22": 131, + "23": 147, + "25": 34, + "26": 212, + "27": 19, + "29": 67, + "3": 183, + "30": 84, + "31": 147, + "33": 243, + "34": 213, + "35": 19, + "38": 128, + "39": 103, + "4": 173, + "5": 66, + "6": 130, + "7": 147, + }, + registers: { + "x10,a0": "0x1ffff", + "x5,t0": "0xaad4", + "x6,t1": "0x11d7", + "x7,t2": "0xffffdaf2", + "x8,fp,s0": "0x2ab5", + "x9,s1": "0x11d", + mtime: "0xa", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_022.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_022.s.snap new file mode 100644 index 000000000..0a90d95ec --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_022.s.snap @@ -0,0 +1,56 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_022.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "10": 19, + "11": 55, + "12": 29, + "13": 115, + "14": 3, + "15": 19, + "16": 255, + "17": 255, + "18": 227, + "19": 183, + "2": 178, + "20": 175, + "21": 35, + "22": 131, + "23": 147, + "24": 64, + "25": 34, + "26": 212, + "27": 19, + "28": 64, + "29": 67, + "3": 183, + "30": 84, + "31": 147, + "32": 64, + "33": 243, + "34": 213, + "35": 19, + "38": 128, + "39": 103, + "4": 173, + "5": 66, + "6": 130, + "7": 147, + }, + registers: { + "x10,a0": "0xffffffff", + "x5,t0": "0xaad4", + "x6,t1": "0x11d7", + "x7,t2": "0xffffdaf2", + "x8,fp,s0": "0x2ab5", + "x9,s1": "0x11d", + mtime: "0xa", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_023.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_023.s.snap new file mode 100644 index 000000000..ccafadb81 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_023.s.snap @@ -0,0 +1,66 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_023.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "10": 19, + "11": 55, + "12": 29, + "13": 115, + "14": 3, + "15": 19, + "16": 255, + "17": 255, + "18": 227, + "19": 183, + "2": 178, + "20": 175, + "21": 35, + "22": 131, + "23": 147, + "25": 32, + "26": 4, + "27": 19, + "29": 16, + "3": 183, + "30": 4, + "31": 147, + "32": 85, + "33": 64, + "34": 5, + "35": 19, + "37": 130, + "38": 149, + "39": 179, + "4": 173, + "41": 147, + "42": 22, + "43": 51, + "45": 163, + "46": 150, + "47": 179, + "5": 66, + "50": 128, + "51": 103, + "6": 130, + "7": 147, + }, + registers: { + "x10,a0": "0x554", + "x11,a1": "0x2ab50", + "x12,a2": "0x23ae", + "x13,a3": "0xaf200000", + "x5,t0": "0xaad4", + "x6,t1": "0x11d7", + "x7,t2": "0xffffdaf2", + "x8,fp,s0": "0x2", + "x9,s1": "0x1", + mtime: "0xd", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_024.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_024.s.snap new file mode 100644 index 000000000..e2bd2e2ff --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_024.s.snap @@ -0,0 +1,57 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_024.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "10": 34, + "11": 183, + "13": 2, + "14": 130, + "15": 147, + "18": 35, + "19": 55, + "2": 34, + "21": 19, + "22": 3, + "23": 19, + "26": 35, + "27": 183, + "29": 35, + "3": 55, + "30": 131, + "31": 147, + "33": 66, + "34": 164, + "35": 51, + "37": 82, + "38": 164, + "39": 179, + "4": 255, + "41": 98, + "42": 165, + "43": 51, + "45": 114, + "46": 165, + "47": 179, + "5": 242, + "50": 128, + "51": 103, + "6": 2, + "7": 19, + }, + registers: { + "x10,a0": "0x1", + "x11,a1": "0x1", + "x4,tp": "0x1fff", + "x5,t0": "0x2000", + "x6,t1": "0x2001", + "x7,t2": "0x2002", + mtime: "0xd", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_025.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_025.s.snap new file mode 100644 index 000000000..bd116296e --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_025.s.snap @@ -0,0 +1,57 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_025.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "10": 34, + "11": 183, + "13": 2, + "14": 130, + "15": 147, + "18": 35, + "19": 55, + "2": 34, + "21": 19, + "22": 3, + "23": 19, + "26": 35, + "27": 183, + "29": 35, + "3": 55, + "30": 131, + "31": 147, + "33": 66, + "34": 180, + "35": 51, + "37": 82, + "38": 180, + "39": 179, + "4": 255, + "41": 98, + "42": 181, + "43": 51, + "45": 114, + "46": 181, + "47": 179, + "5": 242, + "50": 128, + "51": 103, + "6": 2, + "7": 19, + }, + registers: { + "x10,a0": "0x1", + "x11,a1": "0x1", + "x4,tp": "0x1fff", + "x5,t0": "0x2000", + "x6,t1": "0x2001", + "x7,t2": "0x2002", + mtime: "0xd", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_026.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_026.s.snap new file mode 100644 index 000000000..4a1bef7ef --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_026.s.snap @@ -0,0 +1,71 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_026.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 2, + "10": 19, + "11": 55, + "12": 29, + "13": 115, + "14": 3, + "15": 19, + "16": 255, + "17": 255, + "18": 227, + "19": 183, + "2": 34, + "20": 175, + "21": 35, + "22": 131, + "23": 147, + "24": 69, + "25": 80, + "26": 4, + "27": 19, + "28": 34, + "29": 32, + "3": 183, + "30": 4, + "31": 147, + "34": 21, + "35": 55, + "36": 255, + "37": 245, + "38": 5, + "39": 19, + "4": 52, + "41": 130, + "42": 197, + "43": 179, + "45": 147, + "46": 70, + "47": 51, + "49": 163, + "5": 98, + "50": 198, + "51": 179, + "54": 128, + "55": 103, + "6": 130, + "7": 147, + }, + registers: { + "x10,a0": "0xfff", + "x11,a1": "0x22713", + "x12,a2": "0x13f5", + "x13,a3": "0xffffd50d", + "x5,t0": "0x22346", + "x6,t1": "0x11d7", + "x7,t2": "0xffffdaf2", + "x8,fp,s0": "0x455", + "x9,s1": "0x222", + mtime: "0xe", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_027.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_027.s.snap new file mode 100644 index 000000000..ec27725ac --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_027.s.snap @@ -0,0 +1,66 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_027.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "10": 19, + "11": 55, + "12": 29, + "13": 115, + "14": 3, + "15": 19, + "16": 255, + "17": 255, + "18": 227, + "19": 183, + "2": 178, + "20": 175, + "21": 35, + "22": 131, + "23": 147, + "25": 32, + "26": 4, + "27": 19, + "29": 16, + "3": 183, + "30": 4, + "31": 147, + "32": 85, + "33": 64, + "34": 5, + "35": 19, + "37": 130, + "38": 213, + "39": 179, + "4": 173, + "41": 147, + "42": 86, + "43": 51, + "45": 163, + "46": 214, + "47": 179, + "5": 66, + "50": 128, + "51": 103, + "6": 130, + "7": 147, + }, + registers: { + "x10,a0": "0x554", + "x11,a1": "0x2ab5", + "x12,a2": "0x8eb", + "x13,a3": "0xfff", + "x5,t0": "0xaad4", + "x6,t1": "0x11d7", + "x7,t2": "0xffffdaf2", + "x8,fp,s0": "0x2", + "x9,s1": "0x1", + mtime: "0xd", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_028.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_028.s.snap new file mode 100644 index 000000000..45d2129bf --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_028.s.snap @@ -0,0 +1,68 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_028.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "10": 19, + "11": 55, + "12": 29, + "13": 115, + "14": 3, + "15": 19, + "16": 255, + "17": 255, + "18": 227, + "19": 183, + "2": 178, + "20": 175, + "21": 35, + "22": 131, + "23": 147, + "25": 32, + "26": 4, + "27": 19, + "29": 16, + "3": 183, + "30": 4, + "31": 147, + "33": 48, + "34": 5, + "35": 19, + "36": 64, + "37": 130, + "38": 213, + "39": 179, + "4": 173, + "40": 64, + "41": 147, + "42": 86, + "43": 51, + "44": 64, + "45": 163, + "46": 214, + "47": 179, + "5": 66, + "50": 128, + "51": 103, + "6": 130, + "7": 147, + }, + registers: { + "x10,a0": "0x3", + "x11,a1": "0x2ab5", + "x12,a2": "0x8eb", + "x13,a3": "0xfffffb5e", + "x5,t0": "0xaad4", + "x6,t1": "0x11d7", + "x7,t2": "0xffffdaf2", + "x8,fp,s0": "0x2", + "x9,s1": "0x1", + mtime: "0xd", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_029.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_029.s.snap new file mode 100644 index 000000000..d7d993491 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_029.s.snap @@ -0,0 +1,71 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_029.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 2, + "10": 19, + "11": 55, + "12": 29, + "13": 115, + "14": 3, + "15": 19, + "16": 255, + "17": 255, + "18": 227, + "19": 183, + "2": 34, + "20": 175, + "21": 35, + "22": 131, + "23": 147, + "24": 69, + "25": 80, + "26": 4, + "27": 19, + "28": 34, + "29": 32, + "3": 183, + "30": 4, + "31": 147, + "34": 21, + "35": 55, + "36": 255, + "37": 245, + "38": 5, + "39": 19, + "4": 52, + "41": 130, + "42": 229, + "43": 179, + "45": 147, + "46": 102, + "47": 51, + "49": 163, + "5": 98, + "50": 230, + "51": 179, + "54": 128, + "55": 103, + "6": 130, + "7": 147, + }, + registers: { + "x10,a0": "0xfff", + "x11,a1": "0x22757", + "x12,a2": "0x13f7", + "x13,a3": "0xffffdfff", + "x5,t0": "0x22346", + "x6,t1": "0x11d7", + "x7,t2": "0xffffdaf2", + "x8,fp,s0": "0x455", + "x9,s1": "0x222", + mtime: "0xe", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_030.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_030.s.snap new file mode 100644 index 000000000..55fad3bec --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_030.s.snap @@ -0,0 +1,71 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_030.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 2, + "10": 19, + "11": 55, + "12": 29, + "13": 115, + "14": 3, + "15": 19, + "16": 255, + "17": 255, + "18": 227, + "19": 183, + "2": 34, + "20": 175, + "21": 35, + "22": 131, + "23": 147, + "24": 69, + "25": 80, + "26": 4, + "27": 19, + "28": 34, + "29": 32, + "3": 183, + "30": 4, + "31": 147, + "34": 21, + "35": 55, + "36": 255, + "37": 245, + "38": 5, + "39": 19, + "4": 52, + "41": 130, + "42": 245, + "43": 179, + "45": 147, + "46": 118, + "47": 51, + "49": 163, + "5": 98, + "50": 246, + "51": 179, + "54": 128, + "55": 103, + "6": 130, + "7": 147, + }, + registers: { + "x10,a0": "0xfff", + "x11,a1": "0x44", + "x12,a2": "0x2", + "x13,a3": "0xaf2", + "x5,t0": "0x22346", + "x6,t1": "0x11d7", + "x7,t2": "0xffffdaf2", + "x8,fp,s0": "0x455", + "x9,s1": "0x222", + mtime: "0xe", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_031.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_031.s.snap new file mode 100644 index 000000000..dba766795 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_031.s.snap @@ -0,0 +1,116 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_031.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 3, + "11": 23, + "13": 3, + "14": 3, + "15": 19, + "17": 32, + "18": 3, + "19": 151, + "2": 2, + "2097152": 64, + "2097153": 65, + "2097154": 69, + "2097155": 161, + "2097156": 202, + "2097157": 192, + "2097158": 131, + "2097159": 18, + "2097160": 64, + "2097161": 38, + "2097162": 226, + "2097163": 208, + "2097164": 229, + "2097165": 96, + "2097166": 65, + "2097167": 137, + "2097172": 7, + "2097173": 84, + "2097174": 79, + "2097175": 251, + "2097176": 64, + "2097177": 65, + "2097178": 69, + "2097179": 161, + "2097180": 202, + "2097181": 192, + "2097182": 131, + "2097183": 18, + "2097184": 64, + "2097185": 38, + "2097186": 226, + "2097187": 208, + "2097188": 229, + "2097189": 96, + "2097190": 65, + "2097191": 137, + "2097196": 7, + "2097197": 84, + "2097198": 79, + "2097199": 251, + "21": 3, + "22": 131, + "23": 147, + "25": 32, + "26": 4, + "27": 23, + "29": 4, + "3": 151, + "30": 4, + "31": 19, + "33": 2, + "34": 176, + "35": 7, + "37": 3, + "38": 49, + "39": 7, + "41": 3, + "42": 181, + "43": 7, + "45": 4, + "46": 48, + "47": 39, + "49": 132, + "5": 2, + "50": 4, + "51": 19, + "53": 36, + "54": 48, + "55": 39, + "57": 132, + "58": 4, + "59": 19, + "6": 130, + "61": 164, + "62": 48, + "63": 39, + "65": 160, + "66": 8, + "67": 147, + "7": 147, + "71": 115, + "9": 32, + }, + registers: { + "f0,ft0": "0x404145a1cac08312", + "f10,fa0": "0x7544ffb", + "f2,ft2": "0x4026e2d0e5604189", + "x17,a7": "0xa", + "x5,t0": "0x200000", + "x6,t1": "0x200008", + "x7,t2": "0x200010", + "x8,fp,s0": "0x200028", + mtime: "0x12", + pc: "0x48", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_032.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_032.s.snap new file mode 100644 index 000000000..23aba0e5b --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_032.s.snap @@ -0,0 +1,53 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_032.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "10": 19, + "11": 55, + "12": 29, + "13": 115, + "14": 3, + "15": 19, + "16": 255, + "17": 255, + "18": 227, + "19": 183, + "2": 178, + "20": 175, + "21": 35, + "22": 131, + "23": 147, + "25": 34, + "26": 149, + "27": 147, + "29": 19, + "3": 183, + "30": 22, + "31": 19, + "33": 243, + "34": 150, + "35": 147, + "38": 128, + "39": 103, + "4": 173, + "5": 66, + "6": 130, + "7": 147, + }, + registers: { + "x11,a1": "0x2ab50", + "x12,a2": "0x23ae", + "x13,a3": "0xed790000", + "x5,t0": "0xaad4", + "x6,t1": "0x11d7", + "x7,t2": "0xffffdaf2", + mtime: "0xa", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_033.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_033.s.snap new file mode 100644 index 000000000..688d06ca0 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_033.s.snap @@ -0,0 +1,53 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_033.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "10": 19, + "11": 55, + "12": 29, + "13": 115, + "14": 3, + "15": 19, + "16": 255, + "17": 255, + "18": 227, + "19": 183, + "2": 178, + "20": 175, + "21": 35, + "22": 131, + "23": 147, + "25": 34, + "26": 212, + "27": 19, + "29": 19, + "3": 183, + "30": 84, + "31": 147, + "33": 243, + "34": 213, + "35": 19, + "38": 128, + "39": 103, + "4": 173, + "5": 66, + "6": 130, + "7": 147, + }, + registers: { + "x10,a0": "0x1ffff", + "x5,t0": "0xaad4", + "x6,t1": "0x11d7", + "x7,t2": "0xffffdaf2", + "x8,fp,s0": "0x2ab5", + "x9,s1": "0x8eb", + mtime: "0xa", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_034.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_034.s.snap new file mode 100644 index 000000000..83baa6417 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_034.s.snap @@ -0,0 +1,56 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_034.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 160, + "10": 3, + "11": 147, + "12": 255, + "13": 224, + "14": 4, + "15": 19, + "16": 2, + "17": 98, + "18": 132, + "19": 179, + "2": 2, + "20": 2, + "21": 115, + "22": 5, + "23": 51, + "24": 2, + "25": 131, + "26": 133, + "27": 179, + "28": 2, + "29": 84, + "3": 147, + "30": 6, + "31": 51, + "34": 128, + "35": 103, + "5": 208, + "6": 3, + "7": 19, + "8": 2, + "9": 208, + }, + registers: { + "x10,a0": "0x249", + "x11,a1": "0xffffffa6", + "x12,a2": "0xffffffec", + "x5,t0": "0xa", + "x6,t1": "0xd", + "x7,t2": "0x2d", + "x8,fp,s0": "0xfffffffe", + "x9,s1": "0x82", + mtime: "0x9", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_035.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_035.s.snap new file mode 100644 index 000000000..4faf8225b --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_035.s.snap @@ -0,0 +1,54 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_035.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 160, + "10": 3, + "11": 147, + "12": 255, + "13": 224, + "14": 4, + "15": 19, + "16": 2, + "17": 98, + "18": 148, + "19": 179, + "2": 2, + "20": 2, + "21": 115, + "22": 21, + "23": 51, + "24": 2, + "25": 131, + "26": 149, + "27": 179, + "28": 2, + "29": 84, + "3": 147, + "30": 22, + "31": 51, + "34": 128, + "35": 103, + "5": 208, + "6": 3, + "7": 19, + "8": 2, + "9": 208, + }, + registers: { + "x11,a1": "0xffffffff", + "x12,a2": "0xffffffff", + "x5,t0": "0xa", + "x6,t1": "0xd", + "x7,t2": "0x2d", + "x8,fp,s0": "0xfffffffe", + mtime: "0x9", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_036.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_036.s.snap new file mode 100644 index 000000000..ac1e3d4ce --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_036.s.snap @@ -0,0 +1,54 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_036.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 160, + "10": 3, + "11": 147, + "12": 255, + "13": 224, + "14": 4, + "15": 19, + "16": 2, + "17": 98, + "18": 164, + "19": 179, + "2": 2, + "20": 2, + "21": 115, + "22": 37, + "23": 51, + "24": 2, + "25": 131, + "26": 165, + "27": 179, + "28": 2, + "29": 84, + "3": 147, + "30": 38, + "31": 51, + "34": 128, + "35": 103, + "5": 208, + "6": 3, + "7": 19, + "8": 2, + "9": 208, + }, + registers: { + "x11,a1": "0x2c", + "x12,a2": "0xffffffff", + "x5,t0": "0xa", + "x6,t1": "0xd", + "x7,t2": "0x2d", + "x8,fp,s0": "0xfffffffe", + mtime: "0x9", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_037.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_037.s.snap new file mode 100644 index 000000000..79e284d2e --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_037.s.snap @@ -0,0 +1,54 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_037.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 160, + "10": 3, + "11": 147, + "12": 255, + "13": 224, + "14": 4, + "15": 19, + "16": 2, + "17": 98, + "18": 180, + "19": 179, + "2": 2, + "20": 2, + "21": 115, + "22": 53, + "23": 51, + "24": 2, + "25": 131, + "26": 181, + "27": 179, + "28": 2, + "29": 84, + "3": 147, + "30": 54, + "31": 51, + "34": 128, + "35": 103, + "5": 208, + "6": 3, + "7": 19, + "8": 2, + "9": 208, + }, + registers: { + "x11,a1": "0x2c", + "x12,a2": "0x9", + "x5,t0": "0xa", + "x6,t1": "0xd", + "x7,t2": "0x2d", + "x8,fp,s0": "0xfffffffe", + mtime: "0x9", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_038.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_038.s.snap new file mode 100644 index 000000000..3fcbef7b8 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_038.s.snap @@ -0,0 +1,58 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_038.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 1, + "10": 227, + "11": 183, + "13": 3, + "14": 131, + "15": 147, + "16": 1, + "17": 128, + "18": 4, + "19": 19, + "2": 2, + "20": 2, + "21": 83, + "22": 196, + "23": 179, + "24": 2, + "25": 83, + "26": 69, + "27": 51, + "28": 2, + "29": 131, + "3": 147, + "30": 197, + "31": 179, + "32": 2, + "33": 116, + "34": 70, + "35": 51, + "38": 128, + "39": 103, + "4": 16, + "6": 3, + "7": 19, + "8": 255, + "9": 255, + }, + registers: { + "x10,a0": "0x10", + "x11,a1": "0xfffffeab", + "x5,t0": "0x10", + "x6,t1": "0x100", + "x7,t2": "0xffffe000", + "x8,fp,s0": "0x18", + "x9,s1": "0xfffffe00", + mtime: "0xa", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_039.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_039.s.snap new file mode 100644 index 000000000..5147f4ac6 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_039.s.snap @@ -0,0 +1,58 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_039.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 1, + "10": 227, + "11": 183, + "13": 3, + "14": 131, + "15": 147, + "16": 1, + "17": 128, + "18": 4, + "19": 19, + "2": 2, + "20": 2, + "21": 83, + "22": 212, + "23": 179, + "24": 2, + "25": 83, + "26": 85, + "27": 51, + "28": 2, + "29": 131, + "3": 147, + "30": 213, + "31": 179, + "32": 2, + "33": 116, + "34": 86, + "35": 51, + "38": 128, + "39": 103, + "4": 16, + "6": 3, + "7": 19, + "8": 255, + "9": 255, + }, + registers: { + "x10,a0": "0x10", + "x11,a1": "0xaaaa955", + "x5,t0": "0x10", + "x6,t1": "0x100", + "x7,t2": "0xffffe000", + "x8,fp,s0": "0x18", + "x9,s1": "0xffffe00", + mtime: "0xa", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_040.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_040.s.snap new file mode 100644 index 000000000..919fb9151 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_040.s.snap @@ -0,0 +1,57 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_040.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 1, + "10": 227, + "11": 183, + "13": 3, + "14": 131, + "15": 147, + "16": 1, + "17": 128, + "18": 4, + "19": 19, + "2": 2, + "20": 2, + "21": 83, + "22": 228, + "23": 179, + "24": 2, + "25": 83, + "26": 101, + "27": 51, + "28": 2, + "29": 131, + "3": 147, + "30": 229, + "31": 179, + "32": 2, + "33": 116, + "34": 102, + "35": 51, + "38": 128, + "39": 103, + "4": 16, + "6": 3, + "7": 19, + "8": 255, + "9": 255, + }, + registers: { + "x11,a1": "0x8", + "x12,a2": "0x18", + "x5,t0": "0x10", + "x6,t1": "0x100", + "x7,t2": "0xffffe000", + "x8,fp,s0": "0x18", + mtime: "0xa", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_041.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_041.s.snap new file mode 100644 index 000000000..e740b32b2 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_041.s.snap @@ -0,0 +1,57 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_041.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 1, + "10": 227, + "11": 183, + "13": 3, + "14": 131, + "15": 147, + "16": 1, + "17": 128, + "18": 4, + "19": 19, + "2": 2, + "20": 2, + "21": 83, + "22": 244, + "23": 179, + "24": 2, + "25": 83, + "26": 117, + "27": 51, + "28": 2, + "29": 131, + "3": 147, + "30": 245, + "31": 179, + "32": 2, + "33": 116, + "34": 118, + "35": 51, + "38": 128, + "39": 103, + "4": 16, + "6": 3, + "7": 19, + "8": 255, + "9": 255, + }, + registers: { + "x11,a1": "0x8", + "x12,a2": "0x18", + "x5,t0": "0x10", + "x6,t1": "0x100", + "x7,t2": "0xffffe000", + "x8,fp,s0": "0x18", + mtime: "0xa", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_042.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_042.s.snap new file mode 100644 index 000000000..26f51e141 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_042.s.snap @@ -0,0 +1,62 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_042.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 55, + "1": 32, + "10": 3, + "11": 147, + "12": 33, + "13": 240, + "14": 4, + "15": 19, + "17": 98, + "18": 202, + "19": 99, + "2": 2, + "21": 84, + "22": 72, + "23": 99, + "24": 2, + "25": 32, + "26": 14, + "27": 19, + "29": 160, + "3": 147, + "30": 8, + "31": 147, + "35": 115, + "37": 176, + "38": 2, + "39": 147, + "4": 55, + "40": 34, + "41": 176, + "42": 3, + "43": 19, + "44": 254, + "45": 98, + "46": 198, + "47": 227, + "5": 16, + "6": 3, + "7": 19, + "9": 80, + }, + registers: { + "x17,a7": "0xa", + "x28,t3": "0x22", + "x5,t0": "0xb", + "x6,t1": "0x22b", + "x7,t2": "0x5", + "x8,fp,s0": "0x21f", + mtime: "0xc", + pc: "0x24", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_043.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_043.s.snap new file mode 100644 index 000000000..883965a92 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_043.s.snap @@ -0,0 +1,62 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_043.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 200, + "1": 224, + "10": 3, + "11": 147, + "12": 33, + "13": 240, + "14": 4, + "15": 19, + "17": 83, + "18": 106, + "19": 99, + "2": 2, + "21": 131, + "22": 232, + "23": 99, + "24": 2, + "25": 32, + "26": 14, + "27": 19, + "29": 160, + "3": 147, + "30": 8, + "31": 147, + "35": 115, + "37": 176, + "38": 2, + "39": 147, + "4": 200, + "40": 34, + "41": 176, + "42": 3, + "43": 19, + "44": 254, + "45": 98, + "46": 230, + "47": 227, + "5": 240, + "6": 3, + "7": 19, + "9": 80, + }, + registers: { + "x17,a7": "0xa", + "x28,t3": "0x22", + "x5,t0": "0xb", + "x6,t1": "0x22b", + "x7,t2": "0x5", + "x8,fp,s0": "0x21f", + mtime: "0xc", + pc: "0x24", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_044.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_044.s.snap new file mode 100644 index 000000000..b85443449 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_044.s.snap @@ -0,0 +1,62 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_044.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 55, + "1": 32, + "10": 3, + "11": 147, + "12": 33, + "13": 240, + "14": 4, + "15": 19, + "17": 83, + "18": 90, + "19": 99, + "2": 2, + "21": 116, + "22": 88, + "23": 99, + "24": 2, + "25": 32, + "26": 14, + "27": 19, + "29": 160, + "3": 147, + "30": 8, + "31": 147, + "35": 115, + "37": 176, + "38": 2, + "39": 147, + "4": 55, + "40": 34, + "41": 176, + "42": 3, + "43": 19, + "44": 254, + "45": 83, + "46": 86, + "47": 227, + "5": 16, + "6": 3, + "7": 19, + "9": 80, + }, + registers: { + "x17,a7": "0xa", + "x28,t3": "0x22", + "x5,t0": "0xb", + "x6,t1": "0x22b", + "x7,t2": "0x5", + "x8,fp,s0": "0x21f", + mtime: "0xc", + pc: "0x24", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_045.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_045.s.snap new file mode 100644 index 000000000..c468a7b0c --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_045.s.snap @@ -0,0 +1,62 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_045.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 200, + "1": 224, + "10": 3, + "11": 147, + "12": 222, + "13": 16, + "14": 4, + "15": 19, + "17": 98, + "18": 218, + "19": 99, + "2": 2, + "21": 100, + "22": 88, + "23": 99, + "24": 2, + "25": 32, + "26": 14, + "27": 19, + "29": 160, + "3": 147, + "30": 8, + "31": 147, + "35": 115, + "37": 176, + "38": 2, + "39": 147, + "4": 200, + "40": 221, + "41": 80, + "42": 3, + "43": 19, + "44": 254, + "45": 98, + "46": 214, + "47": 227, + "5": 240, + "6": 3, + "7": 19, + "9": 80, + }, + registers: { + "x17,a7": "0xa", + "x28,t3": "0x22", + "x5,t0": "0xb", + "x6,t1": "0xfffffdd5", + "x7,t2": "0x5", + "x8,fp,s0": "0xfffffde1", + mtime: "0xc", + pc: "0x24", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_046.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_046.s.snap new file mode 100644 index 000000000..4c33f942b --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_046.s.snap @@ -0,0 +1,57 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_046.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 2, + "10": 19, + "11": 55, + "12": 29, + "13": 115, + "14": 3, + "15": 19, + "16": 255, + "17": 255, + "18": 227, + "19": 183, + "2": 34, + "20": 175, + "21": 35, + "22": 131, + "23": 147, + "24": 255, + "25": 242, + "26": 196, + "27": 19, + "28": 255, + "29": 243, + "3": 183, + "30": 68, + "31": 147, + "32": 255, + "33": 243, + "34": 197, + "35": 19, + "38": 128, + "39": 103, + "4": 52, + "5": 98, + "6": 130, + "7": 147, + }, + registers: { + "x10,a0": "0x250d", + "x5,t0": "0x22346", + "x6,t1": "0x11d7", + "x7,t2": "0xffffdaf2", + "x8,fp,s0": "0xfffddcb9", + "x9,s1": "0xffffee28", + mtime: "0xa", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_047.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_047.s.snap new file mode 100644 index 000000000..c89e60c59 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_047.s.snap @@ -0,0 +1,57 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_047.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 2, + "10": 19, + "11": 55, + "12": 29, + "13": 115, + "14": 3, + "15": 19, + "16": 255, + "17": 255, + "18": 227, + "19": 183, + "2": 34, + "20": 175, + "21": 35, + "22": 131, + "23": 147, + "24": 64, + "25": 80, + "26": 4, + "27": 51, + "28": 64, + "29": 96, + "3": 183, + "30": 4, + "31": 179, + "32": 64, + "33": 112, + "34": 5, + "35": 51, + "38": 128, + "39": 103, + "4": 52, + "5": 98, + "6": 130, + "7": 147, + }, + registers: { + "x10,a0": "0x250e", + "x5,t0": "0x22346", + "x6,t1": "0x11d7", + "x7,t2": "0xffffdaf2", + "x8,fp,s0": "0xfffddcba", + "x9,s1": "0xffffee29", + mtime: "0xa", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_048.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_048.s.snap new file mode 100644 index 000000000..ea0c52a58 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_048.s.snap @@ -0,0 +1,39 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_048.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 16, + "10": 3, + "11": 19, + "13": 18, + "14": 52, + "15": 19, + "17": 18, + "18": 180, + "19": 147, + "2": 2, + "21": 19, + "22": 53, + "23": 19, + "26": 128, + "27": 103, + "3": 19, + "6": 2, + "7": 147, + "8": 255, + "9": 240, + }, + registers: { + "x4,tp": "0x1", + "x6,t1": "0xffffffff", + "x9,s1": "0x1", + mtime: "0x7", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_049.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_049.s.snap new file mode 100644 index 000000000..9df3e6760 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_049.s.snap @@ -0,0 +1,40 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_049.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 16, + "10": 3, + "11": 19, + "13": 64, + "14": 52, + "15": 51, + "17": 80, + "18": 52, + "19": 179, + "2": 2, + "21": 96, + "22": 53, + "23": 51, + "26": 128, + "27": 103, + "3": 19, + "6": 2, + "7": 147, + "8": 255, + "9": 240, + }, + registers: { + "x10,a0": "0x1", + "x4,tp": "0x1", + "x6,t1": "0xffffffff", + "x8,fp,s0": "0x1", + mtime: "0x7", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_050.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_050.s.snap new file mode 100644 index 000000000..70bc8cb53 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_050.s.snap @@ -0,0 +1,39 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_050.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 16, + "10": 3, + "11": 19, + "13": 64, + "14": 36, + "15": 51, + "17": 80, + "18": 36, + "19": 179, + "2": 2, + "21": 96, + "22": 37, + "23": 51, + "26": 128, + "27": 103, + "3": 19, + "6": 2, + "7": 147, + "8": 255, + "9": 240, + }, + registers: { + "x4,tp": "0x1", + "x6,t1": "0xffffffff", + "x8,fp,s0": "0x1", + mtime: "0x7", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_051.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_051.s.snap new file mode 100644 index 000000000..a18d804e1 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_051.s.snap @@ -0,0 +1,39 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_051.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 16, + "10": 3, + "11": 19, + "13": 2, + "14": 36, + "15": 51, + "17": 2, + "18": 164, + "19": 179, + "2": 2, + "21": 3, + "22": 37, + "23": 51, + "26": 128, + "27": 103, + "3": 19, + "6": 2, + "7": 147, + "8": 255, + "9": 240, + }, + registers: { + "x10,a0": "0x1", + "x4,tp": "0x1", + "x6,t1": "0xffffffff", + mtime: "0x7", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_052.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_052.s.snap new file mode 100644 index 000000000..473f0ded1 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_052.s.snap @@ -0,0 +1,152 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_052.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 3, + "103": 115, + "11": 23, + "13": 3, + "14": 3, + "15": 19, + "17": 32, + "18": 3, + "19": 151, + "2": 2, + "2097152": 64, + "2097153": 131, + "2097154": 84, + "2097155": 250, + "2097156": 109, + "2097157": 239, + "2097158": 199, + "2097159": 164, + "2097160": 64, + "2097161": 140, + "2097162": 18, + "2097163": 192, + "2097164": 131, + "2097165": 18, + "2097166": 110, + "2097167": 152, + "2097168": 64, + "2097169": 195, + "2097170": 92, + "2097171": 198, + "2097172": 102, + "2097173": 102, + "2097174": 102, + "2097175": 102, + "2097176": 66, + "2097177": 247, + "2097178": 62, + "2097179": 155, + "2097180": 67, + "2097181": 228, + "2097182": 44, + "2097183": 8, + "2097184": 197, + "2097185": 236, + "2097186": 20, + "2097187": 102, + "21": 3, + "22": 131, + "23": 147, + "25": 32, + "26": 4, + "27": 23, + "29": 4, + "3": 151, + "30": 4, + "31": 19, + "33": 32, + "34": 4, + "35": 151, + "36": 255, + "37": 196, + "38": 132, + "39": 147, + "41": 32, + "42": 5, + "43": 23, + "44": 255, + "45": 133, + "46": 5, + "47": 19, + "49": 2, + "5": 2, + "50": 176, + "51": 7, + "53": 3, + "54": 49, + "55": 7, + "57": 3, + "58": 178, + "59": 7, + "6": 130, + "60": 2, + "62": 3, + "63": 83, + "64": 2, + "65": 33, + "66": 4, + "67": 83, + "68": 2, + "69": 66, + "7": 147, + "70": 5, + "71": 83, + "73": 4, + "74": 38, + "75": 7, + "77": 4, + "78": 167, + "79": 7, + "81": 5, + "82": 40, + "83": 7, + "85": 230, + "86": 9, + "87": 83, + "88": 1, + "89": 7, + "9": 32, + "90": 10, + "91": 83, + "93": 200, + "94": 11, + "95": 83, + "97": 160, + "98": 8, + "99": 147, + }, + registers: { + "f0,ft0": "0x408354fa6defc7a4", + "f10,fa0": "0x40d35cc666666666", + "f12,fa2": "0xffffffff42f73e9b", + "f14,fa4": "0xffffffff43e42c08", + "f16,fa6": "0xffffffffc5ec1466", + "f18,fs2": "0xffffffff4410fdd7", + "f2,ft2": "0x408c12c083126e98", + "f20,fs4": "0xffffffffc5ddd1a6", + "f22,fs6": "0xffffffffc5e8376c", + "f4,ft4": "0x40c35cc666666666", + "f6,ft6": "0x409354fa6defc7a4", + "f8,fs0": "0x409c12c083126e98", + "x10,a0": "0x200020", + "x17,a7": "0xa", + "x5,t0": "0x200000", + "x6,t1": "0x200008", + "x7,t2": "0x200010", + "x8,fp,s0": "0x200018", + "x9,s1": "0x20001c", + mtime: "0x1a", + pc: "0x68", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_053.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_053.s.snap new file mode 100644 index 000000000..8273c7b7a --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_053.s.snap @@ -0,0 +1,155 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_053.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 3, + "103": 115, + "11": 23, + "13": 3, + "14": 3, + "15": 19, + "17": 32, + "18": 3, + "19": 151, + "2": 2, + "2097152": 64, + "2097153": 131, + "2097154": 84, + "2097155": 250, + "2097156": 109, + "2097157": 239, + "2097158": 199, + "2097159": 164, + "2097160": 64, + "2097161": 140, + "2097162": 18, + "2097163": 192, + "2097164": 131, + "2097165": 18, + "2097166": 110, + "2097167": 152, + "2097168": 64, + "2097169": 195, + "2097170": 92, + "2097171": 198, + "2097172": 102, + "2097173": 102, + "2097174": 102, + "2097175": 102, + "2097176": 66, + "2097177": 247, + "2097178": 62, + "2097179": 155, + "2097180": 67, + "2097181": 228, + "2097182": 44, + "2097183": 8, + "2097184": 197, + "2097185": 236, + "2097186": 20, + "2097187": 102, + "21": 3, + "22": 131, + "23": 147, + "25": 32, + "26": 4, + "27": 23, + "29": 4, + "3": 151, + "30": 4, + "31": 19, + "33": 32, + "34": 4, + "35": 151, + "36": 255, + "37": 196, + "38": 132, + "39": 147, + "41": 32, + "42": 5, + "43": 23, + "44": 255, + "45": 133, + "46": 5, + "47": 19, + "49": 2, + "5": 2, + "50": 176, + "51": 7, + "53": 3, + "54": 49, + "55": 7, + "57": 3, + "58": 178, + "59": 7, + "6": 130, + "60": 10, + "61": 32, + "62": 3, + "63": 83, + "64": 10, + "65": 65, + "66": 4, + "67": 83, + "68": 10, + "69": 2, + "7": 147, + "70": 5, + "71": 83, + "73": 4, + "74": 38, + "75": 7, + "77": 4, + "78": 167, + "79": 7, + "81": 5, + "82": 40, + "83": 7, + "84": 8, + "85": 230, + "86": 9, + "87": 83, + "88": 9, + "89": 7, + "9": 32, + "90": 10, + "91": 83, + "92": 8, + "93": 200, + "94": 11, + "95": 83, + "97": 160, + "98": 8, + "99": 147, + }, + registers: { + "f0,ft0": "0x408354fa6defc7a4", + "f10,fa0": "0x40c22776bf8769ec", + "f12,fa2": "0xffffffff42f73e9b", + "f14,fa4": "0xffffffff43e42c08", + "f16,fa6": "0xffffffffc5ec1466", + "f18,fs2": "0xffffffffc3a65c61", + "f2,ft2": "0x408c12c083126e98", + "f20,fs4": "0xffffffff45fa5726", + "f22,fs6": "0xffffffffc5eff160", + "f4,ft4": "0x40c35cc666666666", + "f6,ft6": "0xc0717b8c2a454de8", + "f8,fs0": "0xc0c19b9a5e353f7c", + "x10,a0": "0x200020", + "x17,a7": "0xa", + "x5,t0": "0x200000", + "x6,t1": "0x200008", + "x7,t2": "0x200010", + "x8,fp,s0": "0x200018", + "x9,s1": "0x20001c", + mtime: "0x1a", + pc: "0x68", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_054.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_054.s.snap new file mode 100644 index 000000000..87c4d0346 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_054.s.snap @@ -0,0 +1,154 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_054.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 3, + "103": 115, + "11": 23, + "13": 3, + "14": 3, + "15": 19, + "17": 32, + "18": 3, + "19": 151, + "2": 2, + "2097152": 64, + "2097153": 131, + "2097154": 84, + "2097155": 250, + "2097156": 109, + "2097157": 239, + "2097158": 199, + "2097159": 164, + "2097160": 64, + "2097161": 140, + "2097162": 18, + "2097163": 192, + "2097164": 131, + "2097165": 18, + "2097166": 110, + "2097167": 152, + "2097168": 64, + "2097169": 195, + "2097170": 92, + "2097171": 198, + "2097172": 102, + "2097173": 102, + "2097174": 102, + "2097175": 102, + "2097176": 66, + "2097177": 247, + "2097178": 62, + "2097179": 155, + "2097180": 67, + "2097181": 228, + "2097182": 44, + "2097183": 8, + "2097184": 197, + "2097185": 236, + "2097186": 20, + "2097187": 102, + "21": 3, + "22": 131, + "23": 147, + "25": 32, + "26": 4, + "27": 23, + "29": 4, + "3": 151, + "30": 4, + "31": 19, + "33": 32, + "34": 4, + "35": 151, + "36": 255, + "37": 196, + "38": 132, + "39": 147, + "41": 32, + "42": 5, + "43": 23, + "44": 255, + "45": 133, + "46": 5, + "47": 19, + "49": 2, + "5": 2, + "50": 176, + "51": 7, + "53": 3, + "54": 49, + "55": 7, + "57": 3, + "58": 178, + "59": 7, + "6": 130, + "60": 18, + "62": 3, + "63": 83, + "64": 18, + "65": 33, + "66": 4, + "67": 83, + "68": 18, + "69": 66, + "7": 147, + "70": 5, + "71": 83, + "73": 4, + "74": 38, + "75": 7, + "77": 4, + "78": 167, + "79": 7, + "81": 5, + "82": 40, + "83": 7, + "84": 16, + "85": 230, + "86": 9, + "87": 83, + "88": 17, + "89": 7, + "9": 32, + "90": 10, + "91": 83, + "92": 16, + "93": 200, + "94": 11, + "95": 83, + "97": 160, + "98": 8, + "99": 147, + }, + registers: { + "f0,ft0": "0x408354fa6defc7a4", + "f10,fa0": "0x41976e712668f5c2", + "f12,fa2": "0xffffffff42f73e9b", + "f14,fa4": "0xffffffff43e42c08", + "f16,fa6": "0xffffffffc5ec1466", + "f18,fs2": "0xffffffff475c5e49", + "f2,ft2": "0x408c12c083126e98", + "f20,fs4": "0xffffffffca526ac6", + "f22,fs6": "0xffffffffc964016a", + "f4,ft4": "0x40c35cc666666666", + "f6,ft6": "0x41175b9619eb7e4e", + "f8,fs0": "0x4128a0dbe279dd3c", + "x10,a0": "0x200020", + "x17,a7": "0xa", + "x5,t0": "0x200000", + "x6,t1": "0x200008", + "x7,t2": "0x200010", + "x8,fp,s0": "0x200018", + "x9,s1": "0x20001c", + mtime: "0x1a", + pc: "0x68", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_055.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_055.s.snap new file mode 100644 index 000000000..ab316c6e0 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_055.s.snap @@ -0,0 +1,154 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_055.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 3, + "103": 115, + "11": 23, + "13": 3, + "14": 3, + "15": 19, + "17": 32, + "18": 3, + "19": 151, + "2": 2, + "2097152": 64, + "2097153": 131, + "2097154": 84, + "2097155": 250, + "2097156": 109, + "2097157": 239, + "2097158": 199, + "2097159": 164, + "2097160": 64, + "2097161": 140, + "2097162": 18, + "2097163": 192, + "2097164": 131, + "2097165": 18, + "2097166": 110, + "2097167": 152, + "2097168": 64, + "2097169": 195, + "2097170": 92, + "2097171": 198, + "2097172": 102, + "2097173": 102, + "2097174": 102, + "2097175": 102, + "2097176": 66, + "2097177": 247, + "2097178": 62, + "2097179": 155, + "2097180": 67, + "2097181": 228, + "2097182": 44, + "2097183": 8, + "2097184": 197, + "2097185": 236, + "2097186": 20, + "2097187": 102, + "21": 3, + "22": 131, + "23": 147, + "25": 32, + "26": 4, + "27": 23, + "29": 4, + "3": 151, + "30": 4, + "31": 19, + "33": 32, + "34": 4, + "35": 151, + "36": 255, + "37": 196, + "38": 132, + "39": 147, + "41": 32, + "42": 5, + "43": 23, + "44": 255, + "45": 133, + "46": 5, + "47": 19, + "49": 2, + "5": 2, + "50": 176, + "51": 7, + "53": 3, + "54": 49, + "55": 7, + "57": 3, + "58": 178, + "59": 7, + "6": 130, + "60": 26, + "62": 3, + "63": 83, + "64": 26, + "65": 33, + "66": 4, + "67": 83, + "68": 26, + "69": 66, + "7": 147, + "70": 5, + "71": 83, + "73": 4, + "74": 38, + "75": 7, + "77": 4, + "78": 167, + "79": 7, + "81": 5, + "82": 40, + "83": 7, + "84": 24, + "85": 230, + "86": 9, + "87": 83, + "88": 25, + "89": 7, + "9": 32, + "90": 10, + "91": 83, + "92": 24, + "93": 200, + "94": 11, + "95": 83, + "97": 160, + "98": 8, + "99": 147, + }, + registers: { + "f0,ft0": "0x408354fa6defc7a4", + "f10,fa0": "0x3ff0000000000000", + "f12,fa2": "0xffffffff42f73e9b", + "f14,fa4": "0xffffffff43e42c08", + "f16,fa6": "0xffffffffc5ec1466", + "f18,fs2": "0xffffffff3e8ab307", + "f2,ft2": "0x408c12c083126e98", + "f20,fs4": "0xffffffffbd776cd1", + "f22,fs6": "0xffffffffc2747094", + "f4,ft4": "0x40c35cc666666666", + "f6,ft6": "0x3ff0000000000000", + "f8,fs0": "0x3ff0000000000000", + "x10,a0": "0x200020", + "x17,a7": "0xa", + "x5,t0": "0x200000", + "x6,t1": "0x200008", + "x7,t2": "0x200010", + "x8,fp,s0": "0x200018", + "x9,s1": "0x20001c", + mtime: "0x1a", + pc: "0x68", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_056.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_056.s.snap new file mode 100644 index 000000000..6cf69cd3b --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_056.s.snap @@ -0,0 +1,155 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_056.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 3, + "103": 115, + "11": 23, + "13": 3, + "14": 3, + "15": 19, + "17": 32, + "18": 3, + "19": 151, + "2": 2, + "2097152": 64, + "2097153": 131, + "2097154": 84, + "2097155": 250, + "2097156": 109, + "2097157": 239, + "2097158": 199, + "2097159": 164, + "2097160": 64, + "2097161": 140, + "2097162": 18, + "2097163": 192, + "2097164": 131, + "2097165": 18, + "2097166": 110, + "2097167": 152, + "2097168": 64, + "2097169": 195, + "2097170": 92, + "2097171": 198, + "2097172": 102, + "2097173": 102, + "2097174": 102, + "2097175": 102, + "2097176": 66, + "2097177": 247, + "2097178": 62, + "2097179": 155, + "2097180": 67, + "2097181": 228, + "2097182": 44, + "2097183": 8, + "2097184": 197, + "2097185": 236, + "2097186": 20, + "2097187": 102, + "21": 3, + "22": 131, + "23": 147, + "25": 32, + "26": 4, + "27": 23, + "29": 4, + "3": 151, + "30": 4, + "31": 19, + "33": 32, + "34": 4, + "35": 151, + "36": 255, + "37": 196, + "38": 132, + "39": 147, + "41": 32, + "42": 5, + "43": 23, + "44": 255, + "45": 133, + "46": 5, + "47": 19, + "49": 2, + "5": 2, + "50": 176, + "51": 7, + "53": 3, + "54": 49, + "55": 7, + "57": 3, + "58": 178, + "59": 7, + "6": 130, + "60": 42, + "61": 32, + "62": 3, + "63": 83, + "64": 42, + "65": 65, + "66": 4, + "67": 83, + "68": 42, + "69": 2, + "7": 147, + "70": 5, + "71": 83, + "73": 4, + "74": 38, + "75": 7, + "77": 4, + "78": 167, + "79": 7, + "81": 5, + "82": 40, + "83": 7, + "84": 40, + "85": 230, + "86": 9, + "87": 83, + "88": 41, + "89": 7, + "9": 32, + "90": 10, + "91": 83, + "92": 40, + "93": 200, + "94": 11, + "95": 83, + "97": 160, + "98": 8, + "99": 147, + }, + registers: { + "f0,ft0": "0x408354fa6defc7a4", + "f10,fa0": "0x408354fa6defc7a4", + "f12,fa2": "0xffffffff42f73e9b", + "f14,fa4": "0xffffffff43e42c08", + "f16,fa6": "0xffffffffc5ec1466", + "f18,fs2": "0xffffffff42f73e9b", + "f2,ft2": "0x408c12c083126e98", + "f20,fs4": "0xffffffffc5ec1466", + "f22,fs6": "0xffffffffc5ec1466", + "f4,ft4": "0x40c35cc666666666", + "f6,ft6": "0x408354fa6defc7a4", + "f8,fs0": "0x408c12c083126e98", + "x10,a0": "0x200020", + "x17,a7": "0xa", + "x5,t0": "0x200000", + "x6,t1": "0x200008", + "x7,t2": "0x200010", + "x8,fp,s0": "0x200018", + "x9,s1": "0x20001c", + mtime: "0x1a", + pc: "0x68", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_057.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_057.s.snap new file mode 100644 index 000000000..0c98667bd --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_057.s.snap @@ -0,0 +1,155 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_057.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 3, + "103": 115, + "11": 23, + "13": 3, + "14": 3, + "15": 19, + "17": 32, + "18": 3, + "19": 151, + "2": 2, + "2097152": 64, + "2097153": 131, + "2097154": 84, + "2097155": 250, + "2097156": 109, + "2097157": 239, + "2097158": 199, + "2097159": 164, + "2097160": 64, + "2097161": 140, + "2097162": 18, + "2097163": 192, + "2097164": 131, + "2097165": 18, + "2097166": 110, + "2097167": 152, + "2097168": 64, + "2097169": 195, + "2097170": 92, + "2097171": 198, + "2097172": 102, + "2097173": 102, + "2097174": 102, + "2097175": 102, + "2097176": 66, + "2097177": 247, + "2097178": 62, + "2097179": 155, + "2097180": 67, + "2097181": 228, + "2097182": 44, + "2097183": 8, + "2097184": 197, + "2097185": 236, + "2097186": 20, + "2097187": 102, + "21": 3, + "22": 131, + "23": 147, + "25": 32, + "26": 4, + "27": 23, + "29": 4, + "3": 151, + "30": 4, + "31": 19, + "33": 32, + "34": 4, + "35": 151, + "36": 255, + "37": 196, + "38": 132, + "39": 147, + "41": 32, + "42": 5, + "43": 23, + "44": 255, + "45": 133, + "46": 5, + "47": 19, + "49": 2, + "5": 2, + "50": 176, + "51": 7, + "53": 3, + "54": 49, + "55": 7, + "57": 3, + "58": 178, + "59": 7, + "6": 130, + "60": 42, + "61": 32, + "62": 19, + "63": 83, + "64": 42, + "65": 65, + "66": 20, + "67": 83, + "68": 42, + "69": 2, + "7": 147, + "70": 21, + "71": 83, + "73": 4, + "74": 38, + "75": 7, + "77": 4, + "78": 167, + "79": 7, + "81": 5, + "82": 40, + "83": 7, + "84": 40, + "85": 230, + "86": 25, + "87": 83, + "88": 41, + "89": 7, + "9": 32, + "90": 26, + "91": 83, + "92": 40, + "93": 200, + "94": 27, + "95": 83, + "97": 160, + "98": 8, + "99": 147, + }, + registers: { + "f0,ft0": "0x408354fa6defc7a4", + "f10,fa0": "0x40c35cc666666666", + "f12,fa2": "0xffffffff42f73e9b", + "f14,fa4": "0xffffffff43e42c08", + "f16,fa6": "0xffffffffc5ec1466", + "f18,fs2": "0xffffffff43e42c08", + "f2,ft2": "0x408c12c083126e98", + "f20,fs4": "0xffffffff43e42c08", + "f22,fs6": "0xffffffff42f73e9b", + "f4,ft4": "0x40c35cc666666666", + "f6,ft6": "0x408c12c083126e98", + "f8,fs0": "0x40c35cc666666666", + "x10,a0": "0x200020", + "x17,a7": "0xa", + "x5,t0": "0x200000", + "x6,t1": "0x200008", + "x7,t2": "0x200010", + "x8,fp,s0": "0x200018", + "x9,s1": "0x20001c", + mtime: "0x1a", + pc: "0x68", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_058.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_058.s.snap new file mode 100644 index 000000000..cb99e278d --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_058.s.snap @@ -0,0 +1,131 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_058.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 3, + "103": 115, + "11": 23, + "13": 3, + "14": 3, + "15": 19, + "17": 32, + "18": 3, + "19": 151, + "2": 2, + "2097152": 64, + "2097153": 112, + "2097160": 64, + "2097161": 171, + "2097162": 50, + "2097168": 64, + "2097169": 181, + "2097170": 100, + "2097176": 70, + "2097177": 25, + "2097178": 36, + "2097180": 70, + "2097181": 1, + "2097182": 100, + "2097184": 70, + "2097185": 16, + "21": 3, + "22": 131, + "23": 147, + "25": 32, + "26": 4, + "27": 23, + "29": 4, + "3": 151, + "30": 4, + "31": 19, + "33": 32, + "34": 4, + "35": 151, + "36": 255, + "37": 196, + "38": 132, + "39": 147, + "41": 32, + "42": 5, + "43": 23, + "44": 255, + "45": 133, + "46": 5, + "47": 19, + "49": 2, + "5": 2, + "50": 176, + "51": 7, + "53": 3, + "54": 49, + "55": 7, + "57": 3, + "58": 178, + "59": 7, + "6": 130, + "60": 90, + "62": 3, + "63": 83, + "64": 90, + "65": 1, + "66": 4, + "67": 83, + "68": 90, + "69": 2, + "7": 147, + "70": 5, + "71": 83, + "73": 4, + "74": 38, + "75": 7, + "77": 4, + "78": 167, + "79": 7, + "81": 5, + "82": 40, + "83": 7, + "84": 88, + "85": 6, + "86": 3, + "87": 83, + "88": 88, + "89": 7, + "9": 32, + "90": 4, + "91": 83, + "92": 88, + "93": 8, + "94": 5, + "95": 83, + "97": 160, + "98": 8, + "99": 147, + }, + registers: { + "f0,ft0": "0x4070000000000000", + "f10,fa0": "0xffffffff42c00000", + "f12,fa2": "0xffffffff46192400", + "f14,fa4": "0xffffffff46016400", + "f16,fa6": "0xffffffff46100000", + "f2,ft2": "0x40ab320000000000", + "f4,ft4": "0x40b5640000000000", + "f6,ft6": "0xffffffff42c60000", + "f8,fs0": "0xffffffff42b60000", + "x10,a0": "0x200020", + "x17,a7": "0xa", + "x5,t0": "0x200000", + "x6,t1": "0x200008", + "x7,t2": "0x200010", + "x8,fp,s0": "0x200018", + "x9,s1": "0x20001c", + mtime: "0x1a", + pc: "0x68", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_059.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_059.s.snap new file mode 100644 index 000000000..96406e977 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_059.s.snap @@ -0,0 +1,131 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_059.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 3, + "103": 115, + "11": 23, + "13": 3, + "14": 3, + "15": 19, + "17": 32, + "18": 3, + "19": 151, + "2": 2, + "2097152": 64, + "2097153": 112, + "2097160": 64, + "2097161": 171, + "2097162": 50, + "2097168": 64, + "2097169": 181, + "2097170": 100, + "2097176": 70, + "2097177": 25, + "2097178": 36, + "2097180": 70, + "2097181": 1, + "2097182": 100, + "2097184": 70, + "2097185": 16, + "21": 3, + "22": 131, + "23": 147, + "25": 32, + "26": 4, + "27": 23, + "29": 4, + "3": 151, + "30": 4, + "31": 19, + "33": 32, + "34": 4, + "35": 151, + "36": 255, + "37": 196, + "38": 132, + "39": 147, + "41": 32, + "42": 5, + "43": 23, + "44": 255, + "45": 133, + "46": 5, + "47": 19, + "49": 2, + "5": 2, + "50": 176, + "51": 7, + "53": 3, + "54": 49, + "55": 7, + "57": 3, + "58": 178, + "59": 7, + "6": 130, + "60": 2, + "62": 3, + "63": 67, + "64": 18, + "65": 33, + "66": 4, + "67": 67, + "68": 34, + "69": 66, + "7": 147, + "70": 5, + "71": 67, + "73": 4, + "74": 38, + "75": 7, + "77": 4, + "78": 167, + "79": 7, + "81": 5, + "82": 40, + "83": 7, + "84": 96, + "85": 198, + "86": 3, + "87": 67, + "88": 112, + "89": 231, + "9": 32, + "90": 4, + "91": 67, + "92": 129, + "93": 8, + "94": 5, + "95": 67, + "97": 160, + "98": 8, + "99": 147, + }, + registers: { + "f0,ft0": "0x4070000000000000", + "f10,fa0": "0xffffffff4ca20480", + "f12,fa2": "0xffffffff46192400", + "f14,fa4": "0xffffffff46016400", + "f16,fa6": "0xffffffff46100000", + "f2,ft2": "0x40ab320000000000", + "f4,ft4": "0x40b5640000000000", + "f6,ft6": "0xffffffff4cb73ce3", + "f8,fs0": "0xffffffff4c82cfe9", + "x10,a0": "0x200020", + "x17,a7": "0xa", + "x5,t0": "0x200000", + "x6,t1": "0x200008", + "x7,t2": "0x200010", + "x8,fp,s0": "0x200018", + "x9,s1": "0x20001c", + mtime: "0x1a", + pc: "0x68", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_060.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_060.s.snap new file mode 100644 index 000000000..ac1b19a83 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_060.s.snap @@ -0,0 +1,131 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_060.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 3, + "103": 115, + "11": 23, + "13": 3, + "14": 3, + "15": 19, + "17": 32, + "18": 3, + "19": 151, + "2": 2, + "2097152": 64, + "2097153": 112, + "2097160": 64, + "2097161": 171, + "2097162": 50, + "2097168": 64, + "2097169": 181, + "2097170": 100, + "2097176": 70, + "2097177": 25, + "2097178": 36, + "2097180": 70, + "2097181": 1, + "2097182": 100, + "2097184": 70, + "2097185": 16, + "21": 3, + "22": 131, + "23": 147, + "25": 32, + "26": 4, + "27": 23, + "29": 4, + "3": 151, + "30": 4, + "31": 19, + "33": 32, + "34": 4, + "35": 151, + "36": 255, + "37": 196, + "38": 132, + "39": 147, + "41": 32, + "42": 5, + "43": 23, + "44": 255, + "45": 133, + "46": 5, + "47": 19, + "49": 2, + "5": 2, + "50": 176, + "51": 7, + "53": 3, + "54": 49, + "55": 7, + "57": 3, + "58": 178, + "59": 7, + "6": 130, + "60": 2, + "62": 3, + "63": 71, + "64": 18, + "65": 33, + "66": 4, + "67": 71, + "68": 34, + "69": 66, + "7": 147, + "70": 5, + "71": 71, + "73": 4, + "74": 38, + "75": 7, + "77": 4, + "78": 167, + "79": 7, + "81": 5, + "82": 40, + "83": 7, + "84": 96, + "85": 198, + "86": 3, + "87": 71, + "88": 112, + "89": 231, + "9": 32, + "90": 4, + "91": 71, + "92": 129, + "93": 8, + "94": 5, + "95": 71, + "97": 160, + "98": 8, + "99": 147, + }, + registers: { + "f0,ft0": "0x4070000000000000", + "f10,fa0": "0xffffffff4ca1fb80", + "f12,fa2": "0xffffffff46192400", + "f14,fa4": "0xffffffff46016400", + "f16,fa6": "0xffffffff46100000", + "f2,ft2": "0x40ab320000000000", + "f4,ft4": "0x40b5640000000000", + "f6,ft6": "0xffffffff4cb73351", + "f8,fs0": "0xffffffff4c82c7d3", + "x10,a0": "0x200020", + "x17,a7": "0xa", + "x5,t0": "0x200000", + "x6,t1": "0x200008", + "x7,t2": "0x200010", + "x8,fp,s0": "0x200018", + "x9,s1": "0x20001c", + mtime: "0x1a", + pc: "0x68", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_061.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_061.s.snap new file mode 100644 index 000000000..82fff505f --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_061.s.snap @@ -0,0 +1,134 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_061.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 3, + "103": 115, + "11": 23, + "13": 3, + "14": 3, + "15": 19, + "17": 32, + "18": 3, + "19": 151, + "2": 2, + "2097152": 64, + "2097153": 112, + "2097160": 192, + "2097161": 171, + "2097162": 50, + "2097168": 64, + "2097169": 181, + "2097170": 100, + "2097176": 198, + "2097177": 25, + "2097178": 36, + "2097180": 70, + "2097181": 1, + "2097182": 100, + "2097184": 198, + "2097185": 16, + "21": 3, + "22": 131, + "23": 147, + "25": 32, + "26": 4, + "27": 23, + "29": 4, + "3": 151, + "30": 4, + "31": 19, + "33": 32, + "34": 4, + "35": 151, + "36": 255, + "37": 196, + "38": 132, + "39": 147, + "41": 32, + "42": 5, + "43": 23, + "44": 255, + "45": 133, + "46": 5, + "47": 19, + "49": 2, + "5": 2, + "50": 176, + "51": 7, + "53": 3, + "54": 49, + "55": 7, + "57": 3, + "58": 178, + "59": 7, + "6": 130, + "60": 34, + "62": 35, + "63": 83, + "64": 34, + "65": 33, + "66": 36, + "67": 83, + "68": 34, + "69": 66, + "7": 147, + "70": 37, + "71": 83, + "73": 4, + "74": 38, + "75": 7, + "77": 4, + "78": 167, + "79": 7, + "81": 5, + "82": 40, + "83": 7, + "84": 32, + "85": 198, + "86": 41, + "87": 83, + "88": 32, + "89": 231, + "9": 32, + "90": 42, + "91": 83, + "92": 33, + "93": 8, + "94": 43, + "95": 83, + "97": 160, + "98": 8, + "99": 147, + }, + registers: { + "f0,ft0": "0x4070000000000000", + "f10,fa0": "0x40b5640000000000", + "f12,fa2": "0xffffffffc6192400", + "f14,fa4": "0xffffffff46016400", + "f16,fa6": "0xffffffffc6100000", + "f18,fs2": "0xffffffff46192400", + "f2,ft2": "0xc0ab320000000000", + "f20,fs4": "0xffffffff46016400", + "f22,fs6": "0xffffffff46100000", + "f4,ft4": "0x40b5640000000000", + "f6,ft6": "0x4070000000000000", + "f8,fs0": "0x40ab320000000000", + "x10,a0": "0x200020", + "x17,a7": "0xa", + "x5,t0": "0x200000", + "x6,t1": "0x200008", + "x7,t2": "0x200010", + "x8,fp,s0": "0x200018", + "x9,s1": "0x20001c", + mtime: "0x1a", + pc: "0x68", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_062.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_062.s.snap new file mode 100644 index 000000000..6b01239b0 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_062.s.snap @@ -0,0 +1,134 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_062.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 3, + "103": 115, + "11": 23, + "13": 3, + "14": 3, + "15": 19, + "17": 32, + "18": 3, + "19": 151, + "2": 2, + "2097152": 64, + "2097153": 112, + "2097160": 192, + "2097161": 171, + "2097162": 50, + "2097168": 64, + "2097169": 181, + "2097170": 100, + "2097176": 198, + "2097177": 25, + "2097178": 36, + "2097180": 70, + "2097181": 1, + "2097182": 100, + "2097184": 198, + "2097185": 16, + "21": 3, + "22": 131, + "23": 147, + "25": 32, + "26": 4, + "27": 23, + "29": 4, + "3": 151, + "30": 4, + "31": 19, + "33": 32, + "34": 4, + "35": 151, + "36": 255, + "37": 196, + "38": 132, + "39": 147, + "41": 32, + "42": 5, + "43": 23, + "44": 255, + "45": 133, + "46": 5, + "47": 19, + "49": 2, + "5": 2, + "50": 176, + "51": 7, + "53": 3, + "54": 49, + "55": 7, + "57": 3, + "58": 178, + "59": 7, + "6": 130, + "60": 34, + "62": 19, + "63": 83, + "64": 34, + "65": 33, + "66": 20, + "67": 83, + "68": 34, + "69": 66, + "7": 147, + "70": 21, + "71": 83, + "73": 4, + "74": 38, + "75": 7, + "77": 4, + "78": 167, + "79": 7, + "81": 5, + "82": 40, + "83": 7, + "84": 32, + "85": 198, + "86": 25, + "87": 83, + "88": 32, + "89": 231, + "9": 32, + "90": 26, + "91": 83, + "92": 33, + "93": 8, + "94": 27, + "95": 83, + "97": 160, + "98": 8, + "99": 147, + }, + registers: { + "f0,ft0": "0x4070000000000000", + "f10,fa0": "0xc0b5640000000000", + "f12,fa2": "0xffffffffc6192400", + "f14,fa4": "0xffffffff46016400", + "f16,fa6": "0xffffffffc6100000", + "f18,fs2": "0xffffffff46192400", + "f2,ft2": "0xc0ab320000000000", + "f20,fs4": "0xffffffffc6016400", + "f22,fs6": "0xffffffff46100000", + "f4,ft4": "0x40b5640000000000", + "f6,ft6": "0xc070000000000000", + "f8,fs0": "0x40ab320000000000", + "x10,a0": "0x200020", + "x17,a7": "0xa", + "x5,t0": "0x200000", + "x6,t1": "0x200008", + "x7,t2": "0x200010", + "x8,fp,s0": "0x200018", + "x9,s1": "0x20001c", + mtime: "0x1a", + pc: "0x68", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_063.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_063.s.snap new file mode 100644 index 000000000..269980e0d --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_063.s.snap @@ -0,0 +1,154 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_063.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 3, + "100": 160, + "101": 231, + "102": 41, + "103": 83, + "104": 160, + "105": 230, + "106": 41, + "107": 211, + "108": 160, + "109": 199, + "11": 23, + "110": 42, + "111": 83, + "112": 161, + "113": 6, + "114": 42, + "115": 211, + "116": 161, + "117": 8, + "118": 43, + "119": 83, + "121": 160, + "122": 8, + "123": 147, + "127": 115, + "13": 3, + "14": 3, + "15": 19, + "17": 32, + "18": 3, + "19": 151, + "2": 2, + "2097152": 64, + "2097153": 112, + "2097160": 64, + "2097161": 171, + "2097162": 50, + "2097168": 127, + "2097169": 248, + "2097176": 70, + "2097177": 25, + "2097178": 36, + "2097180": 70, + "2097181": 36, + "2097182": 26, + "2097184": 127, + "2097185": 248, + "21": 3, + "22": 131, + "23": 147, + "25": 32, + "26": 4, + "27": 23, + "29": 4, + "3": 151, + "30": 4, + "31": 19, + "33": 32, + "34": 4, + "35": 151, + "36": 255, + "37": 196, + "38": 132, + "39": 147, + "41": 32, + "42": 5, + "43": 23, + "44": 255, + "45": 133, + "46": 5, + "47": 19, + "49": 2, + "5": 2, + "50": 176, + "51": 7, + "53": 3, + "54": 49, + "55": 7, + "57": 3, + "58": 178, + "59": 7, + "6": 130, + "60": 162, + "62": 37, + "63": 211, + "64": 162, + "65": 33, + "66": 38, + "67": 83, + "68": 162, + "69": 32, + "7": 147, + "70": 38, + "71": 211, + "72": 162, + "73": 1, + "74": 39, + "75": 83, + "76": 162, + "77": 64, + "78": 39, + "79": 211, + "80": 162, + "81": 66, + "82": 40, + "83": 83, + "85": 4, + "86": 38, + "87": 7, + "89": 4, + "9": 32, + "90": 167, + "91": 7, + "93": 5, + "94": 40, + "95": 7, + "96": 160, + "97": 198, + "98": 40, + "99": 211, + }, + registers: { + "f0,ft0": "0x4070000000000000", + "f12,fa2": "0xffffffff46192400", + "f14,fa4": "0xffffffff46241a00", + "f16,fa6": "0xffffffff7ff80000", + "f2,ft2": "0x40ab320000000000", + "f4,ft4": "0x7ff8000000000000", + "x10,a0": "0x200020", + "x11,a1": "0x1", + "x12,a2": "0x1", + "x17,a7": "0xa", + "x18,s2": "0x1", + "x5,t0": "0x200000", + "x6,t1": "0x200008", + "x7,t2": "0x200010", + "x8,fp,s0": "0x200018", + "x9,s1": "0x20001c", + mtime: "0x20", + pc: "0x80", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_064.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_064.s.snap new file mode 100644 index 000000000..f8458d62e --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_064.s.snap @@ -0,0 +1,156 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_064.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 3, + "100": 160, + "101": 231, + "102": 9, + "103": 83, + "104": 160, + "105": 230, + "106": 9, + "107": 211, + "108": 160, + "109": 199, + "11": 23, + "110": 10, + "111": 83, + "112": 161, + "113": 6, + "114": 10, + "115": 211, + "116": 161, + "117": 8, + "118": 11, + "119": 83, + "121": 160, + "122": 8, + "123": 147, + "127": 115, + "13": 3, + "14": 3, + "15": 19, + "17": 32, + "18": 3, + "19": 151, + "2": 2, + "2097152": 64, + "2097153": 112, + "2097160": 64, + "2097161": 171, + "2097162": 50, + "2097168": 127, + "2097169": 248, + "2097176": 70, + "2097177": 25, + "2097178": 36, + "2097180": 70, + "2097181": 36, + "2097182": 26, + "2097184": 127, + "2097185": 248, + "21": 3, + "22": 131, + "23": 147, + "25": 32, + "26": 4, + "27": 23, + "29": 4, + "3": 151, + "30": 4, + "31": 19, + "33": 32, + "34": 4, + "35": 151, + "36": 255, + "37": 196, + "38": 132, + "39": 147, + "41": 32, + "42": 5, + "43": 23, + "44": 255, + "45": 133, + "46": 5, + "47": 19, + "49": 2, + "5": 2, + "50": 176, + "51": 7, + "53": 3, + "54": 49, + "55": 7, + "57": 3, + "58": 178, + "59": 7, + "6": 130, + "60": 162, + "62": 5, + "63": 211, + "64": 162, + "65": 33, + "66": 6, + "67": 83, + "68": 162, + "69": 32, + "7": 147, + "70": 6, + "71": 211, + "72": 162, + "73": 1, + "74": 7, + "75": 83, + "76": 162, + "77": 64, + "78": 7, + "79": 211, + "80": 162, + "81": 66, + "82": 8, + "83": 83, + "85": 4, + "86": 38, + "87": 7, + "89": 4, + "9": 32, + "90": 167, + "91": 7, + "93": 5, + "94": 40, + "95": 7, + "96": 160, + "97": 198, + "98": 8, + "99": 211, + }, + registers: { + "f0,ft0": "0x4070000000000000", + "f12,fa2": "0xffffffff46192400", + "f14,fa4": "0xffffffff46241a00", + "f16,fa6": "0xffffffff7ff80000", + "f2,ft2": "0x40ab320000000000", + "f4,ft4": "0x7ff8000000000000", + "x10,a0": "0x200020", + "x11,a1": "0x1", + "x12,a2": "0x1", + "x13,a3": "0x1", + "x17,a7": "0xa", + "x18,s2": "0x1", + "x19,s3": "0x1", + "x5,t0": "0x200000", + "x6,t1": "0x200008", + "x7,t2": "0x200010", + "x8,fp,s0": "0x200018", + "x9,s1": "0x20001c", + mtime: "0x20", + pc: "0x80", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_065.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_065.s.snap new file mode 100644 index 000000000..35580d2e7 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_065.s.snap @@ -0,0 +1,153 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_065.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 3, + "100": 160, + "101": 231, + "102": 25, + "103": 83, + "104": 160, + "105": 230, + "106": 25, + "107": 211, + "108": 160, + "109": 199, + "11": 23, + "110": 26, + "111": 83, + "112": 161, + "113": 6, + "114": 26, + "115": 211, + "116": 161, + "117": 8, + "118": 27, + "119": 83, + "121": 160, + "122": 8, + "123": 147, + "127": 115, + "13": 3, + "14": 3, + "15": 19, + "17": 32, + "18": 3, + "19": 151, + "2": 2, + "2097152": 64, + "2097153": 112, + "2097160": 64, + "2097161": 171, + "2097162": 50, + "2097168": 127, + "2097169": 248, + "2097176": 70, + "2097177": 25, + "2097178": 36, + "2097180": 70, + "2097181": 36, + "2097182": 26, + "2097184": 127, + "2097185": 248, + "21": 3, + "22": 131, + "23": 147, + "25": 32, + "26": 4, + "27": 23, + "29": 4, + "3": 151, + "30": 4, + "31": 19, + "33": 32, + "34": 4, + "35": 151, + "36": 255, + "37": 196, + "38": 132, + "39": 147, + "41": 32, + "42": 5, + "43": 23, + "44": 255, + "45": 133, + "46": 5, + "47": 19, + "49": 2, + "5": 2, + "50": 176, + "51": 7, + "53": 3, + "54": 49, + "55": 7, + "57": 3, + "58": 178, + "59": 7, + "6": 130, + "60": 162, + "62": 21, + "63": 211, + "64": 162, + "65": 33, + "66": 22, + "67": 83, + "68": 162, + "69": 32, + "7": 147, + "70": 22, + "71": 211, + "72": 162, + "73": 1, + "74": 23, + "75": 83, + "76": 162, + "77": 64, + "78": 23, + "79": 211, + "80": 162, + "81": 66, + "82": 24, + "83": 83, + "85": 4, + "86": 38, + "87": 7, + "89": 4, + "9": 32, + "90": 167, + "91": 7, + "93": 5, + "94": 40, + "95": 7, + "96": 160, + "97": 198, + "98": 24, + "99": 211, + }, + registers: { + "f0,ft0": "0x4070000000000000", + "f12,fa2": "0xffffffff46192400", + "f14,fa4": "0xffffffff46241a00", + "f16,fa6": "0xffffffff7ff80000", + "f2,ft2": "0x40ab320000000000", + "f4,ft4": "0x7ff8000000000000", + "x10,a0": "0x200020", + "x13,a3": "0x1", + "x17,a7": "0xa", + "x19,s3": "0x1", + "x5,t0": "0x200000", + "x6,t1": "0x200008", + "x7,t2": "0x200010", + "x8,fp,s0": "0x200018", + "x9,s1": "0x20001c", + mtime: "0x20", + pc: "0x80", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_001.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_001.s.snap new file mode 100644 index 000000000..a51178411 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_001.s.snap @@ -0,0 +1,56 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_001.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 80, + "10": 8, + "11": 147, + "15": 115, + "16": 255, + "17": 65, + "18": 1, + "19": 19, + "2": 5, + "21": 17, + "22": 36, + "23": 35, + "25": 129, + "26": 34, + "268435451": 8, + "27": 35, + "29": 65, + "3": 19, + "30": 4, + "31": 19, + "33": 32, + "34": 5, + "35": 19, + "37": 129, + "38": 32, + "39": 131, + "41": 65, + "42": 36, + "43": 3, + "45": 193, + "46": 1, + "47": 19, + "5": 192, + "50": 128, + "51": 103, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x10,a0": "0x2", + "x17,a7": "0xa", + mtime: "0xd", + pc: "0x10", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_002.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_002.s.snap new file mode 100644 index 000000000..de8915b87 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_002.s.snap @@ -0,0 +1,56 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_002.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 80, + "10": 8, + "11": 147, + "15": 115, + "16": 255, + "17": 65, + "18": 1, + "19": 19, + "2": 5, + "21": 17, + "22": 36, + "23": 35, + "25": 129, + "26": 34, + "268435451": 8, + "27": 35, + "29": 65, + "3": 147, + "30": 4, + "31": 19, + "33": 32, + "34": 5, + "35": 147, + "37": 129, + "38": 32, + "39": 131, + "41": 65, + "42": 36, + "43": 3, + "45": 193, + "46": 1, + "47": 19, + "5": 192, + "50": 128, + "51": 103, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x11,a1": "0x2", + "x17,a7": "0xa", + mtime: "0xd", + pc: "0x10", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_003.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_003.s.snap new file mode 100644 index 000000000..a5abb1645 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_003.s.snap @@ -0,0 +1,56 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_003.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 80, + "10": 8, + "11": 147, + "15": 115, + "16": 255, + "17": 65, + "18": 1, + "19": 19, + "2": 6, + "21": 17, + "22": 36, + "23": 35, + "25": 129, + "26": 34, + "268435451": 8, + "27": 35, + "29": 65, + "3": 19, + "30": 4, + "31": 19, + "33": 32, + "34": 6, + "35": 19, + "37": 129, + "38": 32, + "39": 131, + "41": 65, + "42": 36, + "43": 3, + "45": 193, + "46": 1, + "47": 19, + "5": 192, + "50": 128, + "51": 103, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x12,a2": "0x2", + "x17,a7": "0xa", + mtime: "0xd", + pc: "0x10", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_004.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_004.s.snap new file mode 100644 index 000000000..61979074d --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_004.s.snap @@ -0,0 +1,56 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_004.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 80, + "10": 8, + "11": 147, + "15": 115, + "16": 255, + "17": 65, + "18": 1, + "19": 19, + "2": 6, + "21": 17, + "22": 36, + "23": 35, + "25": 129, + "26": 34, + "268435451": 8, + "27": 35, + "29": 65, + "3": 147, + "30": 4, + "31": 19, + "33": 32, + "34": 6, + "35": 147, + "37": 129, + "38": 32, + "39": 131, + "41": 65, + "42": 36, + "43": 3, + "45": 193, + "46": 1, + "47": 19, + "5": 192, + "50": 128, + "51": 103, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x13,a3": "0x2", + "x17,a7": "0xa", + mtime: "0xd", + pc: "0x10", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_005.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_005.s.snap new file mode 100644 index 000000000..1e2e93131 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_005.s.snap @@ -0,0 +1,56 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_005.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 80, + "10": 8, + "11": 147, + "15": 115, + "16": 255, + "17": 65, + "18": 1, + "19": 19, + "2": 7, + "21": 17, + "22": 36, + "23": 35, + "25": 129, + "26": 34, + "268435451": 8, + "27": 35, + "29": 65, + "3": 19, + "30": 4, + "31": 19, + "33": 32, + "34": 7, + "35": 19, + "37": 129, + "38": 32, + "39": 131, + "41": 65, + "42": 36, + "43": 3, + "45": 193, + "46": 1, + "47": 19, + "5": 192, + "50": 128, + "51": 103, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x14,a4": "0x2", + "x17,a7": "0xa", + mtime: "0xd", + pc: "0x10", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_006.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_006.s.snap new file mode 100644 index 000000000..ce30724f6 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_006.s.snap @@ -0,0 +1,56 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_006.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 80, + "10": 8, + "11": 147, + "15": 115, + "16": 255, + "17": 65, + "18": 1, + "19": 19, + "2": 7, + "21": 17, + "22": 36, + "23": 35, + "25": 129, + "26": 34, + "268435451": 8, + "27": 35, + "29": 65, + "3": 147, + "30": 4, + "31": 19, + "33": 32, + "34": 7, + "35": 147, + "37": 129, + "38": 32, + "39": 131, + "41": 65, + "42": 36, + "43": 3, + "45": 193, + "46": 1, + "47": 19, + "5": 192, + "50": 128, + "51": 103, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x15,a5": "0x2", + "x17,a7": "0xa", + mtime: "0xd", + pc: "0x10", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_007.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_007.s.snap new file mode 100644 index 000000000..83c508aae --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_007.s.snap @@ -0,0 +1,56 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_007.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 80, + "10": 8, + "11": 147, + "15": 115, + "16": 255, + "17": 65, + "18": 1, + "19": 19, + "2": 8, + "21": 17, + "22": 36, + "23": 35, + "25": 129, + "26": 34, + "268435451": 8, + "27": 35, + "29": 65, + "3": 19, + "30": 4, + "31": 19, + "33": 32, + "34": 8, + "35": 19, + "37": 129, + "38": 32, + "39": 131, + "41": 65, + "42": 36, + "43": 3, + "45": 193, + "46": 1, + "47": 19, + "5": 192, + "50": 128, + "51": 103, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x16,a6": "0x2", + "x17,a7": "0xa", + mtime: "0xd", + pc: "0x10", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_008.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_008.s.snap new file mode 100644 index 000000000..223e7e346 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_008.s.snap @@ -0,0 +1,55 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_008.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 80, + "10": 8, + "11": 147, + "15": 115, + "16": 255, + "17": 65, + "18": 1, + "19": 19, + "2": 8, + "21": 17, + "22": 36, + "23": 35, + "25": 129, + "26": 34, + "268435451": 8, + "27": 35, + "29": 65, + "3": 147, + "30": 4, + "31": 19, + "33": 32, + "34": 8, + "35": 147, + "37": 129, + "38": 32, + "39": 131, + "41": 65, + "42": 36, + "43": 3, + "45": 193, + "46": 1, + "47": 19, + "5": 192, + "50": 128, + "51": 103, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x17,a7": "0xa", + mtime: "0xd", + pc: "0x10", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_009.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_009.s.snap new file mode 100644 index 000000000..502cbdb59 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_009.s.snap @@ -0,0 +1,60 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_009.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 16, + "11": 239, + "13": 160, + "14": 8, + "15": 147, + "19": 115, + "2": 2, + "20": 255, + "21": 65, + "22": 1, + "23": 19, + "25": 17, + "26": 36, + "268435451": 12, + "27": 35, + "29": 129, + "3": 147, + "30": 34, + "31": 35, + "33": 65, + "34": 4, + "35": 19, + "37": 32, + "38": 2, + "39": 147, + "41": 129, + "42": 32, + "43": 131, + "45": 65, + "46": 36, + "47": 3, + "49": 193, + "5": 80, + "50": 1, + "51": 19, + "54": 128, + "55": 103, + "6": 5, + "7": 19, + "9": 192, + }, + registers: { + "x1,ra": "0xc", + "x10,a0": "0x5", + "x17,a7": "0xa", + "x5,t0": "0x2", + mtime: "0xe", + pc: "0x14", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_010.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_010.s.snap new file mode 100644 index 000000000..2806b4ce4 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_010.s.snap @@ -0,0 +1,60 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_010.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 16, + "11": 239, + "13": 160, + "14": 8, + "15": 147, + "19": 115, + "2": 3, + "20": 255, + "21": 65, + "22": 1, + "23": 19, + "25": 17, + "26": 36, + "268435451": 12, + "27": 35, + "29": 129, + "3": 19, + "30": 34, + "31": 35, + "33": 65, + "34": 4, + "35": 19, + "37": 32, + "38": 3, + "39": 19, + "41": 129, + "42": 32, + "43": 131, + "45": 65, + "46": 36, + "47": 3, + "49": 193, + "5": 80, + "50": 1, + "51": 19, + "54": 128, + "55": 103, + "6": 5, + "7": 19, + "9": 192, + }, + registers: { + "x1,ra": "0xc", + "x10,a0": "0x5", + "x17,a7": "0xa", + "x6,t1": "0x2", + mtime: "0xe", + pc: "0x14", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_011.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_011.s.snap new file mode 100644 index 000000000..3ac9b2736 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_011.s.snap @@ -0,0 +1,60 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_011.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 16, + "11": 239, + "13": 160, + "14": 8, + "15": 147, + "19": 115, + "2": 3, + "20": 255, + "21": 65, + "22": 1, + "23": 19, + "25": 17, + "26": 36, + "268435451": 12, + "27": 35, + "29": 129, + "3": 147, + "30": 34, + "31": 35, + "33": 65, + "34": 4, + "35": 19, + "37": 32, + "38": 3, + "39": 147, + "41": 129, + "42": 32, + "43": 131, + "45": 65, + "46": 36, + "47": 3, + "49": 193, + "5": 80, + "50": 1, + "51": 19, + "54": 128, + "55": 103, + "6": 5, + "7": 19, + "9": 192, + }, + registers: { + "x1,ra": "0xc", + "x10,a0": "0x5", + "x17,a7": "0xa", + "x7,t2": "0x2", + mtime: "0xe", + pc: "0x14", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_012.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_012.s.snap new file mode 100644 index 000000000..88cbfc8bc --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_012.s.snap @@ -0,0 +1,60 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_012.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 16, + "11": 239, + "13": 160, + "14": 8, + "15": 147, + "19": 115, + "2": 14, + "20": 255, + "21": 65, + "22": 1, + "23": 19, + "25": 17, + "26": 36, + "268435451": 12, + "27": 35, + "29": 129, + "3": 19, + "30": 34, + "31": 35, + "33": 65, + "34": 4, + "35": 19, + "37": 32, + "38": 14, + "39": 19, + "41": 129, + "42": 32, + "43": 131, + "45": 65, + "46": 36, + "47": 3, + "49": 193, + "5": 80, + "50": 1, + "51": 19, + "54": 128, + "55": 103, + "6": 5, + "7": 19, + "9": 192, + }, + registers: { + "x1,ra": "0xc", + "x10,a0": "0x5", + "x17,a7": "0xa", + "x28,t3": "0x2", + mtime: "0xe", + pc: "0x14", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_013.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_013.s.snap new file mode 100644 index 000000000..25c25a0b6 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_013.s.snap @@ -0,0 +1,60 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_013.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 16, + "11": 239, + "13": 160, + "14": 8, + "15": 147, + "19": 115, + "2": 14, + "20": 255, + "21": 65, + "22": 1, + "23": 19, + "25": 17, + "26": 36, + "268435451": 12, + "27": 35, + "29": 129, + "3": 147, + "30": 34, + "31": 35, + "33": 65, + "34": 4, + "35": 19, + "37": 32, + "38": 14, + "39": 147, + "41": 129, + "42": 32, + "43": 131, + "45": 65, + "46": 36, + "47": 3, + "49": 193, + "5": 80, + "50": 1, + "51": 19, + "54": 128, + "55": 103, + "6": 5, + "7": 19, + "9": 192, + }, + registers: { + "x1,ra": "0xc", + "x10,a0": "0x5", + "x17,a7": "0xa", + "x29,t4": "0x2", + mtime: "0xe", + pc: "0x14", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_014.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_014.s.snap new file mode 100644 index 000000000..11c71c924 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_014.s.snap @@ -0,0 +1,60 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_014.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 16, + "11": 239, + "13": 160, + "14": 8, + "15": 147, + "19": 115, + "2": 15, + "20": 255, + "21": 65, + "22": 1, + "23": 19, + "25": 17, + "26": 36, + "268435451": 12, + "27": 35, + "29": 129, + "3": 19, + "30": 34, + "31": 35, + "33": 65, + "34": 4, + "35": 19, + "37": 32, + "38": 15, + "39": 19, + "41": 129, + "42": 32, + "43": 131, + "45": 65, + "46": 36, + "47": 3, + "49": 193, + "5": 80, + "50": 1, + "51": 19, + "54": 128, + "55": 103, + "6": 5, + "7": 19, + "9": 192, + }, + registers: { + "x1,ra": "0xc", + "x10,a0": "0x5", + "x17,a7": "0xa", + "x30,t5": "0x2", + mtime: "0xe", + pc: "0x14", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_015.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_015.s.snap new file mode 100644 index 000000000..14c8b1c0d --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_015.s.snap @@ -0,0 +1,60 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_015.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 16, + "11": 239, + "13": 160, + "14": 8, + "15": 147, + "19": 115, + "2": 15, + "20": 255, + "21": 65, + "22": 1, + "23": 19, + "25": 17, + "26": 36, + "268435451": 12, + "27": 35, + "29": 129, + "3": 147, + "30": 34, + "31": 35, + "33": 65, + "34": 4, + "35": 19, + "37": 32, + "38": 15, + "39": 147, + "41": 129, + "42": 32, + "43": 131, + "45": 65, + "46": 36, + "47": 3, + "49": 193, + "5": 80, + "50": 1, + "51": 19, + "54": 128, + "55": 103, + "6": 5, + "7": 19, + "9": 192, + }, + registers: { + "x1,ra": "0xc", + "x10,a0": "0x5", + "x17,a7": "0xa", + "x31,t6": "0x2", + mtime: "0xe", + pc: "0x14", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_016.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_016.s.snap new file mode 100644 index 000000000..7446e0332 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_016.s.snap @@ -0,0 +1,57 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_016.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 80, + "10": 8, + "11": 147, + "15": 115, + "16": 255, + "17": 65, + "18": 1, + "19": 19, + "2": 4, + "21": 17, + "22": 36, + "23": 35, + "25": 129, + "26": 34, + "268435447": 5, + "268435451": 8, + "27": 35, + "29": 65, + "3": 19, + "30": 4, + "31": 19, + "33": 32, + "34": 4, + "35": 19, + "37": 129, + "38": 32, + "39": 131, + "41": 65, + "42": 36, + "43": 3, + "45": 193, + "46": 1, + "47": 19, + "5": 192, + "50": 128, + "51": 103, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x17,a7": "0xa", + "x8,fp,s0": "0x5", + mtime: "0xd", + pc: "0x10", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_017.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_017.s.snap new file mode 100644 index 000000000..56b94e6e1 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_017.s.snap @@ -0,0 +1,63 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_017.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 80, + "10": 8, + "11": 147, + "15": 115, + "16": 255, + "17": 65, + "18": 1, + "19": 19, + "2": 4, + "21": 17, + "22": 36, + "23": 35, + "25": 129, + "26": 34, + "268435451": 8, + "27": 35, + "29": 65, + "3": 147, + "30": 4, + "31": 19, + "33": 32, + "34": 4, + "35": 147, + "37": 129, + "38": 32, + "39": 131, + "41": 65, + "42": 36, + "43": 3, + "45": 193, + "46": 1, + "47": 19, + "5": 192, + "50": 128, + "51": 103, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x17,a7": "0xa", + "x9,s1": "0x2", + mtime: "0xd", + pc: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register x9,s1 was used but never saved to memory + - Register x9,s1 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_018.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_018.s.snap new file mode 100644 index 000000000..a751d2d17 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_018.s.snap @@ -0,0 +1,63 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_018.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 80, + "10": 8, + "11": 147, + "15": 115, + "16": 255, + "17": 65, + "18": 1, + "19": 19, + "2": 9, + "21": 17, + "22": 36, + "23": 35, + "25": 129, + "26": 34, + "268435451": 8, + "27": 35, + "29": 65, + "3": 19, + "30": 4, + "31": 19, + "33": 32, + "34": 9, + "35": 19, + "37": 129, + "38": 32, + "39": 131, + "41": 65, + "42": 36, + "43": 3, + "45": 193, + "46": 1, + "47": 19, + "5": 192, + "50": 128, + "51": 103, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x17,a7": "0xa", + "x18,s2": "0x2", + mtime: "0xd", + pc: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register x18,s2 was used but never saved to memory + - Register x18,s2 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_019.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_019.s.snap new file mode 100644 index 000000000..160371a48 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_019.s.snap @@ -0,0 +1,63 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_019.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 80, + "10": 8, + "11": 147, + "15": 115, + "16": 255, + "17": 65, + "18": 1, + "19": 19, + "2": 9, + "21": 17, + "22": 36, + "23": 35, + "25": 129, + "26": 34, + "268435451": 8, + "27": 35, + "29": 65, + "3": 147, + "30": 4, + "31": 19, + "33": 32, + "34": 9, + "35": 147, + "37": 129, + "38": 32, + "39": 131, + "41": 65, + "42": 36, + "43": 3, + "45": 193, + "46": 1, + "47": 19, + "5": 192, + "50": 128, + "51": 103, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x17,a7": "0xa", + "x19,s3": "0x2", + mtime: "0xd", + pc: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register x19,s3 was used but never saved to memory + - Register x19,s3 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_020.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_020.s.snap new file mode 100644 index 000000000..be3f0ccac --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_020.s.snap @@ -0,0 +1,63 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_020.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 80, + "10": 8, + "11": 147, + "15": 115, + "16": 255, + "17": 65, + "18": 1, + "19": 19, + "2": 10, + "21": 17, + "22": 36, + "23": 35, + "25": 129, + "26": 34, + "268435451": 8, + "27": 35, + "29": 65, + "3": 19, + "30": 4, + "31": 19, + "33": 32, + "34": 10, + "35": 19, + "37": 129, + "38": 32, + "39": 131, + "41": 65, + "42": 36, + "43": 3, + "45": 193, + "46": 1, + "47": 19, + "5": 192, + "50": 128, + "51": 103, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x17,a7": "0xa", + "x20,s4": "0x2", + mtime: "0xd", + pc: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register x20,s4 was used but never saved to memory + - Register x20,s4 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_021.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_021.s.snap new file mode 100644 index 000000000..fd1213c7d --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_021.s.snap @@ -0,0 +1,63 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_021.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 80, + "10": 8, + "11": 147, + "15": 115, + "16": 255, + "17": 65, + "18": 1, + "19": 19, + "2": 10, + "21": 17, + "22": 36, + "23": 35, + "25": 129, + "26": 34, + "268435451": 8, + "27": 35, + "29": 65, + "3": 147, + "30": 4, + "31": 19, + "33": 32, + "34": 10, + "35": 147, + "37": 129, + "38": 32, + "39": 131, + "41": 65, + "42": 36, + "43": 3, + "45": 193, + "46": 1, + "47": 19, + "5": 192, + "50": 128, + "51": 103, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x17,a7": "0xa", + "x21,s5": "0x2", + mtime: "0xd", + pc: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register x21,s5 was used but never saved to memory + - Register x21,s5 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_022.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_022.s.snap new file mode 100644 index 000000000..3b4cd43a1 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_022.s.snap @@ -0,0 +1,63 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_022.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 80, + "10": 8, + "11": 147, + "15": 115, + "16": 255, + "17": 65, + "18": 1, + "19": 19, + "2": 11, + "21": 17, + "22": 36, + "23": 35, + "25": 129, + "26": 34, + "268435451": 8, + "27": 35, + "29": 65, + "3": 19, + "30": 4, + "31": 19, + "33": 32, + "34": 11, + "35": 19, + "37": 129, + "38": 32, + "39": 131, + "41": 65, + "42": 36, + "43": 3, + "45": 193, + "46": 1, + "47": 19, + "5": 192, + "50": 128, + "51": 103, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x17,a7": "0xa", + "x22,s6": "0x2", + mtime: "0xd", + pc: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register x22,s6 was used but never saved to memory + - Register x22,s6 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_023.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_023.s.snap new file mode 100644 index 000000000..6d1bf8296 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_023.s.snap @@ -0,0 +1,63 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_023.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 80, + "10": 8, + "11": 147, + "15": 115, + "16": 255, + "17": 65, + "18": 1, + "19": 19, + "2": 11, + "21": 17, + "22": 36, + "23": 35, + "25": 129, + "26": 34, + "268435451": 8, + "27": 35, + "29": 65, + "3": 147, + "30": 4, + "31": 19, + "33": 32, + "34": 11, + "35": 147, + "37": 129, + "38": 32, + "39": 131, + "41": 65, + "42": 36, + "43": 3, + "45": 193, + "46": 1, + "47": 19, + "5": 192, + "50": 128, + "51": 103, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x17,a7": "0xa", + "x23,s7": "0x2", + mtime: "0xd", + pc: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register x23,s7 was used but never saved to memory + - Register x23,s7 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_024.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_024.s.snap new file mode 100644 index 000000000..0603d2c62 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_024.s.snap @@ -0,0 +1,63 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_024.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 80, + "10": 8, + "11": 147, + "15": 115, + "16": 255, + "17": 65, + "18": 1, + "19": 19, + "2": 12, + "21": 17, + "22": 36, + "23": 35, + "25": 129, + "26": 34, + "268435451": 8, + "27": 35, + "29": 65, + "3": 19, + "30": 4, + "31": 19, + "33": 32, + "34": 12, + "35": 19, + "37": 129, + "38": 32, + "39": 131, + "41": 65, + "42": 36, + "43": 3, + "45": 193, + "46": 1, + "47": 19, + "5": 192, + "50": 128, + "51": 103, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x17,a7": "0xa", + "x24,s8": "0x2", + mtime: "0xd", + pc: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register x24,s8 was used but never saved to memory + - Register x24,s8 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_025.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_025.s.snap new file mode 100644 index 000000000..fd1a35565 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_025.s.snap @@ -0,0 +1,63 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_025.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 80, + "10": 8, + "11": 147, + "15": 115, + "16": 255, + "17": 65, + "18": 1, + "19": 19, + "2": 12, + "21": 17, + "22": 36, + "23": 35, + "25": 129, + "26": 34, + "268435451": 8, + "27": 35, + "29": 65, + "3": 147, + "30": 4, + "31": 19, + "33": 32, + "34": 12, + "35": 147, + "37": 129, + "38": 32, + "39": 131, + "41": 65, + "42": 36, + "43": 3, + "45": 193, + "46": 1, + "47": 19, + "5": 192, + "50": 128, + "51": 103, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x17,a7": "0xa", + "x25,s9": "0x2", + mtime: "0xd", + pc: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register x25,s9 was used but never saved to memory + - Register x25,s9 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_026.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_026.s.snap new file mode 100644 index 000000000..93fb738b8 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_026.s.snap @@ -0,0 +1,63 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_026.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 80, + "10": 8, + "11": 147, + "15": 115, + "16": 255, + "17": 65, + "18": 1, + "19": 19, + "2": 13, + "21": 17, + "22": 36, + "23": 35, + "25": 129, + "26": 34, + "268435451": 8, + "27": 35, + "29": 65, + "3": 19, + "30": 4, + "31": 19, + "33": 32, + "34": 13, + "35": 19, + "37": 129, + "38": 32, + "39": 131, + "41": 65, + "42": 36, + "43": 3, + "45": 193, + "46": 1, + "47": 19, + "5": 192, + "50": 128, + "51": 103, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x17,a7": "0xa", + "x26,s10": "0x2", + mtime: "0xd", + pc: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register x26,s10 was used but never saved to memory + - Register x26,s10 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_027.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_027.s.snap new file mode 100644 index 000000000..8e0dce267 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_027.s.snap @@ -0,0 +1,63 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_027.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 80, + "10": 8, + "11": 147, + "15": 115, + "16": 255, + "17": 65, + "18": 1, + "19": 19, + "2": 13, + "21": 17, + "22": 36, + "23": 35, + "25": 129, + "26": 34, + "268435451": 8, + "27": 35, + "29": 65, + "3": 147, + "30": 4, + "31": 19, + "33": 32, + "34": 13, + "35": 147, + "37": 129, + "38": 32, + "39": 131, + "41": 65, + "42": 36, + "43": 3, + "45": 193, + "46": 1, + "47": 19, + "5": 192, + "50": 128, + "51": 103, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x17,a7": "0xa", + "x27,s11": "0x2", + mtime: "0xd", + pc: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register x27,s11 was used but never saved to memory + - Register x27,s11 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_028.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_028.s.snap new file mode 100644 index 000000000..c1f6c2cee --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_028.s.snap @@ -0,0 +1,33 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_028.s 1`] = ` +{ + display: "", + error: "Error decoding instruction: Illegal Instruction: 0x00000000", + keyboard: "", + memory: { + "1": 80, + "10": 8, + "11": 147, + "15": 115, + "18": 16, + "19": 183, + "20": 8, + "21": 160, + "22": 128, + "23": 147, + "26": 128, + "27": 103, + "3": 147, + "5": 192, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x108a", + mtime: "0x5", + pc: "0x108a", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_029.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_029.s.snap new file mode 100644 index 000000000..0e6984b32 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_029.s.snap @@ -0,0 +1,37 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_029.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 192, + "11": 115, + "12": 255, + "13": 193, + "14": 1, + "15": 19, + "18": 128, + "19": 103, + "3": 239, + "5": 160, + "6": 8, + "7": 147, + }, + registers: { + "x1,ra": "0x4", + "x17,a7": "0xa", + "x2,sp": "0xffffff8", + mtime: "0x5", + pc: "0xc", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Stack pointer not restored: entered at 0xffffffc, exited at 0xffffff8", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_030.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_030.s.snap new file mode 100644 index 000000000..e287dd757 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_030.s.snap @@ -0,0 +1,33 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_030.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 80, + "10": 8, + "11": 147, + "15": 115, + "17": 80, + "18": 1, + "19": 147, + "2": 1, + "22": 128, + "23": 103, + "3": 147, + "5": 192, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x17,a7": "0xa", + "x3,gp": "0x5", + mtime: "0x6", + pc: "0x10", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_031.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_031.s.snap new file mode 100644 index 000000000..f4aeb993e --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_031.s.snap @@ -0,0 +1,33 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_031.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 80, + "10": 8, + "11": 147, + "15": 115, + "17": 80, + "18": 2, + "19": 19, + "2": 2, + "22": 128, + "23": 103, + "3": 19, + "5": 192, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x17,a7": "0xa", + "x4,tp": "0x5", + mtime: "0x6", + pc: "0x10", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_032.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_032.s.snap new file mode 100644 index 000000000..d6692847f --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_032.s.snap @@ -0,0 +1,47 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_032.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 8, + "11": 147, + "15": 115, + "16": 255, + "17": 129, + "18": 1, + "19": 19, + "2": 4, + "21": 145, + "22": 32, + "23": 35, + "25": 32, + "26": 4, + "268435447": 2, + "27": 147, + "29": 1, + "3": 147, + "30": 36, + "31": 131, + "33": 129, + "34": 1, + "35": 19, + "38": 128, + "39": 103, + "5": 192, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x17,a7": "0xa", + "x9,s1": "0x2", + mtime: "0xa", + pc: "0x10", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_033.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_033.s.snap new file mode 100644 index 000000000..d06a910d9 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_033.s.snap @@ -0,0 +1,50 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_033.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 80, + "10": 8, + "11": 147, + "15": 115, + "16": 255, + "17": 193, + "18": 1, + "19": 19, + "2": 4, + "21": 145, + "22": 32, + "23": 35, + "25": 80, + "26": 4, + "268435451": 5, + "27": 147, + "29": 65, + "3": 147, + "30": 1, + "31": 19, + "34": 128, + "35": 103, + "5": 192, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x17,a7": "0xa", + "x9,s1": "0x5", + mtime: "0x9", + pc: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register x9,s1 was saved but never restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_034.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_034.s.snap new file mode 100644 index 000000000..1633d70d9 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_034.s.snap @@ -0,0 +1,53 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_034.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 8, + "11": 147, + "15": 115, + "16": 255, + "17": 129, + "18": 1, + "19": 19, + "2": 4, + "21": 145, + "22": 32, + "23": 35, + "25": 32, + "26": 4, + "268435447": 2, + "27": 147, + "29": 65, + "3": 147, + "30": 36, + "31": 131, + "33": 129, + "34": 1, + "35": 19, + "38": 128, + "39": 103, + "5": 192, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x17,a7": "0xa", + mtime: "0xa", + pc: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register x9,s1 saved at 0xffffff4 but restored from 0xffffff8 + - Register x9,s1 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_035.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_035.s.snap new file mode 100644 index 000000000..b7d7f189e --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_035.s.snap @@ -0,0 +1,53 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_035.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 8, + "11": 147, + "15": 115, + "16": 255, + "17": 129, + "18": 1, + "19": 19, + "2": 4, + "21": 145, + "22": 32, + "23": 35, + "25": 32, + "26": 4, + "268435447": 2, + "27": 147, + "29": 1, + "3": 147, + "30": 20, + "31": 131, + "33": 129, + "34": 1, + "35": 19, + "38": 128, + "39": 103, + "5": 192, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x17,a7": "0xa", + mtime: "0xa", + pc: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register x9,s1 saved with 4 bytes but restored with 2 bytes + - Register x9,s1 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_036.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_036.s.snap new file mode 100644 index 000000000..082ae9517 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_036.s.snap @@ -0,0 +1,54 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_036.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 32, + "10": 8, + "11": 147, + "15": 115, + "16": 255, + "17": 129, + "18": 1, + "19": 19, + "2": 4, + "21": 145, + "22": 32, + "23": 35, + "25": 81, + "26": 32, + "27": 35, + "29": 32, + "3": 147, + "30": 4, + "31": 147, + "33": 1, + "34": 36, + "35": 131, + "37": 129, + "38": 1, + "39": 19, + "42": 128, + "43": 103, + "5": 192, + "7": 239, + "9": 160, + }, + registers: { + "x1,ra": "0x8", + "x17,a7": "0xa", + mtime: "0xb", + pc: "0x10", + }, + sentinel_errors: [ + { + function: "test", + msg: "Calling convention violations in test: + - Register x9,s1 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_037.s.snap b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_037.s.snap new file mode 100644 index 000000000..485d2b9c2 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/sentinel/test_riscv_sentinels_037.s.snap @@ -0,0 +1,120 @@ +export const snapshot = {}; + +snapshot[`riscv/sentinel/test_riscv_sentinels_037.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 6, + "1": 64, + "10": 9, + "11": 147, + "12": 2, + "13": 160, + "14": 10, + "15": 19, + "16": 5, + "17": 64, + "18": 10, + "19": 147, + "2": 4, + "20": 1, + "21": 64, + "23": 239, + "24": 1, + "25": 36, + "26": 130, + "268435451": 24, + "27": 179, + "28": 1, + "29": 73, + "3": 147, + "30": 131, + "31": 51, + "33": 160, + "34": 8, + "35": 147, + "39": 115, + "4": 12, + "40": 255, + "41": 65, + "42": 1, + "43": 19, + "45": 17, + "46": 36, + "47": 35, + "49": 129, + "5": 128, + "50": 34, + "51": 35, + "53": 65, + "54": 4, + "55": 19, + "56": 62, + "57": 112, + "58": 4, + "59": 147, + "6": 9, + "60": 55, + "61": 128, + "62": 9, + "63": 19, + "64": 48, + "65": 144, + "66": 9, + "67": 147, + "68": 1, + "69": 90, + "7": 19, + "70": 4, + "71": 179, + "72": 34, + "73": 176, + "74": 4, + "75": 147, + "76": 27, + "77": 192, + "78": 9, + "79": 19, + "8": 18, + "81": 129, + "82": 32, + "83": 131, + "85": 65, + "86": 36, + "87": 3, + "89": 193, + "9": 192, + "90": 1, + "91": 19, + "94": 128, + "95": 103, + }, + registers: { + "x1,ra": "0x18", + "x17,a7": "0xa", + "x18,s2": "0x1bc", + "x19,s3": "0x309", + "x20,s4": "0x2a", + "x21,s5": "0x54", + "x5,t0": "0x3e7", + "x6,t1": "0x333", + "x9,s1": "0x22b", + mtime: "0x18", + pc: "0x28", + }, + sentinel_errors: [ + { + function: "bad_function", + msg: "Calling convention violations in bad_function: + - Register x9,s1 was used but never saved to memory + - Register x9,s1 value changed but not properly restored + - Register x18,s2 was used but never saved to memory + - Register x18,s2 value changed but not properly restored + - Register x19,s3 was used but never saved to memory + - Register x19,s3 value changed but not properly restored", + }, + ], +} +`; diff --git a/tests/arch/mips/correct/examples/test_mips_example_001.out b/tests/arch/mips/correct/examples/test_mips_example_001.out deleted file mode 100644 index b48eb7374..000000000 --- a/tests/arch/mips/correct/examples/test_mips_example_001.out +++ /dev/null @@ -1,5 +0,0 @@ - -12 -34 -cr[PC]:0xffffffff; ir[1,at]:0x200002; ir[2,v0]:0x1; ir[4,a0]:0x22; keyboard[0x0]:''; display[0x0]:'1234'; - diff --git a/tests/arch/mips/correct/examples/test_mips_example_001.s b/tests/arch/mips/correct/examples/test_mips_example_001.s index 7961619d5..c44649b70 100644 --- a/tests/arch/mips/correct/examples/test_mips_example_001.s +++ b/tests/arch/mips/correct/examples/test_mips_example_001.s @@ -3,17 +3,35 @@ # Creator (https://creatorsim.github.io/creator/) # - .data +.data - byte: .byte 12 + byte: .byte 12 - .align 1 - half: .half 34 + .align 1 + half: .half 34 - .align 2 - word: .word -5678 - float: .float 456.322 - double: .double 9741.34 - stringZ: .asciiz "This is a string" - string: .ascii "This is another string" - space: .space 32 + .align 2 + word: .word -5678 + float: .float 456.322 + double: .double 9741.34 + stringZ: .asciiz "This is a string" + string: .ascii "This is another string" + space: .space 32 + +.text + main: + + # print byte value +first:la $a0, byte + lb $a0, 0($a0) + li $v0, 1 + syscall + + # print half value + la $a0, half + lh $a0, 0($a0) + li $v0, 1 + syscall + + #return + jr $ra diff --git a/tests/arch/mips/correct/examples/test_mips_example_002.out b/tests/arch/mips/correct/examples/test_mips_example_002.out deleted file mode 100644 index 4329ef305..000000000 --- a/tests/arch/mips/correct/examples/test_mips_example_002.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x20; ir[8,t0]:0xa; ir[9,t1]:0xd; ir[10,t2]:0x2d; ir[11,t3]:0x21; ir[12,t4]:0x17; ir[13,t5]:0xc; ir[14,t6]:0x441; ir[15,t7]:0x53; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/correct/examples/test_mips_example_002.s b/tests/arch/mips/correct/examples/test_mips_example_002.s index d4b38f55b..968178cff 100644 --- a/tests/arch/mips/correct/examples/test_mips_example_002.s +++ b/tests/arch/mips/correct/examples/test_mips_example_002.s @@ -15,3 +15,4 @@ main: sub $t5, $t2, $t3 # 45-33 mul $t6, $t3, $t3 # 33*33 div $t7, $t6, $t1 # $t6/13 + jr $ra diff --git a/tests/arch/mips/correct/examples/test_mips_example_003.out b/tests/arch/mips/correct/examples/test_mips_example_003.out deleted file mode 100644 index 043764100..000000000 --- a/tests/arch/mips/correct/examples/test_mips_example_003.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x78; ir[1,at]:0x20000e; ir[8,t0]:0x200000; ir[9,t1]:0x200004; ir[10,t2]:0x200006; ir[11,t3]:0xe; ir[12,t4]:0xe; ir[13,t5]:0x78; ir[14,t6]:0x78; ir[15,t7]:0x16; ir[24,t8]:0x16; memory[0x20000f]:0x16; memory[0x20000c]:0x78; memory[0x20000b]:0x0e; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/correct/examples/test_mips_example_003.s b/tests/arch/mips/correct/examples/test_mips_example_003.s index d1686ba04..c16a5f7d1 100644 --- a/tests/arch/mips/correct/examples/test_mips_example_003.s +++ b/tests/arch/mips/correct/examples/test_mips_example_003.s @@ -22,16 +22,16 @@ main: la $t1, b1 #b1 address -> $t1 la $t2, h1 #h1 address -> $t2 - lw $t3, ($t0) #Memory[$t0] -> $t3 + lw $t3, 0($t0) #Memory[$t0] -> $t3 lw $t4, w1 #Memory[w1] -> $t4 - lb $t5, ($t1) #Memory[$t1] -> $t5 + lb $t5, 0($t1) #Memory[$t1] -> $t5 lb $t6, b1 #Memory[b1] -> $t6 - lh $t7, ($t2) #Memory[$t2] -> $t7 + lh $t7, 0($t2) #Memory[$t2] -> $t7 lh $t8, h1 #Memory[h1] -> $t8 sw $t3, w2 #$t3 -> Memory[w2] sb $t5, b2 #$t5 -> Memory[b2] sh $t7, h2 #$t7 -> Memory[h2] - \ No newline at end of file + jr $ra diff --git a/tests/arch/mips/correct/examples/test_mips_example_004.out b/tests/arch/mips/correct/examples/test_mips_example_004.out deleted file mode 100644 index 5afd90f0b..000000000 --- a/tests/arch/mips/correct/examples/test_mips_example_004.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x64; ir[1,at]:0x200018; ir[2,v0]:0xa; ir[8,t0]:0x200000; ir[9,t1]:0x200008; ir[10,t2]:0x200010; ir[11,t3]:0x200028; sfpr[f0]:0x405145A1; sfpr[f1]:0xCAC08312; sfpr[f2]:0x4026E2D0; sfpr[f3]:0xE5604189; sfpr[f4]:0x4082A27E; sfpr[f5]:0xF9DB22D1; sfpr[f10]:0x4084CB33; sfpr[f11]:0x33333333; sfpr[f12]:0x404D1315; sfpr[f13]:0x4689C3E9; dfpr[FP0]:0x405145A1CAC08312; dfpr[FP2]:0x4026E2D0E5604189; dfpr[FP4]:0x4082A27EF9DB22D1; dfpr[FP10]:0x4084CB3333333333; dfpr[FP12]:0x404D13154689C3E9; memory[0x20002f]:0xE9; memory[0x20002e]:0xC3; memory[0x20002d]:0x89; memory[0x20002c]:0x46; memory[0x20002b]:0x15; memory[0x20002a]:0x13; memory[0x200029]:0x4D; memory[0x200028]:0x40; memory[0x200027]:0xD1; memory[0x200026]:0x22; memory[0x200025]:0xDB; memory[0x200024]:0xF9; memory[0x200023]:0x7E; memory[0x200022]:0xA2; memory[0x200021]:0x82; memory[0x200020]:0x40; memory[0x20001f]:0x12; memory[0x20001e]:0x83; memory[0x20001d]:0xC0; memory[0x20001c]:0xCA; memory[0x20001b]:0xA1; memory[0x20001a]:0x45; memory[0x200019]:0x51; memory[0x200018]:0x40; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/correct/examples/test_mips_example_004.s b/tests/arch/mips/correct/examples/test_mips_example_004.s index 981c7ca0a..b281964dc 100644 --- a/tests/arch/mips/correct/examples/test_mips_example_004.s +++ b/tests/arch/mips/correct/examples/test_mips_example_004.s @@ -17,18 +17,18 @@ main: la $t2, c la $t3, d - l.d $FP0, ($t0) - l.d $FP2, ($t1) - l.d $FP10, ($t2) + l.d $FP0, 0($t0) + l.d $FP2, 0($t1) + l.d $FP10, 0($t2) add.d $FP0, $FP0, $FP0 sub.d $FP4, $FP10, $FP0 div.d $FP12, $FP10, $FP2 - s.d $FP0, ($t3) + s.d $FP0, 0($t3) addi $t3, $t3, 8 - s.d $FP4, ($t3) + s.d $FP4, 0($t3) addi $t3, $t3, 8 - s.d $FP12, ($t3) + s.d $FP12, 0($t3) li $v0, 10 syscall diff --git a/tests/arch/mips/correct/examples/test_mips_example_005.out b/tests/arch/mips/correct/examples/test_mips_example_005.out deleted file mode 100644 index 85592e9a9..000000000 --- a/tests/arch/mips/correct/examples/test_mips_example_005.out +++ /dev/null @@ -1,4 +0,0 @@ - -45 -cr[PC]:0x30; ir[2,v0]:0x1; ir[4,a0]:0x2d; ir[8,t0]:0xa; ir[9,t1]:0xa; keyboard[0x0]:''; display[0x0]:'45'; - diff --git a/tests/arch/mips/correct/examples/test_mips_example_005.s b/tests/arch/mips/correct/examples/test_mips_example_005.s index 6954d93fa..4eb68e0a3 100644 --- a/tests/arch/mips/correct/examples/test_mips_example_005.s +++ b/tests/arch/mips/correct/examples/test_mips_example_005.s @@ -5,18 +5,18 @@ # Sum of the first 10 numbers from 0 to 9 .data - max: .byte 10 + max: .byte 10 .text - main: lb $t0, max - li $t1, 0 - li $a0, 0 - while: bge $t1, $t0, end_while - add $a0, $a0, $t1 - add $t1, $t1, 1 - b while + main: lb $t0, max + li $t1, 0 + li $a0, 0 + while: bge $t1, $t0, end_while + add $a0, $a0, $t1 + add $t1, $t1, 1 + b while - end_while: li $v0, 1 - syscall #print_int + end_while: li $v0, 1 + syscall #print_int + + jr $ra - - \ No newline at end of file diff --git a/tests/arch/mips/correct/examples/test_mips_example_006.out b/tests/arch/mips/correct/examples/test_mips_example_006.out deleted file mode 100644 index 86145f1b7..000000000 --- a/tests/arch/mips/correct/examples/test_mips_example_006.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x24; ir[1,at]:0x1; ir[2,v0]:0xa; ir[8,t0]:0x4; ir[9,t1]:0x2; ir[11,t3]:0x22; ir[24,t8]:0x22b; ir[25,t9]:0xb; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/correct/examples/test_mips_example_007.out b/tests/arch/mips/correct/examples/test_mips_example_007.out deleted file mode 100644 index 831227000..000000000 --- a/tests/arch/mips/correct/examples/test_mips_example_007.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x44; ir[1,at]:0x200000; ir[2,v0]:0xa; ir[9,t1]:0x5; ir[10,t2]:0x5; ir[11,t3]:0x1; ir[12,t4]:0x4; ir[13,t5]:0x200014; ir[14,t6]:0x5; ir[15,t7]:0xf; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/correct/examples/test_mips_example_007.s b/tests/arch/mips/correct/examples/test_mips_example_007.s index a50a482d9..1d475e3d3 100644 --- a/tests/arch/mips/correct/examples/test_mips_example_007.s +++ b/tests/arch/mips/correct/examples/test_mips_example_007.s @@ -22,7 +22,7 @@ loop1: beq $t1, $t2, end1 #if($t1 == $t2) --> jump to fin1 # loop body mul $t6, $t1, $t4 # $t1 * $t4 -> $t6 - lw $t6, ($t5) # Memory[$t5] -> $t6 + lw $t6, 0($t5) # Memory[$t5] -> $t6 add $t7, $t7, $t6 # $t6 + $t7 -> $t7 # loop next... diff --git a/tests/arch/mips/correct/examples/test_mips_example_008.out b/tests/arch/mips/correct/examples/test_mips_example_008.out deleted file mode 100644 index 32452f644..000000000 --- a/tests/arch/mips/correct/examples/test_mips_example_008.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x5c; ir[1,at]:0x200040; ir[2,v0]:0xa; ir[8,t0]:0x200040; ir[9,t1]:0x200080; ir[10,t2]:0x4; ir[11,t3]:0x4; ir[12,t4]:0x4; sfpr[f0]:0x33441124; dfpr[FP0]:0x3344112400000000; memory[0x20007f]:0x24; memory[0x20007e]:0x11; memory[0x20007d]:0x44; memory[0x20007c]:0x33; memory[0x20007b]:0x21; memory[0x20007a]:0x43; memory[0x200079]:0x65; memory[0x200078]:0x87; memory[0x200077]:0x78; memory[0x200076]:0x56; memory[0x200075]:0x34; memory[0x200074]:0x12; memory[0x200073]:0x23; memory[0x200072]:0xff; memory[0x20006d]:0xd0; memory[0x20006c]:0x77; memory[0x20006b]:0x12; memory[0x20006a]:0xf0; memory[0x200069]:0xbf; memory[0x200068]:0xaa; memory[0x200067]:0x22; memory[0x200066]:0x11; memory[0x200065]:0x55; memory[0x200064]:0x44; memory[0x200063]:0x14; memory[0x200062]:0x02; memory[0x20005f]:0x14; memory[0x20005e]:0x14; memory[0x20005d]:0x14; memory[0x20005c]:0x14; memory[0x20005b]:0x20; memory[0x20005a]:0x21; memory[0x200059]:0x51; memory[0x200058]:0x77; memory[0x200057]:0x10; memory[0x200056]:0x22; memory[0x200055]:0x43; memory[0x200051]:0x45; memory[0x200050]:0x23; memory[0x20004c]:0x34; memory[0x200048]:0x34; memory[0x200044]:0x34; memory[0x200040]:0x34; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/correct/examples/test_mips_example_011.out b/tests/arch/mips/correct/examples/test_mips_example_011.out deleted file mode 100644 index 25e4c6e16..000000000 --- a/tests/arch/mips/correct/examples/test_mips_example_011.out +++ /dev/null @@ -1,4 +0,0 @@ - --144 -cr[PC]:0x38; ir[1,at]:0xffffffb3; ir[2,v0]:0xa; ir[3,v1]:0x5a; ir[4,a0]:0xffffff70; ir[5,a1]:0x5a; ir[6,a2]:0x2d; ir[9,t1]:0xffffffca; ir[10,t2]:0x5a; ir[31,ra]:0x24; keyboard[0x0]:''; display[0x0]:'-144'; - diff --git a/tests/arch/mips/correct/examples/test_mips_example_012.out b/tests/arch/mips/correct/examples/test_mips_example_012.out deleted file mode 100644 index 8a933c1f1..000000000 --- a/tests/arch/mips/correct/examples/test_mips_example_012.out +++ /dev/null @@ -1,4 +0,0 @@ - -120 -cr[PC]:0x1c; ir[1,at]:0x1; ir[2,v0]:0xa; ir[4,a0]:0x78; ir[9,t1]:0x5; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:'120'; - diff --git a/tests/arch/mips/correct/examples/test_mips_example_012.s b/tests/arch/mips/correct/examples/test_mips_example_012.s index d29c63883..de82be4e1 100644 --- a/tests/arch/mips/correct/examples/test_mips_example_012.s +++ b/tests/arch/mips/correct/examples/test_mips_example_012.s @@ -31,7 +31,7 @@ factorial: # if ($a < 2): # return 1 - bge $a0 2, b_else + bge $a0, 2, b_else li $v0, 1 b b_efs # else: diff --git a/tests/arch/mips/correct/examples/test_mips_example_013.out b/tests/arch/mips/correct/examples/test_mips_example_013.out deleted file mode 100644 index 97dfc5ec5..000000000 --- a/tests/arch/mips/correct/examples/test_mips_example_013.out +++ /dev/null @@ -1,41 +0,0 @@ - -83 -116 -114 -105 -110 -103 -32 -105 -110 -32 -85 -84 -70 -45 -56 -58 -32 --30 --120 --128 -32 --30 --120 --85 -32 --30 --120 --121 -32 --30 --120 --120 -32 --16 --97 --96 --84 -0 -cr[PC]:0x20; ir[1,at]:0x200000; ir[2,v0]:0x1; ir[8,t0]:0x200026; keyboard[0x0]:''; display[0x0]:'83116114105110103321051103285847045565832-30-120-12832-30-120-8532-30-120-12132-30-120-12032-16-97-96-840'; - diff --git a/tests/arch/mips/correct/examples/test_mips_example_013.s b/tests/arch/mips/correct/examples/test_mips_example_013.s new file mode 100644 index 000000000..074a0c3c3 --- /dev/null +++ b/tests/arch/mips/correct/examples/test_mips_example_013.s @@ -0,0 +1,16 @@ + +# +# Creator (https://creatorsim.github.io/creator/) +# + +.data + utf8: .asciiz "String in UTF-8: ∀ ∫ ∇ ∈ 🠬" + +.text +main: li $v0, 1 + la $t0, utf8 +loop: lb $a0, 0($t0) + syscall + addi $t0, $t0, 1 + bne $a0, $zero, loop + jr $ra diff --git a/tests/arch/mips/correct/syscalls/test_mips_syscall_001.out b/tests/arch/mips/correct/syscalls/test_mips_syscall_001.out deleted file mode 100644 index 601697ff4..000000000 --- a/tests/arch/mips/correct/syscalls/test_mips_syscall_001.out +++ /dev/null @@ -1,10 +0,0 @@ - -6673 -120 -1 -34 --5678 -1 -1416128883 -cr[PC]:0x6c; ir[1,at]:0x200008; ir[2,v0]:0x1; ir[4,a0]:0x54686973; ir[8,t0]:0x4; ir[9,t1]:0x200000; keyboard[0x0]:''; display[0x0]:'6673120134-567811416128883'; - diff --git a/tests/arch/mips/correct/syscalls/test_mips_syscall_001.s b/tests/arch/mips/correct/syscalls/test_mips_syscall_001.s index 6b17047be..cea51ca33 100644 --- a/tests/arch/mips/correct/syscalls/test_mips_syscall_001.s +++ b/tests/arch/mips/correct/syscalls/test_mips_syscall_001.s @@ -6,7 +6,7 @@ .align 2 - byte: .byte 120,257 + byte: .byte 120,1 half: .half 34 word: .word -5678 string: .ascii "This is another string" @@ -36,10 +36,12 @@ main: lw $a0, word syscall - # print float - li $a0, 1.1 + # print int + li $a0, 1 syscall # string string lw $a0, string - syscall \ No newline at end of file + syscall + + jr $ra diff --git a/tests/arch/mips/correct/syscalls/test_mips_syscall_002.out b/tests/arch/mips/correct/syscalls/test_mips_syscall_002.out deleted file mode 100644 index 396e1786f..000000000 --- a/tests/arch/mips/correct/syscalls/test_mips_syscall_002.out +++ /dev/null @@ -1,6 +0,0 @@ - -6673 --86.9739990234375 -1.100000023841858 -cr[PC]:0x34; ir[1,at]:0x3f8ccccd; ir[2,v0]:0x2; sfpr[f12]:0x3F8CCCCD; dfpr[FP12]:0x3F8CCCCD00000000; keyboard[0x0]:''; display[0x0]:'6673-86.97399902343751.100000023841858'; - diff --git a/tests/arch/mips/correct/syscalls/test_mips_syscall_002.s b/tests/arch/mips/correct/syscalls/test_mips_syscall_002.s index 2b6d4d4cb..3cadd0042 100644 --- a/tests/arch/mips/correct/syscalls/test_mips_syscall_002.s +++ b/tests/arch/mips/correct/syscalls/test_mips_syscall_002.s @@ -15,4 +15,5 @@ main: li.s $f12, 1.1 syscall - \ No newline at end of file + + jr $ra diff --git a/tests/arch/mips/correct/syscalls/test_mips_syscall_003.out b/tests/arch/mips/correct/syscalls/test_mips_syscall_003.out deleted file mode 100644 index 668c40ee9..000000000 --- a/tests/arch/mips/correct/syscalls/test_mips_syscall_003.out +++ /dev/null @@ -1,6 +0,0 @@ - -6673 --86.974 -1.1 -cr[PC]:0x58; ir[1,at]:0x3ff19999; ir[2,v0]:0x3; sfpr[f12]:0x3FF19999; sfpr[f13]:0x9999999A; dfpr[FP12]:0x3FF199999999999A; keyboard[0x0]:''; display[0x0]:'6673-86.9741.1'; - diff --git a/tests/arch/mips/correct/syscalls/test_mips_syscall_003.s b/tests/arch/mips/correct/syscalls/test_mips_syscall_003.s index aba6d1d2b..350992844 100644 --- a/tests/arch/mips/correct/syscalls/test_mips_syscall_003.s +++ b/tests/arch/mips/correct/syscalls/test_mips_syscall_003.s @@ -15,4 +15,5 @@ main: li.d $FP12, 1.1 syscall - \ No newline at end of file + + jr $ra diff --git a/tests/arch/mips/correct/syscalls/test_mips_syscall_004.out b/tests/arch/mips/correct/syscalls/test_mips_syscall_004.out deleted file mode 100644 index 448ffe1e3..000000000 --- a/tests/arch/mips/correct/syscalls/test_mips_syscall_004.out +++ /dev/null @@ -1,8 +0,0 @@ - -First String -Second Stringa -a - - -cr[PC]:0x40; ir[1,at]:0x20001a; ir[2,v0]:0xb; ir[4,a0]:0xa; keyboard[0x0]:''; display[0x0]:'First%20StringSecond%20Stringaa%0A'; - diff --git a/tests/arch/mips/correct/syscalls/test_mips_syscall_004.s b/tests/arch/mips/correct/syscalls/test_mips_syscall_004.s index de034a1ac..ea6263858 100644 --- a/tests/arch/mips/correct/syscalls/test_mips_syscall_004.s +++ b/tests/arch/mips/correct/syscalls/test_mips_syscall_004.s @@ -26,3 +26,4 @@ main: li $v0, 11 syscall + jr $ra diff --git a/tests/arch/mips/correct/syscalls/test_mips_syscall_005.s b/tests/arch/mips/correct/syscalls/test_mips_syscall_005.s index 668534068..852bf8182 100644 --- a/tests/arch/mips/correct/syscalls/test_mips_syscall_005.s +++ b/tests/arch/mips/correct/syscalls/test_mips_syscall_005.s @@ -6,4 +6,5 @@ .text main: li $v0, 5 - syscall \ No newline at end of file + syscall + jr $ra diff --git a/tests/arch/mips/correct/syscalls/test_mips_syscall_006.s b/tests/arch/mips/correct/syscalls/test_mips_syscall_006.s index ab013f90f..c81330dcd 100644 --- a/tests/arch/mips/correct/syscalls/test_mips_syscall_006.s +++ b/tests/arch/mips/correct/syscalls/test_mips_syscall_006.s @@ -7,3 +7,4 @@ main: li $v0, 6 syscall + jr $ra diff --git a/tests/arch/mips/correct/syscalls/test_mips_syscall_007.s b/tests/arch/mips/correct/syscalls/test_mips_syscall_007.s index 88a7ae8a5..fa8a7fd0f 100644 --- a/tests/arch/mips/correct/syscalls/test_mips_syscall_007.s +++ b/tests/arch/mips/correct/syscalls/test_mips_syscall_007.s @@ -7,4 +7,4 @@ main: li $v0, 7 syscall - \ No newline at end of file + jr $ra diff --git a/tests/arch/mips/correct/syscalls/test_mips_syscall_008.s b/tests/arch/mips/correct/syscalls/test_mips_syscall_008.s index c36f690b4..3faed0190 100644 --- a/tests/arch/mips/correct/syscalls/test_mips_syscall_008.s +++ b/tests/arch/mips/correct/syscalls/test_mips_syscall_008.s @@ -14,4 +14,5 @@ li $v0, 8 la $a0, buffer li $a1, 5 - syscall \ No newline at end of file + syscall + jr $ra diff --git a/tests/arch/mips/correct/syscalls/test_mips_syscall_009.s b/tests/arch/mips/correct/syscalls/test_mips_syscall_009.s index 38676b338..92e84411b 100644 --- a/tests/arch/mips/correct/syscalls/test_mips_syscall_009.s +++ b/tests/arch/mips/correct/syscalls/test_mips_syscall_009.s @@ -12,5 +12,6 @@ li $a0, 8 syscall - sw $t0, ($v0) - sw $t1, 4($v0) \ No newline at end of file + sw $t0, 0($v0) + sw $t1, 4($v0) + jr $ra diff --git a/tests/arch/mips/correct/syscalls/test_mips_syscall_010.out b/tests/arch/mips/correct/syscalls/test_mips_syscall_010.out deleted file mode 100644 index 413fc0e89..000000000 --- a/tests/arch/mips/correct/syscalls/test_mips_syscall_010.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x8; ir[2,v0]:0xa; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/correct/syscalls/test_mips_syscall_010.s b/tests/arch/mips/correct/syscalls/test_mips_syscall_010.s index c5b86634f..f2662a383 100644 --- a/tests/arch/mips/correct/syscalls/test_mips_syscall_010.s +++ b/tests/arch/mips/correct/syscalls/test_mips_syscall_010.s @@ -8,3 +8,4 @@ li $v0, 10 syscall li $t0, 453 + jr $ra diff --git a/tests/arch/mips/correct/syscalls/test_mips_syscall_011.out b/tests/arch/mips/correct/syscalls/test_mips_syscall_011.out deleted file mode 100644 index 78634f9ba..000000000 --- a/tests/arch/mips/correct/syscalls/test_mips_syscall_011.out +++ /dev/null @@ -1,4 +0,0 @@ - -c -cr[PC]:0xc; ir[2,v0]:0xb; ir[4,a0]:0x63; keyboard[0x0]:''; display[0x0]:'c'; - diff --git a/tests/arch/mips/correct/syscalls/test_mips_syscall_011.s b/tests/arch/mips/correct/syscalls/test_mips_syscall_011.s index 34f522d9c..231dd5e92 100644 --- a/tests/arch/mips/correct/syscalls/test_mips_syscall_011.s +++ b/tests/arch/mips/correct/syscalls/test_mips_syscall_011.s @@ -8,3 +8,4 @@ li $v0, 11 li $a0, 'c' syscall + jr $ra diff --git a/tests/arch/mips/correct/syscalls/test_mips_syscall_012.s b/tests/arch/mips/correct/syscalls/test_mips_syscall_012.s index b58a811e1..dca4c5a81 100644 --- a/tests/arch/mips/correct/syscalls/test_mips_syscall_012.s +++ b/tests/arch/mips/correct/syscalls/test_mips_syscall_012.s @@ -3,7 +3,8 @@ # Creator (https://creatorsim.github.io/creator/) # -.text - main: +.text + main: li $v0, 12 - syscall \ No newline at end of file + syscall + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_001.out b/tests/arch/mips/instructions/test_mips_instruction_001.out deleted file mode 100644 index 900b4d789..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_001.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x24; ir[1,at]:0xffffffe2; ir[8,t0]:0xa; ir[9,t1]:0xffffffe2; ir[11,t3]:0x12; ir[12,t4]:0xffffffec; ir[13,t5]:0xffffffe2; ir[14,t6]:0x12; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_001.s b/tests/arch/mips/instructions/test_mips_instruction_001.s index d87d151cd..1a78a7d75 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_001.s +++ b/tests/arch/mips/instructions/test_mips_instruction_001.s @@ -13,4 +13,6 @@ main: add $t4, $t0, $t1 add $t5, $t1, $t2 - add $t6, $t2, $t3 \ No newline at end of file + add $t6, $t2, $t3 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_002.out b/tests/arch/mips/instructions/test_mips_instruction_002.out deleted file mode 100644 index db1062c53..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_002.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[8,t0]:0xa; ir[9,t1]:0xffffffec; ir[10,t2]:0x187; ir[11,t3]:0x193; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_002.s b/tests/arch/mips/instructions/test_mips_instruction_002.s index 2b6b6ab14..b86067357 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_002.s +++ b/tests/arch/mips/instructions/test_mips_instruction_002.s @@ -9,3 +9,5 @@ main: addi $t1, $t0, -30 # 10 - 30 addi $t2, $t1, 411 # x9 + 411 addi $t3, $t2, 12 # x10 - 12 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_003.out b/tests/arch/mips/instructions/test_mips_instruction_003.out deleted file mode 100644 index bacd4ab5c..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_003.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x2c; ir[1,at]:0x123515; ir[8,t0]:0x223; ir[9,t1]:0xfffffc57; ir[10,t2]:0xc; ir[11,t3]:0x123515; ir[12,t4]:0x5cc; ir[13,t5]:0xfffffa40; ir[14,t6]:0x123ad5; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_003.s b/tests/arch/mips/instructions/test_mips_instruction_003.s index 8be9b6661..ec09e2523 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_003.s +++ b/tests/arch/mips/instructions/test_mips_instruction_003.s @@ -13,4 +13,6 @@ main: sub $t4, $t0, $t1 sub $t5, $t2, $t4 - sub $t6, $t3, $t5 \ No newline at end of file + sub $t6, $t3, $t5 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_004.out b/tests/arch/mips/instructions/test_mips_instruction_004.out deleted file mode 100644 index 57115dae6..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_004.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x14; ir[8,t0]:0x230000; ir[14,t6]:0x56db0000; ir[15,t7]:0x340000; ir[24,t8]:0xff00000; ir[25,t9]:0x20000; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_004.s b/tests/arch/mips/instructions/test_mips_instruction_004.s index 638557b1b..5de59e58b 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_004.s +++ b/tests/arch/mips/instructions/test_mips_instruction_004.s @@ -10,4 +10,6 @@ main: lui $t6, 22235 lui $t7, 0x34 lui $t8, 0xFF0 - lui $t9, 2 \ No newline at end of file + lui $t9, 2 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_005.out b/tests/arch/mips/instructions/test_mips_instruction_005.out deleted file mode 100644 index 20e66e4df..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_005.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x38; ir[1,at]:0x123515; ir[4,a0]:0xa; ir[13,t5]:0x223; ir[14,t6]:0xfffffc57; ir[15,t7]:0xc; ir[24,t8]:0x123515; ir[31,ra]:0x24; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_005.s b/tests/arch/mips/instructions/test_mips_instruction_005.s index a1a50a895..db66cdc7c 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_005.s +++ b/tests/arch/mips/instructions/test_mips_instruction_005.s @@ -18,5 +18,5 @@ main: sub $s2, $t8, $s1 end: - li $a0, 10 - syscall \ No newline at end of file + li $v0, 10 + syscall diff --git a/tests/arch/mips/instructions/test_mips_instruction_006.out b/tests/arch/mips/instructions/test_mips_instruction_006.out deleted file mode 100644 index 46acb6292..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_006.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x3c; ir[1,at]:0x123515; ir[4,a0]:0xa; ir[8,t0]:0x223; ir[9,t1]:0xfffffc57; ir[10,t2]:0xc; ir[11,t3]:0x123515; ir[12,t4]:0x28; ir[24,t8]:0x34; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_006.s b/tests/arch/mips/instructions/test_mips_instruction_006.s index d71724420..872dca943 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_006.s +++ b/tests/arch/mips/instructions/test_mips_instruction_006.s @@ -19,5 +19,5 @@ main: sub $t7, $t3, $t4 end: - li $a0, 10 - syscall \ No newline at end of file + li $v0, 10 + syscall diff --git a/tests/arch/mips/instructions/test_mips_instruction_007.out b/tests/arch/mips/instructions/test_mips_instruction_007.out deleted file mode 100644 index 68d7ecac0..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_007.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x34; ir[1,at]:0x44562; ir[2,v0]:0xa; ir[8,t0]:0x44562; ir[9,t1]:0x2; ir[10,t2]:0x5; ir[11,t3]:0x44562; ir[12,t4]:0xb; ir[13,t5]:0x22b; ir[14,t6]:0x22; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_007.s b/tests/arch/mips/instructions/test_mips_instruction_007.s index f7669e2c0..d63d8f503 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_007.s +++ b/tests/arch/mips/instructions/test_mips_instruction_007.s @@ -9,7 +9,6 @@ li $t1, 2 li $t2, 5 li $t3, 0x44562 - beq $t2, $t0, jump1 beq $t0, $t3, jump1 jump2: diff --git a/tests/arch/mips/instructions/test_mips_instruction_008.out b/tests/arch/mips/instructions/test_mips_instruction_008.out deleted file mode 100644 index 0528e6b1e..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_008.out +++ /dev/null @@ -1,12 +0,0 @@ - - -Error at line 8 (li $rd val): -Incorrect instruction syntax for 'li $rd val' - - 7 main: -->8 li x5, 361 - 9 li x6, 2 - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_008.s b/tests/arch/mips/instructions/test_mips_instruction_008.s index 4166e27fd..303d953e3 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_008.s +++ b/tests/arch/mips/instructions/test_mips_instruction_008.s @@ -5,18 +5,18 @@ .text main: - li x5, 361 - li x6, 2 - li x7, 5 - li x8, 0x44562 - bne x5, x7, jump1 + li $t0, 0x44562 + li $t1, 2 + li $t2, 5 + li $t3, 0x44562 + bne $t2, $t0, jump1 jump2: - li t3, 34 - li a7, 10 - ecall + li $t6, 34 + li $v0, 10 + syscall jump1: - li x5, 0x754 - li x6, 555 - bne x5, x6, jump2 + li $t4, 0x754 + li $t5, 555 + bne $t0, $t2, jump2 diff --git a/tests/arch/mips/instructions/test_mips_instruction_009.out b/tests/arch/mips/instructions/test_mips_instruction_009.out deleted file mode 100644 index cbaa6cb41..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_009.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x34; ir[1,at]:0x1; ir[2,v0]:0xa; ir[8,t0]:0x169; ir[9,t1]:0x2; ir[10,t2]:0x5; ir[11,t3]:0x44562; ir[12,t4]:0xb; ir[13,t5]:0x22b; ir[14,t6]:0x22; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_010.out b/tests/arch/mips/instructions/test_mips_instruction_010.out deleted file mode 100644 index d969fee5e..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_010.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x34; ir[2,v0]:0xa; ir[8,t0]:0x169; ir[9,t1]:0x2; ir[10,t2]:0x5; ir[11,t3]:0x44562; ir[12,t4]:0x754; ir[13,t5]:0x22b; ir[14,t6]:0x22; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_011.out b/tests/arch/mips/instructions/test_mips_instruction_011.out deleted file mode 100644 index 6b9821a08..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_011.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x34; ir[1,at]:0x1; ir[2,v0]:0xa; ir[8,t0]:0x169; ir[9,t1]:0x2; ir[10,t2]:0x5; ir[11,t3]:0x44562; ir[12,t4]:0x754; ir[13,t5]:0x22b; ir[14,t6]:0x22; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_012.out b/tests/arch/mips/instructions/test_mips_instruction_012.out deleted file mode 100644 index d969fee5e..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_012.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x34; ir[2,v0]:0xa; ir[8,t0]:0x169; ir[9,t1]:0x2; ir[10,t2]:0x5; ir[11,t3]:0x44562; ir[12,t4]:0x754; ir[13,t5]:0x22b; ir[14,t6]:0x22; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_013.out b/tests/arch/mips/instructions/test_mips_instruction_013.out deleted file mode 100644 index ca3e7acd1..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_013.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x84; ir[1,at]:0x20000e; ir[8,t0]:0x200000; ir[9,t1]:0x200004; ir[10,t2]:0x200006; ir[11,t3]:0xe; ir[12,t4]:0xe; ir[13,t5]:0x7f; ir[14,t6]:0x7f; ir[15,t7]:0x7fff; ir[24,t8]:0x7fff; ir[25,t9]:0x20000e; memory[0x20000f]:0xff; memory[0x20000e]:0x7f; memory[0x20000c]:0x7f; memory[0x20000b]:0x0e; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_013.s b/tests/arch/mips/instructions/test_mips_instruction_013.s index 1a671a08a..db2d72275 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_013.s +++ b/tests/arch/mips/instructions/test_mips_instruction_013.s @@ -39,3 +39,5 @@ main: la $t9, h2 sh $t7, 0($t9) + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_014.out b/tests/arch/mips/instructions/test_mips_instruction_014.out deleted file mode 100644 index 6b1659aaf..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_014.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x40; ir[1,at]:0x200006; ir[8,t0]:0x200000; ir[9,t1]:0x200002; ir[10,t2]:0x7f; ir[11,t3]:0xffff; ir[12,t4]:0x200004; ir[14,t6]:0x200006; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_014.s b/tests/arch/mips/instructions/test_mips_instruction_014.s index 8b2c9dbbf..d2b77184c 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_014.s +++ b/tests/arch/mips/instructions/test_mips_instruction_014.s @@ -26,3 +26,5 @@ main: la $t6, h2 sh $t7, 0($t6) + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_015.out b/tests/arch/mips/instructions/test_mips_instruction_015.out deleted file mode 100644 index 59829a8d8..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_015.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x30; ir[1,at]:0xfffffc00; ir[8,t0]:0x2f0; ir[11,t3]:0x1; ir[12,t4]:0x1; ir[13,t5]:0xfffffc00; ir[24,t8]:0x1; ir[25,t9]:0x1; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_015.s b/tests/arch/mips/instructions/test_mips_instruction_015.s index c9c855656..06cf9cea7 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_015.s +++ b/tests/arch/mips/instructions/test_mips_instruction_015.s @@ -17,3 +17,5 @@ main: slti $t7, $t5, -1024 slti $t8, $t5, -1023 slti $t9, $t5, -1022 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_016.out b/tests/arch/mips/instructions/test_mips_instruction_016.out deleted file mode 100644 index 59829a8d8..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_016.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x30; ir[1,at]:0xfffffc00; ir[8,t0]:0x2f0; ir[11,t3]:0x1; ir[12,t4]:0x1; ir[13,t5]:0xfffffc00; ir[24,t8]:0x1; ir[25,t9]:0x1; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_016.s b/tests/arch/mips/instructions/test_mips_instruction_016.s index 18931a363..8797f2a56 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_016.s +++ b/tests/arch/mips/instructions/test_mips_instruction_016.s @@ -17,3 +17,5 @@ main: sltiu $t7, $t5, -1024 sltiu $t8, $t5, -1023 sltiu $t9, $t5, -1022 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_017.out b/tests/arch/mips/instructions/test_mips_instruction_017.out deleted file mode 100644 index 8f3ec36ae..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_017.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x28; ir[1,at]:0xffffdaf2; ir[8,t0]:0x22346; ir[9,t1]:0x11d7; ir[10,t2]:0xffffdaf2; ir[11,t3]:0x22713; ir[12,t4]:0x13f5; ir[13,t5]:0xffffd50d; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_017.s b/tests/arch/mips/instructions/test_mips_instruction_017.s index c558df997..0f16a6129 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_017.s +++ b/tests/arch/mips/instructions/test_mips_instruction_017.s @@ -14,3 +14,4 @@ main: xori $t4, $t1, 0x222 xori $t5, $t2, 0xFFF + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_018.out b/tests/arch/mips/instructions/test_mips_instruction_018.out deleted file mode 100644 index e4fa60c7e..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_018.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x28; ir[1,at]:0xffffdaf2; ir[8,t0]:0x22346; ir[9,t1]:0x11d7; ir[10,t2]:0xffffdaf2; ir[11,t3]:0x22757; ir[12,t4]:0x13f7; ir[13,t5]:0xffffdfff; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_018.s b/tests/arch/mips/instructions/test_mips_instruction_018.s index 187350c05..d9100a7b6 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_018.s +++ b/tests/arch/mips/instructions/test_mips_instruction_018.s @@ -13,3 +13,5 @@ main: ori $t3, $t0, 0x455 ori $t4, $t1, 0x222 ori $t5, $t2, 0xFFF + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_019.out b/tests/arch/mips/instructions/test_mips_instruction_019.out deleted file mode 100644 index 7b376001e..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_019.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x28; ir[1,at]:0xffffdaf2; ir[8,t0]:0x22346; ir[9,t1]:0x11d7; ir[10,t2]:0xffffdaf2; ir[11,t3]:0x44; ir[12,t4]:0x2; ir[13,t5]:0xaf2; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_019.s b/tests/arch/mips/instructions/test_mips_instruction_019.s index 6c48b4a04..2303680d0 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_019.s +++ b/tests/arch/mips/instructions/test_mips_instruction_019.s @@ -13,4 +13,5 @@ main: andi $t3, $t0, 0x455 andi $t4, $t1, 0x222 andi $t5, $t2, 0xFFF - + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_020.out b/tests/arch/mips/instructions/test_mips_instruction_020.out deleted file mode 100644 index dad0761ad..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_020.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x28; cr[HI]:0x18; ir[1,at]:0xffffe000; ir[8,t0]:0x10; ir[9,t1]:0x100; ir[10,t2]:0xffffe000; ir[11,t3]:0x18; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_020.s b/tests/arch/mips/instructions/test_mips_instruction_020.s index 614f46890..f3072dd69 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_020.s +++ b/tests/arch/mips/instructions/test_mips_instruction_020.s @@ -15,3 +15,5 @@ main: div $t1, $t0 div $t2, $t3 div $t3, $t2 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_021.out b/tests/arch/mips/instructions/test_mips_instruction_021.out deleted file mode 100644 index dad0761ad..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_021.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x28; cr[HI]:0x18; ir[1,at]:0xffffe000; ir[8,t0]:0x10; ir[9,t1]:0x100; ir[10,t2]:0xffffe000; ir[11,t3]:0x18; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_021.s b/tests/arch/mips/instructions/test_mips_instruction_021.s index a23893e7b..66663f35e 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_021.s +++ b/tests/arch/mips/instructions/test_mips_instruction_021.s @@ -15,3 +15,5 @@ main: divu $t1, $t0 divu $t2, $t3 divu $t3, $t2 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_022.out b/tests/arch/mips/instructions/test_mips_instruction_022.out deleted file mode 100644 index 688c96a0a..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_022.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x28; ir[1,at]:0xffffdaf2; ir[8,t0]:0xaad4; ir[9,t1]:0x11d7; ir[10,t2]:0xffffdaf2; ir[11,t3]:0x2ab5; ir[12,t4]:0x7000011d; ir[13,t5]:0xb5e5ffff; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_022.s b/tests/arch/mips/instructions/test_mips_instruction_022.s index ce58bf55f..6891c41de 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_022.s +++ b/tests/arch/mips/instructions/test_mips_instruction_022.s @@ -13,3 +13,5 @@ main: rotr $t3, $t0, 2 rotr $t4, $t1, 4 rotr $t5, $t2, 15 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_023.out b/tests/arch/mips/instructions/test_mips_instruction_023.out deleted file mode 100644 index 206f0d6eb..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_023.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x28; ir[1,at]:0xffffdaf2; ir[8,t0]:0xaad4; ir[9,t1]:0x11d7; ir[10,t2]:0xffffdaf2; ir[11,t3]:0x2ab50; ir[12,t4]:0x11d70; ir[13,t5]:0xed790000; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_023.s b/tests/arch/mips/instructions/test_mips_instruction_023.s index faf899208..901e7d0a8 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_023.s +++ b/tests/arch/mips/instructions/test_mips_instruction_023.s @@ -13,3 +13,5 @@ main: sll $t3, $t0, 2 sll $t4, $t1, 4 sll $t5, $t2, 15 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_024.out b/tests/arch/mips/instructions/test_mips_instruction_024.out deleted file mode 100644 index 6fb5b5912..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_024.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x20; ir[8,t0]:0x1fff; ir[9,t1]:0x2000; ir[10,t2]:0x2001; ir[11,t3]:0x2002; ir[14,t6]:0x1; ir[15,t7]:0x1; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_024.s b/tests/arch/mips/instructions/test_mips_instruction_024.s index 61f93bcc6..bab810e37 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_024.s +++ b/tests/arch/mips/instructions/test_mips_instruction_024.s @@ -15,4 +15,5 @@ main: slt $t5, $t1, $t1 slt $t6, $t1, $t2 slt $t7, $t1, $t3 - + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_025.out b/tests/arch/mips/instructions/test_mips_instruction_025.out deleted file mode 100644 index 6fb5b5912..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_025.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x20; ir[8,t0]:0x1fff; ir[9,t1]:0x2000; ir[10,t2]:0x2001; ir[11,t3]:0x2002; ir[14,t6]:0x1; ir[15,t7]:0x1; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_025.s b/tests/arch/mips/instructions/test_mips_instruction_025.s index 108210861..8e95e7cac 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_025.s +++ b/tests/arch/mips/instructions/test_mips_instruction_025.s @@ -15,3 +15,5 @@ sltu $t4, $t1, $t0 sltu $t5, $t1, $t1 sltu $t6, $t1, $t2 sltu $t7, $t1, $t3 + +jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_026.out b/tests/arch/mips/instructions/test_mips_instruction_026.out deleted file mode 100644 index 66db93488..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_026.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x34; ir[1,at]:0xffffdaf2; ir[8,t0]:0x22346; ir[9,t1]:0x11d7; ir[10,t2]:0xffffdaf2; ir[11,t3]:0x455; ir[12,t4]:0x222; ir[13,t5]:0xfff; ir[14,t6]:0x22713; ir[15,t7]:0x13f5; ir[24,t8]:0xffffd50d; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_026.s b/tests/arch/mips/instructions/test_mips_instruction_026.s index 791c9e161..469709e5c 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_026.s +++ b/tests/arch/mips/instructions/test_mips_instruction_026.s @@ -17,4 +17,5 @@ main: xor $t6, $t0, $t3 xor $t7, $t1, $t4 xor $t8, $t2, $t5 - + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_027.out b/tests/arch/mips/instructions/test_mips_instruction_027.out deleted file mode 100644 index 103850674..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_027.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x28; ir[1,at]:0xffffdaf2; ir[8,t0]:0xaad4; ir[9,t1]:0x11d7; ir[10,t2]:0xffffdaf2; ir[11,t3]:0x2ab5; ir[12,t4]:0x11d; ir[13,t5]:0x1ffff; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_027.s b/tests/arch/mips/instructions/test_mips_instruction_027.s index af90b6329..1e65511ce 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_027.s +++ b/tests/arch/mips/instructions/test_mips_instruction_027.s @@ -13,3 +13,5 @@ main: srl $t3, $t0, 2 srl $t4, $t1, 4 srl $t5, $t2, 15 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_028.out b/tests/arch/mips/instructions/test_mips_instruction_028.out deleted file mode 100644 index 96e538869..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_028.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x28; ir[1,at]:0xffffdaf2; ir[8,t0]:0xaad4; ir[9,t1]:0x11d7; ir[10,t2]:0xffffdaf2; ir[11,t3]:0x2ab5; ir[12,t4]:0x11d; ir[13,t5]:0xffffffff; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_028.s b/tests/arch/mips/instructions/test_mips_instruction_028.s index 6dbd5b035..57030738d 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_028.s +++ b/tests/arch/mips/instructions/test_mips_instruction_028.s @@ -13,3 +13,5 @@ main: sra $t3, $t0, 2 sra $t4, $t1, 4 sra $t5, $t2, 15 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_029.out b/tests/arch/mips/instructions/test_mips_instruction_029.out deleted file mode 100644 index e5a99869f..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_029.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x34; ir[1,at]:0xffffdaf2; ir[8,t0]:0x22346; ir[9,t1]:0x11d7; ir[10,t2]:0xffffdaf2; ir[11,t3]:0x455; ir[12,t4]:0x222; ir[13,t5]:0xfff; ir[14,t6]:0x22757; ir[15,t7]:0x13f7; ir[24,t8]:0xffffdfff; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_029.s b/tests/arch/mips/instructions/test_mips_instruction_029.s index 7103732ef..902d0f24d 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_029.s +++ b/tests/arch/mips/instructions/test_mips_instruction_029.s @@ -17,4 +17,5 @@ main: or $t6, $t0, $t3 or $t7, $t1, $t4 or $t8, $t2, $t5 - + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_030.out b/tests/arch/mips/instructions/test_mips_instruction_030.out deleted file mode 100644 index 282f5d001..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_030.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x34; ir[1,at]:0xffffdaf2; ir[8,t0]:0x22346; ir[9,t1]:0x11d7; ir[10,t2]:0xffffdaf2; ir[11,t3]:0x455; ir[12,t4]:0x222; ir[13,t5]:0xfff; ir[14,t6]:0x44; ir[15,t7]:0x2; ir[24,t8]:0xaf2; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_030.s b/tests/arch/mips/instructions/test_mips_instruction_030.s index 1eff71284..e349a870f 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_030.s +++ b/tests/arch/mips/instructions/test_mips_instruction_030.s @@ -17,3 +17,5 @@ main: and $t6, $t0, $t3 and $t7, $t1, $t4 and $t8, $t2, $t5 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_031.out b/tests/arch/mips/instructions/test_mips_instruction_031.out deleted file mode 100644 index 78a74dbe1..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_031.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x58; ir[1,at]:0x200018; ir[2,v0]:0xa; ir[8,t0]:0x200000; ir[9,t1]:0x200008; ir[10,t2]:0x200010; ir[11,t3]:0x200028; sfpr[f0]:0x404145A1; sfpr[f1]:0xCAC08312; sfpr[f2]:0x4026E2D0; sfpr[f3]:0xE5604189; sfpr[f5]:0x07544FFB; dfpr[FP0]:0x404145A1CAC08312; dfpr[FP2]:0x4026E2D0E5604189; dfpr[FP4]:0x0000000007544FFB; memory[0x20002f]:0xFB; memory[0x20002e]:0x4F; memory[0x20002d]:0x54; memory[0x20002c]:0x07; memory[0x200027]:0x89; memory[0x200026]:0x41; memory[0x200025]:0x60; memory[0x200024]:0xE5; memory[0x200023]:0xD0; memory[0x200022]:0xE2; memory[0x200021]:0x26; memory[0x200020]:0x40; memory[0x20001f]:0x12; memory[0x20001e]:0x83; memory[0x20001d]:0xC0; memory[0x20001c]:0xCA; memory[0x20001b]:0xA1; memory[0x20001a]:0x45; memory[0x200019]:0x41; memory[0x200018]:0x40; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_031.s b/tests/arch/mips/instructions/test_mips_instruction_031.s index e3711dbf8..2e7845123 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_031.s +++ b/tests/arch/mips/instructions/test_mips_instruction_031.s @@ -6,7 +6,7 @@ .data a: .double 34.544 b: .double 11.443 - c: .double 0x7544FFB + c: .doubleword 0x7544FFB d: .space 24 diff --git a/tests/arch/mips/instructions/test_mips_instruction_032.out b/tests/arch/mips/instructions/test_mips_instruction_032.out deleted file mode 100644 index 29b9f23e2..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_032.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x28; ir[1,at]:0xfffffffe; ir[8,t0]:0xa; ir[9,t1]:0xd; ir[10,t2]:0x2d; ir[11,t3]:0xfffffffe; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_032.s b/tests/arch/mips/instructions/test_mips_instruction_032.s index 5e8f65179..9942922c6 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_032.s +++ b/tests/arch/mips/instructions/test_mips_instruction_032.s @@ -12,6 +12,14 @@ main: li $t3, -2 mult $t0, $t1 + mfhi $s0 + mflo $s1 mult $t1, $t2 + mfhi $s2 + mflo $s3 mult $t2, $t3 + mfhi $s4 + mflo $s5 mult $t3, $t4 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_033.out b/tests/arch/mips/instructions/test_mips_instruction_033.out deleted file mode 100644 index c870908e4..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_033.out +++ /dev/null @@ -1,13 +0,0 @@ - - -[E13] Error: Main label `main` not found - ╭─[ assembly:1:1 ] - │ - 1 │ - │ │ - │ ╰─ Consider adding a label called `main` to an instruction -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_033.s b/tests/arch/mips/instructions/test_mips_instruction_033.s deleted file mode 100644 index ada9fda11..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_033.s +++ /dev/null @@ -1,15 +0,0 @@ - -# -# Creator (https://creatorsim.github.io/creator/) -# - -#.text -#main: - -# li x5, 0xAAD4 -# li x6, 4567 -# li x7, -9486 - -# srli x8, x5, 2 -# srli x9, x6, 1 -# srli x10, x7, 15 diff --git a/tests/arch/mips/instructions/test_mips_instruction_034.out b/tests/arch/mips/instructions/test_mips_instruction_034.out deleted file mode 100644 index 3d1493dfd..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_034.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x28; ir[1,at]:0xfffffffe; ir[8,t0]:0xa; ir[9,t1]:0xd; ir[10,t2]:0x2d; ir[11,t3]:0xfffffffe; ir[12,t4]:0x82; ir[13,t5]:0x249; ir[14,t6]:0xffffffa6; ir[15,t7]:0xfffffefc; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_034.s b/tests/arch/mips/instructions/test_mips_instruction_034.s index 51ac2b04b..d5b1a9d77 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_034.s +++ b/tests/arch/mips/instructions/test_mips_instruction_034.s @@ -15,3 +15,5 @@ main: mul $t5, $t1, $t2 mul $t6, $t2, $t3 mul $t7, $t3, $t4 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_035.out b/tests/arch/mips/instructions/test_mips_instruction_035.out deleted file mode 100644 index 89adf5106..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_035.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x38; ir[1,at]:0xfe9a113d; ir[8,t0]:0x165eeb8; ir[9,t1]:0xde; ir[10,t2]:0xfabb53; ir[11,t3]:0xfe9a113d; ir[12,t4]:0x165ef96; ir[13,t5]:0xfabc31; ir[14,t6]:0xff94cc90; ir[15,t7]:0xfffffff5; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_035.s b/tests/arch/mips/instructions/test_mips_instruction_035.s index 585021ab5..8b830b444 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_035.s +++ b/tests/arch/mips/instructions/test_mips_instruction_035.s @@ -13,4 +13,6 @@ main: addu $t4, $t0, $t1 addu $t5, $t1, $t2 addu $t6, $t2, $t3 - addu $t7, $t3, $t0 \ No newline at end of file + addu $t7, $t3, $t0 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_036.out b/tests/arch/mips/instructions/test_mips_instruction_036.out deleted file mode 100644 index d3566d4b6..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_036.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x30; ir[1,at]:0x37183; ir[8,t0]:0x25b8; ir[9,t1]:0xde; ir[10,t2]:0x123; ir[11,t3]:0xffffa912; ir[12,t4]:0xffffd8f0; ir[13,t5]:0x16c9; ir[14,t6]:0x247; ir[15,t7]:0x31a95; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_036.s b/tests/arch/mips/instructions/test_mips_instruction_036.s index a6b52a812..679e8290b 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_036.s +++ b/tests/arch/mips/instructions/test_mips_instruction_036.s @@ -13,4 +13,6 @@ main: addiu $t4, $t0, -19656 addiu $t5, $t1, 5611 addiu $t6, $t2, 0x124 - addiu $t7, $t3, 225667 \ No newline at end of file + addiu $t7, $t3, 225667 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_037.out b/tests/arch/mips/instructions/test_mips_instruction_037.out deleted file mode 100644 index c870908e4..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_037.out +++ /dev/null @@ -1,13 +0,0 @@ - - -[E13] Error: Main label `main` not found - ╭─[ assembly:1:1 ] - │ - 1 │ - │ │ - │ ╰─ Consider adding a label called `main` to an instruction -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_037.s b/tests/arch/mips/instructions/test_mips_instruction_037.s index 514137a05..42b9e0a54 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_037.s +++ b/tests/arch/mips/instructions/test_mips_instruction_037.s @@ -4,15 +4,23 @@ # -# .text -# main: +.text +main: -# li x5, 10 -# li x6, 13 -# li x7, 45 -# li x8, -2 + li $t0, 10 + li $t1, 13 + li $t2, 45 + li $t3, -2 -# mulhu x9, x5, x6 -# mulhu x10, x6, x7 -# mulhu x11, x7, x8 -# mulhu x12, x8, x5 + multu $t0, $t1 + mfhi $s0 + mflo $s1 + multu $t1, $t2 + mfhi $s2 + mflo $s3 + multu $t2, $t3 + mfhi $s4 + mflo $s5 + multu $t3, $t4 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_038.out b/tests/arch/mips/instructions/test_mips_instruction_038.out deleted file mode 100644 index be16b5c16..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_038.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x28; ir[1,at]:0xffffe000; ir[8,t0]:0x10; ir[9,t1]:0x100; ir[10,t2]:0xffffe000; ir[11,t3]:0x18; ir[12,t4]:0xfffffe00; ir[13,t5]:0x10; ir[14,t6]:0xfffffeab; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_038.s b/tests/arch/mips/instructions/test_mips_instruction_038.s index dc9c8cc58..3169e8611 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_038.s +++ b/tests/arch/mips/instructions/test_mips_instruction_038.s @@ -15,3 +15,5 @@ main: div $t5, $t1, $t0 div $t6, $t2, $t3 div $t7, $t3, $t2 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_039.out b/tests/arch/mips/instructions/test_mips_instruction_039.out deleted file mode 100644 index a35e0b6db..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_039.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x28; ir[1,at]:0xffffe000; ir[8,t0]:0x10; ir[9,t1]:0x100; ir[10,t2]:0xffffe000; ir[11,t3]:0x18; ir[12,t4]:0xffffe00; ir[13,t5]:0x10; ir[14,t6]:0xaaaa955; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_039.s b/tests/arch/mips/instructions/test_mips_instruction_039.s index d4e7ab5ea..842f86225 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_039.s +++ b/tests/arch/mips/instructions/test_mips_instruction_039.s @@ -15,3 +15,5 @@ main: divu $t5, $t1, $t0 divu $t6, $t2, $t3 divu $t7, $t3, $t2 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_040.out b/tests/arch/mips/instructions/test_mips_instruction_040.out deleted file mode 100644 index f06e30407..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_040.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x38; cr[HI]:0x18; ir[1,at]:0xffffe000; ir[8,t0]:0x10; ir[9,t1]:0x100; ir[10,t2]:0xffffe000; ir[11,t3]:0x18; ir[14,t6]:0xfffffff8; ir[15,t7]:0x18; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_040.s b/tests/arch/mips/instructions/test_mips_instruction_040.s index 84ec0633a..d7ef0043e 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_040.s +++ b/tests/arch/mips/instructions/test_mips_instruction_040.s @@ -15,3 +15,5 @@ main: rem $t5, $t1, $t0 rem $t6, $t2, $t3 rem $t7, $t3, $t2 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_041.out b/tests/arch/mips/instructions/test_mips_instruction_041.out deleted file mode 100644 index 843277c82..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_041.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x28; ir[1,at]:0xffffe000; ir[8,t0]:0x10; ir[9,t1]:0x100; ir[10,t2]:0xffffe000; ir[11,t3]:0x18; ir[14,t6]:0x8; ir[15,t7]:0x18; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_041.s b/tests/arch/mips/instructions/test_mips_instruction_041.s index e55c978bd..01653bac7 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_041.s +++ b/tests/arch/mips/instructions/test_mips_instruction_041.s @@ -15,3 +15,5 @@ main: modu $t5, $t1, $t0 modu $t6, $t2, $t3 modu $t7, $t3, $t2 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_042.out b/tests/arch/mips/instructions/test_mips_instruction_042.out deleted file mode 100644 index dd2ef2a4d..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_042.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x2c; ir[1,at]:0x1; ir[2,v0]:0xa; ir[8,t0]:0x372; ir[9,t1]:0x371; ir[10,t2]:0x5; ir[11,t3]:0x21f; ir[12,t4]:0xb; ir[13,t5]:0x22b; ir[14,t6]:0x22; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_043.out b/tests/arch/mips/instructions/test_mips_instruction_043.out deleted file mode 100644 index 22cb038ed..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_043.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x3c; ir[1,at]:0x1; ir[2,v0]:0xa; ir[8,t0]:0xfffffc8e; ir[9,t1]:0xfffffc8f; ir[10,t2]:0x5; ir[11,t3]:0x21f; ir[12,t4]:0xb; ir[13,t5]:0x22b; ir[14,t6]:0x22; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_044.out b/tests/arch/mips/instructions/test_mips_instruction_044.out deleted file mode 100644 index a92e51337..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_044.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x2c; ir[2,v0]:0xa; ir[8,t0]:0x372; ir[9,t1]:0x371; ir[10,t2]:0x5; ir[11,t3]:0x21f; ir[12,t4]:0xb; ir[13,t5]:0x22b; ir[14,t6]:0x22; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_045.out b/tests/arch/mips/instructions/test_mips_instruction_045.out deleted file mode 100644 index b266a7736..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_045.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x44; ir[2,v0]:0xa; ir[8,t0]:0xfffffc8e; ir[9,t1]:0xfffffc8f; ir[10,t2]:0x5; ir[11,t3]:0xfffffde1; ir[12,t4]:0xb; ir[13,t5]:0xfffffdd5; ir[14,t6]:0x22; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_046.out b/tests/arch/mips/instructions/test_mips_instruction_046.out deleted file mode 100644 index 6a9a67d65..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_046.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x28; ir[1,at]:0xffffdaf2; ir[8,t0]:0x22346; ir[9,t1]:0x11d7; ir[10,t2]:0xffffdaf2; ir[11,t3]:0xfffdcc28; ir[12,t4]:0x2408; ir[13,t5]:0x409; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_046.s b/tests/arch/mips/instructions/test_mips_instruction_046.s index 0113ca325..f020ca3a9 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_046.s +++ b/tests/arch/mips/instructions/test_mips_instruction_046.s @@ -12,5 +12,6 @@ main: nor $t3, $t0, $t1 nor $t4, $t1, $t2 - nor $t5, $t2, $t0 - + nor $t5, $t2, $t0 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_047.out b/tests/arch/mips/instructions/test_mips_instruction_047.out deleted file mode 100644 index 03210c2f7..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_047.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x20; ir[1,at]:0xffffdaf2; ir[8,t0]:0x22346; ir[9,t1]:0x11d7; ir[10,t2]:0xffffdaf2; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_047.s b/tests/arch/mips/instructions/test_mips_instruction_047.s index 2259bebe2..af3df45d2 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_047.s +++ b/tests/arch/mips/instructions/test_mips_instruction_047.s @@ -10,3 +10,5 @@ main: li $t1, 4567 nop li $t2, -9486 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_048.out b/tests/arch/mips/instructions/test_mips_instruction_048.out deleted file mode 100644 index 3ec14dc7d..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_048.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x28; ir[1,at]:0xffffffff; ir[8,t0]:0x1; ir[9,t1]:0x234235; ir[10,t2]:0xffffffff; ir[11,t3]:0x1; ir[12,t4]:0x234235; ir[13,t5]:0xffffffff; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_048.s b/tests/arch/mips/instructions/test_mips_instruction_048.s index cdc87be7c..709205b4f 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_048.s +++ b/tests/arch/mips/instructions/test_mips_instruction_048.s @@ -13,3 +13,5 @@ main: move $t3, $t0 move $t4, $t1 move $t5, $t2 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_049.out b/tests/arch/mips/instructions/test_mips_instruction_049.out deleted file mode 100644 index e59e3b9d2..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_049.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x28; cr[HI]:0x234566; cr[LO]:0xfff8e0ca; ir[1,at]:0xfff8e0ca; ir[8,t0]:0x234566; ir[9,t1]:0xfff8e0ca; ir[11,t3]:0x234566; ir[12,t4]:0xfff8e0ca; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_049.s b/tests/arch/mips/instructions/test_mips_instruction_049.s index 3459ab9a6..381e5f6d8 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_049.s +++ b/tests/arch/mips/instructions/test_mips_instruction_049.s @@ -14,3 +14,5 @@ main: mfhi $t3 mflo $t4 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_050.out b/tests/arch/mips/instructions/test_mips_instruction_050.out deleted file mode 100644 index bacd4ab5c..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_050.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x2c; ir[1,at]:0x123515; ir[8,t0]:0x223; ir[9,t1]:0xfffffc57; ir[10,t2]:0xc; ir[11,t3]:0x123515; ir[12,t4]:0x5cc; ir[13,t5]:0xfffffa40; ir[14,t6]:0x123ad5; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_050.s b/tests/arch/mips/instructions/test_mips_instruction_050.s index 66b43ed49..03b97fa23 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_050.s +++ b/tests/arch/mips/instructions/test_mips_instruction_050.s @@ -14,3 +14,5 @@ main: subu $t4, $t0, $t1 subu $t5, $t2, $t4 subu $t6, $t3, $t5 + + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_051.out b/tests/arch/mips/instructions/test_mips_instruction_051.out deleted file mode 100644 index 1336a995d..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_051.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x2c; ir[1,at]:0xffffffff; ir[2,v0]:0xa; ir[8,t0]:0x1; ir[10,t2]:0xffffffff; ir[14,t6]:0x22; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_051.s b/tests/arch/mips/instructions/test_mips_instruction_051.s index 7cc2e4ec8..061fd3373 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_051.s +++ b/tests/arch/mips/instructions/test_mips_instruction_051.s @@ -8,8 +8,6 @@ li $t0, 1 li $t1, 0 li $t2, -1 - beqz $t0, jump1 - beqz $t2, jump1 beqz $t1, jump1 jump2: diff --git a/tests/arch/mips/instructions/test_mips_instruction_052.out b/tests/arch/mips/instructions/test_mips_instruction_052.out deleted file mode 100644 index be4fabf45..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_052.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x1c; ir[2,v0]:0xa; ir[8,t0]:0x1; ir[12,t4]:0x2; ir[14,t6]:0x22; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_053.out b/tests/arch/mips/instructions/test_mips_instruction_053.out deleted file mode 100644 index 4c699ccf1..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_053.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x1c; ir[2,v0]:0xa; ir[8,t0]:0x1; ir[12,t4]:0x2; ir[14,t6]:0x22; ir[31,ra]:0x24; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_054.out b/tests/arch/mips/instructions/test_mips_instruction_054.out deleted file mode 100644 index be4fabf45..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_054.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x1c; ir[2,v0]:0xa; ir[8,t0]:0x1; ir[12,t4]:0x2; ir[14,t6]:0x22; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_055.out b/tests/arch/mips/instructions/test_mips_instruction_055.out deleted file mode 100644 index 9ab7de936..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_055.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x24; ir[1,at]:0xffffffff; ir[2,v0]:0xa; ir[8,t0]:0x1; ir[9,t1]:0xffffffff; ir[14,t6]:0x22; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_056.out b/tests/arch/mips/instructions/test_mips_instruction_056.out deleted file mode 100644 index ab3d78d7e..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_056.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x28; ir[1,at]:0x1; ir[2,v0]:0xa; ir[8,t0]:0x372; ir[9,t1]:0x371; ir[10,t2]:0x21f; ir[12,t4]:0xb; ir[13,t5]:0x22b; ir[14,t6]:0x22; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_057.out b/tests/arch/mips/instructions/test_mips_instruction_057.out deleted file mode 100644 index f8a21d08b..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_057.out +++ /dev/null @@ -1,12 +0,0 @@ - - -Error at line 11 (11): -Syntax error near line: 11 - - 10 li $t2, 0xAAB -->11 bnez $t0, $t2, jump1 - 12 bnez $t0, $t1, jump1 - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_057.s b/tests/arch/mips/instructions/test_mips_instruction_057.s index 6a807ed58..8ecbe5dd5 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_057.s +++ b/tests/arch/mips/instructions/test_mips_instruction_057.s @@ -5,11 +5,10 @@ .text main: - li $t0, 0xAAB - li $t1, 0xBBA - li $t2, 0xAAB - bnez $t0, $t2, jump1 - bnez $t0, $t1, jump1 + li $t0, 1 + li $t1, 0 + li $t2, -1 + bnez $t0, jump1 jump2: li $t6, 34 @@ -19,4 +18,4 @@ jump1: li $t4, 235363 li $t5, 0xAA - bnez $t4, $t5, jump2 + bnez $t4, jump2 diff --git a/tests/arch/mips/instructions/test_mips_instruction_058.out b/tests/arch/mips/instructions/test_mips_instruction_058.out deleted file mode 100644 index cbf66af21..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_058.out +++ /dev/null @@ -1,5 +0,0 @@ - -Square root of a negative number is not allowed. -Square root of a negative number is not allowed. -cr[PC]:0x8c; ir[1,at]:0x46100000; ir[2,v0]:0xa; sfpr[f0]:0x40700000; sfpr[f2]:0xC0AB3200; sfpr[f4]:0x40B56400; sfpr[f6]:0x46192400; sfpr[f7]:0xC6016400; sfpr[f8]:0x46100000; sfpr[f10]:0x40300000; sfpr[f14]:0x40528000; sfpr[f16]:0x42C60000; sfpr[f18]:0x42C00000; dfpr[FP0]:0x4070000000000000; dfpr[FP2]:0xC0AB320000000000; dfpr[FP4]:0x40B5640000000000; dfpr[FP6]:0x46192400C6016400; dfpr[FP8]:0x4610000000000000; dfpr[FP10]:0x4030000000000000; dfpr[FP14]:0x4052800000000000; dfpr[FP16]:0x42C6000000000000; dfpr[FP18]:0x42C0000000000000; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_059.out b/tests/arch/mips/instructions/test_mips_instruction_059.out deleted file mode 100644 index 3f3b26876..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_059.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x8c; ir[1,at]:0x46100000; ir[2,v0]:0xa; sfpr[f0]:0x40700000; sfpr[f2]:0x40AB3200; sfpr[f4]:0x40B56400; sfpr[f6]:0x46192400; sfpr[f7]:0x46016400; sfpr[f8]:0x46100000; sfpr[f10]:0x40800000; sfpr[f12]:0x40BB3200; sfpr[f14]:0x40C56400; sfpr[f16]:0x46992400; sfpr[f17]:0x46816400; sfpr[f18]:0x46900000; dfpr[FP0]:0x4070000000000000; dfpr[FP2]:0x40AB320000000000; dfpr[FP4]:0x40B5640000000000; dfpr[FP6]:0x4619240046016400; dfpr[FP8]:0x4610000000000000; dfpr[FP10]:0x4080000000000000; dfpr[FP12]:0x40BB320000000000; dfpr[FP14]:0x40C5640000000000; dfpr[FP16]:0x4699240046816400; dfpr[FP18]:0x4690000000000000; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_060.out b/tests/arch/mips/instructions/test_mips_instruction_060.out deleted file mode 100644 index a0233e6a7..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_060.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x8c; ir[1,at]:0x46100000; ir[2,v0]:0xa; sfpr[f0]:0x40700000; sfpr[f2]:0x40AB3200; sfpr[f4]:0x40B56400; sfpr[f6]:0x46192400; sfpr[f7]:0x46016400; sfpr[f8]:0x46100000; sfpr[f10]:0xC0A93200; sfpr[f12]:0xC09F2C00; sfpr[f14]:0x40B46400; sfpr[f16]:0x44BE0000; sfpr[f17]:0xC469C000; sfpr[f18]:0xC4124000; dfpr[FP0]:0x4070000000000000; dfpr[FP2]:0x40AB320000000000; dfpr[FP4]:0x40B5640000000000; dfpr[FP6]:0x4619240046016400; dfpr[FP8]:0x4610000000000000; dfpr[FP10]:0xC0A9320000000000; dfpr[FP12]:0xC09F2C0000000000; dfpr[FP14]:0x40B4640000000000; dfpr[FP16]:0x44BE0000C469C000; dfpr[FP18]:0xC412400000000000; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_061.out b/tests/arch/mips/instructions/test_mips_instruction_061.out deleted file mode 100644 index ef763a1af..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_061.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x8c; ir[1,at]:0xc6100000; ir[2,v0]:0xa; sfpr[f0]:0x40700000; sfpr[f2]:0xC0AB3200; sfpr[f4]:0x40B56400; sfpr[f6]:0xC6192400; sfpr[f7]:0x46016400; sfpr[f8]:0xC6100000; sfpr[f10]:0x40700000; sfpr[f12]:0x40AB3200; sfpr[f14]:0x40B56400; sfpr[f16]:0x46192400; sfpr[f17]:0x46016400; sfpr[f18]:0x46100000; dfpr[FP0]:0x4070000000000000; dfpr[FP2]:0xC0AB320000000000; dfpr[FP4]:0x40B5640000000000; dfpr[FP6]:0xC619240046016400; dfpr[FP8]:0xC610000000000000; dfpr[FP10]:0x4070000000000000; dfpr[FP12]:0x40AB320000000000; dfpr[FP14]:0x40B5640000000000; dfpr[FP16]:0x4619240046016400; dfpr[FP18]:0x4610000000000000; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_062.out b/tests/arch/mips/instructions/test_mips_instruction_062.out deleted file mode 100644 index 1876723f8..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_062.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x8c; ir[1,at]:0xc4000000; ir[2,v0]:0xa; sfpr[f0]:0x40700000; sfpr[f2]:0xC0B00000; sfpr[f4]:0x40080000; sfpr[f6]:0xC3960000; sfpr[f7]:0x40A00000; sfpr[f8]:0xC4000000; sfpr[f10]:0xC1300000; sfpr[f12]:0xC0C80000; sfpr[f14]:0x40880000; sfpr[f16]:0xC4BB8000; sfpr[f17]:0xC5200000; sfpr[f18]:0x48160000; dfpr[FP0]:0x4070000000000000; dfpr[FP2]:0xC0B0000000000000; dfpr[FP4]:0x4008000000000000; dfpr[FP6]:0xC396000040A00000; dfpr[FP8]:0xC400000000000000; dfpr[FP10]:0xC130000000000000; dfpr[FP12]:0xC0C8000000000000; dfpr[FP14]:0x4088000000000000; dfpr[FP16]:0xC4BB8000C5200000; dfpr[FP18]:0x4816000000000000; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_063.out b/tests/arch/mips/instructions/test_mips_instruction_063.out deleted file mode 100644 index 2f61c3d3e..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_063.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x8c; ir[1,at]:0xc4000000; ir[2,v0]:0xa; sfpr[f0]:0x40700000; sfpr[f2]:0xC0B00000; sfpr[f4]:0x40080000; sfpr[f6]:0xC3960000; sfpr[f7]:0x40A00000; sfpr[f8]:0xC4000000; sfpr[f10]:0xBFB00000; sfpr[f12]:0xC0955555; sfpr[f13]:0x55555555; sfpr[f14]:0x40555555; sfpr[f15]:0x55555555; sfpr[f16]:0xC2700000; sfpr[f17]:0xBC200000; sfpr[f18]:0x3FDA740E; dfpr[FP0]:0x4070000000000000; dfpr[FP2]:0xC0B0000000000000; dfpr[FP4]:0x4008000000000000; dfpr[FP6]:0xC396000040A00000; dfpr[FP8]:0xC400000000000000; dfpr[FP10]:0xBFB0000000000000; dfpr[FP12]:0xC095555555555555; dfpr[FP14]:0x4055555555555555; dfpr[FP16]:0xC2700000BC200000; dfpr[FP18]:0x3FDA740E00000000; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_064.out b/tests/arch/mips/instructions/test_mips_instruction_064.out deleted file mode 100644 index 88b64bde0..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_064.out +++ /dev/null @@ -1,5 +0,0 @@ - -Square root of a negative number is not allowed. -Square root of a negative number is not allowed. -cr[PC]:0x8c; ir[1,at]:0x46100000; ir[2,v0]:0xa; sfpr[f0]:0x40700000; sfpr[f2]:0xC0AB3200; sfpr[f4]:0x40B56400; sfpr[f6]:0x46192400; sfpr[f7]:0xC6016400; sfpr[f8]:0x46100000; sfpr[f10]:0x3FB00000; sfpr[f14]:0x3F8BACF9; sfpr[f15]:0x14C1BAD0; sfpr[f16]:0x3C257EB5; sfpr[f18]:0x3C2AAAAB; dfpr[FP0]:0x4070000000000000; dfpr[FP2]:0xC0AB320000000000; dfpr[FP4]:0x40B5640000000000; dfpr[FP6]:0x46192400C6016400; dfpr[FP8]:0x4610000000000000; dfpr[FP10]:0x3FB0000000000000; dfpr[FP14]:0x3F8BACF914C1BAD0; dfpr[FP16]:0x3C257EB500000000; dfpr[FP18]:0x3C2AAAAB00000000; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_065.out b/tests/arch/mips/instructions/test_mips_instruction_065.out deleted file mode 100644 index f5851cade..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_065.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x7c; ir[1,at]:0x46100000; ir[2,v0]:0xa; sfpr[f0]:0x40700000; sfpr[f4]:0x40B56400; sfpr[f6]:0x46192400; sfpr[f7]:0xC6016400; sfpr[f8]:0x46100000; sfpr[f10]:0x40C32480; dfpr[FP0]:0x4070000000000000; dfpr[FP4]:0x40B5640000000000; dfpr[FP6]:0x46192400C6016400; dfpr[FP8]:0x4610000000000000; dfpr[FP10]:0x40C3248000000000; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_066.out b/tests/arch/mips/instructions/test_mips_instruction_066.out deleted file mode 100644 index aa4e53991..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_066.out +++ /dev/null @@ -1,13 +0,0 @@ - - -[E05] Error: Register `t0` isn't defined in file type `DoubleFloatingPoint` - ╭─[ assembly:15:14 ] - │ - 15 │ cvt.w.d $t0, $FP0 - │ ─┬ - │ ╰── Unknown register -────╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/instructions/test_mips_instruction_067.out b/tests/arch/mips/instructions/test_mips_instruction_067.out deleted file mode 100644 index 6b18c9b6f..000000000 --- a/tests/arch/mips/instructions/test_mips_instruction_067.out +++ /dev/null @@ -1,13 +0,0 @@ - - -[E05] Error: Register `t0` isn't defined in file type `DoubleFloatingPoint` - ╭─[ assembly:17:20 ] - │ - 17 │ cvt.d.w $FP0, $t0 - │ ─┬ - │ ╰── Unknown register -────╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_001.out b/tests/arch/mips/sentinel/test_mips_sentinels_001.out deleted file mode 100644 index bb418b996..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_001.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[1,at]:0xc; ir[2,v0]:0xa; ir[4,a0]:0x2; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_002.out b/tests/arch/mips/sentinel/test_mips_sentinels_002.out deleted file mode 100644 index f46867bca..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_002.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[1,at]:0xc; ir[2,v0]:0xa; ir[5,a1]:0x2; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_003.out b/tests/arch/mips/sentinel/test_mips_sentinels_003.out deleted file mode 100644 index c14ee77a8..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_003.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[1,at]:0xc; ir[2,v0]:0xa; ir[6,a2]:0x2; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_004.out b/tests/arch/mips/sentinel/test_mips_sentinels_004.out deleted file mode 100644 index 50539f39a..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_004.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[1,at]:0xc; ir[2,v0]:0xa; ir[7,a3]:0x2; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_005.out b/tests/arch/mips/sentinel/test_mips_sentinels_005.out deleted file mode 100644 index a0f0cd1bc..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_005.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[2,v0]:0xa; ir[30,fp]:0x5; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_006.out b/tests/arch/mips/sentinel/test_mips_sentinels_006.out deleted file mode 100644 index 3d1295729..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_006.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[2,v0]:0xa; ir[28,gp]:0x5; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_007.out b/tests/arch/mips/sentinel/test_mips_sentinels_007.out deleted file mode 100644 index dd69094bb..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_007.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[2,v0]:0xa; ir[26,k0]:0x5; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_008.out b/tests/arch/mips/sentinel/test_mips_sentinels_008.out deleted file mode 100644 index 4d9b823e3..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_008.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[2,v0]:0xa; ir[27,k1]:0x5; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_009.out b/tests/arch/mips/sentinel/test_mips_sentinels_009.out deleted file mode 100644 index 879dd5bc9..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_009.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x108a; ir[31,ra]:0x108a; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_010.out b/tests/arch/mips/sentinel/test_mips_sentinels_010.out deleted file mode 100644 index 18774653c..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_010.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[1,at]:0xc; ir[2,v0]:0xa; ir[16,s0]:0x2; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_011.out b/tests/arch/mips/sentinel/test_mips_sentinels_011.out deleted file mode 100644 index b51ae811a..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_011.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[1,at]:0xc; ir[2,v0]:0xa; ir[17,s1]:0x2; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_012.out b/tests/arch/mips/sentinel/test_mips_sentinels_012.out deleted file mode 100644 index 506c4585a..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_012.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[1,at]:0xc; ir[2,v0]:0xa; ir[18,s2]:0x2; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_013.out b/tests/arch/mips/sentinel/test_mips_sentinels_013.out deleted file mode 100644 index 3b40f66be..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_013.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[1,at]:0xc; ir[2,v0]:0xa; ir[19,s3]:0x2; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_014.out b/tests/arch/mips/sentinel/test_mips_sentinels_014.out deleted file mode 100644 index 69ae1d83e..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_014.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[1,at]:0xc; ir[2,v0]:0xa; ir[20,s4]:0x2; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_015.out b/tests/arch/mips/sentinel/test_mips_sentinels_015.out deleted file mode 100644 index 21e24116b..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_015.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[1,at]:0xc; ir[2,v0]:0xa; ir[21,s5]:0x2; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_015.s b/tests/arch/mips/sentinel/test_mips_sentinels_015.s index 8f58a2c70..3a645ca42 100644 --- a/tests/arch/mips/sentinel/test_mips_sentinels_015.s +++ b/tests/arch/mips/sentinel/test_mips_sentinels_015.s @@ -24,7 +24,7 @@ sw $fp, 4($sp) addu $fp, $sp, 4 - li $s5 2 + li $s5, 2 b_efs: lw $ra, 8($sp) lw $fp, 4($sp) diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_016.out b/tests/arch/mips/sentinel/test_mips_sentinels_016.out deleted file mode 100644 index 04f024272..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_016.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[1,at]:0xc; ir[2,v0]:0xa; ir[22,s6]:0x2; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_017.out b/tests/arch/mips/sentinel/test_mips_sentinels_017.out deleted file mode 100644 index 5ef9599fa..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_017.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[1,at]:0xc; ir[2,v0]:0xa; ir[23,s7]:0x2; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_018.out b/tests/arch/mips/sentinel/test_mips_sentinels_018.out deleted file mode 100644 index d4255a064..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_018.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[2,v0]:0xa; ir[29,sp]:0x9; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_018.s b/tests/arch/mips/sentinel/test_mips_sentinels_018.s index fd0689909..1e133a052 100644 --- a/tests/arch/mips/sentinel/test_mips_sentinels_018.s +++ b/tests/arch/mips/sentinel/test_mips_sentinels_018.s @@ -20,7 +20,7 @@ test: # crear "stack frame" para $ra, $fp y una variable local - addi $sp, 4 + addi $sp, $sp, 4 # return $v0 jr $ra diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_019.out b/tests/arch/mips/sentinel/test_mips_sentinels_019.out deleted file mode 100644 index f4832849c..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_019.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x14; ir[1,at]:0xc; ir[2,v0]:0xa; ir[4,a0]:0x5; ir[8,t0]:0x2; ir[31,ra]:0xc; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_020.out b/tests/arch/mips/sentinel/test_mips_sentinels_020.out deleted file mode 100644 index d09cc3282..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_020.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x14; ir[1,at]:0xc; ir[2,v0]:0xa; ir[4,a0]:0x5; ir[9,t1]:0x2; ir[31,ra]:0xc; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_021.out b/tests/arch/mips/sentinel/test_mips_sentinels_021.out deleted file mode 100644 index 8ee1d8b05..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_021.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x14; ir[1,at]:0xc; ir[2,v0]:0xa; ir[4,a0]:0x5; ir[10,t2]:0x2; ir[31,ra]:0xc; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_021.s b/tests/arch/mips/sentinel/test_mips_sentinels_021.s index 371362521..bda3fb15d 100644 --- a/tests/arch/mips/sentinel/test_mips_sentinels_021.s +++ b/tests/arch/mips/sentinel/test_mips_sentinels_021.s @@ -24,7 +24,7 @@ sw $fp, 4($sp) addu $fp, $sp, 4 - li $t2 2 + li $t2, 2 b_efs: lw $ra, 8($sp) lw $fp, 4($sp) diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_022.out b/tests/arch/mips/sentinel/test_mips_sentinels_022.out deleted file mode 100644 index 6c9cac29a..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_022.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x14; ir[1,at]:0xc; ir[2,v0]:0xa; ir[4,a0]:0x5; ir[11,t3]:0x2; ir[31,ra]:0xc; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_023.out b/tests/arch/mips/sentinel/test_mips_sentinels_023.out deleted file mode 100644 index 07c9e23dd..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_023.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x14; ir[1,at]:0xc; ir[2,v0]:0xa; ir[4,a0]:0x5; ir[12,t4]:0x2; ir[31,ra]:0xc; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_024.out b/tests/arch/mips/sentinel/test_mips_sentinels_024.out deleted file mode 100644 index 9367e8993..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_024.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x14; ir[1,at]:0xc; ir[2,v0]:0xa; ir[4,a0]:0x5; ir[13,t5]:0x2; ir[31,ra]:0xc; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_024.s b/tests/arch/mips/sentinel/test_mips_sentinels_024.s index 5bc180a83..514a5bff7 100644 --- a/tests/arch/mips/sentinel/test_mips_sentinels_024.s +++ b/tests/arch/mips/sentinel/test_mips_sentinels_024.s @@ -20,11 +20,11 @@ test: # crear "stack frame" para $ra, $fp y una variable local subu $sp, $sp, 12 - sw $ra 8($sp) - sw $fp 4($sp) + sw $ra, 8($sp) + sw $fp, 4($sp) addu $fp, $sp, 4 - li $t5 2 + li $t5, 2 b_efs: lw $ra, 8($sp) lw $fp, 4($sp) diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_025.out b/tests/arch/mips/sentinel/test_mips_sentinels_025.out deleted file mode 100644 index 14fc5479d..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_025.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x14; ir[1,at]:0xc; ir[2,v0]:0xa; ir[4,a0]:0x5; ir[14,t6]:0x2; ir[31,ra]:0xc; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_026.out b/tests/arch/mips/sentinel/test_mips_sentinels_026.out deleted file mode 100644 index f4b028484..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_026.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x14; ir[1,at]:0xc; ir[2,v0]:0xa; ir[4,a0]:0x5; ir[15,t7]:0x2; ir[31,ra]:0xc; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_027.out b/tests/arch/mips/sentinel/test_mips_sentinels_027.out deleted file mode 100644 index 232c69474..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_027.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x14; ir[1,at]:0xc; ir[2,v0]:0xa; ir[4,a0]:0x5; ir[24,t8]:0x2; ir[31,ra]:0xc; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_028.out b/tests/arch/mips/sentinel/test_mips_sentinels_028.out deleted file mode 100644 index 371ae21e2..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_028.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x14; ir[1,at]:0xc; ir[2,v0]:0xa; ir[4,a0]:0x5; ir[25,t9]:0x2; ir[31,ra]:0xc; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_029.out b/tests/arch/mips/sentinel/test_mips_sentinels_029.out deleted file mode 100644 index 4d3db4da2..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_029.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[1,at]:0xc; ir[2,v0]:0xa; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_030.out b/tests/arch/mips/sentinel/test_mips_sentinels_030.out deleted file mode 100644 index c8585a613..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_030.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[1,at]:0xc; ir[2,v0]:0xa; ir[3,v1]:0x2; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_031.out b/tests/arch/mips/sentinel/test_mips_sentinels_031.out deleted file mode 100644 index 4ffae289d..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_031.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[1,at]:0x8; ir[2,v0]:0xa; ir[16,s0]:0x2; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_031.s b/tests/arch/mips/sentinel/test_mips_sentinels_031.s index 3dbbf2ff2..edf1cd97d 100644 --- a/tests/arch/mips/sentinel/test_mips_sentinels_031.s +++ b/tests/arch/mips/sentinel/test_mips_sentinels_031.s @@ -20,11 +20,11 @@ test: # crear "stack frame" para $ra, $fp y una variable local subu $sp, $sp, 8 - sw $s0, ($sp) + sw $s0, 0($sp) li $s0, 2 - b_efs: lw $s0, ($sp) + b_efs: lw $s0, 0($sp) addu $sp, $sp, 8 diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_032.out b/tests/arch/mips/sentinel/test_mips_sentinels_032.out deleted file mode 100644 index 513072789..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_032.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[1,at]:0x4; ir[2,v0]:0xa; ir[16,s0]:0x5; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_032.s b/tests/arch/mips/sentinel/test_mips_sentinels_032.s index ed8cb2f3f..af0e8779e 100644 --- a/tests/arch/mips/sentinel/test_mips_sentinels_032.s +++ b/tests/arch/mips/sentinel/test_mips_sentinels_032.s @@ -20,7 +20,7 @@ test: # crear "stack frame" para $ra, $fp y una variable local subu $sp, $sp, 4 - sw $s0, ($sp) + sw $s0, 0($sp) li $s0, 5 diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_033.out b/tests/arch/mips/sentinel/test_mips_sentinels_033.out deleted file mode 100644 index db4973b2b..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_033.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[1,at]:0x8; ir[2,v0]:0xa; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_033.s b/tests/arch/mips/sentinel/test_mips_sentinels_033.s index 74c232e75..87391980c 100644 --- a/tests/arch/mips/sentinel/test_mips_sentinels_033.s +++ b/tests/arch/mips/sentinel/test_mips_sentinels_033.s @@ -19,8 +19,8 @@ test: # crear "stack frame" para $ra, $fp y una variable local - subu $sp, $sp 8 - sw $s0, ($sp) + subu $sp, $sp, 8 + sw $s0, 0($sp) li $s0, 2 diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_034.out b/tests/arch/mips/sentinel/test_mips_sentinels_034.out deleted file mode 100644 index db4973b2b..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_034.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[1,at]:0x8; ir[2,v0]:0xa; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_034.s b/tests/arch/mips/sentinel/test_mips_sentinels_034.s index 8d73bd065..a3cab173b 100644 --- a/tests/arch/mips/sentinel/test_mips_sentinels_034.s +++ b/tests/arch/mips/sentinel/test_mips_sentinels_034.s @@ -20,11 +20,11 @@ test: # crear "stack frame" para $ra, $fp y una variable local subu $sp, $sp, 8 - sw $s0, ($sp) + sw $s0, 0($sp) li $s0, 2 - b_efs: lh $s0, ($sp) + b_efs: lh $s0, 0($sp) addu $sp, $sp, 8 diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_035.out b/tests/arch/mips/sentinel/test_mips_sentinels_035.out deleted file mode 100644 index db4973b2b..000000000 --- a/tests/arch/mips/sentinel/test_mips_sentinels_035.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[1,at]:0x8; ir[2,v0]:0xa; ir[31,ra]:0x8; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_035.s b/tests/arch/mips/sentinel/test_mips_sentinels_035.s index 932a9aa64..74cd18ec9 100644 --- a/tests/arch/mips/sentinel/test_mips_sentinels_035.s +++ b/tests/arch/mips/sentinel/test_mips_sentinels_035.s @@ -20,12 +20,12 @@ test: # crear "stack frame" para $ra, $fp y una variable local subu $sp, $sp, 8 - sw $s0, ($sp) - sw $t0, ($sp) + sw $s0, 0($sp) + sw $t0, 0($sp) li $s0, 2 - b_efs: lw $s0, ($sp) + b_efs: lw $s0, 0($sp) addu $sp, $sp, 8 diff --git a/tests/arch/riscv/correct/examples/test_riscv_example_001.out b/tests/arch/riscv/correct/examples/test_riscv_example_001.out deleted file mode 100644 index b813595e7..000000000 --- a/tests/arch/riscv/correct/examples/test_riscv_example_001.out +++ /dev/null @@ -1,5 +0,0 @@ - -12 -34 -cr[PC]:0xfffffffe; ir[x10,a0]:0x22; ir[x17,a7]:0x1; keyboard[0x0]:''; display[0x0]:'1234'; - diff --git a/tests/arch/riscv/correct/examples/test_riscv_example_002.out b/tests/arch/riscv/correct/examples/test_riscv_example_002.out deleted file mode 100644 index f585b2625..000000000 --- a/tests/arch/riscv/correct/examples/test_riscv_example_002.out +++ /dev/null @@ -1,4 +0,0 @@ - -4 -cr[PC]:0xfffffffe; ir[x5,t0]:0xa; ir[x6,t1]:0xd; ir[x7,t2]:0x2d; ir[x10,a0]:0x4; ir[x17,a7]:0x1; ir[x28,t3]:0x21; ir[x29,t4]:0x4; keyboard[0x0]:''; display[0x0]:'4'; - diff --git a/tests/arch/riscv/correct/examples/test_riscv_example_002.s b/tests/arch/riscv/correct/examples/test_riscv_example_002.s index f710bf04e..8f00158bd 100644 --- a/tests/arch/riscv/correct/examples/test_riscv_example_002.s +++ b/tests/arch/riscv/correct/examples/test_riscv_example_002.s @@ -1,68 +1,26 @@ + # # Creator (https://creatorsim.github.io/creator/) -# Example: Store "hello world" byte by byte without data segment # .text - main: - # Use a base memory address - li t1, 0x200000 - - # Store "hello world" byte by byte - # 'h' = 104 - li t0, 104 - sb t0, 0(t1) - - # 'e' = 101 - li t0, 101 - sb t0, 1(t1) - - # 'l' = 108 - li t0, 108 - sb t0, 2(t1) - - # 'l' = 108 - li t0, 108 - sb t0, 3(t1) - - # 'o' = 111 - li t0, 111 - sb t0, 4(t1) - - # ' ' = 32 (space) - li t0, 32 - sb t0, 5(t1) - - # 'w' = 119 - li t0, 119 - sb t0, 6(t1) - - # 'o' = 111 - li t0, 111 - sb t0, 7(t1) - - # 'r' = 114 - li t0, 114 - sb t0, 8(t1) - - # 'l' = 108 - li t0, 108 - sb t0, 9(t1) - - # 'd' = 100 - li t0, 100 - sb t0, 10(t1) - - # null terminator = 0 - li t0, 0 - sb t0, 11(t1) - - # Print the string (system call 4 - print string) - mv a0, t1 # address of string - li a7, 4 # system call for print string - ecall - - # Return - li a7, 10 - ecall +main: + + li t0, 10 + li t1, 13 + li t2, 45 + li t3, 33 + + add t4, t0, t1 # 10+13 + sub t4, t2, t3 # 45-33 + mul t4, t3, t3 # 33*33 + div t4, t2, t0 # 45/10 + + # print last t4 + mv a0, t4 + li a7, 1 + ecall + + # return + jr ra diff --git a/tests/arch/riscv/correct/examples/test_riscv_example_003.out b/tests/arch/riscv/correct/examples/test_riscv_example_003.out deleted file mode 100644 index 83847e45f..000000000 --- a/tests/arch/riscv/correct/examples/test_riscv_example_003.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0xfffffffe; ir[x5,t0]:0x20000e; ir[x6,t1]:0x200004; ir[x7,t2]:0x200006; ir[x28,t3]:0xe; ir[x29,t4]:0x78; ir[x30,t5]:0x16; memory[0x20000f]:0x16; memory[0x20000c]:0x78; memory[0x20000b]:0x0e; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/correct/examples/test_riscv_example_003.s b/tests/arch/riscv/correct/examples/test_riscv_example_003.s index 3b9c35088..5a372f2dc 100644 --- a/tests/arch/riscv/correct/examples/test_riscv_example_003.s +++ b/tests/arch/riscv/correct/examples/test_riscv_example_003.s @@ -6,7 +6,6 @@ .data w1: .word 14 b1: .byte 120 - b4: .byte 0x7F .align 1 h1: .half 22 diff --git a/tests/arch/riscv/correct/examples/test_riscv_example_004.out b/tests/arch/riscv/correct/examples/test_riscv_example_004.out deleted file mode 100644 index 4004704ae..000000000 --- a/tests/arch/riscv/correct/examples/test_riscv_example_004.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0xfffffffe; ir[x5,t0]:0x200000; ir[x6,t1]:0x200008; ir[x7,t2]:0x200010; ir[x8,fp,s0]:0x200028; fpr[f0,ft0]:0x405145A1CAC08312; fpr[f2,ft2]:0x4026E2D0E5604189; fpr[f4,ft4]:0x4082A27EF9DB22D1; fpr[f10,fa0]:0x4084CB3333333333; fpr[f12,fa2]:0x404D13154689C3E9; memory[0x20002f]:0xE9; memory[0x20002e]:0xC3; memory[0x20002d]:0x89; memory[0x20002c]:0x46; memory[0x20002b]:0x15; memory[0x20002a]:0x13; memory[0x200029]:0x4D; memory[0x200028]:0x40; memory[0x200027]:0xD1; memory[0x200026]:0x22; memory[0x200025]:0xDB; memory[0x200024]:0xF9; memory[0x200023]:0x7E; memory[0x200022]:0xA2; memory[0x200021]:0x82; memory[0x200020]:0x40; memory[0x20001f]:0x12; memory[0x20001e]:0x83; memory[0x20001d]:0xC0; memory[0x20001c]:0xCA; memory[0x20001b]:0xA1; memory[0x20001a]:0x45; memory[0x200019]:0x51; memory[0x200018]:0x40; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/correct/examples/test_riscv_example_005.out b/tests/arch/riscv/correct/examples/test_riscv_example_005.out deleted file mode 100644 index 16083806e..000000000 --- a/tests/arch/riscv/correct/examples/test_riscv_example_005.out +++ /dev/null @@ -1,4 +0,0 @@ - -45 -cr[PC]:0xfffffffe; ir[x5,t0]:0xa; ir[x6,t1]:0xa; ir[x10,a0]:0x2d; ir[x17,a7]:0x1; keyboard[0x0]:''; display[0x0]:'45'; - diff --git a/tests/arch/riscv/correct/examples/test_riscv_example_006.out b/tests/arch/riscv/correct/examples/test_riscv_example_006.out deleted file mode 100644 index 0d638f0c9..000000000 --- a/tests/arch/riscv/correct/examples/test_riscv_example_006.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x1c; ir[x5,t0]:0x4; ir[x6,t1]:0x2; ir[x17,a7]:0xa; ir[x28,t3]:0x22; ir[x29,t4]:0xb; ir[x30,t5]:0x22b; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/correct/examples/test_riscv_example_007.out b/tests/arch/riscv/correct/examples/test_riscv_example_007.out deleted file mode 100644 index 1bf2a3f44..000000000 --- a/tests/arch/riscv/correct/examples/test_riscv_example_007.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0xfffffffe; ir[x5,t0]:0xf; ir[x6,t1]:0x5; ir[x7,t2]:0x5; ir[x28,t3]:0x1; ir[x29,t4]:0x4; ir[x30,t5]:0x200014; ir[x31,t6]:0x5; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/correct/examples/test_riscv_example_008.out b/tests/arch/riscv/correct/examples/test_riscv_example_008.out deleted file mode 100644 index 2cca57405..000000000 --- a/tests/arch/riscv/correct/examples/test_riscv_example_008.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0xfffffffe; ir[x5,t0]:0x200040; ir[x6,t1]:0x200080; ir[x7,t2]:0x4; ir[x28,t3]:0x4; ir[x29,t4]:0x4; fpr[f0,ft0]:0xffffffff33441124; memory[0x20007f]:0x24; memory[0x20007e]:0x11; memory[0x20007d]:0x44; memory[0x20007c]:0x33; memory[0x20007b]:0x21; memory[0x20007a]:0x43; memory[0x200079]:0x65; memory[0x200078]:0x87; memory[0x200077]:0x78; memory[0x200076]:0x56; memory[0x200075]:0x34; memory[0x200074]:0x12; memory[0x200073]:0x23; memory[0x200072]:0xff; memory[0x20006d]:0xd0; memory[0x20006c]:0x77; memory[0x20006b]:0x12; memory[0x20006a]:0xf0; memory[0x200069]:0xbf; memory[0x200068]:0xaa; memory[0x200067]:0x22; memory[0x200066]:0x11; memory[0x200065]:0x55; memory[0x200064]:0x44; memory[0x200063]:0x14; memory[0x200062]:0x02; memory[0x20005f]:0x14; memory[0x20005e]:0x14; memory[0x20005d]:0x14; memory[0x20005c]:0x14; memory[0x20005b]:0x20; memory[0x20005a]:0x21; memory[0x200059]:0x51; memory[0x200058]:0x77; memory[0x200057]:0x10; memory[0x200056]:0x22; memory[0x200055]:0x43; memory[0x200051]:0x45; memory[0x200050]:0x23; memory[0x20004c]:0x34; memory[0x200048]:0x34; memory[0x200044]:0x34; memory[0x200040]:0x34; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/correct/examples/test_riscv_example_011.out b/tests/arch/riscv/correct/examples/test_riscv_example_011.out deleted file mode 100644 index 55200332a..000000000 --- a/tests/arch/riscv/correct/examples/test_riscv_example_011.out +++ /dev/null @@ -1,4 +0,0 @@ - --144 -cr[PC]:0xfffffffe; ir[x6,t1]:0xffffffca; ir[x7,t2]:0x5a; ir[x10,a0]:0xffffff70; ir[x11,a1]:0x5a; ir[x12,a2]:0x2d; ir[x17,a7]:0x1; keyboard[0x0]:''; display[0x0]:'-144'; - diff --git a/tests/arch/riscv/correct/examples/test_riscv_example_012.out b/tests/arch/riscv/correct/examples/test_riscv_example_012.out deleted file mode 100644 index 1a3ed56da..000000000 --- a/tests/arch/riscv/correct/examples/test_riscv_example_012.out +++ /dev/null @@ -1,4 +0,0 @@ - -120 -cr[PC]:0xfffffffe; ir[x5,t0]:0x2; ir[x6,t1]:0x5; ir[x10,a0]:0x78; ir[x17,a7]:0x1; keyboard[0x0]:''; display[0x0]:'120'; - diff --git a/tests/arch/riscv/correct/examples/test_riscv_example_013.out b/tests/arch/riscv/correct/examples/test_riscv_example_013.out deleted file mode 100644 index fa87a5452..000000000 --- a/tests/arch/riscv/correct/examples/test_riscv_example_013.out +++ /dev/null @@ -1,41 +0,0 @@ - -83 -116 -114 -105 -110 -103 -32 -105 -110 -32 -85 -84 -70 -45 -56 -58 -32 --30 --120 --128 -32 --30 --120 --85 -32 --30 --120 --121 -32 --30 --120 --120 -32 --16 --97 --96 --84 -0 -cr[PC]:0x1c; ir[x5,t0]:0x200026; ir[x17,a7]:0x1; keyboard[0x0]:''; display[0x0]:'83116114105110103321051103285847045565832-30-120-12832-30-120-8532-30-120-12132-30-120-12032-16-97-96-840'; - diff --git a/tests/arch/riscv/correct/examples/test_riscv_example_013.s b/tests/arch/riscv/correct/examples/test_riscv_example_013.s index c7912aa9b..07643a3c4 100644 --- a/tests/arch/riscv/correct/examples/test_riscv_example_013.s +++ b/tests/arch/riscv/correct/examples/test_riscv_example_013.s @@ -1,113 +1,16 @@ + # # Creator (https://creatorsim.github.io/creator/) # -.text - -main: - # Create stack frame - addi sp, sp, -16 # Allocate space for 4 words - sw ra, 12(sp) # Save return address - sw s0, 8(sp) # Save callee-saved registers - sw s1, 4(sp) - sw s2, 0(sp) - - # Initialize arguments - li a0, 23 - li a1, -77 - li a2, 45 - - # Call the first level function (starts the nested calls) - jal ra, level1 - - # Store result - mv s0, a0 - - # Print result - li a7, 1 - ecall - - # Restore registers and return - lw s2, 0(sp) - lw s1, 4(sp) - lw s0, 8(sp) - lw ra, 12(sp) - addi sp, sp, 16 - jr ra +.data + utf8: .string "String in UTF-8: ∀ ∫ ∇ ∈ 🠬" -# First level function - calls level2 -level1: - # Create stack frame - addi sp, sp, -16 - sw ra, 12(sp) - sw s0, 8(sp) - sw a0, 4(sp) # Save argument a0 - sw a1, 0(sp) # Save argument a1 - - # Save arguments in saved registers - mv s0, a0 - - # Call level2 - jal ra, level2 - - # Add original a0 to result - add a0, a0, s0 - - # Restore registers and return - lw a1, 0(sp) - lw s0, 8(sp) - lw ra, 12(sp) - addi sp, sp, 16 - jr ra - -# Second level function - calls level3 -level2: - # Create stack frame - addi sp, sp, -12 - sw ra, 8(sp) - sw a1, 4(sp) - sw a2, 0(sp) - - # Call level3 - jal ra, level3 - - # Add original a2 to result - lw t0, 0(sp) - add a0, a0, t0 - - # Restore and return - lw a1, 4(sp) - lw ra, 8(sp) - addi sp, sp, 12 - jr ra - -# Third level function - calls sum -level3: - # Create stack frame - addi sp, sp, -8 - sw ra, 4(sp) - sw a1, 0(sp) - - # First call the original sum function - jal ra, sum - - # Then call sub with result from sum - lw a1, 0(sp) - jal ra, sub - - # Restore and return - lw ra, 4(sp) - addi sp, sp, 8 - jr ra - -# Original functions from the example -sum: - add t1, a0, a1 - add t2, a2, a2 - add a0, t1, zero - add a1, t2, zero - jr ra - -sub: - sub a0, a0, a1 - jr ra +.text +main: li a7, 1 + la t0, utf8 +loop: lb a0, 0(t0) + ecall + addi t0, t0, 1 + bne a0, zero, loop + jr ra diff --git a/tests/arch/riscv/correct/examples/test_riscv_example_014.s b/tests/arch/riscv/correct/examples/test_riscv_example_014.s index be379ab67..c7912aa9b 100644 --- a/tests/arch/riscv/correct/examples/test_riscv_example_014.s +++ b/tests/arch/riscv/correct/examples/test_riscv_example_014.s @@ -1,97 +1,113 @@ # # Creator (https://creatorsim.github.io/creator/) -# Example: Various data types in data segment and memory operations # -.data -.align 4 +.text -# Different data types in data segment -byte_values: .byte 0x42, 0x73, 0xA5, 0xFF - .byte -128, 127, 0, 55 +main: + # Create stack frame + addi sp, sp, -16 # Allocate space for 4 words + sw ra, 12(sp) # Save return address + sw s0, 8(sp) # Save callee-saved registers + sw s1, 4(sp) + sw s2, 0(sp) -.align 2 -half_values: .half 0x1234, 0x5678, 0xABCD, 0xEF12 - .half -32768, 32767, 0, 12345 + # Initialize arguments + li a0, 23 + li a1, -77 + li a2, 45 + + # Call the first level function (starts the nested calls) + jal ra, level1 + + # Store result + mv s0, a0 + + # Print result + li a7, 1 + ecall -.align 4 -word_values: .word 0x12345678, 0x87654321, 0xDEADBEEF, 0xCAFEBABE - .word -2147483648, 2147483647, 0, 1000000 + # Restore registers and return + lw s2, 0(sp) + lw s1, 4(sp) + lw s0, 8(sp) + lw ra, 12(sp) + addi sp, sp, 16 + jr ra -.align 3 -double_values: .dword 0x123456789ABCDEF0, 0xFEDCBA9876543210 - .dword 0x0123456789ABCDEF, 0xAAAABBBBCCCCDDDD +# First level function - calls level2 +level1: + # Create stack frame + addi sp, sp, -16 + sw ra, 12(sp) + sw s0, 8(sp) + sw a0, 4(sp) # Save argument a0 + sw a1, 0(sp) # Save argument a1 + + # Save arguments in saved registers + mv s0, a0 + + # Call level2 + jal ra, level2 + + # Add original a0 to result + add a0, a0, s0 + + # Restore registers and return + lw a1, 0(sp) + lw s0, 8(sp) + lw ra, 12(sp) + addi sp, sp, 16 + jr ra -# String data -.align 1 -string_data: .string "Hello, RISC-V!" - .byte 0 # Null terminator +# Second level function - calls level3 +level2: + # Create stack frame + addi sp, sp, -12 + sw ra, 8(sp) + sw a1, 4(sp) + sw a2, 0(sp) + + # Call level3 + jal ra, level3 + + # Add original a2 to result + lw t0, 0(sp) + add a0, a0, t0 + + # Restore and return + lw a1, 4(sp) + lw ra, 8(sp) + addi sp, sp, 12 + jr ra -# Float data (stored as word) -.align 4 -float_data: .word 0x40490FDB # Pi as IEEE 754 float (3.14159...) - .word 0x402DF854 # e as IEEE 754 float (2.71828...) +# Third level function - calls sum +level3: + # Create stack frame + addi sp, sp, -8 + sw ra, 4(sp) + sw a1, 0(sp) + + # First call the original sum function + jal ra, sum + + # Then call sub with result from sum + lw a1, 0(sp) + jal ra, sub + + # Restore and return + lw ra, 4(sp) + addi sp, sp, 8 + jr ra -# Target memory locations for writing -.align 4 -target_area: .space 256 # Reserve 256 bytes for writing data +# Original functions from the example +sum: + add t1, a0, a1 + add t2, a2, a2 + add a0, t1, zero + add a1, t2, zero + jr ra -.text -main: - # Set up base addresses - la t0, byte_values - la t1, half_values - la t2, word_values - la t3, double_values - la t4, target_area - - # Copy and manipulate byte data - lb a0, 0(t0) # Load first byte (0x42) - sb a0, 0(t4) # Store to target area - lb a1, 3(t0) # Load fourth byte (0xFF) - sb a1, 1(t4) # Store to target area + 1 - - # Manipulate and store modified byte - addi a0, a0, 1 # Increment byte value - sb a0, 2(t4) # Store modified byte - - # Copy and manipulate half-word data - lh a0, 0(t1) # Load first half (0x1234) - sh a0, 4(t4) # Store to target area + 4 - lh a1, 6(t1) # Load fourth half (0xEF12) - sh a1, 6(t4) # Store to target area + 6 - - # Perform arithmetic on half-word and store - add a2, a0, a1 # Add two half-words - sh a2, 8(t4) # Store result - - # Copy and manipulate word data - lw a0, 0(t2) # Load first word (0x12345678) - sw a0, 12(t4) # Store to target area + 12 - lw a1, 12(t2) # Load fourth word (0xCAFEBABE) - sw a1, 16(t4) # Store to target area + 16 - - # Perform bitwise operations on words - xor a2, a0, a1 # XOR two words - sw a2, 20(t4) # Store XOR result - or a3, a0, a1 # OR two words - sw a3, 24(t4) # Store OR result - and a4, a0, a1 # AND two words - sw a4, 28(t4) # Store AND result - - # Copy double-word data (64-bit) - ld a0, 0(t3) # Load first double-word - sd a0, 32(t4) # Store to target area + 32 - ld a1, 8(t3) # Load second double-word - sd a1, 40(t4) # Store to target area + 40 - - # Create and store new data patterns - li a0, 0x55AA55AA # Create alternating bit pattern - sw a0, 48(t4) # Store pattern - - # Store sequential byte pattern - li a0, 0x01 # Start with 1 - li a1, 8 # Counter for 8 bytes - addi a2, t4, 52 # Start address for pattern - - jr ra \ No newline at end of file +sub: + sub a0, a0, a1 + jr ra diff --git a/tests/arch/riscv/correct/examples/test_riscv_example_015.s b/tests/arch/riscv/correct/examples/test_riscv_example_015.s new file mode 100644 index 000000000..f710bf04e --- /dev/null +++ b/tests/arch/riscv/correct/examples/test_riscv_example_015.s @@ -0,0 +1,68 @@ +# +# Creator (https://creatorsim.github.io/creator/) +# Example: Store "hello world" byte by byte without data segment +# + +.text + main: + # Use a base memory address + li t1, 0x200000 + + # Store "hello world" byte by byte + # 'h' = 104 + li t0, 104 + sb t0, 0(t1) + + # 'e' = 101 + li t0, 101 + sb t0, 1(t1) + + # 'l' = 108 + li t0, 108 + sb t0, 2(t1) + + # 'l' = 108 + li t0, 108 + sb t0, 3(t1) + + # 'o' = 111 + li t0, 111 + sb t0, 4(t1) + + # ' ' = 32 (space) + li t0, 32 + sb t0, 5(t1) + + # 'w' = 119 + li t0, 119 + sb t0, 6(t1) + + # 'o' = 111 + li t0, 111 + sb t0, 7(t1) + + # 'r' = 114 + li t0, 114 + sb t0, 8(t1) + + # 'l' = 108 + li t0, 108 + sb t0, 9(t1) + + # 'd' = 100 + li t0, 100 + sb t0, 10(t1) + + # null terminator = 0 + li t0, 0 + sb t0, 11(t1) + + # Print the string (system call 4 - print string) + mv a0, t1 # address of string + li a7, 4 # system call for print string + ecall + + # Return + li a7, 10 + ecall + diff --git a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_001.out b/tests/arch/riscv/correct/syscalls/test_riscv_syscall_001.out deleted file mode 100644 index cddaf93dd..000000000 --- a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_001.out +++ /dev/null @@ -1,9 +0,0 @@ - -6673 -120 -34 --5678 -1066192077 -this is a string -cr[PC]:0x64; ir[x6,t1]:0x20001c; ir[x10,a0]:0x200008; ir[x17,a7]:0x4; fpr[f0,ft0]:0xffffffff3F8CCCCD; keyboard[0x0]:''; display[0x0]:'667312034-56781066192077this%20is%20a%20string'; - diff --git a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_002.out b/tests/arch/riscv/correct/syscalls/test_riscv_syscall_002.out deleted file mode 100644 index f5a0b4798..000000000 --- a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_002.out +++ /dev/null @@ -1,6 +0,0 @@ - -6673 --86 -1 -cr[PC]:0x2c; ir[x5,t0]:0x1; ir[x17,a7]:0x2; fpr[f10,fa0]:0xffffffff3F800000; keyboard[0x0]:''; display[0x0]:'6673-861'; - diff --git a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_003.out b/tests/arch/riscv/correct/syscalls/test_riscv_syscall_003.out deleted file mode 100644 index bf4dd79ce..000000000 --- a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_003.out +++ /dev/null @@ -1,6 +0,0 @@ - -6673 --86 -1 -cr[PC]:0x2c; ir[x5,t0]:0x1; ir[x17,a7]:0x3; fpr[f10,fa0]:0x3FF0000000000000; keyboard[0x0]:''; display[0x0]:'6673-861'; - diff --git a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_004.out b/tests/arch/riscv/correct/syscalls/test_riscv_syscall_004.out deleted file mode 100644 index d08cb5580..000000000 --- a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_004.out +++ /dev/null @@ -1,8 +0,0 @@ - -First String -Second String -a - - -cr[PC]:0x34; ir[x10,a0]:0xa; ir[x17,a7]:0xb; keyboard[0x0]:''; display[0x0]:'First%20StringSecond%20Stringa%0A'; - diff --git a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_005.s b/tests/arch/riscv/correct/syscalls/test_riscv_syscall_005.s index 05f1fb810..ac99a90fd 100644 --- a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_005.s +++ b/tests/arch/riscv/correct/syscalls/test_riscv_syscall_005.s @@ -6,4 +6,5 @@ .text main: li a7, 5 - ecall \ No newline at end of file + ecall + jr ra \ No newline at end of file diff --git a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_006.s b/tests/arch/riscv/correct/syscalls/test_riscv_syscall_006.s index b3ad184d5..f1770f2dd 100644 --- a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_006.s +++ b/tests/arch/riscv/correct/syscalls/test_riscv_syscall_006.s @@ -7,3 +7,4 @@ main: li a7, 6 ecall + jr ra diff --git a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_007.s b/tests/arch/riscv/correct/syscalls/test_riscv_syscall_007.s index 177ae9419..cb406937d 100644 --- a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_007.s +++ b/tests/arch/riscv/correct/syscalls/test_riscv_syscall_007.s @@ -7,4 +7,4 @@ main: li a7, 7 ecall - \ No newline at end of file + jr ra \ No newline at end of file diff --git a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_008.s b/tests/arch/riscv/correct/syscalls/test_riscv_syscall_008.s index e339d211c..28f0ce457 100644 --- a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_008.s +++ b/tests/arch/riscv/correct/syscalls/test_riscv_syscall_008.s @@ -14,4 +14,5 @@ li a7, 8 la a0, buffer li a1, 5 - ecall \ No newline at end of file + ecall + jr ra \ No newline at end of file diff --git a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_009.s b/tests/arch/riscv/correct/syscalls/test_riscv_syscall_009.s index 300d643e2..cfbb7e931 100644 --- a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_009.s +++ b/tests/arch/riscv/correct/syscalls/test_riscv_syscall_009.s @@ -13,4 +13,5 @@ ecall sw t0, 0(a0) - sw t1, 4(a0) \ No newline at end of file + sw t1, 4(a0) + jr ra diff --git a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_010.out b/tests/arch/riscv/correct/syscalls/test_riscv_syscall_010.out deleted file mode 100644 index ffed9be10..000000000 --- a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_010.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x8; ir[x17,a7]:0xa; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_010.s b/tests/arch/riscv/correct/syscalls/test_riscv_syscall_010.s index 800efcdeb..5355c5c8c 100644 --- a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_010.s +++ b/tests/arch/riscv/correct/syscalls/test_riscv_syscall_010.s @@ -8,3 +8,4 @@ li a7, 10 ecall li t0, 453 + jr ra diff --git a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_011.out b/tests/arch/riscv/correct/syscalls/test_riscv_syscall_011.out deleted file mode 100644 index 2e7d093b0..000000000 --- a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_011.out +++ /dev/null @@ -1,4 +0,0 @@ - -c -cr[PC]:0xc; ir[x10,a0]:0x63; ir[x17,a7]:0xb; keyboard[0x0]:''; display[0x0]:'c'; - diff --git a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_011.s b/tests/arch/riscv/correct/syscalls/test_riscv_syscall_011.s index 61cb6278f..0b7064bf5 100644 --- a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_011.s +++ b/tests/arch/riscv/correct/syscalls/test_riscv_syscall_011.s @@ -8,3 +8,4 @@ li a7, 11 li a0, 'c' ecall + jr ra diff --git a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_012.s b/tests/arch/riscv/correct/syscalls/test_riscv_syscall_012.s index 7f3b95895..3a734cb42 100644 --- a/tests/arch/riscv/correct/syscalls/test_riscv_syscall_012.s +++ b/tests/arch/riscv/correct/syscalls/test_riscv_syscall_012.s @@ -7,3 +7,4 @@ main: li a7, 12 ecall + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_001.out b/tests/arch/riscv/instructions/test_riscv_instruction_001.out deleted file mode 100644 index 9b6c2763c..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_001.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x20; ir[x5,t0]:0xa; ir[x6,t1]:0xffffffe2; ir[x8,fp,s0]:0xffffff; ir[x9,s1]:0xffffffec; ir[x10,a0]:0xffffffec; ir[x11,a1]:0xffffeb; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_001.s b/tests/arch/riscv/instructions/test_riscv_instruction_001.s index 6cc090db2..598092385 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_001.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_001.s @@ -13,7 +13,7 @@ main: add x9, x5, x6 # 10 - 30 add x10, x7, x9 # -20 + 0 - add x11, x8, x10 # -20 + 0xFFFFFF noo -> 0xFFFFFF - 20 + add x11, x8, x10 # -20 + 0xFFFFFF # end program jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_002.out b/tests/arch/riscv/instructions/test_riscv_instruction_002.out deleted file mode 100644 index 86264c0de..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_002.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[x5,t0]:0xa; ir[x9,s1]:0xffffffec; ir[x10,a0]:0x187; ir[x11,a1]:0x193; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_002.s b/tests/arch/riscv/instructions/test_riscv_instruction_002.s index e6db252ef..d4fb18e85 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_002.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_002.s @@ -10,4 +10,6 @@ main: addi x9, x5, -30 # 10 - 30 addi x10, x9, 411 # x9 + 411 addi x11, x10, 12 # x10 - 12 - #addi x11, x10, 42568 # x10 - 42568 \ No newline at end of file + #addi x11, x10, 42568 # x10 - 42568 + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_003.out b/tests/arch/riscv/instructions/test_riscv_instruction_003.out deleted file mode 100644 index 00aa1c232..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_003.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x20; ir[x5,t0]:0x223; ir[x6,t1]:0xfffffc57; ir[x7,t2]:0xc; ir[x8,fp,s0]:0x123515; ir[x9,s1]:0x5cc; ir[x10,a0]:0xfffffa40; ir[x11,a1]:0x123ad5; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_003.s b/tests/arch/riscv/instructions/test_riscv_instruction_003.s index a0496bffd..219cd60ed 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_003.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_003.s @@ -13,4 +13,6 @@ main: sub x9, x5, x6 # 547 - (-937) sub x10, x7, x9 # 12 - 1484 - sub x11, x8, x10 # 0x123515 + 1472 \ No newline at end of file + sub x11, x8, x10 # 0x123515 + 1472 + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_004.out b/tests/arch/riscv/instructions/test_riscv_instruction_004.out deleted file mode 100644 index d36f27819..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_004.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x14; ir[x5,t0]:0x23000; ir[x6,t1]:0x56db000; ir[x7,t2]:0x34000; ir[x8,fp,s0]:0x7f002000; ir[x9,s1]:0x2000; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_004.s b/tests/arch/riscv/instructions/test_riscv_instruction_004.s index fba8eb31a..1d7a55472 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_004.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_004.s @@ -10,4 +10,6 @@ main: lui x6, 22235 lui x7, 0x34 lui x8, 0xFF002 - lui x9, 2 \ No newline at end of file + lui x9, 2 + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_005.out b/tests/arch/riscv/instructions/test_riscv_instruction_005.out deleted file mode 100644 index 1271c94c8..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_005.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x2c; ir[x1,ra]:0x18; ir[x5,t0]:0x223; ir[x6,t1]:0xfffffc57; ir[x7,t2]:0xc; ir[x8,fp,s0]:0x123515; ir[x17,a7]:0xa; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_006.out b/tests/arch/riscv/instructions/test_riscv_instruction_006.out deleted file mode 100644 index 1271c94c8..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_006.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x2c; ir[x1,ra]:0x18; ir[x5,t0]:0x223; ir[x6,t1]:0xfffffc57; ir[x7,t2]:0xc; ir[x8,fp,s0]:0x123515; ir[x17,a7]:0xa; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_006.s b/tests/arch/riscv/instructions/test_riscv_instruction_006.s index 37b337e98..2fed5e543 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_006.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_006.s @@ -11,7 +11,8 @@ main: li x7, 12 li x8, 0x123515 - jal x1, end + jal x0, mid +mid:jalr x1, 0x28(x0) sub x9, x5, x6 # 547 - (-937) sub x10, x7, x9 # 12 - 1484 @@ -19,4 +20,4 @@ main: end: li a7, 10 - ecall \ No newline at end of file + ecall diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_007.out b/tests/arch/riscv/instructions/test_riscv_instruction_007.out deleted file mode 100644 index af8d133ea..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_007.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x2c; ir[x5,t0]:0x44562; ir[x6,t1]:0x2; ir[x7,t2]:0x5; ir[x8,fp,s0]:0x44562; ir[x17,a7]:0xa; ir[x28,t3]:0x22; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_008.out b/tests/arch/riscv/instructions/test_riscv_instruction_008.out deleted file mode 100644 index 21d396ff4..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_008.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x24; ir[x5,t0]:0x754; ir[x6,t1]:0x22b; ir[x7,t2]:0x5; ir[x8,fp,s0]:0x44562; ir[x17,a7]:0xa; ir[x28,t3]:0x22; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_009.out b/tests/arch/riscv/instructions/test_riscv_instruction_009.out deleted file mode 100644 index d4bf66ee9..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_009.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x28; ir[x5,t0]:0x169; ir[x6,t1]:0x2; ir[x7,t2]:0x5; ir[x8,fp,s0]:0x44562; ir[x9,s1]:0x754; ir[x10,a0]:0x22b; ir[x17,a7]:0xa; ir[x28,t3]:0x22; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_010.out b/tests/arch/riscv/instructions/test_riscv_instruction_010.out deleted file mode 100644 index cd97af2a3..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_010.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x28; ir[x5,t0]:0x754; ir[x6,t1]:0x2; ir[x7,t2]:0x5; ir[x8,fp,s0]:0x44562; ir[x17,a7]:0xa; ir[x28,t3]:0x22; ir[x31,t6]:0x22b; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_011.out b/tests/arch/riscv/instructions/test_riscv_instruction_011.out deleted file mode 100644 index d4bf66ee9..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_011.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x28; ir[x5,t0]:0x169; ir[x6,t1]:0x2; ir[x7,t2]:0x5; ir[x8,fp,s0]:0x44562; ir[x9,s1]:0x754; ir[x10,a0]:0x22b; ir[x17,a7]:0xa; ir[x28,t3]:0x22; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_012.out b/tests/arch/riscv/instructions/test_riscv_instruction_012.out deleted file mode 100644 index cd97af2a3..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_012.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x28; ir[x5,t0]:0x754; ir[x6,t1]:0x2; ir[x7,t2]:0x5; ir[x8,fp,s0]:0x44562; ir[x17,a7]:0xa; ir[x28,t3]:0x22; ir[x31,t6]:0x22b; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_013.out b/tests/arch/riscv/instructions/test_riscv_instruction_013.out deleted file mode 100644 index 5d7a09fa8..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_013.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x48; ir[x5,t0]:0x200000; ir[x6,t1]:0x200004; ir[x7,t2]:0x200006; ir[x8,fp,s0]:0xe; ir[x10,a0]:0x7f; ir[x12,a2]:0x7fff; ir[x14,a4]:0x20000e; memory[0x20000f]:0xff; memory[0x20000e]:0x7f; memory[0x20000c]:0x7f; memory[0x20000b]:0x0e; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_013.s b/tests/arch/riscv/instructions/test_riscv_instruction_013.s new file mode 100644 index 000000000..3f01a3201 --- /dev/null +++ b/tests/arch/riscv/instructions/test_riscv_instruction_013.s @@ -0,0 +1,43 @@ + +# +# Creator (https://creatorsim.github.io/creator/) +# + +.data + w1: .word 14 + b1: .byte 127 + + .align 1 + h1: .half 32767 + w2: .zero 4 + b2: .zero 1 + + .align 1 + h2: .zero 2 + +.text +main: + + la x5, w1 # w1 address -> x5 + la x6, b1 # b1 address -> x6 + la x7, h1 # h1 address -> x7 + + lw x8, 0 (x5) # Memory[x5] -> x8 + #lw x9, w1 # Memory[w1] -> x9 + + lb x10, 0(x6) # Memory[x6] -> x10 + #lb x11, b1 # Memory[b1] -> x11 + + lh x12, 0 (x7) # Memory[x7] -> x12 + #lh x13, h1 # Memory[h1] -> x13 + + la x14, w2 # w2 address -> x14 + sw x8, 0(x14) # x8 -> Memory[w2] + + la x14, b2 # b2 address -> x14 + sb x10, 0(x14) # x10 -> Memory[b2] + + la x14, h2 # h2 address -> x14 + sh x12, 0(x14) # x12 -> Memory[h2] + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_014.out b/tests/arch/riscv/instructions/test_riscv_instruction_014.out deleted file mode 100644 index 7059f0735..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_014.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x30; ir[x6,t1]:0x200000; ir[x7,t2]:0x200002; ir[x10,a0]:0x7f; ir[x12,a2]:0xffff; ir[x14,a4]:0x200006; memory[0x200007]:0xff; memory[0x200006]:0xff; memory[0x200004]:0x7f; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_014.s b/tests/arch/riscv/instructions/test_riscv_instruction_014.s index 4226d8430..3ec4dc88b 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_014.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_014.s @@ -28,4 +28,4 @@ main: la x14, h2 # h2 address -> x14 sh x12, 0(x14) # x12 -> Memory[h2] - + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_015.out b/tests/arch/riscv/instructions/test_riscv_instruction_015.out deleted file mode 100644 index 77770faba..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_015.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x28; ir[x5,t0]:0x2f0; ir[x8,fp,s0]:0x1; ir[x9,s1]:0x1; ir[x10,a0]:0xfffffc00; ir[x13,a3]:0x1; ir[x14,a4]:0x1; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_015.s b/tests/arch/riscv/instructions/test_riscv_instruction_015.s index 855a234f0..2d478dbf2 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_015.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_015.s @@ -17,3 +17,5 @@ main: slti x12, x10, -1024 slti x13, x10, -1023 slti x14, x10, -1022 + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_016.out b/tests/arch/riscv/instructions/test_riscv_instruction_016.out deleted file mode 100644 index 77770faba..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_016.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x28; ir[x5,t0]:0x2f0; ir[x8,fp,s0]:0x1; ir[x9,s1]:0x1; ir[x10,a0]:0xfffffc00; ir[x13,a3]:0x1; ir[x14,a4]:0x1; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_016.s b/tests/arch/riscv/instructions/test_riscv_instruction_016.s index 0281f6484..bfb5d0e11 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_016.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_016.s @@ -17,4 +17,5 @@ main: sltiu x12, x10, -1024 sltiu x13, x10, -1023 sltiu x14, x10, -1022 - \ No newline at end of file + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_017.out b/tests/arch/riscv/instructions/test_riscv_instruction_017.out deleted file mode 100644 index f66ba25a1..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_017.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x24; ir[x5,t0]:0x22346; ir[x6,t1]:0x11d7; ir[x7,t2]:0xffffdaf2; ir[x8,fp,s0]:0x22713; ir[x9,s1]:0x13f5; ir[x10,a0]:0xffffdd0d; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_017.s b/tests/arch/riscv/instructions/test_riscv_instruction_017.s index f60d28db0..163a93426 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_017.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_017.s @@ -13,4 +13,5 @@ main: xori x8, x5, 0x455 xori x9, x6, 0x222 xori x10, x7, 0x7FF - \ No newline at end of file + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_018.out b/tests/arch/riscv/instructions/test_riscv_instruction_018.out deleted file mode 100644 index 86396ba9b..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_018.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x24; ir[x5,t0]:0x22346; ir[x6,t1]:0x11d7; ir[x7,t2]:0xffffdaf2; ir[x8,fp,s0]:0x22757; ir[x9,s1]:0x13f7; ir[x10,a0]:0xffffdfff; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_018.s b/tests/arch/riscv/instructions/test_riscv_instruction_018.s index 3afe33af6..0d4b1b46b 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_018.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_018.s @@ -13,4 +13,5 @@ main: ori x8, x5, 0x455 ori x9, x6, 0x222 ori x10, x7, 0x7FF - \ No newline at end of file + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_019.out b/tests/arch/riscv/instructions/test_riscv_instruction_019.out deleted file mode 100644 index 542127014..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_019.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x24; ir[x5,t0]:0x22346; ir[x6,t1]:0x11d7; ir[x7,t2]:0xffffdaf2; ir[x8,fp,s0]:0x44; ir[x9,s1]:0x2; ir[x10,a0]:0x2f2; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_019.s b/tests/arch/riscv/instructions/test_riscv_instruction_019.s index 02ab3a5a5..d561e683e 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_019.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_019.s @@ -13,4 +13,5 @@ main: andi x8, x5, 0x455 andi x9, x6, 0x222 andi x10, x7, 0x7FF - \ No newline at end of file + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_020.out b/tests/arch/riscv/instructions/test_riscv_instruction_020.out deleted file mode 100644 index b77dbf3fb..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_020.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x24; ir[x5,t0]:0xaad4; ir[x6,t1]:0x11d7; ir[x7,t2]:0xffffdaf2; ir[x8,fp,s0]:0x2ab50; ir[x9,s1]:0x11d70; ir[x10,a0]:0xed790000; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_020.s b/tests/arch/riscv/instructions/test_riscv_instruction_020.s index e9402f6a9..32e0555b4 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_020.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_020.s @@ -13,5 +13,5 @@ main: slli x8, x5, 2 slli x9, x6, 4 slli x10, x7, 15 - - \ No newline at end of file + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_021.out b/tests/arch/riscv/instructions/test_riscv_instruction_021.out deleted file mode 100644 index 4061495a9..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_021.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x24; ir[x5,t0]:0xaad4; ir[x6,t1]:0x11d7; ir[x7,t2]:0xffffdaf2; ir[x8,fp,s0]:0x2ab5; ir[x9,s1]:0x11d; ir[x10,a0]:0x1ffff; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_021.s b/tests/arch/riscv/instructions/test_riscv_instruction_021.s index 8230216ef..06880a71a 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_021.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_021.s @@ -13,5 +13,5 @@ main: srli x8, x5, 2 srli x9, x6,4 srli x10, x7, 15 - - \ No newline at end of file + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_022.out b/tests/arch/riscv/instructions/test_riscv_instruction_022.out deleted file mode 100644 index f08cdef68..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_022.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x24; ir[x5,t0]:0xaad4; ir[x6,t1]:0x11d7; ir[x7,t2]:0xffffdaf2; ir[x8,fp,s0]:0x2ab5; ir[x9,s1]:0x11d; ir[x10,a0]:0xffffffff; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_022.s b/tests/arch/riscv/instructions/test_riscv_instruction_022.s index 334e2d526..980c04dbc 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_022.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_022.s @@ -13,5 +13,5 @@ main: srai x8, x5, 2 srai x9, x6, 4 srai x10, x7, 15 - - \ No newline at end of file + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_023.out b/tests/arch/riscv/instructions/test_riscv_instruction_023.out deleted file mode 100644 index 388f71930..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_023.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x30; ir[x5,t0]:0xaad4; ir[x6,t1]:0x11d7; ir[x7,t2]:0xffffdaf2; ir[x8,fp,s0]:0x2; ir[x9,s1]:0x1; ir[x10,a0]:0x554; ir[x11,a1]:0x2ab50; ir[x12,a2]:0x23ae; ir[x13,a3]:0xaf200000; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_023.s b/tests/arch/riscv/instructions/test_riscv_instruction_023.s index 0fcd4cba9..966b579d0 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_023.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_023.s @@ -17,5 +17,5 @@ main: sll x11, x5, x8 sll x12, x6, x9 sll x13, x7, x10 - - \ No newline at end of file + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_024.out b/tests/arch/riscv/instructions/test_riscv_instruction_024.out deleted file mode 100644 index 16aa3e8f5..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_024.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x30; ir[x4,tp]:0x1fff; ir[x5,t0]:0x2000; ir[x6,t1]:0x2001; ir[x7,t2]:0x2002; ir[x10,a0]:0x1; ir[x11,a1]:0x1; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_024.s b/tests/arch/riscv/instructions/test_riscv_instruction_024.s index ce6a1636a..bcaa66a29 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_024.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_024.s @@ -15,5 +15,5 @@ main: slt x9, x5, x5 slt x10, x5, x6 slt x11, x5, x7 - - \ No newline at end of file + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_025.out b/tests/arch/riscv/instructions/test_riscv_instruction_025.out deleted file mode 100644 index 16aa3e8f5..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_025.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x30; ir[x4,tp]:0x1fff; ir[x5,t0]:0x2000; ir[x6,t1]:0x2001; ir[x7,t2]:0x2002; ir[x10,a0]:0x1; ir[x11,a1]:0x1; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_025.s b/tests/arch/riscv/instructions/test_riscv_instruction_025.s index bb195955d..059c11d0b 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_025.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_025.s @@ -15,5 +15,5 @@ main: sltu x9, x5, x5 sltu x10, x5, x6 sltu x11, x5, x7 - - \ No newline at end of file + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_026.out b/tests/arch/riscv/instructions/test_riscv_instruction_026.out deleted file mode 100644 index 096e3c74a..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_026.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x34; ir[x5,t0]:0x22346; ir[x6,t1]:0x11d7; ir[x7,t2]:0xffffdaf2; ir[x8,fp,s0]:0x455; ir[x9,s1]:0x222; ir[x10,a0]:0xfff; ir[x11,a1]:0x22713; ir[x12,a2]:0x13f5; ir[x13,a3]:0xffffd50d; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_026.s b/tests/arch/riscv/instructions/test_riscv_instruction_026.s index a4a23438c..50ad86b15 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_026.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_026.s @@ -16,4 +16,5 @@ main: xor x11, x5, x8 xor x12, x6, x9 xor x13, x7, x10 - \ No newline at end of file + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_027.out b/tests/arch/riscv/instructions/test_riscv_instruction_027.out deleted file mode 100644 index 6f7aacc1f..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_027.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x30; ir[x5,t0]:0xaad4; ir[x6,t1]:0x11d7; ir[x7,t2]:0xffffdaf2; ir[x8,fp,s0]:0x2; ir[x9,s1]:0x1; ir[x10,a0]:0x554; ir[x11,a1]:0x2ab5; ir[x12,a2]:0x8eb; ir[x13,a3]:0xfff; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_027.s b/tests/arch/riscv/instructions/test_riscv_instruction_027.s index a4f9a6850..fa173b152 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_027.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_027.s @@ -17,5 +17,5 @@ main: srl x11, x5, x8 srl x12, x6, x9 srl x13, x7, x10 - - \ No newline at end of file + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_028.out b/tests/arch/riscv/instructions/test_riscv_instruction_028.out deleted file mode 100644 index 2e3bd4b04..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_028.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x30; ir[x5,t0]:0xaad4; ir[x6,t1]:0x11d7; ir[x7,t2]:0xffffdaf2; ir[x8,fp,s0]:0x2; ir[x9,s1]:0x1; ir[x10,a0]:0x3; ir[x11,a1]:0x2ab5; ir[x12,a2]:0x8eb; ir[x13,a3]:0xfffffb5e; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_028.s b/tests/arch/riscv/instructions/test_riscv_instruction_028.s index 6ee6c537d..fc827460c 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_028.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_028.s @@ -17,5 +17,5 @@ main: sra x11, x5, x8 sra x12, x6, x9 sra x13, x7, x10 - - \ No newline at end of file + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_029.out b/tests/arch/riscv/instructions/test_riscv_instruction_029.out deleted file mode 100644 index 24437a090..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_029.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x34; ir[x5,t0]:0x22346; ir[x6,t1]:0x11d7; ir[x7,t2]:0xffffdaf2; ir[x8,fp,s0]:0x455; ir[x9,s1]:0x222; ir[x10,a0]:0xfff; ir[x11,a1]:0x22757; ir[x12,a2]:0x13f7; ir[x13,a3]:0xffffdfff; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_029.s b/tests/arch/riscv/instructions/test_riscv_instruction_029.s index 0bb5ada10..75185d581 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_029.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_029.s @@ -17,4 +17,5 @@ main: or x11, x5, x8 or x12, x6, x9 or x13, x7, x10 - \ No newline at end of file + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_030.out b/tests/arch/riscv/instructions/test_riscv_instruction_030.out deleted file mode 100644 index 07949e23b..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_030.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x34; ir[x5,t0]:0x22346; ir[x6,t1]:0x11d7; ir[x7,t2]:0xffffdaf2; ir[x8,fp,s0]:0x455; ir[x9,s1]:0x222; ir[x10,a0]:0xfff; ir[x11,a1]:0x44; ir[x12,a2]:0x2; ir[x13,a3]:0xaf2; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_030.s b/tests/arch/riscv/instructions/test_riscv_instruction_030.s index af649328a..0a12873b1 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_030.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_030.s @@ -17,4 +17,5 @@ main: and x11, x5, x8 and x12, x6, x9 and x13, x7, x10 - \ No newline at end of file + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_031.out b/tests/arch/riscv/instructions/test_riscv_instruction_031.out deleted file mode 100644 index fa69ecb29..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_031.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x48; ir[x5,t0]:0x200000; ir[x6,t1]:0x200008; ir[x7,t2]:0x200010; ir[x8,fp,s0]:0x200028; ir[x17,a7]:0xa; fpr[f0,ft0]:0x404145A1CAC08312; fpr[f2,ft2]:0x4026E2D0E5604189; fpr[f10,fa0]:0x0000000007544FFB; memory[0x20002f]:0xFB; memory[0x20002e]:0x4F; memory[0x20002d]:0x54; memory[0x20002c]:0x07; memory[0x200027]:0x89; memory[0x200026]:0x41; memory[0x200025]:0x60; memory[0x200024]:0xE5; memory[0x200023]:0xD0; memory[0x200022]:0xE2; memory[0x200021]:0x26; memory[0x200020]:0x40; memory[0x20001f]:0x12; memory[0x20001e]:0x83; memory[0x20001d]:0xC0; memory[0x20001c]:0xCA; memory[0x20001b]:0xA1; memory[0x20001a]:0x45; memory[0x200019]:0x41; memory[0x200018]:0x40; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_032.out b/tests/arch/riscv/instructions/test_riscv_instruction_032.out deleted file mode 100644 index 3b389b284..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_032.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x24; ir[x5,t0]:0xaad4; ir[x6,t1]:0x11d7; ir[x7,t2]:0xffffdaf2; ir[x11,a1]:0x2ab50; ir[x12,a2]:0x23ae; ir[x13,a3]:0xed790000; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_032.s b/tests/arch/riscv/instructions/test_riscv_instruction_032.s index 3eb06ea4d..961877008 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_032.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_032.s @@ -13,5 +13,5 @@ main: slli x11, x5, 2 slli x12, x6, 1 slli x13, x7, 15 - - \ No newline at end of file + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_033.out b/tests/arch/riscv/instructions/test_riscv_instruction_033.out deleted file mode 100644 index 2457c5412..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_033.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x24; ir[x5,t0]:0xaad4; ir[x6,t1]:0x11d7; ir[x7,t2]:0xffffdaf2; ir[x8,fp,s0]:0x2ab5; ir[x9,s1]:0x8eb; ir[x10,a0]:0x1ffff; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_033.s b/tests/arch/riscv/instructions/test_riscv_instruction_033.s index b5ef81c57..f3d4b7a91 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_033.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_033.s @@ -13,5 +13,5 @@ main: srli x8, x5, 2 srli x9, x6, 1 srli x10, x7, 15 - - \ No newline at end of file + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_034.out b/tests/arch/riscv/instructions/test_riscv_instruction_034.out deleted file mode 100644 index 11914d179..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_034.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x20; ir[x5,t0]:0xa; ir[x6,t1]:0xd; ir[x7,t2]:0x2d; ir[x8,fp,s0]:0xfffffffe; ir[x9,s1]:0x82; ir[x10,a0]:0x249; ir[x11,a1]:0xffffffa6; ir[x12,a2]:0xffffffec; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_034.s b/tests/arch/riscv/instructions/test_riscv_instruction_034.s index 2febf9bb1..5f4dd8861 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_034.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_034.s @@ -14,4 +14,6 @@ main: mul x9, x5, x6 mul x10, x6, x7 mul x11, x7, x8 - mul x12, x8, x5 \ No newline at end of file + mul x12, x8, x5 + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_035.out b/tests/arch/riscv/instructions/test_riscv_instruction_035.out deleted file mode 100644 index 11914d179..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_035.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x20; ir[x5,t0]:0xa; ir[x6,t1]:0xd; ir[x7,t2]:0x2d; ir[x8,fp,s0]:0xfffffffe; ir[x9,s1]:0x82; ir[x10,a0]:0x249; ir[x11,a1]:0xffffffa6; ir[x12,a2]:0xffffffec; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_035.s b/tests/arch/riscv/instructions/test_riscv_instruction_035.s index 22d187c2e..ba7eadb3f 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_035.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_035.s @@ -14,4 +14,6 @@ main: mulh x9, x5, x6 mulh x10, x6, x7 mulh x11, x7, x8 - mulh x12, x8, x5 \ No newline at end of file + mulh x12, x8, x5 + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_036.out b/tests/arch/riscv/instructions/test_riscv_instruction_036.out deleted file mode 100644 index 11914d179..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_036.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x20; ir[x5,t0]:0xa; ir[x6,t1]:0xd; ir[x7,t2]:0x2d; ir[x8,fp,s0]:0xfffffffe; ir[x9,s1]:0x82; ir[x10,a0]:0x249; ir[x11,a1]:0xffffffa6; ir[x12,a2]:0xffffffec; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_036.s b/tests/arch/riscv/instructions/test_riscv_instruction_036.s index 21bd31725..8d8b115f9 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_036.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_036.s @@ -14,4 +14,6 @@ main: mulhsu x9, x5, x6 mulhsu x10, x6, x7 mulhsu x11, x7, x8 - mulhsu x12, x8, x5 \ No newline at end of file + mulhsu x12, x8, x5 + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_037.out b/tests/arch/riscv/instructions/test_riscv_instruction_037.out deleted file mode 100644 index 11914d179..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_037.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x20; ir[x5,t0]:0xa; ir[x6,t1]:0xd; ir[x7,t2]:0x2d; ir[x8,fp,s0]:0xfffffffe; ir[x9,s1]:0x82; ir[x10,a0]:0x249; ir[x11,a1]:0xffffffa6; ir[x12,a2]:0xffffffec; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_037.s b/tests/arch/riscv/instructions/test_riscv_instruction_037.s index d8aa6bcb8..f2e4855d8 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_037.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_037.s @@ -14,4 +14,6 @@ main: mulhu x9, x5, x6 mulhu x10, x6, x7 mulhu x11, x7, x8 - mulhu x12, x8, x5 \ No newline at end of file + mulhu x12, x8, x5 + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_038.out b/tests/arch/riscv/instructions/test_riscv_instruction_038.out deleted file mode 100644 index c4e091cd4..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_038.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x24; ir[x5,t0]:0x10; ir[x6,t1]:0x100; ir[x7,t2]:0xffffe000; ir[x8,fp,s0]:0x18; ir[x9,s1]:0xfffffe00; ir[x10,a0]:0x10; ir[x11,a1]:0xfffffeab; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_038.s b/tests/arch/riscv/instructions/test_riscv_instruction_038.s index 872c90619..c4dc3fa11 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_038.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_038.s @@ -14,4 +14,6 @@ main: div x9, x7, x5 div x10, x6, x5 div x11, x7, x8 - div x12, x8, x7 \ No newline at end of file + div x12, x8, x7 + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_039.out b/tests/arch/riscv/instructions/test_riscv_instruction_039.out deleted file mode 100644 index 8308a6c53..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_039.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x24; ir[x5,t0]:0x10; ir[x6,t1]:0x100; ir[x7,t2]:0xffffe000; ir[x8,fp,s0]:0x18; ir[x9,s1]:0xffffe00; ir[x10,a0]:0x10; ir[x11,a1]:0xaaaa955; ir[x12,a2]:0x5; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_039.s b/tests/arch/riscv/instructions/test_riscv_instruction_039.s index e3e35296c..73d502bcd 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_039.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_039.s @@ -14,4 +14,6 @@ main: divu x9, x7, x5 divu x10, x6, x5 divu x11, x7, x8 - divu x12, x8, x7 \ No newline at end of file + divu x12, x8, x7 + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_040.out b/tests/arch/riscv/instructions/test_riscv_instruction_040.out deleted file mode 100644 index a6c4184e4..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_040.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x24; ir[x5,t0]:0x10; ir[x6,t1]:0x100; ir[x7,t2]:0xffffe000; ir[x8,fp,s0]:0x18; ir[x11,a1]:0x8; ir[x12,a2]:0x18; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_040.s b/tests/arch/riscv/instructions/test_riscv_instruction_040.s index 1646350c8..ebc40381d 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_040.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_040.s @@ -14,4 +14,6 @@ main: rem x9, x7, x5 rem x10, x6, x5 rem x11, x7, x8 - rem x12, x8, x7 \ No newline at end of file + rem x12, x8, x7 + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_041.out b/tests/arch/riscv/instructions/test_riscv_instruction_041.out deleted file mode 100644 index a6c4184e4..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_041.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x24; ir[x5,t0]:0x10; ir[x6,t1]:0x100; ir[x7,t2]:0xffffe000; ir[x8,fp,s0]:0x18; ir[x11,a1]:0x8; ir[x12,a2]:0x18; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_041.s b/tests/arch/riscv/instructions/test_riscv_instruction_041.s index 8f0998d68..09ac24249 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_041.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_041.s @@ -14,4 +14,6 @@ main: remu x9, x7, x5 remu x10, x6, x5 remu x11, x7, x8 - remu x12, x8, x7 \ No newline at end of file + remu x12, x8, x7 + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_042.out b/tests/arch/riscv/instructions/test_riscv_instruction_042.out deleted file mode 100644 index d540a9815..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_042.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x24; ir[x5,t0]:0xb; ir[x6,t1]:0x22b; ir[x7,t2]:0x5; ir[x8,fp,s0]:0x21f; ir[x17,a7]:0xa; ir[x28,t3]:0x22; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_043.out b/tests/arch/riscv/instructions/test_riscv_instruction_043.out deleted file mode 100644 index d540a9815..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_043.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x24; ir[x5,t0]:0xb; ir[x6,t1]:0x22b; ir[x7,t2]:0x5; ir[x8,fp,s0]:0x21f; ir[x17,a7]:0xa; ir[x28,t3]:0x22; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_044.out b/tests/arch/riscv/instructions/test_riscv_instruction_044.out deleted file mode 100644 index d540a9815..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_044.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x24; ir[x5,t0]:0xb; ir[x6,t1]:0x22b; ir[x7,t2]:0x5; ir[x8,fp,s0]:0x21f; ir[x17,a7]:0xa; ir[x28,t3]:0x22; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_045.out b/tests/arch/riscv/instructions/test_riscv_instruction_045.out deleted file mode 100644 index 4b5977236..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_045.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x24; ir[x5,t0]:0xb; ir[x6,t1]:0xfffffdd5; ir[x7,t2]:0x5; ir[x8,fp,s0]:0xfffffde1; ir[x17,a7]:0xa; ir[x28,t3]:0x22; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_046.out b/tests/arch/riscv/instructions/test_riscv_instruction_046.out deleted file mode 100644 index 5c8366988..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_046.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x24; ir[x5,t0]:0x22346; ir[x6,t1]:0x11d7; ir[x7,t2]:0xffffdaf2; ir[x8,fp,s0]:0xfffddcb9; ir[x9,s1]:0xffffee28; ir[x10,a0]:0x250d; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_046.s b/tests/arch/riscv/instructions/test_riscv_instruction_046.s index 4d6501f09..df1b8b884 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_046.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_046.s @@ -13,4 +13,5 @@ main: not x8, x5 not x9, x6 not x10, x7 - \ No newline at end of file + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_047.out b/tests/arch/riscv/instructions/test_riscv_instruction_047.out deleted file mode 100644 index e899ec914..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_047.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x24; ir[x5,t0]:0x22346; ir[x6,t1]:0x11d7; ir[x7,t2]:0xffffdaf2; ir[x8,fp,s0]:0xfffddcba; ir[x9,s1]:0xffffee29; ir[x10,a0]:0x250e; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_047.s b/tests/arch/riscv/instructions/test_riscv_instruction_047.s index a2dafd5c6..1cdb1fb66 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_047.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_047.s @@ -13,4 +13,5 @@ main: neg x8, x5 neg x9, x6 neg x10, x7 - \ No newline at end of file + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_048.out b/tests/arch/riscv/instructions/test_riscv_instruction_048.out deleted file mode 100644 index 79919eac7..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_048.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x18; ir[x4,tp]:0x1; ir[x6,t1]:0xffffffff; ir[x9,s1]:0x1; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_048.s b/tests/arch/riscv/instructions/test_riscv_instruction_048.s index 9f2ef07ea..433c21075 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_048.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_048.s @@ -13,5 +13,5 @@ main: seqz x8, x4 seqz x9, x5 seqz x10, x6 - - \ No newline at end of file + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_049.out b/tests/arch/riscv/instructions/test_riscv_instruction_049.out deleted file mode 100644 index 468629a21..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_049.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x18; ir[x4,tp]:0x1; ir[x6,t1]:0xffffffff; ir[x8,fp,s0]:0x1; ir[x10,a0]:0x1; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_049.s b/tests/arch/riscv/instructions/test_riscv_instruction_049.s index 506fd2134..efac8dc73 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_049.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_049.s @@ -13,5 +13,5 @@ main: snez x8, x4 snez x9, x5 snez x10, x6 - - \ No newline at end of file + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_050.out b/tests/arch/riscv/instructions/test_riscv_instruction_050.out deleted file mode 100644 index 3fe384ae6..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_050.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x18; ir[x4,tp]:0x1; ir[x6,t1]:0xffffffff; ir[x8,fp,s0]:0x1; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_050.s b/tests/arch/riscv/instructions/test_riscv_instruction_050.s index 8a89e59bd..c6cbd74d1 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_050.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_050.s @@ -13,5 +13,5 @@ main: sgtz x8, x4 sgtz x9, x5 sgtz x10, x6 - - \ No newline at end of file + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_051.out b/tests/arch/riscv/instructions/test_riscv_instruction_051.out deleted file mode 100644 index e2fa0a4f7..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_051.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x18; ir[x4,tp]:0x1; ir[x6,t1]:0xffffffff; ir[x10,a0]:0x1; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_051.s b/tests/arch/riscv/instructions/test_riscv_instruction_051.s index 4f1efa007..4104e8ddb 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_051.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_051.s @@ -13,5 +13,5 @@ main: sltz x8, x4 sltz x9, x5 sltz x10, x6 - - \ No newline at end of file + + jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_052.out b/tests/arch/riscv/instructions/test_riscv_instruction_052.out deleted file mode 100644 index 2072776ab..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_052.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x68; ir[x5,t0]:0x200000; ir[x6,t1]:0x200008; ir[x7,t2]:0x200010; ir[x8,fp,s0]:0x200018; ir[x9,s1]:0x20001c; ir[x10,a0]:0x200020; ir[x17,a7]:0xa; fpr[f0,ft0]:0x408354FA6DEFC7A4; fpr[f2,ft2]:0x408C12C083126E98; fpr[f4,ft4]:0x40C35CC666666666; fpr[f6,ft6]:0x409354FA6DEFC7A4; fpr[f8,fs0]:0x409C12C083126E98; fpr[f10,fa0]:0x40D35CC666666666; fpr[f12,fa2]:0xffffffff42F73E9B; fpr[f14,fa4]:0xffffffff43E42C08; fpr[f16,fa6]:0xffffffffC5EC1466; fpr[f18,fs2]:0xffffffff4410FDD7; fpr[f20,fs4]:0xffffffffC5DDD1A6; fpr[f22,fs6]:0xffffffffC5E8376C; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_053.out b/tests/arch/riscv/instructions/test_riscv_instruction_053.out deleted file mode 100644 index 15fb6e89e..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_053.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x68; ir[x5,t0]:0x200000; ir[x6,t1]:0x200008; ir[x7,t2]:0x200010; ir[x8,fp,s0]:0x200018; ir[x9,s1]:0x20001c; ir[x10,a0]:0x200020; ir[x17,a7]:0xa; fpr[f0,ft0]:0x408354FA6DEFC7A4; fpr[f2,ft2]:0x408C12C083126E98; fpr[f4,ft4]:0x40C35CC666666666; fpr[f6,ft6]:0xC0717B8C2A454DE8; fpr[f8,fs0]:0xC0C19B9A5E353F7C; fpr[f10,fa0]:0x40C22776BF8769EC; fpr[f12,fa2]:0xffffffff42F73E9B; fpr[f14,fa4]:0xffffffff43E42C08; fpr[f16,fa6]:0xffffffffC5EC1466; fpr[f18,fs2]:0xffffffffC3A65C61; fpr[f20,fs4]:0xffffffff45FA5726; fpr[f22,fs6]:0xffffffffC5EFF160; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_054.out b/tests/arch/riscv/instructions/test_riscv_instruction_054.out deleted file mode 100644 index fe84e09e1..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_054.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x68; ir[x5,t0]:0x200000; ir[x6,t1]:0x200008; ir[x7,t2]:0x200010; ir[x8,fp,s0]:0x200018; ir[x9,s1]:0x20001c; ir[x10,a0]:0x200020; ir[x17,a7]:0xa; fpr[f0,ft0]:0x408354FA6DEFC7A4; fpr[f2,ft2]:0x408C12C083126E98; fpr[f4,ft4]:0x40C35CC666666666; fpr[f6,ft6]:0x41175B9619EB7E4E; fpr[f8,fs0]:0x4128A0DBE279DD3C; fpr[f10,fa0]:0x41976E712668F5C2; fpr[f12,fa2]:0xffffffff42F73E9B; fpr[f14,fa4]:0xffffffff43E42C08; fpr[f16,fa6]:0xffffffffC5EC1466; fpr[f18,fs2]:0xffffffff475C5E49; fpr[f20,fs4]:0xffffffffCA526AC6; fpr[f22,fs6]:0xffffffffC964016A; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_055.out b/tests/arch/riscv/instructions/test_riscv_instruction_055.out deleted file mode 100644 index 492f0cd5a..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_055.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x68; ir[x5,t0]:0x200000; ir[x6,t1]:0x200008; ir[x7,t2]:0x200010; ir[x8,fp,s0]:0x200018; ir[x9,s1]:0x20001c; ir[x10,a0]:0x200020; ir[x17,a7]:0xa; fpr[f0,ft0]:0x408354FA6DEFC7A4; fpr[f2,ft2]:0x408C12C083126E98; fpr[f4,ft4]:0x40C35CC666666666; fpr[f6,ft6]:0x3FF0000000000000; fpr[f8,fs0]:0x3FF0000000000000; fpr[f10,fa0]:0x3FF0000000000000; fpr[f12,fa2]:0xffffffff42F73E9B; fpr[f14,fa4]:0xffffffff43E42C08; fpr[f16,fa6]:0xffffffffC5EC1466; fpr[f18,fs2]:0xffffffff3E8AB307; fpr[f20,fs4]:0xffffffffBD776CD1; fpr[f22,fs6]:0xffffffffC2747094; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_056.out b/tests/arch/riscv/instructions/test_riscv_instruction_056.out deleted file mode 100644 index 3408223c1..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_056.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x68; ir[x5,t0]:0x200000; ir[x6,t1]:0x200008; ir[x7,t2]:0x200010; ir[x8,fp,s0]:0x200018; ir[x9,s1]:0x20001c; ir[x10,a0]:0x200020; ir[x17,a7]:0xa; fpr[f0,ft0]:0x408354FA6DEFC7A4; fpr[f2,ft2]:0x408C12C083126E98; fpr[f4,ft4]:0x40C35CC666666666; fpr[f6,ft6]:0x408354FA6DEFC7A4; fpr[f8,fs0]:0x408C12C083126E98; fpr[f10,fa0]:0x408354FA6DEFC7A4; fpr[f12,fa2]:0xffffffff42F73E9B; fpr[f14,fa4]:0xffffffff43E42C08; fpr[f16,fa6]:0xffffffffC5EC1466; fpr[f18,fs2]:0xffffffff42F73E9B; fpr[f20,fs4]:0xffffffffC5EC1466; fpr[f22,fs6]:0xffffffffC5EC1466; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_057.out b/tests/arch/riscv/instructions/test_riscv_instruction_057.out deleted file mode 100644 index 88886b8b8..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_057.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x68; ir[x5,t0]:0x200000; ir[x6,t1]:0x200008; ir[x7,t2]:0x200010; ir[x8,fp,s0]:0x200018; ir[x9,s1]:0x20001c; ir[x10,a0]:0x200020; ir[x17,a7]:0xa; fpr[f0,ft0]:0x408354FA6DEFC7A4; fpr[f2,ft2]:0x408C12C083126E98; fpr[f4,ft4]:0x40C35CC666666666; fpr[f6,ft6]:0x408C12C083126E98; fpr[f8,fs0]:0x40C35CC666666666; fpr[f10,fa0]:0x40C35CC666666666; fpr[f12,fa2]:0xffffffff42F73E9B; fpr[f14,fa4]:0xffffffff43E42C08; fpr[f16,fa6]:0xffffffffC5EC1466; fpr[f18,fs2]:0xffffffff43E42C08; fpr[f20,fs4]:0xffffffff43E42C08; fpr[f22,fs6]:0xffffffff42F73E9B; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_058.out b/tests/arch/riscv/instructions/test_riscv_instruction_058.out deleted file mode 100644 index 149d7c395..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_058.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x68; ir[x5,t0]:0x200000; ir[x6,t1]:0x200008; ir[x7,t2]:0x200010; ir[x8,fp,s0]:0x200018; ir[x9,s1]:0x20001c; ir[x10,a0]:0x200020; ir[x17,a7]:0xa; fpr[f0,ft0]:0x4070000000000000; fpr[f2,ft2]:0x40AB320000000000; fpr[f4,ft4]:0x40B5640000000000; fpr[f6,ft6]:0xffffffff42C60000; fpr[f8,fs0]:0xffffffff42B60000; fpr[f10,fa0]:0xffffffff42C00000; fpr[f12,fa2]:0xffffffff46192400; fpr[f14,fa4]:0xffffffff46016400; fpr[f16,fa6]:0xffffffff46100000; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_059.out b/tests/arch/riscv/instructions/test_riscv_instruction_059.out deleted file mode 100644 index d5d9b9daf..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_059.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x68; ir[x5,t0]:0x200000; ir[x6,t1]:0x200008; ir[x7,t2]:0x200010; ir[x8,fp,s0]:0x200018; ir[x9,s1]:0x20001c; ir[x10,a0]:0x200020; ir[x17,a7]:0xa; fpr[f0,ft0]:0x4070000000000000; fpr[f2,ft2]:0x40AB320000000000; fpr[f4,ft4]:0x40B5640000000000; fpr[f6,ft6]:0xffffffff4CB73CE3; fpr[f8,fs0]:0xffffffff4C82CFE9; fpr[f10,fa0]:0xffffffff4CA20480; fpr[f12,fa2]:0xffffffff46192400; fpr[f14,fa4]:0xffffffff46016400; fpr[f16,fa6]:0xffffffff46100000; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_060.out b/tests/arch/riscv/instructions/test_riscv_instruction_060.out deleted file mode 100644 index 061097777..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_060.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x68; ir[x5,t0]:0x200000; ir[x6,t1]:0x200008; ir[x7,t2]:0x200010; ir[x8,fp,s0]:0x200018; ir[x9,s1]:0x20001c; ir[x10,a0]:0x200020; ir[x17,a7]:0xa; fpr[f0,ft0]:0x4070000000000000; fpr[f2,ft2]:0x40AB320000000000; fpr[f4,ft4]:0x40B5640000000000; fpr[f6,ft6]:0xffffffff4CB73351; fpr[f8,fs0]:0xffffffff4C82C7D3; fpr[f10,fa0]:0xffffffff4CA1FB80; fpr[f12,fa2]:0xffffffff46192400; fpr[f14,fa4]:0xffffffff46016400; fpr[f16,fa6]:0xffffffff46100000; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_061.out b/tests/arch/riscv/instructions/test_riscv_instruction_061.out deleted file mode 100644 index 30306dda4..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_061.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x68; ir[x5,t0]:0x200000; ir[x6,t1]:0x200008; ir[x7,t2]:0x200010; ir[x8,fp,s0]:0x200018; ir[x9,s1]:0x20001c; ir[x10,a0]:0x200020; ir[x17,a7]:0xa; fpr[f0,ft0]:0x4070000000000000; fpr[f2,ft2]:0xC0AB320000000000; fpr[f4,ft4]:0x40B5640000000000; fpr[f6,ft6]:0x4070000000000000; fpr[f8,fs0]:0x40AB320000000000; fpr[f10,fa0]:0x40B5640000000000; fpr[f12,fa2]:0xffffffffC6192400; fpr[f14,fa4]:0xffffffff46016400; fpr[f16,fa6]:0xffffffffC6100000; fpr[f18,fs2]:0xffffffff46192400; fpr[f20,fs4]:0xffffffff46016400; fpr[f22,fs6]:0xffffffff46100000; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_062.out b/tests/arch/riscv/instructions/test_riscv_instruction_062.out deleted file mode 100644 index 074efd0ac..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_062.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x68; ir[x5,t0]:0x200000; ir[x6,t1]:0x200008; ir[x7,t2]:0x200010; ir[x8,fp,s0]:0x200018; ir[x9,s1]:0x20001c; ir[x10,a0]:0x200020; ir[x17,a7]:0xa; fpr[f0,ft0]:0x4070000000000000; fpr[f2,ft2]:0xC0AB320000000000; fpr[f4,ft4]:0x40B5640000000000; fpr[f6,ft6]:0xC070000000000000; fpr[f8,fs0]:0x40AB320000000000; fpr[f10,fa0]:0xC0B5640000000000; fpr[f12,fa2]:0xffffffffC6192400; fpr[f14,fa4]:0xffffffff46016400; fpr[f16,fa6]:0xffffffffC6100000; fpr[f18,fs2]:0xffffffff46192400; fpr[f20,fs4]:0xffffffffC6016400; fpr[f22,fs6]:0xffffffff46100000; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_063.out b/tests/arch/riscv/instructions/test_riscv_instruction_063.out deleted file mode 100644 index 24c2f0562..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_063.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x40; ir[x5,t0]:0x200000; ir[x6,t1]:0x200008; ir[x8,fp,s0]:0x200010; ir[x9,s1]:0x200014; ir[x11,a1]:0x1; ir[x17,a7]:0xa; fpr[f0,ft0]:0x4070000000000000; fpr[f2,ft2]:0x40AB320000000000; fpr[f12,fa2]:0xffffffff46192400; fpr[f14,fa4]:0xffffffff46192400; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_063.s b/tests/arch/riscv/instructions/test_riscv_instruction_063.s index c3b0ab67b..395757004 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_063.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_063.s @@ -6,26 +6,42 @@ .data a: .double 256.0 b: .double 3481.0 + c: .double NaN d: .float 9801.0 - e: .float 9801.0 + e: .float 10502.5 + f: .double NaN .text main: - la x5, a - la x6, b - la x8, d - la x9, e + la x5, a + la x6, b + la x7, c + la x8, d + la x9, e + la x10, f fld f0, 0(x5) fld f2, 0(x6) + fld f4, 0(x7) - feq.d x10, f0, f2 + feq.d x11, f0, f0 + feq.d x12, f2, f2 + feq.d x13, f0, f2 + feq.d x14, f2, f0 + feq.d x15, f0, f4 + feq.d x16, f4, f4 flw f12, 0(x8) flw f14, 0(x9) + flw f16, 0(x10) - feq.s x11, f12, f14 + feq.s x17, f12, f12 + feq.s x18, f14, f14 + feq.s x19, f12, f14 + feq.s x20, f14, f12 + feq.s x21, f12, f16 + feq.s x22, f16, f16 li a7, 10 ecall diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_064.out b/tests/arch/riscv/instructions/test_riscv_instruction_064.out deleted file mode 100644 index 96c1e52c8..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_064.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x40; ir[x5,t0]:0x200000; ir[x6,t1]:0x200008; ir[x8,fp,s0]:0x200010; ir[x9,s1]:0x200014; ir[x10,a0]:0x1; ir[x11,a1]:0x1; ir[x17,a7]:0xa; fpr[f0,ft0]:0x4070000000000000; fpr[f2,ft2]:0x40AB320000000000; fpr[f12,fa2]:0xffffffff46192400; fpr[f14,fa4]:0xffffffff46192400; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_064.s b/tests/arch/riscv/instructions/test_riscv_instruction_064.s index bc3634cf7..4edf15363 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_064.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_064.s @@ -6,26 +6,42 @@ .data a: .double 256.0 b: .double 3481.0 + c: .double NaN d: .float 9801.0 - e: .float 9801.0 + e: .float 10502.5 + f: .double NaN .text main: - la x5, a - la x6, b - la x8, d - la x9, e + la x5, a + la x6, b + la x7, c + la x8, d + la x9, e + la x10, f fld f0, 0(x5) fld f2, 0(x6) + fld f4, 0(x7) - fle.d x10, f0, f2 + fle.d x11, f0, f0 + fle.d x12, f2, f2 + fle.d x13, f0, f2 + fle.d x14, f2, f0 + fle.d x15, f0, f4 + fle.d x16, f4, f4 flw f12, 0(x8) flw f14, 0(x9) + flw f16, 0(x10) - fle.s x11, f12, f14 + fle.s x17, f12, f12 + fle.s x18, f14, f14 + fle.s x19, f12, f14 + fle.s x20, f14, f12 + fle.s x21, f12, f16 + fle.s x22, f16, f16 li a7, 10 ecall diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_065.out b/tests/arch/riscv/instructions/test_riscv_instruction_065.out deleted file mode 100644 index 626ebf364..000000000 --- a/tests/arch/riscv/instructions/test_riscv_instruction_065.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x40; ir[x5,t0]:0x200000; ir[x6,t1]:0x200008; ir[x8,fp,s0]:0x200010; ir[x9,s1]:0x200014; ir[x10,a0]:0x1; ir[x17,a7]:0xa; fpr[f0,ft0]:0x4070000000000000; fpr[f2,ft2]:0x40AB320000000000; fpr[f12,fa2]:0xffffffff46192400; fpr[f14,fa4]:0xffffffff46192400; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_065.s b/tests/arch/riscv/instructions/test_riscv_instruction_065.s index 43942b9b5..6f9a6b693 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_065.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_065.s @@ -6,26 +6,42 @@ .data a: .double 256.0 b: .double 3481.0 + c: .double NaN d: .float 9801.0 - e: .float 9801.0 + e: .float 10502.5 + f: .double NaN .text main: - la x5, a - la x6, b - la x8, d - la x9, e + la x5, a + la x6, b + la x7, c + la x8, d + la x9, e + la x10, f fld f0, 0(x5) fld f2, 0(x6) + fld f4, 0(x7) - flt.d x10, f0, f2 + flt.d x11, f0, f0 + flt.d x12, f2, f2 + flt.d x13, f0, f2 + flt.d x14, f2, f0 + flt.d x15, f0, f4 + flt.d x16, f4, f4 flw f12, 0(x8) flw f14, 0(x9) + flw f16, 0(x10) - flt.s x11, f12, f14 + flt.s x17, f12, f12 + flt.s x18, f14, f14 + flt.s x19, f12, f14 + flt.s x20, f14, f12 + flt.s x21, f12, f16 + flt.s x22, f16, f16 li a7, 10 ecall diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_001.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_001.out deleted file mode 100644 index ec02416fe..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_001.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x10,a0]:0x2; ir[x17,a7]:0xa; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_002.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_002.out deleted file mode 100644 index f63ccfd64..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_002.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x11,a1]:0x2; ir[x17,a7]:0xa; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_003.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_003.out deleted file mode 100644 index 1f2506910..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_003.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x12,a2]:0x2; ir[x17,a7]:0xa; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_004.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_004.out deleted file mode 100644 index 2078e8118..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_004.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x13,a3]:0x2; ir[x17,a7]:0xa; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_005.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_005.out deleted file mode 100644 index 661a7d162..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_005.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x14,a4]:0x2; ir[x17,a7]:0xa; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_006.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_006.out deleted file mode 100644 index 459d42467..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_006.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x15,a5]:0x2; ir[x17,a7]:0xa; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_007.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_007.out deleted file mode 100644 index 975dc033b..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_007.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x16,a6]:0x2; ir[x17,a7]:0xa; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_008.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_008.out deleted file mode 100644 index d41f24c40..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_008.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x17,a7]:0xa; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_009.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_009.out deleted file mode 100644 index b1f6ae203..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_009.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x14; ir[x1,ra]:0xc; ir[x5,t0]:0x2; ir[x10,a0]:0x5; ir[x17,a7]:0xa; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_010.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_010.out deleted file mode 100644 index 0bacf9fc3..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_010.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x14; ir[x1,ra]:0xc; ir[x6,t1]:0x2; ir[x10,a0]:0x5; ir[x17,a7]:0xa; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_011.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_011.out deleted file mode 100644 index dfb9e1353..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_011.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x14; ir[x1,ra]:0xc; ir[x7,t2]:0x2; ir[x10,a0]:0x5; ir[x17,a7]:0xa; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_012.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_012.out deleted file mode 100644 index 7589a33bc..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_012.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x14; ir[x1,ra]:0xc; ir[x10,a0]:0x5; ir[x17,a7]:0xa; ir[x28,t3]:0x2; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_013.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_013.out deleted file mode 100644 index ae29f2f30..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_013.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x14; ir[x1,ra]:0xc; ir[x10,a0]:0x5; ir[x17,a7]:0xa; ir[x29,t4]:0x2; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_014.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_014.out deleted file mode 100644 index 95447ea10..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_014.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x14; ir[x1,ra]:0xc; ir[x10,a0]:0x5; ir[x17,a7]:0xa; ir[x30,t5]:0x2; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_015.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_015.out deleted file mode 100644 index c376cd77f..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_015.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x14; ir[x1,ra]:0xc; ir[x10,a0]:0x5; ir[x17,a7]:0xa; ir[x31,t6]:0x2; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_016.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_016.out deleted file mode 100644 index 4c91bfdcb..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_016.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x8,fp,s0]:0x5; ir[x17,a7]:0xa; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_017.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_017.out deleted file mode 100644 index f57049ea3..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_017.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x9,s1]:0x2; ir[x17,a7]:0xa; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_017.s b/tests/arch/riscv/sentinel/test_riscv_sentinels_017.s index ed7294e8b..df5fbce1b 100644 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_017.s +++ b/tests/arch/riscv/sentinel/test_riscv_sentinels_017.s @@ -1,62 +1,34 @@ + # # ARCOS.INF.UC3M.ES # BY-NC-SA (https://creativecommons.org/licenses/by-nc-sa/4.0/deed.es) # -# BAD EXAMPLE: This code VIOLATES RISC-V parameter conventions -# DO NOT follow this pattern in real code! -# + .text main: - # Set up important values in saved registers - li s0, 100 # Important value that should be preserved - li s1, 200 # Another important value - li s2, 300 # Yet another important value - - # Pass parameters incorrectly - using saved registers instead of a0-a7 - li s3, 42 # WRONG: Should use a0 for first parameter - li s4, 84 # WRONG: Should use a1 for second parameter - - # Call function - caller expects s0-s4 to be unchanged after call - jal ra, bad_function - - # Try to use the values we set earlier - they will be corrupted! - add t0, s0, s1 # Expected: 100 + 200 = 300, but will be wrong - add t1, s2, s3 # Expected: 300 + 42 = 342, but will be wrong + li s1, 5 + jal ra, test + # exit li a7, 10 ecall - bad_function: - # WRONG: Create stack frame but don't save caller's saved registers + test: + # crear "stack frame" para ra, fp y una variable local addi sp, sp, -12 sw ra, 8(sp) sw fp, 4(sp) addi fp, sp, 4 - # VIOLATION 1: Destroy caller's saved registers without saving them - li s0, 999 # WRONG: Overwrites caller's s0 (was 100) - li s1, 888 # WRONG: Overwrites caller's s1 (was 200) - li s2, 777 # WRONG: Overwrites caller's s2 (was 300) - - # VIOLATION 2: Use saved registers for parameters instead of a0-a7 - # Should read parameters from a0, a1, etc. but using s3, s4 instead - add s0, s3, s4 # WRONG: Should use a0, a1 for parameters - - # VIOLATION 3: Don't set return value in a0 - # Function should return result in a0, but doesn't - - # VIOLATION 4: Use saved registers for local variables - li s1, 555 # WRONG: Should use temporary registers t0-t6 - li s2, 444 # WRONG: Should use temporary registers t0-t6 + li s1, 2 - b_efs: # WRONG: Restore stack but not the saved registers we corrupted - lw ra, 8(sp) + b_efs: lw ra, 8(sp) lw fp, 4(sp) addi sp, sp, 12 - # Return without setting a0 and with corrupted saved registers - jr ra + # return a7 + jr ra diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_018.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_018.out deleted file mode 100644 index a1e7af79f..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_018.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x17,a7]:0xa; ir[x18,s2]:0x2; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_019.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_019.out deleted file mode 100644 index aabace55c..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_019.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x17,a7]:0xa; ir[x19,s3]:0x2; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_020.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_020.out deleted file mode 100644 index 02498398f..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_020.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x17,a7]:0xa; ir[x20,s4]:0x2; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_021.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_021.out deleted file mode 100644 index 1add8318d..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_021.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x17,a7]:0xa; ir[x21,s5]:0x2; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_022.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_022.out deleted file mode 100644 index c7b7cf6a1..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_022.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x17,a7]:0xa; ir[x22,s6]:0x2; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_023.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_023.out deleted file mode 100644 index faad03f5f..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_023.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x17,a7]:0xa; ir[x23,s7]:0x2; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_024.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_024.out deleted file mode 100644 index 89404f49f..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_024.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x17,a7]:0xa; ir[x24,s8]:0x2; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_025.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_025.out deleted file mode 100644 index 79a87be11..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_025.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x17,a7]:0xa; ir[x25,s9]:0x2; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_026.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_026.out deleted file mode 100644 index d8033c781..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_026.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x17,a7]:0xa; ir[x26,s10]:0x2; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_027.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_027.out deleted file mode 100644 index 543a02c79..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_027.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x17,a7]:0xa; ir[x27,s11]:0x2; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_028.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_028.out deleted file mode 100644 index db9165564..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_028.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x108a; ir[x1,ra]:0x108a; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_029.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_029.out deleted file mode 100644 index bb60acf12..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_029.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Stack memory has not been released successfully -cr[PC]:0xc; ir[x1,ra]:0x4; ir[x2,sp]:0x10000000; ir[x17,a7]:0xa; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_029.s b/tests/arch/riscv/sentinel/test_riscv_sentinels_029.s index 3571d72ef..10622106f 100644 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_029.s +++ b/tests/arch/riscv/sentinel/test_riscv_sentinels_029.s @@ -19,7 +19,7 @@ test: # crear "stack frame" para ra, fp y una variable local - addi sp, sp, 4 + addi sp, sp, -4 # return a7 jr ra diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_030.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_030.out deleted file mode 100644 index d2239354a..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_030.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x3,gp]:0x5; ir[x17,a7]:0xa; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_031.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_031.out deleted file mode 100644 index 60cc8943a..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_031.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x4,tp]:0x5; ir[x17,a7]:0xa; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_032.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_032.out deleted file mode 100644 index a01e19525..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_032.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x9,s1]:0x2; ir[x17,a7]:0xa; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_033.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_033.out deleted file mode 100644 index 9a879306b..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_033.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x9,s1]:0x5; ir[x17,a7]:0xa; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_034.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_034.out deleted file mode 100644 index 06d1055ae..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_034.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x17,a7]:0xa; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_035.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_035.out deleted file mode 100644 index 06d1055ae..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_035.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x17,a7]:0xa; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_036.out b/tests/arch/riscv/sentinel/test_riscv_sentinels_036.out deleted file mode 100644 index 06d1055ae..000000000 --- a/tests/arch/riscv/sentinel/test_riscv_sentinels_036.out +++ /dev/null @@ -1,4 +0,0 @@ - -DANGER: Possible failure in the parameter passing convention -cr[PC]:0x10; ir[x1,ra]:0x8; ir[x17,a7]:0xa; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/sentinel/test_riscv_sentinels_037.s b/tests/arch/riscv/sentinel/test_riscv_sentinels_037.s new file mode 100644 index 000000000..2005eb5a3 --- /dev/null +++ b/tests/arch/riscv/sentinel/test_riscv_sentinels_037.s @@ -0,0 +1,62 @@ +# +# ARCOS.INF.UC3M.ES +# BY-NC-SA (https://creativecommons.org/licenses/by-nc-sa/4.0/deed.es) +# +# BAD EXAMPLE: This code VIOLATES RISC-V parameter conventions +# DO NOT follow this pattern in real code! +# + +.text + + main: + # Set up important values in saved registers + li s1, 100 # Important value that should be preserved + li s2, 200 # Another important value + li s3, 300 # Yet another important value + + # Pass parameters incorrectly - using saved registers instead of a0-a7 + li s4, 42 # WRONG: Should use a0 for first parameter + li s5, 84 # WRONG: Should use a1 for second parameter + + # Call function - caller expects s0-s5 to be unchanged after call + jal ra, bad_function + + # Try to use the values we set earlier - they will be corrupted! + add t0, s1, s2 # Expected: 100 + 200 = 300, but will be wrong + add t1, s3, s4 # Expected: 300 + 42 = 342, but will be wrong + + # exit + li a7, 10 + ecall + + + bad_function: + # WRONG: Create stack frame but don't save caller's saved registers + addi sp, sp, -12 + sw ra, 8(sp) + sw fp, 4(sp) + addi fp, sp, 4 + + # VIOLATION 1: Destroy caller's saved registers without saving them + li s1, 999 # WRONG: Overwrites caller's s0 (was 100) + li s2, 888 # WRONG: Overwrites caller's s1 (was 200) + li s3, 777 # WRONG: Overwrites caller's s2 (was 300) + + # VIOLATION 2: Use saved registers for parameters instead of a0-a7 + # Should read parameters from a0, a1, etc. but using s3, s4 instead + add s1, s4, s5 # WRONG: Should use a0, a1 for parameters + + # VIOLATION 3: Don't set return value in a0 + # Function should return result in a0, but doesn't + + # VIOLATION 4: Use saved registers for local variables + li s1, 555 # WRONG: Should use temporary registers t0-t6 + li s2, 444 # WRONG: Should use temporary registers t0-t6 + + b_efs: # WRONG: Restore stack but not the saved registers we corrupted + lw ra, 8(sp) + lw fp, 4(sp) + addi sp, sp, 12 + + # Return without setting a0 and with corrupted saved registers + jr ra diff --git a/tests/arch/riscv64/add_test.s b/tests/arch/riscv64/add_test.s index 44b3d91a0..502a5187e 100644 --- a/tests/arch/riscv64/add_test.s +++ b/tests/arch/riscv64/add_test.s @@ -4,3 +4,4 @@ main: li t1, 0xffffffffffffffff li t2, 0xffffffffffffffff add t0, t1, t2 +jr ra diff --git a/tests/arch/riscv64/addiw_test.s b/tests/arch/riscv64/addiw_test.s index 315b215ed..b4605d7f1 100644 --- a/tests/arch/riscv64/addiw_test.s +++ b/tests/arch/riscv64/addiw_test.s @@ -26,4 +26,5 @@ main: # Test 6: Negative overflow lui s10, 0x80000 # s10 = 0x80000000 - addiw s11, s10, -1 # Expected s11 = 0x7FFFFFFF \ No newline at end of file + addiw s11, s10, -1 # Expected s11 = 0x7FFFFFFF + jr ra diff --git a/tests/arch/riscv64/addw_test.s b/tests/arch/riscv64/addw_test.s index 5fd955f2e..36ab362d1 100644 --- a/tests/arch/riscv64/addw_test.s +++ b/tests/arch/riscv64/addw_test.s @@ -21,3 +21,4 @@ main: # Test 4: Edge case - max 32-bit signed + 0x10000 lui s8, 0x7FFF0 # s8 = 0x0000000007FFF0000 addw s9, s8, s1 # Expected s9 = 0x0000000080000000 + jr ra diff --git a/tests/arch/riscv64/beq_test.s b/tests/arch/riscv64/beq_test.s index 784f1f1f6..c27e12989 100644 --- a/tests/arch/riscv64/beq_test.s +++ b/tests/arch/riscv64/beq_test.s @@ -7,7 +7,8 @@ main: addi x0, x0, 0 # NOP addi x0, x0, 0 # NOP slli x7, x7, 0 # Increment x7 + jr ra target: addi x5, x5, 0x321 # Increment x5 # Exit with status code 0 - li a0, 0 \ No newline at end of file + li a0, 0 diff --git a/tests/arch/riscv64/load_test.s b/tests/arch/riscv64/load_test.s new file mode 100644 index 000000000..be379ab67 --- /dev/null +++ b/tests/arch/riscv64/load_test.s @@ -0,0 +1,97 @@ +# +# Creator (https://creatorsim.github.io/creator/) +# Example: Various data types in data segment and memory operations +# + +.data +.align 4 + +# Different data types in data segment +byte_values: .byte 0x42, 0x73, 0xA5, 0xFF + .byte -128, 127, 0, 55 + +.align 2 +half_values: .half 0x1234, 0x5678, 0xABCD, 0xEF12 + .half -32768, 32767, 0, 12345 + +.align 4 +word_values: .word 0x12345678, 0x87654321, 0xDEADBEEF, 0xCAFEBABE + .word -2147483648, 2147483647, 0, 1000000 + +.align 3 +double_values: .dword 0x123456789ABCDEF0, 0xFEDCBA9876543210 + .dword 0x0123456789ABCDEF, 0xAAAABBBBCCCCDDDD + +# String data +.align 1 +string_data: .string "Hello, RISC-V!" + .byte 0 # Null terminator + +# Float data (stored as word) +.align 4 +float_data: .word 0x40490FDB # Pi as IEEE 754 float (3.14159...) + .word 0x402DF854 # e as IEEE 754 float (2.71828...) + +# Target memory locations for writing +.align 4 +target_area: .space 256 # Reserve 256 bytes for writing data + +.text +main: + # Set up base addresses + la t0, byte_values + la t1, half_values + la t2, word_values + la t3, double_values + la t4, target_area + + # Copy and manipulate byte data + lb a0, 0(t0) # Load first byte (0x42) + sb a0, 0(t4) # Store to target area + lb a1, 3(t0) # Load fourth byte (0xFF) + sb a1, 1(t4) # Store to target area + 1 + + # Manipulate and store modified byte + addi a0, a0, 1 # Increment byte value + sb a0, 2(t4) # Store modified byte + + # Copy and manipulate half-word data + lh a0, 0(t1) # Load first half (0x1234) + sh a0, 4(t4) # Store to target area + 4 + lh a1, 6(t1) # Load fourth half (0xEF12) + sh a1, 6(t4) # Store to target area + 6 + + # Perform arithmetic on half-word and store + add a2, a0, a1 # Add two half-words + sh a2, 8(t4) # Store result + + # Copy and manipulate word data + lw a0, 0(t2) # Load first word (0x12345678) + sw a0, 12(t4) # Store to target area + 12 + lw a1, 12(t2) # Load fourth word (0xCAFEBABE) + sw a1, 16(t4) # Store to target area + 16 + + # Perform bitwise operations on words + xor a2, a0, a1 # XOR two words + sw a2, 20(t4) # Store XOR result + or a3, a0, a1 # OR two words + sw a3, 24(t4) # Store OR result + and a4, a0, a1 # AND two words + sw a4, 28(t4) # Store AND result + + # Copy double-word data (64-bit) + ld a0, 0(t3) # Load first double-word + sd a0, 32(t4) # Store to target area + 32 + ld a1, 8(t3) # Load second double-word + sd a1, 40(t4) # Store to target area + 40 + + # Create and store new data patterns + li a0, 0x55AA55AA # Create alternating bit pattern + sw a0, 48(t4) # Store pattern + + # Store sequential byte pattern + li a0, 0x01 # Start with 1 + li a1, 8 # Counter for 8 bytes + addi a2, t4, 52 # Start address for pattern + + jr ra \ No newline at end of file diff --git a/tests/arch/riscv64/lui_test.s b/tests/arch/riscv64/lui_test.s index 0142f3d41..51c91404e 100644 --- a/tests/arch/riscv64/lui_test.s +++ b/tests/arch/riscv64/lui_test.s @@ -1,13 +1,14 @@ .text main: # Test 1: Small positive immediate value - lui x1, 0x1 # Expected x1 = 0x0000000000001000 + lui x10, 0x1 # Expected x1 = 0x0000000000001000 # Test 2: Large positive immediate value - lui x2, 0xFFFFF # Expected x2 = 0x00000FFFFF000 + lui x11, 0xFFFFF # Expected x2 = 0x00000FFFFF000 # Test 3: Negative immediate value - lui x3, 0x80000 # Expected x3 = 0xFFFFFFFF80000000 + lui x12, 0x80000 # Expected x3 = 0xFFFFFFFF80000000 # Test 4: Edge case (maximum 20-bit value) - lui x4, 0x7FFFF # Expected x4 = 0x0007FFFF00000 \ No newline at end of file + lui x13, 0x7FFFF # Expected x4 = 0x0007FFFF00000 + jr ra diff --git a/tests/arch/riscv64/memory_test.s b/tests/arch/riscv64/memory_test.s index 199d7be8c..391eff96d 100644 --- a/tests/arch/riscv64/memory_test.s +++ b/tests/arch/riscv64/memory_test.s @@ -43,4 +43,5 @@ lbu x5, 0(x4) # Now we try to save it la x4, z5 -sb x5, 3(x4) \ No newline at end of file +sb x5, 3(x4) +jr ra diff --git a/tests/arch/riscv64/slli_test.s b/tests/arch/riscv64/slli_test.s index 547379d4e..073efdfc3 100644 --- a/tests/arch/riscv64/slli_test.s +++ b/tests/arch/riscv64/slli_test.s @@ -12,8 +12,7 @@ main: slli s4, s3, 20 # Expected: 0x100000 # Test 3: Shift negative - lui s5, 0xFFFFF # Load -1 - addi s5, s5, 0xFFF # s5 = -1 + addi s5, zero, -1 # Load -1 slli s6, s5, 32 # Expected: 0xFFFFFFFF00000000 # Test 4: Maximum shift (63) @@ -23,4 +22,5 @@ main: # Test 5: Large value shift lui s9, 0x7FFFF # Load large positive - slli s10, s9, 1 # Expected: 0xFFFE0000 \ No newline at end of file + slli s10, s9, 1 # Expected: 0xFFFE0000 + jr ra diff --git a/tests/arch/riscv64/slliw_test.s b/tests/arch/riscv64/slliw_test.s index be73706ac..18315dc82 100644 --- a/tests/arch/riscv64/slliw_test.s +++ b/tests/arch/riscv64/slliw_test.s @@ -9,4 +9,5 @@ li s0, 0xFFFFFFFF slliw s1, s0, 1 # Shift right by 1 - should become positive -srliw s2, s1, 1 \ No newline at end of file +srliw s2, s1, 1 +jr ra diff --git a/tests/arch/riscv64/sllw_test.s b/tests/arch/riscv64/sllw_test.s index dcd30cb7e..c2fba0f91 100644 --- a/tests/arch/riscv64/sllw_test.s +++ b/tests/arch/riscv64/sllw_test.s @@ -4,4 +4,5 @@ main: li s3, -35 # Load same test value slli s4, s3, 1 srli s5, s4, 1 - srai s6, s4, 1 \ No newline at end of file + srai s6, s4, 1 + jr ra diff --git a/tests/arch/riscv64/subw_test.s b/tests/arch/riscv64/subw_test.s index 0256e3fac..daa368583 100644 --- a/tests/arch/riscv64/subw_test.s +++ b/tests/arch/riscv64/subw_test.s @@ -16,4 +16,5 @@ main: # Test 4: Edge case - max 32-bit value lui s11, 0x7FFF0 # s11 = 0x7FFF0000 - subw s7, s11, x0 # Expected s7 = 0x7FFF0000 \ No newline at end of file + subw s7, s11, x0 # Expected s7 = 0x7FFF0000 + jr ra diff --git a/tests/unit/arch/mips/mips_example_002.test.mts b/tests/unit/arch/mips/mips_example_002.test.mts index 59632a9c2..f88a8a982 100644 --- a/tests/unit/arch/mips/mips_example_002.test.mts +++ b/tests/unit/arch/mips/mips_example_002.test.mts @@ -17,6 +17,7 @@ main: sub $t5, $t2, $t3 # 45-33 mul $t6, $t3, $t3 # 33*33 div $t7, $t6, $t1 # $t6/13 + jr $ra `; Deno.test( diff --git a/tests/unit/arch/mips/mips_example_003.test.mts b/tests/unit/arch/mips/mips_example_003.test.mts index 7a0fdc02f..0991ab236 100644 --- a/tests/unit/arch/mips/mips_example_003.test.mts +++ b/tests/unit/arch/mips/mips_example_003.test.mts @@ -36,6 +36,7 @@ main: sw $t3, w2 #$t3 -> Memory[w2] sb $t5, b2 #$t5 -> Memory[b2] sh $t7, h2 #$t7 -> Memory[h2] + jr $ra `; Deno.test( diff --git a/tests/unit/arch/mips/mips_example_005.test.mts b/tests/unit/arch/mips/mips_example_005.test.mts index a57a96587..4905cc6ab 100644 --- a/tests/unit/arch/mips/mips_example_005.test.mts +++ b/tests/unit/arch/mips/mips_example_005.test.mts @@ -19,6 +19,7 @@ const testAssembly = ` end_while: li $v0, 1 syscall #print_int + jr $ra `; Deno.test( From b67aeea6dac0ed535532a766b4e19de91a9407f8 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Mon, 16 Mar 2026 16:30:03 +0100 Subject: [PATCH 28/85] tests: use core event types enum instead of raw string --- tests/arch/arch_utils.mts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/arch/arch_utils.mts b/tests/arch/arch_utils.mts index 67e2464be..10200a4fc 100644 --- a/tests/arch/arch_utils.mts +++ b/tests/arch/arch_utils.mts @@ -8,7 +8,7 @@ import { } from "../unit/arch/simulator-test-utils.mts"; import { testKeyboard } from "../../src/core/executor/IO.mjs"; import * as creator from "../../src/core/core.mjs"; -import { coreEvents } from "../../src/core/events.mts"; +import { coreEvents, CoreEventTypes } from "../../src/core/events.mts"; import { logger } from "../../src/core/utils/creator_logger.mjs"; export const ARCH = { @@ -44,7 +44,7 @@ export function snapshot_tests( const errors = expect_error.has(file); // Record passing convention errors const sentinel_errors: { function: string; msg: string }[] = []; - coreEvents.on("sentinel-error", e => + coreEvents.on(CoreEventTypes.SENTINEL_ERROR, e => sentinel_errors.push({ function: e.functionName, msg: e.message, From 31ca1815afb2b8e3f085f6fb0da7888c6d8188fd Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Tue, 17 Mar 2026 11:58:50 +0100 Subject: [PATCH 29/85] fix(IO): fix floats/doubles being incorrectly written to registers --- src/core/capi/arch/riscv.mjs | 9 ++++++ src/core/executor/IO.mjs | 30 +++++++++++++++---- src/core/utils/float_bigint.mjs | 5 ---- .../syscalls/test_mips_syscall_007.s.snap | 25 ++++++++++++++++ .../syscalls/test_riscv_syscall_006.s.snap | 2 +- .../syscalls/test_riscv_syscall_007.s.snap | 24 +++++++++++++++ 6 files changed, 83 insertions(+), 12 deletions(-) create mode 100644 tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_007.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_007.s.snap diff --git a/src/core/capi/arch/riscv.mjs b/src/core/capi/arch/riscv.mjs index 27313cd2d..3b10f1114 100644 --- a/src/core/capi/arch/riscv.mjs +++ b/src/core/capi/arch/riscv.mjs @@ -227,4 +227,13 @@ export const ARCH = { NaNBoxed = BigInt(NaNBoxed); return NaNBoxed; }, + /** + * Writes a float32 to a register, using NaN boxing with float64 + * @param {number} value - The JavaScript number to write + * @param {string} regName - The base register name (must be even, e.g., "f0") + **/ + writeFloat(value, regName) { + const bits = this.toBigInt(value, "NaNBfloat32_64") + CAPI.REG.write(bits, regName) + } }; diff --git a/src/core/executor/IO.mjs b/src/core/executor/IO.mjs index b314bd499..3d6316ac7 100644 --- a/src/core/executor/IO.mjs +++ b/src/core/executor/IO.mjs @@ -119,11 +119,18 @@ export function kbd_read_float(keystroke, params) { document.app.$data.last_execution_mode_run = -1; } - const buffer = new ArrayBuffer(4); - const view = new DataView(buffer); - view.setFloat32(0,value, false); - const bits = view.getUint32(0, false); - writeRegister(BigInt(bits), params.indexComp, params.indexElem); + // If the current architecture has a write float specialization, use it. + // Otherwise, fallback to writing the bits directly + if (CAPI.ARCH.writeFloat !== undefined) { + const reg = architecture.components[params.indexComp].elements[params.indexElem] + CAPI.ARCH.writeFloat(value, reg.name[0]) + } else { + const buffer = new ArrayBuffer(4); + const view = new DataView(buffer); + view.setFloat32(0,value, false); + const bits = BigInt(view.getUint32(0, false)); + writeRegister(bits, params.indexComp, params.indexElem); + } return value; } @@ -146,7 +153,18 @@ export function kbd_read_double(keystroke, params) { document.app.$data.execution_mode_run = document.app.$data.last_execution_mode_run; document.app.$data.last_execution_mode_run = -1; } - writeRegister(value, params.indexComp, params.indexElem, "DFP-Reg"); + // If the current architecture has a write float specialization, use it. + // Otherwise, fallback to writing the bits directly + if (CAPI.ARCH.writeDouble !== undefined) { + const reg = architecture.components[params.indexComp].elements[params.indexElem] + CAPI.ARCH.writeDouble(value, reg.name[0]) + } else { + const buffer = new ArrayBuffer(8); + const view = new DataView(buffer); + view.setFloat64(0, value, false); + const bits = view.getBigUint64(0, false); + writeRegister(bits, params.indexComp, params.indexElem); + } return value; } diff --git a/src/core/utils/float_bigint.mjs b/src/core/utils/float_bigint.mjs index a4b022ead..08f523a04 100644 --- a/src/core/utils/float_bigint.mjs +++ b/src/core/utils/float_bigint.mjs @@ -47,11 +47,6 @@ export function bi_BigIntTofloat(big_int_value) { */ export function bi_BigIntTodouble(big_int_value) { const hex = big_int_value.toString(16).padStart(16, "0"); - // if the first 8 characters are 0, it's a 32-bit float, not a double - if (hex.substring(0, 8) === "00000000") { - return hex2float("0x" + hex.substring(8, 16)); - } - return hex2double("0x" + hex); } diff --git a/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_007.s.snap b/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_007.s.snap new file mode 100644 index 000000000..c1887bdcb --- /dev/null +++ b/tests/arch/__snapshots__/mips/correct/syscalls/test_mips_syscall_007.s.snap @@ -0,0 +1,25 @@ +export const snapshot = {}; + +snapshot[`mips/correct/syscalls/test_mips_syscall_007.s 1`] = ` +{ + display: "", + error: false, + keyboard: " 1.234567890123456", + memory: { + "0": 32, + "1": 2, + "11": 8, + "3": 7, + "7": 12, + "8": 3, + "9": 224, + }, + registers: { + "2,v0": "0x7", + "f0,FP0": "0x3ff3c0ca", + PC: "0xffffffff", + f1: "0x428c59f8", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_006.s.snap b/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_006.s.snap index 0f0971512..c2b1fe9c1 100644 --- a/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_006.s.snap +++ b/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_006.s.snap @@ -14,7 +14,7 @@ snapshot[`riscv/correct/syscalls/test_riscv_syscall_006.s 1`] = ` "7": 115, }, registers: { - "f10,fa0": "0x3f9e064b", + "f10,fa0": "0xffffffff3f9e064b", "x17,a7": "0x6", mtime: "0x3", pc: "0xfffffffe", diff --git a/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_007.s.snap b/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_007.s.snap new file mode 100644 index 000000000..8b10963ab --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/syscalls/test_riscv_syscall_007.s.snap @@ -0,0 +1,24 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/syscalls/test_riscv_syscall_007.s 1`] = ` +{ + display: "", + error: false, + keyboard: " 1.234567890123456", + memory: { + "1": 112, + "10": 128, + "11": 103, + "2": 8, + "3": 147, + "7": 115, + }, + registers: { + "f10,fa0": "0x3ff3c0ca428c59f8", + "x17,a7": "0x7", + mtime: "0x3", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; From f2946484a53301380e6299194824db483f146582 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Tue, 17 Mar 2026 14:43:33 +0100 Subject: [PATCH 30/85] fix(validation): add validation of memory accesses (alignment/segfaults) --- architecture/MIPS32.yml | 64 ++++++++++++++++-------- architecture/RISCV/RV32IMFD.yml | 61 +++++++++++++++-------- architecture/RISCV/RV64IMFD.yml | 86 +++++++++++++++++++++------------ architecture/RISCV/SRV32.yml | 78 +++++++++++++++++++----------- architecture/RISCV/SRV64.yml | 64 +++++++++++++++--------- src/core/capi/validation.mts | 12 ++++- 6 files changed, 243 insertions(+), 122 deletions(-) diff --git a/architecture/MIPS32.yml b/architecture/MIPS32.yml index fe560f84e..1f4ec4ed0 100644 --- a/architecture/MIPS32.yml +++ b/architecture/MIPS32.yml @@ -2363,7 +2363,7 @@ instructions: suffix: ) order: 3 definition: | - registers[reg1] = CAPI.MEM.read(registers[reg2]+val, 1, reg1); + registers[reg1] = CAPI.MEM.read(registers[reg2]+val, 1, reg1, false); - name: lbu template: Custom type: Memory access @@ -2399,7 +2399,7 @@ instructions: order: 2 space: false definition: | - registers[rt] = CAPI.MEM.read(registers[base]+off, 1, rt); + registers[rt] = CAPI.MEM.read(registers[base]+off, 1, rt, false); - name: ldc1 template: Custom type: Memory access @@ -2439,11 +2439,11 @@ instructions: postoperation: | CAPI.ARCH.writeDouble(doubleValue, ft); definition: | - if (CAPI.VALIDATION.isMisaligned(registers[base] + off, 'd')) { - CAPI.VALIDATION.raise('The memory must be aligned'); - } - let high = CAPI.MEM.read(registers[base] + off, 4); - let low = CAPI.MEM.read(registers[base] + off + 4n, 4, ft); + let addr = registers[base] + off; + if (CAPI.VALIDATION.isMisaligned(addr, 8)) + CAPI.VALIDATION.raise('The memory must be aligned'); + let high = CAPI.MEM.read(addr, 4, false); + let low = CAPI.MEM.read(addr + 4n, 4, ft, false); let doubleValue = CAPI.FP.uint2float64(Number(low), Number(high)); - name: lh template: Custom @@ -2480,7 +2480,10 @@ instructions: prefix: ($ suffix: ) definition: | - registers[reg1] = CAPI.MEM.read(registers[reg2]+val, 2, reg1); + let addr = registers[reg2] + val; + if (CAPI.VALIDATION.isMisaligned(addr, 2)) + CAPI.VALIDATION.raise('The memory must be aligned'); + registers[reg1] = CAPI.MEM.read(addr, 2, reg1, false); - name: lhu template: Custom type: Memory access @@ -2516,7 +2519,10 @@ instructions: order: 2 space: false definition: | - registers[rt] = CAPI.MEM.read(registers[base]+off, 2, rt); + let addr = registers[base] + off; + if (CAPI.VALIDATION.isMisaligned(addr, 2)) + CAPI.VALIDATION.raise('The memory must be aligned'); + registers[rt] = CAPI.MEM.read(addr, 2, rt, false); - name: lui template: Custom type: Other @@ -2580,7 +2586,10 @@ instructions: suffix: ) order: 3 definition: | - registers[reg1] = CAPI.MEM.read(registers[reg2]+val, 4, reg1); + let addr = registers[reg2] + val; + if (CAPI.VALIDATION.isMisaligned(addr, 4)) + CAPI.VALIDATION.raise('The memory must be aligned'); + registers[reg1] = CAPI.MEM.read(addr, 4, reg1, false); - name: lwc1 template: Custom type: Memory access @@ -2616,7 +2625,10 @@ instructions: order: 2 space: false definition: |- - registers[ft] = CAPI.MEM.read(registers[base]+off, 4, ft); + let addr = registers[base] + off; + if (CAPI.VALIDATION.isMisaligned(addr, 4)) + CAPI.VALIDATION.raise('The memory must be aligned'); + registers[ft] = CAPI.MEM.read(addr, 4, ft, false); - name: mfc1 template: Custom type: Transfer between registers @@ -3480,7 +3492,7 @@ instructions: stopbit: 0 order: 2 space: false - definition: "CAPI.MEM.write(registers[base]+off, 1, registers[rt], rt);" + definition: "CAPI.MEM.write(registers[base]+off, 1, registers[rt], rt, 'byte', false);" - name: sdc1 template: Custom type: Memory access @@ -3518,12 +3530,12 @@ instructions: preoperation: | let doubleValue = CAPI.ARCH.readDouble(ft); let parts = CAPI.FP.float642uint(doubleValue); + let value = (BigInt(parts[1]) << 32n) | BigInt(parts[0]) definition: | - if (CAPI.VALIDATION.isMisaligned(registers[base] + off, 'd')) { - CAPI.VALIDATION.raise('The memory must be aligned'); - } - CAPI.MEM.write(registers[base] + off, 4, BigInt(parts[1]), ft); - CAPI.MEM.write(registers[base] + off + 4n, 4, BigInt(parts[0])); + let addr = registers[base] + off; + if (CAPI.VALIDATION.isMisaligned(addr, 8)) + CAPI.VALIDATION.raise('The memory must be aligned'); + CAPI.MEM.write(addr, 8, value, ft, 'float64', false); - name: sh template: Custom type: Memory access @@ -3558,7 +3570,11 @@ instructions: stopbit: 0 order: 2 space: false - definition: "CAPI.MEM.write(registers[base]+off, 2, registers[rt], rt);" + definition: | + let addr = registers[base] + off; + if (CAPI.VALIDATION.isMisaligned(addr, 2)) + CAPI.VALIDATION.raise('The memory must be aligned'); + CAPI.MEM.write(addr, 2, registers[rt], rt, 'half', false); - name: sll template: Custom type: Arithmetic integer @@ -4144,7 +4160,11 @@ instructions: prefix: ($ suffix: ) order: 3 - definition: "CAPI.MEM.write(val+registers[reg2], 4, registers[reg1], reg1);" + definition: | + let addr = registers[reg2] + val; + if (CAPI.VALIDATION.isMisaligned(addr, 4)) + CAPI.VALIDATION.raise('The memory must be aligned'); + CAPI.MEM.write(addr, 4, registers[reg1], reg1, 'word', false); - name: swc1 template: Custom type: Memory access @@ -4179,7 +4199,11 @@ instructions: stopbit: 0 order: 2 space: false - definition: "CAPI.MEM.write(registers[base]+off, 4, registers[ft], ft);" + definition: | + let addr = registers[base] + off; + if (CAPI.VALIDATION.isMisaligned(addr, 4)) + CAPI.VALIDATION.raise('The memory must be aligned'); + CAPI.MEM.write(addr, 4, registers[ft], ft, 'float32', false); - name: syscall template: Custom type: Syscall diff --git a/architecture/RISCV/RV32IMFD.yml b/architecture/RISCV/RV32IMFD.yml index dc6ea9c8d..08cdfc14e 100644 --- a/architecture/RISCV/RV32IMFD.yml +++ b/architecture/RISCV/RV32IMFD.yml @@ -1616,7 +1616,7 @@ instructions: - field: funct3 value: "000" definition: | - registers[rd] = CAPI.MEM.read(imm + registers[rs1], 1, rd); + registers[rd] = CAPI.MEM.read(imm + registers[rs1], 1, rd, false); help: Loads a 8-bit value from memory and sign-extends this to XLEN bits before storing it in register rd. - name: lbu @@ -1629,8 +1629,8 @@ instructions: value: "100" definition: | let addr = CAPI.FP.int2uint(registers[rs1]) + imm; - registers[rd] = CAPI.MEM.read(addr, 1, rd); - registers[rd] = CAPI.FP.int2uint(registers[rd]); + let result = CAPI.MEM.read(addr, 1, rd, false); + registers[rd] = CAPI.FP.int2uint(result); help: Loads a 8-bit value from memory and zero-extends this to XLEN bits before storing it in register rd. - name: lh @@ -1642,7 +1642,10 @@ instructions: - field: funct3 value: "001" definition: | - registers[rd] = CAPI.MEM.read(imm + registers[rs1], 2, rd); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 2)) + CAPI.VALIDATION.raise('The memory must be aligned'); + registers[rd] = CAPI.MEM.read(addr, 2, rd, false); help: Loads a 16-bit value from memory and sign-extends this to XLEN bits before storing it in register rd. - name: lhu @@ -1654,9 +1657,11 @@ instructions: - field: funct3 value: "101" definition: | - let addr = CAPI.FP.int2uint(registers[rs1], 32) + imm; - registers[rd] = CAPI.MEM.read(addr, 2, rd); - registers[rd] = CAPI.FP.int2uint(registers[rd]); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 2)) + CAPI.VALIDATION.raise('The memory must be aligned'); + let result = CAPI.MEM.read(addr, 2, rd, false); + registers[rd] = CAPI.FP.int2uint(result); help: Loads a 16-bit value from memory and zero-extends this to XLEN bits before storing it in register rd. - name: lw @@ -1668,8 +1673,10 @@ instructions: - field: funct3 value: "010" definition: | - let addr = CAPI.FP.int2uint(registers[rs1], 32) + imm; - registers[rd] = CAPI.MEM.read(addr, 4, rd); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 4)) + CAPI.VALIDATION.raise('The memory must be aligned'); + registers[rd] = CAPI.MEM.read(addr, 4, rd, false); help: Loads a 32-bit value from memory and sign-extends this to XLEN bits before storing it in register rd. - name: ori @@ -1949,7 +1956,7 @@ instructions: - field: funct3 value: "000" definition: | - CAPI.MEM.write(registers[rs1] + imm, 1, BigInt.asUintN(8, registers[rs2]), rs2, 'byte'); + CAPI.MEM.write(registers[rs1] + imm, 1, BigInt.asUintN(8, registers[rs2]), rs2, 'byte', false); help: Store 8-bit, values from the low bits of register rs2 to memory. - name: sh @@ -1960,10 +1967,12 @@ instructions: - field: funct3 value: "001" definition: | - CAPI.MEM.write(imm + registers[rs1], 2, BigInt.asUintN(16, registers[rs2]), rs2, 'half'); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 2)) + CAPI.VALIDATION.raise('The memory must be aligned'); + CAPI.MEM.write(addr, 2, BigInt.asUintN(16, registers[rs2]), rs2, 'half', false); help: Store 16-bit, values from the low bits of register rs2 to memory. - # The check for the - name: sw template: S fields: @@ -1972,7 +1981,10 @@ instructions: - field: funct3 value: "010" definition: | - CAPI.MEM.write(imm + registers[rs1], 4, BigInt.asUintN(32, registers[rs2]), rs2, 'word'); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 4)) + CAPI.VALIDATION.raise('The memory must be aligned'); + CAPI.MEM.write(addr, 4, BigInt.asUintN(32, registers[rs2]), rs2, 'word', false); help: Store 32-bit, values from the low bits of register rs2 to memory. # U-type instructions @@ -2224,7 +2236,10 @@ instructions: - field: rd type: DFP-Reg definition: | - registers[rd] = CAPI.MEM.read(registers[rs1] + imm, 4, rd); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 4)) + CAPI.VALIDATION.raise('The memory must be aligned'); + registers[rd] = CAPI.MEM.read(addr, 4, rd, false); postoperation: | registers[rd] = CAPI.ARCH.NaNBox(registers[rd]); @@ -2855,7 +2870,10 @@ instructions: type: DFP-Reg definition: | let value = registers[rs2] & 0xFFFFFFFFn; - CAPI.MEM.write(registers[rs1] + imm, 4, value, rs2, 'float32'); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 4)) + CAPI.VALIDATION.raise('The memory must be aligned'); + CAPI.MEM.write(addr, 4, value, rs2, 'float32', false); help: Store a single-precision value from floating-point register rs2 to memory. D: @@ -2877,10 +2895,10 @@ instructions: - field: rd type: DFP-Reg definition: | - if (CAPI.VALIDATION.isMisaligned(registers[rs1] + imm, 'd')) { - CAPI.VALIDATION.raise('The memory must be aligned'); - } - registers[rd] = CAPI.MEM.read(registers[rs1] + imm, 8, rd); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 8)) + CAPI.VALIDATION.raise('The memory must be aligned'); + registers[rd] = CAPI.MEM.read(addr, 8, rd, false); help: Load a double-precision floating-point value from memory into floating-point register rd. - name: fadd.d @@ -3556,7 +3574,10 @@ instructions: - field: rs2 type: DFP-Reg definition: | - CAPI.MEM.write(registers[rs1] + imm, 8, registers[rs2], rs2, 'float64'); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 8)) + CAPI.VALIDATION.raise('The memory must be aligned'); + CAPI.MEM.write(addr, 8, registers[rs2], rs2, 'float64', false); help: Store a double-precision value from the floating-point registers to memory. diff --git a/architecture/RISCV/RV64IMFD.yml b/architecture/RISCV/RV64IMFD.yml index a87bb6f19..0a512a887 100644 --- a/architecture/RISCV/RV64IMFD.yml +++ b/architecture/RISCV/RV64IMFD.yml @@ -1634,7 +1634,7 @@ instructions: - field: funct3 value: "000" definition: | - registers[rd] = CAPI.MEM.read(imm + registers[rs1], 1, rd); + registers[rd] = CAPI.MEM.read(imm + registers[rs1], 1, rd, false); help: Loads a 8-bit value from memory and sign-extends this to XLEN bits before storing it in register rd. - name: lbu @@ -1647,8 +1647,8 @@ instructions: value: "100" definition: | let addr = CAPI.FP.int2uint(registers[rs1]) + imm; - registers[rd] = CAPI.MEM.read(addr, 1, rd); - registers[rd] = CAPI.FP.int2uint(registers[rd]); + let result = CAPI.MEM.read(addr, 1, rd, false); + registers[rd] = CAPI.FP.int2uint(result); help: Loads a 8-bit value from memory and zero-extends this to XLEN bits before storing it in register rd. - name: lh @@ -1660,7 +1660,10 @@ instructions: - field: funct3 value: "001" definition: | - registers[rd] = CAPI.MEM.read(imm + registers[rs1], 2, rd); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 2)) + CAPI.VALIDATION.raise('The memory must be aligned'); + registers[rd] = CAPI.MEM.read(addr, 2, rd, false); help: Loads a 16-bit value from memory and sign-extends this to XLEN bits before storing it in register rd. - name: lhu @@ -1672,9 +1675,11 @@ instructions: - field: funct3 value: "101" definition: | - let addr = CAPI.FP.int2uint(registers[rs1], 32) + imm; - registers[rd] = CAPI.MEM.read(addr, 2, rd); - registers[rd] = CAPI.FP.int2uint(registers[rd]); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 2)) + CAPI.VALIDATION.raise('The memory must be aligned'); + let result = CAPI.MEM.read(addr, 2, rd, false); + registers[rd] = CAPI.FP.int2uint(result); help: Loads a 16-bit value from memory and zero-extends this to XLEN bits before storing it in register rd. - name: lw @@ -1686,8 +1691,10 @@ instructions: - field: funct3 value: "010" definition: | - let addr = CAPI.FP.int2uint(registers[rs1], 32) + imm; - registers[rd] = CAPI.MEM.read(addr, 4, rd); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 4)) + CAPI.VALIDATION.raise('The memory must be aligned'); + registers[rd] = CAPI.MEM.read(addr, 4, rd, false); help: Loads a 32-bit value from memory and sign-extends this to XLEN bits before storing it in register rd. - name: lwu @@ -1699,9 +1706,11 @@ instructions: - field: funct3 value: "110" definition: | - var addr = CAPI.FP.int2uint(registers[rs1]) + imm; - registers[rd] = CAPI.MEM.read(addr, 4, rd); - registers[rd] = CAPI.FP.int2uint(registers[rd]); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 4)) + CAPI.VALIDATION.raise('The memory must be aligned'); + result = CAPI.MEM.read(addr, 4, rd, false); + registers[rd] = CAPI.FP.int2uint(result); help: Loads a 32-bit value from memory and zero-extends this to 64 bits before storing it in register rd. - name: ld @@ -1713,8 +1722,10 @@ instructions: - field: funct3 value: "011" definition: | - let addr = CAPI.FP.int2uint(registers[rs1]) + imm; - registers[rd] = CAPI.MEM.read(addr, 8, rd); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 8)) + CAPI.VALIDATION.raise('The memory must be aligned'); + registers[rd] = CAPI.MEM.read(addr, 8, rd, false); help: Loads a 64-bit value from memory into register rd for RV64I. - name: ori @@ -2134,7 +2145,7 @@ instructions: - field: funct3 value: "000" definition: | - CAPI.MEM.write(registers[rs1] + imm, 1, BigInt.asUintN(8, registers[rs2]), rs2, 'byte'); + CAPI.MEM.write(registers[rs1] + imm, 1, BigInt.asUintN(8, registers[rs2]), rs2, 'byte', false); help: Store 8-bit, values from the low bits of register rs2 to memory. - name: sh @@ -2145,7 +2156,10 @@ instructions: - field: funct3 value: "001" definition: | - CAPI.MEM.write(imm + registers[rs1], 2, BigInt.asUintN(16, registers[rs2]), rs2, 'half'); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 2)) + CAPI.VALIDATION.raise('The memory must be aligned'); + CAPI.MEM.write(addr, 2, BigInt.asUintN(16, registers[rs2]), rs2, 'half', false); help: Store 16-bit, values from the low bits of register rs2 to memory. # The check for the @@ -2157,7 +2171,10 @@ instructions: - field: funct3 value: "010" definition: | - CAPI.MEM.write(imm + registers[rs1], 4, BigInt.asUintN(32, registers[rs2]), rs2, 'word'); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 4)) + CAPI.VALIDATION.raise('The memory must be aligned'); + CAPI.MEM.write(addr, 4, BigInt.asUintN(32, registers[rs2]), rs2, 'word', false); help: Store 32-bit, values from the low bits of register rs2 to memory. - name: sd @@ -2168,12 +2185,16 @@ instructions: - field: funct3 value: "011" definition: | + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 8)) + CAPI.VALIDATION.raise('The memory must be aligned'); CAPI.MEM.write( - imm + registers[rs1], + addr, 8, BigInt.asUintN(64, registers[rs2]), rs2, - "double", + "float64", + false, ); help: Loads a 64-bit value from memory into register rd for RV64I. @@ -2425,7 +2446,10 @@ instructions: - field: rd type: SFP-Reg definition: | - registers[rd] = CAPI.MEM.read(registers[rs1] + imm, 4, rd); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 4)) + CAPI.VALIDATION.raise('The memory must be aligned'); + registers[rd] = CAPI.MEM.read(addr, 4, rd, false); postoperation: | registers[rd] = CAPI.ARCH.NaNBox(registers[rd]); help: Load a single-precision floating-point value from memory into floating-point register rd. @@ -3052,7 +3076,10 @@ instructions: type: SFP-Reg definition: | let value = registers[rs2] & 0xFFFFFFFFn; - CAPI.MEM.write(registers[rs1] + imm, 4, value, rs2, 'float32'); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 4)) + CAPI.VALIDATION.raise('The memory must be aligned'); + CAPI.MEM.write(addr, 4, value, rs2, 'float32', false); help: Store a single-precision value from floating-point register rs2 to memory. D: @@ -3074,10 +3101,10 @@ instructions: - field: rd type: DFP-Reg definition: | - if (CAPI.VALIDATION.isMisaligned(registers[rs1] + imm, 'd')) { - CAPI.VALIDATION.raise('The memory must be aligned'); - } - registers[rd] = CAPI.MEM.read(registers[rs1] + imm, 8, rd); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 8)) + CAPI.VALIDATION.raise('The memory must be aligned'); + registers[rd] = CAPI.MEM.read(8, 8, rd, false); help: Load a double-precision floating-point value from memory into floating-point register rd. - name: fadd.d @@ -3751,11 +3778,10 @@ instructions: - field: rs2 type: DFP-Reg definition: | - let val = BigInt("0x" + CAPI.FP.split_double(registers[rs2], 0)); - CAPI.MEM.write(registers[rs1] + imm, 4, val, rs2); - val = BigInt("0x" + CAPI.FP.split_double(registers[rs2], 1)); - CAPI.MEM.write(registers[rs1] + imm + 4n, 4, val, rs2); - CAPI.MEM.addHint(registers[rs1] + imm, "float64", 64); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 8)) + CAPI.VALIDATION.raise('The memory must be aligned'); + CAPI.MEM.write(addr, 8, registers[rs2], rs2, 'float64', false); help: Store a double-precision value from the floating-point registers to memory. diff --git a/architecture/RISCV/SRV32.yml b/architecture/RISCV/SRV32.yml index 39758f959..9bf8ef08d 100644 --- a/architecture/RISCV/SRV32.yml +++ b/architecture/RISCV/SRV32.yml @@ -2176,7 +2176,7 @@ instructions: - field: funct3 value: "000" definition: | - registers[rd] = CAPI.MEM.read(imm + registers[rs1], 1, rd); + registers[rd] = CAPI.MEM.read(imm + registers[rs1], 1, rd, false); help: Loads a 8-bit value from memory and sign-extends this to XLEN bits before storing it in register rd. - name: lbu @@ -2190,8 +2190,8 @@ instructions: value: "100" definition: | let addr = CAPI.FP.int2uint(registers[rs1]) + imm; - registers[rd] = CAPI.MEM.read(addr, 1, rd); - registers[rd] = CAPI.FP.int2uint(registers[rd]); + let result = CAPI.MEM.read(addr, 1, rd, false); + registers[rd] = CAPI.FP.int2uint(result); help: Loads a 8-bit value from memory and zero-extends this to XLEN bits before storing it in register rd. - name: lh extension: I @@ -2203,7 +2203,10 @@ instructions: - field: funct3 value: "001" definition: | - registers[rd] = CAPI.MEM.read(imm + registers[rs1], 2, rd); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 2)) + CAPI.VALIDATION.raise('The memory must be aligned'); + registers[rd] = CAPI.MEM.read(addr, 2, rd, false); help: Loads a 16-bit value from memory and sign-extends this to XLEN bits before storing it in register rd. - name: lhu @@ -2216,9 +2219,11 @@ instructions: - field: funct3 value: "101" definition: | - let addr = CAPI.FP.int2uint(registers[rs1], 32) + imm; - registers[rd] = CAPI.MEM.read(addr, 2, rd); - registers[rd] = CAPI.FP.int2uint(registers[rd]); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 2)) + CAPI.VALIDATION.raise('The memory must be aligned'); + let result = CAPI.MEM.read(addr, 2, rd, false); + registers[rd] = CAPI.FP.int2uint(result); help: Loads a 16-bit value from memory and zero-extends this to XLEN bits before storing it in register rd. - name: lw extension: I @@ -2230,8 +2235,10 @@ instructions: - field: funct3 value: "010" definition: | - let addr = CAPI.FP.int2uint(registers[rs1], 32) + imm; - registers[rd] = CAPI.MEM.read(addr, 4, rd); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 4)) + CAPI.VALIDATION.raise('The memory must be aligned'); + registers[rd] = CAPI.MEM.read(addr, 4, rd, false); help: Loads a 32-bit value from memory and sign-extends this to XLEN bits before storing it in register rd. - name: ld extension: D @@ -2243,8 +2250,10 @@ instructions: - field: funct3 value: "011" definition: | - let addr = CAPI.FP.int2uint(registers[rs1]) + imm; - registers[rd] = CAPI.MEM.read(addr, 8, rd); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 8)) + CAPI.VALIDATION.raise('The memory must be aligned'); + registers[rd] = CAPI.MEM.read(addr, 8, rd, false); help: Loads a 64-bit value from memory into register rd for RV64I. - name: ori extension: I @@ -2503,7 +2512,7 @@ instructions: - field: funct3 value: "000" definition: | - CAPI.MEM.write(registers[rs1] + imm, 1, BigInt.asUintN(8, registers[rs2]), rs2, 'byte'); + CAPI.MEM.write(registers[rs1] + imm, 1, BigInt.asUintN(8, registers[rs2]), rs2, 'byte', false); help: Store 8-bit, values from the low bits of register rs2 to memory. - name: sh @@ -2515,7 +2524,10 @@ instructions: - field: funct3 value: "001" definition: | - CAPI.MEM.write(imm + registers[rs1], 2, BigInt.asUintN(16, registers[rs2]), rs2, 'half'); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 2)) + CAPI.VALIDATION.raise('The memory must be aligned'); + CAPI.MEM.write(addr, 2, BigInt.asUintN(16, registers[rs2]), rs2, 'half', false); help: Store 16-bit, values from the low bits of register rs2 to memory. - name: sw @@ -2527,7 +2539,10 @@ instructions: - field: funct3 value: "010" definition: | - CAPI.MEM.write(imm + registers[rs1], 4, BigInt.asUintN(32, registers[rs2]), rs2, 'word'); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 4)) + CAPI.VALIDATION.raise('The memory must be aligned'); + CAPI.MEM.write(addr, 4, BigInt.asUintN(32, registers[rs2]), rs2, 'word', false); help: Store 32-bit, values from the low bits of register rs2 to memory. @@ -2540,12 +2555,16 @@ instructions: - field: funct3 value: "011" definition: | + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 8)) + CAPI.VALIDATION.raise('The memory must be aligned'); CAPI.MEM.write( - imm + registers[rs1], + addr, 8, BigInt.asUintN(64, registers[rs2]), rs2, - "double", + "float64", + false, ); help: Loads a 64-bit value from memory into register rd for RV64I. @@ -2782,7 +2801,10 @@ instructions: - field: rd type: DFP-Reg definition: | - registers[rd] = CAPI.MEM.read(registers[rs1] + imm, 4, rd); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 4)) + CAPI.VALIDATION.raise('The memory must be aligned'); + registers[rd] = CAPI.MEM.read(addr, 4, rd, false); postoperation: | registers[rd] = CAPI.ARCH.NaNBox(registers[rd]); @@ -3434,7 +3456,10 @@ instructions: type: DFP-Reg definition: | let value = registers[rs2] & 0xFFFFFFFFn; - CAPI.MEM.write(registers[rs1] + imm, 4, value, rs2, 'float32'); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 4)) + CAPI.VALIDATION.raise('The memory must be aligned'); + CAPI.MEM.write(addr, 4, value, rs2, 'float32', false); help: Store a single-precision value from floating-point register rs2 to memory. D: - name: fld @@ -3449,10 +3474,10 @@ instructions: - field: rd type: DFP-Reg definition: | - if (CAPI.VALIDATION.isMisaligned(registers[rs1] + imm, 'd')) { - CAPI.VALIDATION.raise('The memory must be aligned'); - } - registers[rd] = CAPI.MEM.read(registers[rs1] + imm, 8, rd); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 8)) + CAPI.VALIDATION.raise('The memory must be aligned'); + registers[rd] = CAPI.MEM.read(addr, 8, rd, false); help: Load a double-precision floating-point value from memory into floating-point register rd. - name: fadd.d extension: D @@ -4147,11 +4172,10 @@ instructions: - field: rs2 type: DFP-Reg definition: | - let val = BigInt("0x" + CAPI.FP.split_double(registers[rs2], 0)); - CAPI.MEM.write(registers[rs1] + imm, 4, val, rs2); - val = BigInt("0x" + CAPI.FP.split_double(registers[rs2], 1)); - CAPI.MEM.write(registers[rs1] + imm + 4n, 4, val, rs2); - CAPI.MEM.addHint(registers[rs1] + imm, "float64", 64); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 8)) + CAPI.VALIDATION.raise('The memory must be aligned'); + CAPI.MEM.write(addr, 8, registers[rs2], rs2, 'float64', false); help: Store a double-precision value from the floating-point registers to memory. Zifencei: - name: fence.i diff --git a/architecture/RISCV/SRV64.yml b/architecture/RISCV/SRV64.yml index e6d6813a7..49b890cbf 100644 --- a/architecture/RISCV/SRV64.yml +++ b/architecture/RISCV/SRV64.yml @@ -2187,7 +2187,7 @@ instructions: - field: funct3 value: "000" definition: | - registers[rd] = CAPI.MEM.read(imm + registers[rs1], 1, rd); + registers[rd] = CAPI.MEM.read(imm + registers[rs1], 1, rd, false); help: Loads a 8-bit value from memory and sign-extends this to XLEN bits before storing it in register rd. - name: lbu @@ -2201,8 +2201,8 @@ instructions: value: "100" definition: | let addr = CAPI.FP.int2uint(registers[rs1]) + imm; - registers[rd] = CAPI.MEM.read(addr, 1, rd); - registers[rd] = CAPI.FP.int2uint(registers[rd]); + let result = CAPI.MEM.read(addr, 1, rd, false); + registers[rd] = CAPI.FP.int2uint(result); help: Loads a 8-bit value from memory and zero-extends this to XLEN bits before storing it in register rd. - name: lh extension: I @@ -2214,7 +2214,10 @@ instructions: - field: funct3 value: "001" definition: | - registers[rd] = CAPI.MEM.read(imm + registers[rs1], 2, rd); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 2)) + CAPI.VALIDATION.raise('The memory must be aligned'); + registers[rd] = CAPI.MEM.read(addr, 2, rd, false); help: Loads a 16-bit value from memory and sign-extends this to XLEN bits before storing it in register rd. - name: lhu @@ -2227,9 +2230,11 @@ instructions: - field: funct3 value: "101" definition: | - let addr = CAPI.FP.int2uint(registers[rs1], 32) + imm; - registers[rd] = CAPI.MEM.read(addr, 2, rd); - registers[rd] = CAPI.FP.int2uint(registers[rd]); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 2)) + CAPI.VALIDATION.raise('The memory must be aligned'); + let result = CAPI.MEM.read(addr, 2, rd, false); + registers[rd] = CAPI.FP.int2uint(result); help: Loads a 16-bit value from memory and zero-extends this to XLEN bits before storing it in register rd. - name: lw extension: I @@ -2241,8 +2246,10 @@ instructions: - field: funct3 value: "010" definition: | - let addr = CAPI.FP.int2uint(registers[rs1], 32) + imm; - registers[rd] = CAPI.MEM.read(addr, 4, rd); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 4)) + CAPI.VALIDATION.raise('The memory must be aligned'); + registers[rd] = CAPI.MEM.read(addr, 4, rd, false); help: Loads a 32-bit value from memory and sign-extends this to XLEN bits before storing it in register rd. - name: ori extension: I @@ -2501,7 +2508,7 @@ instructions: - field: funct3 value: "000" definition: | - CAPI.MEM.write(registers[rs1] + imm, 1, BigInt.asUintN(8, registers[rs2]), rs2, 'byte'); + CAPI.MEM.write(registers[rs1] + imm, 1, BigInt.asUintN(8, registers[rs2]), rs2, 'byte', false); help: Store 8-bit, values from the low bits of register rs2 to memory. - name: sh @@ -2513,7 +2520,10 @@ instructions: - field: funct3 value: "001" definition: | - CAPI.MEM.write(imm + registers[rs1], 2, BigInt.asUintN(16, registers[rs2]), rs2, 'half'); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 2)) + CAPI.VALIDATION.raise('The memory must be aligned'); + CAPI.MEM.write(addr, 2, BigInt.asUintN(16, registers[rs2]), rs2, 'half', false); help: Store 16-bit, values from the low bits of register rs2 to memory. - name: sw @@ -2525,7 +2535,10 @@ instructions: - field: funct3 value: "010" definition: | - CAPI.MEM.write(imm + registers[rs1], 4, BigInt.asUintN(32, registers[rs2]), rs2, 'word'); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 4)) + CAPI.VALIDATION.raise('The memory must be aligned'); + CAPI.MEM.write(addr, 4, BigInt.asUintN(32, registers[rs2]), rs2, 'word', false); help: Store 32-bit, values from the low bits of register rs2 to memory. - name: auipc @@ -2776,7 +2789,10 @@ instructions: - field: rd type: DFP-Reg definition: | - registers[rd] = CAPI.MEM.read(registers[rs1] + imm, 4, rd); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 4)) + CAPI.VALIDATION.raise('The memory must be aligned'); + registers[rd] = CAPI.MEM.read(addr, 4, rd, false); postoperation: | registers[rd] = CAPI.ARCH.NaNBox(registers[rd]); @@ -3428,7 +3444,10 @@ instructions: type: DFP-Reg definition: | let value = registers[rs2] & 0xFFFFFFFFn; - CAPI.MEM.write(registers[rs1] + imm, 4, value, rs2, 'float32'); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 4)) + CAPI.VALIDATION.raise('The memory must be aligned'); + CAPI.MEM.write(addr, 4, value, rs2, 'float32', false); help: Store a single-precision value from floating-point register rs2 to memory. D: - name: fld @@ -3443,10 +3462,10 @@ instructions: - field: rd type: DFP-Reg definition: | - if (CAPI.VALIDATION.isMisaligned(registers[rs1] + imm, 'd')) { - CAPI.VALIDATION.raise('The memory must be aligned'); - } - registers[rd] = CAPI.MEM.read(registers[rs1] + imm, 8, rd); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 8)) + CAPI.VALIDATION.raise('The memory must be aligned'); + registers[rd] = CAPI.MEM.read(addr, 8, rd, false); help: Load a double-precision floating-point value from memory into floating-point register rd. - name: fadd.d extension: D @@ -4141,11 +4160,10 @@ instructions: - field: rs2 type: DFP-Reg definition: | - let val = BigInt("0x" + CAPI.FP.split_double(registers[rs2], 0)); - CAPI.MEM.write(registers[rs1] + imm, 4, val, rs2); - val = BigInt("0x" + CAPI.FP.split_double(registers[rs2], 1)); - CAPI.MEM.write(registers[rs1] + imm + 4n, 4, val, rs2); - CAPI.MEM.addHint(registers[rs1] + imm, "float64", 64); + let addr = registers[rs1] + imm; + if (CAPI.VALIDATION.isMisaligned(addr, 8)) + CAPI.VALIDATION.raise('The memory must be aligned'); + CAPI.MEM.write(addr, 8, registers[rs2], rs2, 'float64', false); help: Store a double-precision value from the floating-point registers to memory. Zifencei: - name: fence.i diff --git a/src/core/capi/validation.mts b/src/core/capi/validation.mts index dd4276e07..4fe2c40c5 100644 --- a/src/core/capi/validation.mts +++ b/src/core/capi/validation.mts @@ -18,6 +18,7 @@ */ import { capi_uint2int } from "./fp.mts"; +import { architecture } from "../core.mjs"; type Document = { app: { exception(msg: string): unknown } }; @@ -44,8 +45,15 @@ export function isOverflow(op1: bigint, op2: bigint, res_u: bigint) { ); } -export function isMisaligned(addr: bigint, type: string) { - return false; +/** + * Checks whether an address is misaligned + * @param addr - Base address to read/write + * @param size - Size of the element being read/written + **/ +export function isMisaligned(addr: bigint, size: bigint|number) { + const config = architecture.config; + const word_size_bytes = BigInt(config.word_size / config.byte_size); + return addr % word_size_bytes !== 0n && addr % BigInt(size) !== 0n; } // Object export for initCAPI spreading From a231b31e0cda0fe4de86c06668368a482fff8606 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Tue, 17 Mar 2026 14:44:32 +0100 Subject: [PATCH 31/85] fix(executor): add proper validation of stack pointer address --- src/core/executor/executor.mjs | 40 ++++--------------- .../sentinel/test_mips_sentinels_018.s.snap | 10 +++-- .../mips/sentinel/test_mips_sentinels_018.s | 4 +- 3 files changed, 16 insertions(+), 38 deletions(-) diff --git a/src/core/executor/executor.mjs b/src/core/executor/executor.mjs index 3d8963411..577ca2f90 100644 --- a/src/core/executor/executor.mjs +++ b/src/core/executor/executor.mjs @@ -468,44 +468,20 @@ export function writeStackLimit(stackLimit) { // Get memory segments from the Memory object const segments = main_memory.getMemorySegments(); - // // Check if stack pointer would be placed in data segment - // if ( - // dataSegment && - // stackLimitBigInt <= dataSegment.end && - // stackLimitBigInt >= dataSegment.start - // ) { - // draw.danger.push(status.execution_index); - // throw packExecute( - // true, - // "Stack pointer cannot be placed in the data segment", - // "danger", - // null, - // ); - // } - - // // Check if stack pointer would be placed in text segment - // if ( - // textSegment && - // stackLimitBigInt <= textSegment.end && - // stackLimitBigInt >= textSegment.start - // ) { - // draw.danger.push(status.execution_index); - // throw packExecute( - // true, - // "Stack pointer cannot be placed in the text segment", - // "danger", - // null, - // ); - // } - // Get current stack pointer from memory segments const stackSegment = segments.get("stack"); - - // Check if stack pointer would be placed in stack segment + // Check if stack pointer would be above stack end if (stackSegment && stackLimitBigInt > stackSegment.end) { throw new Error("Stack pointer cannot be outside the stack segment"); } + // Check if stack pointer would be placed in text/data segments + for (const [name, value] of segments) { + if (name === "stack") continue; + if (value.start <= stackLimitBigInt && stackLimitBigInt <= value.end) + throw new Error(`Stack pointer cannot be placed in the ${name} segment`); + } + stackTracker.updateCurrentFrame(stackLimit); // Update the stack segment in the memory layout if it exists diff --git a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_018.s.snap b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_018.s.snap index 27c5a83da..55e0c8f81 100644 --- a/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_018.s.snap +++ b/tests/arch/__snapshots__/mips/sentinel/test_mips_sentinels_018.s.snap @@ -7,12 +7,13 @@ snapshot[`mips/sentinel/test_mips_sentinels_018.s 1`] = ` keyboard: "", memory: { "0": 32, - "1": 29, + "1": 18, "11": 10, "15": 12, "16": 35, "17": 189, - "19": 4, + "18": 255, + "19": 252, "20": 3, "21": 224, "23": 8, @@ -23,8 +24,9 @@ snapshot[`mips/sentinel/test_mips_sentinels_018.s 1`] = ` "9": 2, }, registers: { + "18,s2": "0x5", "2,v0": "0xa", - "29,sp": "0x9", + "29,sp": "0xffffff8", "31,ra": "0x8", PC: "0x10", }, @@ -32,7 +34,7 @@ snapshot[`mips/sentinel/test_mips_sentinels_018.s 1`] = ` { function: "test", msg: "Calling convention violations in test: - - Stack pointer not restored: entered at 0x5, exited at 0x9", + - Stack pointer not restored: entered at 0xffffffc, exited at 0xffffff8", }, ], } diff --git a/tests/arch/mips/sentinel/test_mips_sentinels_018.s b/tests/arch/mips/sentinel/test_mips_sentinels_018.s index 1e133a052..5b0a0c82c 100644 --- a/tests/arch/mips/sentinel/test_mips_sentinels_018.s +++ b/tests/arch/mips/sentinel/test_mips_sentinels_018.s @@ -9,7 +9,7 @@ main: - li $sp, 5 + li $s2, 5 jal test # exit @@ -20,7 +20,7 @@ test: # crear "stack frame" para $ra, $fp y una variable local - addi $sp, $sp, 4 + addi $sp, $sp, -4 # return $v0 jr $ra From 0a9bf517e6dd257f6376481709927fe22d8fd9ea Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Tue, 17 Mar 2026 14:45:12 +0100 Subject: [PATCH 32/85] fix(registerOperations): fix object being thrown instead of a proper `Error` --- src/core/register/registerOperations.mjs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/core/register/registerOperations.mjs b/src/core/register/registerOperations.mjs index f402fbe25..c32243d2f 100644 --- a/src/core/register/registerOperations.mjs +++ b/src/core/register/registerOperations.mjs @@ -119,12 +119,7 @@ export function writeRegister(value, indexComp, indexElem) { } draw.danger.push(status.execution_index); - throw packExecute( - true, - "The register " + elementName + " is not writeable", - "danger", - null, - ); + throw new Error(`The register ${elementName} is not writeable`); } element.value = value; From e3c0fd680d368c18ef0e53e9c789040dc2895cb8 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Tue, 17 Mar 2026 14:46:03 +0100 Subject: [PATCH 33/85] tests: migration of old execution error tests --- .../test_mips_error_executor_002.s.snap | 37 +++++++++++++++++ .../test_mips_error_executor_003.s.snap | 27 ++++++++++++ .../test_mips_error_executor_004.s.snap | 34 +++++++++++++++ .../test_mips_error_executor_005.s.snap | 30 ++++++++++++++ .../test_mips_error_executor_006.s.snap | 30 ++++++++++++++ .../test_mips_error_executor_007.s.snap | 41 +++++++++++++++++++ .../test_mips_error_executor_008.s.snap | 41 +++++++++++++++++++ .../test_mips_error_executor_009.s.snap | 26 ++++++++++++ .../test_riscv_error_executor_002.s.snap | 29 +++++++++++++ .../test_riscv_error_executor_003.s.snap | 27 ++++++++++++ .../test_riscv_error_executor_004.s.snap | 35 ++++++++++++++++ .../test_riscv_error_executor_005.s.snap | 31 ++++++++++++++ .../test_riscv_error_executor_006.s.snap | 30 ++++++++++++++ .../test_riscv_error_executor_007.s.snap | 38 +++++++++++++++++ .../test_riscv_error_executor_008.s.snap | 38 +++++++++++++++++ .../test_riscv_error_executor_009.s.snap | 20 +++++++++ tests/arch/mips/error.test.mts | 12 ++++++ .../executor/test_mips_error_executor_001.out | 6 --- .../executor/test_mips_error_executor_002.out | 6 --- .../executor/test_mips_error_executor_002.s | 5 ++- .../executor/test_mips_error_executor_003.out | 6 --- .../executor/test_mips_error_executor_003.s | 1 + .../executor/test_mips_error_executor_004.out | 6 --- .../executor/test_mips_error_executor_004.s | 1 + .../executor/test_mips_error_executor_005.out | 7 ---- .../executor/test_mips_error_executor_005.s | 3 +- .../executor/test_mips_error_executor_006.out | 7 ---- .../executor/test_mips_error_executor_006.s | 3 +- .../executor/test_mips_error_executor_007.out | 7 ---- .../executor/test_mips_error_executor_007.s | 3 +- .../executor/test_mips_error_executor_008.out | 7 ---- .../executor/test_mips_error_executor_008.s | 3 +- .../executor/test_mips_error_executor_009.out | 6 --- .../executor/test_mips_error_executor_009.s | 3 +- tests/arch/riscv/error.test.mts | 11 +++++ .../executor/test_riscv_error_executor_002.s} | 3 ++ .../test_riscv_error_executor_003.out | 6 --- .../executor/test_riscv_error_executor_003.s | 1 + .../test_riscv_error_executor_004.out | 6 --- .../executor/test_riscv_error_executor_004.s | 1 + .../test_riscv_error_executor_005.out | 7 ---- .../executor/test_riscv_error_executor_005.s | 3 +- .../test_riscv_error_executor_006.out | 7 ---- .../executor/test_riscv_error_executor_006.s | 3 +- .../test_riscv_error_executor_007.out | 7 ---- .../executor/test_riscv_error_executor_007.s | 3 +- .../test_riscv_error_executor_008.out | 7 ---- .../executor/test_riscv_error_executor_008.s | 3 +- .../test_riscv_error_executor_009.out | 3 -- .../executor/test_riscv_error_executor_009.s | 3 +- 50 files changed, 567 insertions(+), 113 deletions(-) create mode 100644 tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_002.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_003.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_004.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_005.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_006.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_007.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_008.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_009.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_002.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_003.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_004.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_005.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_006.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_007.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_008.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_009.s.snap create mode 100644 tests/arch/mips/error.test.mts delete mode 100644 tests/arch/mips/error/executor/test_mips_error_executor_001.out delete mode 100644 tests/arch/mips/error/executor/test_mips_error_executor_002.out delete mode 100644 tests/arch/mips/error/executor/test_mips_error_executor_003.out delete mode 100644 tests/arch/mips/error/executor/test_mips_error_executor_004.out delete mode 100644 tests/arch/mips/error/executor/test_mips_error_executor_005.out delete mode 100644 tests/arch/mips/error/executor/test_mips_error_executor_006.out delete mode 100644 tests/arch/mips/error/executor/test_mips_error_executor_007.out delete mode 100644 tests/arch/mips/error/executor/test_mips_error_executor_008.out delete mode 100644 tests/arch/mips/error/executor/test_mips_error_executor_009.out create mode 100644 tests/arch/riscv/error.test.mts rename tests/arch/{mips/error/executor/test_mips_error_executor_001.s => riscv/error/executor/test_riscv_error_executor_002.s} (62%) delete mode 100644 tests/arch/riscv/error/executor/test_riscv_error_executor_003.out delete mode 100644 tests/arch/riscv/error/executor/test_riscv_error_executor_004.out delete mode 100644 tests/arch/riscv/error/executor/test_riscv_error_executor_005.out delete mode 100644 tests/arch/riscv/error/executor/test_riscv_error_executor_006.out delete mode 100644 tests/arch/riscv/error/executor/test_riscv_error_executor_007.out delete mode 100644 tests/arch/riscv/error/executor/test_riscv_error_executor_008.out delete mode 100644 tests/arch/riscv/error/executor/test_riscv_error_executor_009.out diff --git a/tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_002.s.snap b/tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_002.s.snap new file mode 100644 index 000000000..4b9a9294e --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_002.s.snap @@ -0,0 +1,37 @@ +export const snapshot = {}; + +snapshot[`mips/error/executor/test_mips_error_executor_002.s 1`] = ` +{ + display: "", + error: false, + instruction_errors: [ + { + error: "Stack pointer cannot be outside the stack segment", + i: 2, + }, + ], + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 232, + "11": 32, + "12": 3, + "13": 224, + "15": 8, + "2": 255, + "3": 255, + "4": 52, + "5": 33, + "6": 255, + "7": 255, + "9": 32, + }, + registers: { + "1,at": "0xffffffff", + "29,sp": "0xffffffff", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_003.s.snap b/tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_003.s.snap new file mode 100644 index 000000000..ce7c73b21 --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_003.s.snap @@ -0,0 +1,27 @@ +export const snapshot = {}; + +snapshot[`mips/error/executor/test_mips_error_executor_003.s 1`] = ` +{ + display: "", + error: false, + instruction_errors: [ + { + error: "Stack pointer cannot be placed in the text segment", + i: 0, + }, + ], + keyboard: "", + memory: { + "0": 32, + "1": 29, + "4": 3, + "5": 224, + "7": 8, + }, + registers: { + "29,sp": "0x0", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_004.s.snap b/tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_004.s.snap new file mode 100644 index 000000000..488b0efca --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_004.s.snap @@ -0,0 +1,34 @@ +export const snapshot = {}; + +snapshot[`mips/error/executor/test_mips_error_executor_004.s 1`] = ` +{ + display: "", + error: false, + instruction_errors: [ + { + error: "Stack pointer cannot be placed in the data segment", + i: 2, + }, + ], + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 232, + "11": 32, + "12": 3, + "13": 224, + "15": 8, + "3": 32, + "4": 52, + "5": 33, + "9": 32, + }, + registers: { + "1,at": "0x200000", + "29,sp": "0x200000", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_005.s.snap b/tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_005.s.snap new file mode 100644 index 000000000..898273a85 --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_005.s.snap @@ -0,0 +1,30 @@ +export const snapshot = {}; + +snapshot[`mips/error/executor/test_mips_error_executor_005.s 1`] = ` +{ + display: "", + error: false, + instruction_errors: [ + { + error: "Segmentation fault. You tried to write in the text segment", + i: 1, + }, + ], + keyboard: "", + memory: { + "0": 32, + "1": 8, + "11": 8, + "3": 10, + "4": 172, + "5": 8, + "8": 3, + "9": 224, + }, + registers: { + "8,t0": "0xa", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_006.s.snap b/tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_006.s.snap new file mode 100644 index 000000000..7839c58b4 --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_006.s.snap @@ -0,0 +1,30 @@ +export const snapshot = {}; + +snapshot[`mips/error/executor/test_mips_error_executor_006.s 1`] = ` +{ + display: "", + error: false, + instruction_errors: [ + { + error: "Segmentation fault. You tried to read in the text segment (00000000)", + i: 1, + }, + ], + keyboard: "", + memory: { + "0": 32, + "1": 8, + "11": 8, + "3": 10, + "4": 140, + "5": 8, + "8": 3, + "9": 224, + }, + registers: { + "8,t0": "0xa", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_007.s.snap b/tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_007.s.snap new file mode 100644 index 000000000..30db9fc1a --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_007.s.snap @@ -0,0 +1,41 @@ +export const snapshot = {}; + +snapshot[`mips/error/executor/test_mips_error_executor_007.s 1`] = ` +{ + display: "", + error: false, + instruction_errors: [ + { + error: "The memory must be aligned", + i: 4, + }, + ], + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "11": 32, + "12": 32, + "13": 9, + "15": 10, + "16": 173, + "17": 9, + "19": 1, + "20": 3, + "21": 224, + "23": 8, + "3": 32, + "4": 52, + "5": 33, + "9": 32, + }, + registers: { + "1,at": "0x200000", + "8,t0": "0x200000", + "9,t1": "0xa", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_008.s.snap b/tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_008.s.snap new file mode 100644 index 000000000..516516598 --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_008.s.snap @@ -0,0 +1,41 @@ +export const snapshot = {}; + +snapshot[`mips/error/executor/test_mips_error_executor_008.s 1`] = ` +{ + display: "", + error: false, + instruction_errors: [ + { + error: "The memory must be aligned", + i: 4, + }, + ], + keyboard: "", + memory: { + "0": 60, + "1": 1, + "10": 64, + "11": 32, + "12": 32, + "13": 9, + "15": 10, + "16": 141, + "17": 9, + "19": 1, + "20": 3, + "21": 224, + "23": 8, + "3": 32, + "4": 52, + "5": 33, + "9": 32, + }, + registers: { + "1,at": "0x200000", + "8,t0": "0x200000", + "9,t1": "0xa", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_009.s.snap b/tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_009.s.snap new file mode 100644 index 000000000..a13c076be --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/executor/test_mips_error_executor_009.s.snap @@ -0,0 +1,26 @@ +export const snapshot = {}; + +snapshot[`mips/error/executor/test_mips_error_executor_009.s 1`] = ` +{ + display: "", + error: false, + instruction_errors: [ + { + error: "The register 0 | zero is not writeable", + i: 0, + }, + ], + keyboard: "", + memory: { + "0": 32, + "3": 10, + "4": 3, + "5": 224, + "7": 8, + }, + registers: { + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_002.s.snap b/tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_002.s.snap new file mode 100644 index 000000000..859bee583 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_002.s.snap @@ -0,0 +1,29 @@ +export const snapshot = {}; + +snapshot[`riscv/error/executor/test_riscv_error_executor_002.s 1`] = ` +{ + display: "", + error: false, + instruction_errors: [ + { + error: "Stack pointer cannot be outside the stack segment", + i: 0, + }, + ], + keyboard: "", + memory: { + "0": 255, + "1": 240, + "2": 1, + "3": 19, + "6": 128, + "7": 103, + }, + registers: { + "x2,sp": "0xffffffff", + mtime: "0x1", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_003.s.snap b/tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_003.s.snap new file mode 100644 index 000000000..dc6f2613a --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_003.s.snap @@ -0,0 +1,27 @@ +export const snapshot = {}; + +snapshot[`riscv/error/executor/test_riscv_error_executor_003.s 1`] = ` +{ + display: "", + error: false, + instruction_errors: [ + { + error: "Stack pointer cannot be placed in the text segment", + i: 0, + }, + ], + keyboard: "", + memory: { + "2": 1, + "3": 19, + "6": 128, + "7": 103, + }, + registers: { + "x2,sp": "0x0", + mtime: "0x1", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_004.s.snap b/tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_004.s.snap new file mode 100644 index 000000000..efbd927e5 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_004.s.snap @@ -0,0 +1,35 @@ +export const snapshot = {}; + +snapshot[`riscv/error/executor/test_riscv_error_executor_004.s 1`] = ` +{ + display: "", + error: false, + instruction_errors: [ + { + error: "Stack pointer cannot be placed in the data segment", + i: 2, + }, + ], + keyboard: "", + memory: { + "1": 32, + "10": 129, + "11": 19, + "14": 128, + "15": 103, + "2": 2, + "3": 183, + "5": 2, + "6": 130, + "7": 147, + "9": 2, + }, + registers: { + "x2,sp": "0x200000", + "x5,t0": "0x200000", + mtime: "0x3", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_005.s.snap b/tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_005.s.snap new file mode 100644 index 000000000..c9c825533 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_005.s.snap @@ -0,0 +1,31 @@ +export const snapshot = {}; + +snapshot[`riscv/error/executor/test_riscv_error_executor_005.s 1`] = ` +{ + display: "", + error: false, + instruction_errors: [ + { + error: "Segmentation fault. You tried to write in the text segment", + i: 1, + }, + ], + keyboard: "", + memory: { + "1": 160, + "10": 128, + "11": 103, + "2": 2, + "3": 147, + "5": 80, + "6": 32, + "7": 35, + }, + registers: { + "x5,t0": "0xa", + mtime: "0x2", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_006.s.snap b/tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_006.s.snap new file mode 100644 index 000000000..586ceb0c5 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_006.s.snap @@ -0,0 +1,30 @@ +export const snapshot = {}; + +snapshot[`riscv/error/executor/test_riscv_error_executor_006.s 1`] = ` +{ + display: "", + error: false, + instruction_errors: [ + { + error: "Segmentation fault. You tried to read in the text segment (00000000)", + i: 1, + }, + ], + keyboard: "", + memory: { + "1": 160, + "10": 128, + "11": 103, + "2": 2, + "3": 147, + "6": 34, + "7": 131, + }, + registers: { + "x5,t0": "0xa", + mtime: "0x2", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_007.s.snap b/tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_007.s.snap new file mode 100644 index 000000000..9ebb39bea --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_007.s.snap @@ -0,0 +1,38 @@ +export const snapshot = {}; + +snapshot[`riscv/error/executor/test_riscv_error_executor_007.s 1`] = ` +{ + display: "", + error: false, + instruction_errors: [ + { + error: "The memory must be aligned", + i: 3, + }, + ], + keyboard: "", + memory: { + "1": 32, + "10": 3, + "11": 19, + "13": 98, + "14": 160, + "15": 163, + "18": 128, + "19": 103, + "2": 2, + "3": 151, + "5": 2, + "6": 130, + "7": 147, + "9": 160, + }, + registers: { + "x5,t0": "0x200000", + "x6,t1": "0xa", + mtime: "0x4", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_008.s.snap b/tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_008.s.snap new file mode 100644 index 000000000..d5905944b --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_008.s.snap @@ -0,0 +1,38 @@ +export const snapshot = {}; + +snapshot[`riscv/error/executor/test_riscv_error_executor_008.s 1`] = ` +{ + display: "", + error: false, + instruction_errors: [ + { + error: "The memory must be aligned", + i: 3, + }, + ], + keyboard: "", + memory: { + "1": 32, + "10": 3, + "11": 19, + "13": 18, + "14": 163, + "15": 3, + "18": 128, + "19": 103, + "2": 2, + "3": 151, + "5": 2, + "6": 130, + "7": 147, + "9": 160, + }, + registers: { + "x5,t0": "0x200000", + "x6,t1": "0xa", + mtime: "0x4", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_009.s.snap b/tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_009.s.snap new file mode 100644 index 000000000..65c9cf25a --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/executor/test_riscv_error_executor_009.s.snap @@ -0,0 +1,20 @@ +export const snapshot = {}; + +snapshot[`riscv/error/executor/test_riscv_error_executor_009.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "1": 160, + "3": 19, + "6": 128, + "7": 103, + }, + registers: { + mtime: "0x2", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/mips/error.test.mts b/tests/arch/mips/error.test.mts new file mode 100644 index 000000000..2bd41e175 --- /dev/null +++ b/tests/arch/mips/error.test.mts @@ -0,0 +1,12 @@ +import { ARCH, snapshot_tests } from "../arch_utils.mts"; + +snapshot_tests(ARCH.mips, "mips/error/executor", undefined, new Set([ + "test_mips_error_executor_002.s", + "test_mips_error_executor_003.s", + "test_mips_error_executor_004.s", + "test_mips_error_executor_005.s", + "test_mips_error_executor_006.s", + "test_mips_error_executor_007.s", + "test_mips_error_executor_008.s", + "test_mips_error_executor_009.s", +])); diff --git a/tests/arch/mips/error/executor/test_mips_error_executor_001.out b/tests/arch/mips/error/executor/test_mips_error_executor_001.out deleted file mode 100644 index 5c4077cc1..000000000 --- a/tests/arch/mips/error/executor/test_mips_error_executor_001.out +++ /dev/null @@ -1,6 +0,0 @@ - - - Error found. - No instructions in memory -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/executor/test_mips_error_executor_002.out b/tests/arch/mips/error/executor/test_mips_error_executor_002.out deleted file mode 100644 index 0719a3681..000000000 --- a/tests/arch/mips/error/executor/test_mips_error_executor_002.out +++ /dev/null @@ -1,6 +0,0 @@ - - - Error found. - Label "main" not found -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/executor/test_mips_error_executor_002.s b/tests/arch/mips/error/executor/test_mips_error_executor_002.s index 6ad952bf9..98f743490 100644 --- a/tests/arch/mips/error/executor/test_mips_error_executor_002.s +++ b/tests/arch/mips/error/executor/test_mips_error_executor_002.s @@ -4,5 +4,6 @@ # .text -main_: - li $t0, 10 +main: + li $sp, 0xffffffff + jr $ra diff --git a/tests/arch/mips/error/executor/test_mips_error_executor_003.out b/tests/arch/mips/error/executor/test_mips_error_executor_003.out deleted file mode 100644 index 55840b182..000000000 --- a/tests/arch/mips/error/executor/test_mips_error_executor_003.out +++ /dev/null @@ -1,6 +0,0 @@ - - - Error found. - Stack pointer cannot be placed in the text segment -cr[PC]:0x4; ir[29,sp]:0x0; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/executor/test_mips_error_executor_003.s b/tests/arch/mips/error/executor/test_mips_error_executor_003.s index b481c85ad..f85c4419d 100644 --- a/tests/arch/mips/error/executor/test_mips_error_executor_003.s +++ b/tests/arch/mips/error/executor/test_mips_error_executor_003.s @@ -6,3 +6,4 @@ .text main: li $sp, 0 + jr $ra diff --git a/tests/arch/mips/error/executor/test_mips_error_executor_004.out b/tests/arch/mips/error/executor/test_mips_error_executor_004.out deleted file mode 100644 index 64d1a4355..000000000 --- a/tests/arch/mips/error/executor/test_mips_error_executor_004.out +++ /dev/null @@ -1,6 +0,0 @@ - - - Error found. - Stack pointer cannot be placed in the data segment -cr[PC]:0xc; ir[1,at]:0x200000; ir[29,sp]:0x200000; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/executor/test_mips_error_executor_004.s b/tests/arch/mips/error/executor/test_mips_error_executor_004.s index 63eea2c51..7d4666d73 100644 --- a/tests/arch/mips/error/executor/test_mips_error_executor_004.s +++ b/tests/arch/mips/error/executor/test_mips_error_executor_004.s @@ -6,3 +6,4 @@ .text main: li $sp, 0x00200000 + jr $ra diff --git a/tests/arch/mips/error/executor/test_mips_error_executor_005.out b/tests/arch/mips/error/executor/test_mips_error_executor_005.out deleted file mode 100644 index 6a1c963ae..000000000 --- a/tests/arch/mips/error/executor/test_mips_error_executor_005.out +++ /dev/null @@ -1,7 +0,0 @@ - -Segmentation fault. You tried to write in the text segment - - Error found. - The program has finished with errors -cr[PC]:0x8; ir[8,t0]:0xa; memory[0x3]:0x0a; memory[0x1]:0x00; memory[0x0]:0x00; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/executor/test_mips_error_executor_005.s b/tests/arch/mips/error/executor/test_mips_error_executor_005.s index 2b34bfa8e..4295fb47b 100644 --- a/tests/arch/mips/error/executor/test_mips_error_executor_005.s +++ b/tests/arch/mips/error/executor/test_mips_error_executor_005.s @@ -7,4 +7,5 @@ main: li $t0, 10 - sw $t0, 0 \ No newline at end of file + sw $t0, 0 + jr $ra diff --git a/tests/arch/mips/error/executor/test_mips_error_executor_006.out b/tests/arch/mips/error/executor/test_mips_error_executor_006.out deleted file mode 100644 index 04b86e53d..000000000 --- a/tests/arch/mips/error/executor/test_mips_error_executor_006.out +++ /dev/null @@ -1,7 +0,0 @@ - -Segmentation fault. You tried to read in the text segment - - Error found. - The program has finished with errors -cr[PC]:0x8; ir[8,t0]:0x2008000a; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/executor/test_mips_error_executor_006.s b/tests/arch/mips/error/executor/test_mips_error_executor_006.s index b71603663..f5ac66fb0 100644 --- a/tests/arch/mips/error/executor/test_mips_error_executor_006.s +++ b/tests/arch/mips/error/executor/test_mips_error_executor_006.s @@ -7,4 +7,5 @@ main: li $t0, 10 - lw $t0, 0 \ No newline at end of file + lw $t0, 0 + jr $ra diff --git a/tests/arch/mips/error/executor/test_mips_error_executor_007.out b/tests/arch/mips/error/executor/test_mips_error_executor_007.out deleted file mode 100644 index a2bde039a..000000000 --- a/tests/arch/mips/error/executor/test_mips_error_executor_007.out +++ /dev/null @@ -1,7 +0,0 @@ - -The memory must be align - - Error found. - The program has finished with errors -cr[PC]:0x14; ir[1,at]:0x200000; ir[8,t0]:0x200000; ir[9,t1]:0xa; memory[0x200004]:0x0a; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/executor/test_mips_error_executor_007.s b/tests/arch/mips/error/executor/test_mips_error_executor_007.s index d7dc6f383..ac6904039 100644 --- a/tests/arch/mips/error/executor/test_mips_error_executor_007.s +++ b/tests/arch/mips/error/executor/test_mips_error_executor_007.s @@ -11,4 +11,5 @@ main: la $t0, a li $t1, 10 - sw $t1, 1($t0) \ No newline at end of file + sw $t1, 1($t0) + jr $ra diff --git a/tests/arch/mips/error/executor/test_mips_error_executor_008.out b/tests/arch/mips/error/executor/test_mips_error_executor_008.out deleted file mode 100644 index 0fe23d1da..000000000 --- a/tests/arch/mips/error/executor/test_mips_error_executor_008.out +++ /dev/null @@ -1,7 +0,0 @@ - -The memory must be align - - Error found. - The program has finished with errors -cr[PC]:0x14; ir[1,at]:0x200000; ir[8,t0]:0x200000; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/executor/test_mips_error_executor_008.s b/tests/arch/mips/error/executor/test_mips_error_executor_008.s index aa287ad80..c16028e5f 100644 --- a/tests/arch/mips/error/executor/test_mips_error_executor_008.s +++ b/tests/arch/mips/error/executor/test_mips_error_executor_008.s @@ -11,4 +11,5 @@ main: la $t0, a li $t1, 10 - lw $t1, 1($t0) \ No newline at end of file + lw $t1, 1($t0) + jr $ra diff --git a/tests/arch/mips/error/executor/test_mips_error_executor_009.out b/tests/arch/mips/error/executor/test_mips_error_executor_009.out deleted file mode 100644 index 4250e5e73..000000000 --- a/tests/arch/mips/error/executor/test_mips_error_executor_009.out +++ /dev/null @@ -1,6 +0,0 @@ - - - Error found. - The register 0 | zero cannot be written -cr[PC]:0x4; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/executor/test_mips_error_executor_009.s b/tests/arch/mips/error/executor/test_mips_error_executor_009.s index f9fb1b439..3fece1246 100644 --- a/tests/arch/mips/error/executor/test_mips_error_executor_009.s +++ b/tests/arch/mips/error/executor/test_mips_error_executor_009.s @@ -6,4 +6,5 @@ .text main: - li $zero, 10 \ No newline at end of file + li $zero, 10 + jr $ra diff --git a/tests/arch/riscv/error.test.mts b/tests/arch/riscv/error.test.mts new file mode 100644 index 000000000..f460d6507 --- /dev/null +++ b/tests/arch/riscv/error.test.mts @@ -0,0 +1,11 @@ +import { ARCH, snapshot_tests } from "../arch_utils.mts"; + +snapshot_tests(ARCH.riscv, "riscv/error/executor", undefined, new Set([ + "test_riscv_error_executor_002.s", + "test_riscv_error_executor_003.s", + "test_riscv_error_executor_004.s", + "test_riscv_error_executor_005.s", + "test_riscv_error_executor_006.s", + "test_riscv_error_executor_007.s", + "test_riscv_error_executor_008.s", +])); diff --git a/tests/arch/mips/error/executor/test_mips_error_executor_001.s b/tests/arch/riscv/error/executor/test_riscv_error_executor_002.s similarity index 62% rename from tests/arch/mips/error/executor/test_mips_error_executor_001.s rename to tests/arch/riscv/error/executor/test_riscv_error_executor_002.s index fe029decf..3aa637410 100644 --- a/tests/arch/mips/error/executor/test_mips_error_executor_001.s +++ b/tests/arch/riscv/error/executor/test_riscv_error_executor_002.s @@ -4,3 +4,6 @@ # .text +main: + li sp, 0xffffffff + jr ra diff --git a/tests/arch/riscv/error/executor/test_riscv_error_executor_003.out b/tests/arch/riscv/error/executor/test_riscv_error_executor_003.out deleted file mode 100644 index 41f939f68..000000000 --- a/tests/arch/riscv/error/executor/test_riscv_error_executor_003.out +++ /dev/null @@ -1,6 +0,0 @@ - - - Error found. - Stack pointer cannot be placed in the text segment -cr[PC]:0x4; ir[x2,sp]:0x0; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/executor/test_riscv_error_executor_003.s b/tests/arch/riscv/error/executor/test_riscv_error_executor_003.s index d61e3decb..6e4c1c4c8 100644 --- a/tests/arch/riscv/error/executor/test_riscv_error_executor_003.s +++ b/tests/arch/riscv/error/executor/test_riscv_error_executor_003.s @@ -6,3 +6,4 @@ .text main: li sp, 0 + jr ra diff --git a/tests/arch/riscv/error/executor/test_riscv_error_executor_004.out b/tests/arch/riscv/error/executor/test_riscv_error_executor_004.out deleted file mode 100644 index fffc73ce7..000000000 --- a/tests/arch/riscv/error/executor/test_riscv_error_executor_004.out +++ /dev/null @@ -1,6 +0,0 @@ - - - Error found. - Stack pointer cannot be placed in the data segment -cr[PC]:0xc; ir[x2,sp]:0x200000; ir[x5,t0]:0x200000; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/executor/test_riscv_error_executor_004.s b/tests/arch/riscv/error/executor/test_riscv_error_executor_004.s index 57d3a7ae8..10506d2ba 100644 --- a/tests/arch/riscv/error/executor/test_riscv_error_executor_004.s +++ b/tests/arch/riscv/error/executor/test_riscv_error_executor_004.s @@ -7,3 +7,4 @@ main: li t0, 0x00200000 mv sp, t0 + jr ra diff --git a/tests/arch/riscv/error/executor/test_riscv_error_executor_005.out b/tests/arch/riscv/error/executor/test_riscv_error_executor_005.out deleted file mode 100644 index ebc756a9e..000000000 --- a/tests/arch/riscv/error/executor/test_riscv_error_executor_005.out +++ /dev/null @@ -1,7 +0,0 @@ - -Segmentation fault. You tried to write in the text segment - - Error found. - The program has finished with errors -cr[PC]:0x8; ir[x5,t0]:0xa; memory[0x3]:0x0a; memory[0x2]:0x00; memory[0x1]:0x00; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/executor/test_riscv_error_executor_005.s b/tests/arch/riscv/error/executor/test_riscv_error_executor_005.s index 6f81fdadc..acd9bceea 100644 --- a/tests/arch/riscv/error/executor/test_riscv_error_executor_005.s +++ b/tests/arch/riscv/error/executor/test_riscv_error_executor_005.s @@ -7,4 +7,5 @@ main: li t0, 10 - sw t0, 0(zero) \ No newline at end of file + sw t0, 0(zero) + jr ra diff --git a/tests/arch/riscv/error/executor/test_riscv_error_executor_006.out b/tests/arch/riscv/error/executor/test_riscv_error_executor_006.out deleted file mode 100644 index 641a1da44..000000000 --- a/tests/arch/riscv/error/executor/test_riscv_error_executor_006.out +++ /dev/null @@ -1,7 +0,0 @@ - -Segmentation fault. You tried to read in the text segment - - Error found. - The program has finished with errors -cr[PC]:0x8; ir[x5,t0]:0xa00293; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/executor/test_riscv_error_executor_006.s b/tests/arch/riscv/error/executor/test_riscv_error_executor_006.s index c72cd28e6..aaae79cb6 100644 --- a/tests/arch/riscv/error/executor/test_riscv_error_executor_006.s +++ b/tests/arch/riscv/error/executor/test_riscv_error_executor_006.s @@ -7,4 +7,5 @@ main: li t0, 10 - lw t0, 0(zero) \ No newline at end of file + lw t0, 0(zero) + jr ra diff --git a/tests/arch/riscv/error/executor/test_riscv_error_executor_007.out b/tests/arch/riscv/error/executor/test_riscv_error_executor_007.out deleted file mode 100644 index 15ec1b3b1..000000000 --- a/tests/arch/riscv/error/executor/test_riscv_error_executor_007.out +++ /dev/null @@ -1,7 +0,0 @@ - -The memory must be align - - Error found. - The program has finished with errors -cr[PC]:0x10; ir[x5,t0]:0x200000; ir[x6,t1]:0xa; memory[0x200004]:0x0a; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/executor/test_riscv_error_executor_007.s b/tests/arch/riscv/error/executor/test_riscv_error_executor_007.s index dd90edd83..c591ec62d 100644 --- a/tests/arch/riscv/error/executor/test_riscv_error_executor_007.s +++ b/tests/arch/riscv/error/executor/test_riscv_error_executor_007.s @@ -11,4 +11,5 @@ main: la t0, a li t1, 10 - sw t1, 1(t0) \ No newline at end of file + sw t1, 1(t0) + jr ra diff --git a/tests/arch/riscv/error/executor/test_riscv_error_executor_008.out b/tests/arch/riscv/error/executor/test_riscv_error_executor_008.out deleted file mode 100644 index 949224d25..000000000 --- a/tests/arch/riscv/error/executor/test_riscv_error_executor_008.out +++ /dev/null @@ -1,7 +0,0 @@ - -The memory must be align - - Error found. - The program has finished with errors -cr[PC]:0x10; ir[x5,t0]:0x200000; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/executor/test_riscv_error_executor_008.s b/tests/arch/riscv/error/executor/test_riscv_error_executor_008.s index 519330089..8535757fa 100644 --- a/tests/arch/riscv/error/executor/test_riscv_error_executor_008.s +++ b/tests/arch/riscv/error/executor/test_riscv_error_executor_008.s @@ -11,4 +11,5 @@ main: la t0, a li t1, 10 - lw t1, 1(t0) \ No newline at end of file + lw t1, 1(t0) + jr ra diff --git a/tests/arch/riscv/error/executor/test_riscv_error_executor_009.out b/tests/arch/riscv/error/executor/test_riscv_error_executor_009.out deleted file mode 100644 index e65d3b74b..000000000 --- a/tests/arch/riscv/error/executor/test_riscv_error_executor_009.out +++ /dev/null @@ -1,3 +0,0 @@ - -cr[PC]:0x4; keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/executor/test_riscv_error_executor_009.s b/tests/arch/riscv/error/executor/test_riscv_error_executor_009.s index 8e37924be..fdb3b3167 100644 --- a/tests/arch/riscv/error/executor/test_riscv_error_executor_009.s +++ b/tests/arch/riscv/error/executor/test_riscv_error_executor_009.s @@ -6,4 +6,5 @@ .text main: - li zero, 10 \ No newline at end of file + li zero, 10 + jr ra From 2c70662c72894af97322dc0af0a6901cf9bad634 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Wed, 18 Mar 2026 11:21:04 +0100 Subject: [PATCH 34/85] tests: remove keyboard echo while running tests --- src/core/executor/IO.mjs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/core/executor/IO.mjs b/src/core/executor/IO.mjs index 3d6316ac7..803c29142 100644 --- a/src/core/executor/IO.mjs +++ b/src/core/executor/IO.mjs @@ -219,7 +219,6 @@ function checkEnter(buf) { function rawPrompt() { if (testKeyboard.enable) { const data = testKeyboard.data.shift() || "" - process.stdout.write(data); // Echo the character return data } // Build input character by character until we hit Enter From 2d3b3c1800fcb9a178d7970edca5056936bae8cf Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Wed, 18 Mar 2026 12:10:45 +0100 Subject: [PATCH 35/85] tests: rename snapshot tests to execution tests --- tests/arch/arch_utils.mts | 9 ++++++--- tests/arch/mips/correct.test.mts | 6 +++--- tests/arch/mips/error.test.mts | 27 +++++++++++++++----------- tests/arch/mips/instructions.test.mts | 11 +++++++---- tests/arch/mips/sentinel.test.mts | 4 ++-- tests/arch/riscv/correct.test.mts | 6 +++--- tests/arch/riscv/error.test.mts | 25 ++++++++++++++---------- tests/arch/riscv/instructions.test.mts | 4 ++-- tests/arch/riscv/sentinel.test.mts | 4 ++-- 9 files changed, 56 insertions(+), 40 deletions(-) diff --git a/tests/arch/arch_utils.mts b/tests/arch/arch_utils.mts index 10200a4fc..55b019578 100644 --- a/tests/arch/arch_utils.mts +++ b/tests/arch/arch_utils.mts @@ -28,7 +28,7 @@ const PREFIX = path.fromFileUrl(import.meta.url + "/../../../"); * use an empty input * @param expect_error - Set of test file names that are expected to throw errors during execution */ -export function snapshot_tests( +export function execution_tests( archPath: string, dir: string, keyboard: Map = new Map(), @@ -61,7 +61,7 @@ export function snapshot_tests( // Execute code let result = { output: "", error: false }; - const instruction_errors: {i: number, error: string}[] = []; + const instruction_errors: { i: number; error: string }[] = []; for (let i = 0; i < 1000; i++) { try { result = executeStep(); @@ -69,7 +69,10 @@ export function snapshot_tests( break; } catch (e) { if (errors) - instruction_errors.push({i, error: (e as Error).message}); + instruction_errors.push({ + i, + error: (e as Error).message, + }); else throw e; } } diff --git a/tests/arch/mips/correct.test.mts b/tests/arch/mips/correct.test.mts index dab94b20c..718c3dfdf 100644 --- a/tests/arch/mips/correct.test.mts +++ b/tests/arch/mips/correct.test.mts @@ -1,9 +1,9 @@ -import { ARCH, snapshot_tests } from "../arch_utils.mts"; +import { ARCH, execution_tests } from "../arch_utils.mts"; const long_str = "This is a very long string with many characters and a lot of data. :) 123\n"; -snapshot_tests( +execution_tests( ARCH.mips, "mips/correct/examples", new Map([ @@ -11,7 +11,7 @@ snapshot_tests( ["test_mips_example_010.s", [long_str.length + "\n", long_str]], ]), ); -snapshot_tests( +execution_tests( ARCH.mips, "mips/correct/syscalls", new Map([ diff --git a/tests/arch/mips/error.test.mts b/tests/arch/mips/error.test.mts index 2bd41e175..cbd1a9b36 100644 --- a/tests/arch/mips/error.test.mts +++ b/tests/arch/mips/error.test.mts @@ -1,12 +1,17 @@ -import { ARCH, snapshot_tests } from "../arch_utils.mts"; +import { ARCH, execution_tests } from "../arch_utils.mts"; -snapshot_tests(ARCH.mips, "mips/error/executor", undefined, new Set([ - "test_mips_error_executor_002.s", - "test_mips_error_executor_003.s", - "test_mips_error_executor_004.s", - "test_mips_error_executor_005.s", - "test_mips_error_executor_006.s", - "test_mips_error_executor_007.s", - "test_mips_error_executor_008.s", - "test_mips_error_executor_009.s", -])); +execution_tests( + ARCH.mips, + "mips/error/executor", + undefined, + new Set([ + "test_mips_error_executor_002.s", + "test_mips_error_executor_003.s", + "test_mips_error_executor_004.s", + "test_mips_error_executor_005.s", + "test_mips_error_executor_006.s", + "test_mips_error_executor_007.s", + "test_mips_error_executor_008.s", + "test_mips_error_executor_009.s", + ]), +); diff --git a/tests/arch/mips/instructions.test.mts b/tests/arch/mips/instructions.test.mts index fcf5b9933..426b2d941 100644 --- a/tests/arch/mips/instructions.test.mts +++ b/tests/arch/mips/instructions.test.mts @@ -1,5 +1,8 @@ -import { ARCH, snapshot_tests } from "../arch_utils.mts" +import { ARCH, execution_tests } from "../arch_utils.mts"; -snapshot_tests(ARCH.mips, "mips/instructions", undefined, new Set([ - "test_mips_instruction_058.s", "test_mips_instruction_064.s" -])); +execution_tests( + ARCH.mips, + "mips/instructions", + undefined, + new Set(["test_mips_instruction_058.s", "test_mips_instruction_064.s"]), +); diff --git a/tests/arch/mips/sentinel.test.mts b/tests/arch/mips/sentinel.test.mts index 542729330..90e3c6cde 100644 --- a/tests/arch/mips/sentinel.test.mts +++ b/tests/arch/mips/sentinel.test.mts @@ -1,3 +1,3 @@ -import { ARCH, snapshot_tests } from "../arch_utils.mts" +import { ARCH, execution_tests } from "../arch_utils.mts"; -snapshot_tests(ARCH.mips, "mips/sentinel"); +execution_tests(ARCH.mips, "mips/sentinel"); diff --git a/tests/arch/riscv/correct.test.mts b/tests/arch/riscv/correct.test.mts index d9d47b778..b02890841 100644 --- a/tests/arch/riscv/correct.test.mts +++ b/tests/arch/riscv/correct.test.mts @@ -1,9 +1,9 @@ -import { ARCH, snapshot_tests } from "../arch_utils.mts"; +import { ARCH, execution_tests } from "../arch_utils.mts"; const long_str = "This is a very long string with many characters and a lot of data. :) 123\n"; -snapshot_tests( +execution_tests( ARCH.riscv, "riscv/correct/examples", new Map([ @@ -11,7 +11,7 @@ snapshot_tests( ["test_riscv_example_010.s", [long_str.length + "\n", long_str]], ]), ); -snapshot_tests( +execution_tests( ARCH.riscv, "riscv/correct/syscalls", new Map([ diff --git a/tests/arch/riscv/error.test.mts b/tests/arch/riscv/error.test.mts index f460d6507..e571e7b20 100644 --- a/tests/arch/riscv/error.test.mts +++ b/tests/arch/riscv/error.test.mts @@ -1,11 +1,16 @@ -import { ARCH, snapshot_tests } from "../arch_utils.mts"; +import { ARCH, execution_tests } from "../arch_utils.mts"; -snapshot_tests(ARCH.riscv, "riscv/error/executor", undefined, new Set([ - "test_riscv_error_executor_002.s", - "test_riscv_error_executor_003.s", - "test_riscv_error_executor_004.s", - "test_riscv_error_executor_005.s", - "test_riscv_error_executor_006.s", - "test_riscv_error_executor_007.s", - "test_riscv_error_executor_008.s", -])); +execution_tests( + ARCH.riscv, + "riscv/error/executor", + undefined, + new Set([ + "test_riscv_error_executor_002.s", + "test_riscv_error_executor_003.s", + "test_riscv_error_executor_004.s", + "test_riscv_error_executor_005.s", + "test_riscv_error_executor_006.s", + "test_riscv_error_executor_007.s", + "test_riscv_error_executor_008.s", + ]), +); diff --git a/tests/arch/riscv/instructions.test.mts b/tests/arch/riscv/instructions.test.mts index b8af0fe04..5239ed99d 100644 --- a/tests/arch/riscv/instructions.test.mts +++ b/tests/arch/riscv/instructions.test.mts @@ -1,3 +1,3 @@ -import { ARCH, snapshot_tests } from "../arch_utils.mts" +import { ARCH, execution_tests } from "../arch_utils.mts"; -snapshot_tests(ARCH.riscv, "riscv/instructions"); +execution_tests(ARCH.riscv, "riscv/instructions"); diff --git a/tests/arch/riscv/sentinel.test.mts b/tests/arch/riscv/sentinel.test.mts index 3e145cc39..c8d22d86f 100644 --- a/tests/arch/riscv/sentinel.test.mts +++ b/tests/arch/riscv/sentinel.test.mts @@ -1,3 +1,3 @@ -import { ARCH, snapshot_tests } from "../arch_utils.mts" +import { ARCH, execution_tests } from "../arch_utils.mts"; -snapshot_tests(ARCH.riscv, "riscv/sentinel"); +execution_tests(ARCH.riscv, "riscv/sentinel"); From b595cc6be5acdc52ff5d7e78c627e1dab197c021 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Wed, 18 Mar 2026 15:36:41 +0100 Subject: [PATCH 36/85] fix(assembler): allow using different color format on different environments Allows the web version to keep using HTML formatting, while CLI can use ANSI escape sequences --- src/core/assembler/assembler.d.ts | 3 +++ src/core/assembler/assembler.mjs | 26 +++++++++++++------ .../creatorAssembler/creatorAssemblerBase.mjs | 26 +++++++++++-------- .../deno/creatorAssembler.mjs | 7 ++--- .../creatorAssembler/web/creatorAssembler.mjs | 2 +- src/core/core.mjs | 15 ++++++++--- tests/unit/arch/simulator-test-utils.mts | 1 + 7 files changed, 53 insertions(+), 27 deletions(-) diff --git a/src/core/assembler/assembler.d.ts b/src/core/assembler/assembler.d.ts index 94c0ccb85..f48b08041 100644 --- a/src/core/assembler/assembler.d.ts +++ b/src/core/assembler/assembler.d.ts @@ -16,3 +16,6 @@ export declare const instructions: Instruction[]; type InstructionTagMap = { [addr: number]: { tag: string; global: boolean } }; export declare let tag_instructions: InstructionTagMap; + +type CompilerFn = (code: string, library: boolean, ansi_color: boolean) + => Promise | object diff --git a/src/core/assembler/assembler.mjs b/src/core/assembler/assembler.mjs index b6021f5ff..c501c99eb 100644 --- a/src/core/assembler/assembler.mjs +++ b/src/core/assembler/assembler.mjs @@ -103,11 +103,20 @@ export function formatErrorWithColors(error) { return htmlMsg; } -export function getCleanErrorMessage(error) { +export function getCleanErrorMessage(error, ansi_color = true) { const errorMsg = String(error); - const parsed = ansicolor.parse(errorMsg); - const cleanMsg = parsed.spans.map(span => span.text).join(""); - return cleanMsg; + if (ansi_color) { + const parsed = ansicolor.parse(errorMsg); + return parsed.spans.map(span => span.text).join(""); + } else { + return errorMsg + .replace(/<.+?>/g, "") + .replace(/&/g, "&") + .replace(/</g, "<") + .replace(/>/g, ">") + .replace(/"/g, '"') + .replace(/'/g, "'"); + } } /** @@ -319,10 +328,11 @@ export function parseDebugSymbols(debugSymbols) { /** * Dispatcher for assembly compilers. * @param {string} code - * @param {any} library - * @param {string} compiler + * @param {boolean} library + * @param {import("./assembler.d.ts").CompilerFn} compiler + * @param {boolean} ansi_color */ -export function assembly_compiler(code, library, compiler) { +export function assembly_compiler(code, library, compiler, ansi_color = false) { // If no compiler is specified, error out if (!compiler) { raise("No compiler specified for assembly compilation"); @@ -333,5 +343,5 @@ export function assembly_compiler(code, library, compiler) { status.executedInstructions = 0; status.clkCycles = 0; - return compiler(code, library); + return compiler(code, library, ansi_color); } diff --git a/src/core/assembler/creatorAssembler/creatorAssemblerBase.mjs b/src/core/assembler/creatorAssembler/creatorAssemblerBase.mjs index 1a185f813..9ec7f0bd9 100644 --- a/src/core/assembler/creatorAssembler/creatorAssemblerBase.mjs +++ b/src/core/assembler/creatorAssembler/creatorAssemblerBase.mjs @@ -63,10 +63,11 @@ let libraryInstructions = []; /** * Handle compilation error * @param {String} error - Error message returned by the assembler + * @param {boolean} ansi_color - Whether errors are formatted with ANSI or HTML colors * @returns {Object} Structured error data */ -function handleError(error) { - const cleanErrorText = error.replace(/<.+?>/g, ""); +function handleError(error, ansi_color) { + const cleanErrorText = getCleanErrorMessage(error, ansi_color); const linterInfo = parseErrorForLinter(cleanErrorText); return { errorcode: "101", @@ -491,9 +492,10 @@ function writeInstructionsToMemory(instructions, library_instructions) { * Compile assembly code as a library * @param {string} code - Assembly code to compile * @param {WasmModules} wasmModules - Assembler's WASM modules + * @param {boolean} ansi_color - Whether to use ANSI or HTML colors (default: HTML) * @returns {Object} Compilation result */ -export function assembleCreatorLibrary(code, wasmModules) { +export function assembleCreatorLibrary(code, wasmModules, ansi_color) { /* Google Analytics */ creator_ga("compile", "compile.library"); @@ -516,7 +518,7 @@ export function assembleCreatorLibrary(code, wasmModules) { 0, // library_offset (not used for library compilation) "{}", // no library labels true, // library flag - Color.Html, + ansi_color? Color.Ansi : Color.Html, ); // Library compilation: only binary instructions @@ -543,7 +545,7 @@ export function assembleCreatorLibrary(code, wasmModules) { const data_mem = compiled.data; loadDataIntoMemory(data_mem, wasmModules); } catch (error) { - return handleError(error) + return handleError(error, ansi_color) } // Mark global labels on library instructions @@ -570,9 +572,10 @@ export function assembleCreatorLibrary(code, wasmModules) { * Compile assembly code as a normal program * @param {string} code - Assembly code to compile * @param {WasmModules} wasmModules - Assembler's WASM modules + * @param {boolean} ansi_color - Whether to use ANSI or HTML colors (default: HTML) * @returns {Object} Compilation result */ -export function assembleCreatorProgram(code, wasmModules) { +export function assembleCreatorProgram(code, wasmModules, ansi_color) { /* Google Analytics */ creator_ga("compile", "compile.assembly"); @@ -601,7 +604,7 @@ export function assembleCreatorProgram(code, wasmModules) { library_offset, labels_json, false, // not a library - Color.Html, + ansi_color? Color.Ansi : Color.Html, ); // Normal compilation: populate instructions for execution/display @@ -628,7 +631,7 @@ export function assembleCreatorProgram(code, wasmModules) { const data_mem = compiled.data; loadDataIntoMemory(data_mem, wasmModules); } catch (error) { - return handleError(error) + return handleError(error, ansi_color) } // Write library binary to memory if present @@ -663,12 +666,13 @@ export function assembleCreatorProgram(code, wasmModules) { * @param {string} code - Assembly code to compile * @param {boolean} library - Whether this is a library compilation * @param {WasmModules} wasmModules - Assembler's WASM modules + * @param {boolean} ansi_color - Whether to use ANSI or HTML colors (default: HTML) * @returns {Object} Compilation result */ -export function assembleCreatorBase(code, library, wasmModules) { +export function assembleCreatorBase(code, library, wasmModules, ansi_color = false) { if (library) { - return assembleCreatorLibrary(code, wasmModules); + return assembleCreatorLibrary(code, wasmModules, ansi_color); } else { - return assembleCreatorProgram(code, wasmModules); + return assembleCreatorProgram(code, wasmModules, ansi_color); } } diff --git a/src/core/assembler/creatorAssembler/deno/creatorAssembler.mjs b/src/core/assembler/creatorAssembler/deno/creatorAssembler.mjs index 62d02d05c..df9ab5991 100644 --- a/src/core/assembler/creatorAssembler/deno/creatorAssembler.mjs +++ b/src/core/assembler/creatorAssembler/deno/creatorAssembler.mjs @@ -22,13 +22,14 @@ import { assembleCreatorBase } from "../creatorAssemblerBase.mjs"; import * as wasmModules from "./wasm/creator_assembler.js"; /** - * Deno-specific assembly compiler that uses ANSI color configuration + * Deno-specific assembly compiler * WASM is automatically initialized in Deno version * @param {string} code - Assembly code to compile * @param {boolean} library - Whether this is a library compilation + * @param {boolean} ansi_color - Whether to use ANSI or HTML colors (default: ANSI) * @returns {Object} Compilation result */ -export function assembleCreator(code, library) { +export function assembleCreator(code, library, ansi_color = true) { // Call the common base implementation - return assembleCreatorBase(code, library, wasmModules); + return assembleCreatorBase(code, library, wasmModules, ansi_color); } diff --git a/src/core/assembler/creatorAssembler/web/creatorAssembler.mjs b/src/core/assembler/creatorAssembler/web/creatorAssembler.mjs index 0eee173ef..bd1dd1d19 100644 --- a/src/core/assembler/creatorAssembler/web/creatorAssembler.mjs +++ b/src/core/assembler/creatorAssembler/web/creatorAssembler.mjs @@ -32,5 +32,5 @@ export async function assembleCreator(code, library) { await wasm_web_init(); // Call the common base implementation - return assembleCreatorBase(code, library, wasmModules); + return assembleCreatorBase(code, library, wasmModules, false); } diff --git a/src/core/core.mjs b/src/core/core.mjs index 2c94cd499..0b8b06137 100644 --- a/src/core/core.mjs +++ b/src/core/core.mjs @@ -307,17 +307,24 @@ export async function load_CREATino() { // compilation -export async function assembly_compile(code, compiler) { +/** + * Compiles an assembly code with the chosen compiler + * @param {string} code + * @param {import("./assembler/assembler.d.ts").CompilerFn} compiler + * @param {boolean} ansi_color - Whether to format errors with ANSI escape sequences + * (`true`) or HTML tags (`false`) + **/ +export async function assembly_compile(code, compiler, ansi_color = false) { var ret; if (architecture.config.name.includes("SRV")){ if (Object.keys(loadedLibrary).length === 0) - ret = await assembly_compiler(code, false, compiler); + ret = await assembly_compiler(code, false, compiler, ansi_color); else - ret = await assembly_compiler(code, true, compiler); + ret = await assembly_compiler(code, true, compiler, ansi_color); } else{ - ret = await assembly_compiler(code, false, compiler); + ret = await assembly_compiler(code, false, compiler, ansi_color); } switch (ret.status) { diff --git a/tests/unit/arch/simulator-test-utils.mts b/tests/unit/arch/simulator-test-utils.mts index 1dd960c0d..8933c2b23 100644 --- a/tests/unit/arch/simulator-test-utils.mts +++ b/tests/unit/arch/simulator-test-utils.mts @@ -162,6 +162,7 @@ export async function compileAssembly( const compileResult = (await creator.assembly_compile( testAssembly, compilerFunction, + true, )) as CompileResult; if (compileResult.status !== "ok") { throw new Error(`Failed to compile assembly: ${compileResult.msg}`); From 0fc4637fa93ede2b490feb06bc65210c1bd31d27 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Wed, 18 Mar 2026 15:38:02 +0100 Subject: [PATCH 37/85] fix(creator-assembler): fix incorrect display of syntax of pseudoinstructions in errors --- creator-assembler | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/creator-assembler b/creator-assembler index 567859473..0531a2707 160000 --- a/creator-assembler +++ b/creator-assembler @@ -1 +1 @@ -Subproject commit 5678594737724c2fcc8b2d25f324ecd6d4aa3599 +Subproject commit 0531a2707011af39e85d78ffd588d14c73861ffd From 1b7e6f7a109ef0dc3fba0bfe08441565b5f5c8b8 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Wed, 18 Mar 2026 15:39:28 +0100 Subject: [PATCH 38/85] tests: migration of old compiler error tests --- .../test_mips_error_compiler_001.s.snap | 60 ++++++++++ .../test_mips_error_compiler_002.s.snap | 42 +++++++ .../test_mips_error_compiler_003.s.snap | 108 ++++++++++++++++++ .../test_mips_error_compiler_004.s.snap | 48 ++++++++ .../test_mips_error_compiler_005.s.snap | 48 ++++++++ .../test_mips_error_compiler_006.s.snap | 84 ++++++++++++++ .../test_mips_error_compiler_007.s.snap | 48 ++++++++ .../test_mips_error_compiler_008.s.snap | 48 ++++++++ .../test_mips_error_compiler_009.s.snap | 84 ++++++++++++++ .../test_mips_error_compiler_010.s.snap | 42 +++++++ .../test_mips_error_compiler_014.s.snap | 42 +++++++ .../test_mips_error_compiler_015.s.snap | 42 +++++++ .../test_mips_error_compiler_016.s.snap | 48 ++++++++ .../test_mips_error_compiler_017.s.snap | 48 ++++++++ .../test_mips_error_compiler_018.s.snap | 48 ++++++++ .../test_mips_error_compiler_019.s.snap | 48 ++++++++ .../test_mips_error_compiler_021.s.snap | 42 +++++++ .../test_mips_error_compiler_022.s.snap | 42 +++++++ .../test_mips_error_compiler_023.s.snap | 48 ++++++++ .../test_mips_error_compiler_030.s.snap | 42 +++++++ .../test_riscv_error_compiler_001.s.snap | 60 ++++++++++ .../test_riscv_error_compiler_002.s.snap | 42 +++++++ .../test_riscv_error_compiler_003.s.snap | 84 ++++++++++++++ .../test_riscv_error_compiler_004.s.snap | 48 ++++++++ .../test_riscv_error_compiler_005.s.snap | 48 ++++++++ .../test_riscv_error_compiler_006.s.snap | 84 ++++++++++++++ .../test_riscv_error_compiler_007.s.snap | 48 ++++++++ .../test_riscv_error_compiler_008.s.snap | 66 +++++++++++ .../test_riscv_error_compiler_009.s.snap | 84 ++++++++++++++ .../test_riscv_error_compiler_010.s.snap | 42 +++++++ .../test_riscv_error_compiler_014.s.snap | 42 +++++++ .../test_riscv_error_compiler_015.s.snap | 42 +++++++ .../test_riscv_error_compiler_016.s.snap | 48 ++++++++ .../test_riscv_error_compiler_017.s.snap | 48 ++++++++ .../test_riscv_error_compiler_018.s.snap | 48 ++++++++ .../test_riscv_error_compiler_019.s.snap | 48 ++++++++ .../test_riscv_error_compiler_021.s.snap | 42 +++++++ .../test_riscv_error_compiler_022.s.snap | 42 +++++++ .../test_riscv_error_compiler_023.s.snap | 48 ++++++++ .../test_riscv_error_compiler_030.s.snap | 42 +++++++ tests/arch/arch_utils.mts | 41 +++++++ tests/arch/mips/error.test.mts | 4 +- .../compiler/test_mips_error_compiler_001.out | 19 --- .../compiler/test_mips_error_compiler_002.out | 13 --- .../compiler/test_mips_error_compiler_003.out | 35 ------ .../compiler/test_mips_error_compiler_004.out | 15 --- .../compiler/test_mips_error_compiler_005.out | 15 --- .../compiler/test_mips_error_compiler_006.out | 27 ----- .../compiler/test_mips_error_compiler_007.out | 15 --- .../compiler/test_mips_error_compiler_008.out | 15 --- .../compiler/test_mips_error_compiler_009.out | 27 ----- .../compiler/test_mips_error_compiler_010.s | 4 +- .../compiler/test_mips_error_compiler_014.out | 13 --- .../compiler/test_mips_error_compiler_015.out | 13 --- .../compiler/test_mips_error_compiler_016.out | 15 --- .../compiler/test_mips_error_compiler_017.out | 15 --- .../compiler/test_mips_error_compiler_018.out | 15 --- .../compiler/test_mips_error_compiler_018.s | 3 +- .../compiler/test_mips_error_compiler_019.out | 15 --- .../compiler/test_mips_error_compiler_021.out | 13 --- .../compiler/test_mips_error_compiler_022.out | 13 --- .../compiler/test_mips_error_compiler_023.out | 15 --- .../compiler/test_mips_error_compiler_030.out | 13 --- .../compiler/test_mips_error_compiler_030.s | 8 ++ tests/arch/riscv/error.test.mts | 4 +- .../test_riscv_error_compiler_001.out | 19 --- .../test_riscv_error_compiler_002.out | 13 --- .../test_riscv_error_compiler_003.out | 27 ----- .../test_riscv_error_compiler_004.out | 15 --- .../test_riscv_error_compiler_005.out | 15 --- .../test_riscv_error_compiler_006.out | 27 ----- .../test_riscv_error_compiler_007.out | 15 --- .../test_riscv_error_compiler_008.out | 21 ---- .../test_riscv_error_compiler_009.out | 27 ----- .../compiler/test_riscv_error_compiler_010.s | 4 +- .../test_riscv_error_compiler_014.out | 13 --- .../test_riscv_error_compiler_015.out | 13 --- .../test_riscv_error_compiler_016.out | 15 --- .../test_riscv_error_compiler_017.out | 15 --- .../test_riscv_error_compiler_018.out | 15 --- .../test_riscv_error_compiler_019.out | 15 --- .../test_riscv_error_compiler_021.out | 13 --- .../test_riscv_error_compiler_022.out | 13 --- .../test_riscv_error_compiler_023.out | 15 --- .../test_riscv_error_compiler_030.out | 13 --- .../compiler/test_riscv_error_compiler_030.s | 8 ++ tests/unit/arch/simulator-test-utils.mts | 9 +- 87 files changed, 2191 insertions(+), 652 deletions(-) create mode 100644 tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_001.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_002.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_003.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_004.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_005.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_006.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_007.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_008.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_009.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_010.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_014.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_015.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_016.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_017.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_018.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_019.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_021.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_022.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_023.s.snap create mode 100644 tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_030.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_001.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_002.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_003.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_004.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_005.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_006.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_007.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_008.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_009.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_010.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_014.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_015.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_016.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_017.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_018.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_019.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_021.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_022.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_023.s.snap create mode 100644 tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_030.s.snap delete mode 100644 tests/arch/mips/error/compiler/test_mips_error_compiler_001.out delete mode 100644 tests/arch/mips/error/compiler/test_mips_error_compiler_002.out delete mode 100644 tests/arch/mips/error/compiler/test_mips_error_compiler_003.out delete mode 100644 tests/arch/mips/error/compiler/test_mips_error_compiler_004.out delete mode 100644 tests/arch/mips/error/compiler/test_mips_error_compiler_005.out delete mode 100644 tests/arch/mips/error/compiler/test_mips_error_compiler_006.out delete mode 100644 tests/arch/mips/error/compiler/test_mips_error_compiler_007.out delete mode 100644 tests/arch/mips/error/compiler/test_mips_error_compiler_008.out delete mode 100644 tests/arch/mips/error/compiler/test_mips_error_compiler_009.out delete mode 100644 tests/arch/mips/error/compiler/test_mips_error_compiler_014.out delete mode 100644 tests/arch/mips/error/compiler/test_mips_error_compiler_015.out delete mode 100644 tests/arch/mips/error/compiler/test_mips_error_compiler_016.out delete mode 100644 tests/arch/mips/error/compiler/test_mips_error_compiler_017.out delete mode 100644 tests/arch/mips/error/compiler/test_mips_error_compiler_018.out delete mode 100644 tests/arch/mips/error/compiler/test_mips_error_compiler_019.out delete mode 100644 tests/arch/mips/error/compiler/test_mips_error_compiler_021.out delete mode 100644 tests/arch/mips/error/compiler/test_mips_error_compiler_022.out delete mode 100644 tests/arch/mips/error/compiler/test_mips_error_compiler_023.out delete mode 100644 tests/arch/mips/error/compiler/test_mips_error_compiler_030.out delete mode 100644 tests/arch/riscv/error/compiler/test_riscv_error_compiler_001.out delete mode 100644 tests/arch/riscv/error/compiler/test_riscv_error_compiler_002.out delete mode 100644 tests/arch/riscv/error/compiler/test_riscv_error_compiler_003.out delete mode 100644 tests/arch/riscv/error/compiler/test_riscv_error_compiler_004.out delete mode 100644 tests/arch/riscv/error/compiler/test_riscv_error_compiler_005.out delete mode 100644 tests/arch/riscv/error/compiler/test_riscv_error_compiler_006.out delete mode 100644 tests/arch/riscv/error/compiler/test_riscv_error_compiler_007.out delete mode 100644 tests/arch/riscv/error/compiler/test_riscv_error_compiler_008.out delete mode 100644 tests/arch/riscv/error/compiler/test_riscv_error_compiler_009.out delete mode 100644 tests/arch/riscv/error/compiler/test_riscv_error_compiler_014.out delete mode 100644 tests/arch/riscv/error/compiler/test_riscv_error_compiler_015.out delete mode 100644 tests/arch/riscv/error/compiler/test_riscv_error_compiler_016.out delete mode 100644 tests/arch/riscv/error/compiler/test_riscv_error_compiler_017.out delete mode 100644 tests/arch/riscv/error/compiler/test_riscv_error_compiler_018.out delete mode 100644 tests/arch/riscv/error/compiler/test_riscv_error_compiler_019.out delete mode 100644 tests/arch/riscv/error/compiler/test_riscv_error_compiler_021.out delete mode 100644 tests/arch/riscv/error/compiler/test_riscv_error_compiler_022.out delete mode 100644 tests/arch/riscv/error/compiler/test_riscv_error_compiler_023.out delete mode 100644 tests/arch/riscv/error/compiler/test_riscv_error_compiler_030.out diff --git a/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_001.s.snap b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_001.s.snap new file mode 100644 index 000000000..c5f09d8e6 --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_001.s.snap @@ -0,0 +1,60 @@ +export const snapshot = {}; + +snapshot[`mips/error/compiler/test_mips_error_compiler_001.s 1`] = ` +{ + column: 4, + errorText: "[E12] Error: Label A is already defined", + line: 9, +} +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_001.s 2`] = ` +"[E12] Error: Label A is already defined + ╭─[ assembly:9:4 ] + │ + 7 │ A: .word -1 + │ ─┬ + │ ╰── Note: Label also defined here + │ + 9 │ A: .half 23 + │ ─┬ + │ ╰── Duplicate label + │ + │ Help: Consider renaming either of the labels +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_001.s 3`] = ` +"[E12] Error: Label A is already defined + ╭─[ assembly:9:4 ] + + 7 │ A: .word -1 + ─┬ + ╰── Note: Label also defined here + + 9 │ A: .half 23 + ─┬ + ╰── Duplicate label + + Help: Consider renaming either of the labels +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_001.s 4`] = ` +"[E12] Error: Label A is already defined + ╭─[ assembly:9:4 ] + │ + 7 │    A:    .word -1 +  │ ─┬ +  │ ╰── Note: Label also defined here +  │ + 9 │    A:    .half 23 +  │ ─┬ +  │ ╰── Duplicate label +  │ +  │ Help: Consider renaming either of the labels +───╯ +" +`; diff --git a/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_002.s.snap b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_002.s.snap new file mode 100644 index 000000000..c367c3661 --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_002.s.snap @@ -0,0 +1,42 @@ +export const snapshot = {}; + +snapshot[`mips/error/compiler/test_mips_error_compiler_002.s 1`] = ` +{ + column: 4, + errorText: "[E02] Error: Instruction suma isn't defined", + line: 12, +} +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_002.s 2`] = ` +"[E02] Error: Instruction suma isn't defined + ╭─[ assembly:12:4 ] + │ + 12 │ suma \$t0, \$t1, \$t2 + │ ──┬─ + │ ╰─── Unknown instruction +────╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_002.s 3`] = ` +"[E02] Error: Instruction suma isn't defined + ╭─[ assembly:12:4 ] + + 12 │ suma \$t0, \$t1, \$t2 + ──┬─ + ╰─── Unknown instruction +────╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_002.s 4`] = ` +"[E02] Error: Instruction suma isn't defined + ╭─[ assembly:12:4 ] + │ + 12 │    suma \$t0, \$t1, \$t2 +  │ ──┬─ +  │ ╰─── Unknown instruction +────╯ +" +`; diff --git a/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_003.s.snap b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_003.s.snap new file mode 100644 index 000000000..56a5ac36a --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_003.s.snap @@ -0,0 +1,108 @@ +export const snapshot = {}; + +snapshot[`mips/error/compiler/test_mips_error_compiler_003.s 1`] = ` +{ + column: 8, + errorText: "[E09] Error: Incorrect instruction syntax", + line: 12, +} +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_003.s 2`] = ` +"[E09] Error: Incorrect instruction syntax + ╭─[ assembly:12:8 ] + │ + 12 │ add 25, \$t1, 12 + │ ─────┬───── + │ ╰─────── Incorrect syntax + │ + │ Note: Allowed formats: + │ opcode \$rd, \$rt, \$rs + │ opcode \$rs, \$rt, inm +────╯ + +The syntax opcode \$rd, \$rt, \$rs failed with the following reason: +Error: found integer (25) but expected \$ + ╭─[ assembly:12:8 ] + │ + 12 │ add 25, \$t1, 12 + │ ─┬ + │ ╰── Unexpected input +────╯ + +The syntax opcode \$rs, \$rt, inm failed with the following reason: +Error: found integer (25) but expected \$ + ╭─[ assembly:12:8 ] + │ + 12 │ add 25, \$t1, 12 + │ ─┬ + │ ╰── Unexpected input +────╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_003.s 3`] = ` +"[E09] Error: Incorrect instruction syntax + ╭─[ assembly:12:8 ] + + 12 │ add 25, \$t1, 12 + ─────┬───── + ╰─────── Incorrect syntax + + Note: Allowed formats: + opcode \$rd, \$rt, \$rs + opcode \$rs, \$rt, inm +────╯ + +The syntax opcode \$rd, \$rt, \$rs failed with the following reason: +Error: found integer (25) but expected \$ + ╭─[ assembly:12:8 ] + + 12 │ add 25, \$t1, 12 + ─┬ + ╰── Unexpected input +────╯ + +The syntax opcode \$rs, \$rt, inm failed with the following reason: +Error: found integer (25) but expected \$ + ╭─[ assembly:12:8 ] + + 12 │ add 25, \$t1, 12 + ─┬ + ╰── Unexpected input +────╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_003.s 4`] = ` +"[E09] Error: Incorrect instruction syntax + ╭─[ assembly:12:8 ] + │ + 12 │    add 25, \$t1, 12 +  │ ─────┬───── +  │ ╰─────── Incorrect syntax +  │ +  │ Note: Allowed formats: +  │ opcode \$rd, \$rt, \$rs +  │ opcode \$rs, \$rt, inm +────╯ + +The syntax opcode \$rd, \$rt, \$rs failed with the following reason: +Error: found integer (25) but expected \$ + ╭─[ assembly:12:8 ] + │ + 12 │    add 25, \$t1, 12 +  │ ─┬ +  │ ╰── Unexpected input +────╯ + +The syntax opcode \$rs, \$rt, inm failed with the following reason: +Error: found integer (25) but expected \$ + ╭─[ assembly:12:8 ] + │ + 12 │    add 25, \$t1, 12 +  │ ─┬ +  │ ╰── Unexpected input +────╯ +" +`; diff --git a/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_004.s.snap b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_004.s.snap new file mode 100644 index 000000000..f9b2e9478 --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_004.s.snap @@ -0,0 +1,48 @@ +export const snapshot = {}; + +snapshot[`mips/error/compiler/test_mips_error_compiler_004.s 1`] = ` +{ + column: 19, + errorText: "[E05] Error: Register s50 isn't defined in file type Integer", + line: 12, +} +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_004.s 2`] = ` +"[E05] Error: Register s50 isn't defined in file type Integer + ╭─[ assembly:12:19 ] + │ + 12 │ add \$t0, \$t1, \$s50 + │ ─┬─ + │ ╰─── Unknown register + │ + │ Help: Did you mean s0 or s5? +────╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_004.s 3`] = ` +"[E05] Error: Register s50 isn't defined in file type Integer + ╭─[ assembly:12:19 ] + + 12 │ add \$t0, \$t1, \$s50 + ─┬─ + ╰─── Unknown register + + Help: Did you mean s0 or s5? +────╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_004.s 4`] = ` +"[E05] Error: Register s50 isn't defined in file type Integer + ╭─[ assembly:12:19 ] + │ + 12 │    add \$t0, \$t1, \$s50 +  │ ─┬─ +  │ ╰─── Unknown register +  │ +  │ Help: Did you mean s0 or s5? +────╯ +" +`; diff --git a/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_005.s.snap b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_005.s.snap new file mode 100644 index 000000000..aa4f3f98f --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_005.s.snap @@ -0,0 +1,48 @@ +export const snapshot = {}; + +snapshot[`mips/error/compiler/test_mips_error_compiler_005.s 1`] = ` +{ + column: 19, + errorText: "[E23] Error: Value 291 is outside of the valid range of the field", + line: 7, +} +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_005.s 2`] = ` +"[E23] Error: Value 291 is outside of the valid range of the field + ╭─[ assembly:7:19 ] + │ + 7 │ a: .byte 0x123 + │ ──┬── + │ ╰──── This expression has value 291 + │ + │ Note: Allowed range is [-128, 255] +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_005.s 3`] = ` +"[E23] Error: Value 291 is outside of the valid range of the field + ╭─[ assembly:7:19 ] + + 7 │ a: .byte 0x123 + ──┬── + ╰──── This expression has value 291 + + Note: Allowed range is [-128, 255] +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_005.s 4`] = ` +"[E23] Error: Value 291 is outside of the valid range of the field + ╭─[ assembly:7:19 ] + │ + 7 │     a:      .byte 0x123 +  │ ──┬── +  │ ╰──── This expression has value 291 +  │ +  │ Note: Allowed range is [-128, 255] +───╯ +" +`; diff --git a/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_006.s.snap b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_006.s.snap new file mode 100644 index 000000000..3dd5704d3 --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_006.s.snap @@ -0,0 +1,84 @@ +export const snapshot = {}; + +snapshot[`mips/error/compiler/test_mips_error_compiler_006.s 1`] = ` +{ + column: 7, + errorText: "[E09] Error: Incorrect instruction syntax", + line: 11, +} +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_006.s 2`] = ` +"[E09] Error: Incorrect instruction syntax + ╭─[ assembly:11:7 ] + │ + 11 │ li \$t0, 0xhello + │ ──────┬───── + │ ╰─────── Incorrect syntax + │ + │ Note: Allowed formats: + │ opcode \$rd, val +────╯ + +The syntax opcode \$rd, val failed with the following reason: +Error: found identifier (xhello) but expected binary operator or end of input + ╭─[ assembly:11:13 ] + │ + 11 │ li \$t0, 0xhello + │ ┬───┬── + │ ╰──────── While parsing this expression + │ │ + │ ╰──── Unexpected input +────╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_006.s 3`] = ` +"[E09] Error: Incorrect instruction syntax + ╭─[ assembly:11:7 ] + + 11 │ li \$t0, 0xhello + ──────┬───── + ╰─────── Incorrect syntax + + Note: Allowed formats: + opcode \$rd, val +────╯ + +The syntax opcode \$rd, val failed with the following reason: +Error: found identifier (xhello) but expected binary operator or end of input + ╭─[ assembly:11:13 ] + + 11 │ li \$t0, 0xhello + ───┬── + ╰──────── While parsing this expression + + ╰──── Unexpected input +────╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_006.s 4`] = ` +"[E09] Error: Incorrect instruction syntax + ╭─[ assembly:11:7 ] + │ + 11 │    li \$t0, 0xhello +  │ ──────┬───── +  │ ╰─────── Incorrect syntax +  │ +  │ Note: Allowed formats: +  │ opcode \$rd, val +────╯ + +The syntax opcode \$rd, val failed with the following reason: +Error: found identifier (xhello) but expected binary operator or end of input + ╭─[ assembly:11:13 ] + │ + 11 │    li \$t0, 0xhello +  │ ┬───┬── +  │ ╰──────── While parsing this expression +  │ │ +  │ ╰──── Unexpected input +────╯ +" +`; diff --git a/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_007.s.snap b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_007.s.snap new file mode 100644 index 000000000..b1d9d4502 --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_007.s.snap @@ -0,0 +1,48 @@ +export const snapshot = {}; + +snapshot[`mips/error/compiler/test_mips_error_compiler_007.s 1`] = ` +{ + column: 7, + errorText: "[E03] Error: Label mains isn't defined", + line: 11, +} +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_007.s 2`] = ` +"[E03] Error: Label mains isn't defined + ╭─[ assembly:11:7 ] + │ + 11 │ j mains + │ ──┬── + │ ╰──── Unknown label + │ + │ Help: Did you mean main? +────╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_007.s 3`] = ` +"[E03] Error: Label mains isn't defined + ╭─[ assembly:11:7 ] + + 11 │ j mains + ──┬── + ╰──── Unknown label + + Help: Did you mean main? +────╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_007.s 4`] = ` +"[E03] Error: Label mains isn't defined + ╭─[ assembly:11:7 ] + │ + 11 │     j mains +  │ ──┬── +  │ ╰──── Unknown label +  │ +  │ Help: Did you mean main? +────╯ +" +`; diff --git a/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_008.s.snap b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_008.s.snap new file mode 100644 index 000000000..f5c44bc87 --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_008.s.snap @@ -0,0 +1,48 @@ +export const snapshot = {}; + +snapshot[`mips/error/compiler/test_mips_error_compiler_008.s 1`] = ` +{ + column: 6, + errorText: "[E23] Error: Value 305419896 is outside of the valid range of the field", + line: 8, +} +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_008.s 2`] = ` +"[E23] Error: Value 305419896 is outside of the valid range of the field + ╭─[ assembly:8:6 ] + │ + 8 │ j 0x12345678 + │ ─────┬──── + │ ╰────── This expression has value 305419896 + │ + │ Note: Allowed range is [-33554432, 33554431] +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_008.s 3`] = ` +"[E23] Error: Value 305419896 is outside of the valid range of the field + ╭─[ assembly:8:6 ] + + 8 │ j 0x12345678 + ─────┬──── + ╰────── This expression has value 305419896 + + Note: Allowed range is [-33554432, 33554431] +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_008.s 4`] = ` +"[E23] Error: Value 305419896 is outside of the valid range of the field + ╭─[ assembly:8:6 ] + │ + 8 │    j 0x12345678 +  │ ─────┬──── +  │ ╰────── This expression has value 305419896 +  │ +  │ Note: Allowed range is [-33554432, 33554431] +───╯ +" +`; diff --git a/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_009.s.snap b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_009.s.snap new file mode 100644 index 000000000..323daf058 --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_009.s.snap @@ -0,0 +1,84 @@ +export const snapshot = {}; + +snapshot[`mips/error/compiler/test_mips_error_compiler_009.s 1`] = ` +{ + column: 6, + errorText: "[E09] Error: Incorrect instruction syntax", + line: 8, +} +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_009.s 2`] = ` +"[E09] Error: Incorrect instruction syntax + ╭─[ assembly:8:6 ] + │ + 8 │ j 0xhello + │ ───┬─── + │ ╰───── Incorrect syntax + │ + │ Note: Allowed formats: + │ opcode addr +───╯ + +The syntax opcode addr failed with the following reason: +Error: found identifier (xhello) but expected binary operator or end of input + ╭─[ assembly:8:7 ] + │ + 8 │ j 0xhello + │ ┬───┬── + │ ╰──────── While parsing this expression + │ │ + │ ╰──── Unexpected input +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_009.s 3`] = ` +"[E09] Error: Incorrect instruction syntax + ╭─[ assembly:8:6 ] + + 8 │ j 0xhello + ───┬─── + ╰───── Incorrect syntax + + Note: Allowed formats: + opcode addr +───╯ + +The syntax opcode addr failed with the following reason: +Error: found identifier (xhello) but expected binary operator or end of input + ╭─[ assembly:8:7 ] + + 8 │ j 0xhello + ───┬── + ╰──────── While parsing this expression + + ╰──── Unexpected input +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_009.s 4`] = ` +"[E09] Error: Incorrect instruction syntax + ╭─[ assembly:8:6 ] + │ + 8 │    j 0xhello +  │ ───┬─── +  │ ╰───── Incorrect syntax +  │ +  │ Note: Allowed formats: +  │ opcode addr +───╯ + +The syntax opcode addr failed with the following reason: +Error: found identifier (xhello) but expected binary operator or end of input + ╭─[ assembly:8:7 ] + │ + 8 │    j 0xhello +  │ ┬───┬── +  │ ╰──────── While parsing this expression +  │ │ +  │ ╰──── Unexpected input +───╯ +" +`; diff --git a/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_010.s.snap b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_010.s.snap new file mode 100644 index 000000000..7487173b4 --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_010.s.snap @@ -0,0 +1,42 @@ +export const snapshot = {}; + +snapshot[`mips/error/compiler/test_mips_error_compiler_010.s 1`] = ` +{ + column: 17, + errorText: "[E16] Error: Data memory segment is full", + line: 8, +} +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_010.s 2`] = ` +"[E16] Error: Data memory segment is full + ╭─[ assembly:8:17 ] + │ + 8 │ spa: .space 16 * 1024 * 1024 * 1024 + │ ───────────┬─────────── + │ ╰───────────── This element doesn't fit in the available space +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_010.s 3`] = ` +"[E16] Error: Data memory segment is full + ╭─[ assembly:8:17 ] + + 8 │ spa: .space 16 * 1024 * 1024 * 1024 + ───────────┬─────────── + ╰───────────── This element doesn't fit in the available space +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_010.s 4`] = ` +"[E16] Error: Data memory segment is full + ╭─[ assembly:8:17 ] + │ + 8 │     spa:    .space 16 * 1024 * 1024 * 1024 +  │ ───────────┬─────────── +  │ ╰───────────── This element doesn't fit in the available space +───╯ +" +`; diff --git a/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_014.s.snap b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_014.s.snap new file mode 100644 index 000000000..55c049f65 --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_014.s.snap @@ -0,0 +1,42 @@ +export const snapshot = {}; + +snapshot[`mips/error/compiler/test_mips_error_compiler_014.s 1`] = ` +{ + column: 14, + errorText: "[E01] Error: Directive .directive isn't defined", + line: 8, +} +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_014.s 2`] = ` +"[E01] Error: Directive .directive isn't defined + ╭─[ assembly:8:14 ] + │ + 8 │ example: .directive 221 + │ ─────┬──── + │ ╰────── Unknown directive +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_014.s 3`] = ` +"[E01] Error: Directive .directive isn't defined + ╭─[ assembly:8:14 ] + + 8 │ example: .directive 221 + ─────┬──── + ╰────── Unknown directive +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_014.s 4`] = ` +"[E01] Error: Directive .directive isn't defined + ╭─[ assembly:8:14 ] + │ + 8 │     example:    .directive 221 +  │ ─────┬──── +  │ ╰────── Unknown directive +───╯ +" +`; diff --git a/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_015.s.snap b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_015.s.snap new file mode 100644 index 000000000..3607075e8 --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_015.s.snap @@ -0,0 +1,42 @@ +export const snapshot = {}; + +snapshot[`mips/error/compiler/test_mips_error_compiler_015.s 1`] = ` +{ + column: 22, + errorText: "[E03] Error: Label hello isn't defined", + line: 8, +} +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_015.s 2`] = ` +"[E03] Error: Label hello isn't defined + ╭─[ assembly:8:22 ] + │ + 8 │ example: .word hello + │ ──┬── + │ ╰──── Unknown label +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_015.s 3`] = ` +"[E03] Error: Label hello isn't defined + ╭─[ assembly:8:22 ] + + 8 │ example: .word hello + ──┬── + ╰──── Unknown label +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_015.s 4`] = ` +"[E03] Error: Label hello isn't defined + ╭─[ assembly:8:22 ] + │ + 8 │     example:   .word hello +  │ ──┬── +  │ ╰──── Unknown label +───╯ +" +`; diff --git a/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_016.s.snap b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_016.s.snap new file mode 100644 index 000000000..9f9d44ae0 --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_016.s.snap @@ -0,0 +1,48 @@ +export const snapshot = {}; + +snapshot[`mips/error/compiler/test_mips_error_compiler_016.s 1`] = ` +{ + column: 32, + errorText: "Compilation error", + line: 8, +} +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_016.s 2`] = ` +'Error: Unterminated string literal + ╭─[ assembly:8:32 ] + │ + 8 │ example: .ascii hello world" + │ ───┬─┬ + │ ╰──── While parsing this identifier + │ │ + │ ╰── Caused by this +───╯ +' +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_016.s 3`] = ` +"Error: Unterminated string literal + ╭─[ assembly:8:32 ] + + 8 │ example: .ascii hello world" + ───┬─ + ╰──── While parsing this identifier + + ╰── Caused by this +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_016.s 4`] = ` +'Error: Unterminated string literal + ╭─[ assembly:8:32 ] + │ + 8 │     example:    .ascii hello world" +  │ ───┬─┬ +  │ ╰──── While parsing this identifier +  │ │ +  │ ╰── Caused by this +───╯ +' +`; diff --git a/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_017.s.snap b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_017.s.snap new file mode 100644 index 000000000..649ff19cd --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_017.s.snap @@ -0,0 +1,48 @@ +export const snapshot = {}; + +snapshot[`mips/error/compiler/test_mips_error_compiler_017.s 1`] = ` +{ + column: 33, + errorText: "Compilation error", + line: 8, +} +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_017.s 2`] = ` +'Error: Unterminated string literal + ╭─[ assembly:8:33 ] + │ + 8 │ example: .ascii "hello world + │ ──────┬─────┬ + │ ╰──────── While parsing this string + │ │ + │ ╰── Caused by this +───╯ +' +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_017.s 3`] = ` +"Error: Unterminated string literal + ╭─[ assembly:8:33 ] + + 8 │ example: .ascii "hello world + ──────┬───── + ╰──────── While parsing this string + + ╰── Caused by this +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_017.s 4`] = ` +'Error: Unterminated string literal + ╭─[ assembly:8:33 ] + │ + 8 │     example:    .ascii "hello world +  │ ──────┬─────┬ +  │ ╰──────── While parsing this string +  │ │ +  │ ╰── Caused by this +───╯ +' +`; diff --git a/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_018.s.snap b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_018.s.snap new file mode 100644 index 000000000..139d3c109 --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_018.s.snap @@ -0,0 +1,48 @@ +export const snapshot = {}; + +snapshot[`mips/error/compiler/test_mips_error_compiler_018.s 1`] = ` +{ + column: 20, + errorText: "[E23] Error: Value 74565 is outside of the valid range of the field", + line: 7, +} +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_018.s 2`] = ` +"[E23] Error: Value 74565 is outside of the valid range of the field + ╭─[ assembly:7:20 ] + │ + 7 │ example: .half 0x12345 + │ ───┬─── + │ ╰───── This expression has value 74565 + │ + │ Note: Allowed range is [-32768, 65535] +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_018.s 3`] = ` +"[E23] Error: Value 74565 is outside of the valid range of the field + ╭─[ assembly:7:20 ] + + 7 │ example: .half 0x12345 + ───┬─── + ╰───── This expression has value 74565 + + Note: Allowed range is [-32768, 65535] +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_018.s 4`] = ` +"[E23] Error: Value 74565 is outside of the valid range of the field + ╭─[ assembly:7:20 ] + │ + 7 │   example:   .half 0x12345 +  │ ───┬─── +  │ ╰───── This expression has value 74565 +  │ +  │ Note: Allowed range is [-32768, 65535] +───╯ +" +`; diff --git a/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_019.s.snap b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_019.s.snap new file mode 100644 index 000000000..136f4cce4 --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_019.s.snap @@ -0,0 +1,48 @@ +export const snapshot = {}; + +snapshot[`mips/error/compiler/test_mips_error_compiler_019.s 1`] = ` +{ + column: 12, + errorText: "Compilation error", + line: 7, +} +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_019.s 2`] = ` +"Error: found identifier (x) but expected ,, \\\\n, binary operator, or end of input + ╭─[ assembly:7:12 ] + │ + 7 │ .byte 0x + │ ┬┬ + │ ╰─── While parsing this expression + │ │ + │ ╰── Unexpected input +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_019.s 3`] = ` +"Error: found identifier (x) but expected ,, \\\\n, binary operator, or end of input + ╭─[ assembly:7:12 ] + + 7 │ .byte 0x + + ╰─── While parsing this expression + + ╰── Unexpected input +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_019.s 4`] = ` +"Error: found identifier (x) but expected ,, \\\\n, binary operator, or end of input + ╭─[ assembly:7:12 ] + │ + 7 │     .byte 0x +  │ ┬┬ +  │ ╰─── While parsing this expression +  │ │ +  │ ╰── Unexpected input +───╯ +" +`; diff --git a/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_021.s.snap b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_021.s.snap new file mode 100644 index 000000000..a96c36841 --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_021.s.snap @@ -0,0 +1,42 @@ +export const snapshot = {}; + +snapshot[`mips/error/compiler/test_mips_error_compiler_021.s 1`] = ` +{ + column: 21, + errorText: "[E17] Error: Data at address 0x200001 isn't aligned to size 2 nor word size 4", + line: 9, +} +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_021.s 2`] = ` +"[E17] Error: Data at address 0x200001 isn't aligned to size 2 nor word size 4 + ╭─[ assembly:9:21 ] + │ + 9 │ example2: .half 2 + │ ┬ + │ ╰── This value isn't aligned +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_021.s 3`] = ` +"[E17] Error: Data at address 0x200001 isn't aligned to size 2 nor word size 4 + ╭─[ assembly:9:21 ] + + 9 │ example2: .half 2 + + ╰── This value isn't aligned +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_021.s 4`] = ` +"[E17] Error: Data at address 0x200001 isn't aligned to size 2 nor word size 4 + ╭─[ assembly:9:21 ] + │ + 9 │     example2:   .half 2 +  │ ┬ +  │ ╰── This value isn't aligned +───╯ +" +`; diff --git a/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_022.s.snap b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_022.s.snap new file mode 100644 index 000000000..6b9f731eb --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_022.s.snap @@ -0,0 +1,42 @@ +export const snapshot = {}; + +snapshot[`mips/error/compiler/test_mips_error_compiler_022.s 1`] = ` +{ + column: 12, + errorText: "[E22] Error: Negative values aren't allowed here", + line: 7, +} +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_022.s 2`] = ` +"[E22] Error: Negative values aren't allowed here + ╭─[ assembly:7:12 ] + │ + 7 │ .space -10 + │ ─┬─ + │ ╰─── This expression has value -10 +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_022.s 3`] = ` +"[E22] Error: Negative values aren't allowed here + ╭─[ assembly:7:12 ] + + 7 │ .space -10 + ─┬─ + ╰─── This expression has value -10 +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_022.s 4`] = ` +"[E22] Error: Negative values aren't allowed here + ╭─[ assembly:7:12 ] + │ + 7 │     .space -10 +  │ ─┬─ +  │ ╰─── This expression has value -10 +───╯ +" +`; diff --git a/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_023.s.snap b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_023.s.snap new file mode 100644 index 000000000..06a04eb48 --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_023.s.snap @@ -0,0 +1,48 @@ +export const snapshot = {}; + +snapshot[`mips/error/compiler/test_mips_error_compiler_023.s 1`] = ` +{ + column: 20, + errorText: "[E10] Error: Incorrect amount of arguments, expected at least 1 but found 0", + line: 9, +} +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_023.s 2`] = ` +"[E10] Error: Incorrect amount of arguments, expected at least 1 but found 0 + ╭─[ assembly:9:20 ] + │ + 9 │ example2: .half + │ │ + │ ╰─ This directive has 0 arguments + │ + │ Help: Consider adding the missing 1 argument +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_023.s 3`] = ` +"[E10] Error: Incorrect amount of arguments, expected at least 1 but found 0 + ╭─[ assembly:9:20 ] + + 9 │ example2: .half + + ╰─ This directive has 0 arguments + + Help: Consider adding the missing 1 argument +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_023.s 4`] = ` +"[E10] Error: Incorrect amount of arguments, expected at least 1 but found 0 + ╭─[ assembly:9:20 ] + │ + 9 │    example2:    .half +  │ │ +  │ ╰─ This directive has 0 arguments +  │ +  │ Help: Consider adding the missing 1 argument +───╯ +" +`; diff --git a/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_030.s.snap b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_030.s.snap new file mode 100644 index 000000000..9a27e8733 --- /dev/null +++ b/tests/arch/__snapshots__/mips/error/compiler/test_mips_error_compiler_030.s.snap @@ -0,0 +1,42 @@ +export const snapshot = {}; + +snapshot[`mips/error/compiler/test_mips_error_compiler_030.s 1`] = ` +{ + column: 15, + errorText: "[E13] Error: Main label main not found", + line: 8, +} +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_030.s 2`] = ` +"[E13] Error: Main label main not found + ╭─[ assembly:8:15 ] + │ + 8 │ li \$t0, 10 + │ │ + │ ╰─ Consider adding a label called main to an instruction +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_030.s 3`] = ` +"[E13] Error: Main label main not found + ╭─[ assembly:8:15 ] + + 8 │ li \$t0, 10 + + ╰─ Consider adding a label called main to an instruction +───╯ +" +`; + +snapshot[`mips/error/compiler/test_mips_error_compiler_030.s 4`] = ` +"[E13] Error: Main label main not found + ╭─[ assembly:8:15 ] + │ + 8 │     li \$t0, 10 +  │ │ +  │ ╰─ Consider adding a label called main to an instruction +───╯ +" +`; diff --git a/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_001.s.snap b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_001.s.snap new file mode 100644 index 000000000..9aa54d348 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_001.s.snap @@ -0,0 +1,60 @@ +export const snapshot = {}; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_001.s 1`] = ` +{ + column: 2, + errorText: "[E12] Error: Label A is already defined", + line: 9, +} +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_001.s 2`] = ` +"[E12] Error: Label A is already defined + ╭─[ assembly:9:2 ] + │ + 7 │ A: .word -1 + │ ─┬ + │ ╰─────── Note: Label also defined here + │ + 9 │ A: .half 23 + │ ─┬ + │ ╰───── Duplicate label + │ + │ Help: Consider renaming either of the labels +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_001.s 3`] = ` +"[E12] Error: Label A is already defined + ╭─[ assembly:9:2 ] + + 7 │ A: .word -1 + ─┬ + ╰─────── Note: Label also defined here + + 9 │ A: .half 23 + ─┬ + ╰───── Duplicate label + + Help: Consider renaming either of the labels +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_001.s 4`] = ` +"[E12] Error: Label A is already defined + ╭─[ assembly:9:2 ] + │ + 7 │     A:       .word -1 +  │ ─┬ +  │ ╰─────── Note: Label also defined here +  │ + 9 │     A:     .half 23 +  │ ─┬ +  │ ╰───── Duplicate label +  │ +  │ Help: Consider renaming either of the labels +───╯ +" +`; diff --git a/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_002.s.snap b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_002.s.snap new file mode 100644 index 000000000..8e0d31393 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_002.s.snap @@ -0,0 +1,42 @@ +export const snapshot = {}; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_002.s 1`] = ` +{ + column: 2, + errorText: "[E02] Error: Instruction suma isn't defined", + line: 12, +} +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_002.s 2`] = ` +"[E02] Error: Instruction suma isn't defined + ╭─[ assembly:12:2 ] + │ + 12 │ suma t0, t1, t2 + │ ──┬─ + │ ╰─── Unknown instruction +────╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_002.s 3`] = ` +"[E02] Error: Instruction suma isn't defined + ╭─[ assembly:12:2 ] + + 12 │ suma t0, t1, t2 + ──┬─ + ╰─── Unknown instruction +────╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_002.s 4`] = ` +"[E02] Error: Instruction suma isn't defined + ╭─[ assembly:12:2 ] + │ + 12 │     suma t0, t1, t2 +  │ ──┬─ +  │ ╰─── Unknown instruction +────╯ +" +`; diff --git a/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_003.s.snap b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_003.s.snap new file mode 100644 index 000000000..96174480e --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_003.s.snap @@ -0,0 +1,84 @@ +export const snapshot = {}; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_003.s 1`] = ` +{ + column: 8, + errorText: "[E09] Error: Incorrect instruction syntax", + line: 12, +} +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_003.s 2`] = ` +"[E09] Error: Incorrect instruction syntax + ╭─[ assembly:12:8 ] + │ + 12 │ add t0, t1 + │ ───┬── + │ ╰──── Incorrect syntax + │ + │ Note: Allowed formats: + │ opcode rd, rs1, rs2 +────╯ + +The syntax opcode rd, rs1, rs2 failed with the following reason: +Error: found end of input but expected , or binary operator + ╭─[ assembly:12:14 ] + │ + 12 │ add t0, t1 + │ ─┬│ + │ ╰── While parsing this expression + │ │ + │ ╰─ Unexpected input +────╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_003.s 3`] = ` +"[E09] Error: Incorrect instruction syntax + ╭─[ assembly:12:8 ] + + 12 │ add t0, t1 + ───┬── + ╰──── Incorrect syntax + + Note: Allowed formats: + opcode rd, rs1, rs2 +────╯ + +The syntax opcode rd, rs1, rs2 failed with the following reason: +Error: found end of input but expected , or binary operator + ╭─[ assembly:12:14 ] + + 12 │ add t0, t1 + ─┬ + ╰── While parsing this expression + + ╰─ Unexpected input +────╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_003.s 4`] = ` +"[E09] Error: Incorrect instruction syntax + ╭─[ assembly:12:8 ] + │ + 12 │    add t0, t1 +  │ ───┬── +  │ ╰──── Incorrect syntax +  │ +  │ Note: Allowed formats: +  │ opcode rd, rs1, rs2 +────╯ + +The syntax opcode rd, rs1, rs2 failed with the following reason: +Error: found end of input but expected , or binary operator + ╭─[ assembly:12:14 ] + │ + 12 │    add t0, t1 +  │ ─┬│ +  │ ╰── While parsing this expression +  │ │ +  │ ╰─ Unexpected input +────╯ +" +`; diff --git a/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_004.s.snap b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_004.s.snap new file mode 100644 index 000000000..156e4eb2a --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_004.s.snap @@ -0,0 +1,48 @@ +export const snapshot = {}; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_004.s 1`] = ` +{ + column: 14, + errorText: "[E05] Error: Register s50 isn't defined in file type Integer", + line: 12, +} +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_004.s 2`] = ` +"[E05] Error: Register s50 isn't defined in file type Integer + ╭─[ assembly:12:14 ] + │ + 12 │ add t0, t1, s50 + │ ─┬─ + │ ╰─── Unknown register + │ + │ Help: Did you mean s0, s10, or s5? +────╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_004.s 3`] = ` +"[E05] Error: Register s50 isn't defined in file type Integer + ╭─[ assembly:12:14 ] + + 12 │ add t0, t1, s50 + ─┬─ + ╰─── Unknown register + + Help: Did you mean s0, s10, or s5? +────╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_004.s 4`] = ` +"[E05] Error: Register s50 isn't defined in file type Integer + ╭─[ assembly:12:14 ] + │ + 12 │     add t0, t1, s50 +  │ ─┬─ +  │ ╰─── Unknown register +  │ +  │ Help: Did you mean s0, s10, or s5? +────╯ +" +`; diff --git a/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_005.s.snap b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_005.s.snap new file mode 100644 index 000000000..7a023e6f5 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_005.s.snap @@ -0,0 +1,48 @@ +export const snapshot = {}; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_005.s 1`] = ` +{ + column: 19, + errorText: "[E23] Error: Value 291 is outside of the valid range of the field", + line: 7, +} +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_005.s 2`] = ` +"[E23] Error: Value 291 is outside of the valid range of the field + ╭─[ assembly:7:19 ] + │ + 7 │ a: .byte 0x123 + │ ──┬── + │ ╰──── This expression has value 291 + │ + │ Note: Allowed range is [-128, 255] +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_005.s 3`] = ` +"[E23] Error: Value 291 is outside of the valid range of the field + ╭─[ assembly:7:19 ] + + 7 │ a: .byte 0x123 + ──┬── + ╰──── This expression has value 291 + + Note: Allowed range is [-128, 255] +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_005.s 4`] = ` +"[E23] Error: Value 291 is outside of the valid range of the field + ╭─[ assembly:7:19 ] + │ + 7 │     a:      .byte 0x123 +  │ ──┬── +  │ ╰──── This expression has value 291 +  │ +  │ Note: Allowed range is [-128, 255] +───╯ +" +`; diff --git a/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_006.s.snap b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_006.s.snap new file mode 100644 index 000000000..93dce8464 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_006.s.snap @@ -0,0 +1,84 @@ +export const snapshot = {}; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_006.s 1`] = ` +{ + column: 7, + errorText: "[E09] Error: Incorrect instruction syntax", + line: 11, +} +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_006.s 2`] = ` +"[E09] Error: Incorrect instruction syntax + ╭─[ assembly:11:7 ] + │ + 11 │ li t0, 0xhello + │ ─────┬───── + │ ╰─────── Incorrect syntax + │ + │ Note: Allowed formats: + │ opcode rd, val +────╯ + +The syntax opcode rd, val failed with the following reason: +Error: found identifier (xhello) but expected binary operator or end of input + ╭─[ assembly:11:12 ] + │ + 11 │ li t0, 0xhello + │ ┬───┬── + │ ╰──────── While parsing this expression + │ │ + │ ╰──── Unexpected input +────╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_006.s 3`] = ` +"[E09] Error: Incorrect instruction syntax + ╭─[ assembly:11:7 ] + + 11 │ li t0, 0xhello + ─────┬───── + ╰─────── Incorrect syntax + + Note: Allowed formats: + opcode rd, val +────╯ + +The syntax opcode rd, val failed with the following reason: +Error: found identifier (xhello) but expected binary operator or end of input + ╭─[ assembly:11:12 ] + + 11 │ li t0, 0xhello + ───┬── + ╰──────── While parsing this expression + + ╰──── Unexpected input +────╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_006.s 4`] = ` +"[E09] Error: Incorrect instruction syntax + ╭─[ assembly:11:7 ] + │ + 11 │    li t0, 0xhello +  │ ─────┬───── +  │ ╰─────── Incorrect syntax +  │ +  │ Note: Allowed formats: +  │ opcode rd, val +────╯ + +The syntax opcode rd, val failed with the following reason: +Error: found identifier (xhello) but expected binary operator or end of input + ╭─[ assembly:11:12 ] + │ + 11 │    li t0, 0xhello +  │ ┬───┬── +  │ ╰──────── While parsing this expression +  │ │ +  │ ╰──── Unexpected input +────╯ +" +`; diff --git a/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_007.s.snap b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_007.s.snap new file mode 100644 index 000000000..4e7d94e16 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_007.s.snap @@ -0,0 +1,48 @@ +export const snapshot = {}; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_007.s 1`] = ` +{ + column: 7, + errorText: "[E03] Error: Label mains isn't defined", + line: 11, +} +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_007.s 2`] = ` +"[E03] Error: Label mains isn't defined + ╭─[ assembly:11:7 ] + │ + 11 │ j mains + │ ──┬── + │ ╰──── Unknown label + │ + │ Help: Did you mean main? +────╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_007.s 3`] = ` +"[E03] Error: Label mains isn't defined + ╭─[ assembly:11:7 ] + + 11 │ j mains + ──┬── + ╰──── Unknown label + + Help: Did you mean main? +────╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_007.s 4`] = ` +"[E03] Error: Label mains isn't defined + ╭─[ assembly:11:7 ] + │ + 11 │     j mains +  │ ──┬── +  │ ╰──── Unknown label +  │ +  │ Help: Did you mean main? +────╯ +" +`; diff --git a/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_008.s.snap b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_008.s.snap new file mode 100644 index 000000000..e64a0476b --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_008.s.snap @@ -0,0 +1,66 @@ +export const snapshot = {}; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_008.s 1`] = ` +{ + column: 4, + errorText: "[E23] Error: Value 305419896 is outside of the valid range of the field", + line: 8, +} +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_008.s 2`] = ` +"[E23] Error: Value 305419896 is outside of the valid range of the field + ╭─[ :1:17 ] + │ + 1 │ beq zero, zero, off; + │ ─┬─ + │ ╰─── This expression has value 305419896 + │ + ├─[ assembly:8:4 ] + │ + 8 │ j 0x12345678 + │ ──────┬───── + │ ╰─────── Generated by this pseudoinstruction + │ + │ Note: Allowed range is [-4096, 4095] +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_008.s 3`] = ` +"[E23] Error: Value 305419896 is outside of the valid range of the field + ╭─[ <expansion 1>:1:17 ] + + 1 │ beq zero, zero, off; + ─┬─ + ╰─── This expression has value 305419896 + + ├─[ assembly:8:4 ] + + 8 │ j 0x12345678 + ──────┬───── + ╰─────── Generated by this pseudoinstruction + + Note: Allowed range is [-4096, 4095] +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_008.s 4`] = ` +"[E23] Error: Value 305419896 is outside of the valid range of the field + ╭─[ :1:17 ] + │ + 1 │ beq zero, zero, off; +  │ ─┬─ +  │ ╰─── This expression has value 305419896 + │ + ├─[ assembly:8:4 ] + │ + 8 │    j 0x12345678 +  │ ──────┬───── +  │ ╰─────── Generated by this pseudoinstruction +  │ +  │ Note: Allowed range is [-4096, 4095] +───╯ +" +`; diff --git a/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_009.s.snap b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_009.s.snap new file mode 100644 index 000000000..91590d5d8 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_009.s.snap @@ -0,0 +1,84 @@ +export const snapshot = {}; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_009.s 1`] = ` +{ + column: 6, + errorText: "[E09] Error: Incorrect instruction syntax", + line: 8, +} +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_009.s 2`] = ` +"[E09] Error: Incorrect instruction syntax + ╭─[ assembly:8:6 ] + │ + 8 │ j 0xhello + │ ───┬─── + │ ╰───── Incorrect syntax + │ + │ Note: Allowed formats: + │ opcode off +───╯ + +The syntax opcode off failed with the following reason: +Error: found identifier (xhello) but expected binary operator or end of input + ╭─[ assembly:8:7 ] + │ + 8 │ j 0xhello + │ ┬───┬── + │ ╰──────── While parsing this expression + │ │ + │ ╰──── Unexpected input +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_009.s 3`] = ` +"[E09] Error: Incorrect instruction syntax + ╭─[ assembly:8:6 ] + + 8 │ j 0xhello + ───┬─── + ╰───── Incorrect syntax + + Note: Allowed formats: + opcode off +───╯ + +The syntax opcode off failed with the following reason: +Error: found identifier (xhello) but expected binary operator or end of input + ╭─[ assembly:8:7 ] + + 8 │ j 0xhello + ───┬── + ╰──────── While parsing this expression + + ╰──── Unexpected input +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_009.s 4`] = ` +"[E09] Error: Incorrect instruction syntax + ╭─[ assembly:8:6 ] + │ + 8 │    j 0xhello +  │ ───┬─── +  │ ╰───── Incorrect syntax +  │ +  │ Note: Allowed formats: +  │ opcode off +───╯ + +The syntax opcode off failed with the following reason: +Error: found identifier (xhello) but expected binary operator or end of input + ╭─[ assembly:8:7 ] + │ + 8 │    j 0xhello +  │ ┬───┬── +  │ ╰──────── While parsing this expression +  │ │ +  │ ╰──── Unexpected input +───╯ +" +`; diff --git a/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_010.s.snap b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_010.s.snap new file mode 100644 index 000000000..4b2e947f0 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_010.s.snap @@ -0,0 +1,42 @@ +export const snapshot = {}; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_010.s 1`] = ` +{ + column: 16, + errorText: "[E16] Error: Data memory segment is full", + line: 8, +} +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_010.s 2`] = ` +"[E16] Error: Data memory segment is full + ╭─[ assembly:8:16 ] + │ + 8 │ spa: .zero 16 * 1024 * 1024 * 1024 + │ ───────────┬─────────── + │ ╰───────────── This element doesn't fit in the available space +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_010.s 3`] = ` +"[E16] Error: Data memory segment is full + ╭─[ assembly:8:16 ] + + 8 │ spa: .zero 16 * 1024 * 1024 * 1024 + ───────────┬─────────── + ╰───────────── This element doesn't fit in the available space +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_010.s 4`] = ` +"[E16] Error: Data memory segment is full + ╭─[ assembly:8:16 ] + │ + 8 │     spa:    .zero  16 * 1024 * 1024 * 1024 +  │ ───────────┬─────────── +  │ ╰───────────── This element doesn't fit in the available space +───╯ +" +`; diff --git a/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_014.s.snap b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_014.s.snap new file mode 100644 index 000000000..b9eb29ed3 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_014.s.snap @@ -0,0 +1,42 @@ +export const snapshot = {}; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_014.s 1`] = ` +{ + column: 14, + errorText: "[E01] Error: Directive .directive isn't defined", + line: 8, +} +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_014.s 2`] = ` +"[E01] Error: Directive .directive isn't defined + ╭─[ assembly:8:14 ] + │ + 8 │ example: .directive 221 + │ ─────┬──── + │ ╰────── Unknown directive +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_014.s 3`] = ` +"[E01] Error: Directive .directive isn't defined + ╭─[ assembly:8:14 ] + + 8 │ example: .directive 221 + ─────┬──── + ╰────── Unknown directive +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_014.s 4`] = ` +"[E01] Error: Directive .directive isn't defined + ╭─[ assembly:8:14 ] + │ + 8 │     example:    .directive 221 +  │ ─────┬──── +  │ ╰────── Unknown directive +───╯ +" +`; diff --git a/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_015.s.snap b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_015.s.snap new file mode 100644 index 000000000..aa77ace0e --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_015.s.snap @@ -0,0 +1,42 @@ +export const snapshot = {}; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_015.s 1`] = ` +{ + column: 22, + errorText: "[E03] Error: Label hello isn't defined", + line: 8, +} +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_015.s 2`] = ` +"[E03] Error: Label hello isn't defined + ╭─[ assembly:8:22 ] + │ + 8 │ example: .word hello + │ ──┬── + │ ╰──── Unknown label +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_015.s 3`] = ` +"[E03] Error: Label hello isn't defined + ╭─[ assembly:8:22 ] + + 8 │ example: .word hello + ──┬── + ╰──── Unknown label +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_015.s 4`] = ` +"[E03] Error: Label hello isn't defined + ╭─[ assembly:8:22 ] + │ + 8 │     example:   .word hello +  │ ──┬── +  │ ╰──── Unknown label +───╯ +" +`; diff --git a/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_016.s.snap b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_016.s.snap new file mode 100644 index 000000000..cffc1ed27 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_016.s.snap @@ -0,0 +1,48 @@ +export const snapshot = {}; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_016.s 1`] = ` +{ + column: 33, + errorText: "Compilation error", + line: 8, +} +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_016.s 2`] = ` +'Error: Unterminated string literal + ╭─[ assembly:8:33 ] + │ + 8 │ example: .string hello world" + │ ───┬─┬ + │ ╰──── While parsing this identifier + │ │ + │ ╰── Caused by this +───╯ +' +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_016.s 3`] = ` +"Error: Unterminated string literal + ╭─[ assembly:8:33 ] + + 8 │ example: .string hello world" + ───┬─ + ╰──── While parsing this identifier + + ╰── Caused by this +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_016.s 4`] = ` +'Error: Unterminated string literal + ╭─[ assembly:8:33 ] + │ + 8 │     example:    .string hello world" +  │ ───┬─┬ +  │ ╰──── While parsing this identifier +  │ │ +  │ ╰── Caused by this +───╯ +' +`; diff --git a/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_017.s.snap b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_017.s.snap new file mode 100644 index 000000000..c2fa2e1af --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_017.s.snap @@ -0,0 +1,48 @@ +export const snapshot = {}; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_017.s 1`] = ` +{ + column: 34, + errorText: "Compilation error", + line: 8, +} +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_017.s 2`] = ` +'Error: Unterminated string literal + ╭─[ assembly:8:34 ] + │ + 8 │ example: .string "hello world + │ ──────┬─────┬ + │ ╰──────── While parsing this string + │ │ + │ ╰── Caused by this +───╯ +' +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_017.s 3`] = ` +"Error: Unterminated string literal + ╭─[ assembly:8:34 ] + + 8 │ example: .string "hello world + ──────┬───── + ╰──────── While parsing this string + + ╰── Caused by this +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_017.s 4`] = ` +'Error: Unterminated string literal + ╭─[ assembly:8:34 ] + │ + 8 │     example:    .string "hello world +  │ ──────┬─────┬ +  │ ╰──────── While parsing this string +  │ │ +  │ ╰── Caused by this +───╯ +' +`; diff --git a/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_018.s.snap b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_018.s.snap new file mode 100644 index 000000000..3476a5bd0 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_018.s.snap @@ -0,0 +1,48 @@ +export const snapshot = {}; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_018.s 1`] = ` +{ + column: 20, + errorText: "[E23] Error: Value 74565 is outside of the valid range of the field", + line: 7, +} +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_018.s 2`] = ` +"[E23] Error: Value 74565 is outside of the valid range of the field + ╭─[ assembly:7:20 ] + │ + 7 │ example: .half 0x12345 + │ ───┬─── + │ ╰───── This expression has value 74565 + │ + │ Note: Allowed range is [-32768, 65535] +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_018.s 3`] = ` +"[E23] Error: Value 74565 is outside of the valid range of the field + ╭─[ assembly:7:20 ] + + 7 │ example: .half 0x12345 + ───┬─── + ╰───── This expression has value 74565 + + Note: Allowed range is [-32768, 65535] +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_018.s 4`] = ` +"[E23] Error: Value 74565 is outside of the valid range of the field + ╭─[ assembly:7:20 ] + │ + 7 │   example:   .half 0x12345 +  │ ───┬─── +  │ ╰───── This expression has value 74565 +  │ +  │ Note: Allowed range is [-32768, 65535] +───╯ +" +`; diff --git a/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_019.s.snap b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_019.s.snap new file mode 100644 index 000000000..ef6f4bcea --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_019.s.snap @@ -0,0 +1,48 @@ +export const snapshot = {}; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_019.s 1`] = ` +{ + column: 12, + errorText: "Compilation error", + line: 7, +} +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_019.s 2`] = ` +"Error: found identifier (x) but expected ,, \\\\n, binary operator, or end of input + ╭─[ assembly:7:12 ] + │ + 7 │ .byte 0x + │ ┬┬ + │ ╰─── While parsing this expression + │ │ + │ ╰── Unexpected input +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_019.s 3`] = ` +"Error: found identifier (x) but expected ,, \\\\n, binary operator, or end of input + ╭─[ assembly:7:12 ] + + 7 │ .byte 0x + + ╰─── While parsing this expression + + ╰── Unexpected input +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_019.s 4`] = ` +"Error: found identifier (x) but expected ,, \\\\n, binary operator, or end of input + ╭─[ assembly:7:12 ] + │ + 7 │     .byte 0x +  │ ┬┬ +  │ ╰─── While parsing this expression +  │ │ +  │ ╰── Unexpected input +───╯ +" +`; diff --git a/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_021.s.snap b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_021.s.snap new file mode 100644 index 000000000..cfa77126f --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_021.s.snap @@ -0,0 +1,42 @@ +export const snapshot = {}; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_021.s 1`] = ` +{ + column: 21, + errorText: "[E17] Error: Data at address 0x200001 isn't aligned to size 2 nor word size 4", + line: 9, +} +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_021.s 2`] = ` +"[E17] Error: Data at address 0x200001 isn't aligned to size 2 nor word size 4 + ╭─[ assembly:9:21 ] + │ + 9 │ example2: .half 2 + │ ┬ + │ ╰── This value isn't aligned +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_021.s 3`] = ` +"[E17] Error: Data at address 0x200001 isn't aligned to size 2 nor word size 4 + ╭─[ assembly:9:21 ] + + 9 │ example2: .half 2 + + ╰── This value isn't aligned +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_021.s 4`] = ` +"[E17] Error: Data at address 0x200001 isn't aligned to size 2 nor word size 4 + ╭─[ assembly:9:21 ] + │ + 9 │     example2:   .half 2 +  │ ┬ +  │ ╰── This value isn't aligned +───╯ +" +`; diff --git a/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_022.s.snap b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_022.s.snap new file mode 100644 index 000000000..a8fa01035 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_022.s.snap @@ -0,0 +1,42 @@ +export const snapshot = {}; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_022.s 1`] = ` +{ + column: 11, + errorText: "[E22] Error: Negative values aren't allowed here", + line: 7, +} +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_022.s 2`] = ` +"[E22] Error: Negative values aren't allowed here + ╭─[ assembly:7:11 ] + │ + 7 │ .zero -10 + │ ─┬─ + │ ╰─── This expression has value -10 +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_022.s 3`] = ` +"[E22] Error: Negative values aren't allowed here + ╭─[ assembly:7:11 ] + + 7 │ .zero -10 + ─┬─ + ╰─── This expression has value -10 +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_022.s 4`] = ` +"[E22] Error: Negative values aren't allowed here + ╭─[ assembly:7:11 ] + │ + 7 │     .zero -10 +  │ ─┬─ +  │ ╰─── This expression has value -10 +───╯ +" +`; diff --git a/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_023.s.snap b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_023.s.snap new file mode 100644 index 000000000..5433e5684 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_023.s.snap @@ -0,0 +1,48 @@ +export const snapshot = {}; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_023.s 1`] = ` +{ + column: 20, + errorText: "[E10] Error: Incorrect amount of arguments, expected at least 1 but found 0", + line: 9, +} +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_023.s 2`] = ` +"[E10] Error: Incorrect amount of arguments, expected at least 1 but found 0 + ╭─[ assembly:9:20 ] + │ + 9 │ example2: .half + │ │ + │ ╰─ This directive has 0 arguments + │ + │ Help: Consider adding the missing 1 argument +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_023.s 3`] = ` +"[E10] Error: Incorrect amount of arguments, expected at least 1 but found 0 + ╭─[ assembly:9:20 ] + + 9 │ example2: .half + + ╰─ This directive has 0 arguments + + Help: Consider adding the missing 1 argument +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_023.s 4`] = ` +"[E10] Error: Incorrect amount of arguments, expected at least 1 but found 0 + ╭─[ assembly:9:20 ] + │ + 9 │    example2:    .half +  │ │ +  │ ╰─ This directive has 0 arguments +  │ +  │ Help: Consider adding the missing 1 argument +───╯ +" +`; diff --git a/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_030.s.snap b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_030.s.snap new file mode 100644 index 000000000..ca1b94a2a --- /dev/null +++ b/tests/arch/__snapshots__/riscv/error/compiler/test_riscv_error_compiler_030.s.snap @@ -0,0 +1,42 @@ +export const snapshot = {}; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_030.s 1`] = ` +{ + column: 14, + errorText: "[E13] Error: Main label main not found", + line: 8, +} +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_030.s 2`] = ` +"[E13] Error: Main label main not found + ╭─[ assembly:8:14 ] + │ + 8 │ li t0, 10 + │ │ + │ ╰─ Consider adding a label called main to an instruction +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_030.s 3`] = ` +"[E13] Error: Main label main not found + ╭─[ assembly:8:14 ] + + 8 │ li t0, 10 + + ╰─ Consider adding a label called main to an instruction +───╯ +" +`; + +snapshot[`riscv/error/compiler/test_riscv_error_compiler_030.s 4`] = ` +"[E13] Error: Main label main not found + ╭─[ assembly:8:14 ] + │ + 8 │     li t0, 10 +  │ │ +  │ ╰─ Consider adding a label called main to an instruction +───╯ +" +`; diff --git a/tests/arch/arch_utils.mts b/tests/arch/arch_utils.mts index 55b019578..94f8c1d27 100644 --- a/tests/arch/arch_utils.mts +++ b/tests/arch/arch_utils.mts @@ -1,15 +1,19 @@ import { assertSnapshot } from "jsr:@std/testing/snapshot"; +import { assertEquals } from "https://deno.land/std/assert/mod.ts"; import * as path from "jsr:@std/path"; import fs from "node:fs"; import { executeStep, loadArchitecture, compileAssembly, + CompileResult, } from "../unit/arch/simulator-test-utils.mts"; import { testKeyboard } from "../../src/core/executor/IO.mjs"; import * as creator from "../../src/core/core.mjs"; import { coreEvents, CoreEventTypes } from "../../src/core/events.mts"; import { logger } from "../../src/core/utils/creator_logger.mjs"; +import { assembleCreator } from "../../src/core/assembler/creatorAssembler/deno/creatorAssembler.mjs"; +import { getCleanErrorMessage } from "../../src/core/assembler/assembler.mjs"; export const ARCH = { riscv: "RISCV/RV32IMFD.yml", @@ -103,3 +107,40 @@ export function execution_tests( }); } } + +/** + * Executes a group of compiler error snapshot tests + * @param archPath - Path to the YAML architecture configuration file, from the architectures folder + * @param dir - Path to the directory with the assembly files + */ +export function compile_error_tests(archPath: string, dir: string): void { + logger.disable(); + const ARCH_PATH = "architecture/" + archPath; + loadArchitecture(ARCH_PATH); + const DIR = `${PREFIX}tests/arch/${dir}`; + for (const file of fs.globSync("*.s", { cwd: DIR })) { + Deno.test(`${dir}/${file}`, async t => { + // Compile code + const asm_path = `${DIR}/${file}`; + const path = `${PREFIX}/tests/arch/__snapshots__/${dir}/${file}.snap`; + const testAssembly = fs.readFileSync(asm_path, "utf8"); + const res_ansi = (await creator.assembly_compile( + testAssembly, + assembleCreator, + true, + )) as CompileResult; + const res_html = (await creator.assembly_compile( + testAssembly, + assembleCreator, + false, + )) as CompileResult; + const cleanMsg = getCleanErrorMessage(res_html.msg, false); + assertEquals(getCleanErrorMessage(res_ansi.msg, true), cleanMsg); + assertEquals(res_ansi.linter, res_html.linter); + await assertSnapshot(t, res_html.linter, { path }); + await assertSnapshot(t, cleanMsg, { path }); + await assertSnapshot(t, res_html.msg, { path }); + await assertSnapshot(t, res_ansi.msg, { path }); + }); + } +} diff --git a/tests/arch/mips/error.test.mts b/tests/arch/mips/error.test.mts index cbd1a9b36..54d2a2a7e 100644 --- a/tests/arch/mips/error.test.mts +++ b/tests/arch/mips/error.test.mts @@ -1,4 +1,4 @@ -import { ARCH, execution_tests } from "../arch_utils.mts"; +import { ARCH, execution_tests, compile_error_tests } from "../arch_utils.mts"; execution_tests( ARCH.mips, @@ -15,3 +15,5 @@ execution_tests( "test_mips_error_executor_009.s", ]), ); + +compile_error_tests(ARCH.mips, "mips/error/compiler") diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_001.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_001.out deleted file mode 100644 index 5c7476c32..000000000 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_001.out +++ /dev/null @@ -1,19 +0,0 @@ - - -[E12] Error: Label `A` is already defined - ╭─[ assembly:9:4 ] - │ - 7 │ A: .word -1 - │ ─┬ - │ ╰── Note: Label also defined here - │ - 9 │ A: .half 23 - │ ─┬ - │ ╰── Duplicate label - │ - │ Help: Consider renaming either of the labels -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_002.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_002.out deleted file mode 100644 index 10ce10d62..000000000 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_002.out +++ /dev/null @@ -1,13 +0,0 @@ - - -[E02] Error: Instruction `suma` isn't defined - ╭─[ assembly:12:4 ] - │ - 12 │ suma $t0, $t1, $t2 - │ ──┬─ - │ ╰─── Unknown instruction -────╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_003.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_003.out deleted file mode 100644 index d2bf39ee3..000000000 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_003.out +++ /dev/null @@ -1,35 +0,0 @@ - - -[E09] Error: Incorrect instruction syntax - ╭─[ assembly:12:8 ] - │ - 12 │ add 25, $t1, 12 - │ ─────┬───── - │ ╰─────── Incorrect syntax - │ - │ Note: Allowed formats: - │ add $reg3,$reg2,$reg1 - │ add $rs,$rt,inm -────╯ - -The syntax `add $reg3,$reg2,$reg1` failed with the following reason: -Error: found `integer (25)` but expected `$` - ╭─[ assembly:12:8 ] - │ - 12 │ add 25, $t1, 12 - │ ─┬ - │ ╰── Unexpected input -────╯ - -The syntax `add $rs,$rt,inm` failed with the following reason: -Error: found `integer (25)` but expected `$` - ╭─[ assembly:12:8 ] - │ - 12 │ add 25, $t1, 12 - │ ─┬ - │ ╰── Unexpected input -────╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_004.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_004.out deleted file mode 100644 index 682367df3..000000000 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_004.out +++ /dev/null @@ -1,15 +0,0 @@ - - -[E05] Error: Register `s50` isn't defined in file type `Integer` - ╭─[ assembly:12:19 ] - │ - 12 │ add $t0, $t1, $s50 - │ ─┬─ - │ ╰─── Unknown register - │ - │ Help: Did you mean `s0` or `s5`? -────╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_005.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_005.out deleted file mode 100644 index 5c0fd2a61..000000000 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_005.out +++ /dev/null @@ -1,15 +0,0 @@ - - -[E23] Error: Value `291` is outside of the valid range of the field - ╭─[ assembly:7:19 ] - │ - 7 │ a: .byte 0x123 - │ ──┬── - │ ╰──── This expression has value `291` - │ - │ Note: Allowed range is [-128, 255] -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_006.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_006.out deleted file mode 100644 index a77e8dcd5..000000000 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_006.out +++ /dev/null @@ -1,27 +0,0 @@ - - -[E09] Error: Incorrect instruction syntax - ╭─[ assembly:11:7 ] - │ - 11 │ li $t0, 0xhello - │ ──────┬───── - │ ╰─────── Incorrect syntax - │ - │ Note: Allowed formats: - │ li $rd,val -────╯ - -The syntax `li $rd,val` failed with the following reason: -Error: found `identifier (xhello)` but expected `\n`, `binary operator`, or `end of input` - ╭─[ assembly:11:13 ] - │ - 11 │ li $t0, 0xhello - │ ┬───┬── - │ ╰──────── While parsing this `expression` - │ │ - │ ╰──── Unexpected input -────╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_007.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_007.out deleted file mode 100644 index c966e8c00..000000000 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_007.out +++ /dev/null @@ -1,15 +0,0 @@ - - -[E03] Error: Label `mains` isn't defined - ╭─[ assembly:11:7 ] - │ - 11 │ j mains - │ ──┬── - │ ╰──── Unknown label - │ - │ Help: Did you mean `main`? -────╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_008.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_008.out deleted file mode 100644 index eb758f055..000000000 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_008.out +++ /dev/null @@ -1,15 +0,0 @@ - - -[E23] Error: Value `305419896` is outside of the valid range of the field - ╭─[ assembly:8:6 ] - │ - 8 │ j 0x12345678 - │ ─────┬──── - │ ╰────── This expression has value `305419896` - │ - │ Note: Allowed range is [-33554432, 33554431] -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_009.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_009.out deleted file mode 100644 index dc58ec9fa..000000000 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_009.out +++ /dev/null @@ -1,27 +0,0 @@ - - -[E09] Error: Incorrect instruction syntax - ╭─[ assembly:8:6 ] - │ - 8 │ j 0xhello - │ ───┬─── - │ ╰───── Incorrect syntax - │ - │ Note: Allowed formats: - │ j addr -───╯ - -The syntax `j addr` failed with the following reason: -Error: found `identifier (xhello)` but expected `\n`, `binary operator`, or `end of input` - ╭─[ assembly:8:7 ] - │ - 8 │ j 0xhello - │ ┬───┬── - │ ╰──────── While parsing this `expression` - │ │ - │ ╰──── Unexpected input -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_010.s b/tests/arch/mips/error/compiler/test_mips_error_compiler_010.s index 94af4567c..975b26a38 100644 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_010.s +++ b/tests/arch/mips/error/compiler/test_mips_error_compiler_010.s @@ -5,8 +5,8 @@ .data .align 2 - spa: .space 52428800 + spa: .space 16 * 1024 * 1024 * 1024 .text main: - li $t0, 10 \ No newline at end of file + li $t0, 10 diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_014.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_014.out deleted file mode 100644 index 81e4462e8..000000000 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_014.out +++ /dev/null @@ -1,13 +0,0 @@ - - -[E01] Error: Directive `.directive` isn't defined - ╭─[ assembly:8:14 ] - │ - 8 │ example: .directive 221 - │ ─────┬──── - │ ╰────── Unknown directive -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_015.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_015.out deleted file mode 100644 index 0c8632ae4..000000000 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_015.out +++ /dev/null @@ -1,13 +0,0 @@ - - -[E03] Error: Label `hello` isn't defined - ╭─[ assembly:8:22 ] - │ - 8 │ example: .word hello - │ ──┬── - │ ╰──── Unknown label -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_016.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_016.out deleted file mode 100644 index ea7274441..000000000 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_016.out +++ /dev/null @@ -1,15 +0,0 @@ - - -Error: Unterminated string literal - ╭─[ assembly:8:32 ] - │ - 8 │ example: .ascii hello world" - │ ───┬─┬ - │ ╰──── While parsing this `identifier` - │ │ - │ ╰── Caused by this -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_017.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_017.out deleted file mode 100644 index 543ea4f4a..000000000 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_017.out +++ /dev/null @@ -1,15 +0,0 @@ - - -Error: Unterminated string literal - ╭─[ assembly:8:33 ] - │ - 8 │ example: .ascii "hello world - │ ──────┬─────┬ - │ ╰──────── While parsing this `string` - │ │ - │ ╰── Caused by this -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_018.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_018.out deleted file mode 100644 index da5e6eec9..000000000 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_018.out +++ /dev/null @@ -1,15 +0,0 @@ - - -[E23] Error: Value `74565` is outside of the valid range of the field - ╭─[ assembly:7:20 ] - │ - 7 │ example: .half 0x12345 - │ ───┬─── - │ ╰───── This expression has value `74565` - │ - │ Note: Allowed range is [-32768, 65535] -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_018.s b/tests/arch/mips/error/compiler/test_mips_error_compiler_018.s index ee62c630c..8f6025dc4 100644 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_018.s +++ b/tests/arch/mips/error/compiler/test_mips_error_compiler_018.s @@ -5,4 +5,5 @@ .data example: .half 0x12345 - +.text +main: nop diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_019.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_019.out deleted file mode 100644 index 61d170cee..000000000 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_019.out +++ /dev/null @@ -1,15 +0,0 @@ - - -Error: found `identifier (x)` but expected `,`, `\n`, `binary operator`, or `end of input` - ╭─[ assembly:7:12 ] - │ - 7 │ .byte 0x - │ ┬┬ - │ ╰─── While parsing this `expression` - │ │ - │ ╰── Unexpected input -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_021.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_021.out deleted file mode 100644 index 0fae5b507..000000000 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_021.out +++ /dev/null @@ -1,13 +0,0 @@ - - -[E17] Error: Data at address `0x200001` isn't aligned to size `2` nor word size `4` - ╭─[ assembly:9:21 ] - │ - 9 │ example2: .half 2 - │ ┬ - │ ╰── This value isn't aligned -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_022.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_022.out deleted file mode 100644 index f4c45383c..000000000 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_022.out +++ /dev/null @@ -1,13 +0,0 @@ - - -[E22] Error: Negative values aren't allowed here - ╭─[ assembly:7:12 ] - │ - 7 │ .space -10 - │ ─┬─ - │ ╰─── This expression has value `-10` -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_023.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_023.out deleted file mode 100644 index deb0a1708..000000000 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_023.out +++ /dev/null @@ -1,15 +0,0 @@ - - -[E10] Error: Incorrect amount of arguments, expected at least `1` but found `0` - ╭─[ assembly:9:20 ] - │ - 9 │ example2: .half - │ │ - │ ╰─ This directive has `0` arguments - │ - │ Help: Consider adding the missing `1` argument -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_030.out b/tests/arch/mips/error/compiler/test_mips_error_compiler_030.out deleted file mode 100644 index a02fc0290..000000000 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_030.out +++ /dev/null @@ -1,13 +0,0 @@ - - -[E13] Error: Main label `main` not found - ╭─[ assembly:8:15 ] - │ - 8 │ li $t0, 10 - │ │ - │ ╰─ Consider adding a label called `main` to an instruction -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/mips/error/compiler/test_mips_error_compiler_030.s b/tests/arch/mips/error/compiler/test_mips_error_compiler_030.s index e69de29bb..6ad952bf9 100644 --- a/tests/arch/mips/error/compiler/test_mips_error_compiler_030.s +++ b/tests/arch/mips/error/compiler/test_mips_error_compiler_030.s @@ -0,0 +1,8 @@ + +# +# Creator (https://creatorsim.github.io/creator/) +# + +.text +main_: + li $t0, 10 diff --git a/tests/arch/riscv/error.test.mts b/tests/arch/riscv/error.test.mts index e571e7b20..cfa60fb8b 100644 --- a/tests/arch/riscv/error.test.mts +++ b/tests/arch/riscv/error.test.mts @@ -1,4 +1,4 @@ -import { ARCH, execution_tests } from "../arch_utils.mts"; +import { ARCH, execution_tests, compile_error_tests } from "../arch_utils.mts"; execution_tests( ARCH.riscv, @@ -14,3 +14,5 @@ execution_tests( "test_riscv_error_executor_008.s", ]), ); + +compile_error_tests(ARCH.riscv, "riscv/error/compiler") diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_001.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_001.out deleted file mode 100644 index 5131c282f..000000000 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_001.out +++ /dev/null @@ -1,19 +0,0 @@ - - -[E12] Error: Label `A` is already defined - ╭─[ assembly:9:2 ] - │ - 7 │ A: .word -1 - │ ─┬ - │ ╰─────── Note: Label also defined here - │ - 9 │ A: .half 23 - │ ─┬ - │ ╰───── Duplicate label - │ - │ Help: Consider renaming either of the labels -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_002.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_002.out deleted file mode 100644 index fad0e52c0..000000000 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_002.out +++ /dev/null @@ -1,13 +0,0 @@ - - -[E02] Error: Instruction `suma` isn't defined - ╭─[ assembly:12:2 ] - │ - 12 │ suma t0, t1, t2 - │ ──┬─ - │ ╰─── Unknown instruction -────╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_003.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_003.out deleted file mode 100644 index c14b5930e..000000000 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_003.out +++ /dev/null @@ -1,27 +0,0 @@ - - -[E09] Error: Incorrect instruction syntax - ╭─[ assembly:12:8 ] - │ - 12 │ add t0, t1 - │ ───┬── - │ ╰──── Incorrect syntax - │ - │ Note: Allowed formats: - │ add rd,rs1,rs2 -────╯ - -The syntax `add rd,rs1,rs2` failed with the following reason: -Error: found `end of input` but expected `,`, `\n`, or `binary operator` - ╭─[ assembly:12:14 ] - │ - 12 │ add t0, t1 - │ ─┬│ - │ ╰── While parsing this `expression` - │ │ - │ ╰─ Unexpected input -────╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_004.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_004.out deleted file mode 100644 index b942b63b9..000000000 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_004.out +++ /dev/null @@ -1,15 +0,0 @@ - - -[E05] Error: Register `s50` isn't defined in file type `Integer` - ╭─[ assembly:12:14 ] - │ - 12 │ add t0, t1, s50 - │ ─┬─ - │ ╰─── Unknown register - │ - │ Help: Did you mean `s0`, `s10`, or `s5`? -────╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_005.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_005.out deleted file mode 100644 index 5c0fd2a61..000000000 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_005.out +++ /dev/null @@ -1,15 +0,0 @@ - - -[E23] Error: Value `291` is outside of the valid range of the field - ╭─[ assembly:7:19 ] - │ - 7 │ a: .byte 0x123 - │ ──┬── - │ ╰──── This expression has value `291` - │ - │ Note: Allowed range is [-128, 255] -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_006.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_006.out deleted file mode 100644 index 38fa6dacb..000000000 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_006.out +++ /dev/null @@ -1,27 +0,0 @@ - - -[E09] Error: Incorrect instruction syntax - ╭─[ assembly:11:7 ] - │ - 11 │ li t0, 0xhello - │ ─────┬───── - │ ╰─────── Incorrect syntax - │ - │ Note: Allowed formats: - │ li rd,val -────╯ - -The syntax `li rd,val` failed with the following reason: -Error: found `identifier (xhello)` but expected `\n`, `binary operator`, or `end of input` - ╭─[ assembly:11:12 ] - │ - 11 │ li t0, 0xhello - │ ┬───┬── - │ ╰──────── While parsing this `expression` - │ │ - │ ╰──── Unexpected input -────╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_007.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_007.out deleted file mode 100644 index c966e8c00..000000000 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_007.out +++ /dev/null @@ -1,15 +0,0 @@ - - -[E03] Error: Label `mains` isn't defined - ╭─[ assembly:11:7 ] - │ - 11 │ j mains - │ ──┬── - │ ╰──── Unknown label - │ - │ Help: Did you mean `main`? -────╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_008.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_008.out deleted file mode 100644 index a310e0504..000000000 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_008.out +++ /dev/null @@ -1,21 +0,0 @@ - - -[E23] Error: Value `305419896` is outside of the valid range of the field - ╭─[ :1:17 ] - │ - 1 │ beq zero, zero, off; - │ ─┬─ - │ ╰─── This expression has value `305419896` - │ - ├─[ assembly:8:4 ] - │ - 8 │ j 0x12345678 - │ ──────┬───── - │ ╰─────── Generated by this pseudoinstruction - │ - │ Note: Allowed range is [-4096, 4095] -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_009.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_009.out deleted file mode 100644 index e000c91dc..000000000 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_009.out +++ /dev/null @@ -1,27 +0,0 @@ - - -[E09] Error: Incorrect instruction syntax - ╭─[ assembly:8:6 ] - │ - 8 │ j 0xhello - │ ───┬─── - │ ╰───── Incorrect syntax - │ - │ Note: Allowed formats: - │ j off -───╯ - -The syntax `j off` failed with the following reason: -Error: found `identifier (xhello)` but expected `\n`, `binary operator`, or `end of input` - ╭─[ assembly:8:7 ] - │ - 8 │ j 0xhello - │ ┬───┬── - │ ╰──────── While parsing this `expression` - │ │ - │ ╰──── Unexpected input -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_010.s b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_010.s index d7c8857d4..99317a3d8 100644 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_010.s +++ b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_010.s @@ -5,8 +5,8 @@ .data .align 2 - spa: .zero 52428800 + spa: .zero 16 * 1024 * 1024 * 1024 .text main: - li t0, 10 \ No newline at end of file + li t0, 10 diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_014.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_014.out deleted file mode 100644 index 81e4462e8..000000000 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_014.out +++ /dev/null @@ -1,13 +0,0 @@ - - -[E01] Error: Directive `.directive` isn't defined - ╭─[ assembly:8:14 ] - │ - 8 │ example: .directive 221 - │ ─────┬──── - │ ╰────── Unknown directive -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_015.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_015.out deleted file mode 100644 index 0c8632ae4..000000000 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_015.out +++ /dev/null @@ -1,13 +0,0 @@ - - -[E03] Error: Label `hello` isn't defined - ╭─[ assembly:8:22 ] - │ - 8 │ example: .word hello - │ ──┬── - │ ╰──── Unknown label -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_016.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_016.out deleted file mode 100644 index daa5fb858..000000000 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_016.out +++ /dev/null @@ -1,15 +0,0 @@ - - -Error: Unterminated string literal - ╭─[ assembly:8:33 ] - │ - 8 │ example: .string hello world" - │ ───┬─┬ - │ ╰──── While parsing this `identifier` - │ │ - │ ╰── Caused by this -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_017.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_017.out deleted file mode 100644 index ade735b68..000000000 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_017.out +++ /dev/null @@ -1,15 +0,0 @@ - - -Error: Unterminated string literal - ╭─[ assembly:8:34 ] - │ - 8 │ example: .string "hello world - │ ──────┬─────┬ - │ ╰──────── While parsing this `string` - │ │ - │ ╰── Caused by this -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_018.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_018.out deleted file mode 100644 index da5e6eec9..000000000 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_018.out +++ /dev/null @@ -1,15 +0,0 @@ - - -[E23] Error: Value `74565` is outside of the valid range of the field - ╭─[ assembly:7:20 ] - │ - 7 │ example: .half 0x12345 - │ ───┬─── - │ ╰───── This expression has value `74565` - │ - │ Note: Allowed range is [-32768, 65535] -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_019.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_019.out deleted file mode 100644 index 61d170cee..000000000 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_019.out +++ /dev/null @@ -1,15 +0,0 @@ - - -Error: found `identifier (x)` but expected `,`, `\n`, `binary operator`, or `end of input` - ╭─[ assembly:7:12 ] - │ - 7 │ .byte 0x - │ ┬┬ - │ ╰─── While parsing this `expression` - │ │ - │ ╰── Unexpected input -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_021.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_021.out deleted file mode 100644 index 0fae5b507..000000000 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_021.out +++ /dev/null @@ -1,13 +0,0 @@ - - -[E17] Error: Data at address `0x200001` isn't aligned to size `2` nor word size `4` - ╭─[ assembly:9:21 ] - │ - 9 │ example2: .half 2 - │ ┬ - │ ╰── This value isn't aligned -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_022.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_022.out deleted file mode 100644 index e9a31f9c7..000000000 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_022.out +++ /dev/null @@ -1,13 +0,0 @@ - - -[E22] Error: Negative values aren't allowed here - ╭─[ assembly:7:11 ] - │ - 7 │ .zero -10 - │ ─┬─ - │ ╰─── This expression has value `-10` -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_023.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_023.out deleted file mode 100644 index deb0a1708..000000000 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_023.out +++ /dev/null @@ -1,15 +0,0 @@ - - -[E10] Error: Incorrect amount of arguments, expected at least `1` but found `0` - ╭─[ assembly:9:20 ] - │ - 9 │ example2: .half - │ │ - │ ╰─ This directive has `0` arguments - │ - │ Help: Consider adding the missing `1` argument -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_030.out b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_030.out deleted file mode 100644 index 660623da0..000000000 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_030.out +++ /dev/null @@ -1,13 +0,0 @@ - - -[E13] Error: Main label `main` not found - ╭─[ assembly:8:14 ] - │ - 8 │ li t0, 10 - │ │ - │ ╰─ Consider adding a label called `main` to an instruction -───╯ - -Not executed -keyboard[0x0]:''; display[0x0]:''; - diff --git a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_030.s b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_030.s index e69de29bb..4f8f3a5a4 100644 --- a/tests/arch/riscv/error/compiler/test_riscv_error_compiler_030.s +++ b/tests/arch/riscv/error/compiler/test_riscv_error_compiler_030.s @@ -0,0 +1,8 @@ + +# +# Creator (https://creatorsim.github.io/creator/) +# + +.text +main_: + li t0, 10 diff --git a/tests/unit/arch/simulator-test-utils.mts b/tests/unit/arch/simulator-test-utils.mts index 8933c2b23..651010265 100644 --- a/tests/unit/arch/simulator-test-utils.mts +++ b/tests/unit/arch/simulator-test-utils.mts @@ -24,6 +24,7 @@ export interface ArchResult { export interface CompileResult { status: string; msg?: string; + linter?: { errorText: string, line: number, column: number } } export interface ExecutionResult { @@ -147,17 +148,15 @@ export async function compileAssembly( testAssembly: string, assembler: string = "default", ): Promise { - const compilerKey = assembler || "default"; - - if (!isValidCompilerKey(compilerKey)) { + if (!isValidCompilerKey(assembler)) { throw new Error( - `Invalid assembler: ${compilerKey}. Valid options are: ${Object.keys(compiler_map).join(", ")}`, + `Invalid assembler: ${assembler}. Valid options are: ${Object.keys(compiler_map).join(", ")}`, ); } creator.reset(); - const compilerFunction = compiler_map[compilerKey]; + const compilerFunction = compiler_map[assembler]; // Compile assembly code const compileResult = (await creator.assembly_compile( testAssembly, From 9afb5923b44b519fad9c4d03ca962aa6412c3ab3 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Wed, 18 Mar 2026 21:13:06 +0100 Subject: [PATCH 39/85] refactor(sentinel): remove unnecessary type conversions --- src/core/sentinel/sentinel.mjs | 81 +++++++--------------------------- 1 file changed, 15 insertions(+), 66 deletions(-) diff --git a/src/core/sentinel/sentinel.mjs b/src/core/sentinel/sentinel.mjs index 52eadac62..f5b3a012c 100644 --- a/src/core/sentinel/sentinel.mjs +++ b/src/core/sentinel/sentinel.mjs @@ -30,46 +30,6 @@ const EventType = { READ_REGISTER: "read_register", }; -// Helpers for safe BigInt conversions and comparisons -function toBigIntSafe(v) { - if (v === null || typeof v === "undefined") return null; - if (typeof v === "bigint") return v; - if (typeof v === "number") { - if (!Number.isInteger(v)) return null; - return BigInt(v); - } - // strings and other types that BigInt accepts - try { - return BigInt(v); - } catch (_e) { - return null; - } -} - -function bigintsEqual(a, b) { - const A = toBigIntSafe(a); - const B = toBigIntSafe(b); - if (A === null || B === null) return false; - return A === B; -} - -function valuesEqual(a, b) { - // Handle null/undefined - if (a === null || a === undefined || b === null || b === undefined) { - return a === b; - } - - // Try BigInt comparison first - const A = toBigIntSafe(a); - const B = toBigIntSafe(b); - if (A !== null && B !== null) { - return A === B; - } - - // Fallback to strict equality - return a === b; -} - /** * Represents a single event in the register lifecycle */ @@ -78,9 +38,8 @@ class RegisterEvent { this.type = type; this.regIndex = regIndex; this.elemIndex = elemIndex; - // Normalize address/size to BigInt when possible to avoid mixed-type comparisons - this.address = toBigIntSafe(address); - this.size = toBigIntSafe(size); + this.address = address; + this.size = size; this.timestamp = Date.now(); } @@ -214,9 +173,9 @@ class ConventionRules { } if (firstSave && lastRestore) { - if (!bigintsEqual(firstSave.address, lastRestore.address)) { - const saveAddr = toBigIntSafe(firstSave.address); - const restoreAddr = toBigIntSafe(lastRestore.address); + if (firstSave.address !== lastRestore.address) { + const saveAddr = firstSave.address; + const restoreAddr = lastRestore.address; const saveStr = saveAddr !== null ? `0x${saveAddr.toString(16)}` @@ -235,17 +194,13 @@ class ConventionRules { // Rule 3: Save and restore sizes must match if (firstSave && lastRestore) { - const s1 = toBigIntSafe(firstSave.size); - const s2 = toBigIntSafe(lastRestore.size); - if (s1 === null || s2 === null || s1 !== s2) { - const s1Str = - s1 !== null ? s1.toString() : String(firstSave.size); - const s2Str = - s2 !== null ? s2.toString() : String(lastRestore.size); + const s1 = firstSave.size; + const s2 = lastRestore.size; + if (s1 !== s2) { violations.push({ rule: "SIZE_MISMATCH", register: register.name, - message: `Register ${register.name} saved with ${s1Str} bytes but restored with ${s2Str} bytes`, + message: `Register ${register.name} saved with ${s1} bytes but restored with ${s2} bytes`, }); } } @@ -254,7 +209,7 @@ class ConventionRules { const currentValue = REGISTERS[regIndex].elements[elemIndex].value; const initialValue = frame.initialRegisterValues[regIndex]?.[elemIndex]; - const valueChanged = !valuesEqual(currentValue, initialValue); + const valueChanged = currentValue !== initialValue; if (valueChanged && modifications.length > 0) { violations.push({ @@ -271,17 +226,11 @@ class ConventionRules { * Check stack pointer restoration */ static validateStackPointer(frame, currentStackPointer) { - const spEnter = toBigIntSafe(frame.enterStackPointer); - const spNow = toBigIntSafe(currentStackPointer); - if (spEnter === null || spNow === null || spEnter !== spNow) { - const enterStr = - spEnter !== null - ? `0x${spEnter.toString(16)}` - : String(frame.enterStackPointer); - const nowStr = - spNow !== null - ? `0x${spNow.toString(16)}` - : String(currentStackPointer); + const spEnter = frame.enterStackPointer; + const spNow = currentStackPointer; + if (spEnter !== spNow) { + const enterStr = `0x${spEnter.toString(16)}`; + const nowStr = `0x${spNow.toString(16)}`; return [ { rule: "STACK_NOT_RESTORED", From 9bdc68ac84ca585a77e49ccd024881b08bbb2870 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Wed, 18 Mar 2026 23:30:56 +0100 Subject: [PATCH 40/85] refactor(sentinel): return error data as an object instead of a string Removes dumb stringify => parse string flow in the web UI --- src/cli/validator.mts | 16 ++-- src/core/capi/stack.mts | 11 +-- src/core/events.mts | 16 +++- src/core/sentinel/sentinel.mjs | 38 ++++++---- src/web/components/general/NavbarCREATOR.vue | 14 +--- .../mobile/MobileInstructionsView.vue | 18 ++--- .../simulator/SentinelErrorsDropdown.vue | 73 ++++--------------- tests/arch/arch_utils.mts | 10 ++- 8 files changed, 75 insertions(+), 121 deletions(-) diff --git a/src/cli/validator.mts b/src/cli/validator.mts index 219b5623c..ee9aa3c11 100644 --- a/src/cli/validator.mts +++ b/src/cli/validator.mts @@ -23,7 +23,8 @@ import { crex_findReg } from "../../src/core/register/registerLookup.mjs"; import { readRegister } from "../../src/core/register/registerOperations.mjs"; import { raise } from "@/core/capi/validation.mts"; import { ARCH as RISCV } from "@/core/capi/arch/riscv.mjs"; -import { coreEvents, CoreEventTypes } from "@/core/events.mts"; +import { sentinel as sentinelApi } from "@/core/sentinel/sentinel.mjs"; +import { coreEvents, CoreEventTypes, type SentinelErrorEvent } from "@/core/events.mts"; interface ExpectedState { registers?: { [name: string]: number }; @@ -58,11 +59,6 @@ export function executeN(n: number): { error: boolean; msg: string } { return ret; } -interface SentinelEvent { - functionName: string; - message: string; - ok: boolean; -} /** * Validates the execution of a program. @@ -79,9 +75,9 @@ export function validate( sentinel: boolean = true, ): { error: boolean; msg: string } { // subscribe to sentinel events - const sentinelErrors: SentinelEvent[] = []; - coreEvents.on(CoreEventTypes.SENTINEL_ERROR, (event: unknown) => { - sentinelErrors.push(event as SentinelEvent); + const sentinelErrors: SentinelErrorEvent[] = []; + coreEvents.on(CoreEventTypes.SENTINEL_ERROR, event => { + sentinelErrors.push(event); }); // execute program @@ -177,7 +173,7 @@ export function validate( error: true, msg: `Found ${sentinelErrors.length} sentinel errors:\n` + - sentinelErrors.map(e => e.message).join("\n"), + sentinelErrors.map(sentinelApi.formatErrors).join("\n"), }; } diff --git a/src/core/capi/stack.mts b/src/core/capi/stack.mts index c8a8cc7d3..6982c0fd6 100644 --- a/src/core/capi/stack.mts +++ b/src/core/capi/stack.mts @@ -55,9 +55,6 @@ export const STACK = { return; } - // get function name - const currentFunction = sentinel.getCurrentFunction() || "unknown"; - const ret = sentinel.leave(); if (ret.ok) { @@ -65,17 +62,13 @@ export const STACK = { } // emit event for GUI - coreEvents.emit(CoreEventTypes.SENTINEL_ERROR, { - functionName: currentFunction, - message: ret.msg, - ok: false, - }); + coreEvents.emit(CoreEventTypes.SENTINEL_ERROR, ret); // Google Analytics creator_ga( "execute", "execute.exception", - "execute.exception.protection_jrra" + ret.msg, + "execute.exception.protection_jrra", ); }, diff --git a/src/core/events.mts b/src/core/events.mts index 6b8d4ba78..99a4475a2 100644 --- a/src/core/events.mts +++ b/src/core/events.mts @@ -51,14 +51,26 @@ export interface RegisterUpdatedEvent { indexElem: number; } +/** + * Calling convention violation information + */ +export interface SentinelErrorData { + /** ID of the rule broken */ + rule: string, + /** Register in which the rule was broken, if applicable */ + register?: string[], + /** Full error message */ + message: string +} + /** * Emitted when calling convention violations are detected */ export interface SentinelErrorEvent { /** Name of the function that had violations */ functionName: string; - /** Full error message */ - message: string; + /** Violations found on the function */ + errors: SentinelErrorData[]; /** Whether the check passed (always false for error events) */ ok: boolean; } diff --git a/src/core/sentinel/sentinel.mjs b/src/core/sentinel/sentinel.mjs index f5b3a012c..c656e34f1 100644 --- a/src/core/sentinel/sentinel.mjs +++ b/src/core/sentinel/sentinel.mjs @@ -258,7 +258,6 @@ class CallingConventionValidator { const frame = new CallFrame(functionName, stackPointer); this.callStack.push(frame); console_log(`[SENTINEL] Entering function: ${functionName}`, "INFO"); - return { ok: true, msg: "" }; } /** @@ -268,7 +267,13 @@ class CallingConventionValidator { if (this.callStack.length === 0) { return { ok: false, - msg: "Cannot leave function: call stack is empty", + functionName: "unknown", + errors: [ + { + rule: "", + message: "Cannot leave function: call stack is empty", + }, + ], }; } @@ -278,14 +283,14 @@ class CallingConventionValidator { "INFO", ); - const violations = []; + const errors = []; // Validate stack pointer const spViolations = ConventionRules.validateStackPointer( frame, architecture.memory_layout.stack.start, ); - violations.push(...spViolations); + errors.push(...spViolations); // Validate each saved register for (let i = 0; i < REGISTERS.length; i++) { @@ -299,7 +304,7 @@ class CallingConventionValidator { i, j, ); - violations.push(...regViolations); + errors.push(...regViolations); } } } @@ -307,16 +312,11 @@ class CallingConventionValidator { // Pop the frame this.callStack.pop(); - // Return result - if (violations.length > 0) { - const messages = violations.map(v => ` - ${v.message}`).join("\n"); - return { - ok: false, - msg: `Calling convention violations in ${frame.functionName}:\n${messages}`, - }; - } - - return { ok: true, msg: "" }; + return { + ok: errors.length === 0, + functionName: frame.functionName, + errors, + }; } /** @@ -405,7 +405,6 @@ class CallingConventionValidator { reset() { this.callStack = []; this.enter("main"); - return { ok: true, msg: "" }; } /** @@ -445,4 +444,11 @@ export const sentinel = { reset: () => validator.reset(), getCallDepth: () => validator.getCallDepth(), getCurrentFunction: () => validator.getCurrentFunction(), + /** @type {(frameResult: import("../events.mts").SentinelErrorEvent) => string} */ + formatErrors: frameResult => { + const messages = frameResult.errors + .map(v => ` - ${v.message}`) + .join("\n"); + return `Calling convention violations in ${frameResult.functionName}:\n${messages}`; + }, }; diff --git a/src/web/components/general/NavbarCREATOR.vue b/src/web/components/general/NavbarCREATOR.vue index 1f138f757..f546180bd 100644 --- a/src/web/components/general/NavbarCREATOR.vue +++ b/src/web/components/general/NavbarCREATOR.vue @@ -32,7 +32,7 @@ import SentinelErrorsDropdown from "../simulator/SentinelErrorsDropdown.vue"; import ThemeToggle from "./ThemeToggle.vue"; import type { Instruction } from "@/core/assembler/assembler"; import type { BDropdown } from "bootstrap-vue-next"; -import { coreEvents, CoreEventTypes } from "../../../core/events.mts"; +import { coreEvents, CoreEventTypes, type SentinelErrorEvent } from "../../../core/events.mts"; import { remove_library, architecture, load_CREATino } from "@/core/core.mjs"; import { createFile } from "../assembly/MultifileEditor.mjs"; @@ -67,17 +67,9 @@ export default defineComponent({ typeof SentinelErrorsDropdown > | null>(null); - const handleSentinelError = (event: unknown) => { - const errorEvent = event as { - functionName: string; - message: string; - ok: boolean; - }; + const handleSentinelError = (event: SentinelErrorEvent) => { if (sentinelDropdownRef.value) { - sentinelDropdownRef.value.checkForErrors( - { ok: errorEvent.ok, msg: errorEvent.message }, - errorEvent.functionName, - ); + sentinelDropdownRef.value.checkForErrors(event); } }; diff --git a/src/web/components/mobile/MobileInstructionsView.vue b/src/web/components/mobile/MobileInstructionsView.vue index 499014cb2..7911c89fe 100644 --- a/src/web/components/mobile/MobileInstructionsView.vue +++ b/src/web/components/mobile/MobileInstructionsView.vue @@ -28,7 +28,11 @@ import TableExecution from "@/web/components/simulator/TableExecution.vue"; import SimulatorControls from "@/web/components/simulator/SimulatorControls.vue"; import SentinelErrorsDropdown from "@/web/components/simulator/SentinelErrorsDropdown.vue"; import type { Instruction } from "@/core/assembler/assembler"; -import { coreEvents, CoreEventTypes } from "../../../core/events.mts"; +import { + coreEvents, + CoreEventTypes, + type SentinelErrorEvent, +} from "../../../core/events.mts"; export default defineComponent({ props: { @@ -52,17 +56,9 @@ export default defineComponent({ typeof SentinelErrorsDropdown > | null>(null); - const handleSentinelError = (event: unknown) => { - const errorEvent = event as { - functionName: string; - message: string; - ok: boolean; - }; + const handleSentinelError = (event: SentinelErrorEvent) => { if (sentinelDropdownRef.value) { - sentinelDropdownRef.value.checkForErrors( - { ok: errorEvent.ok, msg: errorEvent.message }, - errorEvent.functionName, - ); + sentinelDropdownRef.value.checkForErrors(event); } }; diff --git a/src/web/components/simulator/SentinelErrorsDropdown.vue b/src/web/components/simulator/SentinelErrorsDropdown.vue index b980eff3a..1052b340d 100644 --- a/src/web/components/simulator/SentinelErrorsDropdown.vue +++ b/src/web/components/simulator/SentinelErrorsDropdown.vue @@ -20,16 +20,16 @@ along with CREATOR. If not, see . @@ -174,6 +209,19 @@ export default defineComponent({ Cache Memory + + + @@ -222,6 +270,36 @@ export default defineComponent({ :cache_policy="$root.$data.cache_policy" > + + This validation test runs {{(architecture.config.name === 'SRV32' ? 89 : 122)}} RISC-V programs.
+ These programs are taken from the official RISC-V test repository (riscv-tests), where the correct operation
+ of the full instruction set of the RISC-V specification is verified. +

+ + + + Run tests + + + +
+
+
+
+ +
+ +
+ diff --git a/src/web/components/simulator/SimulatorControls.vue b/src/web/components/simulator/SimulatorControls.vue index 51c2d4135..0f8a6e898 100644 --- a/src/web/components/simulator/SimulatorControls.vue +++ b/src/web/components/simulator/SimulatorControls.vue @@ -302,7 +302,7 @@ function execute_instruction() { } else if (document.app.$data.execution_mode_run === -1) { document.app.$data.execution_mode_run = 1; status.run_program = 1; - SailExecute(document.app.$data.binary, ["--entry-address", /*"0x80000000"*/ document.app.$data.entry_elf.toString(16), "--disable-compressed", "--cache-pol", "1", "-p", "output.elf"]); + SailExecute(document.app.$data.binary, ["--entry-address", document.app.$data.entry_elf.toString(16), "--cache-pol", "1", "-p", "output.elf"]); // console.log("Ejecutado"); } else if (document.app.$data.execution_mode_run !== -1 && document.app.$data.execution_mode_run !== 2){ document.app.$data.execution_mode_run = 1; @@ -413,7 +413,7 @@ function execute_program_packed() { } else if (document.app.$data.execution_mode_run === -1){ status.run_program = 1; document.app.$data.execution_mode_run = 0; - SailExecute(document.app.$data.binary, ["--entry-address", /*"0x80000000"*/ document.app.$data.entry_elf.toString(16), "--disable-compressed", "--cache-pol", "1", "-p", "output.elf"]); + SailExecute(document.app.$data.binary, ["--entry-address", document.app.$data.entry_elf.toString(16), "--cache-pol", "1", "-p", "output.elf"]); } else if (document.app.$data.execution_mode_run !== -1 && document.app.$data.execution_mode_run !== 2){ document.app.$data.execution_mode_run = 0; sailexec._reanudar_ejecucion(parseInt(0,10)); From 59af2d8c1e9b8c78ca5951957f6b705070b6db51 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Mon, 23 Mar 2026 13:37:55 +0100 Subject: [PATCH 65/85] upload validation sail tests --- examples/RISCV-32-Sail-Validation/list.json | 536 ++++++++++++++++++ .../rv32mi-p-breakpoint.elf | Bin 0 -> 13148 bytes .../RISCV-32-Sail-Validation/rv32mi-p-csr.elf | Bin 0 -> 13436 bytes .../rv32mi-p-illegal.elf | Bin 0 -> 9272 bytes .../rv32mi-p-ma_addr.elf | Bin 0 -> 13380 bytes .../rv32mi-p-ma_fetch.elf | Bin 0 -> 9004 bytes .../rv32mi-p-mcsr.elf | Bin 0 -> 9020 bytes .../rv32mi-p-sbreak.elf | Bin 0 -> 9028 bytes .../rv32mi-p-scall.elf | Bin 0 -> 9028 bytes .../rv32mi-p-shamt.elf | Bin 0 -> 9048 bytes .../RISCV-32-Sail-Validation/rv32si-p-csr.elf | Bin 0 -> 13388 bytes .../rv32si-p-dirty.elf | Bin 0 -> 13196 bytes .../rv32si-p-ma_fetch.elf | Bin 0 -> 9004 bytes .../rv32si-p-sbreak.elf | Bin 0 -> 9028 bytes .../rv32si-p-scall.elf | Bin 0 -> 9028 bytes .../RISCV-32-Sail-Validation/rv32si-p-wfi.elf | Bin 0 -> 8972 bytes .../rv32ua-p-amoadd_w.elf | Bin 0 -> 9152 bytes .../rv32ua-p-amoand_w.elf | Bin 0 -> 9152 bytes .../rv32ua-p-amomax_w.elf | Bin 0 -> 9152 bytes .../rv32ua-p-amomaxu_w.elf | Bin 0 -> 9152 bytes .../rv32ua-p-amomin_w.elf | Bin 0 -> 9152 bytes .../rv32ua-p-amominu_w.elf | Bin 0 -> 9152 bytes .../rv32ua-p-amoor_w.elf | Bin 0 -> 9152 bytes .../rv32ua-p-amoswap_w.elf | Bin 0 -> 9152 bytes .../rv32ua-p-amoxor_w.elf | Bin 0 -> 9152 bytes .../rv32ua-p-lrsc.elf | Bin 0 -> 14304 bytes .../RISCV-32-Sail-Validation/rv32uc-p-rvc.elf | Bin 0 -> 17780 bytes .../rv32ud-p-fadd.elf | Bin 0 -> 13892 bytes .../rv32ud-p-fclass.elf | Bin 0 -> 13652 bytes .../rv32ud-p-fcmp.elf | Bin 0 -> 14316 bytes .../rv32ud-p-fcvt.elf | Bin 0 -> 13564 bytes .../rv32ud-p-fcvt_w.elf | Bin 0 -> 14432 bytes .../rv32ud-p-fdiv.elf | Bin 0 -> 13724 bytes .../rv32ud-p-fmadd.elf | Bin 0 -> 14064 bytes .../rv32ud-p-fmin.elf | Bin 0 -> 14576 bytes .../rv32uf-p-fadd.elf | Bin 0 -> 13732 bytes .../rv32uf-p-fclass.elf | Bin 0 -> 9204 bytes .../rv32uf-p-fcmp.elf | Bin 0 -> 14076 bytes .../rv32uf-p-fcvt.elf | Bin 0 -> 13280 bytes .../rv32uf-p-fcvt_w.elf | Bin 0 -> 14432 bytes .../rv32uf-p-fdiv.elf | Bin 0 -> 13544 bytes .../rv32uf-p-fmadd.elf | Bin 0 -> 13872 bytes .../rv32uf-p-fmin.elf | Bin 0 -> 14288 bytes .../RISCV-32-Sail-Validation/rv32ui-p-add.elf | Bin 0 -> 9852 bytes .../rv32ui-p-addi.elf | Bin 0 -> 9540 bytes .../RISCV-32-Sail-Validation/rv32ui-p-and.elf | Bin 0 -> 9588 bytes .../rv32ui-p-andi.elf | Bin 0 -> 9276 bytes .../rv32ui-p-auipc.elf | Bin 0 -> 9020 bytes .../RISCV-32-Sail-Validation/rv32ui-p-beq.elf | Bin 0 -> 9444 bytes .../RISCV-32-Sail-Validation/rv32ui-p-bge.elf | Bin 0 -> 9516 bytes .../rv32ui-p-bgeu.elf | Bin 0 -> 9516 bytes .../RISCV-32-Sail-Validation/rv32ui-p-blt.elf | Bin 0 -> 9444 bytes .../rv32ui-p-bltu.elf | Bin 0 -> 9444 bytes .../RISCV-32-Sail-Validation/rv32ui-p-bne.elf | Bin 0 -> 9444 bytes .../rv32ui-p-fence_i.elf | Bin 0 -> 13140 bytes .../RISCV-32-Sail-Validation/rv32ui-p-jal.elf | Bin 0 -> 9072 bytes .../rv32ui-p-jalr.elf | Bin 0 -> 9140 bytes .../RISCV-32-Sail-Validation/rv32ui-p-lb.elf | Bin 0 -> 13608 bytes .../RISCV-32-Sail-Validation/rv32ui-p-lbu.elf | Bin 0 -> 13608 bytes .../RISCV-32-Sail-Validation/rv32ui-p-lh.elf | Bin 0 -> 13608 bytes .../RISCV-32-Sail-Validation/rv32ui-p-lhu.elf | Bin 0 -> 13608 bytes .../RISCV-32-Sail-Validation/rv32ui-p-lui.elf | Bin 0 -> 9088 bytes .../RISCV-32-Sail-Validation/rv32ui-p-lw.elf | Bin 0 -> 13608 bytes .../RISCV-32-Sail-Validation/rv32ui-p-or.elf | Bin 0 -> 9588 bytes .../RISCV-32-Sail-Validation/rv32ui-p-ori.elf | Bin 0 -> 9276 bytes .../RISCV-32-Sail-Validation/rv32ui-p-sb.elf | Bin 0 -> 13836 bytes .../RISCV-32-Sail-Validation/rv32ui-p-sh.elf | Bin 0 -> 13852 bytes .../rv32ui-p-simple.elf | Bin 0 -> 8932 bytes .../RISCV-32-Sail-Validation/rv32ui-p-sll.elf | Bin 0 -> 9948 bytes .../rv32ui-p-slli.elf | Bin 0 -> 9540 bytes .../RISCV-32-Sail-Validation/rv32ui-p-slt.elf | Bin 0 -> 9852 bytes .../rv32ui-p-slti.elf | Bin 0 -> 9540 bytes .../rv32ui-p-sltiu.elf | Bin 0 -> 9540 bytes .../rv32ui-p-sltu.elf | Bin 0 -> 9852 bytes .../RISCV-32-Sail-Validation/rv32ui-p-sra.elf | Bin 0 -> 9972 bytes .../rv32ui-p-srai.elf | Bin 0 -> 9540 bytes .../RISCV-32-Sail-Validation/rv32ui-p-srl.elf | Bin 0 -> 9972 bytes .../rv32ui-p-srli.elf | Bin 0 -> 9540 bytes .../RISCV-32-Sail-Validation/rv32ui-p-sub.elf | Bin 0 -> 9828 bytes .../RISCV-32-Sail-Validation/rv32ui-p-sw.elf | Bin 0 -> 13868 bytes .../RISCV-32-Sail-Validation/rv32ui-p-xor.elf | Bin 0 -> 9588 bytes .../rv32ui-p-xori.elf | Bin 0 -> 9276 bytes .../RISCV-32-Sail-Validation/rv32um-p-div.elf | Bin 0 -> 9180 bytes .../rv32um-p-divu.elf | Bin 0 -> 9180 bytes .../RISCV-32-Sail-Validation/rv32um-p-mul.elf | Bin 0 -> 9828 bytes .../rv32um-p-mulh.elf | Bin 0 -> 9780 bytes .../rv32um-p-mulhsu.elf | Bin 0 -> 9780 bytes .../rv32um-p-mulhu.elf | Bin 0 -> 9780 bytes .../RISCV-32-Sail-Validation/rv32um-p-rem.elf | Bin 0 -> 9180 bytes .../rv32um-p-remu.elf | Bin 0 -> 9180 bytes examples/RISCV-64-Sail-Validation/list.json | 490 ++++++++++++++++ .../rv64mi-p-access.elf | Bin 0 -> 9296 bytes .../rv64mi-p-breakpoint.elf | Bin 0 -> 13488 bytes .../RISCV-64-Sail-Validation/rv64mi-p-csr.elf | Bin 0 -> 13936 bytes .../rv64mi-p-illegal.elf | Bin 0 -> 9648 bytes .../rv64mi-p-ma_addr.elf | Bin 0 -> 13712 bytes .../rv64mi-p-ma_fetch.elf | Bin 0 -> 9296 bytes .../rv64mi-p-mcsr.elf | Bin 0 -> 9320 bytes .../rv64mi-p-sbreak.elf | Bin 0 -> 9328 bytes .../rv64mi-p-scall.elf | Bin 0 -> 9328 bytes .../RISCV-64-Sail-Validation/rv64si-p-csr.elf | Bin 0 -> 13840 bytes .../rv64si-p-dirty.elf | Bin 0 -> 13552 bytes .../rv64si-p-ma_fetch.elf | Bin 0 -> 9296 bytes .../rv64si-p-sbreak.elf | Bin 0 -> 9328 bytes .../rv64si-p-scall.elf | Bin 0 -> 9328 bytes .../RISCV-64-Sail-Validation/rv64si-p-wfi.elf | Bin 0 -> 9256 bytes .../rv64ua-p-amoadd_d.elf | Bin 0 -> 9504 bytes .../rv64ua-p-amoadd_w.elf | Bin 0 -> 9504 bytes .../rv64ua-p-amoand_d.elf | Bin 0 -> 9504 bytes .../rv64ua-p-amoand_w.elf | Bin 0 -> 9504 bytes .../rv64ua-p-amomax_d.elf | Bin 0 -> 9504 bytes .../rv64ua-p-amomax_w.elf | Bin 0 -> 9504 bytes .../rv64ua-p-amomaxu_d.elf | Bin 0 -> 9504 bytes .../rv64ua-p-amomaxu_w.elf | Bin 0 -> 9504 bytes .../rv64ua-p-amomin_d.elf | Bin 0 -> 9504 bytes .../rv64ua-p-amomin_w.elf | Bin 0 -> 9504 bytes .../rv64ua-p-amominu_d.elf | Bin 0 -> 9504 bytes .../rv64ua-p-amominu_w.elf | Bin 0 -> 9504 bytes .../rv64ua-p-amoor_d.elf | Bin 0 -> 9504 bytes .../rv64ua-p-amoor_w.elf | Bin 0 -> 9504 bytes .../rv64ua-p-amoswap_d.elf | Bin 0 -> 9504 bytes .../rv64ua-p-amoswap_w.elf | Bin 0 -> 9504 bytes .../rv64ua-p-amoxor_d.elf | Bin 0 -> 9504 bytes .../rv64ua-p-amoxor_w.elf | Bin 0 -> 9504 bytes .../rv64ua-p-lrsc.elf | Bin 0 -> 14688 bytes .../RISCV-64-Sail-Validation/rv64uc-p-rvc.elf | Bin 0 -> 18392 bytes .../rv64ud-p-fadd.elf | Bin 0 -> 14368 bytes .../rv64ud-p-fclass.elf | Bin 0 -> 9568 bytes .../rv64ud-p-fcmp.elf | Bin 0 -> 14872 bytes .../rv64ud-p-fcvt.elf | Bin 0 -> 14240 bytes .../rv64ud-p-fcvt_w.elf | Bin 0 -> 17408 bytes .../rv64ud-p-fdiv.elf | Bin 0 -> 14168 bytes .../rv64ud-p-fmadd.elf | Bin 0 -> 14568 bytes .../rv64ud-p-fmin.elf | Bin 0 -> 15176 bytes .../rv64ud-p-ldst.elf | Bin 0 -> 13592 bytes .../rv64ud-p-move.elf | Bin 0 -> 15032 bytes .../rv64ud-p-recoding.elf | Bin 0 -> 13800 bytes .../rv64ud-p-structural.elf | Bin 0 -> 9200 bytes .../rv64uf-p-fadd.elf | Bin 0 -> 14208 bytes .../rv64uf-p-fclass.elf | Bin 0 -> 9568 bytes .../rv64uf-p-fcmp.elf | Bin 0 -> 14632 bytes .../rv64uf-p-fcvt.elf | Bin 0 -> 13944 bytes .../rv64uf-p-fcvt_w.elf | Bin 0 -> 16440 bytes .../rv64uf-p-fdiv.elf | Bin 0 -> 13968 bytes .../rv64uf-p-fmadd.elf | Bin 0 -> 14376 bytes .../rv64uf-p-fmin.elf | Bin 0 -> 14888 bytes .../rv64uf-p-ldst.elf | Bin 0 -> 13496 bytes .../rv64uf-p-move.elf | Bin 0 -> 9856 bytes .../rv64uf-p-recoding.elf | Bin 0 -> 13632 bytes .../RISCV-64-Sail-Validation/rv64ui-p-add.elf | Bin 0 -> 10432 bytes .../rv64ui-p-addi.elf | Bin 0 -> 10016 bytes .../rv64ui-p-addiw.elf | Bin 0 -> 10016 bytes .../rv64ui-p-addw.elf | Bin 0 -> 10432 bytes .../RISCV-64-Sail-Validation/rv64ui-p-and.elf | Bin 0 -> 10080 bytes .../rv64ui-p-andi.elf | Bin 0 -> 9664 bytes .../rv64ui-p-auipc.elf | Bin 0 -> 9320 bytes .../RISCV-64-Sail-Validation/rv64ui-p-beq.elf | Bin 0 -> 9888 bytes .../RISCV-64-Sail-Validation/rv64ui-p-bge.elf | Bin 0 -> 9984 bytes .../rv64ui-p-bgeu.elf | Bin 0 -> 9984 bytes .../RISCV-64-Sail-Validation/rv64ui-p-blt.elf | Bin 0 -> 9888 bytes .../rv64ui-p-bltu.elf | Bin 0 -> 9888 bytes .../RISCV-64-Sail-Validation/rv64ui-p-bne.elf | Bin 0 -> 9888 bytes .../rv64ui-p-fence_i.elf | Bin 0 -> 13480 bytes .../RISCV-64-Sail-Validation/rv64ui-p-jal.elf | Bin 0 -> 9384 bytes .../rv64ui-p-jalr.elf | Bin 0 -> 9480 bytes .../RISCV-64-Sail-Validation/rv64ui-p-lb.elf | Bin 0 -> 14104 bytes .../RISCV-64-Sail-Validation/rv64ui-p-lbu.elf | Bin 0 -> 14104 bytes .../RISCV-64-Sail-Validation/rv64ui-p-ld.elf | Bin 0 -> 14120 bytes .../RISCV-64-Sail-Validation/rv64ui-p-lh.elf | Bin 0 -> 14104 bytes .../RISCV-64-Sail-Validation/rv64ui-p-lhu.elf | Bin 0 -> 14104 bytes .../RISCV-64-Sail-Validation/rv64ui-p-lui.elf | Bin 0 -> 9408 bytes .../RISCV-64-Sail-Validation/rv64ui-p-lw.elf | Bin 0 -> 14104 bytes .../RISCV-64-Sail-Validation/rv64ui-p-lwu.elf | Bin 0 -> 14104 bytes .../RISCV-64-Sail-Validation/rv64ui-p-or.elf | Bin 0 -> 10080 bytes .../RISCV-64-Sail-Validation/rv64ui-p-ori.elf | Bin 0 -> 9664 bytes .../RISCV-64-Sail-Validation/rv64ui-p-sb.elf | Bin 0 -> 14416 bytes .../RISCV-64-Sail-Validation/rv64ui-p-sd.elf | Bin 0 -> 14480 bytes .../RISCV-64-Sail-Validation/rv64ui-p-sh.elf | Bin 0 -> 14432 bytes .../rv64ui-p-simple.elf | Bin 0 -> 9200 bytes .../RISCV-64-Sail-Validation/rv64ui-p-sll.elf | Bin 0 -> 10688 bytes .../rv64ui-p-slli.elf | Bin 0 -> 10112 bytes .../rv64ui-p-slliw.elf | Bin 0 -> 10144 bytes .../rv64ui-p-sllw.elf | Bin 0 -> 10720 bytes .../RISCV-64-Sail-Validation/rv64ui-p-slt.elf | Bin 0 -> 10432 bytes .../rv64ui-p-slti.elf | Bin 0 -> 10016 bytes .../rv64ui-p-sltiu.elf | Bin 0 -> 10016 bytes .../rv64ui-p-sltu.elf | Bin 0 -> 10432 bytes .../RISCV-64-Sail-Validation/rv64ui-p-sra.elf | Bin 0 -> 10592 bytes .../rv64ui-p-srai.elf | Bin 0 -> 10016 bytes .../rv64ui-p-sraiw.elf | Bin 0 -> 10208 bytes .../rv64ui-p-sraw.elf | Bin 0 -> 10720 bytes .../RISCV-64-Sail-Validation/rv64ui-p-srl.elf | Bin 0 -> 10592 bytes .../rv64ui-p-srli.elf | Bin 0 -> 10016 bytes .../rv64ui-p-srliw.elf | Bin 0 -> 10144 bytes .../rv64ui-p-srlw.elf | Bin 0 -> 10720 bytes .../RISCV-64-Sail-Validation/rv64ui-p-sub.elf | Bin 0 -> 10400 bytes .../rv64ui-p-subw.elf | Bin 0 -> 10400 bytes .../RISCV-64-Sail-Validation/rv64ui-p-sw.elf | Bin 0 -> 14448 bytes .../RISCV-64-Sail-Validation/rv64ui-p-xor.elf | Bin 0 -> 10080 bytes .../rv64ui-p-xori.elf | Bin 0 -> 9664 bytes .../RISCV-64-Sail-Validation/rv64um-p-div.elf | Bin 0 -> 9536 bytes .../rv64um-p-divu.elf | Bin 0 -> 9536 bytes .../rv64um-p-divuw.elf | Bin 0 -> 9536 bytes .../rv64um-p-divw.elf | Bin 0 -> 9536 bytes .../RISCV-64-Sail-Validation/rv64um-p-mul.elf | Bin 0 -> 10272 bytes .../rv64um-p-mulh.elf | Bin 0 -> 10144 bytes .../rv64um-p-mulhsu.elf | Bin 0 -> 10144 bytes .../rv64um-p-mulhu.elf | Bin 0 -> 10208 bytes .../rv64um-p-mulw.elf | Bin 0 -> 10144 bytes .../RISCV-64-Sail-Validation/rv64um-p-rem.elf | Bin 0 -> 9536 bytes .../rv64um-p-remu.elf | Bin 0 -> 9536 bytes .../rv64um-p-remuw.elf | Bin 0 -> 9536 bytes .../rv64um-p-remw.elf | Bin 0 -> 9568 bytes 213 files changed, 1026 insertions(+) create mode 100644 examples/RISCV-32-Sail-Validation/list.json create mode 100644 examples/RISCV-32-Sail-Validation/rv32mi-p-breakpoint.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32mi-p-csr.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32mi-p-illegal.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32mi-p-ma_addr.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32mi-p-ma_fetch.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32mi-p-mcsr.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32mi-p-sbreak.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32mi-p-scall.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32mi-p-shamt.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32si-p-csr.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32si-p-dirty.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32si-p-ma_fetch.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32si-p-sbreak.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32si-p-scall.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32si-p-wfi.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ua-p-amoadd_w.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ua-p-amoand_w.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ua-p-amomax_w.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ua-p-amomaxu_w.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ua-p-amomin_w.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ua-p-amominu_w.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ua-p-amoor_w.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ua-p-amoswap_w.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ua-p-amoxor_w.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ua-p-lrsc.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32uc-p-rvc.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ud-p-fadd.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ud-p-fclass.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ud-p-fcmp.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ud-p-fcvt.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ud-p-fcvt_w.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ud-p-fdiv.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ud-p-fmadd.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ud-p-fmin.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32uf-p-fadd.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32uf-p-fclass.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32uf-p-fcmp.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32uf-p-fcvt.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32uf-p-fcvt_w.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32uf-p-fdiv.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32uf-p-fmadd.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32uf-p-fmin.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-add.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-addi.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-and.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-andi.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-auipc.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-beq.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-bge.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-bgeu.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-blt.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-bltu.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-bne.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-fence_i.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-jal.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-jalr.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-lb.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-lbu.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-lh.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-lhu.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-lui.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-lw.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-or.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-ori.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-sb.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-sh.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-simple.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-sll.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-slli.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-slt.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-slti.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-sltiu.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-sltu.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-sra.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-srai.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-srl.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-srli.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-sub.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-sw.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-xor.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32ui-p-xori.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32um-p-div.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32um-p-divu.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32um-p-mul.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32um-p-mulh.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32um-p-mulhsu.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32um-p-mulhu.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32um-p-rem.elf create mode 100644 examples/RISCV-32-Sail-Validation/rv32um-p-remu.elf create mode 100644 examples/RISCV-64-Sail-Validation/list.json create mode 100755 examples/RISCV-64-Sail-Validation/rv64mi-p-access.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64mi-p-breakpoint.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64mi-p-csr.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64mi-p-illegal.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64mi-p-ma_addr.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64mi-p-ma_fetch.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64mi-p-mcsr.elf create mode 100755 examples/RISCV-64-Sail-Validation/rv64mi-p-sbreak.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64mi-p-scall.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64si-p-csr.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64si-p-dirty.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64si-p-ma_fetch.elf create mode 100755 examples/RISCV-64-Sail-Validation/rv64si-p-sbreak.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64si-p-scall.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64si-p-wfi.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ua-p-amoadd_d.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ua-p-amoadd_w.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ua-p-amoand_d.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ua-p-amoand_w.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ua-p-amomax_d.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ua-p-amomax_w.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ua-p-amomaxu_d.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ua-p-amomaxu_w.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ua-p-amomin_d.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ua-p-amomin_w.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ua-p-amominu_d.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ua-p-amominu_w.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ua-p-amoor_d.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ua-p-amoor_w.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ua-p-amoswap_d.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ua-p-amoswap_w.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ua-p-amoxor_d.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ua-p-amoxor_w.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ua-p-lrsc.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64uc-p-rvc.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ud-p-fadd.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ud-p-fclass.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ud-p-fcmp.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ud-p-fcvt.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ud-p-fcvt_w.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ud-p-fdiv.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ud-p-fmadd.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ud-p-fmin.elf create mode 100755 examples/RISCV-64-Sail-Validation/rv64ud-p-ldst.elf create mode 100755 examples/RISCV-64-Sail-Validation/rv64ud-p-move.elf create mode 100755 examples/RISCV-64-Sail-Validation/rv64ud-p-recoding.elf create mode 100755 examples/RISCV-64-Sail-Validation/rv64ud-p-structural.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64uf-p-fadd.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64uf-p-fclass.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64uf-p-fcmp.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64uf-p-fcvt.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64uf-p-fcvt_w.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64uf-p-fdiv.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64uf-p-fmadd.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64uf-p-fmin.elf create mode 100755 examples/RISCV-64-Sail-Validation/rv64uf-p-ldst.elf create mode 100755 examples/RISCV-64-Sail-Validation/rv64uf-p-move.elf create mode 100755 examples/RISCV-64-Sail-Validation/rv64uf-p-recoding.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-add.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-addi.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-addiw.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-addw.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-and.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-andi.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-auipc.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-beq.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-bge.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-bgeu.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-blt.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-bltu.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-bne.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-fence_i.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-jal.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-jalr.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-lb.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-lbu.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-ld.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-lh.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-lhu.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-lui.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-lw.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-lwu.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-or.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-ori.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-sb.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-sd.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-sh.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-simple.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-sll.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-slli.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-slliw.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-sllw.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-slt.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-slti.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-sltiu.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-sltu.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-sra.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-srai.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-sraiw.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-sraw.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-srl.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-srli.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-srliw.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-srlw.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-sub.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-subw.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-sw.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-xor.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64ui-p-xori.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64um-p-div.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64um-p-divu.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64um-p-divuw.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64um-p-divw.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64um-p-mul.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64um-p-mulh.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64um-p-mulhsu.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64um-p-mulhu.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64um-p-mulw.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64um-p-rem.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64um-p-remu.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64um-p-remuw.elf create mode 100644 examples/RISCV-64-Sail-Validation/rv64um-p-remw.elf diff --git a/examples/RISCV-32-Sail-Validation/list.json b/examples/RISCV-32-Sail-Validation/list.json new file mode 100644 index 000000000..a1f9cebb2 --- /dev/null +++ b/examples/RISCV-32-Sail-Validation/list.json @@ -0,0 +1,536 @@ +[ + { + "name": "rv32ua-p-lrsc.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ua-p-lrsc.elf", + "doubleen": false, + "vectoren": true + }, + { + "name": "rv32ud-p-fmin.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ud-p-fmin.elf", + "doubleen": true, + "vectoren": true + }, + { + "name": "rv32mi-p-breakpoint.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32mi-p-breakpoint.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32mi-p-csr.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32mi-p-csr.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32mi-p-illegal.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32mi-p-illegal.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32mi-p-ma_addr.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32mi-p-ma_addr.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32mi-p-ma_fetch.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32mi-p-ma_fetch.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32mi-p-mcsr.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32mi-p-mcsr.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32mi-p-sbreak.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32mi-p-sbreak.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32mi-p-scall.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32mi-p-scall.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32mi-p-shamt.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32mi-p-shamt.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32si-p-csr.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32si-p-csr.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32si-p-dirty.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32si-p-dirty.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32si-p-ma_fetch.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32si-p-ma_fetch.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32si-p-sbreak.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32si-p-sbreak.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32si-p-scall.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32si-p-scall.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32si-p-wfi.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32si-p-wfi.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ua-p-amoadd_w.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ua-p-amoadd_w.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ua-p-amoand_w.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ua-p-amoand_w.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ua-p-amomaxu_w.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ua-p-amomaxu_w.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ua-p-amomax_w.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ua-p-amomax_w.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ua-p-amominu_w.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ua-p-amominu_w.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ua-p-amomin_w.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ua-p-amomin_w.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ua-p-amoor_w.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ua-p-amoor_w.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ua-p-amoswap_w.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ua-p-amoswap_w.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ua-p-amoxor_w.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ua-p-amoxor_w.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32uc-p-rvc.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32uc-p-rvc.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ud-p-fadd.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ud-p-fadd.elf", + "doubleen": true, + "vectoren": false + }, + { + "name": "rv32ud-p-fclass.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ud-p-fclass.elf", + "doubleen": true, + "vectoren": false + }, + { + "name": "rv32ud-p-fcmp.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ud-p-fcmp.elf", + "doubleen": true, + "vectoren": false + }, + { + "name": "rv32ud-p-fcvt.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ud-p-fcvt.elf", + "doubleen": true, + "vectoren": false + }, + { + "name": "rv32ud-p-fcvt_w.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ud-p-fcvt_w.elf", + "doubleen": true, + "vectoren": false + }, + { + "name": "rv32ud-p-fdiv.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ud-p-fdiv.elf", + "doubleen": true, + "vectoren": false + }, + { + "name": "rv32ud-p-fmadd.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ud-p-fmadd.elf", + "doubleen": true, + "vectoren": false + }, + { + "name": "rv32uf-p-fadd.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32uf-p-fadd.elf", + "doubleen": true, + "vectoren": false + }, + { + "name": "rv32uf-p-fclass.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32uf-p-fclass.elf", + "doubleen": true, + "vectoren": false + }, + { + "name": "rv32uf-p-fcmp.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32uf-p-fcmp.elf", + "doubleen": true, + "vectoren": false + }, + { + "name": "rv32uf-p-fcvt.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32uf-p-fcvt.elf", + "doubleen": true, + "vectoren": false + }, + { + "name": "rv32uf-p-fcvt_w.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32uf-p-fcvt_w.elf", + "doubleen": true, + "vectoren": false + }, + { + "name": "rv32uf-p-fdiv.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32uf-p-fdiv.elf", + "doubleen": true, + "vectoren": false + }, + { + "name": "rv32uf-p-fmadd.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32uf-p-fmadd.elf", + "doubleen": true, + "vectoren": false + }, + { + "name": "rv32uf-p-fmin.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32uf-p-fmin.elf", + "doubleen": true, + "vectoren": false + }, + { + "name": "rv32ui-p-add.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-add.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-addi.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-addi.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-and.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-and.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-andi.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-andi.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-auipc.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-auipc.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-beq.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-beq.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-bge.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-bge.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-bgeu.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-bgeu.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-blt.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-blt.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-bltu.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-bltu.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-bne.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-bne.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-fence_i.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-fence_i.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-jal.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-jal.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-jalr.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-jalr.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-lb.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-lb.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-lbu.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-lbu.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-lh.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-lh.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-lhu.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-lhu.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-lui.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-lui.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-lw.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-lw.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-or.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-or.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-ori.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-ori.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-sb.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-sb.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-sh.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-sh.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-simple.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-simple.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-sll.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-sll.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-slli.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-slli.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-slt.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-slt.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-slti.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-slti.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-sltiu.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-sltiu.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-sltu.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-sltu.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-sra.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-sra.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-srai.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-srai.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-srl.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-srl.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-srli.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-srli.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-sub.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-sub.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-sw.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-sw.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-xor.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-xor.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32ui-p-xori.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32ui-p-xori.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32um-p-div.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32um-p-div.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32um-p-divu.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32um-p-divu.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32um-p-mul.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32um-p-mul.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32um-p-mulh.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32um-p-mulh.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32um-p-mulhsu.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32um-p-mulhsu.elf", + "doubleen": true, + "vectoren": true + }, + { + "name": "rv32um-p-mulhu.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32um-p-mulhu.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32um-p-rem.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32um-p-rem.elf", + "doubleen": false, + "vectoren": false + }, + { + "name": "rv32um-p-remu.elf", + "url": "examples/RISCV-32-Sail-Validation/rv32um-p-remu.elf", + "doubleen": false, + "vectoren": false + } +] \ No newline at end of file diff --git a/examples/RISCV-32-Sail-Validation/rv32mi-p-breakpoint.elf b/examples/RISCV-32-Sail-Validation/rv32mi-p-breakpoint.elf new file mode 100644 index 0000000000000000000000000000000000000000..b05473758999f8e365f4380bae9e060daa4b5632 GIT binary patch literal 13148 zcmeI3&5ImG7{=f3nQlK2yEc=s3kGeo&LSRWJIg>o1&5#^haiha^dgg)-pdE2=qRDvM2rRH(F#!8h0PnKt=k)64V(x%s@v##3C=FKr@I9W#XSY`vfLQ|MG+ z%v86SHw_mizyz286JP>NfC(@GCcp%k025#WOyKbmi0NKkuKI25r4&9ruW4^ep=;V* z3hjAq(IaYj-iu+~qfPS2c*Cn6#nd7F$E|l4Um#lc-#CsBzMsox=YA+0x{YrEddIfp z^qoMi(^9T~&9t@;=5lJkh8Eg>HJ{rlygvK^YA4Y6h)~QuG;tb^pvIXaE4=Jr7YClU z1W90mCq=FY;WswHCw}?aA65I`@#O5{sZhGxX{FXI8G{kC&=SoM9x!fvu8;@ z^7$kMO%9th372+-Y>G+az27YD_!NqnSj5MRhU?l=tV|kCr!K`Ac*R5?9o-CerC-ztnp8-S(>@a{vPJWl=)A& zuHhhslkfBN%ssKsv$J}c_cn6rulD|w)0K&~Qu^X9^6j{`wtk>|AA7&&v3K*>r!jvv z$k>LdMf%nPp6^1&xXN4qy+HeS>|<>Q1itP4@A}7w=R{lYTm*mc1WRzd_xRpm&cp zfHr3y@&~pZ#>1Dn#~FL)-h<# qt2~QZM>XE3P_tNQO}TcS=%>7!T}>QQ%sXB6c{n3u&dQXf^!)>;92v?0 literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32mi-p-csr.elf b/examples/RISCV-32-Sail-Validation/rv32mi-p-csr.elf new file mode 100644 index 0000000000000000000000000000000000000000..bdd015b69716c6e68479119a181d40457d398ddf GIT binary patch literal 13436 zcmeI3PiS049LIm}?Y>lv?!LIjmRj_Yc2z_+uj$rQEw~h_IYfx9iU(o4nSIGFCcDd< zNznGx#GC5?@i*$en;(j}75AYg%ZxYGNl1*rj z#ye3x00%bOTs?pAIijP^8~58gU+(c@ zU4uU4l4eodm`>?El zJC+;Y_YCHIvMkrk3G?1EP^WU3b15_&VuyN#{%*=Hv2L%xXH4`v=&zvv_E7(Q1AGBI zh5p+^ z%c0M}IUMc{%C&6#By%6!35_l>TejJ5VZk!lBbK@05%CqvJx{d5*Rdz;FT8SP`-K&Y zGOHGaIUDO*A@)@7Ks4^XvqoWIm{``zZj4ArX293Y#DzR7xPXU(wUg(=v>E24<8?Vc z6SWn|joUWm`V939*bz566BZa0ULC^wVkkNrH77K&hhN{J(8N6-j8T8YDHk#UZC{(d zuja+=4sBnb{+@{Tk_sP&RX#?7THlPh?1KNN#pbcmP+JH8o4QK<} zfHt5FXam}SHlPh?1KNN#pbcmP+JH9j|1yyL*8krY9ms@C`eXop(;qYb(JzaW@_t6t zoTa;aL#R#S8G)z)Vvh*A@N*94NdDzOL}+;B^1e&<)@%rT;7NDP?_YU|ZpD!N(N-4*a3Q zH^E(nf0W~$c)vF0`x%_hFZnmgi9Z`Yeg`y?@eWx2spBnhB{@$UPk6X;w8Ath<~yT| zEl$04uK9MUO}@uHQN8Ff(e_FBwN6@J^qaz~igu&T1vP4|`kYtwE-|kon(Y>~MZ@zI z79JPXF`B70=P0V5h(kFJC*$x+9LD2tDh{vG3}39)YoZqOahGPAttM|Icsz+?)Twb! z9lv?8Ip@uKb@E#EDsRrVYGT3nXxf`?wiK>%QS$}O3v8|$Z@{N2#?Xx4o{zRgC4PBc z)TR-IAIC;o6W%3J!a4+%5(%YfjZ)};E6*Se#}Pj#BhL`e%*f|z(o#t(&m+pbjAVIM z4n702o|H-wONje<@;!sY#Vz+sT9-M>G-S&>G+1aqj4O*v=01umniEkLXN)K(2PY-1 T%Fn!-SHd$y@>!y^qX(}GCV#I41Hb^ZQkX3aY&hzAey9{k?> zect=Mf8Y1!GQ3xwJ#^483>qbq29#4=N9AlaYpIh%Cf!eCRLt7#v_3{2e^?-5D{>X; z)BaBC$KZGtF54K4+jY_kXa%$aS^=$qRzNGD70?Q31+)TM0j+>m;J;NMpvwh0TsU`{~TA&hftTE z<-2|{#B33(*e)f8O%hTeCdOPh#EMCXvoC$ZbH8oN)ru>tj=OcfeFJN78~d=2VlkFZ z(apwv26Il-dCig>%;%)SV_&69m2~~FykNSGGWuB-`dRLvO76wM5fT&fPC55<9hQ$Z zu~)7gb_bO?H~D#j#2KvRSiuc2qO^}yYYD)lIGGsBsiBb_OTw6G%={q z6fY25Wae|@I&dM|kI7^2Nldck`=*W3#QJTFIU3K%<9OeDxIQ49`Cd2GQ^W=(XUB1- zY%5aq75d z-w!HweNc7lV#Olsib)sO1fVTh{o1+>=D$vew9OWUr zC1B-gqS<|{J|HVs|6JL(vQ58zKDX5 zqOjE)`7ei^$oHaPF^~~0wz~5te9u26{9e=vx)elnEp6-gpFz5!$Qkli?&U>=6&}~J_ zp-*jpq0?2^lTj;-Xeq*OylllGdFVsO!(b`h2i4^1rKr_L8HHK7IPxO@R8;G9I}z3L zU9)!oFx`VV1D3vp;q$`Z8GbwSXW~Yr`(W(icR_Y8PWFa|kyA6xvluh?xtMi`zCuSH l@@^QH`~&DVSUMI;PE!@4VdkcJJ}vQgsK!lJiE4il_XpTym}vk2 literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32mi-p-ma_addr.elf b/examples/RISCV-32-Sail-Validation/rv32mi-p-ma_addr.elf new file mode 100644 index 0000000000000000000000000000000000000000..954fcccac13b53f3f26415a4598b8a16e5ef0e32 GIT binary patch literal 13380 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 G`27HALF&)| literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32mi-p-shamt.elf b/examples/RISCV-32-Sail-Validation/rv32mi-p-shamt.elf new file mode 100644 index 0000000000000000000000000000000000000000..5f4964f8dcb965db52955b4747ebfdda3b4017af GIT binary patch literal 9048 zcmeI2zi-n(6vv;PxB?_3LB0RhU;O6A7@ES7V18;d56dT ztcroDO0f`3Wnf_hmaY|l0SkWs>Oat`g{dOEXFJ7WV(N4!-M#zXdw1{dlT6loadY~X zrfJY`I_yBEqAD&n%c-Xd40JdP17M_nD_M_lj9%gf>IN<0da|D-^9XfR$0_vz?BrKX z5l{pa0YyL&Py`eKML-cy1QY>9KoL*`4wgUw8$~h6s<9aXKhi72W*7JX*-yarUSY%p zD4Ax77fo0I6DXG7Ga-N)#6MQ=j*J0}v#Wc-*885AsBLr0fVVn8ysT@Yd&d^Da3a-T z6CLYYJ<-)KqeZP>N`1>&EW>ykd(DpVBSPl;Mdy?Z3rfR3HC{LH7F%YlSs)M<#zdHF zm#^r6an|}5%Kh3B-LfslnZ3Ez*u^{8Qxo_O!-xbk?DX90nDbbb?ks?1=NsDkpa!wV zfRBFHO2dX84_c^g;K#pdeAG^I^9W;Bhw%MF$sO|diFF2>Yq$4y%B)%{;QU`eihv@Z2q*%IfFhs>C;|sYAfil#enkP+0;F2+uaJZyZ1;xH zPGcWSi0ZB z%7^Fw=oQjgehcsW2E}Z)pP~Lh-rW9=C~MjK={%eKISrGt)tThH{@~%YnVCuep(i}) zJn^^;LXe@`>Cc~rzVsX!Gy@@_>9*$(wl9=B~bA;gF9+(e$ZL>d< z-jb~NZC^qqyC=Q&zuHNRqWY1fR)qLsy$IEo^jj^PoIy*=1=7Tkr8OobsnwD(jls`R x`>oE216FGD#Mb-DTdh ze@+fT&{Ie|ie9W9?7>4Nh>(*I1W$_evb`t)4d_Km${G(+62EW$#D^C>_4Io%`MuBk z{pP*5pV_@^_Pu@b%qh#VC~r3PDWj;0!RoOzQzegVdWH_rV48Q6@d$sTcWfekIeG}= z$^Bl^kHC?OF?|hYc^$a10XDz}*Z><~18jf|umLu}2G{@_U;_`%K!-L4xCrDAbc3>0aeill4B`66|wM)A+r&K-V|=&1L~{m%9$dvc<7 zPq+?!i0=a8W!sXgulw>Wjivle!m+)*Cs*y45W)6~X>K{I^-%BQs`)X#M96Y~>Um0z zOQq2rOPqGFi|t};xg?<}o4YJlY(ky8{-s{~x+_=5eR_9?bJ5|8#C>F?z1lep0vl5;ll9`ZHh?+o?d zu)r6=XOX{iaAxAxP|3Nu*&lVXx{D;P_b{&aaC1{mJLUDtt)Y13i_O^Tk|_5M%zUeJ zJ9p&-a>K}3cphUtNAG3*2VJ{+H?~$u9O)Hen_RhOyXpS5=R;-e-7UdKJdDfQAo193 z%k(6k@Dpz$vM9bbf@e39_%mx_8}tAA8pZY+iQOsck9*}(A)>AKoA=GSbljt@kD7n= z$K7(gd;;#%JxG@}unlf(fDNz#Hoykh02^QfY=8~00XDz}*Z><~18jf|umLu}2G{@_ zU;}J`4X^<=@PG|uzxDsGRU=(c$WI2~H~lH&AN{&{Iqz2_!vl10Zv?$FI3th@;Qk}% z3>f?@xMuJS_+^7n|BEkx%ho^h)xp0TJPUrx;5WflgG2DE244lAH#h<>8vHK!J%d-k zpBnrD_$)nC};W zS^pcjmOURA3;Vj-;BDZ;+4>&tr%AQcofKm6RQLFWla&sIfecjrQXo_(Bo#KgdH-_Q zQbApH7CKVVLZdyq7}SF+BIv4Cr%fHT5QGM+K&tu_%{5w!l=P3Kp_+#2G(4Y%nKT?v z!wYG64tKZOExAD5hLqF|TbEjk!F(`FbMkV1wxJpnv}fzGHQ#Qix59v$!F;Q2a9yfK zsHl!AnhQHi$;PF^ORJ~b$9th7uP&)Z6H$d}T*!MWxS}f9fTBwFqASUwTIm04kE2X~ zzLIk<`kCPjj6Nrmw_4VD8d293H0x*O5$X4R-fCH=g1BF&-y?Xqm~y}6eO+TLLoVvJ sF{sbyjNux;M1& literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32si-p-dirty.elf b/examples/RISCV-32-Sail-Validation/rv32si-p-dirty.elf new file mode 100644 index 0000000000000000000000000000000000000000..693451c60101b09ed3510dd32eda64d5c0f74b28 GIT binary patch literal 13196 zcmeI3PiP!f9LIk%vlC+}?j%c0!J@-1DaFHPDuI9s9RiggJ&5(t+cJ4OO_p|dmYJ8D zTy$9NO=O!9<3Y5n2%e-`Fh`5vP4MJRv1%()3#O))9)$J#=1)5GqNiT`{b2UJ?|a|( ze!u<9oOb8Ee&XZ{nx;_^I_*)e;sp%KXR?_EvPq|-^axF4^Hw?@<1>C!CsLQGhA^J4 zx6^(M9a|Vv*F-+A8V)AF1egF5U;<2l2`~XBzyz286JP>N;NcMn=xQaJw-=IXOya=U zNUB2;6RN#TLLVEmRiaw;+ry$#rB$ku@`_ig6p%~FPZv+kK1I~9kN+L)emIWi+}px3 zX&b)yCI^C-|(L&sFX%D;n0Fs9`(5e6Vr{H8_iN_#UPiN4Du? z`z|5p^n$86BHLLsDc*)Bxp3l-kyjgpH~xHnTNpR#AK zj{7{A9*Zq~qGs46wmdznL%&wr(ce}oITI6L0!)AjFaajO1egF5U;<2l2`~XB zzyz286JP>NfC(@GCcp%k025#WOyK`TphbAG|KB5479)GJU%lg>Yy8o#!Y=f_BOR{L z?eP?PCvip~9l-i0(W#X5)6i~7FG4?G(#sF%)6hjeRgn)lX&3t&bQbzF-U&d1(D0rD z(KYS9meAjn^d_`b^1r5ZzMqBt--0gkDgD0Ed3_f4{|Mq%zMl>K8FYF57tn6b%fbl? z2fE;=G|kIye_n{q7dOsF%gum7Kk{Ykyf0)Bk_^3m(SJ4UNWUe6wIGtT=Jnd={Fc8V z{J!i2JqqNSAC`3ATZP$Mf$12v*Sp literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32si-p-ma_fetch.elf b/examples/RISCV-32-Sail-Validation/rv32si-p-ma_fetch.elf new file mode 100644 index 0000000000000000000000000000000000000000..7a5fc3ccfb0d30b474c33c145798bbb0b6720e2d GIT binary patch literal 9004 zcmeI2&ui2`6vtn(O||xrY`3NL2W?zg5f9s-D+MhW#A**c6n}sh+3rr$?n=8^Go!XA zL$&CkNZTOZw8eiwisDrYf`5SjfGplysv@PhzL#V%_2kLZ3{2j9=e?OX^U0pF@8QVU z6-7~?)l}GlSosB<9L_?h3t)l@r=T6Q$Zv!ze0=(sRRHQ5P2qgF-VDb+YJU`m)Z4L> zUp7fV5|9KW0ZBj-kOU+FNk9^i1SA1TKoa=B1YG#g#s|$pp!>iMHB*7U46L2(8(?ZP z)vJS_(e+=fO^0dFfnwPW9bB*>__A`ncL3mod2!F(de!7Pdz%>=yufb(!Gfyr?XDxohv>GqV-|!69P!B*x(|m4fxReuN_`PP6q?Uiu2KY7c%gP!+}7t|5|eN-KQU``-#=Ow6)v->R zU{A?T0DHU+?$*Fwqd&D9;0GI?GrJpo?{;@`Mt86{0*%#;U7oYLS-XbuUz?31H-83; zACYZOH}WyKfd`RI5|9KW0ZBj-kOU+FNk9^i1SA1TKoZzbz$clCDgx-g|5&T78FE7# zY&X+r$FP=wG*uAv`Yf{30>r(_fS*p6Zx5{T+Qh$+^9P`ya2+40~cT8hKZAQ4M5sv99m%?_VYOkz2Vn)qsPA^u*V n6FXTdGwHw{?uC|GoYerO@p%O zunUDs+PFB|%sp)opu>3>0VDTY*?NLw@(ednH)sjhv;88QC#aKYoKhdbPJV7ofC(@G zCcp%k025#WOn?b60Vco%n85xLh+wlWCq+9o6YviWYpFQ^e}wD@@bzJB!i1z@nm_%z z2@7BX#rm@*MBqUBW&Pg7Nr2Ph>Rz<{ZYa+>JHBPW8yz5B(=|D`Ys=ekG}oUqo$A{| zInXboMXg`TeQQOmz<3+GW2g8Lq40gDa~g&Pjqz`qKW*SGw#`(tKq9Il*8%^94j5;B z`bfE7T5`~|x^_}`l}#NA2m}ZqpjudetE&Kcoel`}>P>HYUIX zm;e)C0!)AjFaajO1egF5U;_J2Afb%4vZ4TM0dlRED1s_&y7)Bc?2p%xWAkGfsai>N{5@fKD(tp25+lP>aEc)tOuO8je- zPVqk4ZJQoo|F*u=3E&r^gQ)24xke(guRM( zrSf70E=Iw894%*Qq{551d9oOwC0Cb~*Fme|+;+>E3RYAr?1c(i#TDt{|JROT7?Q~A zLWnKahEN?z*_>i>4lOO?=arnP$m>Z+QggB~kHJq*zuU9`uyG^)kKizNvQ&O@5PNnO aT52n&0N&@*Y%H%p|H*3HnI@w6N8B&6pVkBb literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32si-p-scall.elf b/examples/RISCV-32-Sail-Validation/rv32si-p-scall.elf new file mode 100644 index 0000000000000000000000000000000000000000..a73522ae9d0e2681573308bfd20abaabc4151a60 GIT binary patch literal 9028 zcmeI2&ui2`6vw~GHU*22)NQGt=(tr858E783Mv={rC<-Dd+-+1H0`c#H%n&J_GGAD zyvWv|z14rfL-FFZ=pQ1|f1su6sk*+&4-MkMi#^T2%$x7bn|Uvv$5jBO+(Ri z>>*cigBF{$Y^MPR9p^9%Bipyq^_a%^86A+_kV~|lo@ePiCLPbvRQ6%&a$hw?KoL*` z6ahs*5l{pa0YyL&Py`eKML-caSOOuohWHd~BxVeMWKc=WKKx;6H{t7p%7lryYMMX% zArp%*A$|R(i4YEw&ue!kP6Ctc%6_=>X28!lyS`;$T?dj?UE}@RHot|Vnf{RKMBf?k zzJ7@;Y5iihx0?Gh^0%owc0xZ9^1W~Jo~mJ?I{sDjXAH_>$4oQ}oKWSlM*J5#$j^HJ zPR4#|@qW$blg!@UnEOIG*wf=c)i7et47!WyoL#W9v)3s0k%r8jgHc?DY9&UZ!{VE| zmESLY#%SLv;)Wnz$L%y1Kh}_}jS`R1G^cWYdo?yjIqa`jD6gj<_xEbn*!Js)czycL zEo>d^+g8yO0YyL&Py`eKML-cy1QY>9KoL*`6oLOjAeOgQii!fN1<15stVoF=><&iB z&QdLb)Utx$1dT%_eV(*a($l0bm$a-eDC@hV8`|&tJkm}{FOY7Q^aIjhnZHGq4l94? z=ThhKEXuDhRmuMqNhg0kdES=$CA~rNULKFpc}$6=-jwfOoxR`mZ`MOZ0S|=xDDXuX zK}24!m_Lr%B5+063b{bb>&|xqH(2(Ao@j?%grXHhB|RUy-1j;iEO_k>dLHKpy7Mk? zFLpigFbXgiEVjEP?Q-Eo0xo%BAqtn$FkDa~ZWb&8>U?EMcynY$l-X7>6Tz~mx4UhD zdY+^1)rQDAlA<~J139kKx|= literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32si-p-wfi.elf b/examples/RISCV-32-Sail-Validation/rv32si-p-wfi.elf new file mode 100644 index 0000000000000000000000000000000000000000..b5471c1c01e2b33efa31a72414ff1ddfde5d7479 GIT binary patch literal 8972 zcmeI2&ui3B5XUFkO+h^*buASv8e0_cu$#k5MFpd%^iZMr1A37)`NfC(@GCcp%k025#W`%55#?WXM5-ONlu92_??a|B|7{5uf(xG`-)+A__bqG`ea zOrTtG$Ak!6$Ube|o<0FEXJ7si?Yte!Q|_*?40x>rWShDsN4Ffg1V;<~G1r;CGnOO$ zB6`&Ng(9|D=GvI=;BcJ`KO&T|?{rSfu%I>dO%n?S-eSkhGz%o6!kiRq?THsUV4n5i zJ=K0`$m~ryjBGn+}Gzj~eVEZeeFb{FhEim*-n}pJ$|M`Oi_h<@?a{4#jI4I%+-c2oawbcb%K<2ohiV zs`tQ>hgq?eZ@4M*n2T zFpGLV^8OBDhCLqC4^o+1E>5GT?FMOLWfy%RB+1--E^_b_(r;U^F&!Ul;?5x)qRIY{1^5t{sFdFJ&EhgOHzX;57N^cc$xXl$D84ooWk6@GImwd zG)P5_mSDYKkjS z3@8Q^1BwB~fMP%~pcqgLC@x$LF^J~$A4Ub)eC9AMD8^wZyd-sUHr9cC6_RR@Tcbd5K!+k703 z#Q3Ack-pvLP5lCD#QOO-wv^;rm~Z28>0&h7c-c44zhRx@y|@$MV$7h z31<-A(*E>oP&k7Z5SKFeF5yxvd z>n$>`A!>ddd{Om+3>F?2?pY|$`L5sa0!)Xga%~o*e>hg9Se=7LnRD>!lP<4K*UMr) z@Sx&N*XkMUa#0QhxR?b~fj=jwfFi#$C(0GnB8YW0wS>1QinV%8KrxxQSivs;Dn~I9 ze;viUCd4o9o6v4bDo$eHFCUqgBTT$n0QAkI;v_~9btfK~hwo?9ig6N_F|w&e@>R8H$MO{EFq$M?-V_n*MJOKp7xpav0k-&YDz0y45*s{uv8NfBy!U(WH}f99!m9s(G&&Ta)8&pY&pvq{VXEb9RAqOQ@_xJ}34 zfW#jKj`fWWZRw}cBGymI++xDDkZ==I{B)Ombo}PjUJ^O!XWTb#yY#6a-0!68i z6Jf3IY1pcGIFCe;6X1hs{nmdZRd7AOd*4ADw&#A4lwD@G#;t8O&!6vUmdVRwnNvPV4gyuOpn$ zw(B){I)mpC+ZlWd@r4Y&hj=D~A0STeH*s>}>0fx2dk5q0DBRWkT5b%VQJcr2s;o`pmuI6BdNPLa&+n^I@I&E(>Y_Wl-}PlQX{SFA%@U z>OlhnR`bIQW{xx>^AIn@N|GI3=`QxCIa2&xj>)k`_7c^AgEdEmEA<#2}xE p;oou|Hy?f3ja%G>maq4R0X|4qJo!C*@iST8+yKCk$jC>^`wcLR@ecq1 literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ua-p-amomax_w.elf b/examples/RISCV-32-Sail-Validation/rv32ua-p-amomax_w.elf new file mode 100644 index 0000000000000000000000000000000000000000..b6e91a5b32320c0a7b16a8f9c764c5d7fd05e900 GIT binary patch literal 9152 zcmeHN&ui2`6n@G6uzE15MJiY{c2UH`Zm=sA6$}M+4?VQ%!GjR8({y*SyIC?*TQ3^w zkAnx<8lgRDPqsHj#Cj2m2mggVi+_MER!_zC%_Py_$%{SBz~sH}y>I3{zT_0%y-VYl z6-9w$sqhVA6qGTzHXLQjV1NoIVGrb^ye{GaK7$8%fbSd+VO*RygdZRdD(LoMJdc*= z<&p|W1*8H}0jYpgKq?>=kP1izqyka_sen{qcNOqpBTGw0In)9m`+AvB>j24f`x=Pa z%M5A|3~1UL&yV%r1MF)yf zAt%6E+vJG~$kW%~@Y+vx+8H)!!7#r(uWn-xW^~sW);Un-eNr&Y(Hx$|y>tT4Jo@yt zu<{a0tM69U_hVc!fau-a{nb2#0-HdVyO|LCD6HfK591Ij7LcK?67h7z6F{DI6*6Rs zK1rZJxY&>2KENu1q(HqCv0ujLTN6^Wp@F~Pr3XdYbkivZCAdPPz-bv+c z#7TYL;VpzWl|S{`Je|UGh|Ltfi@1`)4-vOh_%Y(-ejO(#mjA+Q9LN3Wpuj5xeMVGY z$9~=-wqm{bd6TnK7)q?!E)g<0F?QwbWYGiPr7p8?yM%c@FyCn>{+!=nuFbr76EXs%V)X*?QtJcb*j+tpuJ#kPpH54Ygq`>7Zaj?*H?eO@B| yszr+P@Ouz5G5lN3;^w0-dvS}q(DL>E7{G_f6;FN-U;Ip(H#-b4A~Mk<;r#-#)$kzz literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ua-p-amomaxu_w.elf b/examples/RISCV-32-Sail-Validation/rv32ua-p-amomaxu_w.elf new file mode 100644 index 0000000000000000000000000000000000000000..81eeb29a17cd0b369ad355b872d637c6b2a0c24c GIT binary patch literal 9152 zcmeHN&ui2`6n@G6uzE15MJiY{c2UH`Zm=r_6%2y1LJy^ico0H5rrpKvCS<0zUNqDn z2M@9}LVMDlY;TH)^&%7x{tJ6m`~%!#^;BHnOcD*Ayx7wWOy2w6`)1zbOHSe4y)brB zQ4~m*3f~|>VHJaG!*Qkx2B>fxc0n=D>mnZFGrW%n_%84e#>II<_#xu3hHf9mi)eXX zE~$W2Kq?>=kP1izqyka_sen{KDj*e*3P=TZRsjz-^0Z=9BP|57ruYjn% z+@J>GfTsNIBv49M9l$h7;ManpkryYe1 znW9e;DiAI9qgMT*-)!$xhmD=kP1izqyka_sen{KDj*e*3P=V1ivl6P zHJ45l;4DCl@dp84Mv8wkL^uzdy?*q@aJE1M@cbck@)>*rv6aE2h|gv)pE=0lYlycq zc^h$BpLci@;dSLtJ)fsDcn-0d!FLeXGWY>vKZ743PVd)oa$@-}yvA|Tj}8jFM9^o% z^>ys$4Pq^%Jg=VIg@Bv5Zij{F?XJo8?6R|a?*2o607{{ zI*3I4brjEPoz=i&DtW@7laoX5>aUv}dbccJC$-4THIu`8bZ9=`aQEN^xgU_@l%N6PyJSB3QL literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ua-p-amomin_w.elf b/examples/RISCV-32-Sail-Validation/rv32ua-p-amomin_w.elf new file mode 100644 index 0000000000000000000000000000000000000000..959194f68af82ebe2ee51f3f28f2459967fbc824 GIT binary patch literal 9152 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 Fegl^D_#OZN literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ua-p-lrsc.elf b/examples/RISCV-32-Sail-Validation/rv32ua-p-lrsc.elf new file mode 100644 index 0000000000000000000000000000000000000000..4f0e3edeff0c5d1872ec349b916778329a0e2743 GIT binary patch literal 14304 zcmeI3PiP!f9LIk%v$L`O>ArMrv(%u2b-Sg)?qIeRRB$LpdZ-w*2R*Hmmq{|x?1Y(T ztp|0eq~1#E>z_+eJb088A=H~es1byo8gnUvE)_%xDK_;YyZycS69-RT?CJO5?eBfx zeBbZ)=CiYxW!{J5$6nSn4f3YLpOC4zjg#LWPOr4V0v!&(5R}vFESZn-Gk!@2P~B8h zIG?Pyl5vbWW{=`D_HuSz1!_cq2oM1xKm>>Y5g-CYfCvx)B0vO)!2Kf-z)C4AfWMvU}S;Z^B^?@-`fw)?!^m(ZQGf)BL<;N=!fCKX9bFYs)0kF?{@$X>svq4mM zZgXbBCHyZyp4PQ!@ijY|fLf}*O|;ZE2hpPbJVw;|bLq9ynb$(Ujoq;&{)v!XyQ}h4 zO$OE7TN*!V;x0BTQezMyCiKKu>kdDw1Nzw2uTj>7_ z)mHnAz_Lf`09A8*Q)2Gc{$-G52E7k{?0-}@p|`QtPp@CwxVrk~Px9lxHd>9Xn%v1i zY8LQ4>yL~y0F1`!A95$w)NJ6R>kp-C7Jk2kx#hz6(@S5Ntkqb~);YlUuJ6d|{w7Uu zs^vYS!nMda zVz6@mo=B=h1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F z0z`la5CJ0aKM;sjP9r}VglBqEjW7DBX61U@kxZB1_Fx!C$MB3$GJ)$K$3dx}52AJo z`dQR36!g)5={Hd4_0*0!C`Yw_@=v3Fz{<4&Z=){ZJ3<(+Y53j}<}dh9qMj(|_fbFm zRPHz64C+!L-&xdO7yK7c-z@0MsB49KpQC13K8E{ULY?nl>2H+I?w8^IzC%&;|A5-b zcr!eKWh-|W=g;>{!8tIYsHFY-j^q{l@Nf(YIDeEe?c3$G)B*&q@y>vpG3 zcpdK)_vVEkbRiJ4URcmP2t9uagcpgSt66M{2J*kONwUt8vH_~D9sq(0%epf}` Nc|50wDYskhy9a6zG#>x} literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32uc-p-rvc.elf b/examples/RISCV-32-Sail-Validation/rv32uc-p-rvc.elf new file mode 100644 index 0000000000000000000000000000000000000000..7813b7124f95ead1a5e3aa770177d59947222879 GIT binary patch literal 17780 zcmeI4Uu+ab9LImN?IB3)?e!=H`FBt;z(cwAPKt_QOIqv$ng&QD(d0O$M|%-^<#y%I z1G+Ty!GtuWOQb;qjlL9osq)Z7eE^LHqA^8_KFC8WG0|vZ3200-J-@TN*G_oysSoBi z&F*hMzxmB?=Dstzq}%Dd(YkA=5Q56Zp!*b(n}+jr3;CR;1R1n}7EmOpH~kha?(T(p zB6UTS3x2=7h36!>>T1KIx)$J4^;}p1R)7^?1y})AfE8c`SOHdm6<`He0ajps6)4cP zN_%r6?L}RZkCrOD=m5zD%8rsWN)@$Ha^unHjI4}OCq+rc%Dqu4kVW3q**&$}iRu#D z|0zsgD%tC;d(w>1d4tI7HH1B|J88GmvVcGJ*)yg~_JHv$EZBG^sOt@56NpdZvXUNN zB7}8+syy+CN%5LLglvmo6w^^pm}EmL#JK3|f$TR3apu^Es_#M59$1&O>k`Sk7Y{tZ z7?MG*9q6Yzt;T6n0(~UNiwtipn4<-=aqrQgkM7KrZ5+AzVhwl=@EYJXz-xfl0IvaF z1H1-!4e%P^HNb1&|FQ<=_iY3B#tN_ktN<&(3a|pK04u->umY?AE5Hh{0`sqc*H=Sc z)#ye~BuHMmUDp)Dn;p?y_w$;u)%ZJlf0gt^l4SMmx|3N!f$zl~p0G$RyR}vvnf0yn zL_5jVx7M8hsZ{d%`WD}4jzn%;A8#J}`p%5kfAO*>_M`s0Rq>oj%{2nOnk7$Q&%u)0 ztGrH=uD_&w1RwSvT=;%P#A!HExCA42tnVt1^{#F$pYcMbhdEI+aLxgoD=5_mB!~3^6`n-DJwRte%8M0j~i_!g}gW(6|J%B%K!OD**`60 z^>{SW8k|gkiPFcOZDo^ul zo}?iM#}{e!gQ~u71CjtcL0r+f`J*t{2>0Svh9%vWN z5>Tv85WwpP_~&>N*wVNOyiH?uzJSjA!1%S@g+URN!F{2|9pJWgbM<-f(!?D1fH!D- z47^R_*TMTV?gRH|deQWyj9~L!0j5}1$SxuE7;ZeKKPu*e}hLfuE76m+|YP2_&1H?;ANWLE5J#O>%gyQ zya9{}cX7v&5e98}h<7T+5Y^4Z{J!u|{cf4ID#(qA_iD4)<)9^3|UF^GCAv z1uEw3oRc}4lTM*XPBGh4em+*rJGqQg=qlI_b!EFd4&^er<1*Ld>tyL*Hh+kGM=CJsz&sV0ErHn@n5P5N&=A_j(1vXq!bS~YtA?hqK5X6?wo4@g zf2z!3o>Vx5RG2Rn=1Yb7QenPy*goAzJz3kPTz5yt&Ubcao!5#vI*{wkcWa!noovye z45H{@v2fVei0bVVhn?&JSf?1+uJV(UJMPryyYmj!hl;9s`Hy7<;?y+z=ZL7e$5|rk z+>zN5o-Ohu94f9tRj4_)g7Zfds$%)~AjSxvm1(nxM&YQ$^Lkv$s+5ax`MF?K`D+K! W%c_I0lpoc1m>##Mg-9P>IqqL%B0JFl literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ud-p-fadd.elf b/examples/RISCV-32-Sail-Validation/rv32ud-p-fadd.elf new file mode 100644 index 0000000000000000000000000000000000000000..d1835614b95970da666f60d5e4b4bedd90e659ac GIT binary patch literal 13892 zcmeHOU1%It6h3!%Hh%_aJOGHsAf>hzQ9(>-s|A17bLS_$4T&Z%#fN)f z_T29~XU;wMn>+ik>^(I!@&q9S0t>-S@R6ND@{v9-k^&7vunTIT#*3>iZ{w$}C;=kP1izqyka_sen{KDj*e*3fw;h^01_^ zUM=NBZJ-U+uoEo-t>JzVXs8-)i-O%8js8uQC`>{WcrJY^3VATVxpwww+YW#(ZSc?h z^1D^mZLCl=0&j!>oYNt~N=I~d7}`Djxr?39a+Q@rkD^B$8t`JL{ag+6b-WDS!5j$jwdQHQ9&P$tZ=ajskROb9Sf{rE#Z_c@i7I(62i>EB-*yM;aI z{oMdei}3n>-Gex1EX8|fpy7NPv|&zjWa!sgJpwQ5^H7_Nkhz|D67DLKua2vshx9&} z>l%V^cLZ*3!+!7w4H~cX(00~C&zE}~qWd)>zihsS3beh_Nn2SbeXZQ-5W}xg{&`C^ zS}Ps2g>}$#Qb*&g zj=ov0bI3xV$CWMBh*uQc9}4ad#UYD<9^YaDM>q55WC_J?ZZLr#1oSY!kkN zP40Ujz7tG^rTg~{B4?5cNCl(=kP1izqyka_ zsen{KDj*e*3P=V1UkWIO*U$3cy?r$r6Wm6er3-IyTe&wr>@2NZzI61Do%P1RtNQgb zvqO&u_g|gSp60xVH>!VUa83PBgZo|oFZII*jvx8&`pVk=SL;94@XdRLf!B?V`me8k z_I~-wsK1`&Q(j+z54ybL^8sG09ln6@qww8$0r7~Ce}boLK|Bm|h)Y8J z6~u-RKacpb5Pt{ps1W}EaXbEJ105QHMf|jd_$P>;7vf(aUJ&A6axBEZM!Y1%uOq%8 z#D7Bkoe;l`c$cu=zYxRDpr0@_5P)eR9z(1N@g0aS3GoLJ8-83xJ$J9c2N9#${6od{ z9$FKBl4E~=s1O3(OZ4+`zw}x&gQC}7KER(dyhE7lk%vP zK=pZ4pFr*PsJ#N!?@|2%wa=sW3Dka%+AmN^-Q$wFNG5$U>5+vDV_@dS(=0og%UCZK zO&BvLvpE5$nUyJ8kj5;SDCTEeeIUVRXROQ^daLO9sbFN8C#^&_m$e|_tC?{1;ZJ5$ z_5fz_$Busw;>OQFx#y!ih|k*}^q}W?VUGD8&;a=R8<^n_66ja+_+G|MVsOGYEbkhp yaL25gk;Hco34Sh1!%M-7=hoxp&WWDe!XAKUg?hn|e;0{)zvF>0ekLriAnzY283Skl literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ud-p-fclass.elf b/examples/RISCV-32-Sail-Validation/rv32ud-p-fclass.elf new file mode 100644 index 0000000000000000000000000000000000000000..7e67e8ba0be967c5db08aaebb71488c1bff4f7b8 GIT binary patch literal 13652 zcmeI3PiP!f9LIk%yOX39-AQ6i(9#aJmEvJDiJKMtGC6A7r~-<6FjYV>mOQ0-C`>qTG#KJ_on*@2%dWSJ(&Hy@Av!L zd6Ul!IV|(GPo6$ySr+BPrawumqyqDp{J^M?M>ZX%aT-&(o7o9IlQ(T5c{tL7pMBrU z<_UCCg(r_Ooy)?52`~XBzyz286JP>NfC(@GCcp%k028=>1X^^p7|nT=w3Lw8JuIZ9 zE{QQ&dnD{(VWvdMbgA@@D3)lQN+f&53ngk%KXLBt?D9`W=BC!i^6x9?^?o!mFSUB|@3X{SKjSSDi_$BTxaX4@ck>=Z zE?vEUPb{y*1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C z0{=~5FjU##i(xkKGJqO+CGBf_a9m9W+iI`CU|Z?Gb=7U7lE`Tx-&ue?0ZQXV0Xe)} z-|NWiBHbKLVs;vP3^D`X--k)j&`&}KhF*d`X6Th2`X%TIYjnOEbiTg4!dD;<;++C% z%bg5ud>%CVFG5dvd0wD5paUa+3)(gE_n==k@(-YAjr74%^v z{}#Gu&Sp|2bHUFg8bcU$0X@R)*LG4lP;%SH}XRMoi)o(ntl z322N&ez@TK?2i0-=s-UoF4^R(M%|C+WiH-q&k3=1rg_SLuH2$d7=>}|wNS*Z4#k~% zJD*?dG~%!pw>DZ)OdIv)+J&$dZi%oRH(E_<#T#MA&~X^WwFOe8wpNepbiUrWpp2(< zQGV7_QC7vU7L~PVSVxp~#ITl>wPaY!%33z8qslsJSo6N}=6%zg*XF!3+w~}-u(?)? z8tct^{Awqp)o{JhG;}SB>z$Zt=%VwT)@H_s%F*kaaeWmv?x?zv&*E?^E;pKun97=F zIpZVm%>NpXp-bNOZ2ynE_t*<0_Y37C(32-nWnV#R`3!h?*5q7|K-V(ry*~M@;UTH& zOctCz8?wh(hVbeSor59wDS0@GIArfG9NC(va`YC6UX)+fBcICuMP}bP_D1RLQCVl+ F_b;15bxr^P literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ud-p-fcmp.elf b/examples/RISCV-32-Sail-Validation/rv32ud-p-fcmp.elf new file mode 100644 index 0000000000000000000000000000000000000000..110986d395fedf307007dcc78b5e795073a2d643 GIT binary patch literal 14316 zcmeHOO^g&p6n-^7%Ss5-JG(5Kl??47Doc*8V~CFs=Eq`b_{dEm{cV* zufO-bS5@zO-F=u$9o)M8F+vE)k$~$UkXJzGmm4Fd045}06)b?Rh&MvNhu_}$6afFE zxeNVaz8PM7h`m-10RMCeo*O;10$KsBfL1^&pcT*xXa%$aS^=$qRzNGD6}Wo}RADB? z)|v%B;{jbbpY$^gpk3Ua1e%ynF3o_~o5}n|QyCbC4DeX`R0gV01pm^JT}zh(tS}$` zqdNQkJX=}3MvXMQl>qP$B?xOgX|WwJ5aF{S_7k)7tdV#KE#kz35qC($niy~4r)c^3 zBZA<5Fd7lN};A{ZrfA_@1-DYHG06^h9%&Pj<_Cue8mL@3}7+rdc*j8_i*#)MULs zw9Sq0xjz`9eQbyxZ4UXwll6YzHaEWKfgnfwS&qKh%=x4t>%H7j?qD!T2iPDz)*ST7 zw5<112e}0M+mHS2$Nu*Fw2Gi8O(HuVVjM|$x6(i1-8>hsPFn7MmzN4=6(Kr5gX&49f7B8-3B;KP*oW<=;t!L@lj#sS;$%tz?J{2X4S6ucU7QNbgK zw@H7ZtvM__)Gv;qeOpIO2;6zZ0>i@XsRdQ~EK6 zcv|5Z;vEYA65<(!e+BV}3jZ47mf#IY!n-m2F=8AZ|1wbTQ!)ND;-a{J4M>0$1&VmQ zpVzwkYHKNdVszK0!uEU>>JD?<(hClCt95Ye<(j$(Le-sc>I!xp=9bn$WJ;rDw+v(D%HGJaUYN)q#uOq~L2+$}TpJYE#>ll%ag9W- z5yiDBa&1yvnw8SdolV$h$x&wQh@yeuvOUy0TT_|A`jMc0A!bU)zy|~XU??LOT22LLi?h5VveJI5|H*$KRiP3q1B7{Df#MFk4#5{T%}V17t-i1?1b?Ky@tq!G`~wUJf(R)#s30_uxu{yxtYCwRpYP(gx0B6e0ac6B;Ayu)$zzW2eWOZL-bX+(YdYUs+GBBFmuJ z+)Q89VD>b|Fs!wfh2#}vd8G)eW9Ywd;pfKZ8EAa*0tBoDe4x$vyST>>o8caFpFwc3 z2Y+Wh;a;oz?&{FGe{Ts@A_7E!2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&I zhyW2F0z`la{BHu5)9Jy{aXf<%8ZiGb4pNGK0=1>+Nz}&_J-tt#K;6yu z<}0C&>x&h>it;`D&w((DlMXe!A5-Gbpzbzee-av~Yl{DE)Vkuog!*H}{{iYD#s3NF z9~J*q)P~~!T4-fG-=nq^{|4$4ivK6nuPFZCP|qm(HtJ86_`gusq+iG9M>f0pLJy(F z=8Kz-JdU7N;~zt9$^FzJ0cI2^<8gn-yrtS0=hM#Qi_g#G9H`r_?Ui1)x#!futCwr> z_)NXx*(J|ebX*S>%hmZ)cF8`=?V49{s^EBwc3sh)?Ruqgh`Q2z*(<}za^+NHI4Zly z9>x?RQ$aCJM5YPFls6+=-c*fwY0RreSzA;tjZ2Xqk0NSi*9E&eUveu8)w1_m-G(`P zp;A?J$@R*04@wvXC+p5q_|%Yd-&pd>bJ%{Acy^KocIml=8N|wZa96|M2u1f vY8a=ZL7XQNYf9lIVjsXOtcks7{y4ysB3ZV0*n?V)`wY)8iL*>`i{t(QG}eYD literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ud-p-fcvt_w.elf b/examples/RISCV-32-Sail-Validation/rv32ud-p-fcvt_w.elf new file mode 100644 index 0000000000000000000000000000000000000000..77b06c093478ef3b2b508a3022c452a1ab13c02f GIT binary patch literal 14432 zcmeHOZHQD=7=G`3?5f$$?1#A6qSw?-MAn&gc6O}=hfvu-(6S%?avbl@x?8%l%)O=2 z4=-A*M9Aok3`v_mLG?@gV}#IP*|#_)Q&vQN5GGNLsNoNDdd@xPI7efaenb$QgZIAo zd7tOL=bdNHy$dpD*Xp%v48tHf0(6Z8auY}n^>ZdcCIx6QHB%Gkqki7S*a zA@ARB`qwV78*3$EN0Z=L&_g?*9ncPF2ebp)0quZxKs%rv&<yM@+-K87O|^YEVt zg8PHjX%9!Kebx=b8VaL}YQ!_5WWy$CT+DUd+7}?`qQ{T1xer9`!h7WWXpB* z5bIw=WSe1DU(|gRbG9W|&o-Hu&!pMVw1-#!-fV_x(p*i=^IxPr-KS{7EGk`_h54JJ zWOY;qtple9JtHRdzc$trSzVO@>(HqI&qzuAFOBtn{UquqJ!8GpUzt+hRp~|jUeDMp z^_Ls#(N9MuhWhxt6H@M!w(g4AD_Qr}hSM*VKj zC`tW~f7eHa|9<_2sK3xN%2NNsl=`lUiTb8zoR|9V8|!`l=c4{x&!|fMw^Qo7DsxbO z4%Vw7*3UPM^}hd|sNae8EA^Gedf)#J)bGIhl=`!c^}auCsNaV5DfM4Yp=aN33+lHV zH1XWH?wQFV(b+1MjWRPfr%zI&YK$*6Zc_I9K|7vY4uK{=KOn z`00ZGbh22whu_TjX2E~V=Z==VmMZ2wAGD5?!2;8n#8yT1?C^+c_~8 z=a7Pz0H+kpwqpz`c<3Iy5qO$Wua^dv^Ro_~2D}-n^Ao@Wihc)h)RcUX_5hD6{7b;5 z!oLdqn!+Cjjw$@xz@I4mQQ(xqp8&q8@E-uLS9rE~7UMS_2p9%^jq_%OzX-fh;jaKs zDEtlJy$b&)u&eMh45D`xz74pb@biFwR``d2iwd6r?hMxZ8w5V8@Q(oxDg5KWC57Jv zyi?&vfXfPR1HYy4&jX)V_`SgA6utmlRrtfe)0FS~O<5|B81O0uzXv?5 z;FG{FDEKqrqJqByKB3_6fX^xTBJj+xoZq0!z)_{2-+*HRN3mXS0n2_Fp2;667g=mA zGN>I`)pr7?#Pb)W0L8da=s_-XwofdxtQBk4KDBOLPmc0gJL{yM&00<_Pfk8FA+LAj z$DC~1$&Kc0hek8w!`rgy>`p5?;f&?RDd&u4^9pvdwv+B99@4`ZCqpBdv28rDTm+u? zH3^Qholo=PgIexB-AQUg3Sprlst)CwgP7v05s)ud=GzFbX;=HhC1anW8} z?Jq7GjH?~SMT>E@$GB)Ru67w0ZN}9;6X+BE@ehy?t@MfJ`vgu3oD}^hWxkIlGPdnk zNDotXd^l~7Z5_`z&*ZbTCA)QOT)}DE$>beMLq#L`+;;z)rXKsb?M`M3qLb%wR9-pR zolei#_?SaIVqNt3-!xle|8P729b3{(T+jB$`FrQ&?J055jmUIChS_>H@g8B?FIk< literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ud-p-fdiv.elf b/examples/RISCV-32-Sail-Validation/rv32ud-p-fdiv.elf new file mode 100644 index 0000000000000000000000000000000000000000..56fe7eb296a9d005dca41d9b6b3f89069fdfae8a GIT binary patch literal 13724 zcmeI3TWB0r7{|Y}yOX3Lu#-!ZxQ2CNNUB9P6T4|jm39!LK>`*dQZKOCoJ^9%WOv;& z+KNbqra|k2Y&s=g(5eqU_!dO)MM$tN`Xq>55JYNe5b;72dof^e{mxvn$Iyr5rBCO; z%sKz>|IIgNerF~RVbAQ~@FRo}2wDiPfv@Z&22b-7wj^i}f_tDAYCK28o=cyMLJkaYE-#F<-38F49o@{W zeNbWD#yV9Mcq;_poC*i^egAbuHzi^ zfo=e%DZIX4_aVGzQl%b`w*uGp;(TgUpsnRNZDDbGwiI`W?$=QM+*OU1a*Q^y7%i4!4l(>1rQdd51AsP_ zTdB%g>G@KNLyq}1=6}6)4S433&!U!_Xq>6^y^`vX(SXMXfNaXGN9*5 zKs$8zy`we(XQ2__{YLlw6W>Lq!piOadga|D0ZBj-kOU+FNk9^i1SA1TKoXDyBmqf4 z5|9KW0ZBj-kOU+FNk9^i1SA1TKoY1DSiktq$UmKXjGva)&(tp~M&SH0cj4xbul{w^ z)kDt81aHI6mjCg+cO3a_E*wE!Kgao=xIN` zwk$@gdMVVw z{rL=^M|oek>gQ1p3;8E_x)%6hm_uC@{5Mb=g1?CRqTs)edQ|W~LEVnOxxfw^fh9cK zg8v2T=LG*N)E^4|cU%kp52#lJe--tr;Qx;LXTkp)wIMw3CTi&P=A$Bydh&lA;~D~= zK<75U2esj^uL>d1dA6XT*P6-qQab(A$dvh5A_oPNnO5p0lUlg~ScP;x7@sI)EHh>0 zrgF@JsdRRH+Dw@zshPJjxh&+YDYGDG%VbvSe(<`~c-l(CL^?C=1rGR~7k6`#UMMMq z`n^!U5IX3E4ho?@Kh`G(2fVxiA@7hEI^>1&X~w|Jj;B~=GMlzuESNB6PG+)#PBAN8 zupot5Fj2_OxX%p<_VSFC9>d-$c>Po`vdoiKB9qNnknkxb+~?-Rchv60EWUj1J|e!R zxR;3UI|`cN4|=fYd9KCRQUl=MRnQE7kidQ`kH2Gl@p-^+Sl(?s7cWAWmc@fYJ-DSHqSYcQhzU)_gBrg#^PYJoS=>`k?}M3d ze!t(h-<$W_H*?tJy)rTNl%{DQA_Vt=BR7rYozXx^g8?BJf@Ww6blvA&JiD(&0N4>_ z6!QM(4gcCj?7D4OghvzCSyG`KP!1>ulmp5E<$!WPIiMU+4k!nd1IhvAz{7K(0F?+G zG16Yl1#)0J?8VAJnpj>3650-T$H47~#r`Id7%V^xSS@)j1_iLdyL<83?n40m#`vFw zjSsfzfVD~VD7+m4@GgWjT0UdaY3K>?4Ig`g2tu?rGPAAKx_I!(Sh*xIS8OeYASoy71%c{d#;}Z!W#H7F-`KxIS7uts?xm z(|8Y@OS~4r^%24K5%IJyg&(&Y?}2masp0oa0oMnvS<`ulmp5E<$!WPIiMU+4k!nd z1ImHGfsOGXN38$iR)Me2vzYQKSKei@IsOHUX^-pp&j5aOR)Q@4?l;77-Tp$a*I)Fr zz>husIbW~;AADXLd;0tBCjamLjf!6fb^BlEdcFSq^Y#2Otl;x|&MsrZVkZXfp$Kq@ zCBUs1E=%E^3I-tpo7=d}0;X`g1;cD7Mgq?f2@fN-Bs_-rq=YAT;pY*zXgmEfh{gEq z4$iUq$c|n_JSEkiXXS>_!?23DEa`6`wj}*B;;$tAeZ(`8{t@CH{GSg@7#ghO*_HH9 z5ucUxn~1MT`Ynbf{Wju?q<@e2o}~Yb_&Z5|fOsgpGyY$Q;W2^3a6kiClJs`OhNK@t zye{d75nGa;M!Y5IClSv``qPM~CBIK2cDb(O_i=U?UP6rFvXhQ}(OvoqVvDaY9YSCR zg}ffu+laGV93kY?GpFayok&rJQ4DoWf#(IvgYBZomCF)o}9h0cB zfEtsi;{kPCqD}sgRMCxcj7PFLsouA9l+(JIA literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ud-p-fmin.elf b/examples/RISCV-32-Sail-Validation/rv32ud-p-fmin.elf new file mode 100644 index 0000000000000000000000000000000000000000..1ff030465bd0a97f8e9e52d688873cb74653ef8c GIT binary patch literal 14576 zcmeHOU1%It82x5{+Ej`=`Dq$rh}(q55@9==O`1@H9i%CFh)}J955jhHyKSOvHtvkJ z1tCjI5Tul}Q>qrN6`%T6e9#xML0M3Wv}i^PqPAM3h(8SiGNruL3=1cJeNI@paR+CT|KsA?fpcZ z$t`~uDsL`0>+N}F#_5#^k#{I!I5Ur1&UR`E@rMESB9#SaCh`zw;K=5XJ0x{9gPt3%=g~mwU3+5Oo!!kCav#J zkKV)@tp4>xPBPB*h3+G$+0e_^>`)T*lC%~%jq#yhS6Xp;$(p8>>9}#YYubo*mW|I1 zv-<(7j}CVZQFMKrZmhw2@COan>JPIPXPBKV4||3sG~z$kq|xGUWzEi3cA~u1Gi;$z z{;?*FX5VH_j?IpjZO_;)G^VfDq|xLLvIb|6&6Ec{W2f}vhnh4R`~hY<1MGBplV?my zKd#lJVfwwS-RWVkmwP;8R{C-EjvDpL+?RGg#oC+{J5^43#wF>;w>4?B`Q5D5>1MB% zyFKHI^yBNAG+O;G^hX!^qsucY(vPod(rEEJ&>tP>j}AN+M%bt2%Qa~<`|aqDcJxO( zo*khv{Y6b0O@1r-qZR$piar$@LvuA~7_7l>Mt?M;Kbp{|LL>fJ4I0EuzXAPWqCZUB z7wN~vJ8CTV+_w9x(I2bPAFFX+q#vKwq|xTrp+D--A9c7d5%K=Ga7T^h`n1)Lp+92i zj~MQY(1?FhlSYeA=nq1F5Nor7_aiGA!`FezKE*h z%i-$yqCnM2O?gqdlLUJ}xK0#1NP>}+crhag$7p_`9%m!iQxXJleLGHK3hoBB70kD% z3@UiI3O@y0XWZ7y0%I#niBEh*&*F0~F0nzAz#~fje&D2%e;9a1;a>)}75*gfoWj2W zyi?)N0=M9QRxn{0bPk^-g?}ITX@&m?_>96|<{G!4? z1AIo|_XE!={1nFue*`$D+|LuhR}}s&VEhYF2{vFDbQYL8B#zR%z(*AR1K^~>UjV+Y z@RxvX!JFu(Z>sPwz!)X|VWQrxD*jK7#q(iOgsd=85dmBsNjy}iwbu0j+^bF zaLVq=xjEXM8{ZoSGGYqjK~8TN>QzF0VW>|DZ3;u1lu&;d>Q_Q(Q8(SA21U_yMh%Lx zX|--z6i%y^)1q`*t(_Ld(`xk|D_l{Jr4;H(i(py_W<+L2&CH0*%#uv;jWX&t%19f< zH=4{j4&^6yWu5Uo6FK+!VxC6xd&VaeoORq>(WNZ1Xm_!&FSwVKat`iubEBBuVmOb< zGdF+0O^r{CyOa`lJ{8<{9 literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32uf-p-fadd.elf b/examples/RISCV-32-Sail-Validation/rv32uf-p-fadd.elf new file mode 100644 index 0000000000000000000000000000000000000000..a783f7ae37b2b630db3bd0c90d8fb68921deb009 GIT binary patch literal 13732 zcmeHOPiP!f82{evpVSc8$)6@AhIF*H6vfRX**2{fGK5B2C=#qtJ#98G(`2#PS$9Sg zPaRrpA!Gpa8FJ1&g?cORL%9cVEt%|6irnL2>uHTz^)4qm~^wiV$;LUr# z-}n38pWnRQ!?N$>_>mVFV-Ob&Zi7UA4#_j(fh7k9Xs{bvARWc^koNKEA4~v06UD)f1K5io9<5Q z7S~hoz6KDS(wJL)$#f@RTZAu#IM7y`ZdH38Tg2LPQS6k|8mKq1T4sPhBFNa^Vw}#D z4xL-?GJYt9t60qhOa~WjLXD4e-Qn+QfI9v2&&1s4bhrAX>FzMhpDs+@!8Mp8I{{oH zCB~QIj^UggIk9FJ44lt^9@KQE#{X(DQt-Ah4lPeC!s%Ugxca&dM;F--x3}UN@J9@; zH~RU7dSAdynUnfs;~X7$ccYiTSMLp&C3EV(Z<^EB=;llH?to3moW)<)$=UM2+BzCt zyjt%H*krt)UpCIcwQXzY{Cr&xSUKL$&zt7-H`@4z^|pZd@qTWulcPVdwys7iKUZ%J zST)|y_Z#Qn+Ikyl{y{w*uv)yI?>5cR8%caWTELd${oGh5NA->2`vH7E!28Vbd~u&a zaJC)Kczbxx)HCPmu=40Wp)?aYKn{=tXR#N&th#j6(&s^dTVXL=adax$u7#1-tXTYSMLqMHWd&Vj`E#{*G}7~fNb zbP{eg+p%{9CkP45@5fG3!A~Q$6g-0XfPxRL!LK0R!tRfkM;y;DR`?piuEhO#8Sw!{ zKaW^9;&=j1BQ7iPcMuy&{5;}Ml=w%8O(lL2@pUD>jM!4*Um$M7|4d+mg~3<&oKWK5 zAhwkFHN=xj{71x|68{ZxS&838{HYTE7qPFzTN%K&O1uMcRf%s$yj$_>Da17y*U`_R zHFylMm_j^s+|S`P@fQ(W@_gu^ff)&<9?#2wH&-6u+lw_KHpk9BgtBwO^qI&4?Q`RdP_0gArLSxGvbG z>AYK0Cm zS?Ojr^hdmzhboVwO1$>)K9P9$c(+L0KZ=VbJG-zIx-cZpfB_&rzj3i-CyVVpoj7ZF zNNO@B8XP_>LL@LBoZk^2G%52p?wUivK#>XRy!t=Wr@4(h*jM&ylW+|TZPJ4 F_dgSK(P;nx literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32uf-p-fclass.elf b/examples/RISCV-32-Sail-Validation/rv32uf-p-fclass.elf new file mode 100644 index 0000000000000000000000000000000000000000..3a520ad37937a46c8d19afab1317e336aef812fc GIT binary patch literal 9204 zcmeI2Ka3ki6vn?xPah64Hz`^XB*7n?L)l z-K^gAw=cXSgutwMcz}xX7CGxnCelI#53gVjzKMsWKc_K2?*ZI>c9FkaAC>c*IA5VD z_c`hucg-o_6mSYS1)Ks-0jGddz$xGqa0)mDoB~dP$E!e!-MU(iT1AjUJ~^!w!5DIm z?GB_jtsM@KH-g}ASr4#*0Gul?1xV3B@$0SC!!H6$(Ye3Uy)UNfc;~(hecYjM0mThZ zsPTKTx`^iue^+wh?M>C#J4=?>J7Z!us@#b3W9pr_ppOVu><`|j;fH7}JQ8xnr(5g= zg$SWYD$2>}tcUWZ2g(b-`I^uEG*shbv094a-#%Y^NOy?a#{m`jynnUtTXg0#Exxlt z6u13+y6XFTs|)@w#nT}Q5kWpT3CRELzCR*=40&Yo6#4Up|HxWHdWa6>;^a`v^4ZBj+6({Q3tk~ceEt&@J7=w_7lPi?k%>?K>z4mOA;yqL zCpGpr`~~}*un>3oe2VSbYobEz@cBY6#-*k*7btGc(|esSwY7CtA$A|{FVmgo6mSYS z1)Ks-0jGddz$xGqa0)mDoC5zN1#-S?ZB|i0wE%{_nTHW|+@H>qy+E}D%v?cml*YQn zuM&4GZWF(0G1nK^{66skvACNk7 zj$4dny){~v^4UcdsN;rx|qC8_nidvw=>!I_;-Qqu(2@ZzkR3noLG| zkPeaRev( zt@O~LMJ$4nI--LAa#REjy|f3xpai^GkWoa%)+$;=+|pJ&sO$G;-b;UEVez0ny$7?u z_x-+ae($|+-t1x7cXIFkM}!chTY|2WLVg~}A4X#)PZlL;JFTIPm`_J}AD@1EJCVGS zGKG9}zZLa;V84!>ygC#wgK5SAq_nq&V~YHqRO)ZLJw=BpMN(@&o}vmBD7bv~z{br)TdW8F ztkmCbxZ4WX>~xY|O%MgA62hH-EbC5Ce~dqlaFD1s-1)=aWA2pFTF_^46|w<- zL{QxCvQAGjO+6cK3VS?>S=3X3NRtbjpz$%*4g19eL6<&%PLBOj+MT~A>u#~KSKgYu zfjMNywh_5jQr1^>AHta3c{yj7ER1K-MreAHdw*MFCFwb9FRi)zSvoziOb5257p`x> z`1k?C?h6O)mzM_vk=6QNoAgPh&x8Z^8_NTMC}{mJP5KQ?-xqF0{jGtR(E6)QdOn{_ zXraCph(lWcQn9l-1o!>EBe(~-p_f78;!Koaw)o_NJj0+c{>UJkrSXa)O1IOsMi+YfaRwqv;QkCc z?F9}NUFL0{nW5aYiGKFIj1z*WZI z1U|#~zkq$luN6cW7~c&%&-l&2KQsPb;04C#f%}=Cdw>@izYlnv@s9#8G5$&524P=*Dc}< Ln>@>=o7VjUb&)_Y literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32uf-p-fcvt.elf b/examples/RISCV-32-Sail-Validation/rv32uf-p-fcvt.elf new file mode 100644 index 0000000000000000000000000000000000000000..da776a266ec3cdbe1bd028674e74852c9126bc0a GIT binary patch literal 13280 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 N;tvzsFDQo4{ROzx?H2$5 literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32uf-p-fdiv.elf b/examples/RISCV-32-Sail-Validation/rv32uf-p-fdiv.elf new file mode 100644 index 0000000000000000000000000000000000000000..4812852490cf91715f01eddef76d0568ada11576 GIT binary patch literal 13544 zcmeHOU1%It6h1S%v(XTkNt2pTOC2o@qPQ8FZBuF?(`rf!eTcS5eOfm+lVq{kS$D2B zK4oYLf{1K8QYB~w@x`~|i!VZh?SO9zvLg6kjiMr`DQ(3EaXn{#+G~Z>r-E=U%$)mu z=R0%n{qD@mvUh3n$U#lhAa6QcgA9cgBtIWZGZnBwhlimDN@?Co_z>^mWgUPngDB*a zdOPWdh{F&$x=LA|0ylPm9bgC80d{~LUwid*V-j{oQV`!@Vjj z1Kz~n0-{s87POysf+-kI@h1t6^!0Ag)*r`+Sl^rGPGwpf^$uRH6XA~tS?+gw&VXUT zz~&p8IAq`~*3C$>AV8Z?6XICc#p^nt&id#>8vCpjv>$SU?Y8sX`RVI82WNZ-Kwum6 z{Oq|0aLi2=nsWd)j%ULVY6gtS-+F8VUa=>k=fPz-JrctgFIdAzm$fU`Hsc&h7Klxq zLD7x}BhATbj9>0pGu*Mnx!8&{H>-(%-na%pZ0q!ix8uG@o62gIfBJU~9RJ7M20Ojt zY}^}Z&*kg+VdEMcXG^Cf-ik|+*38%Q{T*sFVRee)e5^-WnAfarT!X&d*8%ZH3}UO3 z?4bxXh|cumd(@xorMj=OE8vmX0d{~LUg?{5%8$`$gH2zZ7d#rVep zYIcrqDiXQ~SG)b#JA#u)2&~_RouYytLF_7c9PvH{AG!@6M|_WV>v>hg`S>)$=MgUA ze-MbKlMhY2?^E;;rja!tNMP#Znl3G=-{Nn zOpp6HDi@lgLL8obX8PIvWgl8z;K}Mso{)YEWUJQ9`zKp<=~bma?*|g*YmJ!`Ue#L^ zUQ^cn2KaK`YbjWIfvoO?G*oA5vIeuY`iYbn%RmGTa@K`qb{MG8B$J`Nap^xc0bB!>yk4$w10R$htBZi&CNO^7)e(kO#5g9&^MAd zH|vx!-qg|if*T!XISTmrq>)A$210rvkT5W8!K;WDY461=851M5a3|)eIBR*AzIRo( Ng6Ea!+*00h-QNk|e6s)m literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32uf-p-fmadd.elf b/examples/RISCV-32-Sail-Validation/rv32uf-p-fmadd.elf new file mode 100644 index 0000000000000000000000000000000000000000..e68a2ce803dd9a3db9f8776797c82fded7426d01 GIT binary patch literal 13872 zcmeHOU1%It82x5;H_;H-$xo9IOFG&g#fQyqvuRo_WU5W6P$d{2`XFpJHI%_c^{v(YuRiw?6u3Y2%$u zYp-#QX$g8mC2~)zidB6)ZH-f(k3aFSt8Q#sRrNtcVD$lCJ00Ze$WP-j(k}jq5NLn! zak>&3b?vyRu;U4=Vk7A)8dUO_ zUqfT(>zb=n!~J~QyasCg}$w67J`l<~82=wBdZ(TxB)f&sWi!&!TJVZ?xci zT3n?T?&oUr8mvug#Bn~Vt9%*m=SuS$tgWX(I3IYP_UF9gq%42c!ei0qKBrKsq2DkPb)(qyy3c>40=V zI`IE@z!@dd4g8EBagxW2Lu`5Ni_c#joq1{bDE0?#rG|*d_}I_e$_IB#{u=TOA^*s& z`8CY3oliz|e2R=;yBNujj87Q$@%4(I19di;CBW6ZQ!(^zYly>&{u&CLH`K29lxnSKvU=vKF0<9GO!`&SAZu4{d-_r(0>6g z3;Ipq_XPbfU`No~6r!&My%V@9=(~V5!LNIPR|Gu^d{ofkC9MkjBfwQbe+;-5=o-%B z$q1eY=1b%s8vL*#`XaCq+%Jt(O8bdHKJMF~y-*%x?8u`hCmueQDpAF>Ogs0i$?Q^v z>`J~I_D@v`wwbd_b0y2BxqNYY-prYc%q-i5QjtpboLLdDZCZA2KlvdyowxHelP}Es z#841?-pk4QR92vdeQH>s4*1jofg16t5rI1BQwIg=kWU>Fs7%`DGHH>_1Y|}egMDQ7 zi)65g%#cr(^Oi+saXM!eW{Y|InTknM=4_!T;GAXWD>mhjMKhJsg6AZqtmhW&{1l>H z@#9?Bv&}_2RVWs0N(H{BJSX`X{>OF~^7s|O&w_Y!a7ny(p?rwD5p?z;@;tmI#V?XW zIuZY_2%8afQixl5{9fWh)dGzN4DU6bgWI*$YRFpw!Qa8!gC~xM=iZ6On-h_@$swW_ Xd2!IfZU?ZKw~m*;`1@aB3-kT~bWIP` literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32uf-p-fmin.elf b/examples/RISCV-32-Sail-Validation/rv32uf-p-fmin.elf new file mode 100644 index 0000000000000000000000000000000000000000..e1774aa455769995ef521d9f34602cad15876ba8 GIT binary patch literal 14288 zcmeHOZ-^9S7=LE}oF&rEdFLtDagC{mD6BiT>z$O~5M5XpNEY>N-5XbL%e!56rp_R^ zK{6?$b1l;+CMxB#~Eu^WA}nDUd-4T1oS$E#mdi@8Q!+rHRCa zKO*?Ud?W08z@E`gB(65e3!|D+Kq;UUPzopolmbctrGQdEDWDWk3Md7X0yj^ADov-H zHAcbDcx2CSCjHD5*=@oeB|FhfF3ynGk;(jJr!usIG9+T{hci?qi~I}wwk*DbXqmC$ z&+5!8O=pF5$=1{KLW0QOozR@AhjPwlS`y(8LhL7In$A?>Zdl;NT@kli#u|vv;j(f* zzC@7RZ(^K|v`!t1u4?wiH11+1<7+xOkO?s!YF)9PPY~ktcis}U_v_BoojGTjk^AoO z@D1Rb74W;vqJ{z8MGKN9qFN8=NV~w))=CBODAbhUxPl=^p#sC zwey!3;U4fMhOGzd?8A)#U(3my^v^AGx`Kjzpi%HOOXf6wY?;#&@V+7SHEm%bebz&wi=V=WEmPd@jt%X`iKAXRzGf z-&pQzXX5#M+cKv+Fzgo_hOeEE=ks;T96jj8`tyv%bc!& zus&q>Qa~x76i^B%1(X6x0i}RaKq;UU zPzopolmbctrGQdEDWDWk3Md7X0!jg;!2d}B!@^JaH$->jZOGe)K00-BZ;0c*u!0x1 z*=$a5d@ggpHGXn+zu+V59Y=RsV6xrIh-VJQ*lT>JK#qc2TdWJX7!jA#p0uf-)G%5;X#5hS$03J)lSfd*7dKNzpth4w% zz%|A{2W&9@An@yqe;GK(_#?n)8GjVmV*Go+3-Fr_7&MJO#OG$lp9Z!V|0VEN#$N<> z8UGV-jq$$&zrlEMw8dlmZNOhKz6*GY@ymeqPXdbX{0o^ZD+Yy-es3-ZlyX#Rd=LZXV@(} zZn2*tQ`}Z^OSHXI*%>+V(nS6+rVzOb%(XUht!1u($Th%RgOO{HxlCEt?B`Bd)Xa0I zENk+*rYvmo%BC!B^4g{>Zu08=x#*7ibF5ImDV-*B=4E7_N9JW@{vVNYMtMG?d@Q4! zQLW@SR36(_bSgW>O74^OG7Xn^RK^%CI&P`%QV~(Ky;5ia~*(_fumKYD+4vxp| N!MQwfJ}+)@+}|LXsMi1h literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-add.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-add.elf new file mode 100644 index 0000000000000000000000000000000000000000..a32ea3309eb54450176f09a26d2cc10aef13e033 GIT binary patch literal 9852 zcmeI2U1%It6vxk<-7QoxyUF$=)_x3zXi=N)?rcqKEnPpVskR!bLIulad%JBGn{3#b zYWg6Z_C+5`+&YRNe&j{;p+c~fyeI_Gw+bmm@Il!~@l9omtxvV<|IFOk+)eu6gZMNT zX3zZYJ@cP4|9fX(hdH%p-%~;e3Y$THk|H;c&a?f&NS;hGXfv&#L@=K6`(6CH@fAe8 zCAbUy{_&>2?}FVS?DB>bf1E?qA_pP|A_pP|A_pP|A_pP|A_pP|A_pP|A_pP|{yzt* zG#9tGnt3njlDwl8^OALvD>%-OG+ME>NpjQ4$;pW2zja5FZtZ>r0n{=8N1KST>bd) zb<~gvv>wNKdh%SSO=iZ!@oAjLdfOzg3&#nQHC zKaKtZ$&HP@tTTAJ)#CiwsaDGq!z6neduQ=(B-EenLY-oS^`GW`E&r4UP3Z3lbhxH# zN((hj-GUzGW?kb6KF)KStqx6pyw2l~h2w*#J2YHx>JMm4lk9Em4$i%FoX;`C)Pvd4ph{ZZHI z`$Gc$Z1ZRy9?Z}M7v6Wd0&^|o2lJLk3x2q z*Pznjc}d5Tls0cFi)w}9iXYzcCeHs|uX(DQpZpU*dp`mQ_}u?3uSD#*oU-Qy@zizIfF0ei} zwQJy7;qP*7_Ig@iem1o0P`S%$X?rq*>ucQIu7&e&r{At+j`i1aKG(o=)KN#5<4`$uqoc(*>|KPROt$UE1KXLYy#ywsnac8ca87q!TN$bra#$bra#$bra# z$bra#|H=WEg<|0s1^5;qU?c2dq&Qt`btCS>|66AMf?y+l;~GBzE@(UmepF-rzCh=L z;G5cb5&TnPQU3^d75;xBpb2^vzYl3#13#(pN$@KgyI@D-H^FB$o&ulO_&x9?jXwf6 zHU1Qw!n+IvG(lhBH>2@I@Q}t|gGV&}4m_#x_uzLm{sDYmVziGSy+#6ri?*|WQyaha|@iy?Z#=F3mG~NTgsqudB zW^KM-0w2`)5cn;P%is?+9s|#4d;&bD@f+Z##%I7}2G^6qmooJwJk6}uV+!;8*^+Ur z6)LFvgOAT}w#Ky88JpNDS)z= zXtXqb5%DBcw+bPu?Dk6)H)~aK^ z`!rym9CJ#C5uI8PN5eg*Jn0Nn#w!jDsJY@9|5xoEWbyLxzo+6gg>SC-`>U`O)Xsf~ zoEKx}wPXh0VKH(m_`g98UdOcCkcnpt4vM3P*C9uof>vVlwGg>|-bZwiPoP@3%g=H> O?@&L{K$wIW=KTX!8J|@E literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-addi.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-addi.elf new file mode 100644 index 0000000000000000000000000000000000000000..25f1c02c7722c290a3a5fa5d27edeb7f806c9617 GIT binary patch literal 9540 zcmeI2PiP!f9LIk%n+;ZNc9Kb&m})vUiHe70c1=zF16@QVNQ6*(@E~k9FVkc($u2vi zrl$-=(1RpfN70Kl7r~1VM9E1AQjbC)2p*KJRFBFQTk%k{et$D>l4nky#KU_q^PA7_ z{oe2Q=KEe2GQ73trk^(qgVJWw?<6Ulfb+sg(lbF0ne+&CQa0(gVtmKr5gX&v(@$+=2Ng>^U0*|vW#^Q@8T-D5k4ZwzCSpR zowdmByKRW6EN0QlMTSK_q(V%HTDQcyNrkm8bjjMCFFb6lu^$hCt zOz=E?a@+{x?G40t;W8W&_ctGo@PWeKu;6pxb4m2D&xNlB-zI!T5(CXqIX1-DFfwLH z3^j+h@hyb&ZO6V@61@k$F!rr?A-2ZjA56x#)}k(42DBe)p5pOQ*lHi-Sl@3)MuUW< z_O;fMT)$!5CeQDIq;BfphkuL2iRMWqU%0*BUW?YbZ-?vOC+oLSA2oKlet$$ClZ6=l7F1#}L+D_hH;7*}N`lY%j;wkkd89;NJ1W*hUh2G`@%9XAxgCM9T^xOkpid)C1I$o?ZPj>R0(*m#~?w`M^93^X>OrHS=5#MNB` zd&{&#CzI&gFhuVza=P(;7NJ4Wm2Uh^b;tW!-Q&JRJ1C`_RzNGD70?Q31+)TM0j+>m zKr5gX_&+NU^5in=>YncfrPnIbw~UYTF=O5UpQ zYC)yCLe*f=t1BFMeo!jV#d2kd;^)T_Gm)4xiFrIRlZiQ-m?sjGccslsTaZ>}%F9%F znJX`o z<$6FRMA5~1bvagr#{5gmL3s`~s3&$YeG0tQV63uI3201e$Sd)$+DSz5vc~6vc&%|Z zh|dwFttcNJg5|ili`U#q&J)RQ{#}S0$6)0T+LS}ofTIJRVO(ta_|Y+3N*Vh8G|`JZ VShn<$f0NX>(GjAtGzd10`x_9=+&%yR literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-and.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-and.elf new file mode 100644 index 0000000000000000000000000000000000000000..f1468e41aaddb0de04b44ff647f631b263a530ec GIT binary patch literal 9588 zcmeI2U1%It6vxlqkBVQJ*=%a7w&^r!RjMSro3v^DpzB99LeUT__#)fw&9qr;v+K^N z?UO?h^r>tetxsxRd{YQk*%yT%2)+mjRq#btDZVL8u$4ZVa0$nS(M>C$70?Q31+)TM0j+>mKr5gX&B4@jJR{-)IrvBJ3RTR5!iNATMtiD?DS+DKbd-@?!?osZ9Rw7hl@8i)hd~yj%}H z?K*qQOWe%TM=2uze2O`($$~RM+avxiWIq*jomT2GSa9mmXzaZ7wcuaCRWA7W5kZdq zBl6_4CgrzYXM8-1Dgwi2COMD^J|5<}#xJA@erEeiG57nX(;6r^gI3|{Cnv6&ppXwz)Wzki0a%D|} z7S?y=P#Cv~4teOGi0z+TUaMyo`d!%{&ACyZFm`?X4iO*gHYehXH?29Yw^yxqo_KF( zc(Z!NeB#|D*14+P0`Yq~4{ug$TxTLSTxVS8Z{qzusMaZB68grqCbSL2{u)$k4ddiK z+fZ*pTVlMwvrDZvu5;6Q6ZM*mo1L8^HujD8L}HBzT`dNE?hRvPeequ0P^Vbqs;&iw zzmKiSxuU%g*PEC#QD>P!pPU*iVm7Tcq3eWLpP|+o#>xG=q27e9#~Jp|o$Kd}=8fvU zdA$wB`#QI+*7v$eeh~CRxi|Naam}eRPU?JT$b2;BLb7Q*) z2J&q8zzDtrk^da>FCeB6e*d_~$iJAwH#ir52i0$)W70gN(oHL%70?Q31+)TM0j+>m zKr3*o74XD_>G(te&H_Z7ihBf7hL*ZH*rPa0AXuCr=*K;y@IG)^;W6;z3XAgvD!&3= zR>mvfud-|Tr@$6l1>q{s2!Y{1X6m$EvCne5;nwOiRClNCroyi6xRnx}tkzCb_&gGs(a7wN%z?;^Mdn~+4n?L| zkhUmoNm`kyC{q<>uA)pe0Ts>_@xDlJzz!Wj|7TV4)2iv;tZIt$ zA&Durw@H|3WzM3gZdnsiwP=eh;#hITBA;3m|912Jx#x)%oVOqP$+v0vLhGKeYxI># z6yGq7aJc4%muWudI~m7jl7>U`O<1t`Mm~3=h;l+K;qo~ zOcr~Tm#jLT`&j&J7LOXSho|?gEdHpTB+23*zsFvij3%ggcY>ORB%a-W>K`?g^_(v2 zxrOx)P8_R;*M&xp)s9+j^YcG(tQL;V;_s;3P<1_g+Bv-r|>TLSB1X>Kdt2d8r)R)d+@r# zKY)h{{{+6J@Gs!8!gs(pq7kvNaZ+Q<1BDNn3q5Q+|L;u7{2#zpu|Isj%kv7;qTC)V z3eml^{9eD)@G0;@Pqshyg!BWFL1$2oKM8u$YfHcDhmyLT{^m8W?d=F}AbWnFeA)E^ zg{2qD_A*`V^sZ4hemOVI+`N*TS95bQH?QU9_1rAEg=mYOu^gdutT&34$^ z>UZQvfkzwORZuW4-NfC>Ds1Y-KIN?s8_|NR$Q@6S*es<537qMyPt0@74La1{G$ zNuNUPmh>6a7fPDy3(9&L^^a2ALw!a2z5gs~yQJ@+o-XMwYOwQs3o9QU{-IY%7yDay z-zTI>`Oi?g#rM*BhvFp-V`{NGCd94VmnPb08zDr#^p$td7b=WEMXhdsd_M}5@2RjI zN(Jp!XLiB&{AJ;HRSY(FBt*YtN;K2 literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-beq.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-beq.elf new file mode 100644 index 0000000000000000000000000000000000000000..0d2a410bfb6790af6f4a5389c27c38af8a1ed7b5 GIT binary patch literal 9444 zcmeI2PiP!f9LIk%*@POzo$SVRsUdwNHH3i4Y>a8uf{UO8>>*S^4~2E}GEEkn-LNxi zdU7a1i%3YFieCJ4@um<2@uCof-YVqMqo9P|Dr_Ou(Nq&oDAIEKyZl~vXp5kIY|3K#Qv`l$ot$Zy{O{!4x`?Xh(pClR+FWhgozwCrh zR_;o#mp*lgk}IwgZk_kT1uCWdv*N^Ucfu|Ac|@@LT$;P0wE}t{N5xO@5kcqv;yT4% zkBX1qbL4z4?xLMf9FIa+1x<{(_T{Ea(0M<6$8&$|gb0VkUz!s6X#7`8*^v5l0TZ})^uHC+zDT#xmb_GoY}ZxeQKH2o!k^Bx|%`OY#-4m-G`#o)fHH`bD+!SyDEmd8dYoe zh(^`g5QANvs`cApT~;p^g~Ph`fsQ?oh1boi^^s$)U$5`cu14LHcSNJt*WcBtdlCn_ z?0&9_V_l7^wtB@I$#~J4p;}Q1J(iSfOX(uI1uwBJ=u-|>;*{K z&8{#~j_!5_5YJ&R0W^Z2n1Riz{ z_$?l9a0`6F;LG53gJbY@gFgUo8@vg=Y49iDI|hFa_VDcj0nMSWaXw@4x8Mr~e-GX; z_$Tl;2HybRH24>A+u&Q^lCl0@!DkJ=4PG+%5Aa6@-vjR&{5Kd|LShacc7`0|O&{N)_3w>`BUJE{yp$`pVbD_bhNrQE#)ia*XQOIr<&9X!XT=?6UeC9qNr6{%lhxO z>QPXQnk&sPqLo@>=~7S))@863)te1!Mk_(f;3x>A>I_}1)i06iKb?lzG(3}rxip+k z!+gG%DPxtS1apsWnFJZ*PAKRS}hDIXe?F3`f{Tdz1<3E zF<7oQ46cSztrbxfD!SNeuBuhjRCswcsx2Z$tu(G=y(n0Zrs|D)L{r)$cKUy{C!pfT zruOadv&7yV-sh9GitdafvaW}jpP@+i`!I5=sB@~p=c#U+7eouVz$Nh+QAOS!^au`B d3z6GrqeM^f1iEEi{?9OVH^zvjG7(~?`v=hau;u^& literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-bge.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-bge.elf new file mode 100644 index 0000000000000000000000000000000000000000..8979b9ef5c7d66bf90613336ddb1e863d75a2f4f GIT binary patch literal 9516 zcmeI2PiP!f9LIk%*$rA+cd{GPP(ysAF@z8{v+HX76L1kLIph$d2N7YrJDDbn&F-=@ zY6^lwFWyS(D0--WE*^y3pv zzwi6KH{UlC$nxGkv+}%Q7!)^?{v=632{)IfqfChynKVnol#cS2xF6sgJeMNkN1ETl zebJwZ>i`@qkWmO9dd?wyh@JQ8#EI^2>tt=@ZR9a7#*+EGlFx?*JfLnbXLNfq zKdpB}vbfT6usEg}$ zSawjy`a1qjbeNUo#q-$%dHH+BJYe7@mC zCu+3@b#c88OAYAoE;~1{eu4Gx#{)Luoid#FI)*c0i|@<{3<@ug;9DON-<$gFc^2(r zDBZLJ+5zo=c0fCz9ncPF2ebp)0qp>HAmFE=ct-*D0z_=acQ{gtZuLeGSEQcrAea>Q zBR%Iia9PPOf|nHL`wLWl8GJ{{SHKgge!X?hMxS5f{S|J5Usd=5_$`G4@D+vM0bf)2 z5_nJH_rZq>e+0Jh+XVueL7(9~ukh#K6@|Y9w-o*w{Gr0%fv+k21Nc{ke*_;N>W}v` zcwXV(z^e-X0p3>lHu#Fde}lhOIF0|8e^>Yf*jD_`f{8`rTi8j$?qQp=TrUfLEZ&n} z0+;3c!~5G@tuQV4Tdf7hdF6%ewOTFTq_*q1e&r3<@tbY(+tpTl{bsxFyA{8=+4Owc ztTxuqyA^laaa(@9*`TJs>9!U2UC*x+>0Gsbp2YQ|Q7A>>u_!zqg~cd55rrqCP_Shz z$XJw7Rw~F+1zD>gixp(Gf-F~%^@_4yQPwNUdPP~USfW@sQZ+c-tiUqPwgS7_;QN< zKYWd`2Z-+%id$J;%ph{z5NE!&EZR53k+-rqM;iPLm9%AsqPW3JPT}B@Z!@|dhp2_f b+xJMG;RDDPU-G{_s_w)zQ9c$S#=3t1QK06j literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-bgeu.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-bgeu.elf new file mode 100644 index 0000000000000000000000000000000000000000..80510421fe3276db6383a33f005a8381f528f3a3 GIT binary patch literal 9516 zcmeI2PiP!f9LIk%*$pbTJK2qG(NZ62EFqN5?7ABN1YCqj4go{$!Go~fyiAkDW_Q^c zwS|I1DR?WXqj>R8FM=1L2-1r}5QJWYTm&ydBzP32ng%H`>-W8RGkI%r@Z>?>gPGra z=J$QS_xAgC7It{=&d$GLSr(e3z zxG(!Nc^!hoIb4ck7>CH4W*jgM7zd04#sTAialklW954p+LrbN&>o zMTL;~BmJSMutt1X#M{K}{?PFPg{4AakLL=sOa&5Je!f5*s#EmK&DV}UNpzaMwA+b4 z>-$gD?{OzjAK66FHQVyn&bj^qok;jQ$&nrR{WbeVM6mrrlDnp~40;zw-Hq@PLFINt zol@SR(qs26K9|QV;zDFO%Hs<=LnY;Dr;x^{sCbeG1 zIK`Tnr%w!HFp5y4gt7PzBVKfC{FqBydu)%NbgPl&B9Cz~mdaPPJo>`}iu)xi?yJ13 z<;#(^p!#R^%Ub?yWL;4GH`D%SwftmcbyYs=KdI#>A}d5*%pddH#{5TJ;*L8Z<{w#W z$ZaNbOLIl{Op?2$`eEK_Zqyx5a<}OY-swbP+@H26)be9Vew|8KUua^biSgN4$u3f4 zGuj$Ghp{&fXiAtT|DB!6bVZ@tJX9yOyX^5y>j-T;pcNX-FXn%;6PZrdBuk%Ps#D`1 z%e1nlb3mKw`7SFCYT1BRj{Sf+nMQtY_kc!@yTguVIyuMsp*pFJ*`t|O&T(NttIhAB zOebqzI8>*`AI`M0X7_+Ls~fZ2fEM3>{(vY7ox_i#F5!D<@eejEJTvmybQ|4zYT2f-#T;9DBs2jA8BFYva;dAvhmn!iWDOBxr! z#FFtH>?C3TU{|nOF9&|$|Mh@=23%L)AJN|xYK>_sSnW=6zB1c;b-^olsOR}!(0JS9 zL8nJSuh~tn-|4jiuMu=sI(|Sa&GynIui;(hUN>lU+SCbFyq?B^=Ld}{U2L{4k-UC7 z3AH3VlZ0oJFr9?wlJI;IDz1tZ6{{+$N)=VAqH0xCv5KlzQROPCURBkrs(Mvbud3=* zYt(J}K6&k>hTmFlH-oo&9xZyyt+vJuKWO#>YCuI7d!1G329^CQt3h)SG3X_6CA|u~ z%R#x-ZUt0U-ia0XSM3R?#B$30KVprs2k3fkziVAxo_Mm*Tfa*Bu!rDyJgERQETfffa-R literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-blt.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-blt.elf new file mode 100644 index 0000000000000000000000000000000000000000..d46af04478326a7f696ce62da149e640d5542d60 GIT binary patch literal 9444 zcmeI2PiP!f9LIk%*@Rleon&LW)Q~=s8bZKiHbzsm;36nNdI+rt4~2E}GEEkn-LNxi zdU7a&7b&Sz(TjgB-V}l$UKAE-rARHgcoZVRo5B`T4^p~*e{bIGz8C~gJ-r7rzxSEn zcYg1^@9gYhcyGUW<|W5*C~GeLNt)t$T-={XGxH?Kr70Sq{xt8Y>oLx8E=R;iKVQOi zb-z&k7#uI6%f|o?&f8`kunt%UtOM2o>wtB@I$#~J4p;}Q1J(iSz=L(5L9JXkE9R4Y zO!8=_FUfC_9N@T3((Uve%Trv)=kLp0o>nPOtd+0isX=8*e!Y6`*a@Nu@%+6;`_oSN zc=?X>`sqWLD7ox9;nrC{T%uyi-z!esb|>6&pF;$@&!)M{S}UOUag_Z89}#r!FRoMQ z_o(pbT}LkVV;1dv;&>FoDrjPiwJ)!@1fBQIS3LInUbr>xhZDlz`($|^bMVtzFJPRZ zd7fuT0%HhDP@{la@&`e(=ugWLpZ0Ex`*O&iP8=WkcE`w18TqNifd{mUe7mFXpEUB5 ziL-<}=8d(;>!?5M6Y?jye&W2QbGSFl75(uvx1q<~?d6X9BF)A6J|j2kkEOXSDzNuz zO{m)vV+D7J5?9dP$XSf}*@1ikI(b_h?`nowvwcXTbU%t>S2x7ER!^6WcTRjYhZm(^>D+yNbaEAnNJlK4N4M|{F>%8}Q0969Q%_dv!D zC07UWE)J^q!F)GDk6IYYHtT?Oz&cwtB@I`AMIhF%$DN&Siraz^4u7{RJk!3chFLE8uVYdi7SoqfU=s z=lczAg3lX#3A|}=48CUYyWnkuuYhkE`~moPgFgm)_;!JS=FsOjpECGM@Ogv32ESwQ zci=A!z5%{v@K4~j!9RnG#`=E&pEme6@QT5IfZsFtE_lb_zrolN5_9mdGvo+w`Y^c2 zto`?}z7zk-p9Gin?}6|4S#2=QM(Z21Qbu$BxrJb+LCqixqRN|rj2cafn$?Z0|5mdW z1(m3=)(9h7tJYU829;n_1{+bWQKv?<7Bmfxf-tJg(S>U5BB}n9X_!yLQ)zfQ4GU>F zm4;{1Q1W#w={TpOu2j;cO1f4_7c1#%C0(wh>&@wUb0ylSh9L#@l}cD!tyiNrngJ~b ztF^kpl`yI{BdS0}7n+TAwQ8CPFRe$_WyGkN#$1)I@KtzL_0Mtj6g|F8BKRQ%Y~ zz8!v+*t^5~e6m*7ok>L2^)d4^6zP5+Ms8(wPBr*E)oqJ{XbBg%Bt9dm$lHS+!l7y* ca{FkU=m{P`x2((m8K&;W1kp?;LdNX8-^I literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-bltu.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-bltu.elf new file mode 100644 index 0000000000000000000000000000000000000000..e4e90ec3f9c2d16cf4d1df0ed2e350eda336b461 GIT binary patch literal 9444 zcmeI2PiP!f9LIk%*@P<6o$Rh{(9k}TT0*Fs*%(c$1s74tp@&dCSP<6D%QU;%>?}K@ zrYDD9yp`06=)r#%k3tZnCm{$0FG4OJg{{$0B+3R;4^p~*-en+;CPmzd^UTZXR@?JSrS_Qa+Z85Q+)fzOUF+Vjk9O(`JGR@ z!DHoJ?hMigHc@=dwu04*ZZJT*K2eyC1rci1DT z))Cr`R4el7*mu}Ss*^Q057nvhkEL2!v)!ldtGmN;{n}2dO~?L)IjKfoH(3Y0k>hT& zqp42L(K%EnwQcrLs+DtOsrJD9j-)zS(>+wD#ve+xvSztY+gG>EGJRS+U;K54;^-f? zqb}h&wD{Vlg=bp6J3O)|zA=pVcUZnd`uh|(w1L}ansLB5U>qj-iiXO1xVQL9T7+w+U*V_Ucmoa!D0o$3GA_?AQB{a68o~ov*7a@i}eLM zzXHCeFb_$qis;|RQ_@w?!4jjw|@HGUtwr}4+& zQGB~VK(pv`?B_K80^HR2EAU4ee+~Xt<6GbzjlTmIwCnvIT-Nvpa82W%!D|}-3f|E8 zE;y6fpYNYwED4E3aIiAuh*D~YvU zFZ5QzV!crhsi-^>PXDX+C{*IM$#py8USjQzSm)DgWz{*2D0BmY#XV%ndLMzJmE}Is z;L}vv<`~gD4v3QYj3}d69`pbx$nDU3Y7osMr%B_H=&%NPgYD literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-bne.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-bne.elf new file mode 100644 index 0000000000000000000000000000000000000000..3c3460bb1d44330ad8613a904f1a9bd4324678b2 GIT binary patch literal 9444 zcmeI2PiP}m9LIk%P0G56nKrRoYUw`OT1vrmQlsmi1%sdzSum^~JP6tJb+!p^laLv8 z7X*jB=xND1Rm+0ai$|e|;z=mN9)%wCC@96Fkj1VCSvG#(n>Uje>%ohj-h-LneCGFk zzxUpEGKCKB-4`yrXjv8|&8FW;QCP;!P`0yd&?2IER@GkvOvA7VgXb zOkRiJa2=Q87{?*q0_HHx^7#3@1pBhX*%ZbBu93C;P>oj5yAE|aqha(GU#0#6*t011eN=A!b;T7EgQ-~sgqTK^?2zZ6+j z)xSSb{TH?TVq{%Xo##xJrmeq?o2U(7AZ&A2Sig=$>XO>(pDT%7AsUidH9 zg}Oa9m$xS=vKbvsT}0i_M)G;+_#T@{H3gyBKcSJjTWmVjO$yz?P?wCi%cfF|taW%o zBWvxjLaLLseje2&^?Gb_RM#Ks#B=E}C(X#@v;4!<{k3(qff{`q(aze%fV@ts49&${wm;Gsp) z%?Z4Z6Y`zV-w)rR0}N%FalklW954f2&ujbz_>#t7gWuQq zTkyWdx50-Re-A#^_($-pw*H^M6^(xdH#GhY+|&3j_y>*u1QUzr?_g)hDf}<4^R!^) zzk~Ii{abz!Tv5LV(ccwnjcGO5?yPeD($>rMYNObuuIGC}?JbW7?Jfn~dMCMlyW0%B zTF`E^{eT+v*5(zj=3V7pCup`?)D9Y6SL49*gW4Kht~alcynZ|mu&64;0buzTj zqil^@=)pok@F+d#wTOR1@hXBR!7Wz3NY|PCsKJxHc#s)*JM(>S-pt!idP?^_yfSiC zQ4~l`g|CpPpo)`2XXBMB7@)!_C_yn^*Q5CWKZB|YK%+oYI3MjdqBuYu=r~8Cn5>gy zV**To2`~XBzyz286JP>NfC(@GCcp RUwE@?y}ahFSpjfle;eT3{E+zXDtBlGWvz5 zFTRwq=3WNX?O$1o&f34c4jR7a2p2ycq#EI&jh;|3z+Txbl}oi^x%8v+vA47n?RmDA zk9@eEr#*Y=navFsU-!kmTFA@<`^lzaA2%aLcA!AG)P>KfD`J)9CUn@qBeF38Ccp%k z025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XBzyz4Ue?lN!+&uCZUnQWN zTzWGAf72gp{O32Bk?P%yXgUvDoi2<<@Qy$PB`ow{@1 zcAC=l8sNzp$IocDAsQeZA?s)1w&l*o@i}N(LV(klstb3zVaYqb1C!3Q+sNp;kd`l@ zj#+Tq_vWI8P!SL2q&10N`mvu$BkA0i6}RC^s3ga$Oj**RZ~9l(gINlW=>7+>#NRv6 zeUa2^NpKQ9<>g2dLj!=Ge`>WPsG#4?qi2WEvE;6$G38|1fR1^iI7#>oXy*ZcVp;|OloP~FVA1=sQ>@~ literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-jal.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-jal.elf new file mode 100644 index 0000000000000000000000000000000000000000..2f309033ad9b4537fe2d9abe8e5cba4aa707e3df GIT binary patch literal 9072 zcmeI2L2J}N6vzL`?iTf6Qdg;{Xlzl$!#30fK?S#h(nG;gJ$PHv*>pFy-7J|=tCxn- zv$Tz%Ck1a_M7;D``~-dl@e8zAJr&pYlB@>t;K_r`gUP)Ayq7nV-{!L6t=ycxWf%qq zX5tHS71wDo9?c?kI52SmL#SkNJ6(@CWsPp&QQ;+8Pw#h9KPDYdk;`L<2FJB&0-As( zpb2OKnt&#t31|YEfF_^`XabtRzak6K1b?&P6>zhaF9@q(1cN?nMVkeM`-V=G1(U< zCe4ICSkSW?No?bfYCdfGRv3i)qIHgX<(zsvE0#<*JQjSDd|JF)QOel0}gOJ6k~`a*>fROIyr{-Y>R zep7{=P%3o1ZfntR`pd%asUYkkR2@GmXyr@QoPhG8HkF&eV$faiTCIrOc`sN*8oz{| zCnfxDt0{wa*HaH7A9H>?=oWNSQW1qFWnn%Fm(u-FlaH5_H%GIIvbi(xl)tQMK{rsS z<)`Im{!2SadHl|#JtWMP`bfCvWMGZlIZrb$msm4TC+j_7$<|1(Sq^=s`e{>6`un3y lD;5o&xmD#LjkFfcY%k6NTbY|)2S?!dx0rW(6sY|n?+5Fz+?W6W literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-jalr.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-jalr.elf new file mode 100644 index 0000000000000000000000000000000000000000..78f985d444769a6cbab3763fc1882921fc0d5612 GIT binary patch literal 9140 zcmeI2&1)1%7{;IOnF%V3-N{5Eu4o%kWDk=@Mg#7`4!TMN52AwJ#!01}X*QW2x=M{F zn=I_jCE5YqJ*-Es;>DYY@!-LO_#cRZ*N7h{$@soqGub+L@F07tf~vQERZo4)Gc%Xs zy?*@E3CD3TEH2(-Kv|szpHAwTIs&*jfDu&mykCrG)MjND;9B7!8ZXudML#3XW~j?` zgeuS5VjZv!SO=^F)&c8)b-+4c9k32q2do3u0qem3>p+6XWjPhpb1#F~(l6!SGQ>-8?(78`vBC`Z-y<+n4(q?}T5$ZF&pHmt03K zp9$q@Y}fpx;M`s7%Vqaxip1^_J-0N_2BZ(EHo}}95e9Rgc%N#;M|ImrN6b{{7HeMa z_>g23X)-$NgZRq@>HLQe`0QK0T%HW&-XMJa@9YPnzW8T$OYSsKH8q<{5WB)nRd)E*iQ&3f+cwJS=Z$ebT!A;9jdv8>{_%iO&04-Adns(}P%f>4=?S;f=@~wtB@I$#~J4p;}Q1J(iS!1r_@s-%-hg-)wGHy<^lMG^H> zoOF?>PLvv~BB`1Op;~F1wmXRVxchr+ZZ4(nrB*zTV!p1!Asr6uFpXYIN<`hcri|O& zmb#oqn2p+T*Wjk4ofVp-!lg7>C@zJXytbfPvlLaTV`tb?(W0uw-B_VE_y}yox0N4B zM$bw*4~4y^Tole*8J5PNv!5dC=vhd69O(QNMlOw_)f!_tW&+xj7Sit)V^leEy31y& f#ac14zcHzCyzd57zQQ7q~A%RZ~{)7-!LY~A(QT-9n>e{cI*yu56@ae{OaW{ z_~Z3XJP(0G8$N#Z$v8K9Xa%$aS^=$qRzNGD70?Q31+)TM0j+>mKr8V7DNv>59)H}K zh%zCuo4Zz&X%Xw=c8QqTwT3ekW;2;B){~)G$`I$WV;QPafuiruJw3dKXv}$Rv)XyD z>+dUEXLc_wm_$*-H2l_->rc{%z!zd1nVqiRG9Q5jHV=zfLvkJPU0ek>!aosY>`$I2 z+iO#H=nsP(=|vZvOk~*PLnd%S)Y@QgngpKx@khM&dE0O8b^S5Nz54F-26}KsuE$Yl zV1oDQljANp;D&{c)r7sR(~S&=*l2r9_?LgRnl}8187?t9@fUuvnhy7aUm!NvzFYEt zwwf-_1O6njk@g9750HPK6)AA2&`-X-}z z$Uebu@%(oPf8qNmq^&azGDVF=VsEbui&%Ii3KzR)8a4SGOT^w;8H$W$%3_ZMXL6lC zXV%KZ&%{PovsrV1BGaL(_S9BnTvWJ=-^N_%F8Cevx7wfbcTa6b#=61}*HV7EhKSv{ zdTY97l&|S1YbL*ux_8;_?ORgb0Pls2?Y`G9Wsy^G(TCmMnR4U4ZG}rKoV(3O4XnRYvYX7j=9f0KcA~o-SfSm_@c*xYMp|5 zsg}%7)ysib461WgKcKl%W#*(;^iDIc7L=r*2ZUg`2OO24?hExjDnop3(I+Ni0`X|&!>!WQ;_o395eNT16~Ube)eb#R}U`E-HA(ShZgq}9p;PWNT&Snlge8=z|T5ukA(L( DPD;XM literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-lbu.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-lbu.elf new file mode 100644 index 0000000000000000000000000000000000000000..b094c86c40531ef46a5e7f974dc0dca07702e401 GIT binary patch literal 13608 zcmeHOL2TSa6#cf7l!9QLY(fGJt!XGi2yMJ=N@zi1g(&KwhY&b$sI+VxH(9CKU9Al* z7qHTD0-Wg}?ztS>E^9&cLY`IL%1* zpZEWp|G(dObI9(zcI?D6nx;`Qbo!lQ6pX=X@(p8*EYj&A+C@DgZbt3^_u#xi#8)@F z;E&c@(L4YSO!)ZfiQ{b4PzopolmbctrGQdEDWDWk3Md7X0!jg;fKuT9Q=m%AUEZiQ z7G?r+Ztoajra?{*+a+@Jjxm^_Ae+f-J6#!?p$swCc|Jo`Dp2^{h35wM5sg?+ZdKdw zcf13In~vE{3p!CauWMdo()K23NZ^$ShkCo?HT1_}f%T&zHXm~>@NHZLJH$T`;@F>@ zC);gOcHj@qIo^#f+L=%@$%9Pb1gN#?yrmO(<|iL>?Te<@*l&9ymVN!bsZI1?i(F5k zPTv^!>5*kGSl|YQw$X&Wi*s7!47WyvfB9FVX~K_~W|Lzk{=zRt(_%mP1#V@SR&`$)qzl3rY!bIa3(hR zIkQG4dM0OhEt}Q*DAX;wZcc88+GUBm_-(|6?t+UQD_q z{4j7q!sEbCNci}_@C(3OQoIP9)aMST0goFy^~%8g+77M(KO*5Xz)wr~Rp65nejV7b zlJy3?0qjfhi@J_ok&8wVH+jV|GiujT_r z{JdY{J|V@guv?0+1D==S*ML8g@D1Rr68;VNHc7v~fFF>sj^AaRl<+QKGp=W%p8?>c zKH~$7N%U)?e`x;?ejd0GzfUIVWHVdBH0saQMjfX<{_NpnbGa(jUC;H4FT0Lkt&?9b z)sp#{df9i2es#9$`7~RqOrLg(?pepJ`Q>Vbs{X87m$2`8e(@mr(U>2WzH{6!TNP!XOo%lp7nF( zO4+AeELaXbm00^*9DBgyt&Ps~@c!a_51#=_Mj@U&2+O=E#QSRD^BKq36ykXfHs$gA zgckuR(~-=Xqo-bQz-z$4XOBj3b>U*}Zd_73w0Mx{C@+pjGUdNdGH?A5pLN<93GZ*_ Cv%mQO literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-lh.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-lh.elf new file mode 100644 index 0000000000000000000000000000000000000000..348fa069d848de92d0bfee5e04464c68bc514080 GIT binary patch literal 13608 zcmeHOUuYaf82@(nl2XOqCYO*%W4bm(ib!(TM*By>MO5;ThZueE?Q)rHlY=C8+^)7l z(Iv$vAtc#C5X8%)kHMGtB%z21R;Z0WScFRrVyP%sts)Y#{$^+PGWA9A!KWG6{pR<5 zzi+;o-^}G9ck|W@V=o$pL1{DTSCS|kfz#$Mv=MU1q!V+#%lKCl(QZ+PDk; zB;QH;A#iBJ$Dei?=SDZJfL1^&pcT*xXa%$aS^=$qRzNGD70?Q31^zz;DzugHhnBc(Pvre^>J|8Ef+MpT`^)Cju)yXy5nGg82mCx9Hy`1j2r~9NA1Bvl zQ?C0rgN?Rf7R_vA*yKYda6;6&$CgY2&))oy*Iu>#<>PsOz{&5vKXngt$cwR_L!HhM zK2M*V{F(!9=r*l7>=8buL#(ecDEwPLTXhG1YDPw$n4S9FpRBq|oBhaHIub{QORTdo zAacSVt@*SPOPi(sE9dttonK^>P!;rZ5$K+_1ji`3w~aw%IiNO`9E0o zo%o;*_NTvbRKzB~=W{-&v&`owWA1Jg(*EUDGDWR*VyibE7J1>VDBOrIuU6%{Hi%uh z(GwY4l*69Mu^W8dIV;;*BkSDm&Y7JQnGWstPwYj;b%h^(oA9w0Nse4Q>)q~X<@E8K z9VLgpY30Z~zJAuf{m}h6O(kdNYo3$p0sS6qaqWqHoEPI@4eoXh<0kxcK6c}9i=V8) zR`_(C^V6JUF1?L5mA`fz`@OjMg|%W*&fw<)kKq`s>q|?-u6~}x_&BY2p2rQ=mru?t z3k`}^I`FyaNY1W$j(wZ9kgA(jKr5gX&CFKAre9!uY0R6G;ua%uXXtL+ zf!-MI2qX^V<7;!uDEM(;SHY)&pHcAW-|(xzdrG_roYvJ;EWQ#20W|8zXDeExC!{468{ePGX>uP{zJjP0H09w`xE$i1)KO? z#w7(G0=DIRY|OVCIIYj|Ajc%uV`F{L{yu&I*p=tW#toA^XDgV7gZb((W8-6ICSIBw zs!+}Iy`cEI$AU_Yf?BDX_Ak`RfmaMFvlTy}+0w%FoLBTNGOrqxD+^Q!X1$t%1J4hN zCn=aN1$4eto}~qlxrgy2HDP&MKS^|s VC(D+0`QIm%ck>j#>vYgk-d|A$+|&R7 literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-lhu.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-lhu.elf new file mode 100644 index 0000000000000000000000000000000000000000..2849a586d7c452f8d9b5f0c1b1235753e7d16f34 GIT binary patch literal 13608 zcmeHOPiP!f82@G_Nv%R=l1-Y}#&&FoibyisMr&)qF`)F&Lx~=G+iYH@$wITc?2NX8 z=#b(`2;0sf3ZglB@DRMDCs{;1NI{$AP%1cSE8-uNtyT{bvi{!8o83n*_T=e3c=NsA z`+nd1-uu0`d)V3c&daA?(KL;+qSK!wP&kQBi$72%$tIniqCM1;`mLlp#54TTAmX)~ zccDLtx07}V99rn(wMY25QAH`B6i^B%1(X6x0i}RaKq;UUPzopolmbeD|4)GmHM;x> zdonUZVh^{B$gC6V;dYIf-ZF+v3Uj8p%eqXOCzCjry=GE{T#9a8es$;&(Ww36PNn&A z%O7*^GOL?bbfRcU*Zlglx%1KNJgZU1bRDzX0f zP#UxPqY-bnI=Qe<1My>GydU`7JGtt7{s&TD<8~C%?xhXV(|oJM-rsmM_0g>;Tx(t0 zs7mWwT4tFDmu@ina zr~Y_vo1d)1lKAuu=eJ|B`3%S1?HH_Mw&U>%_;$ zYWp4T*Vu@YoMRT^d|mFtXQ?ka&+^&!EovZC6{UbuKq;UUPzopolmbctrGQdEDWDWk z3Md7X0!jg;fKosypcGIFCoT20ez{s%eaej~dXfdBNT7%z%> zu`}FeB;8$fx7CN%Y1|P=IuMW7wbUiyr-5Aw9|Jxq;ZyhFv%ou&zW|)&=QErGe9P$M zD*+E^9b5%=Bzyt*w1nRVUXbv+z&&;rZ_s7b1uK@>=e+yXF<0jyzlK(dF4GI4O{E(#AAHXLi z{15P13G4V@MqR>tfGsf}3-cWW&hm3S#xW%04-4yi=01KN*cIo=BAuL+DEK&E6TxD2 zg0Y(SQfaC>UZI-jdqLq1j|G()1+`)|YhS390d9UDIWL`BWRmxNe z7QC8-1J4f%M<|#p26V1iI!{T*(bP<)=GoLdm#{?Nv9#~`)ErMu-Vru0Y&tNWJWC#< zB8?b3kAZ+PrpS>;l7uV9&x-{4<5VsBK6&N2f?t|17lYSp9?g35rLu$zeo(9hQ~-<4 z)hdgL1T^lyxfm2@VS`#~7qV91T@1!c7C!S1BmselJIoPZH1seLz#r#Pn%@c@kyg)p9-_p)`0oK|s3V+0578#4+R z1&jhl0i%FXz$jo8FbWt2i~>dhqkvK1-zpHpW|2>O73rkFb`J{D=>i)e{~nkqz zjyui|R&-zi9H3lw%YhgIke}CYP8>!Q7smI0vskr+RrDQcxxi5>%t`TC z+w8FonCEVMpl3gEd3Vz1Q=b3j<=i&b;H$f?;B)p?s7?-^zk%oFC=Sa5_Pkfx=nn?6 z=LQ%{rR4+bX0cV-3ogsi{;ISBU{8AmJeR5%<;?(l(X-A`EW2wK*uI{{4*6M~EVV$c zkD*p$S-pDg+=Wdn!I)9NC}0#Y3K#{90!9I&fKk9GU=%P47zO@!1yXu}Lf%n;y#R{s zJVFRX*cyzXui-Z|F?A3e#<{5RN#sCd{N9F(8dHCP&bN_wwEYnIj`jQg2J#+_?;?8| zC&(3zSCFe3r^p?RA0dOM?su_MLjJ+8iHG&L_D(E}&U&Hx{EXT4qs4wBk0zq8TL`i-?Qx z6wKFKi;%5PD_2qOjB;n8Q|BC_b|d7ig?3%sOCp$y7FunMLoVuxfDp4_K8csI0-(%S zmPCCHy-1XA<|`2`i*l>o5>OtNOE3L*b`aC3&m`+9AziVrgnCeN3x Fyq_+0?`Z%4 literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-lw.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-lw.elf new file mode 100644 index 0000000000000000000000000000000000000000..d28a7f2a9a59e38fc28b1ddacf7d9f0aadd84cc2 GIT binary patch literal 13608 zcmeHOL1-LR82)Ew(^{3xB-=Kzjp^7>6_I4NS*@*tgHY+AhY~$_TQ@J$W+BNgJ7Zff zI6b+Z4s#=Tdf`>Wc=RDo7qR9;K|c_A5G3ML&PlQ@^XYEqqCiher%%Fqs?G5f`}diSH) z-{sz6Rv(?!iJ}v_=C`IC{}2tQ_(Fmsy&L;2{drhmeP8N3A-Fd94!Y|^_#=Yw{mt_f z`z$JM`AcI5`mlzkO`a+weGS-oxrnJKjXE}Sbl4#m}3~ zEc12xWIJbVa6`9iEEBEv#}qBDBd<+tTjz6zoXIJWL|7I+Q zv^t8lEcVBd<`Nt2jHN#M)mU!R>bluQPKvZc#H`$R8#&`%z1N8ib{-RJ`2{)Q%jz|V zZSL$4Yxx;D<6b?yudSU&#aeD9d&ujxhz)nPi<~#2kk(J0BfVF1iP(GJJ|g_rqwrFE z@?1mO=L+`^MOvGRc$X=Ue&kvd4Kv>}+j?b7Q6Hp8x9R5S)LNunlKAfT2_Nq$i4kjK zBUc9Um=PXxU5W|6%VV-Qp#`(9n0eeb9@mxP+^ak;(+2PFp`2??t>Y|dy?wMV7m+*R zXKNblY|8n`J}imve#7~BOtzlkPG25_eVpCN&)tcO#>YApHJhS-bj{Y-=F3LvyYN-w zxZ!_$gpl!h3*Uknn+f@N2+plD`6+)#odm z0X${&>eYaUwH|H&mnD1*_>hF(0-lrbJHQXyS-e5-0-uunXMjJE@cY1R2`>TvAmLAe z*Cf0GJc92qz@TY#9?ybQ?{naTlK)HK2PFU3z@g;73M}h!4e-3=zX5zp!nc7pOM3kQ zd_cng0MAHR$M-Tmknl!eORUF&{#$^v`W)}#7)#_23;TQe9)1bf73ayq4HG9N3O>%) zL@?i&VC-mp^638hc%7P_?*)~k9t-MC3YyhMHa^y@1zshn&({5bW~&P`b6&+e&b&rY zt1nPJnDv?x4m>}o?51F*8qnctZH|(O$<&ln^Gs@G0Wex7g;kTP%Cm~+IZPU5q`Yhi-lJsLwV jpmXjf^rR*%Z%ez0_VHlRvLXL`l6luA`CX@8%Xt3+5;yi6 literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-or.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-or.elf new file mode 100644 index 0000000000000000000000000000000000000000..0f505c0d779387188f8198d05fde3e292709ac33 GIT binary patch literal 9588 zcmeI2U1%It6vxlqkBW+!*{rou+c-%ZEftd4O>|p7==xEO7_h`BzQ}evnI?-(cHJ4Z zeR3!TUrIAP>S}`4$4OTdidPKub0_D#IG!W zgy&(r5#D=XZxpxuf=k%XjcQ5(rGQdEDWDWk3Md7X0!jg;fKosypcGIF+&Km6w3Km% zj1gb+$hxPK_O*Gkc5u5uR;rWUrIDA{v^6WE(G+RKeXR+N>QpBG`uW#)JwmkCIJ{a9 zzUnvwz#-Q(6gvJY!nq zvjU&4j?YZ8^!6()>X7dRS|U$xM?)U?l*#ICA87?z03S-^S?dJw!Ca1#wY&Yo=6V*d z$@Lr~>%#JLn|+3_%RUXVdM+Q1eHO3jm=ESS*M<3DeJ?COo5$M3{c^qev_|<IR{ws&VxNWq^V+|6qz2mE`u2`Ro(C11i8gr{gVeIDk-H2b;Zh^-S-?rws z-fp?xC9)o94{cX3ACIqJa-MOm%Va&&etf%H<2n=@1xaONindhwf)_yD*p zaS8m4#Qc1L%x{5LrTz+dDZ7z>5^S&yeh2)b#7*$D#HYdMB=*1y5`P4~D)AgRkoZ&Z ze*9MfgU09!{7y>zHTaUm-++IS_&czk-iZGmJSOpv;Ik6{1YVN(XYi`Tzk$unM!w&{ z(-Qvyz9jK2@UIg83+|Eh%;Nu=35o9mHzeK(J}2=W@aGZ_fUin?08BTPf0sYV9P2_rsAHiOds`c``Dk z$Q+E!p~w_WVGF_*g%z0!B2_`;Du`qSk*y%o6-2(G$X68kiXvZ8SaVv|PM`5{NnloQ>BRYS?k+*XA8~NZb xko7id;GM>U44w?&;ub^D-MGSBu)O`#PxLk)K(zRlf5T+IH}(+?#!j%Y-+#Q$#4rE= literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-ori.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-ori.elf new file mode 100644 index 0000000000000000000000000000000000000000..eb13ca2df21dadf1e5fe33637de45c43522a3b80 GIT binary patch literal 9276 zcmeI2zl$436vyALq%%%HyLWr`UF`U>_^>f4bbGcE=NCi-60T5ToD}I~-Q4;l;?s)V zaeS`4m_RxqX9;QYt4WuD2?=TvIQ$m~u1O~a7fE68n%Jp~^95Xc(?wZrfHNHo&KVX!YVrJtEs0-HtBSR=BSkV&7?oXGb|Q}L@kLf^e5x( zq#c684KziaLlu5ilmbctrGQdEDWDWk3Md7X0!jg;fKosypcHtv3V5_v4A$&wWQ4?? zn-(IYPi#)u+r;!~VacG-GK>i;8njIYiCFf5K_1m8`u*1XOD_?v+HXJh;%}zGsoDc( zmgozeD7vX@LI0u?T%hHY?<5@Q@ige`Z^DB0H&WltEY?Q6gIaSU{6xrne~Wpnl1bK) zM;hBGA&c0EG?M~Ig_sa)J!Czd5N8g46l;HG2K|#xuxdMZzutU^9GrBncd*VvRpc3v z?F>kpMj^%4{Wy-wsG3b|adcu}V*Ze()_pPtD`@x1(@1lO9UUDX(3GMuHZZ0;D5Kq* z+=#RqvE|VVgV>1Sqh#C!?cM}=ULbaCw3M$EjWK5#>n3wvBKGC*hy}gmHLZd{mcBrd zZqwbxi<750bdle_mBdSVSkU3Xm<5cP<%V-Twr?b3r2LXG{~Tvx+$`@tv6cPj|CL*w z*HJmIZ^ix(AIMA04PE7ZKx625o7lqW(1CnJY!Xk%GuyY=!z`CQF@GVtL`GCb)rQ3S z!@}$=#&H+@6lr7VGt}6NPV$bhP^0M9Jl@m!i1@GMIFGPox3dGK2j zi~9vKe+Ygo`5WNh@UH*{MWZb|7qzGS5!jK~2iGOO4sJ;tf#GODmxf)1lf%g~vVM32yy7cq}0;#-vCPOK7D5>NWb literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-sb.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-sb.elf new file mode 100644 index 0000000000000000000000000000000000000000..f51313b3616078c241c46b80a0522bbcc02f29e3 GIT binary patch literal 13836 zcmeI3U2GIp6vxlZ?t(ReopvQf1RT0S(Lg)f7MCyM)(^r14}d-pW3nvMrCn3Hb!P;8 zk!_JD4K0ibF(J}qG4aVXB#I9j79xoc7#oZxCXxj~qlq6&1f!*N{ogxxX0JRLpG-{d zO=s@>=A8dIcm6w_hj!=SGg~)nnnuCU={FKo?#0QQY=_ZHCh4?_=F>bsZt&A(?8{Hb zh}ec7BAn-XlOLDCWdrBfHc!Oaq=s@pIiMU+4k!nd1IhvAfO0@Npd3&RCF-qoYewm(Re zG@qC))=xH^m6;p15u@WekvFDm&cqJO*+z?fKF`_H>kVf@--sEkZ}4MdBG*K|g)L)w z_#=Xd{m$wnVg@A^-O}tWF|48<_cVhX*o2%idfl{-=!87u%xTv9nBh!xSWeQkuD!kc zCe~p2wVp(uwqCYQhfM3ZiQICgp3o*|l4X-3pQ+Vr0XpIPfwd7`^2S3JgtiJs6o?r+E;MR*GX!nNL)kS^c{Oi?cs#pMxJic zwdFfzJ#9M3pB4FEB?#VgO)JyP+D2_$L*9>a2ZVZAGYC z!gTdOcbnykexFykCdD+jvA$)YhW8@Pzn&>c(|3{g(pj%Q=%#Ml%WLjY*ZH~UE_h@`n*Lc4tS=GfbN?(k|2*<_*01TGrNh70P{Xe& zBWXs@dSr49zoyVXQ-^;GLLI-RZIVv=h~-18HT^R+tgj{1@Lszl&AAVK4ZLBWRp_6g z!M|9jd`oiNYv980h)0NS8@H=bqXNO(J{dW}i)74h~ z43VEFjzLwFS3^0V98eA@2b2TK0p);lKslfsP!1>ulmp5E<$!WPIiMU+4k!nd1IhvA zfO0@N@V|86*Kqvf^2;n53Em9Aclv$CKX=(M0}eCz=_uW3wBl$h-Vxv@pkI!IsKk$g zGZLr4n=+9Qz53EO<{R-fvT9Ze>nQ8c(oM&0Nf(QKL)=b#V>&0koYrjRpKwf ze@J{8ygJhC{~fqr;-A4MB)$c{DDfRINq)xg9fWlfF8~ioya;?s;$`4ytl7Tzj=Cf{bu;{on zm>cdN%4hQj?EHvZC=OH69n6;`cJq##?IyQB=hB{BVTkyN9)Iffr?vj{7|&YgL)xDN zt@kNq@sxm4oY+a$B!w<~7R6JddPU3V& z>*jW2c1!*|7#z9z18!$wxZqN!aJ>`Fa_j^AcjE!1vD<^cx5Vxdyu-xaa|%XA96W@X zbgGmvMYIBUHITNE41ZNbKSVrC=L aLv)ad#Rv}BGg!_$i+8%jYh64u$omU>gh3_% literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-sh.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-sh.elf new file mode 100644 index 0000000000000000000000000000000000000000..5d8c24418c55cba2aa262c032d71e8a7cb49a98f GIT binary patch literal 13852 zcmeI3Piz!b9LImNy9KGzo!zArv6P`33>w+)w#5}x*s2f?94dMs9xTgrX=|Xn?u>wm zktu}4L_-Q=Bp$RS#zafRVu))(t%X2L4F5u+2mjC-B*qw_MDSEuzwgbP-KSpg;^{q@ zdHb37`~H6KeP=R<&dlz$8`f!>Mt%#>?E(I?b)xNTo)#I&Lk41<%ydi}u8j{G6dVHA4cEGwL1xqBS}}eteXLxLY1(l7 z0E;oGG+r*d`|E~XElK9W$tS(IiC@!^>*I(Ui62DV#~CU$T^~o>h^uADoIlwi^8J!N z%<>(kxXbcwrqWTC?)W0zHl-v@=aCdCA_H4Ymm)Fv39dWq=}umX;rfV2n05)3&U5Wq`1e3XyMSq@B<;kQr`0YnE!RhxzC-BGk3qk* zqMy(7)1H2m)t)%PG@|}j@fg!)#r1OjggI|=Nkz+Rlg8J}wWCL>TJ1|-dmhsd2>tjG z=oeM=yteM?r&#UL5vHl;IC&~w&-90>bd9Zjd<6P?|E@Qnl3$cT&=IjFs@WJ?NVGoPEFfHMY7L*H@&X3Y2Y2SapAFBr)%(Mc16e6S&(!m zKl0~TO0xCpRPmQz$4vx%u%gFY(`Rr#YHnRSv=s6C&U_em-zT#%$?spLqmg?cf_rF$ z-^b*8nx)eOrly*5KslfsP!1>ulmp5E<$!WPIiMU+4k!nd1IhvAfO0@Npd3&RCrz zlK4SzM&dO1F^SjzgExU^r137WU!Tpe8)(;5>-B*fwJI0DPf5HJyiMX)!EZ{u4_s&X z`XIdyJ}!;pQ8;}s@!Q}K-cdk@rqM9=4@vw1SeNo01#gnZKLtmn@z23;NaJ|KNT($} z2gb4;*0FkDW1o@u2kgz{2O>i;#=VMP&MD5;DW?8cu!+g;<@0TB(4WHO8zeb zzb0`rn56YB1LLv2gQI9cN`ONWw}WR%yb64m#2Ij{#OuKKNW1}T2-cDRIWS550%P*( z>!i_(U_%<;0nUi)UB?$OcobZ@{uxt?y}i(4n(NYQSLWdp3dZ_9P%cA2??-IwpDyxp5CN^IvWyQ`J#?yOB)vwho$A87Ns zcCTCEbr18XM?6S-ouHK-rII|vrxYi4kQGUx3hzbol*pbE=~Kwh$3^Ot$ej}DT1B2# zq~((q`C8kkkhLtY7TFbxc%d)dY zo4OE1TZ{Sa+($}SFK@TAThQA@ukZDL*|}YIqOZTtri5@kfnr&90`IKdhcKLe?>i=T zjo`fp_T7`;GUCVm=viElF}qd_B6i>MTSolA>lM{Fc8%d;GQ=3`ke)Y|OWavG8;DCH qIV-&!TL>GAor8_nM9*4h8_{ki7R~?3?!j{01$^kmzV-5(ANLoX_Mg}Q literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-simple.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-simple.elf new file mode 100644 index 0000000000000000000000000000000000000000..5880eadeba8ac2f336e7f809a0ed50bbc837224a GIT binary patch literal 8932 zcmeI2&x_Mg5XZkw+XcNOT4V)5vo4BwXmcp+qJlyE(Ze2O74cTuY_=`fq~tx<^&o~` z1*zuXP5%Y);&su#MEnQ3SUrh#CO;$x51#fQGw|Nb_s!(Jmrr{N^ZeG~oa*ksj9SV7@(BQn75D)@FKnMr{ zAs_^VfDjM@LO=)z0U>a-1VS9tRLgEBW(@E6vYMDPcq{DR!!wrERTFW;G=F(D69bsw zTJOGz5H6B0ukNj$1J>>9Kg0RErMloAdR8583?P{r6*b#-)Lop;^ruuO#(b$}##Qp9 zjVoDhn%CM?@6d3aggzqVxgWewqi&&b>U+iO)ae#;GpSfmgoE50U;m+gn$qb0zyCt2mv7= z1cZPP_-_cr{3g|+qk#JXQf(9~EK$SZ@&x%U>Lp;!9Rz1-u9fs<(r!s_kiJ&Z++R@E z4@pxGLd?#h&V^kLN_vlV{=7x!J!4hMPf5D@effEZ^CgXz9#2}Hw|ysiu+eUYhepJ$au+vqeLD18WBOiT# zFbYb#t8_2Y=u#DSqi~$=iKcow*1bM?9c6x4MB3li%~3GYXy!NI_xMLULv{2SChOZ^ zR@A$}eIA9md2o?DFIQPJBRlK&V9DmDb5=v2hW=Q`2Ii#bcgC^Yb9)HK>0ad7HrId` US(whn75G0>uKP@N&A-(B2AV&wVgLXD literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-sll.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-sll.elf new file mode 100644 index 0000000000000000000000000000000000000000..eb8029fc2aa9c8f34a63f194bd53a77b6cad7cc6 GIT binary patch literal 9948 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 TKIGqWHE+)V(O{f}80Y;3F}8NC literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-slti.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-slti.elf new file mode 100644 index 0000000000000000000000000000000000000000..faccd51301d0fcef4d50527647c8d4cf72a70d14 GIT binary patch literal 9540 zcmeI2PiP!f9LImNn=MqWJIN+ZY->9!P{o@GD#Mj-DPLg z_SB&WdMaB7^-?t#kFr6OoP;3uRv{1sFS3#1QP^TD9%|R`Z{C~iBPUOS@E*+k=JR{s z_j_-?Gg-*+uDm+?nq^s(v=se8iozn23lp-ZNDigwX*xt1*>A`B5a;lRG!Y*eP9YzU zcjD_19M0g9k3%@P-!$WZalklW954j;o~7rB%ujYsEsA>QtiW*XwVNo+27|&fl+hzv%gs zr8~mT(5ES)=xWOHTl20zM`Mz|k2y+pdwwhRA|g2Tg6zAhv<~zxj*=VUBZBJtlk4O% zHswa{Sz;!GRdlnFWs?u9pb0V8U2!c%(AisG^V}cVe(SXBk2~(|&zJ6E4X&*9GUgd7 z@;ZHT+z8`yZRj7xVL2p*I!{ITK#^r6)EBG*6;d8_&5;=9 zTwE`d^%hAS>pZcA?;~;!9@`*c@8_W79DG08IVHz-ugF}B#EH)1JT?luz5W_Ec)XTp zJ+FO}=RYpzN@{HL{Eulh)Vg+f{iABWo*ci&ujT^>Iob6uq)3-cqlNzulR z(%F{yWG9#7XHH#svO&3YmU5{fic${UK05zE`D=-x-9f2?rcG9k{nE9=tYuGJOPts} zBDK)9TNG;#>W7lrB})wNJ}mW{sEu_b^N%Gp=P-Zgu+-Rc?snMM?XPpufx20F8I0dy{eAXr z+Qw~~W*jgM7zd04#sTAialklW95416=yr=QE;J-Bf4*UqdeITG&bQ5Ps;~&9Ajei2q zX#5Mfq496v8yf!(zNPU!a988M!DE`A8GNs~pz#s#g2p4@_ccBSCP%K{=A9)67~XRW z`DEk%&L8N%04}NbiO0KAsPy<4F&(ToriGY)eI;nVGF7Lh=X*ifJzDZst2K?weo$!!RECOHn)UVA6`JxduLqSS#GonTT5=V5mx8Hkts2mj z@{pgzziP*!;>Q~A3*u*uy+OQ>C}|~i@gySa;x2yXj@(bAy7_k@ZmhwR-)}PxQ45Iy mWX5rDsr;K8aTm;9Tg>n10NrV9R$m@2T5Ahp*pC;lX!ztwB z`A&Qug2Q>7@-d8qubW{UFb)_8j0462>j$WoZgW*>^7EUi(NSSyyYRHqU}zutIr;yBTibLK(4_j%u+ zDcu!zhCWFVMb}c6-#YL5i!>?uyO^U?ukW`~FC&6eFUf1yl-7aX#Zhu2d_+*!{^UBj zj7_=m`<9r`U=_V=WZC4yDriFVx+kuu2s(T7EAIWF?YB<2{*>e1`E2DL*5JxoXVGW0 z$m{gUaU;ynb)bJ7hvkqM?LHIX14XW5tDH+>vO5!zi(CUa;>Xu0y?mo4N?<0dA4HEWVPU+zLq3&@xw|7;}ZIL+IeUj%!VXr@!e~ag9dDipV z+uZ+%?3LuUxc?Jc4b^X(*FT~9^<}?Zo{t>&O76YK^T%bb2Oakz3;mI6Q`FwZy+do+ zmiTx(m*ZznJ$Q19a_KDPQlk{59J+Jp{6pohB}R8fqz;-6SvmGg*N(B4Yr2*=x^qx! zq3g6L*6!DjCbdhJ7~6SN>f5M|btL^KlbVa@-#s8Tw(Q*r2fDp=E?e*?BXwJYzMb8H zc5j^x3-3oda@ikVcW8;$c6yWggy)vcwG-c3Sl>48$&KG#5n2@87{R}vk@y|f-)G;Z zE!?IV#sTAialklW954F}&vy z@{f)CJG1ZlIdDn6Pdwk1LZ!#Yh`C^+F(*WD>D5B*>};Kyp6>Q8LrFxO#^XFwK%5YMK7i2gk z!)X~_lp*h`m{+l&qNoTNs@_sOfR zmi_8ltrEP`^k~IftJX9w`$44{P#G$^(5!F7uF$N1Wh1DpAO=kt*ORlryBy3`Yt?{e zm52N!{?#}F6+hN^Ul2cQ>N5XbhzD!%AIO|qS-`*nCSii?M=qs literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-sltu.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-sltu.elf new file mode 100644 index 0000000000000000000000000000000000000000..893aeb408f88330a31dd5009f556c5eebc2d4ff1 GIT binary patch literal 9852 zcmeI2Ux*u36vod?l0p?tcGEwr_Rrw5Dr&cr%+_tKrO{fgxWZBuL@e2KcG?YgHz70C zEhtWlpbw>_PDK&aeW=)n3R`RGlNdxFg)LR^LCH$>O(DhBr`q_Pxp$JAt%5K5G#8RH zzkAR9?wN1y1TxHPJI5Z=G>xLB)9)n7A3^8QAu%#S2I+JUEu)ke&xHLxzWwAfBL1Yf z3;p4IBRuxO{w^Hy2Pxq=hq%QK#16y`#16y`#16y`#16y`#16y`#16y`#18y_4pgX- zbT=9!LE0z#rgkDo*U4VSah`0womibFKbuZpx07kwPif*@`60W8W8+t$bsH!yLEjlB3OS=j2)4=2J%gO3TA+Z z2y*NX*2$(alwEmMvv;LXMJpX>8FFD0a(t|H#XhDJ@-pW?<+b0+xb-_tchE2|eX#cm zYA}V?BUq<@gzI$4FaylbVjb%XgMwQzPcz8Az4>H-hZb4rcl%AU*EOFA$V7it_Gge^ zAiJOYtLQhC{Bg2ZH6LgF(ZlVw(Bb?E*57#^&rEvPt+M_O?(faVHR*5e5IS7zWkst_ z_KN1iJSXs5?Owe(UVnQuHhNf{%jY@IY%S=c@HDaQ$0^Z!M*kMXrA| zAg)98t;O}r{wSZd5$Ypu2Mftdn*+iPMdOroaL6=tSzAok$F#qBPkt^2ZYm(*bujco2KG!#n`Yzrl z@*AR-D1YgkOti*?X0N$;_YG@AwXBM?s~Y?rQtReA!g`|IPTjr+{{}^FE36}|d1-#9 z?z)ESvtH!SiSvWMf3H2KVgIZZxuk`<$i1PKj`lpxuX&ruuM2JVVyS+Z&)2NM`l~sg zb8t^-J#}>aSkUZDb7eQrzp;jnAB%i`ecfC`)cucswAjCNl+WkJ_i9fa9c|KaemD2# znxTGAe#eiDj`Lft<_rCaUj2?A2J5Hz99f%!> z9f%!>9f%!>9r&*u@Ognm^hN>R1rV%9J&cs3%k4hIG5nWh<~In|;XA4Dz2Jhvqu_@W z=JyL!ehz$1883prN_F)o!7H>bzX-lx;Trf+g%5#WP}m213cmq9s_-%JNrm4AHxzy! z{DZI*0EOg+B+6Df~5fQsHmFuPFQ-_=Lhgf=?^_3%H^1Z{S}Q zz6xHG=+^TmcwFHWo}PvWzS?iKxd_-SxK-XA<4fB*Ph8D9kaiQecT5k^GVB*FtC zjEb;Xge@ZEOc`@B=4F&hIVqKsS~)3}lWI9Bmy>#Vsh5{}d8wC|dU>grmwI`rmzR2Z zsh5{}mejMPo+b4xsb@(&OX^ut&ysr9W~!E4mzVMVlKo)PG@O>)YQ+Vf! z-@l4lK_1+N$ax87-b;pf4~vmoA^a9O*kPTv%fP*dNlEnZKIDicXgNNi79zJ(gGA?e V0okHM{w-JY_6!jXM@fiL-d~i|c;5g3 literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-sra.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-sra.elf new file mode 100644 index 0000000000000000000000000000000000000000..ab4e4fbbee443919a8a7b885cfdcb3a3dee1eecf GIT binary patch literal 9972 zcmeI2U2GIp6vxlZwj}t`opuXUgtD#Ab_OX% z<3Kb%xhaevJc#ljFGiC_H1$D~#%SV;x($-}LbitZrpXe)@PJ+aXYQSyyNHQT#)rAd z?492|Xa4h_bMI`M&3$F_md7ZJ4tf07;IWAB3Vk3PIu7~Y8G+BA9wNTe!YZ< zk7gdixPN`pKX<|I08aTpiXZ1LYEcEE3Pcr%DiBp5sz6kMr~*+1q6$P6h$;|OAgaKB zSAhb}HQBw%tQU95x~UfP;?ra;;eLiJy%t*$CpQs~FIr7;IzVyaTx(~X3X~)7=i@t8 ztRd=3ZoF2gzF)JubC)cmncmTfykoj%Pj64zgVZ7TE1x~RTC=D1_2|L+gCcfJ<|dJ! z!jVgP_z^+I{$QO%vq6bvS2Sy&87``EPcz6ynULe+UYD(sPRKK6KjC|yFzo3&Qg&A| zb@9D@m*F8Lv>wHM+Oq7^retaszg;A7AG4Co&9*>COOn-I*(1h{V0_NgQe<^ho)P1d z!FbKna%8Ql>=NS(a(ofvgJcwYv5pXT`1Fdq2QNyJZc{HZV=cthQ^8GimJXWgSm;k%>mtpqN0 zc6izx$Dat}(%biQb6%>0!+20>?Ln@xU9NyEL)a)2bYQB#Z~% zxNf9b%PSkh7+v${t?td>_=YfUhc_@s!p1m02{Ul+y~WIXVe<9L4U|n$SUCnyCoKE1~33OOL z5sOnoZzE4n(#7`ei&&@7oyPU&dc#~%#{}MohWs|p=lh+8zjOD5`J%3V{`J=w+ZV+; zozbk$b9aW+|a#aysf44?J+*-+a{TG04w%bKoP$y^*$9BYXMz zmIhupFSw@RIqO~~S-;t%Dw*5rYZ(6KF-E#MPrR;mtX17wIUhSa=rh*&Y27+ejv*)4 z-^#VrTodn$cn4;1J=Vyol>Z%Xxf*%LTk&_M)&H(nzxQo}=3p^uQ3aw3L=}iC5LF?puq0Ks}N!bnYYsfK?AX$$_RX679Po%n20_-=4c;ePN#3iJK~ zm3M=$De)oj$t9uw2)JDf`FZfY3KzkTDSQO{timpMO5xYRClxM%KUerI@J|Y#0$)}5 z47eS?WuQaT=wp0l75)soQ{gYcj>6x7-&FWJ@QlLe!DWRnfU64s0ybjd{eJ_e6utu9 zqVS*K5rv!aJIYH6-wK{qcp3N$g;#@rRk$0RYzpsxA9z6FKCq+k2Ji<8Zw8kY-U`Ns z6c?Xp8tnq76n+l8Tj4zTRfWgFpDKI^yrA&QU_)6?uYq$4zX9H<@LS+fg-?N}6g~s~ zNZ}8`lob9A?7YERYT$2~<@z@8d_PF;^@;9&(e;b&0nx1!T{^-QT}NSaxu9JX!BPmB!NV+SUNokPVu?aLn+n^1Vjc7}@%4Izv67YpP5EK!erWZW6vhu$fQ zel$39@>5RF*uBGT2Z!=qp!`DL3?P?d%1-^l7!72X@QS;7s6ZHg1=!3k! E0AXYzdH?_b literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-srai.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-srai.elf new file mode 100644 index 0000000000000000000000000000000000000000..9a21c3501f5d8669dd3f23de591f1c1c28442ee7 GIT binary patch literal 9540 zcmeI2PiP!f9LIleHe0OP>?D&kv90OYB>shDcHP?g2Ro6fIYbDth=;;v^D<2qo84t+ ztnJBZFM5z=>mYilwHJ><5KFuWK@hws3svx-Or&^I*kbFcX8rxCNF!Ot# z_xruy`_1>w1~R;NU!Hq~F$QTf;BSx=7IE;@gzyx>1_K_4J&+ZCGZ_!@9`^MC(3Pbj z98c!kNk2pmXR%Ay9=yn}n^r(8pcT*xXa%$aS^=$qRzNGD70?Q31+)V9R)HF9_W9Fx zG0KI&@9$=!TnqRfvg^Q&Ze}D0p_R*R^S&IcKn^IDpUOcET!?4Bjz15hg1=2TGCEzqWjv1-*?3O)F3DIM;~l(QC&G^i()SPL zv9cyu!*>{;&0-auT*OT9Q7ViHajo0DX#mEV8(-4eADVvah~tmj&dsY!x3LCCN5M@t!YP(-l74i?R5To-bLO z315rWSA0~10m63;_+WgvH;?L|XIrQG9^MEqUc~xFlRBE%Z;p*dY!mose6Z)kI)2>T zjGFxqMyyTsKh*P49hq*_d=d9&i|QZg`J@)j>SDw?RR3_#m+Aow>l;q$YbVcyI+%=q z(zYyoXK37t>#mi_fn^LrWY}q-y9$4Yd|KfjkOPH( zMt)!6-;mc8{sZ|}h5te}6}|2t7Zv^&`Lx1W{9f~c!uyb~C_Ie(y}}2O!4}VF(#eut zjM`HR>1N{dpV;L;iR{YviRL>ZP{!lOgy~?dKF#^Ll{aQizB*NdhUa@h>72)dS_6Vc zxt{jlX;cEQ6x3F0egLcG>hf8yGPzzSQhQfj82c-g>DOb)y(tlc*qA*8= zc}AFH!Wyw0UU@(#lMEnJO=H=i(RLjBJ4G)&Ql}c6Nk{^^C0hBNb&NOOki7GJVUswyuOK5|Ju&Ze=@XiNQ zm1-q`DXAgt#Q$msF^aY|ITu8Gjc0@C98ua_*?AN##bt)6_+(iuT{7##- t0a`dfDaY|5OUIA);+5n=OYN5<0I$&kvZY=6o214~P5?}$L1@#s{{UR{2?+oI literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-srl.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-srl.elf new file mode 100644 index 0000000000000000000000000000000000000000..996dc3bfafc30365716eb280a8bd39d6b8fd6fd4 GIT binary patch literal 9972 zcmeI2U2GIp6vxk74i68Cm&en=RSWvV^zycC{z_ew$(2caa?hINI zjS~{%i#7}6*8?CA@?tb;B&NKWG)5C%jBS9#7qT^I;)}@=!SGO9|99@4nY$GepG-_< zlHEJMd(Qmtf6qO;+ivEq9Xp?4jFEq6^gBs%GMJ357m*AlNTUtZK=mT7d-D#Soo^e6 z_@karVcxqw;hj5Rrw^z6ffO&!hvvw@G3WNM3btK#Ie#N!KQEKWx#PCVCqF-`@_lKa!i zeXG_IbtJaV7pk8uTAkS&re04UX+-V`jalWrNvoe)1%KnQt5p}RvbG5$SbI{$PRQH@ z@{@RElP-Qlkg-3wPD{N`Eh}y@v#%a5s&SX;WT8yRaj@1+b3!BJ=~G|wwNL3*`GKU> zkw{)Yd*~)SB!$*?tkay~J}pWlr|{cF3)V3z37Tqz4oi^PS~(!*b$>qVvLu;pmHlGA z=+85kWy#e2`8heSk<0qYTwdA7^IZqNS(WiM+(sR-K{8iX_PA7C^w)M9tBWoxlDWF_ zf|w81cHD^t#IQGQm0cnhtgne!nauXe^CISZh>?h$tVO)CJy&dazJ?OGI9)Bu~OJ5V%n~B|hF01nR zwlMB{L!1#qeYS=%n)mi6@TT+lmN2f1c;GF;iaNHS?`!g#c|Kq79Q<8=B+M6e_41cq zqwif1{W!_Y_R9~2*ND9gysY%SOf&RnXP7rfT-WnnkGlEj-LI z^!M5zpL@mop(Zz|NtN%BUye-+Q?9{3*B_z3Ee z(9Gt_3XwM__VOR=k<{?|nnZ4udHc>iEX@x*WHr<;?t9>QfAbO4qo2RNdwd^$?wzzn zj|}qHx6Jp#^ZaXSUT5H?$o1>-`9j8?poiga7IUN-v*_tY($K4#xq7zlLchnn7d7+L zOdWEvy-mE9%rWqO5$}OXT#p`UOM0K>ro+fR*@W+tChs#{{d~7{nuf*bh$;|OAgVxA zfv5se1)>T>75INtz~MIQ{5uM8FMwdppW#R`y0M5q5oss>*5=IbAZW*POyP&YS%rJS zn-%8w7pVLacwUJQfSra=e;B-+h5QQmQH4w3rxiX9KB%w*9#{Asa9LseJ4v4_`~moq z!e_ugD|{Y2ukaV(HvG1M0SBY6@Vr^!ufYcu{to2YQ3jYb-sc=1hM;TW5UhufWE5M&Byas$l;ZE>fv2eY|z)6LBzy}rH0)AKF z9pH-!?*jj-@P2S>eW?F3IID0Dd{p64@M(pQfiEfiCiu3(Z-X}|{q-Jrv%(*M`xQO| z9#r@|_CejSU~o4dlknT+z-K#;9PA zZPS#TI!{xURvsKRhcka~vHGo+p&^$e+JNIgU98B))X zdKsygk$M@amoca~WLcCO8y>LoN5+QiW2GD&${op%DLi1=LnWIAkVS_}g;8&psLMJ& zY7ZU4XqUt|;-A^Mal0!&mba-(?kVq#e|6lCEZ%0`eO$cvaIY7?@5?{3@?#}2 z_h3TY|HY9XS?^iopc8|mFF`bki(;7R!Gn)jf|lXoX<_8Y?GB=Ad;xj*r~Era&AZx3 L)a55(^z;4#Zrjyt literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-srli.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-srli.elf new file mode 100644 index 0000000000000000000000000000000000000000..19c592783eda66112368a7d1d94535aa54d1bace GIT binary patch literal 9540 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 literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32ui-p-xor.elf b/examples/RISCV-32-Sail-Validation/rv32ui-p-xor.elf new file mode 100644 index 0000000000000000000000000000000000000000..1fcbf5b850e864c8be64e18e4a3f729286277db3 GIT binary patch literal 9588 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 literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32um-p-divu.elf b/examples/RISCV-32-Sail-Validation/rv32um-p-divu.elf new file mode 100644 index 0000000000000000000000000000000000000000..0c3335f4da749b7d25e14330c25dd9b6610a3859 GIT binary patch literal 9180 zcmeI2J&Y4a6vzL&wlBIM*uD4yNSwmv5K%l!eY39xEy*D5J zTP{3$KYxAx8^>`lZZ7`Ah_X64pU&z?9RXZ?jtNwB+%NnYjak_RxL4Rk{$hPl%roL_ zo~GO3hUpNFjKd9Os-!!kT@uDIkOL4^G8Ti@?H2pkH|?j(Z;LwPuQCj1KS(px}& z!*yi$Vkj?QzvkZx&fURKcHPrtiQQ8=c4L$qP<}`~3Uhiy7{y-lKGlkk>c=k}F<+ru z47}X&AxSFA$>^--V#5XH`P;wn*|&Y!oekxoApGb4;&Zw~sP{TY=X_M>drAahj>xGx z3pm;j+{bEwzQSxy8o)1TC9O#cN4 zzdyN6?;};ZE9Ymmgx6LYG6|f3e1*`&A0jq#jz$#!BunJfO ztOD<=K*k%C#uWur3!vE@dl*s1v*8rk^YmYtnJWlBp|Nc65#q?;*JTbV(Jo-F79Q@8?#Qz|SM*8ylkmCkpPOWw3g!pdt(zoe)EkPQ~ST(N3LM16w z+U$(y*V2}X8!A~zq{2$Gy|fxP;&l;sR4ZvCQ7dt3u!^N>e2FW~)+&nmQElql9Mk42 zZH{YmLYtG?d=aA4loD}!sUcg-?WX!Mjj;rkaan zRjTdEc&6fYRcp0d3boN^VMX4l9iS|FYSHy7tU1-JaDB_TMWe}QWI3uSdRGs*rbJJiceE#%VjZ>)Qi2ya{KpF;7>g*Mm~!h|5nVrC$m7Ui0EOQ_ZoC6 BB254Q literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32um-p-mul.elf b/examples/RISCV-32-Sail-Validation/rv32um-p-mul.elf new file mode 100644 index 0000000000000000000000000000000000000000..75eebf3e552562501df48c6b832c4b06aee58bf2 GIT binary patch literal 9828 zcmeI2UuYav6voe;%@$j+yUF&Snzn;6DoT_6le*Sgy0u0tR#>Wn4@$C~PMd`$yWN>; zt%B3yLj|c@r_kbq%|k&6im4UzA{a#QO*XWGP-G)j`l7JKR(+^lzcX`Z_ioY$U-W4% z%-;E(`R3enzqvE8!@N1X^GP8D1x=&hNs=>!pxy5u86urDdVrQt)IT2g;tqbDt|dgg zMLC4HcfRiJJ78xAc6o!uJI-C$LI*+zLI*+zLI*+zLI*+zLI*+zLI*+zLI*+z{yzsw zG}~nj>O*eKA!AuH;>N0EEa85d46PYi9U~_Zi`_K3VziH9#9HI|7?mhT?oTJ4TfLsB zPv3f@)Hu_$`g2!}c$7|QMD9^dSk+xgD^F{D{@P<#Yc#E@wi!KGd(=O6RBCnTlh|@e z7cUXyu|GIZA{wW}%Im_|5k(b^m@DFB!6s-NjCIX8t`T(cna_Ca_u^Ldo}|^MCog}n z`x{1f(vW(}2D{^G4t8eE# z*(1$nJ5QdFfBOvHv2^Ai<^01`N7s;llS_?eLNsLDo0o?Avwl37Z=;EM zu|J5j4}qTJc@6nDx>Q4an$A1yTjMrYU=6-s%eXY}#WP1ZKDpEtRroWPV*Pn1j#zb> zD<;V}SxY5&t;sw*heRYs39W}*O{dE%cHQ*zPUHLw8+@(I&04;0s=kNyJl-t)z3`B) zZ}_zY`i1Aj`J6oJsgcop;r>PS1huRRYMCea->=rfb$GQ0TCZ-dqrum|Pp!kNd7<8` zn`$AR91J??F7w2ZL;{xk@ZL1EcT~tfU6I~d+^*dX&u>My0TeT!P|7zBA4SbC{ z>S+0q6GptgvaOr<@^)xje&l(6-EA$djjW?X->P9$z`t0aXYHaoT5F`t^SixMdy86H zemFe8rK;Y~-{_oYtClL~kK!H?89X=q=fouHn?sDW%n_2YY22T4k@JZ8npt5~YZ2T- zT0-br#=BSe8B@df*m{%R^U!c`f1l{aGr8M)E~?K+D^9bRde}k-LI*+zLI*+zLI*+z zLI*+z{%Z#u9v~8YQGjm&eAa>pBX!Z$W;gns_&>|cUl8DLIO1)75S&vu3w}&t{=Puv z7r{4_3ZDXBRQL?|FNHq@ z_u^d!Iy6C_;&(`4{1>O43V#LOqwu%jHx&L3d{W`>!5=I9BY0NfU%XVPYy;w z6Z9-Nr|=8lvcfNe-%{8FpH_Gr{E@;3!9OT`7)-i9UL0S>99zJrndSP6qn1eNSDv!bwVTJ}gLO?wN){p3T&@6!_fZpiO8`rX5Rm-V|$QuZm? zOL0c3Gg6+B`bT`(CcjI`vs3cylpHuE>qyCLDVZ%Lv!!IVluVbB`O-39TINg3eCc3b zGGAKeOUry|nJ+E#r8iNzU|D2N>>06&`z8wZ!HP+{&3(lQg-0yAP_bzQD%x8qjeD-s zfc4tAUD%D@uK4{}uxFcx?1AD$(WU`;jrdCct9Cb3yllMhrg$yk+baIfDrh;mb02!v zMVNUF>HhatjNEeGudl)Dm{!}Nd-pVTAu@=KdkjHKv3a@Bb35Hf^a&3jTd>Q|Y*jbh MPc#sS&-uJ!oo$++-0w3R$Yqi)5upJt(Buda8}z-^`oM%dUtQJwg13VilR`^RQjC+IV0%YH|URykWMN+Kx-)Gk857PgHI>AhKR2i zccI_2*S&iO?2O@-FQ|CqEW#F6Agn-Gfv^H$1;Pr16$mR3Rv@fESb?wtVFkhp{C^cF z(L&T3)<@j9L*^arh#RkxxrSwpOtl@^7$+wYkKZ<_oun%H*O=^ zuJ657YMpOegW2n*7NfH&k$XZ_tm;9-8mCP@f9j}i^8{s@H(hV2(3B*aC*HyO%c8X5sUCn1*ytGKbf2ZFdb8GV%mkjimrT#3L zecVr!dAr^2=#P`Rq4{(j??$@)A7cOeSNE6M|C9CF{JiVb<}*qJaTc$!zj{x*?Vj4Y z)>W1ib4&B_Iz`BJ8rL!x=jRj3#rbZXmID8K;lG_x$jhhRqhMa7!v7wZTJ40=lJeA4 z~Nx!+LXe`lQGQsfzs0p>C&oTCRfq^I;=XrzLMJJ%_Q+ zys-L(C2w9=hWi;F(~Kc&0(cYXCBChc>V7Q@?m{mgH*F#gx{^qtIr$B#IUY!_N zC!P1t<{&TD4eYw&bZn59p_p3pPPXBEcpbZRyXur>{{tP}CC`7Cepj8w73|MMN5AFi z|HB-R&mqO!)Qkr-E;5QAg?N~Uku;P zaJZ~;wev91aq~}QV)sX*ULe82Dw09k4C&JK*;uJ`Ju(d=~t@#OJ}kO8f~pigy_hXbOFf&n*(;KLU+NjK9z{ zF7dbEX^FoBpOp9q@Rt(*2>wOlpTT;h6aP2x0f}#dk4yX~xF&H7?@^W{UJve%cKi*1 z$0WWRY)d={{#fE2;42c3g4asxw+Fmi;{D*V#Lt0GO8g@D1BqV&e=2bSd`03{!KC~7 z#s1Q;UZ+=#zYore{m%9VYfDVS_R;dNX-<}>?a^aHC8`vxf}MM#VA`b$ z*_C`bxPP-!vXg-i)4Y}3LxEvz5)hj;oSDXf#iIw`D^!a6CelfpVFf+t1vq;QuM z{!+qUO883&e<|TFCH$p?zm)Ko68=)cUuq|n^Oi-0nTecLoSezquU86mxG-6qkvM1B z`HD?BXwi{M>8Mv_8nTWZweyD|?TRm_f;+n~YY!D?iZ%_2HQ|;0S8X%2c$;|Vpm^`# ztQ4P{3R+g&+y}{e5oX>qx_^F(kz3aL^mXvsWx0*%LKxe z=6CKn=bn4+-AOySZ|>Z^O9(+h)981S@7F!OgS!)5Lc~{$ zRnU9>hWG4%odG=Z1rx8IMcBd$gcS%Y5LO_pKv;pW0$~Nh3WOC1D-c#7tUy?S|E~f? znvPmMMz0%p$h@r)apPq&m$0mmsWl?2;^ZXa@mppzP6sJYY->Inry}LZ{o&*@tJV{3 zG`8I=*3UMquG}?KkI`w3$UUYBtGp*^4bp0#zx3GE>J6)`ZH5GE5Bq(`q^$w_B(7Z2 z#YY6$_Xo#G#B@q@-Vo+M3|Z9UuF%OsnPB5!tn224MzGVXpYhnIbgO(<(%NVwubkO; z9XTZZSdU_y_Fm4@A|vU-KY?*F=MBwmgP$vru`t9D{GHc@ol6v{$7s1ll6gp^(o|!n25i_mRgPC} zYc$-6bxU0_C(O0AN2(Md*O|GRy)ZSE5ErI=8;#tFUw?B&T_FB8#BXE;dHGb^L<60r9Gtf`8)m?%8 z^TABEN^@Rc<{bJy_4+1VQO5jc``GW|q^?!J@bqO@OpBBqDK2Xzk=` z23_gcbE`Q<1@*g>^6lj~Y|rbc`n1Dme(Y&7^-DdzPu|5$ID6l^hP5ZiM{||FOK6{0^x)u+7*mhA)EqiK=^IzU-|2KIx=Zrcz0_(R-_3_84 zx6ZxkgS^VTelh$uk7hRL@_jRj`OUJ<$($ppt04c`$VGf^_1{U;!Yt23s-$aK{4O*2 z&H4HntS_#$N$-7VI)dDjEAUQU;k_5tcci7$G|CXRumWKP!U}{H2rCd)Agn-Gfv^Jq zbp;$AAQGG?z*zvFwLrs2QM%Sx0l6E02Q%{tf_1n@6}}IgQ#cFWqA;H?Q27P$O{G5% z{wmgtzaQKon*0j*0fkH89SR=-zo@VSwiSLG{I0?$z!im0gTGbyEcj=IKL$tfEdv5g z(0Sa~DvbXTs8?b93r&Lxe+@pQ@HgP&3V#RwT;cD*KPmhp*oZX8{{_5T;Tzzi3jYbN zC>+CglsSc$gFB+lc%9$@h3^F03U`4&Qg{>ivci4frONtk1#eM!CwNTZC&9-Reh&P; z!Y_e8QMdrUtnkZVGW`5?oO~Hy!0#~2{iS2QPAuqu51fKWBD*v+7CgUR8nFv`yEt65Y#JUK-G8W%FN~XoF?*yqN=19P zP*T_~Sav>52Zlxtk@uYOMXxXVeDRJxWxTYEmzMF;GG1E7OUroaei|FHEGmrd z&s!r0M~CcJO9k3jI5;w@aNe?qN;c(TMF&d7!(NrC+d6XC9@+%a?5#l-v*yu=G%Zl sl!Q|hnoYP^@-eMtxV%`9+{QN&eaHjI7CiDhShefyBI*u|AOpL<00@7Q6aWAK literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32um-p-mulhu.elf b/examples/RISCV-32-Sail-Validation/rv32um-p-mulhu.elf new file mode 100644 index 0000000000000000000000000000000000000000..5010a3deb94a51c24ba620f4a020a020f2086503 GIT binary patch literal 9780 zcmeI2Piz!b9LIlec9)0=-J#n83c@I<8kKf-w{=AztSDL|CJp|H2hFk!3$4;_vomTj zB#eYa4+a*-1P=-vOf)^{R!sJ$jnSi~4VrKv{#hb;Le}qZ=1uo)Ym65?%}Zu} z^Lg+0@BQA}NjrH*cJ6vq2ti@f=y#Ij_M`KWo?xV(4ASUsT1JUrT=)B3+}-#xBEAyb zg?``O@Sk0T>6^JVE|5cz& z({a1c==YK?SvNOhUb0HoGL|*6v}SB|lH61>dBch)=>R2(b*-n9RHi(6Kb(AO^#-Di z#`f#w#@VLblfPo=2|BG2c}F#2S9hEC5UmOL3!go$(X^}D7D%x6U@&%6>Kf2Dapg@9 z9}(o(AM7WU&?(h@O<02oWYI`^LMIz#f{u$=SFPh3K~JxL!m&^3cJ&U^-e{PY&g{L4 z9L&Ji4#er~=R9pPOb_-c#L0ecXkG{GghAG=b5D5qXpw^dR=-Ks`nktFGSNS-^ykUy z&<3Me~7GAbC1>WZKU1*9`?VJ`$PTuH_am+e8T_3_1fg5=hh~3B8E7#m)T#v zLnH6_ufKU>URdkq9;#D}Ja^`DZfbHeC8j3Zbs7Txx5IxkC&Xbmx8lZTf9>8WPx_ zsg{1j*Z+q(AfG+LS~HgnZCH0nPHlT?obzANuKzcAwdRaExdQ9AT(t?}G}`ChvO!)| zUcUr>n}@S$UA}M5VScmR=Vqr!_SKO8Z0x)l^0ct3GqF19T22^R7QeaRT{VOC#kJ1# z--nhf$UC_b@8p&Kdr^Hy+B!|63{i_J5LFk9%C_?9`O4LZvtObcmRBpvVPmZTNU039#{BD@G*s-0l%a03*ZkGE`cv9 z{34i)Ab%YvUnUmuo6K^5=~%B5i^ksu=jDE9dy};lraotMyw9>mpRF8vZAWjJDkZz* z6kaJ=PPsx(r8piwzgih_N(HApT(%t=E{^RxSSpkztkSqMQXZqSGhC`D?38S$kfHs> zk%QzvX9Lk6h=D-dABbEavZj=2DKk<^+pILsO6v!L;mv_aOY5|>PD|^wv`$Oww6spk z;At5>E#0N1zl`*kk^VB$Uq<@NNPijWFC+bBq`!>xm)T6?Mcby**uH{2a$v0Jyj&^K z-qL}QF@+1ZQ>-{tfEMkqlt=w4Q?Gq!)G6+TbSi-y4xgOTgws1RHsVmPToYc|f7RAP zi?@k?4vO~<&PwsQsj%hc!<~?<7h~okYATnVTN6#i)Ecuw$ ga$LSINNy7wiQeM?vW1WQ4p#NLdx&~NCCE_kFZ+y>^#A|> literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32um-p-rem.elf b/examples/RISCV-32-Sail-Validation/rv32um-p-rem.elf new file mode 100644 index 0000000000000000000000000000000000000000..605e403a4945a27abeef3670e142986ed22d8cf1 GIT binary patch literal 9180 zcmeI2v2PSd6vp4~-5D7acFh?X2`g-jKqx}z#XcaANLfVzxu8G^g^NhXdA!({*te&h z0Zf$@4GlsEt0+|xE8-78Y1|OWN|S~biSCHfP*}nULWO+!-p-voB}J5KMw)r^d-LYa z?00hE(fj_wrHhW^(6G7mng*2B;oO?iD|HIUr4uwl6}|2k{tRPQc8R!G*ad&FKPcuI zIGe+i`v^L(+h!H83RnfK0#*U5fK|XMU=^?mSOu&CRspNP|EoYkn`Jp2)N?N*vA18! zy)KCnwvR}-{nCU-S=IA)MA@Sy@`z)_6^{~%DF5sJ*AqvGjs~ByF(8nmFZP~4E7TKUuNbCf)6p44gMG$8GIJ}nZaCNVDdcpow42k zKXZ2TFM`Jn{tkT7;1v9&!MDKQ7@UEX!FRxS4Za6{Xz&l<#|Hld-ZJ=CFiI>kHa;pX z9`VHBP3FP(_|WH1CS&~xFdFE~`$Jwgn5NZgXIhBanfaA(FV+%DV;QT)jaaB8C6zWi z!}-m$rQ(K4mJ_LHx!GP^i5u~nh&!s4v?)=`acZ!NrE1L3wPtIDiutTIb!|>-b4Hu9 z+I*tTIc-jb)M-jdaeJ{LTTAVxx}L_g5HGdb1~;T?rivPfqHAfgTHKCm^46+qF2Jf( z+vVX*#cQh8YPS^C2H(PpyjMGnC_K05dKK0jH7i`-GHlUcavYZ9O3bWvpzB;1xkbgO zV~p)I7Z9yuV;Sq?=xn(xW)!{115p;Zv3}m#{E7;R4Z2WFpT>bGm9K+ literal 0 HcmV?d00001 diff --git a/examples/RISCV-32-Sail-Validation/rv32um-p-remu.elf b/examples/RISCV-32-Sail-Validation/rv32um-p-remu.elf new file mode 100644 index 0000000000000000000000000000000000000000..6814ffa3c75241a558cedf386e4aad04ad20bb4b GIT binary patch literal 9180 zcmeI2v5yl+6vp4K?Taob>|T5kNIAiB2!v4N+XM#^h{O^By5foxp`bu=d~?g$g7aEC zlLV@)XlT&Mu!^V%CzL+`rMV_Z77Yz85}k!;C@2o)phD+-Z^srxmm*3vBh9?|y?OIy z{8=tMdcU4oIO{kLjhjn<(}=P+wV`-7A3lFfTVc_4Z%{0iN{ zTR?u@b!6{cC>LqB=0^qR?&eVT+!L^1_qblWK8g(xAEHNLjz@&i+FQ<3t@u>^?2RMl zE4am`mpeX5NQIaTXKjf!mk{S~{K;qE_GNE2l>3A5#qUd7xI?IOeUEcKt@Ax41z}E+ zQ+0l%Bg4SWcLtO@0g36sCpq=EKlFzrb`N&w`1PTVkDT0zNX!f-b^O@h-_D&y68>Ov z18*Z$+*8NnUN{T+KhplqBG1N7+~4VP{)+Zf5wHFDPG$zB9FHbd=%MrY$kXHe@RQ-^ z{Og?G5i?<-k;oj%Z%yHQnkuw1b(22zvE4SSfK|XMU=^?mSOu&CRspMkRlq7>6|f5Y z7YbyYq%^K5KrMh~ckE%LGQA#7!7kwcGBZ~Y?7>(z_%Jv!_!#&*gSo!II0Gw#Z-8$ayaxWm;NQT18GIM~%HaE8lvreJd{kOI z;EBO~=F#Wzq0eI`WBmy*8tKdXLtZzS=G1C;PKeX3Q%5hKsU?)gGFFYBW1*6iRNCy0 z=f9+F6*pAUN~EGzv$K39Zp2qb+*R$QLy2m|slh6is__+FYPPRXF+ZYBU7N49IjYSu zZNAawTW!7!soRv2;?8nIwpTh$^-~(tQoPdc7~GJmnJQ`^iY}$eYH>TN$!n{sxdf|H zZCm4+im$3#yVF)w8+{g5r4s@LhBe$p+ zb&Ro{<^!U2Y%F7a8l5ed#Z00XxnQ}y+(-0OPm7Vy;>N!fGw$ImQLR|f!#M6AovIt! literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/list.json b/examples/RISCV-64-Sail-Validation/list.json new file mode 100644 index 000000000..831ac9e77 --- /dev/null +++ b/examples/RISCV-64-Sail-Validation/list.json @@ -0,0 +1,490 @@ +[ + { + "name": "rv64mi-p-access.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64mi-p-access.elf" + }, + { + "name": "rv64mi-p-breakpoint.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64mi-p-breakpoint.elf" + }, + { + "name": "rv64mi-p-csr.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64mi-p-csr.elf" + }, + { + "name": "rv64mi-p-illegal.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64mi-p-illegal.elf" + }, + { + "name": "rv64mi-p-ma_addr.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64mi-p-ma_addr.elf" + }, + { + "name": "rv64mi-p-ma_fetch.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64mi-p-ma_fetch.elf" + }, + { + "name": "rv64mi-p-mcsr.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64mi-p-mcsr.elf" + }, + { + "name": "rv64mi-p-sbreak.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64mi-p-sbreak.elf" + }, + { + "name": "rv64mi-p-scall.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64mi-p-scall.elf" + }, + { + "name": "rv64si-p-csr.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64si-p-csr.elf" + }, + { + "name": "rv64si-p-dirty.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64si-p-dirty.elf" + }, + { + "name": "rv64si-p-ma_fetch.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64si-p-ma_fetch.elf" + }, + { + "name": "rv64si-p-sbreak.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64si-p-sbreak.elf" + }, + { + "name": "rv64si-p-scall.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64si-p-scall.elf" + }, + { + "name": "rv64si-p-wfi.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64si-p-wfi.elf" + }, + { + "name": "rv64ua-p-amoadd_d.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ua-p-amoadd_d.elf" + }, + { + "name": "rv64ua-p-amoadd_w.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ua-p-amoadd_w.elf" + }, + { + "name": "rv64ua-p-amoand_d.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ua-p-amoand_d.elf" + }, + { + "name": "rv64ua-p-amoand_w.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ua-p-amoand_w.elf" + }, + { + "name": "rv64ua-p-amomax_d.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ua-p-amomax_d.elf" + }, + { + "name": "rv64ua-p-amomaxu_d.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ua-p-amomaxu_d.elf" + }, + { + "name": "rv64ua-p-amomaxu_w.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ua-p-amomaxu_w.elf" + }, + { + "name": "rv64ua-p-amomax_w.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ua-p-amomax_w.elf" + }, + { + "name": "rv64ua-p-amomin_d.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ua-p-amomin_d.elf" + }, + { + "name": "rv64ua-p-amominu_d.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ua-p-amominu_d.elf" + }, + { + "name": "rv64ua-p-amominu_w.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ua-p-amominu_w.elf" + }, + { + "name": "rv64ua-p-amomin_w.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ua-p-amomin_w.elf" + }, + { + "name": "rv64ua-p-amoor_d.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ua-p-amoor_d.elf" + }, + { + "name": "rv64ua-p-amoor_w.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ua-p-amoor_w.elf" + }, + { + "name": "rv64ua-p-amoswap_d.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ua-p-amoswap_d.elf" + }, + { + "name": "rv64ua-p-amoswap_w.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ua-p-amoswap_w.elf" + }, + { + "name": "rv64ua-p-amoxor_d.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ua-p-amoxor_d.elf" + }, + { + "name": "rv64ua-p-amoxor_w.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ua-p-amoxor_w.elf" + }, + { + "name": "rv64ua-p-lrsc.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ua-p-lrsc.elf" + }, + { + "name": "rv64uc-p-rvc.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64uc-p-rvc.elf" + }, + { + "name": "rv64ud-p-fadd.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ud-p-fadd.elf" + }, + { + "name": "rv64ud-p-fclass.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ud-p-fclass.elf" + }, + { + "name": "rv64ud-p-fcmp.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ud-p-fcmp.elf" + }, + { + "name": "rv64ud-p-fcvt.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ud-p-fcvt.elf" + }, + { + "name": "rv64ud-p-fcvt_w.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ud-p-fcvt_w.elf" + }, + { + "name": "rv64ud-p-fdiv.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ud-p-fdiv.elf" + }, + { + "name": "rv64ud-p-fmadd.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ud-p-fmadd.elf" + }, + { + "name": "rv64ud-p-fmin.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ud-p-fmin.elf" + }, + { + "name": "rv64ud-p-ldst.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ud-p-ldst.elf" + }, + { + "name": "rv64ud-p-recoding.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ud-p-recoding.elf" + }, + { + "name": "rv64ud-p-structural.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ud-p-structural.elf" + }, + { + "name": "rv64uf-p-fadd.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64uf-p-fadd.elf" + }, + { + "name": "rv64uf-p-fclass.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64uf-p-fclass.elf" + }, + { + "name": "rv64ud-p-move.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ud-p-move.elf" + }, + { + "name": "rv64uf-p-fcmp.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64uf-p-fcmp.elf" + }, + { + "name": "rv64uf-p-fcvt.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64uf-p-fcvt.elf" + }, + { + "name": "rv64uf-p-fcvt_w.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64uf-p-fcvt_w.elf" + }, + { + "name": "rv64uf-p-fdiv.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64uf-p-fdiv.elf" + }, + { + "name": "rv64uf-p-fmadd.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64uf-p-fmadd.elf" + }, + { + "name": "rv64uf-p-fmin.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64uf-p-fmin.elf" + }, + { + "name": "rv64uf-p-ldst.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64uf-p-ldst.elf" + }, + { + "name": "rv64uf-p-move.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64uf-p-move.elf" + }, + { + "name": "rv64uf-p-recoding.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64uf-p-recoding.elf" + }, + { + "name": "rv64ui-p-add.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-add.elf" + }, + { + "name": "rv64ui-p-addi.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-addi.elf" + }, + { + "name": "rv64ui-p-addiw.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-addiw.elf" + }, + { + "name": "rv64ui-p-addw.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-addw.elf" + }, + { + "name": "rv64ui-p-and.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-and.elf" + }, + { + "name": "rv64ui-p-andi.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-andi.elf" + }, + { + "name": "rv64ui-p-auipc.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-auipc.elf" + }, + { + "name": "rv64ui-p-beq.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-beq.elf" + }, + { + "name": "rv64ui-p-bge.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-bge.elf" + }, + { + "name": "rv64ui-p-bgeu.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-bgeu.elf" + }, + { + "name": "rv64ui-p-blt.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-blt.elf" + }, + { + "name": "rv64ui-p-bltu.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-bltu.elf" + }, + { + "name": "rv64ui-p-bne.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-bne.elf" + }, + { + "name": "rv64ui-p-fence_i.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-fence_i.elf" + }, + { + "name": "rv64ui-p-jal.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-jal.elf" + }, + { + "name": "rv64ui-p-jalr.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-jalr.elf" + }, + { + "name": "rv64ui-p-lb.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-lb.elf" + }, + { + "name": "rv64ui-p-lbu.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-lbu.elf" + }, + { + "name": "rv64ui-p-ld.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-ld.elf" + }, + { + "name": "rv64ui-p-lh.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-lh.elf" + }, + { + "name": "rv64ui-p-lhu.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-lhu.elf" + }, + { + "name": "rv64ui-p-lui.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-lui.elf" + }, + { + "name": "rv64ui-p-lw.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-lw.elf" + }, + { + "name": "rv64ui-p-lwu.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-lwu.elf" + }, + { + "name": "rv64ui-p-or.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-or.elf" + }, + { + "name": "rv64ui-p-ori.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-ori.elf" + }, + { + "name": "rv64ui-p-sb.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-sb.elf" + }, + { + "name": "rv64ui-p-sd.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-sd.elf" + }, + { + "name": "rv64ui-p-sh.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-sh.elf" + }, + { + "name": "rv64ui-p-simple.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-simple.elf" + }, + { + "name": "rv64ui-p-sll.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-sll.elf" + }, + { + "name": "rv64ui-p-slli.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-slli.elf" + }, + { + "name": "rv64ui-p-slliw.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-slliw.elf" + }, + { + "name": "rv64ui-p-sllw.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-sllw.elf" + }, + { + "name": "rv64ui-p-slt.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-slt.elf" + }, + { + "name": "rv64ui-p-slti.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-slti.elf" + }, + { + "name": "rv64ui-p-sltiu.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-sltiu.elf" + }, + { + "name": "rv64ui-p-sltu.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-sltu.elf" + }, + { + "name": "rv64ui-p-sra.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-sra.elf" + }, + { + "name": "rv64ui-p-srai.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-srai.elf" + }, + { + "name": "rv64ui-p-sraiw.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-sraiw.elf" + }, + { + "name": "rv64ui-p-sraw.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-sraw.elf" + }, + { + "name": "rv64ui-p-srl.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-srl.elf" + }, + { + "name": "rv64ui-p-srli.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-srli.elf" + }, + { + "name": "rv64ui-p-srliw.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-srliw.elf" + }, + { + "name": "rv64ui-p-srlw.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-srlw.elf" + }, + { + "name": "rv64ui-p-sub.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-sub.elf" + }, + { + "name": "rv64ui-p-subw.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-subw.elf" + }, + { + "name": "rv64ui-p-sw.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-sw.elf" + }, + { + "name": "rv64ui-p-xor.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-xor.elf" + }, + { + "name": "rv64ui-p-xori.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64ui-p-xori.elf" + }, + { + "name": "rv64um-p-div.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64um-p-div.elf" + }, + { + "name": "rv64um-p-divu.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64um-p-divu.elf" + }, + { + "name": "rv64um-p-divuw.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64um-p-divuw.elf" + }, + { + "name": "rv64um-p-divw.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64um-p-divw.elf" + }, + { + "name": "rv64um-p-mul.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64um-p-mul.elf" + }, + { + "name": "rv64um-p-mulh.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64um-p-mulh.elf" + }, + { + "name": "rv64um-p-mulhsu.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64um-p-mulhsu.elf" + }, + { + "name": "rv64um-p-mulhu.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64um-p-mulhu.elf" + }, + { + "name": "rv64um-p-mulw.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64um-p-mulw.elf" + }, + { + "name": "rv64um-p-rem.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64um-p-rem.elf" + }, + { + "name": "rv64um-p-remu.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64um-p-remu.elf" + }, + { + "name": "rv64um-p-remuw.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64um-p-remuw.elf" + }, + { + "name": "rv64um-p-remw.elf", + "url": "examples/RISCV-64-Sail-Validation/rv64um-p-remw.elf" + } +] \ No newline at end of file diff --git a/examples/RISCV-64-Sail-Validation/rv64mi-p-access.elf b/examples/RISCV-64-Sail-Validation/rv64mi-p-access.elf new file mode 100755 index 0000000000000000000000000000000000000000..6335b6c040b73914ec00131d29386362874d4da1 GIT binary patch literal 9296 zcmeHN&ubGw6n?wO7JoppHIx=A?b=cg9@0Go>Mt-TN)JVf^-u%}$+&F-O*ZUIYdyKN zf}S+(q6G^|@gFF9@G8|mz<)t{@S55x9$Mm?o!O9X^&p;vd9d^5ee=zmx8Ej*Y~I7` z6E}2CgUEE)1sVAq%ku&4^N{d-%)@!maqI#kiRcQ}vu*XIK`VGUUmSKy$ zSMkhKIbJgb%U(-h&C3a69qS8Lza`#nc@St8WD+Lyrci@aN(+$lby-K;MtoA@HxW<4 zGUBKuzcg~%4r?U72Ej@<>eL<9+F5tTuz)<-fQ(@Sd9(p;bMRpM#m9r)VJo-2O7^Ka zkmGex6O$@a3Md7X0!jg;fKosypcGIFCHfFuk^JQ>5!Njx9J$0U9^hKoJ}4dVE;ADsBy2R(8COc&1pHgL;ut zaBBAov@%;OvU$&ek~3SWb;JeAiXMY1!xIZ4s|N+#12djm4bOrseNbh^5_;wdUyf$X zS!CHtt->HHD+}-T--muo!JkIhn&wjUm OeMnHUZKjyS_x}PP!R8MD literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64mi-p-breakpoint.elf b/examples/RISCV-64-Sail-Validation/rv64mi-p-breakpoint.elf new file mode 100644 index 0000000000000000000000000000000000000000..571bfd71693a9a0df32f6cfb9637881b0af4e923 GIT binary patch literal 13488 zcmeI3&x;#X9KgRblNq-n=55omffgORW)B{+V+piW!BDVx=wVTp_98Kvoo)i%Oqlo7 z8VVhvcoIo{hYCW~ORp|M=(Py$-=Xfw+t%%hhlTikZ{DOyc0Clq)AzxAzwi5f-ybiZ znH&=4-Ff@!72C2PA2#fRu~Ox$D}iJ0e5RGG!$q)BJ_nwTb(NDTp+`EcKesb0*Lj@k z;i)BG2^W@R_!ae-WF9){8hwlb_4a%AQv$mzZH|9h84b*7cm$J2iiS;o)z^fie{DZ)({iW)Z zTn44n2Ud99#a-+brNw~bC&ic)dp!xivH|1R!=C`Y9emCB@La%`{b2Wg>j~~5xKIH& zv7Zl|L4Usj{jj{vc!l*#>%TbC^&w;jlnEV=U{-gM&L^c?4krUXWG*PQ?Rh)dBZA8^cES(u%5a+1#zu5Vm4_ErqO5w8y*l*z3 z()u2=&2DO7(biyx3vH0=V}{&!Jnww-1+<&pjhj&;x)nw}(TTedi*}Su*}W#`aHH9| z2^&q(d|k`)5Op^iytCPDijR^ATG3{wJ7qVxXeI)-1a@y^9TI3@4%|rME!`KY{L?Mb zY@rrOrrY^UM7Kn>)9nbTnq5{^Z~gKAvp9nl)ZOu(R!a5MoL8Bgb2006qjQC?W$1i- zg0hj{A3rm*=hUpBsz06TSrw(~KgrLZD|KUWm~CXnF}BLZZ|jl4O#a_00Ear$^CDgg r%D_?16r4ak>1}*UEtvB`KTi47)Rdce)%X0k{D&sLHi^t8^ZEY(btxP6 literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64mi-p-csr.elf b/examples/RISCV-64-Sail-Validation/rv64mi-p-csr.elf new file mode 100644 index 0000000000000000000000000000000000000000..be0792258a875b84c147bc4b4909f851e8608a27 GIT binary patch literal 13936 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 q*_pWj literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64mi-p-ma_addr.elf b/examples/RISCV-64-Sail-Validation/rv64mi-p-ma_addr.elf new file mode 100644 index 0000000000000000000000000000000000000000..e5eadd5c9fd137c4e2e13f8280a6852eaa1c7bec GIT binary patch literal 13712 zcmeHOPiz!b82@J8Y^@Elvvh?98eF>t6Aooz*Fccq1{Ok;1F_X`(XxHJ{bOji*%@p- zx#^-oL$vUkU}*xzmKr5gX z&T|BGMF zc5irzC?0!#rLcIZ>TF3r;&zD6n?z#5G@Qw|63$U-^XET!b73x4ok{aGAm-*Ce{Dkf z#^9g8C!G-Z1A$umL&j+h+0^>t?*=~>LKTZ)Vc6v0IpI@6u4VqYN$|60za^TPIA=SP z9SJ8MODtUMTSg6uU0aAYg+e7K7E1VW_ao=Jl&smISYksbp3^$@o3QX)MvTrgJVSZT zXk}4itx=ktt5#>qb2oXr^M)`I_3Pbo9eMrr!@@|{ugB&3m1(tpNEk;0>z%~noiuxW z`t(fs`c=fw2;+EQJ%#lY%~np2&6Fz_u)bdyqiX$t>D9*(pPR^k{e2-82zB4&ZBAMk zrGOvuaO4rq(r;RbIrt%8)Y&JDN#!S>7x{P~U)0$vjIU~On3pe!eD|&(&eBhQoMc3Z zdoo@y|88Mi3-FLXiTvFMt(mgZ@AJgCs^dvL?M_M1p926#E}ax{D3JM@V-?EAO=sC3!pqced0+lt;cRDWUrT<~0)jYl4$&bZI( z&iKgRL4BRVI*y(^t~kuwgNkhtV-|6XbujE1Cy7zw?JUMvC-F8GL!SgVJyhwCoD9C_ zY%^n1_?}DbA-+!HDdL-1J9;L-xlHjbk^^62?TkGjzJ_gN?6QmxoF^V-8__=j&N5YA zksSCou{P9Za8u&4jK3bW8GIvKkDdx}ri{v7$vI^peiYAP@@9!s2I2!PliMtcehP3p z&G-(>^n6XW4mFv4Ewd5dM10_s$=5R*y%gZwFe|T04t$&0TGYm%AMl2Z5A0;nZw>k= zz{#-q9?604TGqnYZ3g{-8HV`48w~ojpoapSc~;pcIqlKA8=mAZvxkXeog3~ z04Ha~la}TAwlLrW3;F?b7UBcvE$C;WcTB%`WFIVBm0gkpUt-AThM*sGT$b^Hxe)Y2 zPb9o|CNCKz&PMRwj(G3R;CpnbBbHjYcy48>BavFT(6>^aFlpfvbH$l#P09D8W7Dl? z__3m0wE|iJt$^U0X)Z4cyd%D5COWF4}*bo1O{g`K8UFW;X|JP7`-achtX|NB#ZWAN> z<$C{<%HF8M$DUoPQSW~Sh8T2iZmPFm@cdWDzvS6*8l^%1gtD*Nm+kKG=yuKz92qOT zxudH<#k`Yudq2o?w@@Uvm>sR%j}?d9e6L#=EI2L=W=C=-^1b$BjFW}RxJlhmL4}4s^vPoFn=}*21*yL?PIV8WwPvd{7&QGQOf&VARXLwKm literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64mi-p-ma_fetch.elf b/examples/RISCV-64-Sail-Validation/rv64mi-p-ma_fetch.elf new file mode 100644 index 0000000000000000000000000000000000000000..4d66e6904c44fd6078da740a0955969a1cf67f61 GIT binary patch literal 9296 zcmeHN-)j^{9RJSl?P-+uHaS946d-=gw&D zQo^dAtRO=8Kn1P+|d_Uh`GoQJ8 zxV`W9=PrC<5dzt;U=y^KNGy;Oj(^6Kl(qm)gN1VuoYdEmCRf>UPV_33e_2Y)WacOH z6s5_N6Ao9$X?b3ukjX4g!$uee3GHFkl!k3>XFs1BL;^fMLKe@IM%cV70&| zyqYK_K=<`*QCb9Al=2Z!t7ngt0LrCbJX$Eh9F#!%(yvPp;qQO(!H7oPv8rDL7;8_ z$~Xeol^LqUAK7l{wy*%N%=13`jZ z%qblc>=$Hemo2iVvwQ=BOz*N$tgC9R?h&L7bQm!IDhwGnA7zPXj zh5^HXVc@-Iz*ZdvN&X-w1qfW&?k`A@!x}H-@Dmyja`>di zKg;2&&wxN4zoh;5;(La4si(^tKa|5~5O?Ldyxsoox8O;N%Tw?6zk`5>ydBTwzn}WQ zp8q$E2U#Bl>T>w_r2EO?Fu@nv6O^9*_?zq3PF5p`Ll*M-jgayv1|B!s+4|eK$-_F2 z<|D>ozR|jJHLQm>Y1rn?s09(9591yBY@>M<+6~4aY+b3d=3J}6ug4+GgmcZ-4!zEJ zBj&Kcv0`0ijiHV)FdIh;X)UO-?-qDt1|^S`oX=J~yveK0R+B?j?<_s-yH5u(g}jZl zH$|mOQla}>`h6_Q27#8DIED)ukFRvp$awdZ+V5x4=0M9#$XLAH*T#8IL64*Z4*a~s ueth;y1;?loFo3dOTVqnZJgSsGc3^U;)AdpLJ$qC9gE8e&?R%<4KK?(=>LzFa literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64mi-p-mcsr.elf b/examples/RISCV-64-Sail-Validation/rv64mi-p-mcsr.elf new file mode 100644 index 0000000000000000000000000000000000000000..796100bc22d5a10102a271a35fb413f3295f1928 GIT binary patch literal 9320 zcmeI2PiqrF7{=e-&6X)(KZ`)My(fJ ziszELh@hYazkuk$Yw_e4@B@el9viHl#Q4taY)H5EP&^4Uu=C73^Ul9tl0%aB(dFqY zx~4%^bodUk7jw_!6_#(Ksq)%`GoWML1Ez>IxoPuCl(<_T%f&Ly;<(+z107yru_5l( zDbWGQG@B=FC5nI|pa>`eihv@Z2q*%IfFhs>C<2OrB5(i#A#4@sxHFMhF_6P;Be9x5 zdbqv;qPLAf3*w?>{U!wqmcRlYOJ*$y@%w-BdE@%vaey)B!mn`qRhyQ)7O_ourUN8v zx<;GVTsi|oY5#-hC;E1qHuZC;*w@ddV{06qhwc{#s>XK*J=0K=vkQ^$1EbuZzb z0~7qr6mZ{??G|r*HIhCD63qcJ^vU33Ngv)tbAi~r@3v^k!N+bTct^U4_uCwpAS13g z6NxoQHu{lEzc^d>IjId>2Y6Xjs3M>UC<2OrBA^H;0*Zhlpa>`eihv^U-w`m-fL1#n+b;|ara|Tj$be(gFXa4_()V)yr1a0{{4~!%gSODDf29Rp8lCMU4L z=Np-kad%RqljkDGJ*k=Sx%e*GQ>L8M`Y7HK{Idga1fSm2h9RkkP&<1|kBdE;c3yXR YyeXIKxcu|?xB2hn{BkEUZRF?w0Ub8hr~m)} literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64mi-p-sbreak.elf b/examples/RISCV-64-Sail-Validation/rv64mi-p-sbreak.elf new file mode 100755 index 0000000000000000000000000000000000000000..4bcd37ceb7dda4d13540bf6367398964de709086 GIT binary patch literal 9328 zcmeHNL2DC16n?v#Eh>fG7^H=YE-CdOlI$VSqJoQ{^iWXLLvPDwyKO?7Y}lDOs7C@lZVZH>7_crPWg zDhgz#!afKuW}L$Yw0@Z*8y%Pf6~{5q(^#F6CL2sA5cogST z2Oz_2pP(g31*8H}0jYpgKq?>=kP1izqyka_sen{KDsTb?Lf9#gs#Qyj82mE>EiroF zk1_lRzB=kP1izqyka_sen}AzgIxx9R+dzA{urP4FC5R zi>xo80DFUcY%wJiSOC!{AObE3zL4WD3*O1`vx2{#<9VNf0(pK>#E&aS>w1Ep%<;>D zzmnrukvG|Wt)qE1{=z>?d8WqE_#P4#>N%Iozn#V(&;MTVPS#(6J~JDi^gKBpsm1cXycM0_(3N4DIU7kJy7x%z&6t>c$ zP$3&F>eUfx#IcdhXwapVX1htDB953|`=5s?%)s7C+PlKD#VLsXmtmg^Ujs*A2A6Qc z_Tx`R+%o+w?hgB1#IhqW1GX36@-dsYIQ5MMpyB5M#_>7D9JEOea2jz~TW}1_GIu_V ZaBM2l4O#X%{L}s~Vt-{A$tU^!zX4Uw*R%it literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64mi-p-scall.elf b/examples/RISCV-64-Sail-Validation/rv64mi-p-scall.elf new file mode 100644 index 0000000000000000000000000000000000000000..f82dea52f4959044a590a72a95c81500e6f7188e GIT binary patch literal 9328 zcmeHNF>ljA6n=K%3J{WAqN=O}Sus8|^8NxtvickkXkf0l8yBB(fyfR@B+j5OGgSTu;AM6wjqI7W}KK$8t<21J86 zmpA|^ruzgfK`I~>kP1izqyka_sen{KDj*e*3P=T{0#bn^C=kGIp3Io#SdYLv(aXhp z8@v&Q+u*6a+_(-<(4UQYc^#HP2Nvty)gi#&|MAz2JL6{orp&7cLFZMEOxydOp~0pK z5U;BWY2UWUEtuf`hs2N7PLH(J%ZTW!m-yPch&3_Z!ppW|{6HYqezH6T&49w#55=3; zu!@czD+Um}PmGE1tnc1a6)?`&c?+z5&xArQf}JAUuSR5BwYpPaz55n|_gKZX?V&ZEgWV(MNcQu30{o2Oowkx1 zy-0z0V-$57O==yiyIVBNSlhv74z+sp@t|8Y%6l(D)bYzNV!-YZ9-$1C3P=T{0#X5~ zfK)&#AQg}bNCl(=c&5g1 zd>aW9^=xJGZzb`E^S>6no%UCt&&J#op$`lGa+y6XFVg~k9lHL`bElNQ2zx4ZD_!`&(Q#gkcwjV$Ha7*L@z;VR>*@9zW6uI+efMZjUuFtaf@K5{Si~Xg3B%fsW F{{}0V?2`Zh literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64si-p-csr.elf b/examples/RISCV-64-Sail-Validation/rv64si-p-csr.elf new file mode 100644 index 0000000000000000000000000000000000000000..a6290ef676200dc66f5741a533ac810e13c9d849 GIT binary patch literal 13840 zcmeI3O=u)V6vtopq_eKkOlLF6MkBGw5)UGi-h7z#0~{9>4+};&$nI$}sp%vG$;{AI z`=J-d;K75e*=@fd7*7EYMxr3O>>&tVB_OlMz!LBvvSt}0A|dfrS9R>^jiBi96?DCR z|9bWHtD<3ss<&P|_mXKC5G4~DpuL*Zax%j-KBBD5b8rSs%#T597;8zV+|s5dk7V1c(3;AOb{y2oM1xKm>>Y5g-Epia-T6 zTKJ$d5~ORu?mtKc=|y0z(yjqB4^k)7Q0q*m_gPCCW*`kRmQAFgg1`TR+t<&Zd=%i6 z^W0u#=d%Mokh{xl3qHo*{K0~0@Wt0$J`O#~|2FgkbLW6Bn$Ms`-+Wq?E$CPW<6V4m zZh(If=(68rJDrvdon5;IyI|occG7`i1IL-_w!7Ii6EMzR{~BOv;fBo@`(1v@akrPJ ze#J4kV_g8fmQ~}9g>5+|cSc=R_bm2(VnmLe1NJ`v_LAj7@S$Z6U-|}?+HDAy`^>=D z1ZLOMeACEaOeSc@7{dY9U4O8#8~HA<<$4>RHnH5n@*I}mYHPf1pg)QJIF{c!J~pu0 z)@!Y7HM%SvHwo-U9d$Xzl`TGMW!AH+ZA;g_+zN~;uuT2f*mtsQ_YNPxvi8-sz`*tD zsatX^>)*@R{X2oN2&}K33QVy1nrW-~$#po9!MWL;$SY{a$JhY&@TL*x$R2S+uB>K2 zaJ>W9wj<;lj|og{|HoG$FxPHZ*UOZ0e4s3ri^+%)M&IAi*ac$HX zxD6XP3`#_R2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CJ0a zKNHYr{r^#`DRncTmJCkeZGgk``?10lq~!Vjrg+(33*0@3g@vyjVQ#=VXpZmGdP_oo zTn|j9c}4+{+eAWtQ|rZq{-jNX zcwFR955sh!GzXzGq|C4~Bg%{_^Q1Ck%A8T=DP>L%!E~uy;oB$U%#k`t^50K?=%!|Sl zTHz}@8@&nds>tF11Z4H(vtg%__J2>k*o0j5@NST5t`-`7AL#HNkt)MeNX_XnbY*?q zfhtA&!BMXI4(Kv8xxZe+w=CvO^`reNHxed24CNf*%eweAyeHYZel#!(BOb!%J{{Sk m?Qyh+W7nEA_ONnVWe2g8a6x`YkE-9T?{CGfafPiU>;DNG+FG0d literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64si-p-dirty.elf b/examples/RISCV-64-Sail-Validation/rv64si-p-dirty.elf new file mode 100644 index 0000000000000000000000000000000000000000..a15a03329251e04a954c12db96881640e15b9f3c GIT binary patch literal 13552 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 literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ua-p-amoadd_d.elf b/examples/RISCV-64-Sail-Validation/rv64ua-p-amoadd_d.elf new file mode 100644 index 0000000000000000000000000000000000000000..359f6047d95f5210c9e56caf5bef7e4a0b1d95f9 GIT binary patch literal 9504 zcmeHNL2J}N6n;s%wR&h$i?pC<=%R?=HrPsw3NC_Dp@&jE^cJ^c+Ag-6B{SN3(NNKY zhte9MLZ#lsn?=Mu2}Q)C*Pg{6V2f2el&)_klafsp3SK+#CljJ_rlb{-fM1@d=N^&75fS0nLIi z?FU2v(30$%c!?{g6i^B%1(X6x0i}RaKq;UUPzopolmbctrNG`5@L{!ycH6y?83H*_ zHzIQ$NHg~v${s-haEZuopJm@#F4&Ur}O%G^cd^s;gIX)%nhm6LE%%_-3`?!+^=Nrpi{@GpcYr)!GdQmi zF9NaF49>5${;Ds{ZDY=7h_oRfPuDbZ#1VCqP=jcp4Yg|%^`}1zwP1DccTO>t0!jg; zfKosypcGIFCwDg(O+cK-KIEgE3(zJLZk?-yu-je3eE zrfp)>U=SMlMxr z_h;~X5+BOo4<(MT7eXi^H$*44U+V4@JuuZ zFL7=Lhi*1i?IvX4>cDW>Dfke0)MM@)k1#&~7L=;Vd^#vI&t?9EPZ>;M z@p2^Dy&V{z|wL-#>vrB zreQ#8CVU4K#T={g0d1@zJs)du2uvI|Kv{509JKi$EYA8{YO~a*JPwyR(cuG{4RO|= z76Cv{x^LsKIzk3~A@3@26$WK*Y* zSZyF>?%x10JB0xY;(p8eMT!{c{650V>Y1m2mM{hwiQ|5xWGB zOn_w0G-&&*OV7Yo8GjOSVlH-Q+dP6EWAm_Fn^Rl|`7T~HH^CPKYV9ZAr@v%F|CS#H zxlqC?7Oljvf#SzRPK;+QlY1s0&z^q^@MP|RP20O%T5;U3Psf+B23PKN0?+9i=5sLI;`L|`)_dpkx61PuF!=I4%x^~AaDenJly1H(i}=aC&4{@`9xoK;F(>6oyar_Z zg2B0o$UOt(;etW7yP{SS8<5=ZMZJ1O&Dr{?4IkHkw=`2LpcT*xXa%$aS^=$qRzNGD z70?Q31+)VHuL1?xQ4r@VEMOPG>i_>B4uuzU z_&$Z#a`=eCkLGaMhhRV+zo7UlIld?Gwe??A{4t}u&X&TR96qb?;T(Ql;iEbHw!&Es zzl*rdb#}VXef$^vmB6{$-Tc=AFF;RjpLYVsZjiKpgJ+_-c!_g!I1I8zYmktW6W9FX zBh?V1fCkLF91s>pz#_ku&S#@K3p^H1hm^sz-<+5UyxgqN(jA1BPbmb=36IvNnm)S}1uz~=)ti~vqs)&Oc*uguC~Sx- zph~Ycm_Lr5Mbb~FGZtK7)q1nepsH%Fj^io+YTIxFem6v~jNB|1PW8jA_SMKWd@I*& z_-ae!;}a<@y&sMY(>@!ux+cGh3q5$P=BxXE+L0N2Eo=Fh*N#u$8cXx{szu&I#J|gF p{#KQ-5&i1f3gfP|O9me@7@vwKH-qs#|CGPKB1uCTE}!P}e*>n&^8Nq- literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ua-p-amoand_d.elf b/examples/RISCV-64-Sail-Validation/rv64ua-p-amoand_d.elf new file mode 100644 index 0000000000000000000000000000000000000000..091e7f715345caa171fbed7789648569d3170929 GIT binary patch literal 9504 zcmeHN&1(}u6o0#EV)fA7T0}vqi$M{=bkT~Ufto$>3UOZ_-_ zkk(Zy7V1sBDI(@1hzI|Lp2a`F7C%m<@y*A^%~qk{#lt+mKr5gXSib@ReCVSi&S-2!KsI%9 zu{8sv!2N3=W+%7Rf@sLHR!N@)Q(yt-l8Y7u`1?QpJbPj5PJp6wVkKC5-l4n8%f!yZ zoCy$5n+BaZ@6vOyO~xNZ9GgoWI%6I~kFj}Fu1zbhgM1gSvK!+I0=4#&?=zIQVQ9+_ zgIvmE6-!oZ*g)}PA}7MLzLSS0AkS{U0hphDWYd{lE-gClmxbzgtihFgoy2oCkMcSx zIPT#*=HfNC2kX86>1*-z3m9p?8*dLFZa6?TFXr#G3m{_`$g{=VJk}9E`Cd|Bzri!nT)f1&85~AfqcuWE z;8vTb+)@CcPkrWH^9c(=U}2?|%&&)a=6fut1(ZRp(ww;Bd;SgLw^%)BLcnT%n2MQC znRfsxjlc_9eu#9Ktkkc7zz<3{D%~MyRVW3&IpNXzRI|dahCWpNsd_UNdz4i|1|G6t zG7K7`3MkQ=4OXe5XQA}9WXAj(tW8R$^CF-nDp7G)iwDgTRg1ib th<}%p{B0^@Bl_;y3gfP|O9t;#7@vwKH-+&%|CGPKC`kuXTt3a_{{k-j^V|Rc literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ua-p-amoand_w.elf b/examples/RISCV-64-Sail-Validation/rv64ua-p-amoand_w.elf new file mode 100644 index 0000000000000000000000000000000000000000..edf0588fcb70a306d5f59730a89ea14b56fc04b3 GIT binary patch literal 9504 zcmeHN&1=*^6o1L?*6P8e7O7y-&_xl!ZLlqh3NC_D!Gov=4?@h2X?L;RESd4^qM?2q zJV- z{ip~4y3>7AuW;?O0$KsBfL1^&pcT*xXa%$aS^=$qRzNGD6pfj9UF^~=I zLSjt=>Eiw+5VKwAvmoxZtY4&P!8lmJx#WxmA^!ePKF*x(+YV564*v|7p0w$X>K9^{ z;E@TCOqm9qKIPJrutmo2MVy#RZ8~ipM31p~K(0+Gu7i9Rud18i3j($FgYVN@vY~hL zcY~ZQVHHbOV%R|OVb^~<2V7cq+)s~d->?Q(?sWvu*)+`S zq~N&wN|=k+qn%jqoe!VOPoKfy{G0P{HzIC0KmKr5gX&1_?P{A2|~E zl@OwU2F$x05Ee$jBEOZ+uS5+Ncr2`kltJBZUYH2H;3^4PtPwULWc47*#4Mo9+YA0= z=!LByLOP83jR_F=kaWY+jX=w%6oTdjk2c1eKD!hJPz%Nz%}nf3=0^-XWWiVzPKqj^ zLa$9SzlNSg($~`&3$C(CquF3kQ8ia;c*?)pR@{K!4bdwjH;aW+{V>aYHF6E#%5@sP z+7kKrL`qBVhai&;9GJ~&WEg$pR@#$M-Y5p#?$a{$RcR9`9 nqB7Q_Up`x5+_eT|@GgV#sd#cT7~k_x`FqNeG?d};X+HlqEBo>0 literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ua-p-amomax_d.elf b/examples/RISCV-64-Sail-Validation/rv64ua-p-amomax_d.elf new file mode 100644 index 0000000000000000000000000000000000000000..c8867f8b9da920bc567feb76074131d72d24cb8a GIT binary patch literal 9504 zcmeHN&1=*^6o1Kf*XqHf7HL7z&_xl!-C!#f61qW&5{|dUNqE? zg9mAipdhFx@n#XRC!u)oU)Zzw2UzjrR9xSDq-0Ztf)@|-AoJ$^=J#ga{*pax_T4%@ zdcrgeNX&$9prVLl6+WO{EK1ME3LFFz#|=;r+&l+uJ_w7_{*Kx#@d=N^1x|GMfM!FK z_9G$y=uY-cyu!893TOqi0$KsBfL1^&pcT*xXa%$aS^=$qR$%=K1hCXa%g#`2ML;&S zbFnoCq`>_G5VM`@vmolVtY4(df+?_obICai0{s0Sf0{qrw-cb~99;>PpSS6*%2#6N z;jsx2&zc6EJLA$Z=$G*a5y$3oo6ebs(PL~Ll54Yy>mc97tK!D^f;iex%EeemaiJi1h(l~t zfNXCWl4oN)2INu8AlqG0Cy5M*=X+4A9#L<)c51`Y`tOuxY6Y|cS^=$qRzNGD70?Q3 z1+)TM0j+>m;Qv-2Cp!wFY?V3eB3S+3Ked>H9PbP0;PZZgF8JC`(ZsYzj0TKCCx3^+ zyE6D*g;z58u)>dIaM_1oKo%cY{FMyf6ZqQtFDw29qqEMY!kr90qi{Ea-&FWW2EVKD zW(L2HxXpETI?sLb7yOmLx!Rrl*8^HUq<@2FqPcj9b2B)US-n{%WR#vh zdFp&AfY7Ht^RD@X1tGAo+Dzs%VU7773#J3gV7l6vyyAQQb>cT!EoeZ%ru{G#GoLbV zKUC|17c~74>2Rr9y8;3qlx|461JJBe3VvhKqqV6I8ZgNYKI0i|p39RL6T literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ua-p-amomax_w.elf b/examples/RISCV-64-Sail-Validation/rv64ua-p-amomax_w.elf new file mode 100644 index 0000000000000000000000000000000000000000..e7d9ea5cf551f30aca3a2d5be01150e9d9c607cc GIT binary patch literal 9504 zcmeHN&1=*^6o1Kf*XqHf7HPqvp^GAd+h8m83tR-HhaQUd(1Q@S)3jafZkEhw>qSHT zICzlO2nvGsWW6aO_9PS!{tG>ee}EM~PQ~@jM@lwT5WIMp2bnkTH@`RY_LuBov+w5F z;d7>8Kw>6*1ry@yKzp)p;uWr)RzNGD70?Q31+)TM0j+>mKr5gX&KI}tY=Aog1R)^Y)25xYPhujOK_qqtNMJj5Y3 z%0PP749T-G9s%-j%^*FlsFOqn#ETuMRfniIT|2d5_3!VLW@-hr0$KsBfL1^&pcT*x zXa%$aS^=$qR^b0uASXKtqHL8p>>}9w-#@jOgBksm_4F`=uL@?kF@Wl!9NM@Mv|aUSU^5AIANuYCRQulvP3o9?xZ=l2T;F`8WK)HL7Z39w^XC2L_h#Pyl09tpT|ai> zxM>)WnF(J(MG41hd_X%_k)Dq=H~=P&YoIK+B@Q}#5SHZqO|@C(GaiS_oapia&4DEE zr$hiSob8)=g=?o3&%)T{dLo#aHzsQgcGhhSflG8Rs`1?Qoc<}D=qc8q+`?bPck_6Lpfrfb`x7YBeJ2&DTyHc)R*LrI}g*t$Qn2nH1KGm8JS!1o2dvi^&Tf7TeRv!iggfX^!2E8y1@K2^YP zDZEp_?;!4Qo!!B6AN>V?E^w~)ApeEHEf_BB^Ge{@4U+Y5@JuuhFL7=GhjG^Gj1v-u z?dhWv)d=E%2F$+_5EjM2;(8~W&&DAOd=@n$%Ai?qpT89N!5j%XER5O^v1SnGVir*5 z?}d6R@}o`=BONZ(!%HCW3F#)K+XtOGr4Y2w`!t+s*V*MbfJQJAwsWyhSv_XpBMUCX zQA<<-ReH6>>J9WPmcE(ISTM(`VLN0{RW(-|c*?)pX54_^4bdwjH%o+5{V>aYHF6E# z$_*O6+7kKrL`uui$o;GJ~(>tr+v#@#$M(S^h4y$a{$R rcR9=7q%zi`Up`x5+;z6g;7tzWQ}N{HFuv!X^7m9EX(Gqv(_;Q_7-aNf literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ua-p-amomaxu_w.elf b/examples/RISCV-64-Sail-Validation/rv64ua-p-amomaxu_w.elf new file mode 100644 index 0000000000000000000000000000000000000000..6486fa4630a916c539dd834c645614e4487f7190 GIT binary patch literal 9504 zcmeHN&1=*^6o1Kf*XqHf7HL7z&_xl!ZM2p81ulZpLy@9_JqU3-P20tGvt&kFFB%?EK1MEG8_UE#|=;r+&l+uJ_w7_{-)Y2@d=N^1x|GMfM!FK z_Jbk-XixS{yu!893TOqi0$KsBfL1^&pcT*xXa%$aS^=$qR$%=K1hCXbd!7E+ihyit z=3;9eNP+v8K+I;Y%YvxWvVM^^3nst<&L!t82=MoR{OR7=uAKly=lIW{@w7>Il~;(J zhleIWJZBno{)|h9p+Z0YB9 zQgGaXJm%u{a5vU_`@@&w!ZYYyeDm?`X2cB#h`pS@u~>ju#4eCW%egq;XciX=f`>T7 zMj6QVWkd2B&DaA$YB2{n-WSlq=lue0u+mJ?#I!?<1`I(f ze}}@`GWcGFmoxZ)!jENe*@s|279UakpBcU<@U`_{Qv3@>Yn^q4I~jaN;cf=MrtrZG zeoNu?41Nc3o9pbfp8M!8_;Z1CwOjcw1fGNT%s#ILj@=+h{|3)QbMX@AW^m|b)Ae3L zs{6;!pFUg)AoQuvyemFoK?p3Y)RXy4SY^J)g2{j~n5@*srhLzzC4QY%gBk>E(hpNH z^C|NVKxI1cg1R3f9mXrwDG+#{bp6sDgnETi@M~iptxnV`>~iSCs6SDyrDBh=O31)N z7L13%w5S3~^y)OLjG||u^pnYq`LnE4tyLM6RL!MPJmp_)8*aewhUk@%n?=H@ewfw1 z8o7pVW(FL3}ju` zO6&z7CGHo2m|bh54e_vT|0D$)rojfzC1-31@%Ml7@&4(JTLH@M(H~*wS(k3Btq`XO zk4%7M-ZbdKDUY6n5gET1abkA5biq7~9%J*6T$@*17x^AuH7~&z1ZwR&-)Fe!!0?7| z202^ADmr#zI6(1ZA}7YPzLI+;AkSHP1@L74fkPKYJz93XPfsVmVhx_$>lmK1evH>i z!SxOlF&D2#+p*p|A3m2CpF?%&O}sRSxZwhEmWwx+N+4qo$m3-zDR#Q$#ggD9gP3R3 zfNWkiI4>FObQ9wwkcZ0#+3blrNo+uJe+ac267^mKr5gX_`emfWJf`quhPOUg5LlBnMDgM-WSlv=luc&Sm|bHVmc&7116xK zzeVAN9KKWGwH$sx;YV_~>_adhkDpciA344+@YVHSQv7p9f1PcGyE%ML;a(2EuJG|3 zep}(~9DWyZhwJS2pZoX^_zQt^wfp%m1#ZDWZlBiz$8M0ce}iYDd3cF)b2wDlY`aRx z^#0~Wy1NoW6wrYAR|3Mq2v}5ar}Md}$pW8+jgT^E)LR#30zbG)f;MZ0EeKg7h%zw? zDD(F~eKz#Nb`T*Qrs~ZZ5cpo{#-!T^?K-6pv@ZCxIo+zW%TWN6!F02giG9lI5d$At zFcpQfq6(@K>SB{P0qG}MoS z2U(3^LC~Jmn{mKr5gX_gBC!kb z&;*F*OoO&hxO58E%lLzcW3$_%ZSw$njLrRWZBB6=spVxCa} zvaw@uUOd?C#l{qn2OWcKbVZ#cG9bP;gjx-WdegO28{Yr@ozhILfL1^&pcT*xXa%$a zS^=$qRzNGD70?R&-wNbpM?sXWGKXCR%m4eQ7ITo}eF1%Z-Y<}c#a@agrbA*hU=sTI zn-reU;5!sv$>8G(KbXN~AA$i{{Iuf#$nZUZudM&P;-4}4>uf39$>5h2?q=|73ZKZ} zw-nyW;CB$Wxz0}ix$}R(p9`F;-Oqm^@Ei;_5tH+UwRiy>AEsjF zQ|9f4Y9sK1mLDP=&Qgm6?>FbLk1qQ z;9M9qL={k`R~xK4jh=o#a+1GZWvoWOe73^4Yi*IiyA;N!;>k^6e9zzI?<`5uo)ni)v-!UOuhR1# literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ua-p-amominu_d.elf b/examples/RISCV-64-Sail-Validation/rv64ua-p-amominu_d.elf new file mode 100644 index 0000000000000000000000000000000000000000..20d1b6fd5617f0da8690f54940744ee4b4fa9ee1 GIT binary patch literal 9504 zcmeHN&1=*^6o1Kf*Xp53Ez*KTLl;E^w?Qiv6_7n{vrPeSqFztFSz2UzjrB(85hQnIOn;Kjo{$h>*K`MsI9zhn=aeYeky zo;3{vQZwNTs3_)Gl@DlF%F^?(3dg|2aT}Bbx5z=855nTCzpFM&eaho-i4z?@pxF>- z{fGzvI@5hquW;?O0$KsBfL1^&pcT*xXa%$aS^=$qRzNGD75IAvLRjmdgU(Q5#Xxqn z3W>DRAf@!dTbIC;uLj3)od|15DyBDDBoca-NJZsT?)z8E( z!jcJ)%$o*XIPcOi=#%j~5hvzGi!PWa&|_>KmuvHi>mc97tLi5Bf&ZRpwc z%^>4NtYX7T3>zqZOytCP)>rb-1mxMPuK=FRKeFkj{6A#ON8?DgWE)e^|q1+u(eNQxV+@=8hYk}k|M zszCbJ4bGGC7?8*72I+T2og_9OS?orwx<$R&+Nlj|e}AVmQ!Ahq&K|;{V9;J%Mkn|El6&HrnfKD%{E8Hx%yX@LLKW$>H}D z-pt_-5VyI`PW!pbf52Y|oU7f=e<|<+bmsPXEpY4xN&7c=CYpNH-+iQE2*XnnfjvujZR6Tx)7k%>LZ{D^^vESQSI zSy2U4=*?N?PoQU!^tE)xf;m>HH|h*3s^-cBp7O7@8#my0L-fkX&0^tHKg?!djakLNL+nasc7T#|mKr5gX&_adhi%%*3&kWxa`0DyEDE?Wazs{DzoeX|O;cf=MuJDNrep}(K z41O1Jo9pcKpS$=M{JFrn+Wq_&0?)xfW}nvr$8M0Me}iYDxp;|lGdNUOqg5f~^fAIt zka7T_PkrWH_6Z9@U}3G5%&&xX=6fud3n+uRTJ!ux-}A2$zs2f769P8phpCwPlzDrh z)(E_y<%dXznOglK2z;M(W76%1R*h2do98`RpKaFIrO=0If41IC#U5p~kb#FRmnkzvwjqgGetmvLbLua$gt|0f)o!PnB3jd|_(^sTZaf0tV1Jw*Jw qoaAp-8SBxnoUJhKTB9;}m%{i|Jh>^1@A;?vJtaxnm*VniHvczPkMa)y literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ua-p-amoor_d.elf b/examples/RISCV-64-Sail-Validation/rv64ua-p-amoor_d.elf new file mode 100644 index 0000000000000000000000000000000000000000..71a32159bed5ac97531348631d7ac0652078bcdb GIT binary patch literal 9504 zcmeHN&ui2`6n;s%wR$kAMOv`b;G&4&HrSPl3NE7J!GoxW-eNjU+r@UXW=2~t8tRXO z2WgF1LC~9cQ$*}Z5D)$fJ&S*UEmlwB`sPPUHdQEi@h}fEZ{9cGn|b>sd)Vx|b^6>H z(=Z@26TX3p5{}jQfOfeoJs)du1WX*aK&RlAIOy;}Sd#a5)MlB_cpUEJM3)a}4kUSh zRs;ZD*}j=qxOQ3rt$1skZmn1 zwda9!a{n5L*|K_VNP2Ah7wNEJ0&L)1a><4WfB&bS7cTbh1}M8Henu zGy&2%)1dPgJbE7bWc*RYskzdk^X4)17@J4s+MMFL$oKH7c`3diP-{QkXGM7q7*ASns`0U(2swz~Ium+R}E!4HwA3vUPi@6H*a-Kprn!Db~R`5~~5}Up6Gi z!JP9z9xWTB-xD>G#DH|68+GaywdU)l4t&`BUD8agfL1^&pcT*xXa%$aS^=$qRzNGD z70?R&{|Z>LqaZ0(YGD__`v3m9MGGw67tqG%{Q@1Z+RD+yv|Ee@oP&1$fWkWp_yL92 z3izuvjrCtq{1KzQ&ZffM0zRW~uYliF_^ASZSK(6y{669i z*V%19_sL)ImjdT%xAR{K+=8ycK5qq%-5^>22G2zE@Dk@1a2RCM%|SwFHSn%hD-pyY z4ViyEBrJ-7#X&Qh&%|{W`Yf7^D1*tMF*X(Y;VcQ8tR6KWVv}KQf-_A?d2p9foE=DTIwNpVlWD0lOB5Fd9zO8@br0EQlHS$b#`Wnif?+h2EHE z!6W5kHtC4H?R<7Of)t1P| zCsJB=KU^7ReKu-!Lw*Gpy6{@hSNH#{D>L|7-ik4=9iP4pmgVnPi@b-3f0wiTK9#W* k{rcGo5Y&_Prij>+P(1iA^ep}XwpcwC*Eb(2*;Jw6#lt+vym`O*y_vVaWDlEtH_r^7 zH4OtYGvPa^DB)O@4``Rl((|zjN5RB#6SNC%iGvOwge7@@TWyy4jK|@2PIUQz=0KA7 z10n$E$o9>=!nM;1Xa%$aS^=$qRzNGD70?Q31+)TM0j+>mVB-ozu+T<(-Tu^0fNW`6 zsXYs%o%^>y%%;_CL(*m2zet-6<6r~lk_$FO`1?Qo^5A^;9)PlYay43d(WHB;%fu+_Kntih9eox*dr_47I@ zxZaTx=Hm5aAJ%*K^SAQLSI|56p*p`6al-|&d(pZz*AA(OJs^)4trY9v9Enwd>{>J= z$HAN-AdeOevda@SlEi@YK_}|eDQeBvO&wU+_+8RWt$s-WSlq=lue0u-wei#I#e41`I+gf49Qh3ittq zR}1(Ng`X(kvJb(4B0jA6s|CI<@b&dyR{UY3wa$jZ-2#49;a&m1q43iM{EosW3-~?6 z9j>$6dhXM|;I9SF)o$g#5x4~%g?-)&9J@iX{tcdq=HVsIE#T10rW(D31k=&Q`dB4` zIHV!-uY`m}F|asjWb>JYJsFwVs+q|84A!Bpf& zjW9+!j0Lqx5O|+-{n8zVMnEZq^--VJ#_Iu_jzbs;$7}Um>{AxR418q4SR74>DxgBI zPqAPGJ&UEE$Yw0O#wxXXjX_1#Tp7Vr{?&Hk2K;V_UKzPrBAn`nS?jBjYxq{K)$rAp z$j2vAT6RBN8D@PpYIR+H1s6K-TFY1Wf54R)d@XOqnAeU^-#W|k_p3$TL&U$!S^f@{ mu^Ii^*$U&X(IbP8IgC%mlbgf%o`1?eSeB%|9G6dv`M&{n{qLdx literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ua-p-amoswap_d.elf b/examples/RISCV-64-Sail-Validation/rv64ua-p-amoswap_d.elf new file mode 100644 index 0000000000000000000000000000000000000000..2b2200cae47bc63189e4c52e7bb51bfecaa4d348 GIT binary patch literal 9504 zcmeHN&r20i6h1T0XV$_Ql~5>b@KHq2b4W$0phr-+Xd%_Y-SoVU`bghA=HAjaHQ0|u zi_oSp5^5Lil89Ud(V~CBb@T_Mq^-o)xj#ncjRiuR7Wcs1bI*6bbMJZI%v-#9=ia3& zmrcWf#7y`JDvCH(;se@^g7kbW!4Q}@9)M=S&2!M^gRm&=AE?a|pYS-`%!v*k&}@j( zepmzmEy=!#SGaas0j+>mKr5gX&@uRtR2#1!6aC~x#YS90sj7vzb#(tJO)s3E^G(uuj}-9X@l5# zSTX_PdDEZ^S6w;+T{8Y6;@DiT(*^S!dW_Apa&2C59pt-smE0I#5U90Ze4mcI4IPKK z3^JO>D%P#ouz}*oL{5ZfZIUM@AkSWX53oG{)TRqPE-g6j_g7<^Sc5C~x`^kr_wza_ zIPPE`bMaa_f%QK6`lGP&26|UNwyd@yZa6^N*YfvQn;{ml3*_ZmZW-%{pKlqQC-D-H z?lpt+mRoV{)s7JxBS4<58RV!dY9)~Y@nRe5)h23A*H3Nuy#KqUnOXs@fL1^&pcT*x zXa%$aS^=$qRzNGD75IM@$jOd^C|h9;y9jpw_fIY6AjkUx8u+|lpb0kWDVmtJiP3;7 z(8%vrcvA*HrSMV)A5{4H3@-Z+49Mc6ioc!Vdjj8E|4qfeVKmlRQ@E4CXBF;d@Vg2h z&fpIf&NBF8#BHv#(|GQSzu<2L&ed+@zY};4S~B~55IA;&B>fva6V1g-oSVU+m(A3A z38~PzfpDl8KH4J`fLfVS@T=n{jT*m_J#mrecq>a>&3# z7EFY}jHm*N^v(<`kD+Iw^i#=<`E#sTsa6;iRn5gQJmp{Q2yVddhUk@%n?=H@ewf|9 z8o7pV$vZ vf@ch6QBceNfFd`e+_DxTaF#`pYF{^^1w^`*Fcn$7 zg9q6f#X>~r{ z;6>9gATblZgNh=KmHB{nwJ1Fw%Ww)z9CtvQ;1)P&^FdgY_V?6giBEVOZsSCU4`?<- zX+IzWfc9kH#4B7ot${M zGZ$M8AZ^^g1!6XH`z(k$E$bJ_TQC6@a4xxQL4d#i<1cfU_8kN$I_G`{t1p`LPbHHf*5yF_9DDS?lDH3COdT-T^GkKDKG2$E8Kb{rY@#9cysqUgzmKr5gX&-)>&7$lfiE&+|A&(6+V!`?<>5X z!5<=SbDf>mbLanpzZN)GyOsY&;5lf|?DJmW*bS2OZ}3bs7cX&c28UiYQ|~3j?H?PS zs+Ix>ed;ssx=&aT0t+kkWPT&8GT&ptWI!2AR%&C@zUSX0ew|f=8U$?84^uJoDf5m) zWhU@~x*sAP#w*on5cmn{`lLGv^$Mln*Ty_rov2mVwa|xAf1+AT#U5pqkb#FR7!QLP zQ3aIftr=DsMbAR%CzBcTZ?aOgR%K99HJ3*5lz+ATxB# qa+2SrGIpZhJX>Mh)q7;{F@^D|cyd!1-}6uT$BL44BE{v?Z2oWCdhqc8 literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ua-p-amoxor_d.elf b/examples/RISCV-64-Sail-Validation/rv64ua-p-amoxor_d.elf new file mode 100644 index 0000000000000000000000000000000000000000..cb45e313c8dfa555fe82d0b19b3736b7bdec994a GIT binary patch literal 9504 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 Z_>iC1-T3#?oz~CDdPteZ&XVlWo48CFR zG&^U`@1A?+&VSBkv(vlx-MTIH3S*Gj6!;a$OWI7gcepjxyVh>gVGSs_p988BtJ+PP z+m8Dr9XU2t>3SKPiL>*}v72;zhg*R9k=^W4$k1;FZ3n2~xlU^GCH>tA+!OPNX=Ddl;z z=qqd8wl0eGV|)N#dceX51k`rd&f`-x@D5TPZ zZuycL$QqC}AZtL@fUE&o1F{BW4agdhH6Uw1*1-Rz1|Hy1fee)jNCl(ri4F59}%Vmk1pSIgP%EGxBG190tX`Kj;IY3uOe1;e$fI(%uQcIe9W>E7|@ZS~R${-DZF+1-$30k|U7=tB2M%?!hr*-+mn5*b3DQ9>RXp78?YfKWh8Q z-dqi=zO6Y{cQNvdz!#4`w!iU((^l>T`V*LcblKHSOX`juv-3}Y#ilU7%g#B>&v0%6 z<7Y;f*m0jZYzH!p@s!JcbQsQ$V1C9=jusAiAlZB9cKX1!qwfvn;(P@bu=^KexLS9P zxXyUrsIO)b-UZL5vV0HfTgmMEP>uRBu8sN*>UsUn-+*)dc#a9idq(nDUEU>|-#MG% zQ;Zjlc-6YRNt=)LXE-Q)`N%@#82@`eYKS>Bh3Ahf#2gsge%57v1^X{>=S|#zgL+q& zoo9D8e?Z}=kP1iz9ufs|oK*s{>jGp)or9|gWPkTh z)Ls|B1Gm!IAUePY6Sy(ha&LVBhu~uhhkFEGL0lJj4e@mXch?zUAo3=P$FJf^=a6<` z;&TPwO#I8z+3_*ri~X~CC-Id6-%EU*z~3R>B=Ez;I|Y7>c)!3c;^zf^hWN0+KOlZx z-~+^e5;*=012+bqlG)dLf%qbUUnag%;GYv;C-7^;8wCC}@n(VFApW+%ZxZhj_%Fl< z1^x%|VSy`l;o|j92z);A-vpjd{86D!mJ;_1yp*^u@CxE>0uK>CB=EJw&kKAb@d<&y zh+MPZr~2&sxa~eX>ToAn(vgaGZTE@CM~F^-J+uA?#Rt$j=M^}tGTS>>asKivty^B& zUKxi()QFnlJyCAP6JRDHotfjkiI^D;oAK7TVM1%9qq!{_j_%{pPBRwofVkNjP0aAk zs9}af&>S%%uqzU40|!*OrrI^DUGuDKYFx9%HP5*w7$6%Y8zM_7f|MgjNrIFmNNIwU zCq#Kdl&6aPs*F#0t7wE(l)sAdS5f|I>Q_zuszcBjF${=yG>45?OGm_fGZBTI(Uw@p z3_om`k%S3hjDlT>c)KGZR2uu+&B#u)X2P|tnIkj0&#a7f#7w9p!Drt4|8l$xJK0s_ ztP$fTNIHhrnaQpvSQyB{r>_5Cy3Gj literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ud-p-fadd.elf b/examples/RISCV-64-Sail-Validation/rv64ud-p-fadd.elf new file mode 100644 index 0000000000000000000000000000000000000000..eaa35c67e6a2a3f807b84f4b61e7116cddd3c6a1 GIT binary patch literal 14368 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 literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ud-p-fcvt.elf b/examples/RISCV-64-Sail-Validation/rv64ud-p-fcvt.elf new file mode 100644 index 0000000000000000000000000000000000000000..995bc818df1dfa1e71373ad4f1f1bb8fdd6d54e5 GIT binary patch literal 14240 zcmeI3U1%It6vxlq-Pyz-?&QmaSkkd2wTNscar333V5Y;ec>JI3OGl4hRQ?1Hu8}fN(%K za8C{tpb|3&m6VgPL2s)?ox~dGaW`&&9;rop5@2^G5_j}i0_GtBE~~$ifCB#h?_52f z?l}l>Sb64lVfW*jIiT(7vIG|*0M1H;nQJer<}~#B`IlbqM0RWDTI5NLm`9%Q$5x0{ zkXP}csSbWYKx2Qpbvh*(I=gQ%{iKAe*iAT01{0qtGB)1prhYC0$jO&J2l!y+J=t74 zq?(5n_1eYRo45vbYyiMiB)2}*oy2=~q}(-|py2%!=s~7an!3I^Dq&P04br!!EJIp? z9lfL4=P;F+^6x&gU29_GYOljIVm5zk)ah>2>92MJ9*G8QXbD-Mcu$f>zKiBIN z2O4$ysx4=fUdz4qFS>bFEP)#B^2L9QH}Do~tdY z1n;P2Xc>~&>S&p5otCw&x7lR6%yw>cfxW2v_ci2X7{~uZuoTp4d%fn?@ zJ+cW~3?{es+BKZFU7y!qjp!e4MlRrM;grkYN57CD&EkKgPb0_h9unKR)Q_+6xjQxI z;?q%wRY32mGW~$+?F-#z;GA#Az1i;VkMLeGWvJZKn?u0D0pWmfKsX>A5Do|jgag6> z;ec>JI3OGl4hRQ?1Hu8}fN(%KARG`52nU1%!U5rcaNz&vfJRHMP{h1atJSVQ+sM7E zN^`#ZoS*-7g>){sdL=Ygxe~LnZ0+`04%|15`X>==elUus5AZy|J~|#YP?~l8Hv)*k zUX8EO?g$A3q>%JDnI$2i}9A%2|WZxMf#f?Sbs3^ybNmaW^L0*mI(E>!A6_Ni=IZF4j;DLL_m_$V)46qrDOq0hG|%tHw@h>l)x%wi^27oQqD3mR$-xFTCkAK&n+4mV_7$fR<4kTg0*0j zLb+v_R%RIdkeSO`SvZx=E&9Ua6nx!dQofW5Nh7{A5|T!JX*48_`O;WO8uz8~kTl^- z6Cr6x^|c{2EDn)46c*`uxX&UpJPgIGX@ZfT%b2;{7G#iu zQ>DU^XBs5UHoYB=$}7gZ=7mNNl#(H#%BYU2x~( zPm8;nP4g?XFbRo6_-G}vm*RaG>uV>?4O+@i7Tp_!8ka&lj_o)9GdfR4W$G39`TqbL CK)E^q literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ud-p-fcvt_w.elf b/examples/RISCV-64-Sail-Validation/rv64ud-p-fcvt_w.elf new file mode 100644 index 0000000000000000000000000000000000000000..4db28d5f3bf7daf8c7a2aa1e103b5de13d5b471f GIT binary patch literal 17408 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 literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ud-p-fdiv.elf b/examples/RISCV-64-Sail-Validation/rv64ud-p-fdiv.elf new file mode 100644 index 0000000000000000000000000000000000000000..d62c776cd8c5f207b2681ff99492af178e580c9e GIT binary patch literal 14168 zcmeHOU1%It6h1SX*|bYwr%jr~Sn9;mihbBjbn`?BPJzRA6i zd+zzpcka)(hd{!fiNk#ls)_>sP~j>FuRt-2PGp?z;+D=9^nyy}dWbTvMnRoUY!rgF zF2X(E`aF6@l!gpCk)cDO#%^OCfN!h&i-0sz0jYpgKq?>=kP1izqyka_sen{KDj*e* z3f!s!4ixL$4kPKs3xHy)5idRiC`#=-Aaym;5{E)#JpK==i^C|yfpXC!ad61r|K5+Y z{VjI@>^2UqIE!zsx_hi8q-*es3gAtuiaYbL=^lkv?tjXBPhDJfXVm+MCBC|!$0h~W zAbgYjSf)q*K_Fr`=st~_4vjmmD`-F?w^)pOiViM$B;gduS=Z3ZDiEIj@rMAfPoCD@ znLAB)w_#p9H*}5M!R*-s;2Ij;U+jB7IdglG-q{6%oM%7_;WTQ8uhg3wykJg4eW#{O zbx$i_Kdra*Pb)uN-9hdU)dB4+H>1}|&7NY49PN)ybGDb8&`hbxQ!J5Fy1a1?0BSAk zXs)Dt%2AOseQ9kDJYI9RUF8P!MybJ52L1Q^zHtsYr>Pu6r%N%SxxzKje%mBRL2czI zI$Mf*O3r`JuN&tO-Sl!DI#*IXrQpBkmrZk;%Ye?5h~_5y+)+URZ+080y>0CC57vUK zL-AJYUh<>@QUR%eR6r^q6_5%@1*8H}0jYpgKq?>=kP1izqyka_sen{KDj*e*3P=T{ z0#X5~!2eBwrEk9I|GRyw_1*l^sn~*M`R}_tb^gY;&;NOd`A59s2pxT1CH~&sw;lXw z`O1Qy&+`^JpEy45TOO~@&kZ=U%TKIu{)^|WY9zRNOyG+PLA1JFo?z=iTkxup>v-PL7dL?IlDknV>{zd|4wAsM8fp@vVs z#sGD&v>KqXC2wm`pbu*KyI52qIkoscfmr670|MWo)b5{R_}cqFCHNnZ z?^&>=m~sL?5ZdPi!y{lAwfrf;&xQCe3BDEL&k6p!A^w|!KN#Y_FZdTi{CUAIg!rEb zenaS8p9%ikA^ul_Z-w|51iu*K|19`8#J?o?KZN*y34SreUm>_o>#Dt0&zQ14-o|h; zK`p=iCj7k&C*3@L{|&nbfXU8Xr_MX@c&-DXM{)8velp=e-ga%Add5cB$pg-(bN>27 zK7;KPcE%hR!&o{ye9TVSCy|}Q87B)49<%cSAKNZY-2>dDhSN9=Bk9aB4%{mY#~CNd zp=1E+;!sxr>gG^)0O}N2XAtb+yq*BBmqWcA%B5Ww?CfyL&5UN#_;}uiA$v5F4frV+ zr}G$6gaspcXPmto67I9(I6Xux&T~8Fudsa*CoXNMzWUk5g>zx)B9W)pi;#w7i zhDr6U9i1F9#l>jv*-rAaMKD{1-AZib?gFF6Ome3qbbiQXZD;G{r$ir|*ru{`IR9TK Cz_Nw_ literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ud-p-fmadd.elf b/examples/RISCV-64-Sail-Validation/rv64ud-p-fmadd.elf new file mode 100644 index 0000000000000000000000000000000000000000..e1b977b384b288e88f8d0540fe0f676b7c244d13 GIT binary patch literal 14568 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 B5vTwF literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ud-p-move.elf b/examples/RISCV-64-Sail-Validation/rv64ud-p-move.elf new file mode 100755 index 0000000000000000000000000000000000000000..2f32db96d26a5cb908fa51274b4dbe2c407f9758 GIT binary patch literal 15032 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 Kj%UfVZ2sSg%QdwC literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ud-p-structural.elf b/examples/RISCV-64-Sail-Validation/rv64ud-p-structural.elf new file mode 100755 index 0000000000000000000000000000000000000000..0331e2bf53aecf34967d2662d03ad95fbb6e9efa GIT binary patch literal 9200 zcmeHN%}x_h6h1R;i5ilb(ilicbb#Q(MVSQ&L`)b=G%Q#U>w;ZVhJiMLPBZs{xG;|0 zYD{q!E==?lh#R)VSLh4)^8y9Ym9d`tGtDrRh0$)zy~*6~p6{M}&Y5qfi?-+4{gns0 zra?S(_y*Dn8RxJGM`KbTn;n=39p@p)ao-#xO*ZinCb5wfR*bP9%Q3{ZEH>dVAxz>j zHvnRc&q-Q=Qa~x76i^B%1(X6x0i}RaKq;UUPzopolmdUCfDgx6GGom~MhNb;ZYDBX z;0`f71Xu57MhyrHhVjeI8n6WhFkknP0X}~Jk3JuiMsEU4S&KjY&igKzc1~O~2XAzM zsHtnD_0T4(FedDe+>Z24m$dW+M6~rgVy`KEE%dkXa_k6yAdq`MSe!!6gu?ajn!A?6 zDmq4_nLzM9(I>=QXYMN<(9b;j0Pwc?+9a(>n@m~u*LUk@Sc5$`4M40Mi!bBe!<-|t ztY!k19Sxf>u5}g*`K8Pego`B|PTLxEN}6`s4x!^is1-0@`YHtzBkkv=Rnqk@?WXq0 zeYwi(b3+ZHgFI@K=XJWnOMUs0hIs(w2qnegw&a}@KPUOS zDPHs$XprXD(BEWrTIb_$Uc&Ejp54WH|EHJuHzn`H{SWLU4jV6?H^svY-D%9Y?)?1r zN_DsBL*NmQmiIiD`T@|O(umiOgBtb9)UW!4LbX!g*!IfazUwt;&98$`t6q?>z4}I( z)VAssx*K?~?rqiT3A;>aC7@77FW3zH9Uc>kXH%)B696Ym8dljKG?V5i!Xvfdv6sV%85`#t0F3>DQ$gH<2Qdc-J9kQMeu0`cD|Y4 z{Jw9#`R(k&EjMSzk3JJ41i})7TOfNr!)#VzSsN0T)i#Vk4C{JGa&Cfw2CI1SqxNuI z^gm20e;l3$atX*{WwQgS^=$qRzNGD70?Q31+)TM0j+>mKr5gX&FfAmsyX+=vIMGSDQmt3YEL@s1Sut*O*Mv@Qj+kOIb~&!wP%zyE_9=O;V% z0_-!#{wl1$x8d%$Z&D)xZ^i(E#TaqR$1QgPIz|6e-Vb8y8*VxF6k6=Zo)lw?l4~O0 z!ppV-{6HYb{$z1l69%;IxkKoQ1ZJ_G3WxzNt`s>w&UKr<9s}eVAAJb$_TmM@EkA6z z`%LSHOVhV82WxmgfNLgLd>Qu;&e<}^a(2PQ`Aq0QPHSTPk9so!=ge`ae`pEL9;m>z z7Y&$PBH!KGgE`-lMCAIz<@YS4=nBOt|aJwNX1(^GAt?^K!s;)mY$g-=vB zg7*jT{s8T^`2M0kf#7^I?(t^6&!T(IHDK+&9x_eV3TOqi0$KsBfL1^&pcT*xXa%$a zS^=$qRzNGD70?Q31+)TM0j+>mKr5gX&;bxb<@2kriN3vj z<$CIfy>RvMem2h9_=kPGLjKyA|eVVFa@lXXg;=;O2(PZRP-hqnJ!|tViN?3jUbHZ3Q2e z_|pph>^Arbi8qkic{3cpH~$wTzb#(NFNX1zI14h4Vb=1`N`6t{zbg5r!oMi_?<@Rw zCErr`mnHuzg}*BKw!;5d@|*Dg9lR;4&$x}lgu?%V;{p} z#&JB&qdYGb1~9gIj(WZMVlSnW$4A}#v2+1Sj_Y`tmmTUAO5l~U#jw3l%6U%4E6f#K z59YG@nNv>2IZd6Smn-C<;LSOuNZ)f@FVhdgWM;Bn7EWe!rvxw{jlel)P(XtbXh=Xq z5$K?R4o0A10S!l>5dn=vpiu#hMxZ`RV0~5;?2}-h0E=1I1t&j~adWfztoKsMfoW$p zmyh%_u9q!&kU{^A&uxh@u%!*n0c?juul#d}VUp|S5ac`J=|jeoe$*#^Y2 z!t1-0OluQhzWBDkr>sc-vP>+23=^*g$?TN&0koUBON<$7P;{PW6GV#Ag=QSv%Kw}^ MFDJunMo|6#1>bPeiU0rr literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64uf-p-fclass.elf b/examples/RISCV-64-Sail-Validation/rv64uf-p-fclass.elf new file mode 100644 index 0000000000000000000000000000000000000000..eae8b27881475766a204c5a7f302e91bb5e5cde9 GIT binary patch literal 9568 zcmeI2y>A>v7{=e(yERTC*fqytD;FiJm{1^e-Xtat1Su;7$VCc+Q>43`#~b@Ze0%In zAdwIhDQgY^WsGS?N*7nLkoS>JY4uh1e- ztT7=%fvB+fkd<{&b^r=3#%XNDI$#~J4p;}Q1J(iSfOWt+U>&dySO=^F)`6#RAc5^F zn+xW1F9W)NRLQ+Q&t-gEjC#4M3zk7Rm`Ut>maQ0y` z{AR?CMfa%h!Wa0PKi_l+>%SkeC74nDUt~Xbh9lN@&Y)u7c|*lEb#8$9Azo3K;|BsA z`&-OYbA71Q9}s%M#k&}KIq`wvb7D@0Yu%@}9KbyPryl{n-2BvM{i7k94Z=UaUb&C= z5H1`8V1X;<*Ym!GYd$|O?wLUlHr(NnTKx)HcHQA}-QCHb^C2ez&_e?cW7FfY0AnH0 z!-HoVuJ4Oj&3!Q18;jnMNW>3dT;BIyEW_9mP=9csh96G$IFOuN1p2~Y--4S#V{ATf za?%6(;@}yKoh^;2<^=cc;J`(Gqr@k3(iiJj1aG+Y@;ZJ_z7^|ZY`Z)r$jO#ipU^|0 z^q6J@^4n9m&r{OtvhU1??WcInY^rs@I$#~J4p;}Q1J(iSfOWt+U>&dy{0|(cs1pU5 z`KT2vSe;pL(0;+ItWadsuK;Rtca{@Zyu;x{RzoL0$@CD7^G`KovK)~b|bp9k6 zU$>?C41Rx*OO{*saZf##9HQ_U|L{F>(14W4QKnZa*rzGd)Rn%^<_=bG;r{432L z8vHxWUp1chd*r^@$6(xtpP#_*NG^7HJpb1xp z{D+H6%>>ez#k}=VOnH(5Pusns{c+miaf>JG3FENd?yg>rTk%yI_jo7iLc-VMwAAM@ zJ=1(cq)-2~YTyK7x8zwJHCZM_ zpZD24*P~((X)WYsY>4rd0u=idD6o6JN5>nWqvq=uy+qjBVQ0mdMKbvv{PHqFH>uS5yd zm`cSx870TB(Z+`?USY{XpvF4olTpqSjH!$R#sTAialklW954o2&=^tkmCbcmstiPBsm%B>=+t1oIXiv%P)LANM~I{V-8)cngX9F=9V)UpzKX ztcARdKLtC)KM>H^?>tXeItyJr*O@b(##PiaAt%+;6277b>z_ZdkKjnQ0uh}`w*X)6X*R!AxnXdHi-`cG-Ja6rW_B)@0 z8=LSPoko+%Ae2>ESMw>DJ z=8)}^{N*NIT~98uFuxVDgOdNLiC5Rt8|5&6E@V~7|JcN<>&ZnMF#m>-1(Lti#H;J+ zjruWvf5;Xjf3YQ>i@Gs?cgRjl{`(d@L;pK5e`m-RCI4L$zp{SjzoI zzBgKn`PYW*yyU-b$>*XD%-<2R3zGk;iC^)bufGlRw}q@O`KTqIixQYWf$syO=ktq} zd~XDpADlaE@t!yVgYe{fd{@_t_eFhoyeur;(uakCjRVF3qwP|79q0W^B%XFyKA*5kPxA8%fg*_v zDY(*5HQrt?1O|IyHJ>9rrRiHpFKBvv41>WgP2WSju8))6fkulaRYeh-*Z-u@8GM^u z%~weu)AAglJXvcsf1LOkjemi7OXFW9{&kIilXzR>-zEMtjb9|bpz$9O|A)qZO8h>J z|D5=H@c&Chld3O8Ou|8p|3T;s#x?#j@l}n#PW%at|BLuQg!nxg|0wZG8vg|Ga~eNI{CSP{h<``pj}m`D<4+J@ z*Z3Dv&q5OF8h`30`g=kb$pUdJs5)~K{;bgPG?YBQM7)hLd!x^dt^VQaR>yG;*bhE+ zV5kB$*K_^iGp^%TYT(yORoOmLEBkKIugp|DA7)CklZV`*JLkAnzg(Gxia+Dll)mqJ zesLSbp*UIcOE6U`ABu(T6k=U4!?851NF%W{qDVVpX@??>#?q)Fjm6TKBJGT∨vV zV=Zs1VxGjjD$+jk+f9S0w2i#Fk34N8ukIvITglU2swK|@cXqPqm8WM*{?j!V zCfw=rtkN%feyQd|5h<9eRSt_A0Yl!ihyBt7M!y!v8QJpPIe(};TlQgyZrhN!5$bdF zZ`-%yME+EYGjnm0KmM? z-~Gsj!Kn{=t;4y2U04Md1RI@kA;G`@vzynJrVaxf@n8Kn z+5URSX2QFX=fG$9H-ENaTdeR|L?sq6gAJP(!}*oyWKyvz!6 z<`2be4M!Mn@MLC%Idi9|bFip$Xs|D{7IWryQK!UA55_a=-JJQos54X4d3rFGS>2rZ zt*BFCYJ+NKr8#q}s54j8d1_#1RzGKM7IjL@fdNF*f%H8}Ey%7-;Ip5Q{+FKx^I-F# zHXp&{069PokOSlZIY17O1LOcXKn{=t^#DnX9PxCL}?-1mr?z*{d)VU<}3RL}3 z{;K8|4gMp|j~o1_n&$@prRJY7_-{1-xxru8yl3z?G=Ib3f7JW|ga1kMTL%A&=4%H3 ztLCeQZ?`o+ZSeOs9~%5WsC!TW-{A52?W)(LE_U6h|A+VBpOZSCb}{yIAm`m>pU?93 z?rapjc4Z;H_)a~6Ud&?NyckD3=>hMxy7~2`UYo~Fo~$K|!&5^$EsZo;Vlr&e8PAKU_Nt##Ed`VhR(n3i( zsic!i>b4kzxU+)Meon2Yyt!0e7r{Y?E z#pBDo-tM$H)U`)-`K`s1dj#zntRZ%RJcFd_r84MqM?2@0)IITX9BD@}6XWrXpjy5^ ze3h#Ai@t{;EH33$9s7~-`Ti9f3!5+dqSMRT5yV*BeGfEWj}P?193-akGp@;+j*ny9 jS-aLmSUj$h7sUjnW~3nA&%2F(U!M~z9T$^T%<=yNABtHB literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64uf-p-fcvt_w.elf b/examples/RISCV-64-Sail-Validation/rv64uf-p-fcvt_w.elf new file mode 100644 index 0000000000000000000000000000000000000000..2994eb4e2958db3916e34a5b7435d2664c99291a GIT binary patch literal 16440 zcmeI3e{39A5yxlm&UV^D?tE4h(?EJn+F}LCxnI6GAtI-UM6Q&!CJmAmLC((l9J?gG z<8~oN{E<}(a)het+C{Bt($p2IpsETc{79jo9)zexrOKgjP*e~p0nw^LI7*9xfS7sj z&9mQ)brwQ}zjh_>+xgDt&CJfe-L<3av0Zz1hb#;97J{olmM65l*x@$y5jBc^9{M4K z`wnQAY?}~cVkbAx9Dlk>S$fo*$k8rb39-X1242$`mll8?m*SHn7=jK29SAxQbRg(J z(1D->K?i~k1RV%E5Og5uK+u8zv;!rmMV!rvtRMBjzHuS!N2_4Bi*XL@&_Z}^6uhoz z^tv61!Xb!)VC{WTDB<7#{_79jyY?1T!p*E~yKI&UB zaPTCN@i5oh_JbinE_U_|z{%qe$DHbhq_Z)RynOoL+gL+#%k2P8qD{o7xH~atJS%E; zAc6T3uojuFwq1YiNVLIpVi$DW`bD_^j`MKu8mL`egZbNIVBg%R*fZxVzLnJcUt043 zcDzxxtLMwUmDl`Rt$7*$FvdUZTZ5W^b45PhxDVss=Uc;?|8r{|>$$lxhVjRItE~Ay zwdS#&cw-dfkNTFU`OB?&urU5G#vk^rs^(u`k&ibHVEhBVRnz?Mm-8{|zl^^h-`&7W<}%k{Y)< z`|k8Cz{Po}om~yy$p^15;B^eyGxZOU|J&2E-l89$5h44r`a0#SeM`+v)K0FRU+_;~ z5BqZdoS6SUn*U8T-(ak|@UJERv(vNr#rP_JK8*e~K?i~k1RV%E5Om;O>%c2Nf8YfjYymd_ugM-88(Xvm zhxQK5tI=Du#sBHYcun?!disLFduZRIZA^Czzb2?@Ta8Qkh5at)2Qxn!Xa3jc|NlNe zaSd_9zIqGzb4*%GJJiKCk3Kn)tt`F|t1m&k<$7r8dkw=GhOqdaqlp)5A_7+^-xAy@ z4=vb(MJ}lT>q(C=eG}<e~9#tGCf236w~{q9)?Toy6iwbCf@rSn)`Ma>HIo=QtI-i^z=O;#?cmW zCZryMy#79vCM9u<;a8}*^GH&|X7@;Wvu%I+o_%+^AMY(erRWsh!e@)NTdIIt87b@I zqm>D_Sa3_@CC7#Fk;&1+#X@n)E|%Si(j=7J@nXfW-J;_b(x8UI=!iQ4V5|DRDQif5O6oJDoRV^ev_(l<45?p9{f4wvNm~smMb)L!rbwlwGNwqyrOfJ5R9?!g zFGU5W%nDOfV#=&BMMb8}DpOQu%B(Z3yJ*&#raIGRooT8wZPuBlI@4yIX{s}A)|sX{ z(`KC+%APT^XY>U$vu7xK#>}3f>=`qAhO%eO>>0|QY06Gr%9vfsVoA85)D_KA)-08j z)vJc;?jwI6`TNM9BY%$c9C11A*GrAc%26e`txz6u99cnO6pE9h1!v;W6*ZJHLcjO?BZbgmb`p7L#xxEvU6E5`9jn*q~ou)hX zzcSY0Eb$a+Uz+X7L;6m9@q2Uf=V{c#9e5z-1ZbNo?|YuMWkY%32h}T!tuLS`BsjZeDy_FaBmB6S|cfZoqM|cGAR9-=>TTbBcWC U)`^b** z_dECJo3jhM?427uaojWvh?@zwKt;a59AU71S(IK_2Zq5!+XmT)n-QQTOw|0Ozi!GX z_AyVakrhL>FxV{clipYJ#Xio9IAllxQh*d71xNu>fD|AFNC8rS6d(mi0aDtNUj=5arFwGUcja>buyhWlAP0iW&g7tm-~WT}FP`ps5MaMO z@^@|Zy*2NEbCX#acoV<#2lJ-kEuJcPW6&$(Pop?6SJ%8n^KtYTn@8l>yyDu(FW}25 z1o#7i8v9es)0MHHYtJ2njc0HdtGU3iz{8Uw$H%p9v)4^Pp7rrZ0B_GOH+++_<#|_mH)K?QV9n#jrat3Mwb_+m1QCO^aO)t-x?pPWbEgIRI>5vxB`8b_B+l z%31hja}JER?5(@m&Mt-Rf$>~?o}aeQ!FBqYS@u?#4UBqxo*#F}F__g%vn!z)7=E0y zvV9Kfc7GGt8zHd0h3FYF-+FZ?r8Xs!jEeB z(|5tg6~4=8UAGkBoA>{`;?Ls$9HOo=b%h_*<~bkXDX{ET{sqOaYy4Lg-`4n-75@W` z|E}T}H2#N*|Bc4Ks`!q^|3vXSv~zu?_+uLX3&nRd{@02>sqt47|22*OGvXGcz}NV9 z?t*8qfUGU*up`1Z&(j&i$(?0xomXmAsPSpHk%+nL@zOz%t~6QZWjI@|oRh$y zauSa?MF|xX&>;yONf#?x<8h`jw{;-fQg z^V|9E=QsPC@9rif+`KS$?2!m#5VQ!~02(<$Gen1NcF2#SH(&%J*f&9=$Hs)HiOy?I zIIczgQ4j-8T%%E((nW_&11B8IG+z*dJdaVGazHtt98eA@2b2TK0p);lKslfsP!1>u zlmmC6?kML+7$<0Q>aOzw+zvZdm(`>s*V$8xa6^F~Y3U6A5b^y8ZE|-q?+-Z&;Xhw++iDN(ZpI$lqQE@awcV}CU1F?d-YgQk0y z;LL#vTzXd1jxVwAZ|uez@ShgEquR&MRr*|(pq$w6^>Z}fJyo5*Sulmp5E<$!WPIiMU+4k!nd1IhvA zfO0@Npd3&RCAI}y!Pc6uZ~W?w0soJL2ads5kJN! zKDWuER>Q9$XN35NYWXr=V~Ynvo*$(7%NHeHnjdifom4u~alYT_fAKgJeLHaIMd)>6B-(LSS#6KUc zd!;bv`jnwoXPEc5$s~75FDQ>W^FTV=V$Yl4YQft)SQ_% z7r0rlv-uq4?OC%J8r!C2rw@W3(o-2b1Jjx8oG%Pg@O6(#`BEw*9rC3^A!*2$hCi%AlbVUgC6JQx;f5y?ScEMzPT%-mGk%Fg66_Q|3N zljck|7aFH6J5#hFjTB55^YfmQ&~Kfdw=xx}*+pbG#k(+W)=ruTt0{l*qPRe)NkeGG RbKB)7XZkmBQt9bE5 zo8p52k&SpPM++kwtiqy$Ct9PG_aL&7Ux=z&DWDWk3Md7X0!jg;fKosypcGIFC?iIE z$MzA|K)#7Tmg(ak2x#ng7N;$(L)+5pn!PoRvzX2Jnhp*w6geK|x@NzS0OaZKy#w&_ zzC*e*b&u(+FwF0d4PV1Km;Gy7#)MlVMLzYPVtu*; z(>_|qxosw&$sc2VmIPUQs-E?=ZP9vui1q0VR@+DFt9`8+t><#APfyTmzf$k@wdrU* zm*)AjO1iZNEA2z|mA-a9TF-Z}K3#!fzf?DTZ6;dJH?cl?(1ZKa?Q65qdM?KLbOc?v zKV5k4wD26%FU0zE2OYRS9e5VWXY$KfpCv&%?oT_O1M(UABF0CvI|Ci}N5^wOKIzY5 ze8BDr7UTXbM%|+IoSWw(pX>Hu5$?|-)Gb=i*;t>hpau7*1$9f%=jZf1ANd^UK??UL zfx3}T`qNmSjsS3f!0tBr=il};@DH})9n{M20r5_7beO)KJ5X_z0!jg;fKosypcGIF zC);opGY1YRwjbHG$=HeSx6q60IJnScm$J+lE zpXI_>LVWL(2HwP6e2@FH7%V=fXVzmaD&9?OgwYT;H^ann-cIt@4^8n2$1gxc?->NI zBqZ5;2Ty=_gcMw9h!|^!&mT0{)I5La;Y1Bm626*nOTq^TUoYVsZ-H+md?5Ao^?|8;!jHSZo<>+Y_uwQW29z{nmm zTY*~HDZ9lzW!tUPz^#?4QG2{L>XwUcWu)S`Fj5-ZzN=g;@3qTSceFAF6?ddu6Z&r1 zaf^Krn&S47TY?>>(On^sCllhFQwX7g0Idt5bpq5MLj3|X5JCe2l%u@4J`tp(xx5Hc z+MJj-M~QP{<{YKYiMex>JSS%FGs7A6nL?tz9Dz9j%o8&&GV{dDH!*2Nd2vPgNJd&w zwd6QZ9@}1YMt6>t+^1`07%uM|9TWOR$1T-dC?X4X)GE9AUP9J+X17}!M(fr>I})|r z@?JMPIyUM;mUceN_fou4{!{xd^kS#FWzO5v5Q(f|Me literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64uf-p-ldst.elf b/examples/RISCV-64-Sail-Validation/rv64uf-p-ldst.elf new file mode 100755 index 0000000000000000000000000000000000000000..d08002364d89d84363250331f5b335454db15e83 GIT binary patch literal 13496 zcmeI3O=#3W6vtn(-C6}rY84CC8Wb&f*aj_BRB#n49u)jKh?gZz({`cVESaevml`TX zPo+ACf`!$i_yHnF!Gjj@eb8^1Hv}LSaO>T7y<)itb5J?AHV;L_czaO*$%MNI{eFDyi;Yn@?Tst z3o|-^n9wygea2>|pgnHCjM_q9tg>nSAbM=;2jad76>DL|n3a{| zt8tIwoEv-Oni*L34EBr3$%X58`=IOoX2?9vYO@>Y5g-CY zfCvx)B0vNne1Q=1_`xfjUwHoL-ScNluRm^k^kDs)-nPF1%ETuH!gNdqPY2-t^;gj| z^8fw~x;zKa1YfG@FLDFO3$bCUZo#O>Bs+|pI3T|);Mn=(pRp3 zK*jS^d{OE7lwMZ)jg&ryx(OMutj2k-DLu_iM7pHc7=K&Er^mSy>3C`*wJ)~PSL|0e zA1!yg?#aF*r-v@&daLP&jQc&bxf&0Tg<1p-$21dMsciHvIyy%y} z=fhr5*XADMg}uNB91ep{aRee^ACw)&z$*uux!Xro*TKLXjW7%7iw8GLFVFHy231# z|5FB_$+JBMUM;eL)*d@pi@vsYrAgPW&I#SC(_~c*S5xKty;}af%I~Q~#+7vbZ;xOC Ak^lez literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64uf-p-move.elf b/examples/RISCV-64-Sail-Validation/rv64uf-p-move.elf new file mode 100755 index 0000000000000000000000000000000000000000..5a16f6319b87bd848e63414c0b0a54ff67619836 GIT binary patch literal 9856 zcmeI2PiP!f9LIk%`^QGGJIOXQlG;v9x5XAV)7`CGRB(`1dMFZ1138GB&1AY+Y<8D@ zQ%z3}!Qd@yJN`LDYER-xiU)I(ASj+nK-N={ir`VUq;jEk&P;ydMF9gq%42c!ei0qKBrKsq2DkPbYC z19jMrvuVBHrChL{?8dxQ3#=s9yI`r^*x?ko=~U`3E1rT1q=4sIS5i>NzyH0TZ_XY* z1~8?+{Aa!MX_sZphnALrk5vF~O;uRyb%V{oL@@rwAA4%2%UbG-s5n+%2x4oLt7E=_ z|4hTf7X%dhgV#wXG)RyCu2}O4?4pzM6b%^OC+4`g)+1{}19L{23SYh&#?@~4w{Omm|z{k@!WCBpW*RSl%MdF1s*@eu8&cEgU2&L959ZaA8Kc| z<_cq*>+6*?z7YArO>}0JWM|gZ_1OeG*m@IV8ygi*xdYbG_VIphr#mF~R*;LI-9-D? zR%Qe?*XIh}hu?ztul2Wi{mH>O`>nIX`+vIMQ>6b^uYc;vRIvVdKQ~ghpG)^TqhSB( z!Cv;OzrgFK2IuUzPD8=|pX&D%seh-}KlSv0*B|NUM(Xx+>0Ud$|0f1}8Csv_fQt2F zgL8(iLp^CK_ODn+4F8$1Tm`(Fqxf8o`p-u6Ibj-XKgQ33OqC8u2c!ei0qKBrKsq2D zkPb)(qyzuSfmpDkz!fLQa2G-E|NSY*_XWh^VOPu@^??GHf%XYd!cpS5&A=t(%W2}K zz>CCR5_quBKmn1@Q~m*EZ~YSS?_+!U67ds4{#(Qg0&fz(An+T+uL#^Fz9jJXi8}({ zApV}fKO%lt;J1n27x-tyHGJRVU()Fd;ui$|74e3^zb5{Pz`rBDBk+5~rERL?Mk&48JCz-ZaPrHEV$aNulTnMS$1Q^DKDZr z%|MsKE5}}SvejDEfh?Irmj5rA#M%5)Pxh<0{w3{)>g{`?xJeqyNxb0mV<8AXcRc{T z{ZAA(Nkidt@mo4@T+#!yK!xKtf?>*!+7Z Nf=SuPTz)Ce{~JNB|Fr-B literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64uf-p-recoding.elf b/examples/RISCV-64-Sail-Validation/rv64uf-p-recoding.elf new file mode 100755 index 0000000000000000000000000000000000000000..b8f54ed82cac913b2b0932ea3d729f71ea0a9159 GIT binary patch literal 13632 zcmeI3(Q6b(9LImVcbl|*=x&-w1Vdda@j>LW#H%S*@DMB_K7^hRc~GvK$tJfYxjlBK zYN664RD2NRbRT>uXdmo*DHLCPNQ+NC2_b)g_y-uN_DQ_{W@k3p+oWLdvA=>Y5g-CYfCvx)BCsa{5v*1D zlv_{j1lULYN^19j4N3bOFtcA7w;>s|?YFFI!xGpaW7!28BK-S5eRjJ!eh}c0d+JTJ zdB4vm8!wq-!Cey|T{R8f``Y8PuwVIqWqxXI_Ic0z5-s}X3Dvi%V_l5*@M(A{{)0gG z{UgU2wHz4T_u61{7S3YRP7Mb*t`uVueAg>>%LI&b9{vvS^XeUk_dfIZA=i6;Z~hg| z!JC-`;I1Xd*W;eXcYacrbLQZB>Y5g-CYfCvx)B0vO)01+Sp zM1Tkof&U4Cq>m^18}G8%in5e<=Y{rV%*<*p5`_mPe-kMn1y za%^mHwPIN*V3T@ILtVi2+4&D&SvPy{UzwIeQ| z?ROTIgH~{r1zizF9f(9bhztHo*jWV8j)MS1z(s2s7X5HpwT~%NSLSnNjw>?*U7vFZ zItwixE_HnIT^zuCuoQL*ev1n~7SO^dSd62UY)Vk$->(RN9<7L#ZRaf!Totvj6AGy5 z1=JRN;b&ytuR4I~a(A-3G-{|MGy49_*1a3mho^Q1%VBh7K7IpK$@k4wuKM2SJ~WN( zX4a}P&uH=Se(bG`QF22mgUymKd(fM87X<@_|J|F1F{n~zrc5CihlO~x~&Xa;B YoAQ0dB7b*w%Ri^@JJpN9*e>V)3!p9pAOHXW literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-add.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-add.elf new file mode 100644 index 0000000000000000000000000000000000000000..74330e9e10ab58d1b77301571aac92a68286c00f GIT binary patch literal 10432 zcmeI2U2GIp6vxkbvok0p z8iu~;gQ<&yF|mI1L8A|vGy>_9Nn`ZUqy$WSF(i@0nru79P~snS?oW zfA@d?_uMmghHNuu_aAuL5CVe3fIop-9Cmag3u7RUoQBRDq}hQ3aw3L=}iC5LFBiB!RT{3rQ&B?|=W7 z^Utqd53s@9d%N8Dr0HzT->_40c;5i+`-^T$iSu-CqdXljGd_+_<2=?oCin@=S(sp_>W6&%V?!GK6~{i2 z0eeOLpbr`373R~(^I-SXpCh0CbIm5{XD6FYUkrl1w*KraVC~p{Hi3DHqvS7ns82MT zQKkCMs`pdP`vrKxnx_&e%2oIR1om(DVIFHg0~bBK9|;e6O4uLFTRtpE zZk;1uLv9MY_ez%Z7d`YyOe4z(`@(!SP5Y94=w78`Nk|*r;2S1fUvYR*`Q~x_)h$ZP z-lV0y(yH$!Jw-Lxd1AeU7^E){|MYh!CJl!wec z(8|0i4^LoyH?-y_)-K5wBPGdzW0odZY|o-?CP{@^7@SGt9*#|2RHFVBs@_&lNsD8N=?rf(#4` zpKE+y8TkG&?4B#JiVO+f zUE3vrfCKn@wY9I8d56XyWuDh~Kl9xhSKk>3(D@MSZ)^Gj^G3WqpAqIO@VBhIvg zf5W_@@$Z?xrSTt_f1&Xona^qbXXZa?{8#3`Y5aHQJ+b!n-eNwW@xPhBuJJf+T-@iM zYJ55Kd5y1R4jt|Du4BGg;~SYD(fAhTZ)xCgJ{@GfTjMV> zKdJGTn1878BJ&xIk1_vF+yDaBRW3d#YN5W5pAt@s@VMafhoe6i@}ntK~6Sedu$} zjJd literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-addi.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-addi.elf new file mode 100644 index 0000000000000000000000000000000000000000..d83a9a79fcf21e1cfe4d5603ca302248f9ba55db GIT binary patch literal 10016 zcmeI2K};M~7{|Xi%QjY1cG!V}RNJW(tsY=@rIsp5H%3hln2_p$+p;{Sun~4QJEKBk z!i0-A*g7>Hh{!>2nh+Di$%Gia)r5qYcrja3J!-bG^;B8EH}9L><<%aH7Z2|xGvB=5 z`@ipf{O2tMc&o2YzGg56aWmi#pk5$YPTa6<56dX-IT!~6@5dk+X_Eq);uf`_Gk%+p zy*S1?vBohmWQ!X%6N1ioCF%ggF`h?Q2kn4%Ks%rv&<+(kJu`m??f3%qhQ#IhnMBD*xG!y+P2&`1R@8 zpK8y8VE3@OD#!LjeUDQOO{@Xe*#~Y4Ce{}o2w!diKUwdW3^m=iP}dOk_qFqy(5i<4 zLw~Fg_8|;*Fh{`fT`_)R-?GHMKyGd9fR#vrWuzfAY`A^$>Y>!xjGG5NZQV9l;vIEr zdxf@wIUU9a4^FhTHK|qgX`!D%eU9<;!DDSb))22h5U)Rl>(`IBG|~RR8e&~kr&xQ2 z;n$x$qKmXxL#&PJ6zf(P`jHAafPoCpHz52d`98#6Ms+P>%?mc|B(3S3jdh+O@)6({1=6PK^$LY5IxfE zE8@Kh|C;!Dg?~qULgC*NpH}z}#1|F*6Y(1g|CRWj!ha*)Q20IKy~_Lji}-}XlVaoI zK3`Dy3F6BN?<4-H!UvI?;&Wji_4E8gIPM$N<4xJ0mmi{kg?KJLZzE=6bMT7RRXB|L zOO;X1OP4ZZD^nw7sJfo(=ihO;U#@~*EmY#?cdJF;&HLqrvggA>p)|MX=G|rPR{UbQ z1Z980t#b+m!*8!3s5O|9=N5syjPqr75ulWF3h^~#ZpH<@A-wQ4|!C< zwQ6}Oas@`bl_kG0i_x#jxDY@2?y^5pEERniArGVX@?USKFoD<|(OD~*EQkV~*J_>1 zl4Fpg7>B3vLCmLPThn>?E5sF{|m+G%6mF*)_GP3SC5{hlru|(1WnqyiAkDWOvya zH9chrf*vH-L5S-&^$n`H8858}nc8<_d# z{pSCD-`oGZq-6V+UzmK+U<{(efZu^ezF>KA!DD?yMsdx<1Q>Yjgk-2q3TTQ;c=+*n zH6ce)jC7($r+8$E3mzu;@pv{I07Nm$BdmjVKs%rv&<Ze+v9`Dz(cyQZNT85L*693M%;bfAG`g z^ZmyFhOIMqDy>i2?nwS7H zsJHRV+W~$-K+paVb<#-_(tWoXzmUXPv{C^x!Nt#s8XtSz;;ROr&fNS0pt16v>DC{y z-C@hVab@Nf&cT+op2I#p<6@pJSayK!RAZB^tSm-(&bpbJli-VZg8 ziTsA&YDYC1tGn%h)q$JwXRT#f>o?3>7xQ~q_Ko;1@(tieo0(WWe{;9JjP>x@mgxT= z^>1T;?6EES_Xi+)i_b3nxGv^T3^iTXQP%=K*zDV{Ytm;0hWY6LwxQu~V7|}r{V@Li zb~-KA0`kn-2BZ@yNEHjz5AGb<*Vd(0 z)%OVfH0tw=_w3xiug5t={Rg7{Q`oh%;$X_FVLg6*y6AHgX zd{W^)@o9y>O?*k=tHj?`_y@#4Q~1ZkuPXdg;y)<-bK-w0{43%Q;P*4(EnU7QZYlg* z;^PYcj`*a)uMwYC_>aWjQTQ*!zf}0I#D7-!ZQ_TN_xl%dTj5EuaB-c#s_-Mk7Zlz{ z{3C@AA~(g)g>}%k$M3;$-Jl*X%KAKW5B>AR^U;1Ak%@gA|j zj_T#8UXJSJs9x?QREw?)PIKZ W$`HiA8~>EQI3klqW4Yp1&Ho$N&fUNO literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-addw.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-addw.elf new file mode 100644 index 0000000000000000000000000000000000000000..794963148ec805ba02940fc6d975179c5e9c0f9c GIT binary patch literal 10432 zcmeI2U2GIp6vxk<-6f)-yX_XJd`=`4qf%yfiwmxV^#d&tk_I&4L9^XX2fC4Vo1H<+ zgJI~4KA5^V7!&cMFUA*48WYk7G--^!VNya&e9&wS@lDMV!6#%rXYQF{_ZA+EKF%ba zGxvAT{ogbHxiig9=Jfu9&uc?K1kuup2b&Sp^9{H$gBJ_Pc!K z$M`DQ3Sy8)bNF4l>__hUM;wP32Qe7OI0}&ikpqzfkpqzfkpqzfkpqzfkpqzfkpqzf zkput2fhsJ^oCi~D#nvamO(&DL&3F=yLlP+0d?^W4{Qd9! za`wpjtpMBfeYdL3Pg{0>@w%Bxzy}(DH=_x=e%P>wp-;BI@!Ou(Y}s|KfDzl;ld^Ay zb9Kx&@ULii_=14@{vw@pA_eKSH-&jLfmJk=ZQHk&UM3_)d2HS3ts}9pLs83 z*B>(MZMt#olhGSkgCVt^!FhTHsZJYo!^81uoTu=v4qg}5EOao}H4b_BvLTK7l4GAR zz}(Py(E|hd6!SUcMKHHC4v{d2T6_rZvbqbY0T1B&4+-@H8E+^&Y-0b&ELu>JFL9+LTM{qCLNd@@c+dtncb$ zGQTNn3G&r3DH=odj0khn)$J?l32Ipv)G{T|-~RSms1CpOAlI*(>Tm_FuWjvh_%*Bf ze%(|2LcY_Z{YU6EzIKz zf0TJq;d$myDO`SMAVB3uIscZDUt<1KqO+bc=Dqma)<5LkYs?>4c#ZjU3O~jC6@|OZ z9fiNe{2hhQGQXhk_nBW-_{Yqf3jd6G3g5T*hrIiOxuNij%!d^IHS-aLf5&`U;ombq zr|=(`Ur_kZ%)eFmugrf``0vc)vCi|l$$U`Ze={Ffc!Cx#uJgLW*D(J|;cJ=yrtr4ni1{PRI)9ltzK(N!OL+Gx^S2dlG5<*6 z6U^roev-e|-I-^1L!oz@Jy)u+y2C z+G(2k(V;Qx$UqfpmTftu*Dcej*1)Nir-I`*Y8A&SIo0v1?Z9|>a_odvvZhUI%BfT* zq3VoVwYIin*-j}7$I6ux;2-B?7?fd`3{S|AmtnUIdt}HM95WoV99b#DQW@6DuvmuG zGAx&2y)5fxSue|aS=P(4UY7N;te0iIEbC=iFUNX0*2}S8j`eb^mt(yg>*ZK4w;QI) zwhh+gSjny&pDa5kYZi=J$19Uun~vTD&)`PNX(@jE-HTuznhayC~^$K!+1dBV*v=(p)NuA{T%lf zIR=5o;$5?18`34h*ZKYy$33m}`(zXPIIhMR&drR%(SF&uNE5VeN)zb+`rXE_;qMIx K+Q!nMI{qK=^`JZe literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-and.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-and.elf new file mode 100644 index 0000000000000000000000000000000000000000..9dda5d195a22abb050a54479207a57206cd59ccf GIT binary patch literal 10080 zcmeHNPiP!f82{e>iBT~#o3*x>nod)rr9v{hiKewe7o}RT(6r5=7ujwm(`2#TU3W%J zPYyxw7PcM5LooK@%|fuqdJ&@FQAsG?lvIk~L1BWec&J^!H}8AfowrFvyvaP+_s#pw z_x;}Q{pQUq*~~jfkH4H?3}j2d??5AuV+Gz}yD=;x?+b7c64>`ZI?PRTQ0HCPyw3P; zj~K})^Y|R$DTA_g@WLaC#|V~D))5?s*n!xA*n!xA*n!xA*n!xA*n!xA*n!xA*n!xA zf8jtCR#VQXG45*~SP!+5zSaP%hsPDL60PJ;4ZN(T-L+C0%z_3y*P7Cxihuw6KV3S# za}U5iEjOsbnXw%lTGW8-Eo^)XVR!5(0rzYgX_c`59hjNEhYf-^yX&(OAD8Er!izY z`wa8u^7Jj#U<$4mai0EhuG0a-Y~rsMOP(J14Pd?p!9+&W2H0jW)-s?u2-?zOU*IzX ztX&(Yn|h!vdCGdz+BX1g4MrqvI#BZ4YUYfpN2Vi!Dj`q^o`@Z0c_1nHOt>&-6U9#ZoImk=4(Nx=Cfceuf4LZ=1t6PYp&t?){m;Z*8&}L z(4WP@z+diTe&_}6k;`i@W%2r|`JHRcCN;<=`oT{aaC7&mJNLY7pg-4-g!T9FGmF8cU$)je*K@>N;j{K_%F3bybpN&)1BI>F0!Ay^hdl0hWht)>X*8=oIj#p zXE^^JUMq9eJ=C@Kd-ou-9@`k8+K67c$Gdcg*SvjS^7@_8xy9a*`n%?C`(9vp|7SaE zdCh&bM|_{;_1ae2Lms*hy7WhUKg;z$tZEQC#5%UuU*q#X(53ec9sE9gPBRbBuczfR zYitv-5N|MR_j>YLO^&ZH>;1K4Q_p1ZnVFf`J2W)F_708Vb4TQ_;PqX@8Z&%8TOI@d zQU<>xGU0Q&^O^1Fu!jAa)>jAa)>j;D72sQoK>%smn{^TLk!j{RqzA z3rN9cOU=!M0E6QY%^xH@rQin$FDUo~;V&q-c+Y@=il3qUJ4$|$@Ts1to*BaTvnc+$ z%vbO_;qwZ9k?<7-_Xz(%!QUgi7k>{452;%ud|bglAly~(j|l%l!9OAVPX)g!`IFIk zKbQOp{w3in3jPh@fr5W4`BPE;?+LFd_>Y8ts^C8p{;PujM)>}8l>av2a|-^KRzagTGo_nRt}vUsY2a$Y`6H9ZMoGtxb;#^9=}~LyLQp7&Q%>3=1P^B z^LEjmx9pl*u2!Jx&e`>jv1>bSF%RcTSM+x*YN4i7!uldE(0xU!M5##Fr<&`~=iWjstdOrs$MsD<${Mx((Cz zY`M}gE;??h?m`i>;9R|WA#@2woQoIS(lkc5F5;X#a_xC{q+BVxFhZV&JN3VI14zJk z3%$n0={(-y#SdHiy)H3?0!0~~!UJBPlz`kXh5*{{chUI*MHzT4?(VL3%n(p-N<3>3V(=QDpra{6;NLr2)nDb4VH**l-K+I~12ciN6951J literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-andi.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-andi.elf new file mode 100644 index 0000000000000000000000000000000000000000..39d71d3286ba0ae4de44b0482d43271def00367f GIT binary patch literal 9664 zcmeI2O>7%Q6vyAL?a+eoZnA|08p4Vcgg7{x5@>-+SO`#rdZ<#6ax>0kn^-hnYj>dO ziB&G#ESC`iDI##;h*TjVpOB)811DrD7j9|Q0~Zckk#dS+-h8ZUPs*XdhqkvJsC}0#Y3K#{90!9I&fKk9G@CXV- zuv<*#`~~KuKpyWGn9~6=#_dfYcE2#`KnAT(?-92IU)um|%eIovQjlDNDcQdz`pnMyNymN*E%xm<<=B>r^)Wucs~RwT zL7>L|;q!PU7rdwLTV%O}Rb&pcTuAV9VoZu_9gwyS80U6>0@&XA(oH%q1j(!)+}&9@ zz#0NM*E_h*!~(A~0YB*C+l%eg%~%I4mO|$Bv#eW2)}G1OPT6AZa>gtl$khIGT{m;K zQ|Nnra99~HD*!URf4U2OoFj8Ex5dgCFslm0<=hdRb#{TJ8K^uQzr@F%(br~~m>0)C z2GZ$GdZ^)pHM5piaKN)CfZ0CWJ+*X%HME%30`lyhCt?S6fa9SqBk>a=9&5&DJh3+} z-!$-+dnx{ADB#hWAwB!Y(dnno+o0y6t8MLR(x6G*A?H?c&hj}8vjD^Up3xV{6OPhDSkn#|69dZHU5L* z9gY8}_-`8jS@AzK{)^%#3ZwemLhkbY;E(d&fAHIa^W8EU|EJ)`=lM(VYJSdyXJQNR z66LHMsqvmniD(!4IsIcd&I^M*9@fwJ?;o>f-OG`|3? zdXhlcT&*RIwPu}u8i%kFt~HuN{aQlnF@+jN!Ie1L5Yv`m92~|9d-)6Y!@f&H~BFQeo72qQSW#IR;f_bMq29JYO9%dhmVX%ZS1GA=y2a z&vS9N9BYfdL_IZF#O@ScCnOd=cTeIqSX+&8Gc_wa_lFpF#f}|f{Cn+T`A?paL6xCc I?&|sf0^9DALjV8( literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-auipc.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-auipc.elf new file mode 100644 index 0000000000000000000000000000000000000000..cf2211ce83d28b4995d891386d7c67aa9ccb2acf GIT binary patch literal 9320 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 literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-bgeu.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-bgeu.elf new file mode 100644 index 0000000000000000000000000000000000000000..cd7e7e34f953f768cc0d477dd4ead6be50e92fcd GIT binary patch literal 9984 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 Q{LKk9XgV`ioa*EM0Ww;>=l}o! literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-bltu.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-bltu.elf new file mode 100644 index 0000000000000000000000000000000000000000..e4e6077e9e67425da910a31a6974777131ca3b25 GIT binary patch literal 9888 zcmeI2PiP!f9LIk%y9u?3JITg0n2)JIT>)JIT>)JIT>)JIT>)JIT>)JI zU4eg5ff}r(y-_w6W&&^ywo+lH0Zuo!SHUq`sY4kEvYE^yC!K*g$N<+m=Q2>k-~Zvw z%da0g3^2l8+Nm|aY19JY8n1^PwasnCnKiasLf>bP#rk2p5E@t$jMt&F>_V)2%Er8BQHQZ`kIpU3+h>C_ zZ0C61&^VvS*-YfT*^0FT_9>}dY}2;I>$guzO+cEaF=0S3$k!g_?6XfuO#`xc&Q_s` zdtEaIjVA8%M?>uMH+DR0_Cjbf*tDi_eP8XV&EnpjyX;7;AD-F?jjQ|Wh0g|KvCk0q zS!?s*nzl9FVMDQA?icZ}-8v>{X{N)*EX@oxs>jE7o(H zS+QR1!P-|ZeD1NwV;`{x*5k;C3sFLK;v-La3zQS9*P$g{!HZ9aHyJ8$BB z6YTMM!Untt4Cl&q1MfL;KRbZ|;pHCuPU#W%b@CqfELg)!KsQ|hT>)JIT>)JIT>)JI zT>)JIU4j2W1ybTI0s4PGvECHEMSwpQf&>!EG;Ft$jE{Q+Fklke^~1!|3O`A_sPGBm zFDhKVXJCNJr%At~=u5;uNVl(NmiQ3<))qtR-XcD!@H%l{;mgDu3J-{1Q}~C(Hxzz} zcp9IRh#_^K5VsZnIq~xf|C;y}g?~eQUE$vm|4ZRN5I>b_U(e6PrxpGS@sAXKgZMRt z|4RIx!ha{ul=F3;_&J3?B>tJg|3+@{>z1{z{{TMA*^Lhfj-7J-9Nt5Jlz36OFYG9< z!eP{3SR8en<*8R@-+m)kgSzXve(7D;@oRPP>*d90{9e7{yCuIiU-NvJFIQ(Tx+QnX zaTonctqL`N-mNF*zU%p=0$eCpE`k_8Bh8pJ&q^~c&4e_krFl-8yiGPwwm_C5n$$Ds$Dc|4!Y78F#KyP0UN4U#|O5LKR%7*A~RC zA?GbG_~jY2eqGx6Xym&~ey&oj_>iL-@pJZ{+aN~ZXJ5SQB%=kw(EC#BX$hmg7!AlC zN6Y-g|N3CEKzfZZ`Y@)C&cxhyyluMn!R~zy+}JH~=}R%?ap;gKS|sX0xgn z$5qd8|8 zlkE8i&F<$t|4ii`cXIHF4G?YGmfybY`ioFh{U2mMvb#OMZ9j(*`}VUcw@F%tdKW(x zH^LtXDEFtRQ^+|`c>KP_ujFtQ-F##@;Nw0~6XIM4{H6`4bH4i;;M2_y9lw3r^(UFT zzq53JYj9Pq7jT~8d9h9(7|y{U!Wspv#Xn}i$J`k{>cajGd&o!JnaFZ6kMrVMD1SDU zKO0%-0d#w*@zbgNbYv~k_->EJPo?rxk#&{k$NF11|A-5`=$;nyN7g!x#kIw`F_)=a zNb_RdI5+N2s9YNg!hg9htlMT21$!7Go5B9*Wvu%}U%r4kzQe{6&4|$K9??kMZB|Tl z!$Q|N)W!2{v(ZE&YwaD;$XZ)$B+DR^e+AQ0r!~2cj#_Jb4$A2Ef zd(v98_|~4q$6fg>@X&(j)(}3AL-LtOKOepW9h}NEA*5%I3Z zKO;VZzpKboI($j|qQ<`>epTb&68}Ks-xJ@}_>aW*H2xFu1C9Sod|dPY7vdF-|4w{W z<9CU-HGZG?9gY8m+!6OJ>-T36e~UPd7bVAocK@9E2mKWBiuPQ%@w^&`*r+7iZ~ zrQ&LQ7I+&$sotmuP$G}SHT%!)39KNlzI@k7RSRXH_ob5eqErql6yq?BCt`di2J!W0 z3MB7GQNBVk4q`0ctw-7=rqBiz&SDpT%7sCNp-Ax&jLF=@MCeSa&XZz-RMWch@Ah%y P?@p;frPNq)s*nF0*zKJn literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-fence_i.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-fence_i.elf new file mode 100644 index 0000000000000000000000000000000000000000..682802e025553d1ba6553a027f442e21f6b5621a GIT binary patch literal 13480 zcmeI3&x_PZ6vtoEzf{m5KMFktd#e)Y?4|7?XOeRhToKBM}f1L~? z%u!mS4ve56EO?YT=yeePhQX@{vWJCjS@*|bvG>)F^rqto4&LNFNWFUByjNBEBsp}G zx^?EAVo($Qc)(79N zz%u^kPZv#t^)I;WJnT{ND;cNeV95IB3G^77$JMz-o$Fw}i$}{%@ecxh?k_P;y<$Us z_n(G8Q^8dXtkkf9;gw=ef^&WJ@0fsj_RCd(M~nAt)<5X7DaU>Hc=jW%!Bu0O#(8!& z#X1={Zdx5wCl3LXc2@?==x;yx<@Y*{xtT+ZJGJsuu61g86)gPUB3*jFU5t_LSlgQ# z4)`nUwR){pt=Ik@zT02>Bx@c%ElZ!SmPO5G=FI1&OD_(px%$Y=1^@oK;qP-LBR?@9 zy*q*TX+pBfb7MBF;S$M+01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y2oM1x zKm>>Y5g-CY;5#9ZF0JqS+Dj>^odHQPzl6I1M&Iw}PL`k~zV9E)7vKGt;lnVOCc6`| zHQ*eK=kM2gxuE~3^;SVYs`Zlv{p=U?8L5B1&YyMuj4{5RIjz4b=%LnM7xbRie=F!$ zQMZwg?Tn9qTkAz`sni9%@%$B?UmWL&)Nz+awy#1|qPck38{MyIzR;WY{hk+hE;btx z!~qL<`&!`hC;Dl6Xkssqg~t{VpzTo( lwxS=cU2DQ^(ffj)7ih0J@mG0v+3?)yIC@$)>A|2 zS+oV4&c$+TAj_3n{9Q!Wv6bmMbr@v|LLVfyX>ve(bs255R*;D{Vgs8r&;$zwR@RdZk%i_R8L>>$P~pZ^GwwFX-uWkMZ&Z zcqOP&x(O^dnhz`0YCz4UN@E%E_*JwjjKOPG%dAmrR`{d9!=hJfG<*7GMoBoz6osY0 zUy0X8i9KE6l|@n>Bw9~f+*{?PMzg_DlDnmQ|JQPs5{Rb|pLt1=g|WzUGu`ts$rv1| zsa&Fln4e2Q`W&nTbkE7iaYt$@VlKTkf0St}K|kYHMEv$Z->`te1Y<<%G1BhZk_mA} clg@Sz6HS?}OU3W^u=zja{8BeEX=LaB2Iv3XWB>pF literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-jalr.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-jalr.elf new file mode 100644 index 0000000000000000000000000000000000000000..4d111a5878132a712b6fb4152157d7e6ee46838a GIT binary patch literal 9480 zcmeHN&ui2`6n;r|OBFHcZl$84p+yfKwxLv8R51Sb;Gt9xy{+46y1UqJmdvR2WT+rs zl+_6S0zG;aFWyAls|WEvkP2Q~te#5OH<`(j#`Yk3oPo?Y@0)LCUcT%WHhs6xT{^F8 z8YE4JA0VTUb1v_&-5V0fdl$w*$G!*hu{O_1i+6Dg)0opmlwhLcXY}wXn|IhO2-A2m z4geBN)=64{azHtt98eA@2b2TK0p);lKslfsP!1>ulmma^fDa#Xbl4t^%n-=-juDwH zAUz!40MR?ffC*vIG}lSagesW8wd9HkKK}lXzCOG>Z~$P)KDp*Ezv|F~?h3K;@C1MJ zM~k{fTayl*fZZbg7{`&m+@US~I3mXSF)_C&wKnPg<@K>%>c6B=`HF7Tx-Kp|Kxh4O{6quv?Av9 zo$K~EJzZUa>#nABcVb;v+wbJMS_`$hCG%=)RcLpjMLch_YbQPjtqJ7u7me(5VsA*O zLG-W>pHE-xQQ9wR!3RuFHRXVEKslfsP!1>ulmp5E<$!WPIiMU+4*Yiq3{g=KW;Zsl zilF;{e>utP0&=j@$!hyzLW4^n>jb1=zvOcn{;=fT3_m9M6B%CA8EBB@r=)%@qc2Oo zU)z{ZP4ZTT=kF>2efXT=7bI_I_}h{{o8j+DelEk`m;BQV|5)9%bbbV3nYX+l|0ny>YEFGZWx& zwo;#icz#sC5dlX9j6t(PDR_;UGObq|6?Q%FVA`wJ8>zTVac2f)RKaZE&&NqYiQbxL zm1#s42&^R|<}I*Ny-{aSlD81s^3UB~+<`xxxTZ$z7RDg!a=P_5Vh&u12^_)!UyrZC zL`$BJEy8Xcj+}NSCcxL?r|FM&(H4{|C-Hj<1-yC%4Z9_7L+qX{IS%&*Mer%b@nQT) VOmY10!)EKR3<*&wrRBry`roeY|7HLH literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-lb.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-lb.elf new file mode 100644 index 0000000000000000000000000000000000000000..13970acc7dd1ce09c6e3df8054a988030bf7c887 GIT binary patch literal 14104 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 literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-lhu.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-lhu.elf new file mode 100644 index 0000000000000000000000000000000000000000..1b2550d9b861b61b4c787d928dd13b56b185adbc GIT binary patch literal 14104 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 literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-or.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-or.elf new file mode 100644 index 0000000000000000000000000000000000000000..b3772ca732797e65bba4195e06a215dfb09aa088 GIT binary patch literal 10080 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 JF27az{{`EOOd$XO literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-sh.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-sh.elf new file mode 100644 index 0000000000000000000000000000000000000000..4a38a063ac43d08dfd207c5248c44ac15ba89bfb GIT binary patch literal 14432 zcmeHOU2GIp6h5=N<)=#bkJ1XI4BcSVNV{7K3#hPFAwKW`Xd>~!vP_qD4RqI?5il{b zEg><{kir;=A<`wrL`%eCh-*Tv3xQ}1AR*BQe`pO7HAW~Ae5$PH-g|bsdy9$0*L$1Z zGxxjaJLlYQZfDb-ncZvFt#xS{l$s0v1R7--7GoW@+%jQVAA{xK!hSkTAD2~A$|2kYJ8w*E{feSd{uDJ1z`8NG_!wW*jx|wVtks9ZP$3w>~}qa7RRoY zVy=&Tb@UJ8Z!B!%7X&o-7mE|D@h{RTq^(C?!daa#lV;|+D`F)iymR|jzGv}@is&L7>jodY;8Rlfzj2%FZTmB{JdmvX7b!}$z zkJ0>9r>?`yr%;@%E6wU(A^h|!Q9l5$Yk>KU74wa#5w8o+`P|Vc#T#?#A}uEC>Sy&Y z6@IbH(G6{Zd0KB*un%sBd`+%B2LSTVvzYt3Y%K>y|D`3uH~W1w!gBY{w6jCScX7RS zO#nex(|3CUF37LqoSC*Z1jbvJT5PR=a~SI)>XE&8zHTA(-A>2&$L z;Tv5XbOpe6>2PK4#tB=yD0l_VJ12OjE(LLag#3)V5b_r|_Z;f?pu??a+_5rlVOVgr zuNjx~1B~BJ{0qa#U*z!TF#fpU53$^ZlZ-?8zX}BzH%|NI!bxNH=t76fbA!g$%eg~G zC%M`eJojwI?iwA`^X^j@2lkNoKN+B zp4ahwWWymx?`C#>R)viE(OQSc^$wTu+K2P_T^;h8c+Dlf`5s%K0Y7dq4=KSUW@@F}GzUKAi{1c34gYGYBZP)02+#mNioCbD|HkWbQj|&cJhujcp zY}fcS)MvWG-B-7FW<+FfPA;Z$6BLjaqm~%x^{38*0}fV2O;}C zFdD-A`ekG_u=o4%8tUiQvGQx0>4O56rkYYfDWDWk3Md7X0!jg;fKosypcGIFC5Uz~}YvfVJSO2$!XK6Jr~U=sMEHc{-@);z^>>oLRaIGM zlJEwt5>FHUq=fGze4B*7O8A=+zL(=}sL?CqzfS%qB!9d`k4=LgB>Zi{J@_02Kcp_l ztp*QE`1>4pgHOtPjQlrA{-2P4K=S{L{NIrL@s=qz4bDjTdBVY6S?4!|$0Ynm!e5c_ ztAr0r_#cE%Ncb(n+dP$d|0X;w;Z4c;5c?rS^taV zuS@ipT+?MD_>@pH*E1Bwnl+~Tcl#Q)~X?3)M)fu;7YdpCPIIu*RHer?u zvy6K!7lWuUG+H4>kuY~DjUs%+K$aweS-7R(5sDt6@DYs9=P7iAVn--kE5&KWu)JuB z*SZAKanlsJcrTWNX>d`P1ba+@y;wjL5IoXr6pqW%}#$<8Y!2i?CLq2X5@vfPOmE{JX zSz*n2FHH;~Mz&<`#{I%d+P*LEF5j~)3q`Z> z9cGp)El?e`UR_7k2e=NK`YF_MZ%v7=>hhLO#ycii5euJ^rbnY}j>Lwk`T&Fvd{ZD70}`F(l^Yg`LeP7X zC#ACv!q+y)=YIYKydS)E#jx&+InV$0VfBFS;Okts>6|kQ>Yf6gKbc3k*gXa|wlV=G zzyz286JP>NfC(@GCcp%k025#WB?1*)QIM8oRH%wz{C|J5sOkc$*dLX>r*px=GEAL- zF`PGgwWMD$dQj4@8U1ES*L4OK%K8fVU3E|I@VV1$*Z*kcF;t2o1=s{8cpmtL8 z>B-M6>6n*Wz4QBaXCVCBliAA_f1GT?W2nAnH3*&kd zvmTgO1htpG4S%&IPfP9mqgUTy;3PdKw2WC3l{P-xXe#Vn)RR{eni`sPV^#ee{A>SW NU0WJsryi8|{{fV5uJHf> literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-sll.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-sll.elf new file mode 100644 index 0000000000000000000000000000000000000000..0c615ca2e100c2f9f261c4a75c96cadb1a5ce893 GIT binary patch literal 10688 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 literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-slliw.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-slliw.elf new file mode 100644 index 0000000000000000000000000000000000000000..cb8909f4df455a9788ebfa9860c48f747ad9e0cf GIT binary patch literal 10144 zcmeI2L5x#H7{|YPZ3$@DzHJv+S%HVU3sFP&wH8^?#D*x@12HRl;AAPYkKIPLZTg-H zCttYesVO{+hbnmSXhMvp7fm)skD5)0i5Jr~#KeOnC4%9A)Nf|K$94xe7_ak^&NuU$ zZ@%w)|2Hq2cIW+9j~%rbgZQ%GFQ8E+jt#eV~heu0i%FXz$jo8FbWt2i~>dhqkvJsC}0%$ z4+_*_CF##N#V8#De{7J5(rw_IguM#f8YFh4A7^ z#~y%5=jFTg{*{40UAoEb6nty}MCUE$w~xF2JdCUHcXAwA{ej=MUPOyy>#&+TPreTN zyZ9-&5&l3xbAO9C*^~|0ZMPXek-{qa>4@3j<9(t}h`Da@mIdf%cfSPaoWE%M?WbIS z(s8d}K6MLga8;}$m?u*db^74A5&oz!aRqA~u_0m(@JuhS7>-9AWG?XW-i%@mWUx76 zCE&Yz2NYX_?rXT7%>y5cS)X-BuqJjA_|D$55%dQtM}H8p25>uOBF7ps)O~yJY2_z# z+=*Bl_>;Z;ieZkQ2I%*hsE=5jr}Z7<_Zi+J?$wa-%c~6c7Mp0V5Nk6&wu&)b`EK!$ zL3Cjh-|tcRjt#$Wz6~o_mbr`qMggOMQNSo*6fg=H1&jhl0i(b}6-dZa0`&j=A&&%} zBEYX>;SiFZNw_%}W}-hT0fS?((SJAbq{g2iUefp>;xB1joikvd^AqHMSMx6ux04&| zS%^8?$loSDrST^5S&g3~eoW&b@sk?=fOw$s7V!@?{t@v{H2x{^s~Z2D`1czBg7})o zzb1ZHG@tze%Iqcy$M0H(un)-HLHPF z4(dyFKY*o5ZQ+bp_Reyz5mf6ns0T}4b7&lReo!vJ=}Pqs$o_N66qPxs%=5||Qf5|} z7nI4nWbf#{D$M}O=mn>n^<}9V z29P6-)JzyGNe&Qo%xL=)Bndb75)@N@QcR4?ALgA_npPaTK_JK8)r|WMd=N z;%a87`n8f{JZtA^*5%~qTJA0(bd=g E3&?RAO#lD@ literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-sllw.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-sllw.elf new file mode 100644 index 0000000000000000000000000000000000000000..e839d1b5b292f1cc93f6377ae6cb81a1d8a203cf GIT binary patch literal 10720 zcmeI2U2GIp6vxkjdDjyH)H35>wKw?ZZC1Apf*%~n60pk*j@c~%RoqJ|>_d*kmuXB^m znfp8cd+wQY@62vD^HJB9mlVdpZ3_Ge)U!BC@B_AmiZI~@Smy5k7@#;<^10lxx%1^f#574R$ISHQ1;Uje@Y zeg*sr_!amM6-dKmjnS^f?T`ifL#2Qn%7I?X?F8sbDX=gER%0l1Pp=6_ZAOa@)g3H!KqU@0`A^6iY@<=|qct zC#%p%LflJg$LVr-IEi(3=ZM!Byhu zV`0!$muHB>T$?38Zz}8&`e}#fx8b$3ZqOGM-WI&bc>H`F=E-_^{I_f<)w1}%VobR{9axf_ji^38R7Tx3UmL9W&bpd=XoWVzM$|z z*;g!;*QuLfeV@;3w@TwycihfRf^Av-Ufte_H;j*t_G8@?jKAT2T|(@Ik*-#(&jGBT zg7xXlYx7{1c!x#2X$9A>BcGFXUOZdGD=L`ZTCu+}a5l&HFW-+nO#gZ+=IzHZ+;`4? z%rITOgglH|+~;)`!@b4yFQ+1n{9bkL1F@!!feA#sQ}F(pFLcvlEoZGqnD4K8p)E3J-FXhO-pe7u z_jkz6f$Q$e!>dO(zrKgvJY4MqV>^4YhhN`3Hy5sR$5dUXmrI7n58|^8I_vo!#$1?% z`CUQ=O6M5%>p;P0qoOaq6gZ2&M+?mfML#?hKuw~f9$*P$R;RdMaQp<0$34;kDqJx&Sy*I=ZvAkB&O&$zXE;*{0jIL@GIa~z^{N`fqzkffOw<8lBEHBivYjY zR&oAbKn>g~$y)sChK<1%sMfa-uaWpu#1j(lApV@h#d`(}WWI~^cO-q1_}n?w`ScNQ zV%7Xz;;SW|CB8}G2Z`^NxJBHQ_@~4_llUm{lM+8d{G7y(62BtxQ^apd{50`L@OK#J zln!Tzua@|E;#(wsk@$ebe#J`aEeB$RMzLfYCiLWGnQ{rogLrr!5Yl*Lx_y*#;CEi6mC-JSszm@n- z;@2g%4I-eBrgv5u5XC%I#_z8)BNc?+=e?ojl;-3>=QCpqQ5#rqvKT6z^_$lHO z5inVTfgn1ksNNSgzxY(?Kp8D=sH`+5h5z&Vcz6BlN!FwY3nA7o~V{8Xu?eaT*_|@ll#DO7lfYA0>U1^ifw&^F?XC7|j=> z`C=3=M)6`4FGlfV6fZ{cViYe%@!}LO?&eSN;xWkd8V00B`jW0xITq0KlrZ1(O&Yi5NVaL>%t0kdszWYB~*T64Y!|94x05%_L) z-W3$lEXUCMhTeOH!UqYmu6Y7a`1pVe-2JQx;Jsf+{sdXq@UeLJ-Pbm20^JA-TZ3jj s{>>F#SVVRnT5oP*+=O{z*zWQPDw@;<{=Mfx6;IKbtEImH+?% literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-slt.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-slt.elf new file mode 100644 index 0000000000000000000000000000000000000000..1feb7df6b88bf8b3ec367d3fe530757588e708ca GIT binary patch literal 10432 zcmeI2U5Fc16vxj@l46yb?4}>9{Tf}?g4*pQvvpf*X=<%jtguvtB1$%$opyuWP0UQS z1;um`^g&AMR1}N4g^E5@T&$%}!Xo-8Y^j0|N>-|G3MsZe)y8w~Ju{iyZ68GNX$CrH z?(d%azvuqv&Xf)F+RojN>Y4_@p~IiRtvay+o$x5ElTlp5CeX2G5u`+JieM(}uk)3N z$wjgi#2}C65M74sM_w0K9CtAeVla+z9AXDz2Vw_e2Vw_e2Vw_e2Vw_e2Vw_e2Vw_e z2mXZv6_`!B8;l`8T?hNtcEV3Lz+Oag25h~ZSdoT$Hl4n1C)02M(m=WP(`l&S-~awE z$DdlU7NFnQcCFI-sO=6EF58(DysHEFQ@Z9h_L%Mn^vU+uqV4Ogw%gFRV8pimpzNFC zTm$n>{8uo2{DFY`{vw@hDg)VNS2cTY3aeHirkFkkAS_r`55UBA8ofgI-{h&^E{xZ;k=|%CH)=5JNd-% zp7b_%NF9Kc+GW07S+!@nhzSzztM+z^lc8#P6z&HH2eKI%ZC}k zty9EF$I$FG7jiyOF1E$JGBx|eTrNv{Ey&0Fm`$W1tM`Jh8*pjqp6haa0mollFLULb zbWgH$|D*Z6lu!PQV0{UEvULu;;RD_yZCHSmx3;5)fTyceVINH+ts zxb*ml9f%!>9f%!>9f%!>9f%!>9r#}yNXRb=>gr?({E7ho)b8RMCMDr=Tg~keK!e@* z_inUr4fCYJ?`2+4_%QQ_6fVCr&_LyTIsclHUu6DGs=J;s=1aA1{sQy+6<%Zhh{BIB ze@@|b=AOdeVE&fEk1;>3@OPNcD*OZHKPmiU=GPSd8S_5;9Y$R8=^XPRg@46-x5B?= zKBn;Rn7^X%ADEv|_|MGGDEv3(vkL!%`R@w9%6wI#dtHAsA5nOUHZJb-!wO%*{ItTC zG5=oStC>Txd)@)&roz`VA6589=5H!|EAuZEzLWW{3V)J0{;XFQOXt%w%nJ&Co_ST_ z4)fO)KEeDwg&$)6sls1n{-eUDkZ0(9VszKpxCx&Y98bz~{mD)8&oD12?<*4p#JmcJ z4cO*MsrWN@y5$3tCGSwpfql+_@?@l4biGo|gCb_Z{#s>1xDSKwkqNJ~52II;aXh&4 zoWtH=d9v)mAm1x~68>9QiNk3Z@@H}+R;LqgDshD0&B-PdI0oS!yrA)k00jHckRbei zj{6H7gFs{PsabIBG9<$1UK~k0(_X(tHldH>VvOP3%qZ*~kd1RRLF7=HK>x4bX#5iX N-f%E7mM+!t{{YzFc2NKT literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-slti.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-slti.elf new file mode 100644 index 0000000000000000000000000000000000000000..681c9631122b73f34f322f47a129d396ac1911a0 GIT binary patch literal 10016 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 literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-sra.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-sra.elf new file mode 100644 index 0000000000000000000000000000000000000000..fc9a1d975a460815d3f5ddab69bd2af58bef3393 GIT binary patch literal 10592 zcmeI2U2GIp6vxko1Fnm zqH!P^eQ{G5QId-CATLIeMl|(7lg4P`i@FV(_(FCK@lBH@g7E>no;&xW4iwYEAw#n?(GEUqEt8KnssDIEfyR%mewHe-30G#6rGbeW?%>n2X?XTRnqtqMbq_Pn$ zwv`8k?>NP37@x$SY|_Cm2*~#*&y#3YA+hutGxj#4ihA5(Dwuem7-QpDSB_&hS)K7QoYp$}_JPq}-Oc+<+4aW4 z@u$kXZ;|_V27X^hR`_wA+N;k5eqRq0{z>lN5%@h_3JCvM?%x*pJ#9E=Y?|NyQ#1Cl zW2n2+*H*@MxvSG*v)un=;3sY0&(2PjTW@z*h5NSzeotGhF;#vT=d{NCj|F~D+dTTm z_c^T2{f`8GPaCfrFk@MDbKryP?!5WhRPNst_*LQewQ1bHG4L0Kztz*0d!6IlonvOGbGidOR>gI}Yi~2- zok}W!&yJUe=TF4qkWkveQ8c*Rv1=aJDdwHT{ug_LSW(9WJ`bVzb{@~iJB#`*-W$Y= zy1MalA9dHfSf|s>=(@Nr=p*LR*RsshGRuq=)$Sm!20X8;J*1oKs4$%0wLxs1c^X3T zs9R{LF?_z(`0-pT);ARE*QCzpXLUGs5iNdAKry018_O}77WX#s_c@fXRH1@|evMTAm;|-gEbD|A@&$PMk`i1X(Q-xWS7#&ds zq6$P6h$;|OAgVxAfv5ui!wSU2jsjbj7QF4 zn)q)L?}Bh)+oT9Py7O{twc#_^HKink#N8(xOJ(=HTz94I25drd}%@3%9~a$4F`rs4}p8F3zHG1 zPnZXU=@(|bFdKwPCCR49rpZ#K6s1a0t`sFpQMMGNOHsZwL-{h4FGKkgtDl!yKKgQMdM+Bwr2Dp`=jC^%3mjJdM}J?7CdYiK`Ot0e4*cV*=#te(;FQ44x# zPWc-9&&Nv4z*j46Q(S$5n&)kg{ynoCC-g?yp@b~wTKTFm#ye~do zHym3vf!=gCAM(!(0Dbs#i@?xHb_rU4Y+~G0x<%s>A7H^DHGzNbSgikf+7H>YpfA6a G`~L&K7$fNb literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-srai.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-srai.elf new file mode 100644 index 0000000000000000000000000000000000000000..8efee58153475fdea3ec017bd38b45c27068165d GIT binary patch literal 10016 zcmeI2O>7%Q6vyAJ` zA=u^uC(C6)AX$VQ%CS;~gu($N3yCAhQia3;v_XXdkmAr4~ z_ujns{GVAxN#^b6jz4cO2JvOU??5A8Fk9U4TAh?u+-*1v2Hv+oGKx(KXo_2O`Ga<7 zNRDC~$B7zSgv$~)yiD*1?MyTPh;2NNur^u&t$C|0Thl?x2YzQa5u_Txw+MR$xY14QOo5+Hr8f9b3Kk#*B9@;>K?Q&R4}QM* z($2jA6V}mNmCh$!chbJj%_Mwi00heha~pG6cNQ{o{B<-Aj84~W7*C?tPbRU8PAXs~xcEIW#>ZMWc-;VuGuJ)?XfD5Jx{dp@ z?u3=SwsQIg_K=mip20dJ)1protZWlH-Jnr5(jnN*?fAU%mJu)u_-Odp8sPU1O?z!S zv;vj|zAJo0vZ`R+fZ4#!n5`q*KsF0}NBEG4Yx>x4*f|!6yzG>iKPh>qE9zkmzgZV^ zs=)Vz6MbJ))0RG5lkxDrzAviHq^}|B5BNk621ws3@R4wDf1cB1_G0|Vpj=mG>U^4zuJDtY8BX~Nj+UZ0J(#8k`h6UGl%xy^BEyhQ$ z4)^2M?KJL#O|hdQR%n}LeEjORI5u9BC|;do&TYuGvPJ&8;yF2{zaa-Z%iJwroPyDRH-y#04!t2B@Df|QCErowf{6~d< zO8kbxFB3QM?=aCL-99J2PvKt?pHcWX#OD?ME%7%M{yp)A!ha(Eg~ER&{)@tYBc4&# z@h0&j3jdS%yuy=WlJGr6fg?T)GAAnDlp}qU-F8l(Rwv$7vm?-IpLv}0LUTtE+SP#g-i=x25r3^v*-1w*YOOtZa)WBTvsLuZj9y=0f literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-sraiw.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-sraiw.elf new file mode 100644 index 0000000000000000000000000000000000000000..d3a9099b5eee53db06e9799bc980b280af82a2c0 GIT binary patch literal 10208 zcmeI2O>7%Q6vyAJ?WzS@Z{oHwxU^f+78Ph>yDll;3sO;qDioCu<$!S9%{H-UZOglq z_5f^qfs^HS#fM}*dg&11OEj(x4$bDG){XmPAPF6PdW zuYvwq{4ujW{(*qz{^W5|2^~^fZZK;mfmL*qKGVU$`$QiPb6vL@8la!v{t}>d?t<<# zAILi6M)t~Q$F5@ySrO|w%rjcxbvj^V+W=lB0JFUbV=x1(&B2slI%gf9Wx={HI3QS! zv!2gPuyn~*kgXz{25W1upZm2u9Wp`pS$|U(`7B?b6TI7#xmpdrrUurwV6s0K<}}3| zK8x+azW!X8n~Aw5&p$B7YtTTUx3IiW?XQJM8wm)F0uKPUA7 zhV|`i8`pX*Z@S<&JK%fXd|1!xh0#`{F^~0Vcz-)?^)b!%i{q%lJFjA08phAGjSX;{ zI2S~m6%FgV_g0@U&R-%#%0avyj zT^0MlVAi(FslMNenZo@z%h$~9pfvWB#* zVVYt6cS|20FB4!L(l4x)=by#=!3OEa^UK_Pudexz%G@=E`X*Y_a{qYD`fxenLziWi zJG7^oSl@E21vT)S)3Hn-`9+4$4|x}Phh+lPJA7{z8NOe*CL6xLmdC(9KZ2hjBjI~I z_)a@IbnsT97AX)Z5GfET5GfET5GfET5GfET@IO=_CQcN1YUwdNMS%a;AL9I6Kpd|1 zRNs*hFgSwW$p+`P6USo)L;NA)royL)KdEqW&VYf+XUPAi;$I~0#)tFH5!cx;e}nig zh1ZE6RQMU< z-B-kSDg0aFroz7`{+hynAnq#sXW}0#{1@WiDEv3#D+>Recsw>-{|(}4h5t?5RCt1K zT-@g;6uy!8MTKu6zNGN`iC_`pz1Ez^?|W#J8m%#$4liC5MJ*WrXb7# zVICD`N|=MfJSI#oOEyO~PnII(C{&JO|mEmeS=YU!L;iDPNxQ`i$=b`M&+7k}0Z3~90((5~es#?9g`F?gFN7--56`0u^j Qt>4FQ4BLb-YrVSu9|KW!Q2+n{ literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-sraw.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-sraw.elf new file mode 100644 index 0000000000000000000000000000000000000000..2b83afc3fd9dc247d08f38bf286aaf978b06f7c1 GIT binary patch literal 10720 zcmeI2U2GIp6vxkckqi314bk4wP(D2*@jc#lsL7h(SVNbR1 z&yXX}dU3Qy6S-n^!b1mps@>=g06go>V;q{W0$~Nh3WOC1D-c#7tUy?SumWKP!U}{H z2rCd);9pcA59J1PMJ(+^Z7}YsMV#mm7)@kHz|d-u`BAW2qR~mCAqssE1&TGcM!E^O0VPvkJlWL0b@}mEBOTTN#xyN=#mfHs9RJ8t>MhBqOS*x=E@$LGi+CDQ`a9Z z(cA+0Ul07gj*Rr_&sfr+HmP<+|vp2Zw~yPwn_94_Bf(S z{+9y3r;X|c!kAZiG4R2pyKlZWo%}BZeqH)~Z87q12>b={@Nu?oK;HWpHe}&#&Jb>E_{5sSoR?;r*?>GcF^0=j9IE!*^fB zI%?QIU8AvCaF={1WWEUv`)}2qaeltPWxlG0`c~4Ow_tx=7<2obdQljs#!`~wUW^lW zdr%nqc*+5a)v<4>H*8^iI+kd`XWPp|_umqULW|Z6juwL}ty?GYIl{a{IREmBAXe^k z3qG%P@y!%Z>z%>+U4ATxm;3Ila4Wg`_mD`R)wdbE*^DD4HE+Ezr>Fxtytf>SidG!>Yv5+vD0YrYXX|lUU{G{ z-p$Xo@wEF|bPe;*r+CspdsL^xuSZP7=YOt@n~-~X*LuXMzvjr;s&Mz6G^p{uh79$0 z)YCw5cj)lz(M|VvucyO{oi4ZRksi9gS)LY(^XAmur>~_z`5PUmLf00*hf&`+GSIrl zf%;m*Ue$~RbQOdZN7F+9QwgcS%Y5LO_pKv;pW0{_bjMC2O|2>KXOx?ql96 z>iL_@A6Iyh`Fe#PVZK}8HuJ*@|B(6T3NJDLTHz;||D^EK%x^0EEb~_Udy9L?r*q8H z3O~<$yTUIrw-kPf`6mkhp81Hve`G$U@SmAi75*!8JyNg#cjj@0-(bE;;kTJv3U8#w z#r`~{@cWs6tMIwZe^dBk<_!(?I+rqEr10g;;|gENe7C~aGXF^78<>|BzM1(|h3{bA z+E}l15A*d3&oM73{2=o)3O~erOyTb^zp3yKm_O81ujgat+ZBG2xvlWi%tsV{midIj z&oRHQ@bk=PD!(5tGH+A(CFYwH{vC3ieow~g?+c&XY57%`<4O5_^~YV}uQShh?_beO zJmUD{uB&iZVI3^2FpQ1cjMT1mop~tc%$${dD`!~wB3Q-Vf_MFPalp!Dt$cspw4lFt zaNmJkHh0*_6|8~$Ampw7Tye_S%9&O+3Hy5o4uE@|k|r(9N@<>uW|cInrCB3QBF;9! zHp!MVB{)@rb0s)gg0m$!U4ru^IbV|VrFnju=cjpon&&5Zy(F)fY{C z)qVMqzOw+V!JnBDLmS&!X#KUBk%^NqJZ{qhQx0Va^u1@g`OBBdNu5*X(xp28AJ3$8 AsQ>@~ literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-srl.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-srl.elf new file mode 100644 index 0000000000000000000000000000000000000000..1ca2629415c2ff139ccc88a67279bb3fefc9e377 GIT binary patch literal 10592 zcmeI2Uu;uV9LIm>b{%5EdT9qtnWG5PsIhB%H#P)9K~M~T90MXoNEw&H7TMbLUKA3I z4bjMpP2oy>7)&1I#Xz!1OnJa$F){JQxCKmnkhBJUQ&S=sALi=s-1EC_@7XXKU++zN zfA@TTzwDEU+z0wcf6o52F{_t??9~_X9<47qx__>{G5P3Q1ILgemmCBp~_G8 zk!!SD7KoN(oj5*5Gk1mg2@e%=jdq*e0C23+kFaOF3V0RpD&SSXtAJMluL52Lyb5>~ z@G9U{z^i~)f&Wl}G)y)bUEyvkkOTeUs?Q1(KyT)D0(7P7TNZ#^C=i&{n*wkQ0>ESS zy#Yw$?|YAXJTWGRW8Ks93SgXC z{0w01^f}ciJRUVxg`;=I58p!#QITsijuY(WIt>U%i-2>(akNqxiY=Ijg+YI`loVXG z`B;kz)_8|v zeG&3s;{KO~e?DCk+`qFJUbzyr2OVw22)6SbL5odt|Mt3HXe^Ew)UkZaLW@mt|4Vhh z&{*8H8OHLF)fOvr|BH3M&{)jl+U9p{vsi`ux7Phaqt$}@jse5u0#X){fzySyrLKLb#6C zrtH0k`{5ANFHH5;eK_Z7?o)718K!qk_gKK=v9CSP9MeCX>Ivb!R_`O~81e-mqy)iI z!f+=zFpGN|^B0)jelzBd7j+HcedOw+@;-drOH2>m>~i-JwYK}n{W=C_EPlVR38pW- z`HZ_CX>)Y7I=UvAu9lv1$CiQT=XG<>gKL`N_3d=WV=cKBxev}m=qY3UN-JG`cs$mB z?ijpQ71Uo^F*kl5UA0<)qPLfp&*@{2Lp5{eUel#2cz-{_`*1DJI=VE~>J;Yrmx$PM zEq2bF?e*q$iYoa25)$zh=H&k8Iwcg`p8-b?k9GRFG}ZQ0Ki9v=(bO0}M^~**hZJ1D zg^n&q&%EQ*>XcD%{rvcT1lsP}{>S-EBLhX7#{0en6x`#ef7*Ag-){5$tLW#Zd>E7H zT@0|Cv7CnYo49`_us`ml_Ne`NqURV`XBXpV+G6{2rSUVyP+<~F;T>KDyb5>~@G9U{ zz^i~)0j~o8vI0KwL_tmt_u*3n_*2Nm`EvnHaJMSQ;@3Ak80^5`%l0LmI&90ZkDEVD zJR$L3;_D?Yo-<$|^ZgV*BgH3)H!X0FdxUr^bMx1U_enfU{D8zy5y!8kIs1}MqQT%3 ziNA0A8QhRK{w&3V!4DEYPkct=7m2sy|0?z+oh}n!FY&9y4@mrT;%`a(3*r|f{uS{X z690zy_Y(h(_@5HLO}x$L*8el{K8gQIe80r+6E`LP7x99`{e0tMov%oI5%EchFCku$ z_+!LZH@Wq95mc-NN(; zvqqR+VfutwD@-g(Hbyp1mNLaCRg7}QC|QiM#VB2j^2I4%obtsfU!3yADPNrO#VKE$ z^2I4%obqXuPosPq<{Wt@acaaIJdD=N3OnRnnW>XzWO#Jggb1xE z-(&y#SdJO^ZndA)6WMaMq38W-&-Do(B*;4E3B2I_eGYK;YgmBV^L^w`kaZ02i+9(Y zV_R6DGk#&4(DdNzA<=|3vJ27H#wNziRHta%<^wbwQWN<1j`{jurRO0d4So5g-2ZPO CITFMG literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-srli.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-srli.elf new file mode 100644 index 0000000000000000000000000000000000000000..a8dd4e3f24daa909323a05404e050698cc9dbe6b GIT binary patch literal 10016 zcmeI2O>7%Q6vyAJlR){1H*r2nTih*a_!Q3Cw6uIkwW=275UMC3)SK%}HjPCRTiylQ z6IO-9&2kwKhZK_o9FZyn@~KjU#1Y9-gv0^lpo$~N6)ox^#Jt&go7e+AR9t7I?A!Uh zH*enlcSg}#^ZwbH*DS^$Y8Lzn)T>CAl^1O5lgi3#7EXeN*8%7cWBVnvH;12}k`%C6Y^xKday~FtVeypM$7t979pA%y$IM;1nwE*Mn#@7IAS3a`++7qrn z;kY;J^S7}ESLHg5^9&!8b^74A4Zvq>0W=0N2XlarwWbuaVQtU`QBPW;y3-N$KbT;y z^gplsCCy(&e^&aRQ~oW@pG5zx^gkp0YZZK!R-5(A!7fPuQv%u@S(6xScLXZ|Kh&C3 zOxA>~z7q>;V)(w2tqJ9e>Zy~j2HcK(Q7tL*tpgu!9Z}=-8m2DIJ-+9&p;52dYt_Mhf;EBfZynt8m7sC%G^|xqM+MsgexUW(o^J~pReVR) zbJK#g<@1g2`Pxhj;j79a#V*b{?o;aDag*8R7VePV(3-b9N=#C9*k@4Y}HrpLz&+Vu>N-}>;%;LTb zHLNgRZ!!V4m1wRLt1&*(Wc-jD?jc@bAg&JKJ{}79Qun^{ZP>u6Ofw1?1&jhl0i%FX zz$jo8FbWt2i~{$iKunz|sOW=Yc!~f&@p`yC7tjZ{I(qC-2pG)Z_j9)|NgR(E^zdhi zXElC;_^TRM=L{I={5-{PYw4#5Z}`HZ^Uiwef>^+TH|+!mo)x2@oO6ImkSqlZfg8d;#(RYCH_cXubu~x+j3tx zz5MBW@RK3Oi?%*b-6Q@C@vOG*Tuczot8thLR!UQxzcs(SSUj65LfP}ZAos4vgJKzi za=sMZzgI2gW6*Uk)ILQLtDpu7s*U%D=o4-Ylfpda4_LGxM8ncG@1qqcf2C z&3xuJzu)hD-#nIN-}|o}dEH_RRI}hupjpV7%R6k&E@^r1!X#MOZ-9jGO>k)QPPDM! zUW&_^vdWL=*ua+@-eI#L?6*^50-&tgN7xvnfKk9GU=%P47zK<1MggOMQNSo*6fg=H z1^$HsHCT%K6HYNohTuKki$%#6cpJFA2A}xaw3y#Imh-1!M9zN@^T_J<{Fe1HTAW)4<=RE^ zbJHYBld%qAo>Y<7>4TG71PC)7fW<+K!5r}H&OXU(&fJLQz}wu(OIGKM zMa%_nYiB~T6=W7fY#O|jWbM#~OsC7DK^yr=zJG57-5$>q4R(7GtMmQOOD6J!?dB?S z)ZbQI(4ys<6`bH)^5J{Ce~$P{HGS30eDE9 zD>BZCh4pQD&_~1>ka4;eUf(8u&)UmETfC1p^FCQlr}3<+`A#J4~vK+X%`Pizw z-wyMJuMe&Htw0*j-8$c4?#s_Xj(MZkH!5Fs7KFdP$3C_y&xp(8KcV(yI`y?0MpO;c z4C^0IK0IEggLSN{mFGW+`8x^a$MdV){7l~WPpRB>hWf_Z)9Sv3%)7eG@JzAH@)F(4 z7S^}SysbI$+<75`=<*Og`$OXS>wgw~8f1|FHrw z@svJUYcQWT;m&wf2i?I#J|?~HsUulK2AKYowvQjhc&*R zxU2Dl$Zh`IIqR=$>Jj{e;MnQs{}KLpE=7D-d#-aBK;+dpOa$}w3D283eeO*CaJB}G zieCvz?^L{?)_|ZOr-(0JUJQ(&(E96+b8y z;B>iq7Q}d;G(~ClOY@>M2c(&l<|S$JIkI`O1+o+=PoeS@D^J0S#EZm>ic^-nvXm}Q z`3jV;K=}%kuR!?<6t}P+>Sf=D%EC;^ug)%%gL91voT|)L7y9NUKPWc>D4`deZq(+5 zYLN9W%m?LDXoH5db7~Y+&Ij4*LN$OaX)I3qf9*0DfS(@mu9plJ3PbOUU5ZPndRGm| z?n2A=#}rrR$C2Rv`(d>1l2wN9#nb*kn{p(Yr2O3M#?NCC!wA^{wD)rp<0jlGC-Xc( XU(=@I@7BZi-x`;jvVD8`P~ZO#oCqw* literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-srlw.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-srlw.elf new file mode 100644 index 0000000000000000000000000000000000000000..f1e87436b177698357775f93ca508ded3303b9f9 GIT binary patch literal 10720 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 literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-subw.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-subw.elf new file mode 100644 index 0000000000000000000000000000000000000000..d6c7c3b12abfabfec99e5d4cff5869a62740562f GIT binary patch literal 10400 zcmeI2U2GIp6vxkD)Gt=E$crYeD%_N;O z_jk|z-*f+ScbeVI$sN0&*MxxZ(BMztmPag4Cp?U`GSWE@n?S?!0!RkANrF0^g2QW$ zZ3|>8jA0(l5p)@xt%Da_aooi?jNv%Oafls=9f%!>9f%!>9f%!>9f%!>9f%!>9f%!> z9rzaxlwi8e=`%L?DG#g%8VNsD1#1DtNwBm=Vp$5jbSib%YD>XkNCD+qucn}c-~atz z&%Cm1HNYBU>zz{lY{Tiv->~!~e5?WZr!?VI_n6KgbjkMjLEG2r4X3INV8piewCp>@ zxd!H&_?I_*{DFY`{vw@pQit@CTf*9##4743U+CcAIx)w?xo%qH8epD2^%cOxsSk9g z`l#uwG0baU9Jq-!m{RLGoTp<0)#-p?`Zzv~^9;Oi@w-?@mHM}a{rzJt8Yg{mj{3LAd0YFW z{v`De%#DxM;z|8!>fbE=st2|Ci*>APhSuNj1JxAzHH-Dk()yW)`Q%HT*1yq*8T4@y zE_vj;fgFVO=}gXt*?
+
{{ result_log }}
From d905445eb60c1a4f56df3e8140138ef713785163 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Fri, 27 Mar 2026 17:37:39 +0100 Subject: [PATCH 81/85] fix Sail validation and ui instruction --- .../assembler/sailAssembler/web/CNAssambler.mjs | 4 ++-- src/core/executor/sailSimRV/sailExecutor.mjs | 4 ++-- src/web/components/ArchitectureView.vue | 15 ++++++++++++--- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/core/assembler/sailAssembler/web/CNAssambler.mjs b/src/core/assembler/sailAssembler/web/CNAssambler.mjs index 81c969991..d0a8ad000 100644 --- a/src/core/assembler/sailAssembler/web/CNAssambler.mjs +++ b/src/core/assembler/sailAssembler/web/CNAssambler.mjs @@ -897,7 +897,7 @@ export async function dump(file){ instructions.push({ Break: null, Address: "0x" + dumptextinstructions32[i][0], - Label: dumptextinstructions32[i][4], + Label: [dumptextinstructions32[i][4]], loaded: dumptextinstructions32[i][2], user : list_user_instructions[i], L1_I: 0, @@ -959,7 +959,7 @@ export async function dump(file){ instructions.push({ Break: null, Address: "0x" + dumptextinstructions64[i][0], - Label: dumptextinstructions64[i][4], + Label: [dumptextinstructions64[i][4]], loaded: dumptextinstructions64[i][2], user : list_user_instructions[i], L1_I: 0, diff --git a/src/core/executor/sailSimRV/sailExecutor.mjs b/src/core/executor/sailSimRV/sailExecutor.mjs index 7d9b96476..2720d63ee 100644 --- a/src/core/executor/sailSimRV/sailExecutor.mjs +++ b/src/core/executor/sailSimRV/sailExecutor.mjs @@ -64,7 +64,7 @@ export async function SailTest32(){ document.app.$data.testing = true; document.app.$data.c_kernel = false; if (programs.length === 0) - programs = await cargarProgramas32("../../../../examples/RISCV-32-Sail-Validation/list.json"); + programs = await cargarProgramas32("examples/RISCV-32-Sail-Validation/list.json"); for (let index = 0; index < programs.length; index++) { @@ -119,7 +119,7 @@ export async function SailTest64(){ document.app.$data.testing = true; document.app.$data.c_kernel = false; if (programs.length === 0) - programs = await cargarProgramas64("../../../../examples/RISCV-64-Sail-Validation/list.json"); + programs = await cargarProgramas64("examples/RISCV-64-Sail-Validation/list.json"); for (let index = 0; index < programs.length; index++) { diff --git a/src/web/components/ArchitectureView.vue b/src/web/components/ArchitectureView.vue index b051cb082..2eb25c016 100644 --- a/src/web/components/ArchitectureView.vue +++ b/src/web/components/ArchitectureView.vue @@ -94,10 +94,19 @@ export default defineComponent({ updateState(){ this.result_test = document.app.$data.passed_test; if (this.result_test + document.app.$data.failed_test === ((architecture.config.name === 'SRV32' ? 89 : 122)) ){ - this.result_log = "Validation completed.
Your architecture passed the " + (this.result_test / (architecture.config.name === 'SRV32' ? 89 : 122)) * 100 + "%
of the validation tests." + this.result_log = "Validation completed.\n Your architecture passed the " + (this.result_test / (architecture.config.name === 'SRV32' ? 89 : 122)) * 100 + "%\n of the validation tests."; } }, + resetValidationState(){ + this.runned = 0; + this.result_test = 0; + this.running = true; + this.result_log = ""; + document.app.$data.passed_test = 0; + document.app.$data.failed_test = 0; + document.app.$data.testing = false; + }, }, mounted(){ coreEvents.on("update-validation", this.updateState); @@ -273,7 +282,7 @@ export default defineComponent({ + @ok="resetValidationState"> This validation test runs {{(architecture.config.name === 'SRV32' ? 89 : 122)}} RISC-V programs.
These programs are taken from the official RISC-V test repository (
riscv-tests), where the correct operation
of the full instruction set of the RISC-V specification is verified. @@ -292,7 +301,7 @@ export default defineComponent({ :max="architecture.config.name === 'SRV32' ? 89 : 122" >
-
{{ result_log }}
+
{{ result_log }}
From def28d976ab09c93f0235207f471629d28e3f2b9 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Tue, 7 Apr 2026 11:17:49 +0200 Subject: [PATCH 82/85] fix(IO): remove unnecessary writeRegister on main keyboard read function --- src/core/executor/IO.mjs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/core/executor/IO.mjs b/src/core/executor/IO.mjs index 0ee8aa44a..e57732422 100644 --- a/src/core/executor/IO.mjs +++ b/src/core/executor/IO.mjs @@ -430,8 +430,6 @@ export function keyboard_read(fn_post_read, fn_post_params) { } const val = fn_post_read(document.app.$data.keyboard, fn_post_params); - // Important: Final line char (/=) couns also as a char in lenght - writeRegister(BigInt(val.length), fn_post_params.indexComp, fn_post_params.indexElem); document.app.$data.keyboard = ""; // clear input From 267b7f5fb148927148133ec7cccf809e2f69aba5 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Tue, 7 Apr 2026 12:06:22 +0200 Subject: [PATCH 83/85] fix(syscall): fix read/print of UTF-8 strings from user --- .../creatorAssembler/creatorAssemblerBase.mjs | 13 +- src/core/capi/syscall.mts | 10 +- src/core/executor/IO.mjs | 4 +- src/core/executor/devices.mts | 11 +- .../examples/test_mips_example_010.s.snap | 5 +- .../examples/test_mips_example_017.s.snap | 130 ++++++++++++++++++ .../examples/test_riscv_example_017.s.snap | 126 +++++++++++++++++ tests/arch/mips/correct.test.mts | 1 + .../correct/examples/test_mips_example_010.s | 4 +- .../correct/examples/test_mips_example_017.s | 34 +++++ tests/arch/riscv/correct.test.mts | 1 + .../correct/examples/test_riscv_example_017.s | 34 +++++ 12 files changed, 351 insertions(+), 22 deletions(-) create mode 100644 tests/arch/__snapshots__/mips/correct/examples/test_mips_example_017.s.snap create mode 100644 tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_017.s.snap create mode 100644 tests/arch/mips/correct/examples/test_mips_example_017.s create mode 100644 tests/arch/riscv/correct/examples/test_riscv_example_017.s diff --git a/src/core/assembler/creatorAssembler/creatorAssemblerBase.mjs b/src/core/assembler/creatorAssembler/creatorAssemblerBase.mjs index 1fa0fbb46..5abb5cddb 100644 --- a/src/core/assembler/creatorAssembler/creatorAssemblerBase.mjs +++ b/src/core/assembler/creatorAssembler/creatorAssemblerBase.mjs @@ -377,16 +377,9 @@ function loadDataIntoMemory(data_mem, wasmModules) { break; case DataCategoryJS.String: { - const encoder = new TextEncoder(); - let currentAddr = addr; - - for (const ch_h of data.value(false)) { - const bytes = new Uint8Array(4); - const n = encoder.encodeInto(ch_h, bytes).written; - for (let j = 0; j < n; j++) { - main_memory.write(currentAddr, bytes[j]); - currentAddr++; - } + const bytes = new TextEncoder().encode(data.value(false)); + for (let i = 0n; i < bytes.length; i++) { + main_memory.write(addr + i, bytes[i]); } const stringLength = Number(size); diff --git a/src/core/capi/syscall.mts b/src/core/capi/syscall.mts index a3dd571e3..c5708af84 100644 --- a/src/core/capi/syscall.mts +++ b/src/core/capi/syscall.mts @@ -68,14 +68,16 @@ export const SYSCALL = { break; } case "string": { - const buffer = []; + const bytes = []; // read byte by byte until a null terminator is found for (let i = 0; i < mainMemory.getSize(); i++) { - const byte = mainMemory.read((value as bigint) + BigInt(i)); + const byte = mainMemory.read(BigInt(value) + BigInt(i)); if (byte === 0) break; // null terminator - buffer.push(String.fromCharCode(byte)); + bytes.push(byte); } - const msg = buffer.join(""); + // Decode the UTF-8 data to a string + const buffer = new Uint8Array(bytes); + const msg = new TextDecoder().decode(buffer); display_print(msg); break; } diff --git a/src/core/executor/IO.mjs b/src/core/executor/IO.mjs index e57732422..a9857c6aa 100644 --- a/src/core/executor/IO.mjs +++ b/src/core/executor/IO.mjs @@ -175,8 +175,8 @@ export function kbd_read_string(keystroke, params) { const bytes = new TextEncoder().encode(keystroke); // Write the string to memory byte by byte - for (let i = 0n; i < keystroke.length && i < params.size; i++) { - main_memory.write(BigInt(addr + BigInt(i)), bytes[i]); + for (let i = 0n; i < bytes.length && i < params.size; i++) { + main_memory.write(addr + i, bytes[i]); } if (architecture.config.name.includes("SRV")) { diff --git a/src/core/executor/devices.mts b/src/core/executor/devices.mts index f155b53a7..4c16fb46f 100644 --- a/src/core/executor/devices.mts +++ b/src/core/executor/devices.mts @@ -243,14 +243,17 @@ class ConsoleDevice extends Device { // read byte by byte until a null terminator is found const mainMemory = main_memory as Memory; - const buffer = []; + const bytes = []; for (let i = 0; i < mainMemory.getSize(); i++) { const byte = mainMemory.read(BigInt(addr + i)); if (byte === 0) break; // null terminator - buffer.push(String.fromCharCode(byte)); + bytes.push(byte); } - this.#write(buffer.join(""), DataType.String); + // Decode the UTF-8 data to a string + const buffer = new Uint8Array(bytes) + const msg = new TextDecoder().decode(buffer); + this.#write(msg, DataType.String); break; @@ -304,7 +307,7 @@ class ConsoleDevice extends Device { const bytes = new TextEncoder().encode(keystroke); // Write the string to memory byte by byte - for (let i = 0; i < keystroke.length && i < length; i++) { + for (let i = 0; i < bytes.length && i < length; i++) { mainMemory.write(BigInt(addr + i), bytes[i]!); } }); diff --git a/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_010.s.snap b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_010.s.snap index ebe2c0e70..9a0694c38 100644 --- a/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_010.s.snap +++ b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_010.s.snap @@ -206,6 +206,9 @@ snapshot[`mips/correct/examples/test_mips_example_010.s 1`] = ` "77": 2, "79": 4, "83": 12, + "84": 3, + "85": 224, + "87": 8, "9": 32, }, registers: { @@ -214,7 +217,7 @@ snapshot[`mips/correct/examples/test_mips_example_010.s 1`] = ` "4,a0": "0x20004b", "5,a1": "0x4a", "8,t0": "0x4a", - PC: "0xfa0", + PC: "0xffffffff", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_017.s.snap b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_017.s.snap new file mode 100644 index 000000000..278dc5ad8 --- /dev/null +++ b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_017.s.snap @@ -0,0 +1,130 @@ +export const snapshot = {}; + +snapshot[`mips/correct/examples/test_mips_example_017.s 1`] = ` +{ + display: "Insert the string: +String in UTF-8: ∀ ∫ ∇ ∈ 🠬 +", + error: false, + keyboard: " String in UTF-8: ∀ ∫ ∇ ∈ 🠬 +", + memory: { + "0": 60, + "1": 1, + "10": 32, + "11": 32, + "12": 32, + "13": 2, + "15": 4, + "19": 12, + "20": 60, + "2097152": 73, + "2097153": 110, + "2097154": 115, + "2097155": 101, + "2097156": 114, + "2097157": 116, + "2097158": 32, + "2097159": 116, + "2097160": 104, + "2097161": 101, + "2097162": 32, + "2097163": 115, + "2097164": 116, + "2097165": 114, + "2097166": 105, + "2097167": 110, + "2097168": 103, + "2097169": 58, + "2097170": 32, + "2097172": 83, + "2097173": 116, + "2097174": 114, + "2097175": 105, + "2097176": 110, + "2097177": 103, + "2097178": 32, + "2097179": 105, + "2097180": 110, + "2097181": 32, + "2097182": 85, + "2097183": 84, + "2097184": 70, + "2097185": 45, + "2097186": 56, + "2097187": 58, + "2097188": 32, + "2097189": 226, + "2097190": 136, + "2097191": 128, + "2097192": 32, + "2097193": 226, + "2097194": 136, + "2097195": 171, + "2097196": 32, + "2097197": 226, + "2097198": 136, + "2097199": 135, + "2097200": 32, + "2097201": 226, + "2097202": 136, + "2097203": 136, + "2097204": 32, + "2097205": 240, + "2097206": 159, + "2097207": 160, + "2097208": 172, + "2097209": 10, + "21": 1, + "23": 32, + "24": 52, + "25": 33, + "27": 20, + "29": 32, + "3": 32, + "30": 32, + "31": 32, + "32": 32, + "33": 5, + "35": 100, + "36": 32, + "37": 2, + "39": 8, + "4": 52, + "43": 12, + "44": 32, + "45": 4, + "47": 10, + "48": 32, + "49": 2, + "5": 33, + "51": 11, + "55": 12, + "56": 60, + "57": 1, + "59": 32, + "60": 52, + "61": 33, + "63": 20, + "65": 32, + "66": 32, + "67": 32, + "68": 32, + "69": 2, + "71": 4, + "75": 12, + "76": 3, + "77": 224, + "79": 8, + "9": 32, + }, + registers: { + "1,at": "0x200014", + "2,v0": "0x4", + "4,a0": "0x200014", + "5,a1": "0x64", + PC: "0xffffffff", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_017.s.snap b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_017.s.snap new file mode 100644 index 000000000..a6befab79 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_017.s.snap @@ -0,0 +1,126 @@ +export const snapshot = {}; + +snapshot[`riscv/correct/examples/test_riscv_example_017.s 1`] = ` +{ + display: "Insert the string: +String in UTF-8: ∀ ∫ ∇ ∈ 🠬 +", + error: false, + keyboard: " String in UTF-8: ∀ ∫ ∇ ∈ 🠬 +", + memory: { + "1": 32, + "10": 8, + "11": 147, + "15": 115, + "17": 32, + "18": 5, + "19": 23, + "2": 5, + "2097152": 73, + "2097153": 110, + "2097154": 115, + "2097155": 101, + "2097156": 114, + "2097157": 116, + "2097158": 32, + "2097159": 116, + "2097160": 104, + "2097161": 101, + "2097162": 32, + "2097163": 115, + "2097164": 116, + "2097165": 114, + "2097166": 105, + "2097167": 110, + "2097168": 103, + "2097169": 58, + "2097170": 32, + "2097172": 83, + "2097173": 116, + "2097174": 114, + "2097175": 105, + "2097176": 110, + "2097177": 103, + "2097178": 32, + "2097179": 105, + "2097180": 110, + "2097181": 32, + "2097182": 85, + "2097183": 84, + "2097184": 70, + "2097185": 45, + "2097186": 56, + "2097187": 58, + "2097188": 32, + "2097189": 226, + "2097190": 136, + "2097191": 128, + "2097192": 32, + "2097193": 226, + "2097194": 136, + "2097195": 171, + "2097196": 32, + "2097197": 226, + "2097198": 136, + "2097199": 135, + "2097200": 32, + "2097201": 226, + "2097202": 136, + "2097203": 136, + "2097204": 32, + "2097205": 240, + "2097206": 159, + "2097207": 160, + "2097208": 172, + "2097209": 10, + "21": 69, + "22": 5, + "23": 19, + "24": 6, + "25": 64, + "26": 5, + "27": 147, + "29": 128, + "3": 23, + "30": 8, + "31": 147, + "35": 115, + "38": 5, + "39": 23, + "40": 254, + "41": 101, + "42": 5, + "43": 19, + "45": 176, + "46": 8, + "47": 147, + "5": 5, + "51": 115, + "53": 32, + "54": 5, + "55": 23, + "56": 254, + "57": 5, + "58": 5, + "59": 19, + "6": 5, + "61": 64, + "62": 8, + "63": 147, + "67": 115, + "7": 19, + "70": 128, + "71": 103, + "9": 64, + }, + registers: { + "x10,a0": "0x200014", + "x11,a1": "0x64", + "x17,a7": "0x4", + mtime: "0x12", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/mips/correct.test.mts b/tests/arch/mips/correct.test.mts index 2f8c3d80e..96fbc690b 100644 --- a/tests/arch/mips/correct.test.mts +++ b/tests/arch/mips/correct.test.mts @@ -9,6 +9,7 @@ execution_tests( new Map([ ["test_mips_example_009.s", ["123\n", "456\n"]], ["test_mips_example_010.s", [long_str.length + "\n", long_str]], + ["test_mips_example_017.s", ["String in UTF-8: ∀ ∫ ∇ ∈ 🠬\n"]], ]), ); execution_tests( diff --git a/tests/arch/mips/correct/examples/test_mips_example_010.s b/tests/arch/mips/correct/examples/test_mips_example_010.s index 7a926d8bf..c2fe4205f 100644 --- a/tests/arch/mips/correct/examples/test_mips_example_010.s +++ b/tests/arch/mips/correct/examples/test_mips_example_010.s @@ -28,4 +28,6 @@ main: syscall li $v0, 4 - syscall \ No newline at end of file + syscall + + jr $ra diff --git a/tests/arch/mips/correct/examples/test_mips_example_017.s b/tests/arch/mips/correct/examples/test_mips_example_017.s new file mode 100644 index 000000000..5060fbaad --- /dev/null +++ b/tests/arch/mips/correct/examples/test_mips_example_017.s @@ -0,0 +1,34 @@ + +# +# Creator (https://creatorsim.github.io/creator/) +# + +.data + string: .asciiz "Insert the string: " + space: .space 100 + +.text +main: + # print "Insert string..." + la $a0, string + li $v0, 4 + syscall + + # read string + la $a0, space + li $a1, 100 + li $v0, 8 + syscall + + # print enter + la $a0, '\n' + li $v0, 11 + syscall + + # print string + la $a0, space + li $v0, 4 + syscall + + # return + jr $ra diff --git a/tests/arch/riscv/correct.test.mts b/tests/arch/riscv/correct.test.mts index 40942c730..445b6e377 100644 --- a/tests/arch/riscv/correct.test.mts +++ b/tests/arch/riscv/correct.test.mts @@ -9,6 +9,7 @@ execution_tests( new Map([ ["test_riscv_example_009.s", ["123\n", "456\n"]], ["test_riscv_example_010.s", [long_str.length + "\n", long_str]], + ["test_riscv_example_017.s", ["String in UTF-8: ∀ ∫ ∇ ∈ 🠬\n"]], ]), ); execution_tests( diff --git a/tests/arch/riscv/correct/examples/test_riscv_example_017.s b/tests/arch/riscv/correct/examples/test_riscv_example_017.s new file mode 100644 index 000000000..c091b1d8b --- /dev/null +++ b/tests/arch/riscv/correct/examples/test_riscv_example_017.s @@ -0,0 +1,34 @@ + +# +# Creator (https://creatorsim.github.io/creator/) +# + +.data + string: .string "Insert the string: " + space: .zero 100 + +.text +main: + # print "Insert string..." + la a0, string + li a7, 4 + ecall + + # read string + la a0, space + li a1, 100 + li a7, 8 + ecall + + # print enter + la a0, '\n' + li a7, 11 + ecall + + # print string + la a0, space + li a7, 4 + ecall + + # return + jr ra From 0d2875401c9fba91f1185b971731a4be156d12b0 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Tue, 7 Apr 2026 15:36:08 +0200 Subject: [PATCH 84/85] fix tohost errors on load elf_sail_file --- .../sailSimRV/wasm/riscv_sim_RV32.wasm | Bin 3659060 -> 3662426 bytes .../sailSimRV/wasm/riscv_sim_RV32vd.wasm | Bin 3739178 -> 3739574 bytes .../sailSimRV/wasm/riscv_sim_RV64.wasm | Bin 3658212 -> 3658240 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/core/executor/sailSimRV/wasm/riscv_sim_RV32.wasm b/src/core/executor/sailSimRV/wasm/riscv_sim_RV32.wasm index d430dc84775bc6811689bbe8b9f35ae4ef249828..8be9b78e065adbccb38792931793068809071ff8 100755 GIT binary patch delta 64383 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 #DAnpbW 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 diff --git a/src/core/executor/sailSimRV/wasm/riscv_sim_RV32vd.wasm b/src/core/executor/sailSimRV/wasm/riscv_sim_RV32vd.wasm index 58499326c20a84aced5080560ee9010859410dbe..ae74c3de3554cc06445640a2b72f717bee8b8227 100755 GIT binary patch delta 58477 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 Hf8qZFU+OyV delta 57844 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

$2k6$wr-{84b$o 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 diff --git a/src/core/executor/sailSimRV/wasm/riscv_sim_RV64.wasm b/src/core/executor/sailSimRV/wasm/riscv_sim_RV64.wasm index 9aa1dd73a226561d3b236f2b475f4f48284ca619..4b9eb37bc35de816c32ab55ae8011f9d2f6fbccb 100755 GIT binary patch delta 991 zcmZwFJxmlq6bJB~*#+*r6Ht)@Zr6D;cgUTe;LaTu7PlKQQGs}km4VU#jiE*(XaE}v zEw&)R56~lchr}4yLJ|us)WX8p7!oWjL<<@;vGacxh8T)p-oCjvFK_1N>)blKKEKYE zFT`2tMln8Bj5FY1f(12D3w02IDC~k5RO@#`Jv2Zg?18_N&w8KH@fDB~e5FCaha1@Tgap(+-@vi9^wh??Tb$xEm@Rv+Vie>pLCY!5q zmC3}^yM-<|5x!e+Uob|&_@X<*MBqGe-`j#rX~lRUW%gJF61y4M9-UD(J}9ut?j6(z zW%q+g$cHL!wwua+=9<4e&c`ymMJ7E%l3Ae0QNvJng{Y$HCsmxxo6@8t(Xb-#wb8Fc z@V4SQQSu5{89};PaeLAG)RHR^2A13bM&SywD@fN5=#~V<$RO&K&cE@Tzf;u<{T<`~ z7P=!UVpLm_HiX127;T`IfS9K9zIQ!>Q`vzuimvX z+)xgsMwIOt=aj%TI36330w;5DGEr9CHz$dWWlcjyh{`ybAUYQ$+I0~_54G#34T!Bd zJ=oXj-@j{B3mIAd@`lmKl#%BJB!#Pz$8gQm<~^!8Ginw5wM|AmxHq9s9wX+{wBjX| z%=70pWDzSVC(oCwpAr02Qk3WAzgbDy;jamO(PT2{o7B`s*i*Jphz$$Xh|>9Lw8I;d z`b`r?J3FKM>yr3)JtF(^h&19X=C5ZP84jxK9wowO5A_%G|BAUo+bSxLQGxrry{KE6 z2p1N2*s!v_<=oN^7314m&OX!p6M8+E$_+8Z*sa|8!CLazu%z(Px15L98qRLyG)MgS gBNvG_$voaTUPf~_-Z)~So3Bo7Zso$wt^CimKa_&{lK=n! delta 925 zcmZwFKTH#G6bJD8-4!TY`J+?{^p4-VUyHOTD&DWf!J*eE@edNaIKo5>uoxx>V)$cP zjGGQOFh~?B!4?REXGn+)kN`%VTnGsc4x$4SgPUJ!VufjWdhI$CX8EAkIG(rJ|omaMxF`pP}9@ z*q=3ye6VQ8yLcfTdz4-tS4U%NqZM`(i)$(JcPNT5io}beCMyD@J+?Fo6CV=XSyy@m zx!XnCtmIA#C&Ne&i*^rsUtP2ilL zzqo9xB%R9h7Pj!>BqvlH7la%sr=+S7xzUJ>;^<~X9w69JnLrqf%AsqVBE16b(i_ix zF;x*JMTUjpD7OURF_;b;wg{V<*o+E7O>0?Vqj62K{KN~`j1%2(L#;A{p$A*#QY~Ur zLiXQr$0uZckm-1y)a<-2>mKo?(tC%Dm^(iquW)A!7fY(kW#l7&nx^t1oKy>?EH6y2 zW>VhMnBfj&B{if=#a-IG55*{(J&vaLA}cq8_``u|*;^6DJ9CJP`@@zJV0wB#UdJ%L zFs=*oKE0G*HSD}JCz}{~+jB_&y Date: Tue, 7 Apr 2026 20:18:40 +0200 Subject: [PATCH 85/85] CREATOR version updated --- docs/version-management.md | 8 ++++---- package.json | 2 +- src/cli/commands/info.mts | 2 +- src/web/components/general/AboutModal.vue | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/version-management.md b/docs/version-management.md index 430c839e9..d44655fe3 100644 --- a/docs/version-management.md +++ b/docs/version-management.md @@ -12,7 +12,7 @@ The version is determined using the following priority order: 1. **`CREATOR_VERSION` environment variable** (highest priority) - Allows manual override for testing or special builds - - Example: `export CREATOR_VERSION=6.1.0-rc1` + - Example: `export CREATOR_VERSION=6.1.1-rc1` 2. **`CREATOR_CHANNEL` environment variable** - `CREATOR_CHANNEL=nightly`: Generates `nightly-YYYYMMDD` format @@ -27,7 +27,7 @@ The version is determined using the following priority order: ## Version Formats ### Stable Channel -- Format: `major.minor.patch` (e.g., `6.0.0`, `6.1.0`) +- Format: `major.minor.patch` (e.g., `6.0.0`, `6.1.0`, `6.1.1`) - Source: `package.json` version field - Used for: Official releases with version tags @@ -168,7 +168,7 @@ checkForUpdates(currentVersion); 3. Users will see update notifications daily if they run nightly builds ### For Stable Releases -1. Update `package.json` version to proper semantic version (e.g., `6.0.0`, `6.1.0`) +1. Update `package.json` version to proper semantic version (e.g., `6.0.0`, `6.1.0`, `6.1.1`) 2. Remove prerelease identifiers from package.json version 3. Set `CREATOR_CHANNEL=stable` or leave unset 4. Create a git tag matching the version @@ -183,7 +183,7 @@ checkForUpdates(currentVersion); // For development/beta - keep prerelease: { - "version": "6.1.0-beta" // Automatically treated as nightly + "version": "6.1.1-beta" // Automatically treated as nightly } ``` diff --git a/package.json b/package.json index 11d754988..4e04622b2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "creator", - "version": "6.1.0", + "version": "6.1.1", "private": true, "type": "module", "scripts": { diff --git a/src/cli/commands/info.mts b/src/cli/commands/info.mts index 3facdd65d..ce6b8805a 100644 --- a/src/cli/commands/info.mts +++ b/src/cli/commands/info.mts @@ -56,7 +56,7 @@ export function handleAboutCommand(): void { "║" + colorText(" 🚀 CREATOR Core Version:", "33") + ` ${creatorVersion}`.padEnd( - 35 - creatorVersion.length + " 6.1.0".length, + 35 - creatorVersion.length + " 6.1.1".length, ) + "║", ); diff --git a/src/web/components/general/AboutModal.vue b/src/web/components/general/AboutModal.vue index 6c852beba..546958768 100644 --- a/src/web/components/general/AboutModal.vue +++ b/src/web/components/general/AboutModal.vue @@ -29,7 +29,7 @@ interface Props { defineProps(); const contactMail = "creator.arcos.inf.uc3m.es@gmail.com"; -const projectVersion = "6.1.0"; +const projectVersion = "6.1.1"; const projectLicense = "LGPL-3.0"; const repositoryUrl = "https://github.com/creatorsim/creator";

5jTx4I*rNWm_cE!yt;N?Jz*_N z!&>$WtE<-2Tnp6^)E?#rbyFQ>f&Q&&t|O>f%@69P8a#pbXLVEq)r$Vk*Cwy4!s@K8 zit6Cpd9_5IoWu3i9*Jt9{Cnv~wM>%!GRmhK=pMDy5&1DKEWNg5E^ju_ZOM)Nn4$Hx z&*kF1;W}FKqZ($(zf_n{x%29X_DG%9_h4)8J!*;k01el-s5xKi*IU;a)uL;tpTuWM zV?fXzuH!v0G^^tZGSCLbfcCZK3sbYYt|Ttu&#UrTl-I24OagO6TFi=p;Io435Q8{B z`mxdso`aSrz(3QD&*JvrdD#4Hbaa@;rN>9?KshMLzE0s^GvBW8@0jmX_z%ooh5yL>w8DR4eqQ0fF#ks3zcc?$;n$gW zCR*2Zi}@~v|INIt@FZA7LF`t#m>_$L9! zlk)jJd!PLC%=5}~$wYx*UWG%SJ5uhmtRwceH+H_*TY`%1*lyuX+j2`4a4W@fc>Pvo z*tH98X{hA5FjO2pc+@V~$1S_;4wpuuhFXl`Z{ e@;$O~ktS$5lqS&s?R$;CP7A}MSBB`Uj{gTcp^m`- literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-sw.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-sw.elf new file mode 100644 index 0000000000000000000000000000000000000000..6ca080c519dee3968299dbc630f6c6848934e9af GIT binary patch literal 14448 zcmeHOU2GIp6h5=tA~ecwTaYSHhaEJiaXSl@^#^hB|A7ZYW2z69Wmwxa(ycqA=!*^* zpEQ%=m>9DJS1`sb3RM&Lq1bE<8circA}<)a7-C}LUyVQU0a?$z_sn$nq6x;=dy~Cq z?svcMoHJi{buvB}q!zk+zJp@o)Sb>sv zu*27Mu;TT51+VsF`hBP@)wHs)kMS~4orFrsTUhor6Rc(RJ1O7y>CSQo@+!t#jORkN zx7>leimzqB>Zxy_eBY(t>?mVhFy3ao8dMKNinJonqMzjqnWZOrvI%KE#R@|_L)JIHvo#$11R272mg%6BI0FYqPoZ;bVKqu^y` z()agwE!B1ob?<`nhMtJLun#?aw7;w5c|*Qd25aw$6y^Lnomw$~+y%aSys>}34oeaM z-H|&^y^x4Nb^VF~)GY9|aj;%J(dTP5+{0YQCn_cP`1Fz$$kjHSH1tl0_GwU^LEM{} zwtDN=cSpLwkLYmr%FX9|?YPj@4xB>WQK6gqvK!Bfkzm>lP(6lw-po<-@7hq?!?b5e zTRB~FYlnqaJI1tJzmn;9q8|6XV~0_Hb*R6b>1Tz0{M0n+Czyune_>q1v{QI)aL+q7 zVRhA4gj!x3G=9J1r;nE0@dI;O?K56`6~Aw-I*I$<Jy z@SX#|dlB>2C-8iAhFX5lnI`SdYBdgPO0M1&^lk)x_ag2kyHI~wsOR^*sagLa(^bJV zFh^(T_d;BI$xiFa`hrl)Yj0`NP8|~3HHngoK4Kmt@OvR*UayAw_E67jk2dT1&x_|U zjV{aqq2KFq?ezlckx%Co_0}?zKg%pv1AliXK2JOOGp+ggX2+q1t*D_KP!1>ulmp5E z<$!WPIiMU+4k!nd1IhvAfO0@Npd3&RCKa{R*nw-MiMZ|yTr_)4u6A0>RFgzq5Sk?`jT-y`8Kay$yl^w#_@5&ww9 ze}(WLB>Z*47vbMk@JpJ?JZi8`!r$R|6m+TXLE;Zf{EvvgQsRG1{5=x?Q^LQJ@M*&1 z(bhgs623{oPZR#Kgnvu;Q3?N%@JriT^Z!oxT@wBm;jV*3BQN%9tp?ujgNpRm=gX7 z;UM9Ua~vmV_5VrY%XyyWIKGt>yhp^8I86M+|LOVD=WHMCv#f_6zB|8ld$Itww*bWS5N47nY8_Ydpo zSqC1==AQr#tP!DKgd0Uz%UL&xMOp+}-7HoqlT(6Kimw>Rilnd#kCZ$`*;AB0h57kD zrA|@q6s22Dc~)au-ZbS~y#_|Jwk>M$S=Npd}j#j^az z`M;;7n1P)t{_dH`=JG)An}zSGi9N_r48k>d!SwhWCq{7Ibg>lQBeaJhGk3|ak~p{M zgLBUgDh>)_fitxgu9+6UO)nTG2|sTWTkRNbz|VYQ_E21aG3=c%7XIuPi|1K^rXekX SeGmVWe#crNqBLO!S^qaEv#nSF literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64ui-p-xor.elf b/examples/RISCV-64-Sail-Validation/rv64ui-p-xor.elf new file mode 100644 index 0000000000000000000000000000000000000000..7403f0533cf577e1df16b1b7f1c86da16600c1c1 GIT binary patch literal 10080 zcmeHNO>7%Q6n^8M(DIXA*Mx@t1UGFEDpInx3n{cx&972XL?}fq63BHo+s2}agLexp z7goK%0a$btRK|ONf;F4Z@sY-bK7P;wg)YaV^4~6 zXK8K*=WF;WXb%2BK495JKa#{KT*YB3n3yNdv2m>xy%qzUr#8L>m_K`7 zHS5Egxjm!ZSU9$VF=&G8X(qfcHn`&{McK@5y7`|n(CAlS zzII!27JdY$b{ia)0ewsBwT9{{^ER|`F7UbO)D=iGrU)P8s|~r%LO*kA{jS3_&^NRW zH=vE{xJrP32zhG#ZHE;=S6i<(Fe^UCsW-u~T?pq#9v%~$1pR^5%WK7dxfvG!QP4kK zdT}kE{FN}DIgEe#1=;6vQw66VYs_%ZoL}0X#(K+hx^qp(6-dW6fD_BWjV%XPd$p~D zK6LdNkLM2hrm@}uu1%av*8C#qgID*7n0j^hIAk6kQ>Pw_+<(tM=H%xy6qZku*Ju1r z`S3XSo(bwA=d#52Pd+RcKaT(hkEN5xbfFS`7fc5<~Gemeo!gms0 zknnNB_e!{U&wzo9AEEiH()=Rf-}MFKnIc?cLHtd^rzE^e_y-bxhVZW?+$P+W@b?Md zfxm}%ht$;we^$ajCj3JQ|BUc!68;6@gYh8$CBk2q@UIB}T*AL0{JMmHPxvE=ApZ}9 zTN3^=;foUf3*jpg{u|+YlR^I92|q32w+L@a_+NzIE7d*8H!kk;2?@WCa7)4m2(L@{ zR>Chz_z2nnPS(ezc zM3*JL9P#CdFGqYi;>!_Vj`(uKmm7zvMr zI17$fD>I%-FlwHeu}a6#T2*1E{UggbZH<;^%NC51re2-?YquE*_-^su)e>a3XXt&e z&U;GF7ofyI(+4X2U hYZJ!Jfj zy#0D)Db9TU?#g?*ra{(p_zT1+qO3+A*lG*hG9NC0jx!TbVzDI(&Cz@$JZ6gpKFVws zNB5YZQ#O5IGa<^`i);Xp*(^_BWt0L+0i}RaKq;UUPzopolmbctrGQdEDWDYi9}0M| zR}2>IYHUP6o=FR_(FHO=?JXdBT9`2)vJ7KLiUw?e0W_9;WPpc%|Hpsc_;BV0fO-4v zhhFl18oX4yPs|d0s{_P4x)yXVIl(HF`S>;)$9j?mUHwh8IM(0bb2}o|#&`#N&57{` z0x|bDUB@b!V4Z%Tk;^5lA~9mkgaF?YV+a%S*+&rA%QORaq{dUNP^CX-lm zfRqPkd0z4r=CylsxJG9(jkOw(=LXOA5+m7-5@2~l^gBbWbrs0$V5XPg9uc(TJJ z_c4&0{nHj|mfzDV7+~qs5bHMFIdy6HsD?JycVO{&T0gJDLM_H}rfE)A8-BL42L{W@ z)yHz=JQMRqb$5Z72Pco!meqA8U)K-x{ZHiTO4<7Rs6`gf-Xp8&7Le(|Q)4yJT4+bj zM>+I8M)mAb{R?pojCc~e)(6t<7ka>SFf7y+IevzRKu+~FGV8FjLLv>~8&h~*r`Vav zpP#^lJ={_?rGQdEDWDWk3Md7X0!jg;fKosypcHrl3KaN_f=FJffVT)n|MwS@^j<&_ z?x%9>6ayNpfVd|h0_FrSO8gbUYZ5;%_*)X^_Y5?U`DGFRP>Qb$eu%$6FjqX*1utvk z{1d^e688mPmH2hRwxb3j%wZIEET|YMt z-5{(l!<9yJ3z&b7n<_W2a`PHD=efDS&FkDOIl?XpyDY3&X{ieBMi7A8TCWGqjaDPP z>btP!ZZuoDaXkndeh77pf-Ana&8mk=aD6*$tf38kZZ|V8bgzY#W~&)OMZ7E1?{Obz zaRK@%vb#Whv4|OQpJ;S%h|fVy*v!0)4$T+Wj2?ZT*gRr%e~1r{<L(eJf?%RjlmgDSaL>dN{50Kqn%>i_@% literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64um-p-div.elf b/examples/RISCV-64-Sail-Validation/rv64um-p-div.elf new file mode 100644 index 0000000000000000000000000000000000000000..c33b9549c23e91aa3d3874953ffbf9b8a6b1c832 GIT binary patch literal 9536 zcmeI2%WD%s9LImVNvc(Jx28T&(Z!+%k#x1y)(5zViU$v(f*ypJPS-YQvtehn3W7^7 zo|Nb!9_kDK0`a29;Khre7tcYwdWiTqN#k!G+oq!))awlFd}ltt-#qf25J)mNjvPN~ zTNY%+hA*Ic31qY@K=E~APJ(NFCAV$BJom+OfZ3V5E^Tb_>44{dd^GkI_u$L94&gehhWS1z zczz0jRkY5-&|A+=SNf1z9*|9~6)8057WlhPYWYA`anAFfbYwo~0gyGVlq4jO*~q`zg6jlS@WBo?H1`ta=fgn!*$QWu&y+!W)0alklW954e79FHauO;tTbb@_RDi}|xZ@TTDWG#BT;7W~(F-Y6bq_dxhaEIvMB zU5&#ao2m~IGBQnv&Wx5Kh(j8(@|BRVCREd_uClPqqREIdn5@*sFNNjsDhcbX z8r2|TlVRM|XCYElgnrkA}p@raZe(Go@DUiMM5q)50XocBQZJ2PF{WV+FP3hg4ZgT`q%r_tLmzM z4GYs-H;;W`fF#f3jWN10%esIYX$l!`in!{A~)1QnTE5zrTvELl;Hxhl#v&lArW z5?z6)u=tP_by5ZZx#r_EwqhNy4p;}Q1J(iSfOWt+U>&dySO=^F)&c9l|8O9IZkdh; z6Wq&yY#Efe*8wsl^brtuP}=E1R`tA9Qubg5JP^6$oCgX1{^zf6f4_4tz*z9@yQF`A zKtGM%5WfOH;ctGv;5xK(Hl$}@RK+i3%-#NgcHFN~F?PRFeG57_!2A$DQONNHf$sZD z%u}uSP~GvTL(W%l6@8C8K2Y2z=4AM+w`9=;%=4c<23T6SnJ|w;|Z}&3PH#ra;nY+*xw6WzC8r)1VDE6JPzH}oIicO;w~*dU*XF?1K*%GR=5)a z@q63UTn`3nF5JHp0U7CSRdW^j86cy*%}dZ9@J_!}#eIk|OWQGCUM+E45B7ibzQ13X zvn|$FdEW1)wr z>O&WY+hQHC4p;}Q1J(iSfOWt+U>&dySO=^F)`9VUOlzgMY4hWbi|pe`9cU&%gnbpV#^CjQqOhWqki2o4T6Te8gGL zFKIq$@Ko~)2EVTPyumZg?;89E&7T;2QS)C6{-fr<8~mQ;qsG1-BKO641?%_q=wEnO za&emL^IuB7ah_M2NBKPvF%nCNANgE^!#JC3j}vm_^p)>Ul3D_3Ok-BR8WWbJz|uxL zZ(mEBEUvR;HlYk=8?EWfaXp?Vaho-h79?yoP75)MDXV`87aPsXAlv(uOei^^1^I&@jRe#dEf0K~`+|4^)&07Kj^`&X`nj4`32(ybnMr%`FM&id$Neyq>XTlxdbH<`@u7 zp15IgA<66cGyupn>!+|0qO*>i}zn~%Lg*j z-7NdQ=*zzNyjB2Yv^&T_^vUxnAZ~YX1<*%av&diBifhJs$#8drCc}xE@FI>FS_D@6NN@G%Aaw*0UN5@32av*bV`+27%H{_G3l#FJvIwCr^Ua^E;|NP@0M8i*Lgh<-8|R yOEnfT9L8&-#4w_C5OsBK#f1E}R|ao#OjOf1GRMU4%Gdfo8k0$tT&}3<{XYYMlO=cn literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64um-p-divw.elf b/examples/RISCV-64-Sail-Validation/rv64um-p-divw.elf new file mode 100644 index 0000000000000000000000000000000000000000..62998ebe1c476ad1391ccf0b98dcc186add7ecd8 GIT binary patch literal 9536 zcmeI2yK59d9LImVcNdMKyYV6h47wP!5V@=x--3&%SXhV(S_tQ5vL=V-_ShL;l}j2M zmD5Em#0TOZAU3hEIBaYLZ3MeRY%NZFRO0!Y$HvX5g=jegJKvel{N^`v-#G$%naleR z9k4A6vSPz0P`!k+fLB=BBT{)Cz;>{)?t_wuEph1bN|Yq8MO*eV&EohPeSFB{6&4qg zydD%CfK0P_3L7yF7zd04#sTAialklW954tVc)PvEEc1A!X*%JY;~yIQspSC~>?}#4{rx9@-AgSW$WUjojDOIR@tg-hhCBT-KI1&k zVIXd&e-_X?+$WEpU5fj}wJ`qz$-5$tIzvyigt zCOBQIp9Rt0EM-i}7Aae$Y?HEG$_^HyAUh{dg1P%UYCKSy37?DKhF{7-Pokz8EMj*MpM?^`kkWqCxwRGJ g@^p>tyvZ@%6yL}k<9}CvH~-p*465W}c~hVN16htCf&c&j literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64um-p-mul.elf b/examples/RISCV-64-Sail-Validation/rv64um-p-mul.elf new file mode 100644 index 0000000000000000000000000000000000000000..7db8e67f210022110e7ed0930f03818c1e0f1b5f GIT binary patch literal 10272 zcmeI2U1%It6vxk<-3@KU>?YffX!9kpBvgyuP zD+-+k9~5fcIzo$;HV;B2h-@tq9~7b}_#$kmf>0%qBK1LKi>*SbUC)_&X1aTmJ{0k7 zF6^AWzxm&D&;8Gx2^;3<*6q(|LV({i_!GG25X;d4+t?Zz>6n8Jpy9C%VxBfeFhK{e zIn6QJCVPJLbu@=}N@sNf9Pb;)ZH)csk7FE$(1Fl_(1Fl_(1Fl_(1Fl_(1Fl_(1Fl_ z(1Fl_dvKrxlTmBE-s{F4Fcvf-ZoC3U8^tOZS|hR~4o)&2zimY0Z~)>!T4PrnO8EQV z{rTi`OI84^)HmNM)z3Ao)wyd%A_k{40C!XqR%K_(8h|d@|I+KbTD@Uaw8t@GUwcfR z8)dDI`V@Y0DHs1iz~}y=JjqxBl8bH#V|NUzsK;HA01MZN8VBdPZk*5nb%}|O0nUuR zovdM)@*Rh6_%=Hw`)7eXPTA-&U9Mn26(|_o4TemoLIoa_ABsXg&JUIO;L~jD^!r zyO2UY!hAruA_qp-^pljQ|5&4OC(i(2{>>AB*Q_P~9?I`=Uw@_@^Pl}gb1|>cIlXD3 zI)3wvQyq6JliFyry;G2&zMT~PsJ`Ba+p7o7yM$^uu6f$>f) zouvK7d1#JgBo0Zf6I@M)D+_ntmU*i<{?ad`InSE3EZEH z?&xN`ye-0t{U2ptF=2ptF=2ptF=2ptF=_}?9f z$Ttccb)pEqMSwqfTR6QJ5QS?ERomeK0o(DnZSy(&S&mKMm{$G>^PIx_nLnX$`JRCQ zmG5T#Ek(bF`8ToFc}?aUL@OU+ZY$hoeq7Q+S2>Zwf!fd>;P) z#QVyJbIi9W{5*3<;U6(St?*BnR~7y_^RE>CHS@Z{zh$mRTI>9t`7VY3#Qar-|HAwO zh5yd{2Zi5Y9*wrn`w#P8g~w>);y&D`@cWq`SNJ04pDKJA^IsLdn)yOyzpZ1wMd5wS zZG~@Q{<^}qGJj9uJD7i{@aLKTsPGq%C+NP`TYVe63qRs4Cl*mz6|HfaK6k&7%5m5 zn8W+>R`I}a!G5u9!d~-0ak#0Ux9mdMhCHfZf4MZ|xe7hj%R_cyFGjm8yaTi Hs^k9!j}v?< literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64um-p-mulh.elf b/examples/RISCV-64-Sail-Validation/rv64um-p-mulh.elf new file mode 100644 index 0000000000000000000000000000000000000000..9a7009a0388fd597ab8ad225f508746c3aed7431 GIT binary patch literal 10144 zcmeI2Piz!b9LIk%+eJWOXS*Oxie(h)f7{tzuoN(?e-I8t8}z_|WLc&IU8UX4&Zuy5 zB_>`7**X|as=|evCXK{!(WEhY!=wZ~nrhG^$r8a+W&Qo$`^_@*+8&H2lQ+q}-@MQJ z{eJH^-+435Zr{864!&#}21JJme**WK#7flQVLvJ@wI$dICbp{}Eqv1iEo#KkjN9+U zAV6dzKbm6|Ioj0VVL>x)4~PyxWTQC7+Gqu|0$KsBfL1^&pcT*xXa%$aS^=$qRzNH8 zFBGW3T#r9&Zx1s~aMyNHVWtJ{DzdZSnw`|93^a3@%w4x911BH@y9ZetCO%=H4!)4QGO^ucyQjL+db#S69>uE&}U8(eE)e~3Relr_wO+k3qzo2|)tH#8Tia36FB^{||7GjzuE9Fhw{B_73N?21 zYm$EVt8sEZS?lsOwn)GGW}t1*^H#vEY^1|b=ivg za|S-2DfBbt^J^KoY}PD_=a=%#V}AT>cEr2OZ5j|xXYu`+74NY4`^>js4&~8@RzNGD z70?Q31+)TM0j+>m;D4(?O6(Hg|L@1HB89sMy8riQj$fCd2X1v@ZsIg6S_2N^ck1}q z0P`M&KgqnL@Db*F6fXA}7@+dQ?7yh^mzmeo$$G|_Z!nVlP3BK4yuth>g`Z}AMBz>5 zfxPM{HnrlGGA2q9p+9?a^An0PbfT13m4bQzwNm}tpP!!QjgBxX;cHR9MmRiegG4dsqvFu z**oQW^`Kgtf?6=)HDdk1^Mi5$j#sKDL7W$**)GivX`Yp4M4Fw_j7pPt*yh<5*m9;k zr^<7#JSWR@wmhfHbG`!SD{#I7=PPi&0_Q7mz5?efaJ~ZPD~v+D;``uDjhFrEiK$BP zR>Om1-ihi|tY7wnN+WpmGdt(2#Z_It#p0!BBOo8o&^1%y;g; znSKnX)g$(L$y7~Yc)wV8Uzi+&65Ghowlj)PMIc%~wglb%VLV=98ySkl)xP97U`w>K vM_MwE;b*n%LLb{TXuESWBh%a_JCig)>`=Nuf47#4zd0y_hGMaFs>c5V2mdX> literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64um-p-mulhsu.elf b/examples/RISCV-64-Sail-Validation/rv64um-p-mulhsu.elf new file mode 100644 index 0000000000000000000000000000000000000000..eb825f7a8bf75791460cdaac0dd8786b55e53630 GIT binary patch literal 10144 zcmeI2O>7%g5XWcNacK*!*KtcCwX|E>@J+H_r}Pumd=zrXAqpIFsN_1EZDY~ImUn^n zgsG6YRF%sXffPQ{12+&670Lyq2*IsLsRBn7P~lj~6)mSwGqZ2j-F-<8h!fIV$#3@k z-pst&|GwSG&U@?l@JqU;L3HTwCvdMptVj(W<|D#VTZDt4W4i&;p>LX?K}~ox;`aM+ z5FoOVAI-6W98GHQFrX2)LtzIXvQZpkWt0L+0i}RaKq;UUPzopolmbctrGQdEDWDYi z7YbBiq01XE2ZKxloXzc2kZFRmf$SVOdOOvVfkrNqx$AUg;51}_e4SS_P{r^6!Ecvd z>Ddji*F3gTZGGDI`ii$4BMl$u0Ks`(^O~cUHv+w)|6SM*^j6zz>POIGUq39y&a41JepHK8N!ZzBKh7S_K@;>H z+8pGvntpYb>S}EaG`u&L7oVMh8jc&C@xm1vpWPH_O^m;OB#OT}YanlK4zyWtK3qJM z!}}49MY*ZgTq*-Oy&D4Egd4`_T`|`jIJ=hiix_D>iXqM7al1xWL=6kzbT1V|Tq|)M z;an6a$L^%q5v+3&>t7mJx6Y`>?x@CJN#7^es*&ah=Zj*(>mrR>Sl{yFYtFB^{||26CDtic-9w`FzA zIyH9mYmk2T%W+~pQR~_@Hc7wxW}v0f^HQ>5`ThuQQ`-fACG@-H#3rIYncFyE#n`D@Idl6al@ixNM_ z{Dj0C%zcT!%lv}GFEamJ;_oxRCh?D%|1R;*nD^rEE#WCQUoan$_}9!YNc>yo-$?ui z<}Hc;$o#QXa^9brpOE-3%r8s)59Ze-ev|o%#P2Y-x{~w$&3sbgX2=&)buuR`7RT)*^&>-g0=`1NuvI)AfX@!gVNoveC3OqQo7 z&bTG_tmD@FN_85l{-j%v^?ld#OE#P;SI$6qUJzzbnEk>$Bg_F|4hnNfn7qX{&(>zk znev<}&$;rPEYI2UoG#D#Y|dwMKAZE|oX_TbHs`ZBpUwGf&SxKjTG{i!ot`LpmDAH@ z|Mj{HFobgW*GCK3!vwnYNy5d7WYaHIU z|Jv-p1hjg>y&i*hSFS3mc#o}sTbqtvT x9qba8%%k|(D7w(gb`#pp+|0-{_KD6EO%OYzF3{htwc>B~iJ<;iES<{n{{RG=Fckm* literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64um-p-mulhu.elf b/examples/RISCV-64-Sail-Validation/rv64um-p-mulhu.elf new file mode 100644 index 0000000000000000000000000000000000000000..b398098ecfb2b9d7fcec44ba038a8426fe000b7d GIT binary patch literal 10208 zcmeI2PmB|F6vy9h+OB{=r(2Lsc7-ZJg2Hb9fC~blK~T^&Zji&qm~_i*VH;uFbVh|l zW98z-U~xzwX@VRyF`JllC1x)gR}*iVbVIypiXjFsYKh>1;MVu%_oj4y+dZh)nWXdP z_xZhl^PS(!Zku`g;K(zY5a4ba{0TfN6HC($xAD!=(moA4LBo9ygdE=xL7jHaR_?S1 zdgREpt{>HKref@^L)kfEdx)`X-8ja+@fGkD@D=bC@D=bC@D=bC@D=bC@D=bC@D=bC z_!kNkU@mA5#kSkwG8ijb0Xtj)qlat_46PMd7lv{)99}SjVK@O{AYbEX7z+6P-~Rdh zOY1fOY>e%@S7?6NGB>4f8F~mVY5?|GO_-G-27?K23kt!0uv)MF9H6{7tGiyIO;T1%VxM*F|Ju-!eY!pNx;-$8v9;t>? z&y8`;i!^Fte~m5O`g8hHq$Eq_e-ym_(816SkjcuwH`89+Zx-oLttMj~3uxqm579rNR7AnrUnjj{my zd<3805$74&`8+jsm_vE|%~!xzz*oRmz*oRmz*oRmz*pcuD-e)x6qMBj0ep)9|F!jS zdM_Xdw_2)i!~p_E@H=(q++s z&zWCR_?OJ<3jdb*%7C|@@0ssW_z%pB3jc}uCkp?C`Hu?!jrp3Ox9%P0BMSeU`I`z4 z(Za=bUQ_rg=D#X@E%O0o{XES4sKPffe^24tn17`39n8N__+IAUDf}SwV2@Xa=aB1k zpT@j=YzaQ;aNH^POJNCrT*prSwDKH?V*;nH!ePidRU9&m)XQUs_fHNMpp-LnR_67b zVHHYXm9jEHD%4Mv=WWlsxGCMVKGMCAnHgZKPUzmb|HJK}QjIEq$Ws-0_n?DK8 zaY~x)((I7tNoj_qNyXVFq}?gaE@=`xo8Z|*k~wEiaOwo-PH^%BXHRgt1m{a~z9i>M za=s+zOLD#>=SyvD}ILRL3}DTG^5X8T5kV zrNSvkMHn>CoU*dV&{`#FC*30}ciI}vPvtEbWX)*}{O_$FGtg?{*T^VenRd81oUQ#{ znH)lzt!p;p0mTPg;I5~b1nu|Bcs|Y6H57}hf6;a*CedV2S~6SkvrG=5kL_}_?b^)9 e)E<+Ax2QnJrVN4p?sbdbMkj{bpfv5h8vhSfcX3ky literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64um-p-mulw.elf b/examples/RISCV-64-Sail-Validation/rv64um-p-mulw.elf new file mode 100644 index 0000000000000000000000000000000000000000..865196096deebde90add2ee5cd2510a97918268d GIT binary patch literal 10144 zcmeI2PmB{)9LIk%Z3$qsvs;#3l|K`4B~e(WWpROOY=|06IBd`Z2b0pB9d@hiw&{!t zCkHNiFjyRnMx%1j#EZ$sU@$?GjnSh?33@cepotff62TKvf4}#BGfdyY!5D9ElD^-( z&-~u^{pLHb-L(5&f9AlmreQ#QnD8fXFC1`qoY8L6$nZZNT31v!zMBWO`0jxZgw z;vzsC<2;&U6(!o#;9)_Sj{8LiAdc}k#yV&Rv;*1!?SOVbJD?rV4rm9o1KI)YfObGT z@Gl%_z;f2#VNXW+5Ztx>Oq6efyNcoxxMn{ynuoBE&);&hd6>+UHNFwZ*wCBTO#-?9Am zLyo`2cCLIpa~*4Nq}D#1XLyq8^ucx_9AChB%5U3dbRX7i*x(L#pN#Owh63tKZXtKT zUEeK7;2>`@pEe?+0`3FdJ)|>rqTj!*GY#&h?$mie?*{Y_lfK}C`AyQ_6+s8}m*7H3 z_4HOp20oJyIy)n{EO_|@@w00pqmB9(ihH4{FtWu z8@io~&xY$5$WLlGY@mPnIG=J?)RC-_Cf(mXgSmI8CGjJq`&*OFm-@ZI`%G$SlYTCO zo>4Yv4b%JYEY^1s8JOi0z--BI$1Y|rAd@-EhTHCB@I7i44BIS=_X>^e;QaX7;E2x$ zH#8tRJ%pc8L*jEH{h8rgu#C5^5AA?!;Gh>5ym*IDp@&)7LgJ&no;;<`socF@Hkga-V?#DnG>eHW&VxAKVsfd_-D*- zD*OxP+wgZ7amvkC%nvL4Tjp;n{0HXe6#gUg-xU5cb1O4A?=Q?N3jdvXQ{h*czpwBc z%)eLo-^{NoJVy%`*SW2%hkKb%D}01`sPK)<&nSGH`R5AX&ireI?_&Ok!uKM#=zV7o z`nLZr{E*<-sO$eO`LoO`@qQi}iHCzPF|Wd5N3hV`;kvEooPAR-O*Ek8`Cd?c)pLVJ z3xZay8K1w_ss~;*Xv{bK0Oo6pvq!zEcg*#gLA|jEjbPqurTT&A2h|cBsnw5yINvG5 zqzt=ccwB}l8FtICM~0%qvB&A|%y@J4#Z!vI}Dz*I-QMW=0`=Saud@g4CgOf&OmY RY5di3IcOp^mQL02{{ZuP5z7Do literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64um-p-rem.elf b/examples/RISCV-64-Sail-Validation/rv64um-p-rem.elf new file mode 100644 index 0000000000000000000000000000000000000000..45a427e396897aaa221ad683bbb507394548b268 GIT binary patch literal 9536 zcmeI2y>App7{=e-yE70JcFj4m6|Atr3I#&v1siZeBv#0YC=fzG;Udy;9xwI@`}VXm z5L2;oLltzei6|^S#9v@VNTfW`(9lv}A{sglVW=!0?|iJi9-si)8ENO4`OP~Y`^?GG zo!{%fp8n0YEXaxtZ$R}D&H`RxX^%+dbpR7!W8DWO5nJNW<&`K&UMFqY%QTDQd-U-k zk5^b+Nb-70bO18V<|%B%IA9zw4j2cF1I7X4fN{V$U>qvBK-cJ{(tNI;9h_c@5EZvz2Boh z2Cs=*f;;$~KV7md+B)acvoIw4PeebpyFJ>nkE3GW{#lMKsaOx=eS88x#UBXN*gL*X zx#U9mySEmZD&Z-*PHMS8@jWpn!M#?=O&c)Ief$r=^3rXWw)XjS#PeU=n_k5;_;Rh2 zxX}68JpMs%Gd=(^(Ag>D zGtT4B0vYP;ScYydZFLJ}Jgc08zTkf3`_8t_v94N=k2U%JrOh!A^OkqvI``HKsfBkm z+$p5^V@MhOk!!j*uf@-Y9CDnm_kf?zBE!D$j3gGMxBBtk`h|CSAE^s%oNkJ7z&KzW zFb)_8j0462Rp6C zUt8_L1^6wATpYPrB1Gl$Y~=08F$k1qvL73Kejx+dJ$Vvrhs?N80srA literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64um-p-remu.elf b/examples/RISCV-64-Sail-Validation/rv64um-p-remu.elf new file mode 100644 index 0000000000000000000000000000000000000000..ce63b5f65420cdf99a6c69380ceb55dffaf9cdc8 GIT binary patch literal 9536 zcmeI2&2JM&7{=dO+o6EUZg5%snCC)XI0 zp-@&>0?5mHUUdKpEyfw_#5v#`a1J;JoCD4Q=YVs-Ip7>{4mby#1I~fBa3F<#l}(2; z!q0(j8&!ng13D)45m0Yb+2uoC_x&|m^gkh%05A5#4OFaEs!^{)K@Q{iVX)8Wq} zb})WUgBsk!@BCuLBdqsT#Aac)?*FR#!W)iQ&pU&Peebl6t(e>p^CNuXNZ=0yCib74 zr(O%7{?WgLUaH|PhQ1&HFnpbuljB-1=q(R0FL?48V0GnAzbO@u27STx=;UC_Mr^3&Tit=V57sJzbY;A@5eGGPBaY`Z zIj9KyL8Oiz>3IX3w+A$k97?I4JkHcMY4mby# z1I_{GfOEh(;2dxcI0u{q&H?AZJ2_C%Hwtola0PD>tpD$Cg7RKK6`qgm+;Ig6TmW-V zz$EN5ylU~ohQ}5^Y4}-->w5+SY<|h)zqIn3hW|}A?`Pid35$Pc_z{a|hM%+e4a2{+ zcy9Qz#cvw^lf`ct{?y`k4gbU9_YKFR$yL)-zn}*4yu!`=(HnSQae11X^M6zP)p>q5 zJTC5m$dOngeAK!YhiSglou>3?H=4b;)JP#qSi+mv63WvIc-HC`?dw^aCrzF%ri{a4 zt22K!X(r1w>GF2kfs`*MS*gzx#+#qOl~(&IsP-`}Gg^*oIicmGmQz|j)p9g~Zi_KU zI`d7|Ug)&=_gMmS$wIqR>Ngp0WgMEA1y{0kN$n0A?8Xvr&7ty4>tfO3$ue)WJ8cdP z^IDWY?_2G~3FIlMyEuBXT#32Qvwm+!#~?OZ$RTXV@s$D;=M-wNet*ZrW21%0vG{Iy zrJN5n>Y88`yA$|)pfT(=x)pVOZNsEIJ)k?!N=!D@JF>*&=gRBG|2Uw8#Gs D_|q*G literal 0 HcmV?d00001 diff --git a/examples/RISCV-64-Sail-Validation/rv64um-p-remuw.elf b/examples/RISCV-64-Sail-Validation/rv64um-p-remuw.elf new file mode 100644 index 0000000000000000000000000000000000000000..3e1fea532083f0c20d761fa3db9bba07fbb07ef9 GIT binary patch literal 9536 zcmeI2&1)1%7{=e~naLVOyW>O*Y|zG_2U#Yq#_t82Ma6>$aXsW9jFU>63?|bjRzcTO^{cnus(ES% z^rUW`I(yn71oGm*2hhD#uuxQ3x?@U39l{ZCupWSljI9XhiAt8VsAWg>a?Rt!8Utd; z7Znx{(xRS`9e`Z(c^X@>4p;}Q1J(iSfOWt+U>&dySO=^F)&c8)b>JHuh@o3%)fQy*~;fy(t8 zuCsMQ?2~~XWDt@nxdg}izLRb7AtOG};ojy9x~uDX0Cc3cNyR_utN4&)Bm_Fz8&vT* z@2+O#98j+}xCH1O?o-91C%6{o|4H#>nP+JW?w_&dySO=^F)&c8)b-+4c z9k32q2do1>%z=`+QIMJmOL&W5?f?FIP}~bB!~4D&J0t;tv-nP39NVFJ+2DIM4-I}; z^Ir|F?imm;`J|3tG2-i*|3lXAXIk@NgJ0477lS97pEUSQ%`X}})tnprw&r&XzNqLe}E%uPU7TM)$85fQV-&_3c9{kpL+GG z`&+|8_trOG9RJdF94Lwl&wzTFWRa|}Jetrd>j(~ji}eW9RBTN`UskGQWj*TZUZF*t zTw_EI1+v28Lsr&fssm7HF^{kn>wtB@I$#~J4p;}Q1J(iSfOWt+U>&dySO?z0fdrPT zd@`8My$sj~!%FV;fQ?AK56m4_wtA4&J?|B(dN2nb$XNEZ2MNCa=Z|lGwe=H#iQve~ zWN>%LcSKK_UxOd;oj+f69o{j{Z+YRc(>1({ftNczaC}aT$#AXb?1l>%=P&&RaC`BV&wJZLJ`sff-kEuh z_Ymq_pW`~4r{#Te2*Mm9r|z7E!%qS?-xNUZ1i<{hm&5X_RsLw0J0Y;K{)amL-f%TO z0yf^?sN)MR<4*$H*59xM=pEjtjz>>$EzD1RKzStZ%KYneJgE4kP54|6?#Xz+mgC2d zI{KmW_!!@l`71d-|0N!m-!vGEmYpI%z^yoDDK~=^04eD_hA{+ z+F~8B4p;}Q1J(iSfOWt+U>&dySO=^F)`53+prTI{Wah*Qo+4QJzdsGia{*O&Iy7TP z6>#7C*(Pt#bz0(L8pBLH*Y1@1O)grgfF?%4xinc&cL@!CbwRXdP(`YB zzG#W~ifFVuZ2=8>Cgs!nRv%#kxm)V2j!u>-q4Pc~=X&%QM5Kl6#D<(-DL}Dbfd(t* zduTi&Ekw@6U)O8pSfJ508mwY>3tsCrhH=sjs4Hs|lk)d=-T9})WK;bzOHBUVdDHw~ O={!`U6f2wN{Qm*g?I@!F literal 0 HcmV?d00001 From 585a760184c68b794d3131cb25509e072243739e Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Tue, 24 Mar 2026 11:50:41 +0100 Subject: [PATCH 66/85] fix(riscv): fix incorrect definition of bgeu --- architecture/RISCV/RV32IMFD.yml | 2 +- architecture/RISCV/RV64IMFD.yml | 2 +- architecture/RISCV/SRV32.yml | 2 +- architecture/RISCV/SRV64.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/architecture/RISCV/RV32IMFD.yml b/architecture/RISCV/RV32IMFD.yml index 3252d8e83..69adc05b1 100644 --- a/architecture/RISCV/RV32IMFD.yml +++ b/architecture/RISCV/RV32IMFD.yml @@ -1526,7 +1526,7 @@ instructions: - field: funct3 value: "111" definition: | - if (CAPI.FP.int2uint(registers[rs1]) > CAPI.FP.int2uint(registers[rs2])) + if (CAPI.FP.int2uint(registers[rs1]) >= CAPI.FP.int2uint(registers[rs2])) registers.pc = registers.pc + imm; help: Take the branch if registers rs1 is greater than or equal to rs2, using unsigned comparison. diff --git a/architecture/RISCV/RV64IMFD.yml b/architecture/RISCV/RV64IMFD.yml index 6ce1a4e30..2373b993f 100644 --- a/architecture/RISCV/RV64IMFD.yml +++ b/architecture/RISCV/RV64IMFD.yml @@ -1516,7 +1516,7 @@ instructions: - field: funct3 value: "111" definition: | - if (CAPI.FP.int2uint(registers[rs1]) > CAPI.FP.int2uint(registers[rs2])) + if (CAPI.FP.int2uint(registers[rs1]) >= CAPI.FP.int2uint(registers[rs2])) registers.pc = registers.pc + imm; help: Take the branch if registers rs1 is greater than or equal to rs2, using unsigned comparison. diff --git a/architecture/RISCV/SRV32.yml b/architecture/RISCV/SRV32.yml index f6d9fd290..527d075d5 100644 --- a/architecture/RISCV/SRV32.yml +++ b/architecture/RISCV/SRV32.yml @@ -2084,7 +2084,7 @@ instructions: - field: funct3 value: "111" definition: | - if (CAPI.FP.int2uint(registers[rs1]) > CAPI.FP.int2uint(registers[rs2])) + if (CAPI.FP.int2uint(registers[rs1]) >= CAPI.FP.int2uint(registers[rs2])) registers["PC"] = registers["PC"] + imm; help: Take the branch if registers rs1 is greater than or equal to rs2, using unsigned comparison. - name: blt diff --git a/architecture/RISCV/SRV64.yml b/architecture/RISCV/SRV64.yml index 8b80364f5..6a95634a6 100644 --- a/architecture/RISCV/SRV64.yml +++ b/architecture/RISCV/SRV64.yml @@ -2095,7 +2095,7 @@ instructions: - field: funct3 value: "111" definition: | - if (CAPI.FP.int2uint(registers[rs1]) > CAPI.FP.int2uint(registers[rs2])) + if (CAPI.FP.int2uint(registers[rs1]) >= CAPI.FP.int2uint(registers[rs2])) registers["PC"] = registers["PC"] + imm; help: Take the branch if registers rs1 is greater than or equal to rs2, using unsigned comparison. - name: blt From 40b42a915f6e904c052450b29a64dc10c84ee63c Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Tue, 24 Mar 2026 11:51:17 +0100 Subject: [PATCH 67/85] fix(mips): fix unimplemented bc instruction not raising an error --- architecture/MIPS32.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/architecture/MIPS32.yml b/architecture/MIPS32.yml index 8917e14f0..f977956e3 100644 --- a/architecture/MIPS32.yml +++ b/architecture/MIPS32.yml @@ -1208,6 +1208,7 @@ instructions: order: 1 definition: | // Not implemented + CAPI.VALIDATION.raise('bc not implemented'); - name: bc1eqz template: FPU_I From d9bc7a0c2f9202c3b5cdf63da2bdd3be9839c316 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Tue, 24 Mar 2026 11:51:47 +0100 Subject: [PATCH 68/85] fix(mips): fix incorrect definition of sltu instruction --- architecture/MIPS32.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/architecture/MIPS32.yml b/architecture/MIPS32.yml index f977956e3..7627d4bcb 100644 --- a/architecture/MIPS32.yml +++ b/architecture/MIPS32.yml @@ -3762,7 +3762,7 @@ instructions: startbit: 5 stopbit: 0 value: "101011" - definition: "registers[rd] = CAPI.FP.uint2int(registers[rs]) < CAPI.FP.uint2int(registers[rt]) ? 1n : 0n;" + definition: "registers[rd] = registers[rs] < registers[rt] ? 1n : 0n;" - name: sqrt.d template: Custom type: Arithmetic floating point From 7766a78554c555bd90dbeac39ed8a8a20265ecbf Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Tue, 24 Mar 2026 12:25:39 +0100 Subject: [PATCH 69/85] fix(MIPS): fix bgezal modifying ra when branch wasn't taken --- architecture/MIPS32.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/architecture/MIPS32.yml b/architecture/MIPS32.yml index 7627d4bcb..bcf8f51a5 100644 --- a/architecture/MIPS32.yml +++ b/architecture/MIPS32.yml @@ -1361,9 +1361,9 @@ instructions: - field: imm type: offset_bytes definition: | - const pc = registers.PC - registers.ra = pc if (CAPI.FP.uint2int(registers[rs]) >= 0) { + const pc = registers.PC + registers.ra = pc registers.PC = pc - 4n + imm; CAPI.STACK.beginFrame(registers[rs]); } From 803df07d12594e4e287d77e4b5c6d8570e27b214 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Tue, 24 Mar 2026 12:06:47 +0100 Subject: [PATCH 70/85] tests: improve conditional branch tests to check all cases --- .../test_mips_instruction_007.s.snap | 144 ++++++++----- .../test_mips_instruction_008.s.snap | 139 +++++++----- .../test_mips_instruction_009.s.snap | 184 +++++++++++----- .../test_mips_instruction_010.s.snap | 182 +++++++++++----- .../test_mips_instruction_011.s.snap | 182 +++++++++++----- .../test_mips_instruction_012.s.snap | 181 +++++++++++----- .../test_mips_instruction_042.s.snap | 202 ++++++++++++------ .../test_mips_instruction_043.s.snap | 161 ++++++++++---- .../test_mips_instruction_044.s.snap | 201 +++++++++++------ .../test_mips_instruction_045.s.snap | 192 +++++++++++------ .../test_mips_instruction_051.s.snap | 72 ++++--- .../test_mips_instruction_052.s.snap | 64 +++--- .../test_mips_instruction_053.s.snap | 91 +++++--- .../test_mips_instruction_054.s.snap | 60 +++--- .../test_mips_instruction_055.s.snap | 70 +++--- .../test_mips_instruction_056.s.snap | 94 ++++---- .../test_mips_instruction_057.s.snap | 86 ++++---- .../test_riscv_instruction_007.s.snap | 134 ++++++++---- .../test_riscv_instruction_008.s.snap | 120 +++++++---- .../test_riscv_instruction_009.s.snap | 129 +++++++---- .../test_riscv_instruction_010.s.snap | 124 +++++++---- .../test_riscv_instruction_011.s.snap | 129 +++++++---- .../test_riscv_instruction_012.s.snap | 124 +++++++---- .../test_riscv_instruction_042.s.snap | 120 +++++++---- .../test_riscv_instruction_043.s.snap | 120 +++++++---- .../test_riscv_instruction_044.s.snap | 118 ++++++---- .../test_riscv_instruction_045.s.snap | 118 ++++++---- .../instructions/test_mips_instruction_007.s | 38 ++-- .../instructions/test_mips_instruction_008.s | 38 ++-- .../instructions/test_mips_instruction_009.s | 39 ++-- .../instructions/test_mips_instruction_010.s | 39 ++-- .../instructions/test_mips_instruction_011.s | 39 ++-- .../instructions/test_mips_instruction_012.s | 39 ++-- .../instructions/test_mips_instruction_042.s | 39 ++-- .../instructions/test_mips_instruction_043.s | 39 ++-- .../instructions/test_mips_instruction_044.s | 39 ++-- .../instructions/test_mips_instruction_045.s | 39 ++-- .../instructions/test_mips_instruction_051.s | 20 +- .../instructions/test_mips_instruction_052.s | 20 +- .../instructions/test_mips_instruction_053.s | 25 ++- .../instructions/test_mips_instruction_054.s | 20 +- .../instructions/test_mips_instruction_055.s | 20 +- .../instructions/test_mips_instruction_056.s | 22 +- .../instructions/test_mips_instruction_057.s | 21 +- .../instructions/test_riscv_instruction_007.s | 39 ++-- .../instructions/test_riscv_instruction_008.s | 38 ++-- .../instructions/test_riscv_instruction_009.s | 39 ++-- .../instructions/test_riscv_instruction_010.s | 40 ++-- .../instructions/test_riscv_instruction_011.s | 39 ++-- .../instructions/test_riscv_instruction_012.s | 40 ++-- .../instructions/test_riscv_instruction_042.s | 39 ++-- .../instructions/test_riscv_instruction_043.s | 39 ++-- .../instructions/test_riscv_instruction_044.s | 39 ++-- .../instructions/test_riscv_instruction_045.s | 39 ++-- 54 files changed, 2881 insertions(+), 1587 deletions(-) diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_007.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_007.s.snap index 6f46b2f72..0c27e1dfc 100644 --- a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_007.s.snap +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_007.s.snap @@ -8,63 +8,111 @@ snapshot[`mips/instructions/test_mips_instruction_007.s 1`] = ` memory: { "0": 60, "1": 1, - "10": 64, + "10": 128, + "100": 32, + "101": 24, + "103": 1, + "104": 18, + "105": 51, + "107": 8, + "108": 32, + "109": 25, "11": 32, - "12": 32, - "13": 9, - "15": 2, - "16": 32, - "17": 10, - "19": 5, - "20": 60, - "21": 1, - "23": 4, - "24": 52, - "25": 33, - "26": 69, - "27": 98, - "29": 32, - "3": 4, - "30": 88, + "111": 1, + "112": 3, + "113": 224, + "115": 8, + "12": 60, + "13": 1, + "14": 255, + "15": 255, + "16": 52, + "17": 33, + "18": 255, + "19": 246, + "2": 255, + "21": 32, + "22": 136, + "23": 32, + "24": 32, + "25": 18, + "27": 15, + "28": 32, + "29": 19, + "3": 255, "31": 32, - "32": 17, - "33": 104, - "35": 16, + "32": 18, + "33": 16, + "35": 8, "36": 32, - "37": 14, - "39": 34, + "37": 8, + "39": 1, "4": 52, - "40": 32, - "41": 2, - "43": 10, - "47": 12, - "48": 32, - "49": 12, + "40": 18, + "41": 48, + "43": 8, + "44": 32, + "45": 9, + "47": 1, + "48": 18, + "49": 17, "5": 33, - "51": 11, + "51": 8, "52": 32, - "53": 13, - "54": 2, - "55": 43, - "56": 17, - "57": 8, - "58": 255, - "59": 236, - "6": 69, - "7": 98, + "53": 10, + "55": 1, + "56": 18, + "57": 82, + "59": 8, + "6": 255, + "60": 32, + "61": 11, + "63": 1, + "64": 18, + "65": 114, + "67": 8, + "68": 32, + "69": 12, + "7": 216, + "71": 1, + "72": 18, + "73": 83, + "75": 8, + "76": 32, + "77": 13, + "79": 1, + "80": 18, + "81": 80, + "83": 8, + "84": 32, + "85": 14, + "87": 1, + "88": 18, + "89": 18, "9": 32, + "91": 8, + "92": 32, + "93": 15, + "95": 1, + "96": 18, + "97": 113, + "99": 8, }, registers: { - "1,at": "0x44562", - "10,t2": "0x5", - "11,t3": "0x44562", - "12,t4": "0xb", - "13,t5": "0x22b", - "14,t6": "0x22", - "2,v0": "0xa", - "8,t0": "0x44562", - "9,t1": "0x2", - PC: "0x30", + "1,at": "0xfffffff6", + "10,t2": "0x1", + "12,t4": "0x1", + "13,t5": "0x1", + "14,t6": "0x1", + "15,t7": "0x1", + "16,s0": "0xffffffd8", + "17,s1": "0xfffffff6", + "18,s2": "0xf", + "19,s3": "0x20", + "24,t8": "0x1", + "25,t9": "0x1", + "9,t1": "0x1", + PC: "0xffffffff", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_008.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_008.s.snap index 8658cac21..786f74a51 100644 --- a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_008.s.snap +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_008.s.snap @@ -8,64 +8,105 @@ snapshot[`mips/instructions/test_mips_instruction_008.s 1`] = ` memory: { "0": 60, "1": 1, - "10": 64, + "10": 128, + "100": 32, + "101": 24, + "103": 1, + "104": 22, + "105": 51, + "107": 8, + "108": 32, + "109": 25, "11": 32, - "12": 32, - "13": 9, - "15": 2, - "16": 32, - "17": 10, - "19": 5, - "20": 60, - "21": 1, - "23": 4, - "24": 52, - "25": 33, - "26": 69, - "27": 98, - "29": 32, - "3": 4, - "30": 88, + "111": 1, + "112": 3, + "113": 224, + "115": 8, + "12": 60, + "13": 1, + "14": 255, + "15": 255, + "16": 52, + "17": 33, + "18": 255, + "19": 246, + "2": 255, + "21": 32, + "22": 136, + "23": 32, + "24": 32, + "25": 18, + "27": 15, + "28": 32, + "29": 19, + "3": 255, "31": 32, - "32": 21, - "33": 10, - "35": 16, + "32": 22, + "33": 16, + "35": 8, "36": 32, - "37": 14, - "39": 34, + "37": 8, + "39": 1, "4": 52, - "40": 32, - "41": 2, - "43": 10, - "47": 12, - "48": 32, - "49": 12, + "40": 22, + "41": 48, + "43": 8, + "44": 32, + "45": 9, + "47": 1, + "48": 22, + "49": 17, "5": 33, - "50": 7, - "51": 84, + "51": 8, "52": 32, - "53": 13, - "54": 2, - "55": 43, - "56": 21, - "57": 72, - "58": 255, - "59": 236, - "6": 69, - "7": 98, + "53": 10, + "55": 1, + "56": 22, + "57": 82, + "59": 8, + "6": 255, + "60": 32, + "61": 11, + "63": 1, + "64": 22, + "65": 114, + "67": 8, + "68": 32, + "69": 12, + "7": 216, + "71": 1, + "72": 22, + "73": 83, + "75": 8, + "76": 32, + "77": 13, + "79": 1, + "80": 22, + "81": 80, + "83": 8, + "84": 32, + "85": 14, + "87": 1, + "88": 22, + "89": 18, "9": 32, + "91": 8, + "92": 32, + "93": 15, + "95": 1, + "96": 22, + "97": 113, + "99": 8, }, registers: { - "1,at": "0x44562", - "10,t2": "0x5", - "11,t3": "0x44562", - "12,t4": "0x754", - "13,t5": "0x22b", - "14,t6": "0x22", - "2,v0": "0xa", - "8,t0": "0x44562", - "9,t1": "0x2", - PC: "0x30", + "1,at": "0xfffffff6", + "11,t3": "0x1", + "16,s0": "0xffffffd8", + "17,s1": "0xfffffff6", + "18,s2": "0xf", + "19,s3": "0x20", + "8,t0": "0x1", + PC: "0xffffffff", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_009.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_009.s.snap index 1d0ade045..62e719e21 100644 --- a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_009.s.snap +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_009.s.snap @@ -6,74 +6,150 @@ snapshot[`mips/instructions/test_mips_instruction_009.s 1`] = ` error: false, keyboard: "", memory: { - "0": 32, - "1": 8, - "11": 5, + "0": 60, + "1": 1, + "10": 128, + "100": 32, + "101": 13, + "103": 1, + "104": 2, + "105": 18, + "106": 8, + "107": 42, + "108": 20, + "109": 1, + "11": 32, + "111": 8, + "112": 32, + "113": 14, + "115": 1, + "116": 2, + "117": 80, + "118": 8, + "119": 42, "12": 60, + "120": 20, + "121": 1, + "123": 8, + "124": 32, + "125": 15, + "127": 1, + "128": 2, + "129": 51, "13": 1, - "15": 4, + "130": 8, + "131": 42, + "132": 20, + "133": 1, + "135": 8, + "136": 32, + "137": 24, + "139": 1, + "14": 255, + "140": 2, + "141": 113, + "142": 8, + "143": 42, + "144": 20, + "145": 1, + "147": 8, + "148": 32, + "149": 25, + "15": 255, + "151": 1, + "152": 3, + "153": 224, + "155": 8, "16": 52, "17": 33, - "18": 69, - "19": 98, - "2": 1, + "18": 255, + "19": 246, + "2": 255, "21": 32, - "22": 88, + "22": 136, "23": 32, - "24": 1, - "25": 10, - "26": 8, - "27": 42, - "28": 20, - "29": 1, - "3": 105, - "31": 24, - "32": 1, - "33": 40, + "24": 32, + "25": 18, + "27": 15, + "28": 32, + "29": 19, + "3": 255, + "31": 32, + "32": 2, + "33": 16, "34": 8, "35": 42, "36": 20, "37": 1, - "39": 16, - "4": 32, + "39": 8, + "4": 52, "40": 32, - "41": 14, - "43": 34, - "44": 32, - "45": 2, - "47": 10, - "5": 9, - "51": 12, + "41": 8, + "43": 1, + "44": 2, + "45": 17, + "46": 8, + "47": 42, + "48": 20, + "49": 1, + "5": 33, + "51": 8, "52": 32, - "53": 12, - "55": 11, - "56": 32, - "57": 13, - "58": 2, - "59": 43, - "60": 1, - "61": 141, - "62": 8, - "63": 42, - "64": 20, - "65": 1, - "66": 255, - "67": 232, - "7": 2, - "8": 32, - "9": 10, + "53": 9, + "55": 1, + "56": 2, + "57": 48, + "58": 8, + "59": 42, + "6": 255, + "60": 20, + "61": 1, + "63": 8, + "64": 32, + "65": 10, + "67": 1, + "68": 2, + "69": 82, + "7": 216, + "70": 8, + "71": 42, + "72": 20, + "73": 1, + "75": 8, + "76": 32, + "77": 11, + "79": 1, + "80": 2, + "81": 83, + "82": 8, + "83": 42, + "84": 20, + "85": 1, + "87": 8, + "88": 32, + "89": 12, + "9": 32, + "91": 1, + "92": 2, + "93": 114, + "94": 8, + "95": 42, + "96": 20, + "97": 1, + "99": 8, }, registers: { - "1,at": "0x1", - "10,t2": "0x5", - "11,t3": "0x44562", - "12,t4": "0xb", - "13,t5": "0x22b", - "14,t6": "0x22", - "2,v0": "0xa", - "8,t0": "0x169", - "9,t1": "0x2", - PC: "0x34", + "10,t2": "0x1", + "11,t3": "0x1", + "13,t5": "0x1", + "15,t7": "0x1", + "16,s0": "0xffffffd8", + "17,s1": "0xfffffff6", + "18,s2": "0xf", + "19,s3": "0x20", + "25,t9": "0x1", + "8,t0": "0x1", + PC: "0xffffffff", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_010.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_010.s.snap index 32ea81a2b..ad98b092a 100644 --- a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_010.s.snap +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_010.s.snap @@ -6,74 +6,148 @@ snapshot[`mips/instructions/test_mips_instruction_010.s 1`] = ` error: false, keyboard: "", memory: { - "0": 32, - "1": 8, - "11": 5, + "0": 60, + "1": 1, + "10": 128, + "100": 32, + "101": 13, + "103": 1, + "104": 2, + "105": 18, + "106": 8, + "107": 42, + "108": 16, + "109": 1, + "11": 32, + "111": 8, + "112": 32, + "113": 14, + "115": 1, + "116": 2, + "117": 80, + "118": 8, + "119": 42, "12": 60, + "120": 16, + "121": 1, + "123": 8, + "124": 32, + "125": 15, + "127": 1, + "128": 2, + "129": 51, "13": 1, - "15": 4, + "130": 8, + "131": 42, + "132": 16, + "133": 1, + "135": 8, + "136": 32, + "137": 24, + "139": 1, + "14": 255, + "140": 2, + "141": 113, + "142": 8, + "143": 42, + "144": 16, + "145": 1, + "147": 8, + "148": 32, + "149": 25, + "15": 255, + "151": 1, + "152": 3, + "153": 224, + "155": 8, "16": 52, "17": 33, - "18": 69, - "19": 98, - "2": 1, + "18": 255, + "19": 246, + "2": 255, "21": 32, - "22": 88, + "22": 136, "23": 32, - "24": 1, - "25": 11, - "26": 8, - "27": 42, - "28": 16, - "29": 1, - "3": 105, - "31": 24, - "32": 1, - "33": 104, + "24": 32, + "25": 18, + "27": 15, + "28": 32, + "29": 19, + "3": 255, + "31": 32, + "32": 2, + "33": 16, "34": 8, "35": 42, "36": 16, "37": 1, - "39": 16, - "4": 32, + "39": 8, + "4": 52, "40": 32, - "41": 14, - "43": 34, - "44": 32, - "45": 2, - "47": 10, - "5": 9, - "51": 12, + "41": 8, + "43": 1, + "44": 2, + "45": 17, + "46": 8, + "47": 42, + "48": 16, + "49": 1, + "5": 33, + "51": 8, "52": 32, - "53": 12, - "54": 7, - "55": 84, - "56": 32, - "57": 13, - "58": 2, - "59": 43, - "60": 1, - "61": 141, - "62": 8, - "63": 42, - "64": 16, - "65": 1, - "66": 255, - "67": 232, - "7": 2, - "8": 32, - "9": 10, + "53": 9, + "55": 1, + "56": 2, + "57": 48, + "58": 8, + "59": 42, + "6": 255, + "60": 16, + "61": 1, + "63": 8, + "64": 32, + "65": 10, + "67": 1, + "68": 2, + "69": 82, + "7": 216, + "70": 8, + "71": 42, + "72": 16, + "73": 1, + "75": 8, + "76": 32, + "77": 11, + "79": 1, + "80": 2, + "81": 83, + "82": 8, + "83": 42, + "84": 16, + "85": 1, + "87": 8, + "88": 32, + "89": 12, + "9": 32, + "91": 1, + "92": 2, + "93": 114, + "94": 8, + "95": 42, + "96": 16, + "97": 1, + "99": 8, }, registers: { - "10,t2": "0x5", - "11,t3": "0x44562", - "12,t4": "0x754", - "13,t5": "0x22b", - "14,t6": "0x22", - "2,v0": "0xa", - "8,t0": "0x169", - "9,t1": "0x2", - PC: "0x34", + "12,t4": "0x1", + "14,t6": "0x1", + "16,s0": "0xffffffd8", + "17,s1": "0xfffffff6", + "18,s2": "0xf", + "19,s3": "0x20", + "24,t8": "0x1", + "9,t1": "0x1", + PC: "0xffffffff", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_011.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_011.s.snap index 84df901c2..febfa25e6 100644 --- a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_011.s.snap +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_011.s.snap @@ -6,75 +6,151 @@ snapshot[`mips/instructions/test_mips_instruction_011.s 1`] = ` error: false, keyboard: "", memory: { - "0": 32, - "1": 8, - "11": 5, + "0": 60, + "1": 1, + "10": 128, + "100": 32, + "101": 13, + "103": 1, + "104": 2, + "105": 18, + "106": 8, + "107": 43, + "108": 20, + "109": 1, + "11": 32, + "111": 8, + "112": 32, + "113": 14, + "115": 1, + "116": 2, + "117": 80, + "118": 8, + "119": 43, "12": 60, + "120": 20, + "121": 1, + "123": 8, + "124": 32, + "125": 15, + "127": 1, + "128": 2, + "129": 51, "13": 1, - "15": 4, + "130": 8, + "131": 43, + "132": 20, + "133": 1, + "135": 8, + "136": 32, + "137": 24, + "139": 1, + "14": 255, + "140": 2, + "141": 113, + "142": 8, + "143": 43, + "144": 20, + "145": 1, + "147": 8, + "148": 32, + "149": 25, + "15": 255, + "151": 1, + "152": 3, + "153": 224, + "155": 8, "16": 52, "17": 33, - "18": 69, - "19": 98, - "2": 1, + "18": 255, + "19": 246, + "2": 255, "21": 32, - "22": 88, + "22": 136, "23": 32, - "24": 1, - "25": 10, - "26": 8, - "27": 43, - "28": 20, - "29": 1, - "3": 105, - "31": 24, - "32": 1, - "33": 40, + "24": 32, + "25": 18, + "27": 15, + "28": 32, + "29": 19, + "3": 255, + "31": 32, + "32": 2, + "33": 16, "34": 8, "35": 43, "36": 20, "37": 1, - "39": 16, - "4": 32, + "39": 8, + "4": 52, "40": 32, - "41": 14, - "43": 34, - "44": 32, - "45": 2, - "47": 10, - "5": 9, - "51": 12, + "41": 8, + "43": 1, + "44": 2, + "45": 17, + "46": 8, + "47": 43, + "48": 20, + "49": 1, + "5": 33, + "51": 8, "52": 32, - "53": 12, - "54": 7, - "55": 84, - "56": 32, - "57": 13, - "58": 2, + "53": 9, + "55": 1, + "56": 2, + "57": 48, + "58": 8, "59": 43, - "60": 1, - "61": 172, - "62": 8, - "63": 43, - "64": 20, - "65": 1, - "66": 255, - "67": 232, - "7": 2, - "8": 32, - "9": 10, + "6": 255, + "60": 20, + "61": 1, + "63": 8, + "64": 32, + "65": 10, + "67": 1, + "68": 2, + "69": 82, + "7": 216, + "70": 8, + "71": 43, + "72": 20, + "73": 1, + "75": 8, + "76": 32, + "77": 11, + "79": 1, + "80": 2, + "81": 83, + "82": 8, + "83": 43, + "84": 20, + "85": 1, + "87": 8, + "88": 32, + "89": 12, + "9": 32, + "91": 1, + "92": 2, + "93": 114, + "94": 8, + "95": 43, + "96": 20, + "97": 1, + "99": 8, }, registers: { "1,at": "0x1", - "10,t2": "0x5", - "11,t3": "0x44562", - "12,t4": "0x754", - "13,t5": "0x22b", - "14,t6": "0x22", - "2,v0": "0xa", - "8,t0": "0x169", - "9,t1": "0x2", - PC: "0x34", + "10,t2": "0x1", + "11,t3": "0x1", + "13,t5": "0x1", + "14,t6": "0x1", + "16,s0": "0xffffffd8", + "17,s1": "0xfffffff6", + "18,s2": "0xf", + "19,s3": "0x20", + "24,t8": "0x1", + "8,t0": "0x1", + PC: "0xffffffff", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_012.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_012.s.snap index 5e91a5ec5..83fb2eda3 100644 --- a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_012.s.snap +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_012.s.snap @@ -6,74 +6,149 @@ snapshot[`mips/instructions/test_mips_instruction_012.s 1`] = ` error: false, keyboard: "", memory: { - "0": 32, - "1": 8, - "11": 5, + "0": 60, + "1": 1, + "10": 128, + "100": 32, + "101": 13, + "103": 1, + "104": 2, + "105": 18, + "106": 8, + "107": 43, + "108": 16, + "109": 1, + "11": 32, + "111": 8, + "112": 32, + "113": 14, + "115": 1, + "116": 2, + "117": 80, + "118": 8, + "119": 43, "12": 60, + "120": 16, + "121": 1, + "123": 8, + "124": 32, + "125": 15, + "127": 1, + "128": 2, + "129": 51, "13": 1, - "15": 4, + "130": 8, + "131": 43, + "132": 16, + "133": 1, + "135": 8, + "136": 32, + "137": 24, + "139": 1, + "14": 255, + "140": 2, + "141": 113, + "142": 8, + "143": 43, + "144": 16, + "145": 1, + "147": 8, + "148": 32, + "149": 25, + "15": 255, + "151": 1, + "152": 3, + "153": 224, + "155": 8, "16": 52, "17": 33, - "18": 69, - "19": 98, - "2": 1, + "18": 255, + "19": 246, + "2": 255, "21": 32, - "22": 88, + "22": 136, "23": 32, - "24": 1, - "25": 11, - "26": 8, - "27": 43, - "28": 16, - "29": 1, - "3": 105, - "31": 24, - "32": 1, - "33": 106, + "24": 32, + "25": 18, + "27": 15, + "28": 32, + "29": 19, + "3": 255, + "31": 32, + "32": 2, + "33": 16, "34": 8, "35": 43, "36": 16, "37": 1, - "39": 16, - "4": 32, + "39": 8, + "4": 52, "40": 32, - "41": 14, - "43": 34, - "44": 32, - "45": 2, - "47": 10, - "5": 9, - "51": 12, + "41": 8, + "43": 1, + "44": 2, + "45": 17, + "46": 8, + "47": 43, + "48": 16, + "49": 1, + "5": 33, + "51": 8, "52": 32, - "53": 12, - "54": 7, - "55": 84, - "56": 32, - "57": 13, - "58": 2, + "53": 9, + "55": 1, + "56": 2, + "57": 48, + "58": 8, "59": 43, - "60": 1, - "61": 141, - "62": 8, - "63": 43, - "64": 16, - "65": 1, - "66": 255, - "67": 232, - "7": 2, - "8": 32, - "9": 10, + "6": 255, + "60": 16, + "61": 1, + "63": 8, + "64": 32, + "65": 10, + "67": 1, + "68": 2, + "69": 82, + "7": 216, + "70": 8, + "71": 43, + "72": 16, + "73": 1, + "75": 8, + "76": 32, + "77": 11, + "79": 1, + "80": 2, + "81": 83, + "82": 8, + "83": 43, + "84": 16, + "85": 1, + "87": 8, + "88": 32, + "89": 12, + "9": 32, + "91": 1, + "92": 2, + "93": 114, + "94": 8, + "95": 43, + "96": 16, + "97": 1, + "99": 8, }, registers: { - "10,t2": "0x5", - "11,t3": "0x44562", - "12,t4": "0x754", - "13,t5": "0x22b", - "14,t6": "0x22", - "2,v0": "0xa", - "8,t0": "0x169", - "9,t1": "0x2", - PC: "0x34", + "1,at": "0x1", + "12,t4": "0x1", + "15,t7": "0x1", + "16,s0": "0xffffffd8", + "17,s1": "0xfffffff6", + "18,s2": "0xf", + "19,s3": "0x20", + "25,t9": "0x1", + "9,t1": "0x1", + PC: "0xffffffff", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_042.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_042.s.snap index 543a522b7..8e7d77879 100644 --- a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_042.s.snap +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_042.s.snap @@ -6,69 +6,151 @@ snapshot[`mips/instructions/test_mips_instruction_042.s 1`] = ` error: false, keyboard: "", memory: { - "0": 32, - "1": 8, - "11": 5, - "12": 32, - "13": 11, - "14": 2, - "15": 31, - "16": 1, - "17": 9, - "18": 8, - "19": 42, - "2": 3, - "20": 20, - "21": 1, - "23": 24, - "24": 1, - "25": 104, - "26": 8, - "27": 42, - "28": 20, - "29": 1, - "3": 114, - "31": 16, - "32": 32, - "33": 14, - "35": 34, - "36": 32, - "37": 2, - "39": 10, - "4": 32, - "43": 12, - "44": 32, - "45": 12, - "47": 11, - "48": 32, - "49": 13, - "5": 9, - "50": 2, - "51": 43, - "52": 1, - "53": 141, - "54": 8, - "55": 42, - "56": 20, - "57": 1, - "58": 255, - "59": 232, - "6": 3, - "7": 113, - "8": 32, - "9": 10, + "0": 60, + "1": 1, + "10": 128, + "100": 32, + "101": 13, + "103": 1, + "104": 2, + "105": 80, + "106": 8, + "107": 42, + "108": 20, + "109": 1, + "11": 32, + "111": 8, + "112": 32, + "113": 14, + "115": 1, + "116": 2, + "117": 18, + "118": 8, + "119": 42, + "12": 60, + "120": 20, + "121": 1, + "123": 8, + "124": 32, + "125": 15, + "127": 1, + "128": 2, + "129": 113, + "13": 1, + "130": 8, + "131": 42, + "132": 20, + "133": 1, + "135": 8, + "136": 32, + "137": 24, + "139": 1, + "14": 255, + "140": 2, + "141": 51, + "142": 8, + "143": 42, + "144": 20, + "145": 1, + "147": 8, + "148": 32, + "149": 25, + "15": 255, + "151": 1, + "152": 3, + "153": 224, + "155": 8, + "16": 52, + "17": 33, + "18": 255, + "19": 246, + "2": 255, + "21": 32, + "22": 136, + "23": 32, + "24": 32, + "25": 18, + "27": 15, + "28": 32, + "29": 19, + "3": 255, + "31": 32, + "32": 2, + "33": 16, + "34": 8, + "35": 42, + "36": 20, + "37": 1, + "39": 8, + "4": 52, + "40": 32, + "41": 8, + "43": 1, + "44": 2, + "45": 48, + "46": 8, + "47": 42, + "48": 20, + "49": 1, + "5": 33, + "51": 8, + "52": 32, + "53": 9, + "55": 1, + "56": 2, + "57": 17, + "58": 8, + "59": 42, + "6": 255, + "60": 20, + "61": 1, + "63": 8, + "64": 32, + "65": 10, + "67": 1, + "68": 2, + "69": 82, + "7": 216, + "70": 8, + "71": 42, + "72": 20, + "73": 1, + "75": 8, + "76": 32, + "77": 11, + "79": 1, + "80": 2, + "81": 114, + "82": 8, + "83": 42, + "84": 20, + "85": 1, + "87": 8, + "88": 32, + "89": 12, + "9": 32, + "91": 1, + "92": 2, + "93": 83, + "94": 8, + "95": 42, + "96": 20, + "97": 1, + "99": 8, }, registers: { "1,at": "0x1", - "10,t2": "0x5", - "11,t3": "0x21f", - "12,t4": "0xb", - "13,t5": "0x22b", - "14,t6": "0x22", - "2,v0": "0xa", - "8,t0": "0x372", - "9,t1": "0x371", - PC: "0x2c", + "11,t3": "0x1", + "12,t4": "0x1", + "14,t6": "0x1", + "16,s0": "0xffffffd8", + "17,s1": "0xfffffff6", + "18,s2": "0xf", + "19,s3": "0x20", + "24,t8": "0x1", + "8,t0": "0x1", + "9,t1": "0x1", + PC: "0xffffffff", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_043.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_043.s.snap index f20aee26f..80e65b40d 100644 --- a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_043.s.snap +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_043.s.snap @@ -8,81 +8,148 @@ snapshot[`mips/instructions/test_mips_instruction_043.s 1`] = ` memory: { "0": 60, "1": 1, - "10": 64, + "10": 128, + "100": 32, + "101": 13, + "103": 1, + "104": 2, + "105": 80, + "106": 8, + "107": 43, + "108": 20, + "109": 1, "11": 32, + "111": 8, + "112": 32, + "113": 14, + "115": 1, + "116": 2, + "117": 18, + "118": 8, + "119": 43, "12": 60, + "120": 20, + "121": 1, + "123": 8, + "124": 32, + "125": 15, + "127": 1, + "128": 2, + "129": 113, "13": 1, + "130": 8, + "131": 43, + "132": 20, + "133": 1, + "135": 8, + "136": 32, + "137": 24, + "139": 1, "14": 255, + "140": 2, + "141": 51, + "142": 8, + "143": 43, + "144": 20, + "145": 1, + "147": 8, + "148": 32, + "149": 25, "15": 255, + "151": 1, + "152": 3, + "153": 224, + "155": 8, "16": 52, "17": 33, - "18": 252, - "19": 143, + "18": 255, + "19": 246, "2": 255, "21": 32, - "22": 72, + "22": 136, "23": 32, "24": 32, - "25": 10, - "27": 5, + "25": 18, + "27": 15, "28": 32, - "29": 11, + "29": 19, "3": 255, - "30": 2, - "31": 31, - "32": 1, - "33": 40, + "31": 32, + "32": 2, + "33": 16, "34": 8, "35": 43, "36": 20, "37": 1, - "39": 24, + "39": 8, "4": 52, - "40": 1, - "41": 75, - "42": 8, - "43": 43, - "44": 20, - "45": 1, - "47": 16, - "48": 32, - "49": 14, + "40": 32, + "41": 8, + "43": 1, + "44": 2, + "45": 48, + "46": 8, + "47": 43, + "48": 20, + "49": 1, "5": 33, - "51": 34, + "51": 8, "52": 32, - "53": 2, - "55": 10, - "59": 12, - "6": 252, - "60": 32, - "61": 12, - "63": 11, + "53": 9, + "55": 1, + "56": 2, + "57": 17, + "58": 8, + "59": 43, + "6": 255, + "60": 20, + "61": 1, + "63": 8, "64": 32, - "65": 13, - "66": 2, - "67": 43, - "68": 1, - "69": 141, - "7": 142, + "65": 10, + "67": 1, + "68": 2, + "69": 82, + "7": 216, "70": 8, "71": 43, "72": 20, "73": 1, - "74": 255, - "75": 232, + "75": 8, + "76": 32, + "77": 11, + "79": 1, + "80": 2, + "81": 114, + "82": 8, + "83": 43, + "84": 20, + "85": 1, + "87": 8, + "88": 32, + "89": 12, "9": 32, + "91": 1, + "92": 2, + "93": 83, + "94": 8, + "95": 43, + "96": 20, + "97": 1, + "99": 8, }, registers: { - "1,at": "0x1", - "10,t2": "0x5", - "11,t3": "0x21f", - "12,t4": "0xb", - "13,t5": "0x22b", - "14,t6": "0x22", - "2,v0": "0xa", - "8,t0": "0xfffffc8e", - "9,t1": "0xfffffc8f", - PC: "0x3c", + "11,t3": "0x1", + "12,t4": "0x1", + "15,t7": "0x1", + "16,s0": "0xffffffd8", + "17,s1": "0xfffffff6", + "18,s2": "0xf", + "19,s3": "0x20", + "25,t9": "0x1", + "8,t0": "0x1", + "9,t1": "0x1", + PC: "0xffffffff", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_044.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_044.s.snap index ac7db661b..b51139178 100644 --- a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_044.s.snap +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_044.s.snap @@ -6,68 +6,149 @@ snapshot[`mips/instructions/test_mips_instruction_044.s 1`] = ` error: false, keyboard: "", memory: { - "0": 32, - "1": 8, - "11": 5, - "12": 32, - "13": 11, - "14": 2, - "15": 31, - "16": 1, - "17": 40, - "18": 8, - "19": 42, - "2": 3, - "20": 16, - "21": 1, - "23": 24, - "24": 1, - "25": 106, - "26": 8, - "27": 42, - "28": 16, - "29": 1, - "3": 114, - "31": 16, - "32": 32, - "33": 14, - "35": 34, - "36": 32, - "37": 2, - "39": 10, - "4": 32, - "43": 12, - "44": 32, - "45": 12, - "47": 11, - "48": 32, - "49": 13, - "5": 9, - "50": 2, - "51": 43, - "52": 1, - "53": 172, - "54": 8, - "55": 42, - "56": 16, - "57": 1, - "58": 255, - "59": 232, - "6": 3, - "7": 113, - "8": 32, - "9": 10, + "0": 60, + "1": 1, + "10": 128, + "100": 32, + "101": 13, + "103": 1, + "104": 2, + "105": 80, + "106": 8, + "107": 42, + "108": 16, + "109": 1, + "11": 32, + "111": 8, + "112": 32, + "113": 14, + "115": 1, + "116": 2, + "117": 18, + "118": 8, + "119": 42, + "12": 60, + "120": 16, + "121": 1, + "123": 8, + "124": 32, + "125": 15, + "127": 1, + "128": 2, + "129": 113, + "13": 1, + "130": 8, + "131": 42, + "132": 16, + "133": 1, + "135": 8, + "136": 32, + "137": 24, + "139": 1, + "14": 255, + "140": 2, + "141": 51, + "142": 8, + "143": 42, + "144": 16, + "145": 1, + "147": 8, + "148": 32, + "149": 25, + "15": 255, + "151": 1, + "152": 3, + "153": 224, + "155": 8, + "16": 52, + "17": 33, + "18": 255, + "19": 246, + "2": 255, + "21": 32, + "22": 136, + "23": 32, + "24": 32, + "25": 18, + "27": 15, + "28": 32, + "29": 19, + "3": 255, + "31": 32, + "32": 2, + "33": 16, + "34": 8, + "35": 42, + "36": 16, + "37": 1, + "39": 8, + "4": 52, + "40": 32, + "41": 8, + "43": 1, + "44": 2, + "45": 48, + "46": 8, + "47": 42, + "48": 16, + "49": 1, + "5": 33, + "51": 8, + "52": 32, + "53": 9, + "55": 1, + "56": 2, + "57": 17, + "58": 8, + "59": 42, + "6": 255, + "60": 16, + "61": 1, + "63": 8, + "64": 32, + "65": 10, + "67": 1, + "68": 2, + "69": 82, + "7": 216, + "70": 8, + "71": 42, + "72": 16, + "73": 1, + "75": 8, + "76": 32, + "77": 11, + "79": 1, + "80": 2, + "81": 114, + "82": 8, + "83": 42, + "84": 16, + "85": 1, + "87": 8, + "88": 32, + "89": 12, + "9": 32, + "91": 1, + "92": 2, + "93": 83, + "94": 8, + "95": 42, + "96": 16, + "97": 1, + "99": 8, }, registers: { - "10,t2": "0x5", - "11,t3": "0x21f", - "12,t4": "0xb", - "13,t5": "0x22b", - "14,t6": "0x22", - "2,v0": "0xa", - "8,t0": "0x372", - "9,t1": "0x371", - PC: "0x2c", + "1,at": "0x1", + "10,t2": "0x1", + "13,t5": "0x1", + "15,t7": "0x1", + "16,s0": "0xffffffd8", + "17,s1": "0xfffffff6", + "18,s2": "0xf", + "19,s3": "0x20", + "25,t9": "0x1", + PC: "0xffffffff", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_045.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_045.s.snap index d9a0adfac..0a13b7fa6 100644 --- a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_045.s.snap +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_045.s.snap @@ -8,94 +8,146 @@ snapshot[`mips/instructions/test_mips_instruction_045.s 1`] = ` memory: { "0": 60, "1": 1, - "10": 64, + "10": 128, + "100": 32, + "101": 13, + "103": 1, + "104": 2, + "105": 80, + "106": 8, + "107": 43, + "108": 16, + "109": 1, "11": 32, + "111": 8, + "112": 32, + "113": 14, + "115": 1, + "116": 2, + "117": 18, + "118": 8, + "119": 43, "12": 60, + "120": 16, + "121": 1, + "123": 8, + "124": 32, + "125": 15, + "127": 1, + "128": 2, + "129": 113, "13": 1, + "130": 8, + "131": 43, + "132": 16, + "133": 1, + "135": 8, + "136": 32, + "137": 24, + "139": 1, "14": 255, + "140": 2, + "141": 51, + "142": 8, + "143": 43, + "144": 16, + "145": 1, + "147": 8, + "148": 32, + "149": 25, "15": 255, + "151": 1, + "152": 3, + "153": 224, + "155": 8, "16": 52, "17": 33, - "18": 252, - "19": 143, + "18": 255, + "19": 246, "2": 255, "21": 32, - "22": 72, + "22": 136, "23": 32, "24": 32, - "25": 10, - "27": 5, - "28": 60, - "29": 1, + "25": 18, + "27": 15, + "28": 32, + "29": 19, "3": 255, - "30": 255, - "31": 255, - "32": 52, - "33": 33, - "34": 253, - "35": 225, - "37": 32, - "38": 88, - "39": 32, + "31": 32, + "32": 2, + "33": 16, + "34": 8, + "35": 43, + "36": 16, + "37": 1, + "39": 8, "4": 52, - "40": 1, - "41": 9, - "42": 8, - "43": 43, - "44": 16, - "45": 1, - "47": 24, - "48": 1, - "49": 105, + "40": 32, + "41": 8, + "43": 1, + "44": 2, + "45": 48, + "46": 8, + "47": 43, + "48": 16, + "49": 1, "5": 33, - "50": 8, - "51": 43, - "52": 16, - "53": 1, - "55": 16, - "56": 32, - "57": 14, - "59": 34, - "6": 252, - "60": 32, - "61": 2, - "63": 10, - "67": 12, - "68": 32, - "69": 12, - "7": 142, - "71": 11, - "72": 60, + "51": 8, + "52": 32, + "53": 9, + "55": 1, + "56": 2, + "57": 17, + "58": 8, + "59": 43, + "6": 255, + "60": 16, + "61": 1, + "63": 8, + "64": 32, + "65": 10, + "67": 1, + "68": 2, + "69": 82, + "7": 216, + "70": 8, + "71": 43, + "72": 16, "73": 1, - "74": 255, - "75": 255, - "76": 52, - "77": 33, - "78": 253, - "79": 213, - "81": 32, - "82": 104, - "83": 32, - "84": 1, - "85": 141, - "86": 8, - "87": 43, - "88": 16, - "89": 1, + "75": 8, + "76": 32, + "77": 11, + "79": 1, + "80": 2, + "81": 114, + "82": 8, + "83": 43, + "84": 16, + "85": 1, + "87": 8, + "88": 32, + "89": 12, "9": 32, - "90": 255, - "91": 224, + "91": 1, + "92": 2, + "93": 83, + "94": 8, + "95": 43, + "96": 16, + "97": 1, + "99": 8, }, registers: { - "10,t2": "0x5", - "11,t3": "0xfffffde1", - "12,t4": "0xb", - "13,t5": "0xfffffdd5", - "14,t6": "0x22", - "2,v0": "0xa", - "8,t0": "0xfffffc8e", - "9,t1": "0xfffffc8f", - PC: "0x44", + "10,t2": "0x1", + "13,t5": "0x1", + "14,t6": "0x1", + "16,s0": "0xffffffd8", + "17,s1": "0xfffffff6", + "18,s2": "0xf", + "19,s3": "0x20", + "24,t8": "0x1", + PC: "0xffffffff", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_051.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_051.s.snap index 1087c338e..1f2aa07a3 100644 --- a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_051.s.snap +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_051.s.snap @@ -6,46 +6,48 @@ snapshot[`mips/instructions/test_mips_instruction_051.s 1`] = ` error: false, keyboard: "", memory: { - "0": 32, - "1": 8, - "10": 255, - "11": 255, - "12": 52, - "13": 33, - "14": 255, - "15": 255, - "17": 32, - "18": 80, - "19": 32, - "20": 16, - "21": 9, - "23": 16, - "24": 32, - "25": 14, - "27": 34, + "0": 60, + "1": 1, + "10": 128, + "11": 32, + "12": 32, + "13": 17, + "15": 15, + "16": 16, + "17": 16, + "19": 8, + "2": 255, + "20": 32, + "21": 8, + "23": 1, + "24": 16, + "25": 17, + "27": 8, "28": 32, - "29": 2, - "3": 1, - "31": 10, - "35": 12, + "29": 9, + "3": 255, + "31": 1, + "32": 16, + "35": 8, "36": 32, - "37": 12, - "4": 32, - "40": 16, - "41": 12, - "42": 255, - "43": 240, - "5": 9, - "8": 60, - "9": 1, + "37": 10, + "39": 1, + "4": 52, + "40": 3, + "41": 224, + "43": 8, + "5": 33, + "6": 255, + "7": 246, + "9": 32, }, registers: { - "1,at": "0xffffffff", - "10,t2": "0xffffffff", - "14,t6": "0x22", - "2,v0": "0xa", + "1,at": "0xfffffff6", + "16,s0": "0xfffffff6", + "17,s1": "0xf", "8,t0": "0x1", - PC: "0x24", + "9,t1": "0x1", + PC: "0xffffffff", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_052.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_052.s.snap index 3e48bb1cb..d51c1d707 100644 --- a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_052.s.snap +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_052.s.snap @@ -6,38 +6,48 @@ snapshot[`mips/instructions/test_mips_instruction_052.s 1`] = ` error: false, keyboard: "", memory: { - "0": 32, - "1": 8, - "11": 20, - "12": 5, - "13": 1, - "15": 16, - "16": 32, - "17": 14, - "19": 34, + "0": 60, + "1": 1, + "10": 128, + "11": 32, + "12": 32, + "13": 17, + "15": 15, + "16": 6, + "17": 1, + "19": 8, + "2": 255, "20": 32, - "21": 2, - "23": 10, - "27": 12, + "21": 8, + "23": 1, + "24": 6, + "25": 33, + "27": 8, "28": 32, - "29": 12, - "3": 1, - "31": 2, - "32": 5, - "33": 129, - "34": 255, - "35": 240, - "4": 32, - "5": 9, - "8": 5, - "9": 33, + "29": 9, + "3": 255, + "31": 1, + "32": 4, + "33": 1, + "35": 8, + "36": 32, + "37": 10, + "39": 1, + "4": 52, + "40": 3, + "41": 224, + "43": 8, + "5": 33, + "6": 255, + "7": 246, + "9": 32, }, registers: { - "12,t4": "0x2", - "14,t6": "0x22", - "2,v0": "0xa", + "1,at": "0xfffffff6", + "16,s0": "0xfffffff6", + "17,s1": "0xf", "8,t0": "0x1", - PC: "0x1c", + PC: "0xffffffff", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_053.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_053.s.snap index 62966623a..bac734e38 100644 --- a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_053.s.snap +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_053.s.snap @@ -6,39 +6,72 @@ snapshot[`mips/instructions/test_mips_instruction_053.s 1`] = ` error: false, keyboard: "", memory: { - "0": 32, - "1": 8, - "11": 20, - "12": 5, + "0": 60, + "1": 1, + "10": 128, + "11": 32, + "12": 32, "13": 17, - "15": 16, - "16": 32, - "17": 14, - "19": 34, - "20": 32, - "21": 2, - "23": 10, - "27": 12, - "28": 32, - "29": 12, - "3": 1, - "31": 2, - "32": 5, - "33": 145, - "34": 255, - "35": 240, - "4": 32, - "5": 9, - "8": 5, - "9": 49, + "15": 15, + "16": 3, + "17": 224, + "18": 96, + "19": 32, + "2": 255, + "20": 6, + "21": 17, + "23": 8, + "24": 32, + "25": 8, + "27": 1, + "28": 3, + "29": 224, + "3": 255, + "30": 104, + "31": 32, + "32": 6, + "33": 49, + "35": 8, + "36": 32, + "37": 9, + "39": 1, + "4": 52, + "40": 3, + "41": 224, + "42": 112, + "43": 32, + "44": 4, + "45": 17, + "47": 8, + "48": 32, + "49": 10, + "5": 33, + "51": 1, + "52": 3, + "53": 224, + "54": 120, + "55": 32, + "56": 1, + "57": 128, + "58": 248, + "59": 32, + "6": 255, + "60": 3, + "61": 224, + "63": 8, + "7": 246, + "9": 32, }, registers: { - "12,t4": "0x2", - "14,t6": "0x22", - "2,v0": "0xa", - "31,ra": "0x24", + "1,at": "0xfffffff6", + "12,t4": "0xffffffff", + "13,t5": "0xffffffff", + "14,t6": "0x24", + "15,t7": "0x30", + "16,s0": "0xfffffff6", + "17,s1": "0xf", "8,t0": "0x1", - PC: "0x1c", + PC: "0xffffffff", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_054.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_054.s.snap index 4f5d8f033..f9d4a0491 100644 --- a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_054.s.snap +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_054.s.snap @@ -6,37 +6,47 @@ snapshot[`mips/instructions/test_mips_instruction_054.s 1`] = ` error: false, keyboard: "", memory: { - "0": 32, - "1": 8, - "11": 20, - "12": 29, - "15": 16, - "16": 32, - "17": 14, - "19": 34, + "0": 60, + "1": 1, + "10": 128, + "11": 32, + "12": 32, + "13": 17, + "15": 15, + "16": 30, + "19": 8, + "2": 255, "20": 32, - "21": 2, - "23": 10, - "27": 12, + "21": 8, + "23": 1, + "24": 30, + "25": 32, + "27": 8, "28": 32, - "29": 12, - "3": 1, - "31": 2, - "32": 29, - "33": 128, - "34": 255, - "35": 240, - "4": 32, - "5": 9, - "8": 29, + "29": 9, + "3": 255, + "31": 1, + "32": 28, + "35": 8, + "36": 32, + "37": 10, + "39": 1, + "4": 52, + "40": 3, + "41": 224, + "43": 8, + "5": 33, + "6": 255, + "7": 246, "9": 32, }, registers: { - "12,t4": "0x2", - "14,t6": "0x22", - "2,v0": "0xa", + "1,at": "0xfffffff6", + "10,t2": "0x1", + "16,s0": "0xfffffff6", + "17,s1": "0xf", "8,t0": "0x1", - PC: "0x1c", + PC: "0xffffffff", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_055.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_055.s.snap index 4d9144f27..7699164be 100644 --- a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_055.s.snap +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_055.s.snap @@ -6,46 +6,46 @@ snapshot[`mips/instructions/test_mips_instruction_055.s 1`] = ` error: false, keyboard: "", memory: { - "0": 32, - "1": 8, - "10": 255, - "11": 255, - "13": 32, - "14": 72, - "15": 32, - "16": 25, - "19": 20, - "20": 25, - "21": 32, - "23": 16, - "24": 32, - "25": 14, - "27": 34, + "0": 60, + "1": 1, + "10": 128, + "11": 32, + "12": 32, + "13": 17, + "15": 15, + "16": 26, + "19": 8, + "2": 255, + "20": 32, + "21": 8, + "23": 1, + "24": 26, + "25": 32, + "27": 8, "28": 32, - "29": 2, - "3": 1, - "31": 10, - "35": 12, + "29": 9, + "3": 255, + "31": 1, + "32": 24, + "35": 8, "36": 32, - "37": 12, - "4": 60, - "40": 25, - "41": 128, - "42": 255, - "43": 240, - "5": 1, + "37": 10, + "39": 1, + "4": 52, + "40": 3, + "41": 224, + "43": 8, + "5": 33, "6": 255, - "7": 255, - "8": 52, - "9": 33, + "7": 246, + "9": 32, }, registers: { - "1,at": "0xffffffff", - "14,t6": "0x22", - "2,v0": "0xa", - "8,t0": "0x1", - "9,t1": "0xffffffff", - PC: "0x24", + "1,at": "0xfffffff6", + "16,s0": "0xfffffff6", + "17,s1": "0xf", + "9,t1": "0x1", + PC: "0xffffffff", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_056.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_056.s.snap index 2c0eec16a..0bdaab423 100644 --- a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_056.s.snap +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_056.s.snap @@ -6,65 +6,47 @@ snapshot[`mips/instructions/test_mips_instruction_056.s 1`] = ` error: false, keyboard: "", memory: { - "0": 32, - "1": 8, - "10": 2, - "11": 31, - "12": 1, - "13": 9, - "14": 8, - "15": 42, - "16": 20, - "17": 1, - "19": 24, - "2": 3, - "20": 1, - "21": 73, - "22": 8, - "23": 42, - "24": 20, - "25": 1, - "27": 16, + "0": 60, + "1": 1, + "10": 128, + "11": 32, + "12": 32, + "13": 17, + "15": 15, + "16": 6, + "19": 8, + "2": 255, + "20": 32, + "21": 8, + "23": 1, + "24": 6, + "25": 32, + "27": 8, "28": 32, - "29": 14, - "3": 114, - "31": 34, - "32": 32, - "33": 2, - "35": 10, - "39": 12, - "4": 32, - "40": 32, - "41": 12, - "43": 11, - "44": 32, - "45": 13, - "46": 2, - "47": 43, - "48": 1, - "49": 141, - "5": 9, - "50": 8, - "51": 42, - "52": 20, - "53": 1, - "54": 255, - "55": 232, - "6": 3, - "7": 113, - "8": 32, - "9": 10, + "29": 9, + "3": 255, + "31": 1, + "32": 4, + "35": 8, + "36": 32, + "37": 10, + "39": 1, + "4": 52, + "40": 3, + "41": 224, + "43": 8, + "5": 33, + "6": 255, + "7": 246, + "9": 32, }, registers: { - "1,at": "0x1", - "10,t2": "0x21f", - "12,t4": "0xb", - "13,t5": "0x22b", - "14,t6": "0x22", - "2,v0": "0xa", - "8,t0": "0x372", - "9,t1": "0x371", - PC: "0x28", + "1,at": "0xfffffff6", + "10,t2": "0x1", + "16,s0": "0xfffffff6", + "17,s1": "0xf", + "9,t1": "0x1", + PC: "0xffffffff", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_057.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_057.s.snap index 4784adc3c..898dd3b3e 100644 --- a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_057.s.snap +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_057.s.snap @@ -6,59 +6,47 @@ snapshot[`mips/instructions/test_mips_instruction_057.s 1`] = ` error: false, keyboard: "", memory: { - "0": 32, - "1": 8, - "10": 255, - "11": 255, - "12": 52, - "13": 33, - "14": 255, - "15": 255, - "17": 32, - "18": 80, - "19": 32, - "20": 20, + "0": 60, + "1": 1, + "10": 128, + "11": 32, + "12": 32, + "13": 17, + "15": 15, + "16": 20, + "17": 16, + "19": 8, + "2": 255, + "20": 32, "21": 8, - "23": 16, - "24": 32, - "25": 14, - "27": 34, + "23": 1, + "24": 20, + "25": 17, + "27": 8, "28": 32, - "29": 2, - "3": 1, - "31": 10, - "35": 12, - "36": 60, - "37": 1, - "39": 3, - "4": 32, - "40": 52, - "41": 33, - "42": 151, - "43": 99, - "45": 32, - "46": 96, - "47": 32, - "48": 32, - "49": 13, - "5": 9, - "51": 170, - "52": 20, - "53": 12, - "54": 255, - "55": 228, - "8": 60, - "9": 1, + "29": 9, + "3": 255, + "31": 1, + "32": 20, + "35": 8, + "36": 32, + "37": 10, + "39": 1, + "4": 52, + "40": 3, + "41": 224, + "43": 8, + "5": 33, + "6": 255, + "7": 246, + "9": 32, }, registers: { - "1,at": "0x39763", - "10,t2": "0xffffffff", - "12,t4": "0x39763", - "13,t5": "0xaa", - "14,t6": "0x22", - "2,v0": "0xa", - "8,t0": "0x1", - PC: "0x24", + "1,at": "0xfffffff6", + "10,t2": "0x1", + "16,s0": "0xfffffff6", + "17,s1": "0xf", + PC: "0xffffffff", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_007.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_007.s.snap index 3d1143eed..cae413741 100644 --- a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_007.s.snap +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_007.s.snap @@ -6,60 +6,100 @@ snapshot[`riscv/instructions/test_riscv_instruction_007.s 1`] = ` error: false, keyboard: "", memory: { - "1": 4, + "0": 253, + "1": 128, "10": 3, - "11": 19, - "13": 80, - "14": 3, - "15": 147, - "17": 4, - "18": 68, - "19": 55, - "2": 66, - "20": 86, - "21": 36, + "11": 147, + "12": 2, + "14": 14, + "15": 19, + "17": 82, + "18": 132, + "19": 99, + "2": 2, + "21": 16, "22": 4, "23": 19, - "25": 83, - "26": 138, + "25": 98, + "26": 132, "27": 99, - "29": 98, - "3": 183, - "30": 136, - "31": 99, - "32": 2, - "33": 32, - "34": 14, - "35": 19, - "37": 160, - "38": 8, - "39": 147, - "4": 86, - "43": 115, - "45": 176, - "46": 2, + "29": 16, + "3": 147, + "30": 4, + "31": 147, + "33": 83, + "34": 4, + "35": 99, + "37": 16, + "38": 9, + "39": 19, + "4": 255, + "41": 115, + "42": 132, + "43": 99, + "45": 16, + "46": 9, "47": 147, - "48": 34, - "49": 176, - "5": 34, - "50": 3, - "51": 19, - "52": 254, - "54": 6, - "55": 227, - "6": 130, - "7": 147, - "9": 32, + "48": 1, + "49": 195, + "5": 96, + "50": 132, + "51": 99, + "53": 16, + "54": 10, + "55": 19, + "57": 126, + "58": 4, + "59": 99, + "6": 3, + "61": 16, + "62": 10, + "63": 147, + "65": 114, + "66": 132, + "67": 99, + "69": 16, + "7": 19, + "70": 11, + "71": 19, + "73": 83, + "74": 132, + "75": 99, + "77": 16, + "78": 11, + "79": 147, + "80": 1, + "81": 195, + "82": 4, + "83": 99, + "85": 16, + "86": 12, + "87": 19, + "89": 110, + "9": 240, + "90": 4, + "91": 99, + "93": 16, + "94": 12, + "95": 147, + "98": 128, + "99": 103, }, registers: { - "x17,a7": "0xa", - "x28,t3": "0x22", - "x5,t0": "0x44562", - "x6,t1": "0x2", - "x7,t2": "0x5", - "x8,fp,s0": "0x44562", - mtime: "0xb", - pc: "0x2c", + "x18,s2": "0x1", + "x20,s4": "0x1", + "x21,s5": "0x1", + "x22,s6": "0x1", + "x23,s7": "0x1", + "x24,s8": "0x1", + "x25,s9": "0x1", + "x28,t3": "0x20", + "x5,t0": "0xffffffd8", + "x6,t1": "0xfffffff6", + "x7,t2": "0xf", + "x9,s1": "0x1", + mtime: "0x17", + pc: "0xfffffffe", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_008.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_008.s.snap index 61a54cef8..573efd478 100644 --- a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_008.s.snap +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_008.s.snap @@ -6,56 +6,94 @@ snapshot[`riscv/instructions/test_riscv_instruction_008.s 1`] = ` error: false, keyboard: "", memory: { - "0": 22, - "1": 144, + "0": 253, + "1": 128, "10": 3, "11": 147, - "13": 4, - "14": 68, - "15": 55, - "16": 86, - "17": 36, - "18": 4, - "19": 19, + "12": 2, + "14": 14, + "15": 19, + "17": 82, + "18": 148, + "19": 99, "2": 2, - "21": 114, - "22": 152, - "23": 99, - "24": 2, - "25": 32, - "26": 14, - "27": 19, - "29": 160, + "21": 16, + "22": 4, + "23": 19, + "25": 98, + "26": 148, + "27": 99, + "29": 16, "3": 147, - "30": 8, + "30": 4, "31": 147, - "35": 115, - "36": 117, - "37": 64, - "38": 2, - "39": 147, - "40": 34, - "41": 176, - "42": 3, - "43": 19, - "44": 254, - "45": 98, - "46": 150, - "47": 227, - "5": 32, + "33": 83, + "34": 20, + "35": 99, + "37": 16, + "38": 9, + "39": 19, + "4": 255, + "41": 115, + "42": 148, + "43": 99, + "45": 16, + "46": 9, + "47": 147, + "48": 1, + "49": 195, + "5": 96, + "50": 148, + "51": 99, + "53": 16, + "54": 10, + "55": 19, + "57": 126, + "58": 20, + "59": 99, "6": 3, + "61": 16, + "62": 10, + "63": 147, + "65": 114, + "66": 148, + "67": 99, + "69": 16, "7": 19, - "9": 80, + "70": 11, + "71": 19, + "73": 83, + "74": 148, + "75": 99, + "77": 16, + "78": 11, + "79": 147, + "80": 1, + "81": 195, + "82": 20, + "83": 99, + "85": 16, + "86": 12, + "87": 19, + "89": 110, + "9": 240, + "90": 20, + "91": 99, + "93": 16, + "94": 12, + "95": 147, + "98": 128, + "99": 103, }, registers: { - "x17,a7": "0xa", - "x28,t3": "0x22", - "x5,t0": "0x754", - "x6,t1": "0x22b", - "x7,t2": "0x5", - "x8,fp,s0": "0x44562", - mtime: "0xc", - pc: "0x24", + "x19,s3": "0x1", + "x28,t3": "0x20", + "x5,t0": "0xffffffd8", + "x6,t1": "0xfffffff6", + "x7,t2": "0xf", + "x8,fp,s0": "0x1", + mtime: "0x11", + pc: "0xfffffffe", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_009.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_009.s.snap index 86fa6b008..dab57a18e 100644 --- a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_009.s.snap +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_009.s.snap @@ -6,61 +6,98 @@ snapshot[`riscv/instructions/test_riscv_instruction_009.s 1`] = ` error: false, keyboard: "", memory: { - "0": 22, - "1": 144, + "0": 253, + "1": 128, "10": 3, "11": 147, - "13": 4, - "14": 68, - "15": 55, - "16": 86, - "17": 36, - "18": 4, - "19": 19, + "12": 2, + "14": 14, + "15": 19, + "17": 82, + "18": 196, + "19": 99, "2": 2, - "21": 114, - "22": 202, - "23": 99, - "25": 83, - "26": 72, + "21": 16, + "22": 4, + "23": 19, + "25": 98, + "26": 196, "27": 99, - "28": 2, - "29": 32, + "29": 16, "3": 147, - "30": 14, - "31": 19, - "33": 160, - "34": 8, - "35": 147, - "39": 115, - "40": 117, - "41": 64, - "42": 4, - "43": 147, - "44": 34, - "45": 176, - "46": 5, - "47": 19, - "48": 254, - "49": 149, - "5": 32, - "50": 70, - "51": 227, + "30": 4, + "31": 147, + "33": 83, + "34": 68, + "35": 99, + "37": 16, + "38": 9, + "39": 19, + "4": 255, + "41": 115, + "42": 196, + "43": 99, + "45": 16, + "46": 9, + "47": 147, + "48": 1, + "49": 195, + "5": 96, + "50": 196, + "51": 99, + "53": 16, + "54": 10, + "55": 19, + "57": 126, + "58": 68, + "59": 99, "6": 3, + "61": 16, + "62": 10, + "63": 147, + "65": 114, + "66": 196, + "67": 99, + "69": 16, "7": 19, - "9": 80, + "70": 11, + "71": 19, + "73": 83, + "74": 196, + "75": 99, + "77": 16, + "78": 11, + "79": 147, + "80": 1, + "81": 195, + "82": 68, + "83": 99, + "85": 16, + "86": 12, + "87": 19, + "89": 110, + "9": 240, + "90": 68, + "91": 99, + "93": 16, + "94": 12, + "95": 147, + "98": 128, + "99": 103, }, registers: { - "x10,a0": "0x22b", - "x17,a7": "0xa", - "x28,t3": "0x22", - "x5,t0": "0x169", - "x6,t1": "0x2", - "x7,t2": "0x5", - "x8,fp,s0": "0x44562", - "x9,s1": "0x754", - mtime: "0xd", - pc: "0x28", + "x18,s2": "0x1", + "x19,s3": "0x1", + "x21,s5": "0x1", + "x23,s7": "0x1", + "x25,s9": "0x1", + "x28,t3": "0x20", + "x5,t0": "0xffffffd8", + "x6,t1": "0xfffffff6", + "x7,t2": "0xf", + "x8,fp,s0": "0x1", + mtime: "0x15", + pc: "0xfffffffe", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_010.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_010.s.snap index 99f9ae882..e787a2eb9 100644 --- a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_010.s.snap +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_010.s.snap @@ -6,60 +6,96 @@ snapshot[`riscv/instructions/test_riscv_instruction_010.s 1`] = ` error: false, keyboard: "", memory: { - "0": 22, - "1": 144, + "0": 253, + "1": 128, "10": 3, "11": 147, - "13": 4, - "14": 68, - "15": 55, - "16": 86, - "17": 36, - "18": 4, - "19": 19, + "12": 2, + "14": 14, + "15": 19, + "17": 82, + "18": 212, + "19": 99, "2": 2, - "21": 130, - "22": 218, - "23": 99, - "25": 84, - "26": 88, + "21": 16, + "22": 4, + "23": 19, + "25": 98, + "26": 212, "27": 99, - "28": 2, - "29": 32, + "29": 16, "3": 147, - "30": 14, - "31": 19, - "33": 160, - "34": 8, - "35": 147, - "39": 115, - "40": 117, - "41": 64, - "42": 2, - "43": 147, - "44": 34, - "45": 176, - "46": 15, + "30": 4, + "31": 147, + "33": 83, + "34": 84, + "35": 99, + "37": 16, + "38": 9, + "39": 19, + "4": 255, + "41": 115, + "42": 212, + "43": 99, + "45": 16, + "46": 9, "47": 147, - "48": 254, - "49": 98, - "5": 32, - "50": 214, - "51": 227, + "48": 1, + "49": 195, + "5": 96, + "50": 212, + "51": 99, + "53": 16, + "54": 10, + "55": 19, + "57": 126, + "58": 84, + "59": 99, "6": 3, + "61": 16, + "62": 10, + "63": 147, + "65": 114, + "66": 212, + "67": 99, + "69": 16, "7": 19, - "9": 80, + "70": 11, + "71": 19, + "73": 83, + "74": 212, + "75": 99, + "77": 16, + "78": 11, + "79": 147, + "80": 1, + "81": 195, + "82": 84, + "83": 99, + "85": 16, + "86": 12, + "87": 19, + "89": 110, + "9": 240, + "90": 84, + "91": 99, + "93": 16, + "94": 12, + "95": 147, + "98": 128, + "99": 103, }, registers: { - "x17,a7": "0xa", - "x28,t3": "0x22", - "x31,t6": "0x22b", - "x5,t0": "0x754", - "x6,t1": "0x2", - "x7,t2": "0x5", - "x8,fp,s0": "0x44562", - mtime: "0xd", - pc: "0x28", + "x20,s4": "0x1", + "x22,s6": "0x1", + "x24,s8": "0x1", + "x28,t3": "0x20", + "x5,t0": "0xffffffd8", + "x6,t1": "0xfffffff6", + "x7,t2": "0xf", + "x9,s1": "0x1", + mtime: "0x13", + pc: "0xfffffffe", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_011.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_011.s.snap index e0c5bd98b..1b80d8fd7 100644 --- a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_011.s.snap +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_011.s.snap @@ -6,61 +6,98 @@ snapshot[`riscv/instructions/test_riscv_instruction_011.s 1`] = ` error: false, keyboard: "", memory: { - "0": 22, - "1": 144, + "0": 253, + "1": 128, "10": 3, "11": 147, - "13": 4, - "14": 68, - "15": 55, - "16": 86, - "17": 36, - "18": 4, - "19": 19, + "12": 2, + "14": 14, + "15": 19, + "17": 82, + "18": 228, + "19": 99, "2": 2, - "21": 114, - "22": 234, - "23": 99, - "25": 83, - "26": 104, + "21": 16, + "22": 4, + "23": 19, + "25": 98, + "26": 228, "27": 99, - "28": 2, - "29": 32, + "29": 16, "3": 147, - "30": 14, - "31": 19, - "33": 160, - "34": 8, - "35": 147, - "39": 115, - "40": 117, - "41": 64, - "42": 4, - "43": 147, - "44": 34, - "45": 176, - "46": 5, - "47": 19, - "48": 254, - "49": 149, - "5": 32, - "50": 102, - "51": 227, + "30": 4, + "31": 147, + "33": 83, + "34": 100, + "35": 99, + "37": 16, + "38": 9, + "39": 19, + "4": 255, + "41": 115, + "42": 228, + "43": 99, + "45": 16, + "46": 9, + "47": 147, + "48": 1, + "49": 195, + "5": 96, + "50": 228, + "51": 99, + "53": 16, + "54": 10, + "55": 19, + "57": 126, + "58": 100, + "59": 99, "6": 3, + "61": 16, + "62": 10, + "63": 147, + "65": 114, + "66": 228, + "67": 99, + "69": 16, "7": 19, - "9": 80, + "70": 11, + "71": 19, + "73": 83, + "74": 228, + "75": 99, + "77": 16, + "78": 11, + "79": 147, + "80": 1, + "81": 195, + "82": 100, + "83": 99, + "85": 16, + "86": 12, + "87": 19, + "89": 110, + "9": 240, + "90": 100, + "91": 99, + "93": 16, + "94": 12, + "95": 147, + "98": 128, + "99": 103, }, registers: { - "x10,a0": "0x22b", - "x17,a7": "0xa", - "x28,t3": "0x22", - "x5,t0": "0x169", - "x6,t1": "0x2", - "x7,t2": "0x5", - "x8,fp,s0": "0x44562", - "x9,s1": "0x754", - mtime: "0xd", - pc: "0x28", + "x18,s2": "0x1", + "x19,s3": "0x1", + "x21,s5": "0x1", + "x22,s6": "0x1", + "x24,s8": "0x1", + "x28,t3": "0x20", + "x5,t0": "0xffffffd8", + "x6,t1": "0xfffffff6", + "x7,t2": "0xf", + "x8,fp,s0": "0x1", + mtime: "0x15", + pc: "0xfffffffe", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_012.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_012.s.snap index aa0c49dab..1aa342334 100644 --- a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_012.s.snap +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_012.s.snap @@ -6,60 +6,96 @@ snapshot[`riscv/instructions/test_riscv_instruction_012.s 1`] = ` error: false, keyboard: "", memory: { - "0": 22, - "1": 144, + "0": 253, + "1": 128, "10": 3, "11": 147, - "13": 4, - "14": 68, - "15": 55, - "16": 86, - "17": 36, - "18": 4, - "19": 19, + "12": 2, + "14": 14, + "15": 19, + "17": 82, + "18": 244, + "19": 99, "2": 2, - "21": 130, - "22": 250, - "23": 99, - "25": 84, - "26": 120, + "21": 16, + "22": 4, + "23": 19, + "25": 98, + "26": 244, "27": 99, - "28": 2, - "29": 32, + "29": 16, "3": 147, - "30": 14, - "31": 19, - "33": 160, - "34": 8, - "35": 147, - "39": 115, - "40": 117, - "41": 64, - "42": 2, - "43": 147, - "44": 34, - "45": 176, - "46": 15, + "30": 4, + "31": 147, + "33": 83, + "34": 116, + "35": 99, + "37": 16, + "38": 9, + "39": 19, + "4": 255, + "41": 115, + "42": 244, + "43": 99, + "45": 16, + "46": 9, "47": 147, - "48": 254, - "49": 98, - "5": 32, - "50": 246, - "51": 227, + "48": 1, + "49": 195, + "5": 96, + "50": 244, + "51": 99, + "53": 16, + "54": 10, + "55": 19, + "57": 126, + "58": 116, + "59": 99, "6": 3, + "61": 16, + "62": 10, + "63": 147, + "65": 114, + "66": 244, + "67": 99, + "69": 16, "7": 19, - "9": 80, + "70": 11, + "71": 19, + "73": 83, + "74": 244, + "75": 99, + "77": 16, + "78": 11, + "79": 147, + "80": 1, + "81": 195, + "82": 116, + "83": 99, + "85": 16, + "86": 12, + "87": 19, + "89": 110, + "9": 240, + "90": 116, + "91": 99, + "93": 16, + "94": 12, + "95": 147, + "98": 128, + "99": 103, }, registers: { - "x17,a7": "0xa", - "x28,t3": "0x22", - "x31,t6": "0x22b", - "x5,t0": "0x754", - "x6,t1": "0x2", - "x7,t2": "0x5", - "x8,fp,s0": "0x44562", - mtime: "0xd", - pc: "0x28", + "x20,s4": "0x1", + "x23,s7": "0x1", + "x25,s9": "0x1", + "x28,t3": "0x20", + "x5,t0": "0xffffffd8", + "x6,t1": "0xfffffff6", + "x7,t2": "0xf", + "x9,s1": "0x1", + mtime: "0x13", + pc: "0xfffffffe", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_042.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_042.s.snap index 26f51e141..7961a6ee0 100644 --- a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_042.s.snap +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_042.s.snap @@ -6,56 +6,98 @@ snapshot[`riscv/instructions/test_riscv_instruction_042.s 1`] = ` error: false, keyboard: "", memory: { - "0": 55, - "1": 32, + "0": 253, + "1": 128, "10": 3, "11": 147, - "12": 33, - "13": 240, - "14": 4, + "12": 2, + "14": 14, "15": 19, - "17": 98, - "18": 202, + "17": 82, + "18": 196, "19": 99, "2": 2, - "21": 84, - "22": 72, - "23": 99, - "24": 2, - "25": 32, - "26": 14, - "27": 19, - "29": 160, + "21": 16, + "22": 4, + "23": 19, + "25": 83, + "26": 68, + "27": 99, + "29": 16, "3": 147, - "30": 8, + "30": 4, "31": 147, - "35": 115, - "37": 176, - "38": 2, - "39": 147, - "4": 55, - "40": 34, - "41": 176, - "42": 3, - "43": 19, - "44": 254, - "45": 98, - "46": 198, - "47": 227, - "5": 16, + "33": 98, + "34": 196, + "35": 99, + "37": 16, + "38": 9, + "39": 19, + "4": 255, + "41": 115, + "42": 196, + "43": 99, + "45": 16, + "46": 9, + "47": 147, + "49": 126, + "5": 96, + "50": 68, + "51": 99, + "53": 16, + "54": 10, + "55": 19, + "56": 1, + "57": 195, + "58": 196, + "59": 99, "6": 3, + "61": 16, + "62": 10, + "63": 147, + "65": 83, + "66": 196, + "67": 99, + "69": 16, "7": 19, - "9": 80, + "70": 11, + "71": 19, + "73": 114, + "74": 196, + "75": 99, + "77": 16, + "78": 11, + "79": 147, + "81": 110, + "82": 68, + "83": 99, + "85": 16, + "86": 12, + "87": 19, + "88": 1, + "89": 195, + "9": 240, + "90": 68, + "91": 99, + "93": 16, + "94": 12, + "95": 147, + "98": 128, + "99": 103, }, registers: { - "x17,a7": "0xa", - "x28,t3": "0x22", - "x5,t0": "0xb", - "x6,t1": "0x22b", - "x7,t2": "0x5", - "x8,fp,s0": "0x21f", - mtime: "0xc", - pc: "0x24", + "x19,s3": "0x1", + "x20,s4": "0x1", + "x22,s6": "0x1", + "x24,s8": "0x1", + "x28,t3": "0x20", + "x5,t0": "0xffffffd8", + "x6,t1": "0xfffffff6", + "x7,t2": "0xf", + "x8,fp,s0": "0x1", + "x9,s1": "0x1", + mtime: "0x15", + pc: "0xfffffffe", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_043.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_043.s.snap index 883965a92..757333ebb 100644 --- a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_043.s.snap +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_043.s.snap @@ -6,56 +6,98 @@ snapshot[`riscv/instructions/test_riscv_instruction_043.s 1`] = ` error: false, keyboard: "", memory: { - "0": 200, - "1": 224, + "0": 253, + "1": 128, "10": 3, "11": 147, - "12": 33, - "13": 240, - "14": 4, + "12": 2, + "14": 14, "15": 19, - "17": 83, - "18": 106, + "17": 82, + "18": 228, "19": 99, "2": 2, - "21": 131, - "22": 232, - "23": 99, - "24": 2, - "25": 32, - "26": 14, - "27": 19, - "29": 160, + "21": 16, + "22": 4, + "23": 19, + "25": 83, + "26": 100, + "27": 99, + "29": 16, "3": 147, - "30": 8, + "30": 4, "31": 147, - "35": 115, - "37": 176, - "38": 2, - "39": 147, - "4": 200, - "40": 34, - "41": 176, - "42": 3, - "43": 19, - "44": 254, - "45": 98, - "46": 230, - "47": 227, - "5": 240, + "33": 98, + "34": 228, + "35": 99, + "37": 16, + "38": 9, + "39": 19, + "4": 255, + "41": 115, + "42": 228, + "43": 99, + "45": 16, + "46": 9, + "47": 147, + "49": 126, + "5": 96, + "50": 100, + "51": 99, + "53": 16, + "54": 10, + "55": 19, + "56": 1, + "57": 195, + "58": 228, + "59": 99, "6": 3, + "61": 16, + "62": 10, + "63": 147, + "65": 83, + "66": 228, + "67": 99, + "69": 16, "7": 19, - "9": 80, + "70": 11, + "71": 19, + "73": 114, + "74": 228, + "75": 99, + "77": 16, + "78": 11, + "79": 147, + "81": 110, + "82": 100, + "83": 99, + "85": 16, + "86": 12, + "87": 19, + "88": 1, + "89": 195, + "9": 240, + "90": 100, + "91": 99, + "93": 16, + "94": 12, + "95": 147, + "98": 128, + "99": 103, }, registers: { - "x17,a7": "0xa", - "x28,t3": "0x22", - "x5,t0": "0xb", - "x6,t1": "0x22b", - "x7,t2": "0x5", - "x8,fp,s0": "0x21f", - mtime: "0xc", - pc: "0x24", + "x19,s3": "0x1", + "x20,s4": "0x1", + "x23,s7": "0x1", + "x25,s9": "0x1", + "x28,t3": "0x20", + "x5,t0": "0xffffffd8", + "x6,t1": "0xfffffff6", + "x7,t2": "0xf", + "x8,fp,s0": "0x1", + "x9,s1": "0x1", + mtime: "0x15", + pc: "0xfffffffe", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_044.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_044.s.snap index b85443449..1b6f31f38 100644 --- a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_044.s.snap +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_044.s.snap @@ -6,56 +6,96 @@ snapshot[`riscv/instructions/test_riscv_instruction_044.s 1`] = ` error: false, keyboard: "", memory: { - "0": 55, - "1": 32, + "0": 253, + "1": 128, "10": 3, "11": 147, - "12": 33, - "13": 240, - "14": 4, + "12": 2, + "14": 14, "15": 19, - "17": 83, - "18": 90, + "17": 82, + "18": 212, "19": 99, "2": 2, - "21": 116, - "22": 88, - "23": 99, - "24": 2, - "25": 32, - "26": 14, - "27": 19, - "29": 160, + "21": 16, + "22": 4, + "23": 19, + "25": 83, + "26": 84, + "27": 99, + "29": 16, "3": 147, - "30": 8, + "30": 4, "31": 147, - "35": 115, - "37": 176, - "38": 2, - "39": 147, - "4": 55, - "40": 34, - "41": 176, - "42": 3, - "43": 19, - "44": 254, - "45": 83, - "46": 86, - "47": 227, - "5": 16, + "33": 98, + "34": 212, + "35": 99, + "37": 16, + "38": 9, + "39": 19, + "4": 255, + "41": 115, + "42": 212, + "43": 99, + "45": 16, + "46": 9, + "47": 147, + "49": 126, + "5": 96, + "50": 84, + "51": 99, + "53": 16, + "54": 10, + "55": 19, + "56": 1, + "57": 195, + "58": 212, + "59": 99, "6": 3, + "61": 16, + "62": 10, + "63": 147, + "65": 83, + "66": 212, + "67": 99, + "69": 16, "7": 19, - "9": 80, + "70": 11, + "71": 19, + "73": 114, + "74": 212, + "75": 99, + "77": 16, + "78": 11, + "79": 147, + "81": 110, + "82": 84, + "83": 99, + "85": 16, + "86": 12, + "87": 19, + "88": 1, + "89": 195, + "9": 240, + "90": 84, + "91": 99, + "93": 16, + "94": 12, + "95": 147, + "98": 128, + "99": 103, }, registers: { - "x17,a7": "0xa", - "x28,t3": "0x22", - "x5,t0": "0xb", - "x6,t1": "0x22b", - "x7,t2": "0x5", - "x8,fp,s0": "0x21f", - mtime: "0xc", - pc: "0x24", + "x18,s2": "0x1", + "x21,s5": "0x1", + "x23,s7": "0x1", + "x25,s9": "0x1", + "x28,t3": "0x20", + "x5,t0": "0xffffffd8", + "x6,t1": "0xfffffff6", + "x7,t2": "0xf", + mtime: "0x13", + pc: "0xfffffffe", }, sentinel_errors: [], } diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_045.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_045.s.snap index c468a7b0c..22cd08d99 100644 --- a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_045.s.snap +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_045.s.snap @@ -6,56 +6,96 @@ snapshot[`riscv/instructions/test_riscv_instruction_045.s 1`] = ` error: false, keyboard: "", memory: { - "0": 200, - "1": 224, + "0": 253, + "1": 128, "10": 3, "11": 147, - "12": 222, - "13": 16, - "14": 4, + "12": 2, + "14": 14, "15": 19, - "17": 98, - "18": 218, + "17": 82, + "18": 244, "19": 99, "2": 2, - "21": 100, - "22": 88, - "23": 99, - "24": 2, - "25": 32, - "26": 14, - "27": 19, - "29": 160, + "21": 16, + "22": 4, + "23": 19, + "25": 83, + "26": 116, + "27": 99, + "29": 16, "3": 147, - "30": 8, + "30": 4, "31": 147, - "35": 115, - "37": 176, - "38": 2, - "39": 147, - "4": 200, - "40": 221, - "41": 80, - "42": 3, - "43": 19, - "44": 254, - "45": 98, - "46": 214, - "47": 227, - "5": 240, + "33": 98, + "34": 244, + "35": 99, + "37": 16, + "38": 9, + "39": 19, + "4": 255, + "41": 115, + "42": 244, + "43": 99, + "45": 16, + "46": 9, + "47": 147, + "49": 126, + "5": 96, + "50": 116, + "51": 99, + "53": 16, + "54": 10, + "55": 19, + "56": 1, + "57": 195, + "58": 244, + "59": 99, "6": 3, + "61": 16, + "62": 10, + "63": 147, + "65": 83, + "66": 244, + "67": 99, + "69": 16, "7": 19, - "9": 80, + "70": 11, + "71": 19, + "73": 114, + "74": 244, + "75": 99, + "77": 16, + "78": 11, + "79": 147, + "81": 110, + "82": 116, + "83": 99, + "85": 16, + "86": 12, + "87": 19, + "88": 1, + "89": 195, + "9": 240, + "90": 116, + "91": 99, + "93": 16, + "94": 12, + "95": 147, + "98": 128, + "99": 103, }, registers: { - "x17,a7": "0xa", - "x28,t3": "0x22", - "x5,t0": "0xb", - "x6,t1": "0xfffffdd5", - "x7,t2": "0x5", - "x8,fp,s0": "0xfffffde1", - mtime: "0xc", - pc: "0x24", + "x18,s2": "0x1", + "x21,s5": "0x1", + "x22,s6": "0x1", + "x24,s8": "0x1", + "x28,t3": "0x20", + "x5,t0": "0xffffffd8", + "x6,t1": "0xfffffff6", + "x7,t2": "0xf", + mtime: "0x13", + pc: "0xfffffffe", }, sentinel_errors: [], } diff --git a/tests/arch/mips/instructions/test_mips_instruction_007.s b/tests/arch/mips/instructions/test_mips_instruction_007.s index d63d8f503..20c750789 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_007.s +++ b/tests/arch/mips/instructions/test_mips_instruction_007.s @@ -5,18 +5,30 @@ .text main: - li $t0, 0x44562 - li $t1, 2 - li $t2, 5 - li $t3, 0x44562 - beq $t0, $t3, jump1 + li $s0, -40 + li $s1, -10 + li $s2, 15 + li $s3, 32 - jump2: - li $t6, 34 - li $v0, 10 - syscall + beq $s0, $s0, j0 + li $t0, 1 +j0: beq $s0, $s1, j1 + li $t1, 1 +j1: beq $s1, $s0, j2 + li $t2, 1 +j2: beq $s2, $s2, j3 + li $t3, 1 +j3: beq $s2, $s3, j4 + li $t4, 1 +j4: beq $s3, $s2, j5 + li $t5, 1 +j5: beq $s0, $s2, j6 + li $t6, 1 +j6: beq $s2, $s0, j7 + li $t7, 1 +j7: beq $s1, $s3, j8 + li $t8, 1 +j8: beq $s3, $s1, end + li $t9, 1 - jump1: - li $t4, 11 - li $t5, 555 - beq $t0, $t0, jump2 +end: jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_008.s b/tests/arch/mips/instructions/test_mips_instruction_008.s index 303d953e3..d9f9b6771 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_008.s +++ b/tests/arch/mips/instructions/test_mips_instruction_008.s @@ -5,18 +5,30 @@ .text main: - li $t0, 0x44562 - li $t1, 2 - li $t2, 5 - li $t3, 0x44562 - bne $t2, $t0, jump1 + li $s0, -40 + li $s1, -10 + li $s2, 15 + li $s3, 32 - jump2: - li $t6, 34 - li $v0, 10 - syscall + bne $s0, $s0, j0 + li $t0, 1 +j0: bne $s0, $s1, j1 + li $t1, 1 +j1: bne $s1, $s0, j2 + li $t2, 1 +j2: bne $s2, $s2, j3 + li $t3, 1 +j3: bne $s2, $s3, j4 + li $t4, 1 +j4: bne $s3, $s2, j5 + li $t5, 1 +j5: bne $s0, $s2, j6 + li $t6, 1 +j6: bne $s2, $s0, j7 + li $t7, 1 +j7: bne $s1, $s3, j8 + li $t8, 1 +j8: bne $s3, $s1, end + li $t9, 1 - jump1: - li $t4, 0x754 - li $t5, 555 - bne $t0, $t2, jump2 +end: jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_009.s b/tests/arch/mips/instructions/test_mips_instruction_009.s index 1db9d8bf7..0a9abf99c 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_009.s +++ b/tests/arch/mips/instructions/test_mips_instruction_009.s @@ -5,19 +5,30 @@ .text main: - li $t0, 361 - li $t1, 2 - li $t2, 5 - li $t3, 0x44562 - blt $t0, $t2, jump1 - blt $t1, $t0, jump1 + li $s0, -40 + li $s1, -10 + li $s2, 15 + li $s3, 32 - jump2: - li $t6, 34 - li $v0, 10 - syscall + blt $s0, $s0, j0 + li $t0, 1 +j0: blt $s0, $s1, j1 + li $t1, 1 +j1: blt $s1, $s0, j2 + li $t2, 1 +j2: blt $s2, $s2, j3 + li $t3, 1 +j3: blt $s2, $s3, j4 + li $t4, 1 +j4: blt $s3, $s2, j5 + li $t5, 1 +j5: blt $s0, $s2, j6 + li $t6, 1 +j6: blt $s2, $s0, j7 + li $t7, 1 +j7: blt $s1, $s3, j8 + li $t8, 1 +j8: blt $s3, $s1, end + li $t9, 1 - jump1: - li $t4, 11 - li $t5, 555 - blt $t4, $t5, jump2 +end: jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_010.s b/tests/arch/mips/instructions/test_mips_instruction_010.s index 0340eec1a..e8fd815f5 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_010.s +++ b/tests/arch/mips/instructions/test_mips_instruction_010.s @@ -5,19 +5,30 @@ .text main: - li $t0, 361 - li $t1, 2 - li $t2, 5 - li $t3, 0x44562 - bge $t0, $t3, jump1 - bge $t3, $t0, jump1 + li $s0, -40 + li $s1, -10 + li $s2, 15 + li $s3, 32 - jump2: - li $t6, 34 - li $v0, 10 - syscall + bge $s0, $s0, j0 + li $t0, 1 +j0: bge $s0, $s1, j1 + li $t1, 1 +j1: bge $s1, $s0, j2 + li $t2, 1 +j2: bge $s2, $s2, j3 + li $t3, 1 +j3: bge $s2, $s3, j4 + li $t4, 1 +j4: bge $s3, $s2, j5 + li $t5, 1 +j5: bge $s0, $s2, j6 + li $t6, 1 +j6: bge $s2, $s0, j7 + li $t7, 1 +j7: bge $s1, $s3, j8 + li $t8, 1 +j8: bge $s3, $s1, end + li $t9, 1 - jump1: - li $t4, 0x754 - li $t5, 555 - bge $t4, $t5, jump2 +end: jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_011.s b/tests/arch/mips/instructions/test_mips_instruction_011.s index a12ad0d9b..ab3b572c4 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_011.s +++ b/tests/arch/mips/instructions/test_mips_instruction_011.s @@ -5,19 +5,30 @@ .text main: - li $t0, 361 - li $t1, 2 - li $t2, 5 - li $t3, 0x44562 - bltu $t0, $t2, jump1 - bltu $t1, $t0, jump1 + li $s0, -40 + li $s1, -10 + li $s2, 15 + li $s3, 32 - jump2: - li $t6, 34 - li $v0, 10 - syscall + bltu $s0, $s0, j0 + li $t0, 1 +j0: bltu $s0, $s1, j1 + li $t1, 1 +j1: bltu $s1, $s0, j2 + li $t2, 1 +j2: bltu $s2, $s2, j3 + li $t3, 1 +j3: bltu $s2, $s3, j4 + li $t4, 1 +j4: bltu $s3, $s2, j5 + li $t5, 1 +j5: bltu $s0, $s2, j6 + li $t6, 1 +j6: bltu $s2, $s0, j7 + li $t7, 1 +j7: bltu $s1, $s3, j8 + li $t8, 1 +j8: bltu $s3, $s1, end + li $t9, 1 - jump1: - li $t4, 0x754 - li $t5, 555 - bltu $t5, $t4, jump2 +end: jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_012.s b/tests/arch/mips/instructions/test_mips_instruction_012.s index e6cecd784..1d1e51304 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_012.s +++ b/tests/arch/mips/instructions/test_mips_instruction_012.s @@ -5,19 +5,30 @@ .text main: - li $t0, 361 - li $t1, 2 - li $t2, 5 - li $t3, 0x44562 - bgeu $t0, $t3, jump1 - bgeu $t3, $t2, jump1 + li $s0, -40 + li $s1, -10 + li $s2, 15 + li $s3, 32 - jump2: - li $t6, 34 - li $v0, 10 - syscall + bgeu $s0, $s0, j0 + li $t0, 1 +j0: bgeu $s0, $s1, j1 + li $t1, 1 +j1: bgeu $s1, $s0, j2 + li $t2, 1 +j2: bgeu $s2, $s2, j3 + li $t3, 1 +j3: bgeu $s2, $s3, j4 + li $t4, 1 +j4: bgeu $s3, $s2, j5 + li $t5, 1 +j5: bgeu $s0, $s2, j6 + li $t6, 1 +j6: bgeu $s2, $s0, j7 + li $t7, 1 +j7: bgeu $s1, $s3, j8 + li $t8, 1 +j8: bgeu $s3, $s1, end + li $t9, 1 - jump1: - li $t4, 0x754 - li $t5, 555 - bgeu $t4, $t5, jump2 +end: jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_042.s b/tests/arch/mips/instructions/test_mips_instruction_042.s index a4658fc3e..bd5e0c85a 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_042.s +++ b/tests/arch/mips/instructions/test_mips_instruction_042.s @@ -5,19 +5,30 @@ .text main: - li $t0, 882 - li $t1, 881 - li $t2, 5 - li $t3, 543 - bgt $t1, $t0, jump1 - bgt $t0, $t3, jump1 + li $s0, -40 + li $s1, -10 + li $s2, 15 + li $s3, 32 - jump2: - li $t6, 34 - li $v0, 10 - syscall + bgt $s0, $s0, j0 + li $t0, 1 +j0: bgt $s0, $s1, j1 + li $t1, 1 +j1: bgt $s1, $s0, j2 + li $t2, 1 +j2: bgt $s2, $s2, j3 + li $t3, 1 +j3: bgt $s2, $s3, j4 + li $t4, 1 +j4: bgt $s3, $s2, j5 + li $t5, 1 +j5: bgt $s0, $s2, j6 + li $t6, 1 +j6: bgt $s2, $s0, j7 + li $t7, 1 +j7: bgt $s1, $s3, j8 + li $t8, 1 +j8: bgt $s3, $s1, end + li $t9, 1 - jump1: - li $t4, 11 - li $t5, 555 - bgt $t5, $t4, jump2 +end: jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_043.s b/tests/arch/mips/instructions/test_mips_instruction_043.s index 8eaf28802..b93bf6ec3 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_043.s +++ b/tests/arch/mips/instructions/test_mips_instruction_043.s @@ -5,19 +5,30 @@ .text main: - li $t0, -882 - li $t1, -881 - li $t2, 5 - li $t3, 543 - bgtu $t0, $t1, jump1 - bgtu $t3, $t2, jump1 + li $s0, -40 + li $s1, -10 + li $s2, 15 + li $s3, 32 - jump2: - li $t6, 34 - li $v0, 10 - syscall + bgtu $s0, $s0, j0 + li $t0, 1 +j0: bgtu $s0, $s1, j1 + li $t1, 1 +j1: bgtu $s1, $s0, j2 + li $t2, 1 +j2: bgtu $s2, $s2, j3 + li $t3, 1 +j3: bgtu $s2, $s3, j4 + li $t4, 1 +j4: bgtu $s3, $s2, j5 + li $t5, 1 +j5: bgtu $s0, $s2, j6 + li $t6, 1 +j6: bgtu $s2, $s0, j7 + li $t7, 1 +j7: bgtu $s1, $s3, j8 + li $t8, 1 +j8: bgtu $s3, $s1, end + li $t9, 1 - jump1: - li $t4, 11 - li $t5, 555 - bgtu $t5, $t4, jump2 +end: jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_044.s b/tests/arch/mips/instructions/test_mips_instruction_044.s index b3d941fdd..9885838e7 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_044.s +++ b/tests/arch/mips/instructions/test_mips_instruction_044.s @@ -5,19 +5,30 @@ .text main: - li $t0, 882 - li $t1, 881 - li $t2, 5 - li $t3, 543 - ble $t0, $t1, jump1 - ble $t2, $t3, jump1 + li $s0, -40 + li $s1, -10 + li $s2, 15 + li $s3, 32 - jump2: - li $t6, 34 - li $v0, 10 - syscall + ble $s0, $s0, j0 + li $t0, 1 +j0: ble $s0, $s1, j1 + li $t1, 1 +j1: ble $s1, $s0, j2 + li $t2, 1 +j2: ble $s2, $s2, j3 + li $t3, 1 +j3: ble $s2, $s3, j4 + li $t4, 1 +j4: ble $s3, $s2, j5 + li $t5, 1 +j5: ble $s0, $s2, j6 + li $t6, 1 +j6: ble $s2, $s0, j7 + li $t7, 1 +j7: ble $s1, $s3, j8 + li $t8, 1 +j8: ble $s3, $s1, end + li $t9, 1 - jump1: - li $t4, 11 - li $t5, 555 - ble $t4, $t5, jump2 +end: jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_045.s b/tests/arch/mips/instructions/test_mips_instruction_045.s index 2e586c4f4..a2a90b916 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_045.s +++ b/tests/arch/mips/instructions/test_mips_instruction_045.s @@ -5,19 +5,30 @@ .text main: - li $t0, -882 - li $t1, -881 - li $t2, 5 - li $t3, -543 - bleu $t1, $t0, jump1 - bleu $t1, $t3, jump1 + li $s0, -40 + li $s1, -10 + li $s2, 15 + li $s3, 32 - jump2: - li $t6, 34 - li $v0, 10 - syscall + bleu $s0, $s0, j0 + li $t0, 1 +j0: bleu $s0, $s1, j1 + li $t1, 1 +j1: bleu $s1, $s0, j2 + li $t2, 1 +j2: bleu $s2, $s2, j3 + li $t3, 1 +j3: bleu $s2, $s3, j4 + li $t4, 1 +j4: bleu $s3, $s2, j5 + li $t5, 1 +j5: bleu $s0, $s2, j6 + li $t6, 1 +j6: bleu $s2, $s0, j7 + li $t7, 1 +j7: bleu $s1, $s3, j8 + li $t8, 1 +j8: bleu $s3, $s1, end + li $t9, 1 - jump1: - li $t4, 11 - li $t5, -555 - bleu $t5, $t4, jump2 +end: jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_051.s b/tests/arch/mips/instructions/test_mips_instruction_051.s index 061fd3373..28d33774b 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_051.s +++ b/tests/arch/mips/instructions/test_mips_instruction_051.s @@ -5,16 +5,14 @@ .text main: - li $t0, 1 - li $t1, 0 - li $t2, -1 - beqz $t1, jump1 + li $s0, -10 + li $s1, 15 - jump2: - li $t6, 34 - li $v0, 10 - syscall + beqz $s0, j0 + li $t0, 1 +j0: beqz $s1, j1 + li $t1, 1 +j1: beqz $0, end + li $t2, 1 - jump1: - li $t4, 0 - beqz $t4, jump2 +end: jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_052.s b/tests/arch/mips/instructions/test_mips_instruction_052.s index 4b5d9025d..b2c4476aa 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_052.s +++ b/tests/arch/mips/instructions/test_mips_instruction_052.s @@ -5,16 +5,14 @@ .text main: - li $t0, 1 - li $t1, 0 - bgez $t1, jump1 - bgez $t0, jump1 + li $s0, -10 + li $s1, 15 - jump2: - li $t6, 34 - li $v0, 10 - syscall + bgez $s0, j0 + li $t0, 1 +j0: bgez $s1, j1 + li $t1, 1 +j1: bgez $0, end + li $t2, 1 - jump1: - li $t4, 2 - bgez $t4, jump2 +end: jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_053.s b/tests/arch/mips/instructions/test_mips_instruction_053.s index bd616b8a4..0c5f02b1e 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_053.s +++ b/tests/arch/mips/instructions/test_mips_instruction_053.s @@ -5,16 +5,19 @@ .text main: - li $t0, 1 - li $t1, 0 - bgezal $t1, jump1 - bgezal $t0, jump1 + li $s0, -10 + li $s1, 15 + move $t4, $ra - jump2: - li $t6, 34 - li $v0, 10 - syscall + bgezal $s0, j0 + li $t0, 1 +j0: move $t5, $ra + bgezal $s1, j1 + li $t1, 1 +j1: move $t6, $ra + bgezal $0, end + li $t2, 1 +end: move $t7, $ra - jump1: - li $t4, 2 - bgezal $t4, jump2 + move $ra, $t4 + jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_054.s b/tests/arch/mips/instructions/test_mips_instruction_054.s index 5ef6f8858..ff25bfbc2 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_054.s +++ b/tests/arch/mips/instructions/test_mips_instruction_054.s @@ -5,16 +5,14 @@ .text main: - li $t0, 1 - li $t1, 0 - bgtz $t1, jump1 - bgtz $t0, jump1 + li $s0, -10 + li $s1, 15 - jump2: - li $t6, 34 - li $v0, 10 - syscall + bgtz $s0, j0 + li $t0, 1 +j0: bgtz $s1, j1 + li $t1, 1 +j1: bgtz $0, end + li $t2, 1 - jump1: - li $t4, 2 - bgtz $t4, jump2 +end: jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_055.s b/tests/arch/mips/instructions/test_mips_instruction_055.s index 0abfb5f6f..4828fb850 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_055.s +++ b/tests/arch/mips/instructions/test_mips_instruction_055.s @@ -5,16 +5,14 @@ .text main: - li $t0, 1 - li $t1, -1 - blez $t0, jump1 - blez $t1, jump1 + li $s0, -10 + li $s1, 15 - jump2: - li $t6, 34 - li $v0, 10 - syscall + blez $s0, j0 + li $t0, 1 +j0: blez $s1, j1 + li $t1, 1 +j1: blez $0, end + li $t2, 1 - jump1: - li $t4, 0 - blez $t4, jump2 +end: jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_056.s b/tests/arch/mips/instructions/test_mips_instruction_056.s index 966a2dcec..ebbfbea42 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_056.s +++ b/tests/arch/mips/instructions/test_mips_instruction_056.s @@ -5,18 +5,14 @@ .text main: - li $t0, 882 - li $t1, 881 - li $t2, 543 - blt $t0, $t1, jump1 - blt $t2, $t1, jump1 + li $s0, -10 + li $s1, 15 - jump2: - li $t6, 34 - li $v0, 10 - syscall + bltz $s0, j0 + li $t0, 1 +j0: bltz $s1, j1 + li $t1, 1 +j1: bltz $0, end + li $t2, 1 - jump1: - li $t4, 11 - li $t5, 555 - blt $t4, $t5, jump2 +end: jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_057.s b/tests/arch/mips/instructions/test_mips_instruction_057.s index 8ecbe5dd5..37bce784f 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_057.s +++ b/tests/arch/mips/instructions/test_mips_instruction_057.s @@ -5,17 +5,14 @@ .text main: - li $t0, 1 - li $t1, 0 - li $t2, -1 - bnez $t0, jump1 + li $s0, -10 + li $s1, 15 - jump2: - li $t6, 34 - li $v0, 10 - syscall + bnez $s0, j0 + li $t0, 1 +j0: bnez $s1, j1 + li $t1, 1 +j1: bnez $0, end + li $t2, 1 - jump1: - li $t4, 235363 - li $t5, 0xAA - bnez $t4, jump2 +end: jr $ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_007.s b/tests/arch/riscv/instructions/test_riscv_instruction_007.s index cf3a3dea5..0d7cc9674 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_007.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_007.s @@ -5,19 +5,30 @@ .text main: - li x5, 0x44562 - li x6, 2 - li x7, 5 - li x8, 0x44562 - beq x7, x5, jump1 - beq x5, x6, jump1 + li t0, -40 + li t1, -10 + li t2, 15 + li t3, 32 - jump2: - li t3, 34 - li a7, 10 - ecall + beq t0, t0, j0 + li s0, 1 +j0: beq t0, t1, j1 + li s1, 1 +j1: beq t1, t0, j2 + li s2, 1 +j2: beq t2, t2, j3 + li s3, 1 +j3: beq t2, t3, j4 + li s4, 1 +j4: beq t3, t2, j5 + li s5, 1 +j5: beq t0, t2, j6 + li s6, 1 +j6: beq t2, t0, j7 + li s7, 1 +j7: beq t1, t3, j8 + li s8, 1 +j8: beq t3, t1, end + li s9, 1 - jump1: - li x5, 11 - li x6, 555 - beq x0, x0, jump2 +end: jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_008.s b/tests/arch/riscv/instructions/test_riscv_instruction_008.s index 512216c24..f6b2657e0 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_008.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_008.s @@ -5,18 +5,30 @@ .text main: - li x5, 361 - li x6, 2 - li x7, 5 - li x8, 0x44562 - bne x5, x7, jump1 + li t0, -40 + li t1, -10 + li t2, 15 + li t3, 32 - jump2: - li t3, 34 - li a7, 10 - ecall + bne t0, t0, j0 + li s0, 1 +j0: bne t0, t1, j1 + li s1, 1 +j1: bne t1, t0, j2 + li s2, 1 +j2: bne t2, t2, j3 + li s3, 1 +j3: bne t2, t3, j4 + li s4, 1 +j4: bne t3, t2, j5 + li s5, 1 +j5: bne t0, t2, j6 + li s6, 1 +j6: bne t2, t0, j7 + li s7, 1 +j7: bne t1, t3, j8 + li s8, 1 +j8: bne t3, t1, end + li s9, 1 - jump1: - li x5, 0x754 - li x6, 555 - bne x5, x6, jump2 +end: jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_009.s b/tests/arch/riscv/instructions/test_riscv_instruction_009.s index ff148e7f8..aaa296f7a 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_009.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_009.s @@ -5,19 +5,30 @@ .text main: - li x5, 361 - li x6, 2 - li x7, 5 - li x8, 0x44562 - blt x5, x7, jump1 - blt x6, x5, jump1 + li t0, -40 + li t1, -10 + li t2, 15 + li t3, 32 - jump2: - li t3, 34 - li a7, 10 - ecall + blt t0, t0, j0 + li s0, 1 +j0: blt t0, t1, j1 + li s1, 1 +j1: blt t1, t0, j2 + li s2, 1 +j2: blt t2, t2, j3 + li s3, 1 +j3: blt t2, t3, j4 + li s4, 1 +j4: blt t3, t2, j5 + li s5, 1 +j5: blt t0, t2, j6 + li s6, 1 +j6: blt t2, t0, j7 + li s7, 1 +j7: blt t1, t3, j8 + li s8, 1 +j8: blt t3, t1, end + li s9, 1 - jump1: - li x9, 0x754 - li x10, 555 - blt x10, x9, jump2 +end: jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_010.s b/tests/arch/riscv/instructions/test_riscv_instruction_010.s index 0169ef8bd..6463d2a44 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_010.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_010.s @@ -5,20 +5,30 @@ .text main: - li x5, 361 - li x6, 2 - li x7, 5 - li x8, 0x44562 - bge x5, x8, jump1 - bge x8, x5, jump1 - - jump2: - li t3, 34 - li a7, 10 - ecall + li t0, -40 + li t1, -10 + li t2, 15 + li t3, 32 - jump1: - li x5, 0x754 - li t6, 555 - bge x5, x6, jump2 + bge t0, t0, j0 + li s0, 1 +j0: bge t0, t1, j1 + li s1, 1 +j1: bge t1, t0, j2 + li s2, 1 +j2: bge t2, t2, j3 + li s3, 1 +j3: bge t2, t3, j4 + li s4, 1 +j4: bge t3, t2, j5 + li s5, 1 +j5: bge t0, t2, j6 + li s6, 1 +j6: bge t2, t0, j7 + li s7, 1 +j7: bge t1, t3, j8 + li s8, 1 +j8: bge t3, t1, end + li s9, 1 +end: jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_011.s b/tests/arch/riscv/instructions/test_riscv_instruction_011.s index 63348a230..d3e9ca304 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_011.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_011.s @@ -5,19 +5,30 @@ .text main: - li x5, 361 - li x6, 2 - li x7, 5 - li x8, 0x44562 - bltu x5, x7, jump1 - bltu x6, x5, jump1 + li t0, -40 + li t1, -10 + li t2, 15 + li t3, 32 - jump2: - li t3, 34 - li a7, 10 - ecall + bltu t0, t0, j0 + li s0, 1 +j0: bltu t0, t1, j1 + li s1, 1 +j1: bltu t1, t0, j2 + li s2, 1 +j2: bltu t2, t2, j3 + li s3, 1 +j3: bltu t2, t3, j4 + li s4, 1 +j4: bltu t3, t2, j5 + li s5, 1 +j5: bltu t0, t2, j6 + li s6, 1 +j6: bltu t2, t0, j7 + li s7, 1 +j7: bltu t1, t3, j8 + li s8, 1 +j8: bltu t3, t1, end + li s9, 1 - jump1: - li x9, 0x754 - li x10, 555 - bltu x10, x9, jump2 +end: jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_012.s b/tests/arch/riscv/instructions/test_riscv_instruction_012.s index 00dcd7b82..5b86789b4 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_012.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_012.s @@ -5,20 +5,30 @@ .text main: - li x5, 361 - li x6, 2 - li x7, 5 - li x8, 0x44562 - bgeu x5, x8, jump1 - bgeu x8, x5, jump1 - - jump2: - li t3, 34 - li a7, 10 - ecall + li t0, -40 + li t1, -10 + li t2, 15 + li t3, 32 - jump1: - li x5, 0x754 - li t6, 555 - bgeu x5, x6, jump2 + bgeu t0, t0, j0 + li s0, 1 +j0: bgeu t0, t1, j1 + li s1, 1 +j1: bgeu t1, t0, j2 + li s2, 1 +j2: bgeu t2, t2, j3 + li s3, 1 +j3: bgeu t2, t3, j4 + li s4, 1 +j4: bgeu t3, t2, j5 + li s5, 1 +j5: bgeu t0, t2, j6 + li s6, 1 +j6: bgeu t2, t0, j7 + li s7, 1 +j7: bgeu t1, t3, j8 + li s8, 1 +j8: bgeu t3, t1, end + li s9, 1 +end: jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_042.s b/tests/arch/riscv/instructions/test_riscv_instruction_042.s index ca3df7384..5e6cea4c0 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_042.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_042.s @@ -5,19 +5,30 @@ .text main: - li x5, 882 - li x6, 881 - li x7, 5 - li x8, 543 - bgt x6, x5, jump1 - bgt x5, x8, jump1 + li t0, -40 + li t1, -10 + li t2, 15 + li t3, 32 - jump2: - li t3, 34 - li a7, 10 - ecall + bgt t0, t0, j0 + li s0, 1 +j0: bgt t0, t1, j1 + li s1, 1 +j1: bgt t1, t0, j2 + li s2, 1 +j2: bgt t2, t2, j3 + li s3, 1 +j3: bgt t2, t3, j4 + li s4, 1 +j4: bgt t3, t2, j5 + li s5, 1 +j5: bgt t0, t2, j6 + li s6, 1 +j6: bgt t2, t0, j7 + li s7, 1 +j7: bgt t1, t3, j8 + li s8, 1 +j8: bgt t3, t1, end + li s9, 1 - jump1: - li x5, 11 - li x6, 555 - bgt x6, x5, jump2 +end: jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_043.s b/tests/arch/riscv/instructions/test_riscv_instruction_043.s index 94823d18a..b67f6d2cf 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_043.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_043.s @@ -5,19 +5,30 @@ .text main: - li x5, -882 - li x6, -881 - li x7, 5 - li x8, 543 - bgtu x5, x6, jump1 - bgtu x8, x7, jump1 + li t0, -40 + li t1, -10 + li t2, 15 + li t3, 32 - jump2: - li t3, 34 - li a7, 10 - ecall + bgtu t0, t0, j0 + li s0, 1 +j0: bgtu t0, t1, j1 + li s1, 1 +j1: bgtu t1, t0, j2 + li s2, 1 +j2: bgtu t2, t2, j3 + li s3, 1 +j3: bgtu t2, t3, j4 + li s4, 1 +j4: bgtu t3, t2, j5 + li s5, 1 +j5: bgtu t0, t2, j6 + li s6, 1 +j6: bgtu t2, t0, j7 + li s7, 1 +j7: bgtu t1, t3, j8 + li s8, 1 +j8: bgtu t3, t1, end + li s9, 1 - jump1: - li x5, 11 - li x6, 555 - bgtu x6, x5, jump2 +end: jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_044.s b/tests/arch/riscv/instructions/test_riscv_instruction_044.s index 3d01c9b49..6b84468ac 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_044.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_044.s @@ -5,19 +5,30 @@ .text main: - li x5, 882 - li x6, 881 - li x7, 5 - li x8, 543 - ble x5, x6, jump1 - ble x7, x8, jump1 + li t0, -40 + li t1, -10 + li t2, 15 + li t3, 32 - jump2: - li t3, 34 - li a7, 10 - ecall + ble t0, t0, j0 + li s0, 1 +j0: ble t0, t1, j1 + li s1, 1 +j1: ble t1, t0, j2 + li s2, 1 +j2: ble t2, t2, j3 + li s3, 1 +j3: ble t2, t3, j4 + li s4, 1 +j4: ble t3, t2, j5 + li s5, 1 +j5: ble t0, t2, j6 + li s6, 1 +j6: ble t2, t0, j7 + li s7, 1 +j7: ble t1, t3, j8 + li s8, 1 +j8: ble t3, t1, end + li s9, 1 - jump1: - li x5, 11 - li x6, 555 - ble x5, x6, jump2 +end: jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_045.s b/tests/arch/riscv/instructions/test_riscv_instruction_045.s index c5cd3d611..1fbdaaa97 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_045.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_045.s @@ -5,19 +5,30 @@ .text main: - li x5, -882 - li x6, -881 - li x7, 5 - li x8, -543 - ble x6, x5, jump1 - ble x6, x8, jump1 + li t0, -40 + li t1, -10 + li t2, 15 + li t3, 32 - jump2: - li t3, 34 - li a7, 10 - ecall + bleu t0, t0, j0 + li s0, 1 +j0: bleu t0, t1, j1 + li s1, 1 +j1: bleu t1, t0, j2 + li s2, 1 +j2: bleu t2, t2, j3 + li s3, 1 +j3: bleu t2, t3, j4 + li s4, 1 +j4: bleu t3, t2, j5 + li s5, 1 +j5: bleu t0, t2, j6 + li s6, 1 +j6: bleu t2, t0, j7 + li s7, 1 +j7: bleu t1, t3, j8 + li s8, 1 +j8: bleu t3, t1, end + li s9, 1 - jump1: - li x5, 11 - li x6, -555 - ble x6, x5, jump2 +end: jr ra From 8161c919dde441a54e9bbd47d6edbf789605afc5 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Tue, 24 Mar 2026 12:40:00 +0100 Subject: [PATCH 71/85] fix(riscv): fix incorrect definition of bgez pseudoinstruction --- architecture/RISCV/RV32IMFD.yml | 2 +- architecture/RISCV/RV64IMFD.yml | 2 +- architecture/RISCV/SRV32.yml | 2 +- architecture/RISCV/SRV64.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/architecture/RISCV/RV32IMFD.yml b/architecture/RISCV/RV32IMFD.yml index 69adc05b1..a08013f0c 100644 --- a/architecture/RISCV/RV32IMFD.yml +++ b/architecture/RISCV/RV32IMFD.yml @@ -3713,7 +3713,7 @@ pseudoinstructions: - field: off type: offset_bytes definition: | - bge reg1, x0, off; + bge rs1, x0, off; help: Take the branch if the value in register rs1 is greater or equal to 0. - name: bgt diff --git a/architecture/RISCV/RV64IMFD.yml b/architecture/RISCV/RV64IMFD.yml index 2373b993f..6f20ce849 100644 --- a/architecture/RISCV/RV64IMFD.yml +++ b/architecture/RISCV/RV64IMFD.yml @@ -3906,7 +3906,7 @@ pseudoinstructions: - field: off type: offset_bytes definition: | - bge reg1, x0, off; + bge rs1, x0, off; help: Take the branch if the value in register rs1 is zero. - name: bgt diff --git a/architecture/RISCV/SRV32.yml b/architecture/RISCV/SRV32.yml index 527d075d5..1bc57cd10 100644 --- a/architecture/RISCV/SRV32.yml +++ b/architecture/RISCV/SRV32.yml @@ -4230,7 +4230,7 @@ pseudoinstructions: - field: off type: offset_bytes definition: | - bge reg1, x0, off; + bge rs1, x0, off; help: Take the branch if the value in register rs1 is zero. - name: bgt diff --git a/architecture/RISCV/SRV64.yml b/architecture/RISCV/SRV64.yml index 6a95634a6..ff392e157 100644 --- a/architecture/RISCV/SRV64.yml +++ b/architecture/RISCV/SRV64.yml @@ -4218,7 +4218,7 @@ pseudoinstructions: - field: off type: offset_bytes definition: | - bge reg1, x0, off; + bge rs1, x0, off; help: Take the branch if the value in register rs1 is zero. - name: bgt From 315d58056c441aeeebb0d7c36a16c558574a9314 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Tue, 24 Mar 2026 12:40:28 +0100 Subject: [PATCH 72/85] tests(riscv): add missing comparison with 0 conditional branch tests --- .../test_riscv_instruction_066.s.snap | 46 +++++++++++++++++++ .../test_riscv_instruction_067.s.snap | 45 ++++++++++++++++++ .../test_riscv_instruction_068.s.snap | 46 +++++++++++++++++++ .../test_riscv_instruction_069.s.snap | 45 ++++++++++++++++++ .../test_riscv_instruction_070.s.snap | 46 +++++++++++++++++++ .../test_riscv_instruction_071.s.snap | 45 ++++++++++++++++++ .../instructions/test_riscv_instruction_066.s | 18 ++++++++ .../instructions/test_riscv_instruction_067.s | 18 ++++++++ .../instructions/test_riscv_instruction_068.s | 18 ++++++++ .../instructions/test_riscv_instruction_069.s | 18 ++++++++ .../instructions/test_riscv_instruction_070.s | 18 ++++++++ .../instructions/test_riscv_instruction_071.s | 18 ++++++++ 12 files changed, 381 insertions(+) create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_066.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_067.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_068.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_069.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_070.s.snap create mode 100644 tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_071.s.snap create mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_066.s create mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_067.s create mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_068.s create mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_069.s create mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_070.s create mode 100644 tests/arch/riscv/instructions/test_riscv_instruction_071.s diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_066.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_066.s.snap new file mode 100644 index 000000000..79925257c --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_066.s.snap @@ -0,0 +1,46 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_066.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 255, + "1": 96, + "10": 4, + "11": 99, + "13": 16, + "14": 2, + "15": 147, + "17": 4, + "18": 132, + "19": 99, + "2": 4, + "21": 16, + "22": 3, + "23": 19, + "26": 4, + "27": 99, + "29": 16, + "3": 19, + "30": 3, + "31": 147, + "34": 128, + "35": 103, + "5": 240, + "6": 4, + "7": 147, + "9": 4, + }, + registers: { + "x5,t0": "0x1", + "x6,t1": "0x1", + "x8,fp,s0": "0xfffffff6", + "x9,s1": "0xf", + mtime: "0x8", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_067.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_067.s.snap new file mode 100644 index 000000000..4f66d5b21 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_067.s.snap @@ -0,0 +1,45 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_067.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 255, + "1": 96, + "10": 84, + "11": 99, + "13": 16, + "14": 2, + "15": 147, + "17": 4, + "18": 212, + "19": 99, + "2": 4, + "21": 16, + "22": 3, + "23": 19, + "26": 84, + "27": 99, + "29": 16, + "3": 19, + "30": 3, + "31": 147, + "34": 128, + "35": 103, + "5": 240, + "6": 4, + "7": 147, + "9": 4, + }, + registers: { + "x5,t0": "0x1", + "x8,fp,s0": "0xfffffff6", + "x9,s1": "0xf", + mtime: "0x7", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_068.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_068.s.snap new file mode 100644 index 000000000..eb123788e --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_068.s.snap @@ -0,0 +1,46 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_068.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 255, + "1": 96, + "10": 68, + "11": 99, + "13": 16, + "14": 2, + "15": 147, + "17": 144, + "18": 68, + "19": 99, + "2": 4, + "21": 16, + "22": 3, + "23": 19, + "26": 68, + "27": 99, + "29": 16, + "3": 19, + "30": 3, + "31": 147, + "34": 128, + "35": 103, + "5": 240, + "6": 4, + "7": 147, + "9": 128, + }, + registers: { + "x5,t0": "0x1", + "x7,t2": "0x1", + "x8,fp,s0": "0xfffffff6", + "x9,s1": "0xf", + mtime: "0x8", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_069.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_069.s.snap new file mode 100644 index 000000000..8d818f7d5 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_069.s.snap @@ -0,0 +1,45 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_069.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 255, + "1": 96, + "10": 84, + "11": 99, + "13": 16, + "14": 2, + "15": 147, + "17": 144, + "18": 84, + "19": 99, + "2": 4, + "21": 16, + "22": 3, + "23": 19, + "26": 84, + "27": 99, + "29": 16, + "3": 19, + "30": 3, + "31": 147, + "34": 128, + "35": 103, + "5": 240, + "6": 4, + "7": 147, + "9": 128, + }, + registers: { + "x6,t1": "0x1", + "x8,fp,s0": "0xfffffff6", + "x9,s1": "0xf", + mtime: "0x7", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_070.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_070.s.snap new file mode 100644 index 000000000..4c9749394 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_070.s.snap @@ -0,0 +1,46 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_070.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 255, + "1": 96, + "10": 68, + "11": 99, + "13": 16, + "14": 2, + "15": 147, + "17": 4, + "18": 196, + "19": 99, + "2": 4, + "21": 16, + "22": 3, + "23": 19, + "26": 68, + "27": 99, + "29": 16, + "3": 19, + "30": 3, + "31": 147, + "34": 128, + "35": 103, + "5": 240, + "6": 4, + "7": 147, + "9": 4, + }, + registers: { + "x6,t1": "0x1", + "x7,t2": "0x1", + "x8,fp,s0": "0xfffffff6", + "x9,s1": "0xf", + mtime: "0x8", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_071.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_071.s.snap new file mode 100644 index 000000000..d6b3e9bc8 --- /dev/null +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_071.s.snap @@ -0,0 +1,45 @@ +export const snapshot = {}; + +snapshot[`riscv/instructions/test_riscv_instruction_071.s 1`] = ` +{ + display: "", + error: false, + keyboard: "", + memory: { + "0": 255, + "1": 96, + "10": 20, + "11": 99, + "13": 16, + "14": 2, + "15": 147, + "17": 4, + "18": 148, + "19": 99, + "2": 4, + "21": 16, + "22": 3, + "23": 19, + "26": 20, + "27": 99, + "29": 16, + "3": 19, + "30": 3, + "31": 147, + "34": 128, + "35": 103, + "5": 240, + "6": 4, + "7": 147, + "9": 4, + }, + registers: { + "x7,t2": "0x1", + "x8,fp,s0": "0xfffffff6", + "x9,s1": "0xf", + mtime: "0x7", + pc: "0xfffffffe", + }, + sentinel_errors: [], +} +`; diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_066.s b/tests/arch/riscv/instructions/test_riscv_instruction_066.s new file mode 100644 index 000000000..6f8c6b60a --- /dev/null +++ b/tests/arch/riscv/instructions/test_riscv_instruction_066.s @@ -0,0 +1,18 @@ + +# +# Creator (https://creatorsim.github.io/creator/) +# + +.text + main: + li s0, -10 + li s1, 15 + + beqz s0, j0 + li t0, 1 +j0: beqz s1, j1 + li t1, 1 +j1: beqz x0, end + li t2, 1 + +end: jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_067.s b/tests/arch/riscv/instructions/test_riscv_instruction_067.s new file mode 100644 index 000000000..60b9c325d --- /dev/null +++ b/tests/arch/riscv/instructions/test_riscv_instruction_067.s @@ -0,0 +1,18 @@ + +# +# Creator (https://creatorsim.github.io/creator/) +# + +.text + main: + li s0, -10 + li s1, 15 + + bgez s0, j0 + li t0, 1 +j0: bgez s1, j1 + li t1, 1 +j1: bgez x0, end + li t2, 1 + +end: jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_068.s b/tests/arch/riscv/instructions/test_riscv_instruction_068.s new file mode 100644 index 000000000..c83042bd2 --- /dev/null +++ b/tests/arch/riscv/instructions/test_riscv_instruction_068.s @@ -0,0 +1,18 @@ + +# +# Creator (https://creatorsim.github.io/creator/) +# + +.text + main: + li s0, -10 + li s1, 15 + + bgtz s0, j0 + li t0, 1 +j0: bgtz s1, j1 + li t1, 1 +j1: bgtz x0, end + li t2, 1 + +end: jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_069.s b/tests/arch/riscv/instructions/test_riscv_instruction_069.s new file mode 100644 index 000000000..447bd11c4 --- /dev/null +++ b/tests/arch/riscv/instructions/test_riscv_instruction_069.s @@ -0,0 +1,18 @@ + +# +# Creator (https://creatorsim.github.io/creator/) +# + +.text + main: + li s0, -10 + li s1, 15 + + blez s0, j0 + li t0, 1 +j0: blez s1, j1 + li t1, 1 +j1: blez x0, end + li t2, 1 + +end: jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_070.s b/tests/arch/riscv/instructions/test_riscv_instruction_070.s new file mode 100644 index 000000000..5318bf129 --- /dev/null +++ b/tests/arch/riscv/instructions/test_riscv_instruction_070.s @@ -0,0 +1,18 @@ + +# +# Creator (https://creatorsim.github.io/creator/) +# + +.text + main: + li s0, -10 + li s1, 15 + + bltz s0, j0 + li t0, 1 +j0: bltz s1, j1 + li t1, 1 +j1: bltz x0, end + li t2, 1 + +end: jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_071.s b/tests/arch/riscv/instructions/test_riscv_instruction_071.s new file mode 100644 index 000000000..d0e91ed9c --- /dev/null +++ b/tests/arch/riscv/instructions/test_riscv_instruction_071.s @@ -0,0 +1,18 @@ + +# +# Creator (https://creatorsim.github.io/creator/) +# + +.text + main: + li s0, -10 + li s1, 15 + + bnez s0, j0 + li t0, 1 +j0: bnez s1, j1 + li t1, 1 +j1: bnez x0, end + li t2, 1 + +end: jr ra From 897e32e56238e2b2ff67d5ea5853001b627e4424 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Tue, 24 Mar 2026 13:03:39 +0100 Subject: [PATCH 73/85] fix(MIPS): fix lb/lh not sign-extending loaded values --- architecture/MIPS32.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/architecture/MIPS32.yml b/architecture/MIPS32.yml index bcf8f51a5..0dc2002ce 100644 --- a/architecture/MIPS32.yml +++ b/architecture/MIPS32.yml @@ -2364,7 +2364,8 @@ instructions: suffix: ) order: 3 definition: | - registers[reg1] = CAPI.MEM.read(registers[reg2]+val, 1, reg1, false); + const result = CAPI.MEM.read(registers[reg2]+val, 1, reg1, false); + registers[reg1] = CAPI.FP.int2uint(CAPI.FP.uint2int(result, 8)); - name: lbu template: Custom type: Memory access @@ -2484,7 +2485,8 @@ instructions: let addr = registers[reg2] + val; if (CAPI.VALIDATION.isMisaligned(addr, 2)) CAPI.VALIDATION.raise('The memory must be aligned'); - registers[reg1] = CAPI.MEM.read(addr, 2, reg1, false); + const result = CAPI.MEM.read(addr, 2, reg1, false); + registers[reg1] = CAPI.FP.int2uint(CAPI.FP.uint2int(result, 16)); - name: lhu template: Custom type: Memory access From 04a62feaed2f9a0d08b88c82156dde46671f5034 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Tue, 24 Mar 2026 13:18:53 +0100 Subject: [PATCH 74/85] fix(MIPS): fix sb/sh not writing the correct bits to memory --- architecture/MIPS32.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/architecture/MIPS32.yml b/architecture/MIPS32.yml index 0dc2002ce..7c01aae82 100644 --- a/architecture/MIPS32.yml +++ b/architecture/MIPS32.yml @@ -3495,7 +3495,7 @@ instructions: stopbit: 0 order: 2 space: false - definition: "CAPI.MEM.write(registers[base]+off, 1, registers[rt], rt, 'byte', false);" + definition: "CAPI.MEM.write(registers[base]+off, 1, BigInt.asUintN(8, registers[rt]), rt, 'byte', false);" - name: sdc1 template: Custom type: Memory access @@ -3577,7 +3577,7 @@ instructions: let addr = registers[base] + off; if (CAPI.VALIDATION.isMisaligned(addr, 2)) CAPI.VALIDATION.raise('The memory must be aligned'); - CAPI.MEM.write(addr, 2, registers[rt], rt, 'half', false); + CAPI.MEM.write(addr, 2, BigInt.asUintN(16, registers[rt]), rt, 'half', false); - name: sll template: Custom type: Arithmetic integer From 8a0b64bfe87916dabf17f739cc64fae438495a53 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Tue, 24 Mar 2026 13:28:26 +0100 Subject: [PATCH 75/85] tests: improve load/store byte/half signed/unsigned instruction tests --- .../examples/test_mips_example_013.s.snap | 2 +- .../test_mips_instruction_013.s.snap | 116 ++++++++++++------ .../test_mips_instruction_014.s.snap | 83 ++++++++----- .../examples/test_riscv_example_013.s.snap | 2 +- .../test_riscv_instruction_013.s.snap | 95 ++++++++------ .../test_riscv_instruction_014.s.snap | 79 +++++++----- .../correct/examples/test_mips_example_013.s | 2 +- .../instructions/test_mips_instruction_013.s | 15 ++- .../instructions/test_mips_instruction_014.s | 17 ++- .../correct/examples/test_riscv_example_013.s | 2 +- .../instructions/test_riscv_instruction_013.s | 13 +- .../instructions/test_riscv_instruction_014.s | 12 +- 12 files changed, 279 insertions(+), 159 deletions(-) diff --git a/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_013.s.snap b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_013.s.snap index e1ad6b48b..54a59dbe0 100644 --- a/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_013.s.snap +++ b/tests/arch/__snapshots__/mips/correct/examples/test_mips_example_013.s.snap @@ -11,7 +11,7 @@ snapshot[`mips/correct/examples/test_mips_example_013.s 1`] = ` "13": 32, "14": 64, "15": 32, - "16": 129, + "16": 145, "17": 4, "2097152": 83, "2097153": 116, diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_013.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_013.s.snap index c2afafd66..e5ced23d7 100644 --- a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_013.s.snap +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_013.s.snap @@ -9,46 +9,80 @@ snapshot[`mips/instructions/test_mips_instruction_013.s 1`] = ` "0": 60, "1": 1, "10": 64, - "100": 60, - "101": 1, - "103": 32, - "104": 52, - "105": 33, - "107": 12, - "109": 32, + "100": 133, + "101": 82, + "103": 2, + "104": 60, + "105": 1, + "107": 32, + "108": 52, + "109": 33, "11": 32, - "110": 200, - "111": 32, - "112": 163, - "113": 45, + "111": 8, + "112": 148, + "113": 51, "116": 60, "117": 1, "119": 32, "12": 60, "120": 52, "121": 33, - "123": 14, + "123": 12, "125": 32, "126": 200, "127": 32, - "128": 167, - "129": 47, + "128": 175, + "129": 43, "13": 1, - "132": 3, - "133": 224, - "135": 8, + "132": 60, + "133": 1, + "135": 32, + "136": 52, + "137": 33, + "139": 16, + "141": 32, + "142": 200, + "143": 32, + "144": 163, + "145": 45, + "148": 163, + "149": 48, "15": 32, + "151": 1, + "152": 60, + "153": 1, + "155": 32, + "156": 52, + "157": 33, + "159": 18, "16": 52, + "161": 32, + "162": 200, + "163": 32, + "164": 167, + "165": 47, + "168": 167, + "169": 50, "17": 33, + "171": 2, + "172": 3, + "173": 224, + "175": 8, "19": 4, "2097155": 14, "2097156": 127, + "2097157": 214, "2097158": 127, "2097159": 255, - "2097163": 14, - "2097164": 127, - "2097166": 127, - "2097167": 255, + "2097160": 207, + "2097161": 199, + "2097167": 14, + "2097168": 127, + "2097169": 214, + "2097170": 127, + "2097171": 255, + "2097172": 207, + "2097173": 199, "21": 32, "22": 72, "23": 32, @@ -83,39 +117,43 @@ snapshot[`mips/instructions/test_mips_instruction_013.s 1`] = ` "63": 4, "64": 144, "65": 46, - "68": 133, - "69": 79, + "68": 129, + "69": 48, + "71": 1, "72": 60, "73": 1, "75": 32, "76": 52, "77": 33, - "79": 6, - "80": 148, - "81": 56, - "84": 60, - "85": 1, - "87": 32, - "88": 52, - "89": 33, + "79": 5, + "80": 144, + "81": 49, + "84": 133, + "85": 79, + "88": 60, + "89": 1, "9": 32, - "91": 8, - "93": 32, - "94": 200, - "95": 32, - "96": 175, - "97": 43, + "91": 32, + "92": 52, + "93": 33, + "95": 6, + "96": 148, + "97": 56, }, registers: { - "1,at": "0x20000e", + "1,at": "0x200012", "10,t2": "0x200006", "11,t3": "0xe", "12,t4": "0xe", "13,t5": "0x7f", "14,t6": "0x7f", "15,t7": "0x7fff", + "16,s0": "0xffffffd6", + "17,s1": "0xd6", + "18,s2": "0xffffcfc7", + "19,s3": "0xcfc7", "24,t8": "0x7fff", - "25,t9": "0x20000e", + "25,t9": "0x200012", "8,t0": "0x200000", "9,t1": "0x200004", PC: "0xffffffff", diff --git a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_014.s.snap b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_014.s.snap index ad613abdf..67841c660 100644 --- a/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_014.s.snap +++ b/tests/arch/__snapshots__/mips/instructions/test_mips_instruction_014.s.snap @@ -17,51 +17,74 @@ snapshot[`mips/instructions/test_mips_instruction_014.s 1`] = ` "17": 33, "19": 2, "2097152": 127, - "2097154": 255, + "2097153": 214, + "2097154": 127, "2097155": 255, + "2097156": 207, + "2097157": 199, + "2097160": 127, + "2097161": 214, + "2097162": 127, + "2097163": 255, + "2097164": 207, + "2097165": 199, "21": 32, "22": 72, "23": 32, "24": 145, "25": 10, - "28": 149, - "29": 43, + "28": 145, + "29": 16, "3": 32, - "32": 60, - "33": 1, - "35": 32, - "36": 52, - "37": 33, - "39": 4, + "31": 1, + "32": 149, + "33": 43, + "36": 149, + "37": 49, + "39": 2, "4": 52, - "41": 32, - "42": 96, + "40": 60, + "41": 1, "43": 32, - "44": 161, - "45": 141, - "48": 60, - "49": 1, + "44": 52, + "45": 33, + "47": 8, + "49": 32, "5": 33, + "50": 96, "51": 32, - "52": 52, - "53": 33, - "55": 6, - "57": 32, - "58": 112, - "59": 32, - "60": 165, - "61": 207, - "64": 3, - "65": 224, - "67": 8, + "52": 161, + "53": 138, + "56": 161, + "57": 144, + "59": 1, + "60": 60, + "61": 1, + "63": 32, + "64": 52, + "65": 33, + "67": 10, + "69": 32, + "70": 112, + "71": 32, + "72": 165, + "73": 203, + "76": 165, + "77": 209, + "79": 2, + "80": 3, + "81": 224, + "83": 8, "9": 32, }, registers: { - "1,at": "0x200006", + "1,at": "0x20000a", "10,t2": "0x7f", - "11,t3": "0xffff", - "12,t4": "0x200004", - "14,t6": "0x200006", + "11,t3": "0x7fff", + "12,t4": "0x200008", + "14,t6": "0x20000a", + "16,s0": "0xd6", + "17,s1": "0xcfc7", "8,t0": "0x200000", "9,t1": "0x200002", PC: "0xffffffff", diff --git a/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_013.s.snap b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_013.s.snap index 312fa8936..2945b12bf 100644 --- a/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_013.s.snap +++ b/tests/arch/__snapshots__/riscv/correct/examples/test_riscv_example_013.s.snap @@ -10,7 +10,7 @@ snapshot[`riscv/correct/examples/test_riscv_example_013.s 1`] = ` "10": 130, "11": 147, "13": 2, - "14": 133, + "14": 197, "15": 3, "19": 115, "2": 8, diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_013.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_013.s.snap index 28d1fef2f..387107b8b 100644 --- a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_013.s.snap +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_013.s.snap @@ -20,12 +20,18 @@ snapshot[`riscv/instructions/test_riscv_instruction_013.s 1`] = ` "20": 255, "2097155": 14, "2097156": 127, + "2097157": 214, "2097158": 127, "2097159": 255, - "2097163": 14, - "2097164": 127, - "2097166": 127, - "2097167": 255, + "2097160": 207, + "2097161": 199, + "2097167": 14, + "2097168": 127, + "2097169": 214, + "2097170": 127, + "2097171": 255, + "2097172": 207, + "2097173": 199, "21": 99, "22": 131, "23": 147, @@ -36,54 +42,67 @@ snapshot[`riscv/instructions/test_riscv_instruction_013.s 1`] = ` "3": 151, "30": 5, "31": 3, - "33": 3, - "34": 150, - "35": 3, - "37": 32, - "38": 7, - "39": 23, - "40": 254, - "41": 71, - "42": 7, - "43": 19, - "45": 135, - "46": 32, - "47": 35, - "49": 32, + "33": 19, + "34": 5, + "35": 131, + "37": 3, + "38": 150, + "39": 3, + "41": 35, + "42": 150, + "43": 131, + "45": 32, + "46": 7, + "47": 23, + "48": 254, + "49": 7, "5": 2, "50": 7, - "51": 23, - "52": 253, - "53": 199, - "54": 7, - "55": 19, - "57": 167, - "59": 35, + "51": 19, + "53": 135, + "54": 32, + "55": 35, + "57": 32, + "58": 7, + "59": 23, "6": 130, - "61": 32, + "60": 253, + "61": 135, "62": 7, - "63": 23, - "64": 253, - "65": 39, - "66": 7, - "67": 19, - "69": 199, + "63": 19, + "65": 167, + "67": 35, + "69": 183, "7": 147, - "70": 16, - "71": 35, - "74": 128, - "75": 103, + "71": 163, + "73": 32, + "74": 7, + "75": 23, + "76": 252, + "77": 167, + "78": 7, + "79": 19, + "81": 199, + "82": 16, + "83": 35, + "85": 215, + "86": 17, + "87": 35, "9": 32, + "90": 128, + "91": 103, }, registers: { "x10,a0": "0x7f", + "x11,a1": "0xd6", "x12,a2": "0x7fff", - "x14,a4": "0x20000e", + "x13,a3": "0xcfc7", + "x14,a4": "0x200012", "x5,t0": "0x200000", "x6,t1": "0x200004", "x7,t2": "0x200006", "x8,fp,s0": "0xe", - mtime: "0x13", + mtime: "0x17", pc: "0xfffffffe", }, sentinel_errors: [], diff --git a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_014.s.snap b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_014.s.snap index a292e0e0c..f2cb72804 100644 --- a/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_014.s.snap +++ b/tests/arch/__snapshots__/riscv/instructions/test_riscv_instruction_014.s.snap @@ -18,48 +18,67 @@ snapshot[`riscv/instructions/test_riscv_instruction_014.s 1`] = ` "19": 3, "2": 3, "2097152": 127, - "2097154": 255, + "2097153": 214, + "2097154": 127, "2097155": 255, - "2097156": 127, - "2097158": 255, - "2097159": 255, - "21": 3, - "22": 214, - "23": 3, - "25": 32, - "26": 7, - "27": 23, - "28": 254, - "29": 199, + "2097156": 207, + "2097157": 199, + "2097158": 127, + "2097159": 214, + "2097160": 127, + "2097161": 255, + "2097162": 207, + "2097163": 199, + "21": 19, + "22": 69, + "23": 131, + "25": 3, + "26": 214, + "27": 3, + "29": 35, "3": 23, - "30": 7, - "31": 19, - "33": 167, - "35": 35, - "37": 32, + "30": 214, + "31": 131, + "33": 32, + "34": 7, + "35": 23, + "36": 254, + "37": 103, "38": 7, - "39": 23, - "40": 254, - "41": 39, - "42": 7, - "43": 19, - "45": 199, - "46": 16, - "47": 35, + "39": 19, + "41": 167, + "43": 35, + "45": 183, + "47": 163, + "49": 32, "5": 3, - "50": 128, - "51": 103, + "50": 7, + "51": 23, + "52": 253, + "53": 135, + "54": 7, + "55": 19, + "57": 199, + "58": 16, + "59": 35, "6": 3, + "61": 215, + "62": 17, + "63": 35, + "66": 128, + "67": 103, "7": 19, "9": 32, }, registers: { "x10,a0": "0x7f", - "x12,a2": "0xffff", - "x14,a4": "0x200006", + "x11,a1": "0xd6", + "x12,a2": "0x7fff", + "x13,a3": "0xcfc7", + "x14,a4": "0x200008", "x6,t1": "0x200000", "x7,t2": "0x200002", - mtime: "0xd", + mtime: "0x11", pc: "0xfffffffe", }, sentinel_errors: [], diff --git a/tests/arch/mips/correct/examples/test_mips_example_013.s b/tests/arch/mips/correct/examples/test_mips_example_013.s index 074a0c3c3..279860f79 100644 --- a/tests/arch/mips/correct/examples/test_mips_example_013.s +++ b/tests/arch/mips/correct/examples/test_mips_example_013.s @@ -9,7 +9,7 @@ .text main: li $v0, 1 la $t0, utf8 -loop: lb $a0, 0($t0) +loop: lbu $a0, 0($t0) syscall addi $t0, $t0, 1 bne $a0, $zero, loop diff --git a/tests/arch/mips/instructions/test_mips_instruction_013.s b/tests/arch/mips/instructions/test_mips_instruction_013.s index db2d72275..255a08455 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_013.s +++ b/tests/arch/mips/instructions/test_mips_instruction_013.s @@ -5,15 +5,16 @@ .data w1: .word 14 - b1: .byte 127 + b1: .byte 127, -42 .align 1 - h1: .half 32767 + h1: .half 32767, -12345 + .align 2 w2: .space 4 - b2: .space 1 + b2: .space 2 .align 1 - h2: .space 2 + h2: .space 4 .text main: @@ -27,17 +28,23 @@ main: lb $t5, 0($t1) lbu $t6, b1 + lb $s0, 1($t1) + lbu $s1, b1 + 1 lh $t7, 0($t2) lhu $t8, h1 + lh $s2, 2($t2) + lhu $s3, h1 + 2 la $t9, w2 sw $t3, 0($t9) la $t9, b2 sb $t5, 0($t9) + sb $s0, 1($t9) la $t9, h2 sh $t7, 0($t9) + sh $s2, 2($t9) jr $ra diff --git a/tests/arch/mips/instructions/test_mips_instruction_014.s b/tests/arch/mips/instructions/test_mips_instruction_014.s index d2b77184c..80178d397 100644 --- a/tests/arch/mips/instructions/test_mips_instruction_014.s +++ b/tests/arch/mips/instructions/test_mips_instruction_014.s @@ -4,13 +4,14 @@ # .data - b1: .byte 127 + b1: .byte 127, -42 .align 1 - h1: .half 65535 - b2: .space 1 + h1: .half 32767, -12345 + .align 2 + b2: .space 2 .align 1 - h2: .space 2 + h2: .space 4 .text main: @@ -19,12 +20,16 @@ main: la $t1, h1 lbu $t2, 0($t0) + lbu $s0, 1($t0) lhu $t3, 0($t1) + lhu $s1, 2($t1) la $t4, b2 - sb $t5, 0($t4) + sb $t2, 0($t4) + sb $s0, 1($t4) la $t6, h2 - sh $t7, 0($t6) + sh $t3, 0($t6) + sh $s1, 2($t6) jr $ra diff --git a/tests/arch/riscv/correct/examples/test_riscv_example_013.s b/tests/arch/riscv/correct/examples/test_riscv_example_013.s index 07643a3c4..fa6b18fc9 100644 --- a/tests/arch/riscv/correct/examples/test_riscv_example_013.s +++ b/tests/arch/riscv/correct/examples/test_riscv_example_013.s @@ -9,7 +9,7 @@ .text main: li a7, 1 la t0, utf8 -loop: lb a0, 0(t0) +loop: lbu a0, 0(t0) ecall addi t0, t0, 1 bne a0, zero, loop diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_013.s b/tests/arch/riscv/instructions/test_riscv_instruction_013.s index 3f01a3201..8505e6ef6 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_013.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_013.s @@ -5,15 +5,16 @@ .data w1: .word 14 - b1: .byte 127 + b1: .byte 127, -42 .align 1 - h1: .half 32767 + h1: .half 32767, -12345 + .align 2 w2: .zero 4 - b2: .zero 1 + b2: .zero 2 .align 1 - h2: .zero 2 + h2: .zero 4 .text main: @@ -26,9 +27,11 @@ main: #lw x9, w1 # Memory[w1] -> x9 lb x10, 0(x6) # Memory[x6] -> x10 + lb x11, 1(x6) # Memory[x6+1] -> x11 #lb x11, b1 # Memory[b1] -> x11 lh x12, 0 (x7) # Memory[x7] -> x12 + lh x13, 2 (x7) # Memory[x7+2] -> x12 #lh x13, h1 # Memory[h1] -> x13 la x14, w2 # w2 address -> x14 @@ -36,8 +39,10 @@ main: la x14, b2 # b2 address -> x14 sb x10, 0(x14) # x10 -> Memory[b2] + sb x11, 1(x14) # x11 -> Memory[b2+1] la x14, h2 # h2 address -> x14 sh x12, 0(x14) # x12 -> Memory[h2] + sh x13, 2(x14) # x13 -> Memory[h2+2] jr ra diff --git a/tests/arch/riscv/instructions/test_riscv_instruction_014.s b/tests/arch/riscv/instructions/test_riscv_instruction_014.s index 3ec4dc88b..09dcb5c8a 100644 --- a/tests/arch/riscv/instructions/test_riscv_instruction_014.s +++ b/tests/arch/riscv/instructions/test_riscv_instruction_014.s @@ -4,13 +4,13 @@ # .data - b1: .byte 127 + b1: .byte 127, -42 .align 1 - h1: .half 65535 - b2: .zero 1 + h1: .half 32767, -12345 + b2: .zero 2 .align 1 - h2: .zero 2 + h2: .zero 4 .text main: @@ -19,13 +19,17 @@ main: la x7, h1 # h1 address -> x7 lbu x10, 0(x6) # Memory[x6] -> x10 + lbu x11, 1(x6) # Memory[x6+1] -> x13 lhu x12, 0 (x7) # Memory[x7] -> x12 + lhu x13, 2 (x7) # Memory[x7+2] -> x13 la x14, b2 # b2 address -> x14 sb x10, 0(x14) # x10 -> Memory[b2] + sb x11, 1(x14) # x11 -> Memory[b2+1] la x14, h2 # h2 address -> x14 sh x12, 0(x14) # x12 -> Memory[h2] + sh x13, 2(x14) # x13 -> Memory[h2+2] jr ra From bd849cf3a5dee5ca4c5d5e07c2ca3676d77c37df Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Thu, 26 Mar 2026 13:17:04 +0100 Subject: [PATCH 76/85] tests: remove redundant simulator reset slowing down tests --- tests/unit/arch/simulator-test-utils.mts | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/unit/arch/simulator-test-utils.mts b/tests/unit/arch/simulator-test-utils.mts index 651010265..9f087eb06 100644 --- a/tests/unit/arch/simulator-test-utils.mts +++ b/tests/unit/arch/simulator-test-utils.mts @@ -167,8 +167,6 @@ export async function compileAssembly( throw new Error(`Failed to compile assembly: ${compileResult.msg}`); } - creator.reset(); - return compileResult; } From c6e16e062733043c74759272200f07cbe5bb2dec Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Thu, 26 Mar 2026 13:32:08 +0100 Subject: [PATCH 77/85] docs: added how to run/update snapshot tests --- docs/dev.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/dev.md b/docs/dev.md index 15369b840..ede2329b7 100644 --- a/docs/dev.md +++ b/docs/dev.md @@ -80,12 +80,23 @@ bun format ``` ### Run Tests + Unit tests (with [Deno](https://deno.com/)) + ```sh deno test -A --unstable-node-globals --parallel ``` +Integration tests use [Deno's snapshot testing](https://docs.deno.com/examples/snapshot_test_tutorial/). +They store the last known good result, and compare new results against the +stored snapshots to verify them (showing the differences if they don't match). +For this reason, the snapshots should always be committed to the repo. They are +run along with the other tests using the command above. The snapshots can be +created/updated automatically with: +```sh +deno test -A --unstable-node-globals --parallel -- --update +``` ## Backend RPC Server This project includes a JSON RPC server that exposes the CREATOR emulator's core functionalities. From 578bb163dcab4d6d66b16b56c376a0eb1cf2297a Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Thu, 26 Mar 2026 14:08:37 +0100 Subject: [PATCH 78/85] fix(Calculator): fix not being allowed to type hex/binary numbers --- src/web/components/simulator/Calculator.vue | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/web/components/simulator/Calculator.vue b/src/web/components/simulator/Calculator.vue index 587e9f769..1c6896dee 100644 --- a/src/web/components/simulator/Calculator.vue +++ b/src/web/components/simulator/Calculator.vue @@ -107,7 +107,7 @@ export default defineComponent({ convertFromDecimal() { try { this.error = ""; - const value = parseFloat(this.decimalInput); + const value = parseFloat(this.decimalInput || 0); if (isNaN(value)) { this.error = "Invalid decimal number"; @@ -152,23 +152,22 @@ export default defineComponent({ this.error = ""; let hexStr = this.hexInput.replace(/^0x/i, "").replace(/\s/g, ""); - if (!/^[0-9a-fA-F]+$/.test(hexStr)) { + if (!/^[0-9a-fA-F]*$/.test(hexStr)) { this.error = "Invalid hexadecimal value"; return; } + const size = Math.ceil(this.formatBits / 4); + hexStr = hexStr.padStart(size, "0").slice(-size); if (this.format === "ieee32") { - hexStr = hexStr.padStart(8, "0").substring(0, 8); this.decimalValue = hex2float("0x" + hexStr); this.binaryValue = float2bin(this.decimalValue); - this.hexValue = "0x" + hexStr.toUpperCase(); } else { // IEEE 64 - hexStr = hexStr.padStart(16, "0").substring(0, 16); this.decimalValue = hex2double("0x" + hexStr); this.binaryValue = double2bin(this.decimalValue); - this.hexValue = "0x" + hexStr.toUpperCase(); } + this.hexValue = "0x" + hexStr.toUpperCase(); this.updateBreakdown(); this.updateInputs(); @@ -182,13 +181,13 @@ export default defineComponent({ this.error = ""; let binStr = this.binaryInput.replace(/\s/g, ""); - if (!/^[01]+$/.test(binStr)) { + if (!/^[01]*$/.test(binStr)) { this.error = "Invalid binary value"; return; } const expectedBits = this.formatBits; - binStr = binStr.padStart(expectedBits, "0").substring(0, expectedBits); + binStr = binStr.padStart(expectedBits, "0").slice(-expectedBits); this.binaryValue = binStr; From b803f9ba6ce8c355d4d7c118b1d4efa574011ad4 Mon Sep 17 00:00:00 2001 From: ALVAROPING1 Date: Thu, 26 Mar 2026 14:09:33 +0100 Subject: [PATCH 79/85] chore(creatorAssemblerBase): auto-format file --- .../creatorAssembler/creatorAssemblerBase.mjs | 65 +++++++++---------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/src/core/assembler/creatorAssembler/creatorAssemblerBase.mjs b/src/core/assembler/creatorAssembler/creatorAssemblerBase.mjs index bac6e44e0..1fa0fbb46 100644 --- a/src/core/assembler/creatorAssembler/creatorAssemblerBase.mjs +++ b/src/core/assembler/creatorAssembler/creatorAssemblerBase.mjs @@ -142,7 +142,7 @@ function loadLibraryIfPresent(instructions) { // Convert hex string to binary string let binaryString = ""; for (let i = 0; i < loadedLibrary.binary.length; i += 2) { - const hexByte = loadedLibrary.binary.slice(i, i+2); + const hexByte = loadedLibrary.binary.slice(i, i + 2); const byte = parseInt(hexByte, 16); binaryString += byte.toString(2).padStart(8, "0"); } @@ -161,7 +161,10 @@ function loadLibraryIfPresent(instructions) { // Process each instruction let currentAddr = 0; for (let i = 0; i < binaryString.length; i += instructionSizeBits) { - const instructionBinary = binaryString.slice(i, i + instructionSizeBits); + const instructionBinary = binaryString.slice( + i, + i + instructionSizeBits, + ); const symbolName = symbolsByAddr.get(currentAddr); const hasSymbol = symbolName !== undefined; @@ -195,8 +198,7 @@ function loadLibraryIfPresent(instructions) { function loadDataIntoMemory(data_mem, wasmModules) { const { DataCategoryJS } = wasmModules; const wordSizeBytes = - newArchitecture.config.word_size / - newArchitecture.config.byte_size; + newArchitecture.config.word_size / newArchitecture.config.byte_size; for (let i = 0; i < data_mem.length; i++) { const data = data_mem[i]; const addr = data.address(); @@ -389,12 +391,7 @@ function loadDataIntoMemory(data_mem, wasmModules) { const stringLength = Number(size); const stringType = "string"; - main_memory.addHint( - addr, - labels, - stringType, - stringLength * 8, - ); + main_memory.addHint(addr, labels, stringType, stringLength * 8); break; } @@ -406,12 +403,7 @@ function loadDataIntoMemory(data_mem, wasmModules) { const spaceType = category === DataCategoryJS.Padding ? "padding" : "space"; - main_memory.addHint( - addr, - labels, - spaceType, - Number(size) * 8, - ); + main_memory.addHint(addr, labels, spaceType, Number(size) * 8); break; } @@ -429,23 +421,20 @@ function writeBinaryToMemory(binary, baseAddr) { // Split into words, reverse order, and concatenate const words = []; for (let j = 0; j < binary.length; j += WORDSIZE) { - words.push(binary.slice(j, j+WORDSIZE)); + words.push(binary.slice(j, j + WORDSIZE)); } const reversedBinary = words.reverse().join(""); for (let j = 0; j < reversedBinary.length; j += WORDSIZE) { - const wordBinary = reversedBinary.slice(j, j+WORDSIZE); + const wordBinary = reversedBinary.slice(j, j + WORDSIZE); const wordBytes = []; for (let k = 0; k < wordBinary.length; k += BYTESIZE) { - const byte = parseInt(wordBinary.slice(k, k+BYTESIZE), 2); + const byte = parseInt(wordBinary.slice(k, k + BYTESIZE), 2); wordBytes.push(byte); } - main_memory.writeWord( - BigInt(baseAddr + j / BYTESIZE), - wordBytes, - ); + main_memory.writeWord(BigInt(baseAddr + j / BYTESIZE), wordBytes); } } @@ -459,7 +448,7 @@ function writeLibraryToMemory() { let binaryString = ""; for (let i = 0; i < loadedLibrary.binary.length; i += 2) { - const hexByte = loadedLibrary.binary.slice(i, i+2); + const hexByte = loadedLibrary.binary.slice(i, i + 2); const byte = parseInt(hexByte, 16); binaryString += byte.toString(2).padStart(8, "0"); } @@ -469,8 +458,11 @@ function writeLibraryToMemory() { const instructionSizeBytes = instructionSizeBits / 8; for (let i = 0; i < binaryString.length; i += instructionSizeBits) { - const instructionBinary = binaryString.slice(i, i+instructionSizeBits); - writeBinaryToMemory(instructionBinary, currentAddr) + const instructionBinary = binaryString.slice( + i, + i + instructionSizeBits, + ); + writeBinaryToMemory(instructionBinary, currentAddr); currentAddr += instructionSizeBytes; } } @@ -484,7 +476,7 @@ function writeInstructionsToMemory(instructions, library_instructions) { for (let i = library_instructions; i < instructions.length; i++) { const instruction = instructions[i]; const addr = parseInt(instruction.Address, 16); - writeBinaryToMemory(instruction.binary, addr) + writeBinaryToMemory(instruction.binary, addr); } } @@ -518,7 +510,7 @@ export function assembleCreatorLibrary(code, wasmModules, ansi_color) { 0, // library_offset (not used for library compilation) "{}", // no library labels true, // library flag - ansi_color? Color.Ansi : Color.Html, + ansi_color ? Color.Ansi : Color.Html, ); // Library compilation: only binary instructions @@ -545,12 +537,14 @@ export function assembleCreatorLibrary(code, wasmModules, ansi_color) { const data_mem = compiled.data; loadDataIntoMemory(data_mem, wasmModules); } catch (error) { - return handleError(error, ansi_color) + return handleError(error, ansi_color); } // Mark global labels on library instructions for (const instruction of libraryInstructions) { - instruction.Label = instruction.Label.filter(label => label_table[label].global); + instruction.Label = instruction.Label.filter( + label => label_table[label].global, + ); if (instruction.Label.length > 0) { instruction.globl = true; } @@ -604,7 +598,7 @@ export function assembleCreatorProgram(code, wasmModules, ansi_color) { library_offset, labels_json, false, // not a library - ansi_color? Color.Ansi : Color.Html, + ansi_color ? Color.Ansi : Color.Html, ); // Normal compilation: populate instructions for execution/display @@ -631,7 +625,7 @@ export function assembleCreatorProgram(code, wasmModules, ansi_color) { const data_mem = compiled.data; loadDataIntoMemory(data_mem, wasmModules); } catch (error) { - return handleError(error, ansi_color) + return handleError(error, ansi_color); } // Write library binary to memory if present @@ -669,7 +663,12 @@ export function assembleCreatorProgram(code, wasmModules, ansi_color) { * @param {boolean} ansi_color - Whether to use ANSI or HTML colors (default: HTML) * @returns {Object} Compilation result */ -export function assembleCreatorBase(code, library, wasmModules, ansi_color = false) { +export function assembleCreatorBase( + code, + library, + wasmModules, + ansi_color = false, +) { if (library) { return assembleCreatorLibrary(code, wasmModules, ansi_color); } else { From 96f8f4256dd39c4364cbc91624f75610eedd8e8e Mon Sep 17 00:00:00 2001 From: Juan Carlos Cano Date: Fri, 27 Mar 2026 12:15:36 +0100 Subject: [PATCH 80/85] Change result_log display from v-html to interpolation --- src/web/components/ArchitectureView.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/components/ArchitectureView.vue b/src/web/components/ArchitectureView.vue index 1df3d7a30..b051cb082 100644 --- a/src/web/components/ArchitectureView.vue +++ b/src/web/components/ArchitectureView.vue @@ -292,7 +292,7 @@ export default defineComponent({ :max="architecture.config.name === 'SRV32' ? 89 : 122" >
-