diff options
-rw-r--r-- | Makefile | 1 | ||||
-rw-r--r-- | design/stack_machine.v | 7 | ||||
-rw-r--r-- | tclasm.tcl | 5 | ||||
-rwxr-xr-x | tests/stack_machine_swap/instructions.s.tcl | 17 | ||||
l--------- | tests/stack_machine_swap/test.v | 1 | ||||
-rw-r--r-- | tests/stack_machine_swap/words_to_verify.mem | 3 |
6 files changed, 34 insertions, 0 deletions
@@ -37,6 +37,7 @@ STACK_MACHINE_TESTS := \ load_store \ multiinstructions_load_store \ tee \ + swap \ add \ sub diff --git a/design/stack_machine.v b/design/stack_machine.v index 868a103..0ccc1c6 100644 --- a/design/stack_machine.v +++ b/design/stack_machine.v @@ -182,6 +182,10 @@ module stack_machine_new assign instr_nop = !set_im && !use_im && stack_same_size && instruction[11:0] == 12'd1; + wire instr_swap; + assign instr_swap = !set_im && !use_im && stack_same_size && + instruction[11:0] == 12'd2; + wire instr_set_sp; assign instr_set_sp = use_im && stack_same_size && instruction[11:7] == 5'd0; @@ -439,6 +443,9 @@ module stack_machine_new if (instr_nop) r1 <= r1; + if (instr_swap) + {r0, r1} <= {r1, r0}; + if (instr_set_sp) `SET_SP(im_effective); @@ -154,3 +154,8 @@ proc set_sp {address} { proc halt {} { puts 0000000000000000 } + + +proc swap {} { + puts 0000000000000010 +} diff --git a/tests/stack_machine_swap/instructions.s.tcl b/tests/stack_machine_swap/instructions.s.tcl new file mode 100755 index 0000000..a44ecf9 --- /dev/null +++ b/tests/stack_machine_swap/instructions.s.tcl @@ -0,0 +1,17 @@ +#!/usr/bin/env tclsh + +source tclasm.tcl + +set_sp 0 + +const h0000DEAD +const h0000BEEF + +swap + +## Because values were swapped, h0000DEAD should get written, first, at lower +## address (h100) and h0000BEEF should be written next (at h200) +store h000100 +store h000200 + +halt diff --git a/tests/stack_machine_swap/test.v b/tests/stack_machine_swap/test.v new file mode 120000 index 0000000..f5b6a59 --- /dev/null +++ b/tests/stack_machine_swap/test.v @@ -0,0 +1 @@ +../stack_machine_store/test.v
\ No newline at end of file diff --git a/tests/stack_machine_swap/words_to_verify.mem b/tests/stack_machine_swap/words_to_verify.mem new file mode 100644 index 0000000..8557c9a --- /dev/null +++ b/tests/stack_machine_swap/words_to_verify.mem @@ -0,0 +1,3 @@ +// address value + 00100 DEAD + 00200 BEEF |