aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWojciech Kosior <kwojtus@protonmail.com>2020-09-05 13:00:13 +0200
committerWojciech Kosior <kwojtus@protonmail.com>2020-09-05 13:00:13 +0200
commit67338780099d1384b36623780a5a63c3be5ade9d (patch)
tree3801abd5cde5b4480e43fe4c221316b2b276c852
parentb59715e09322f8c094126b57ba6d0424b9892a3f (diff)
downloadAGH-engineering-thesis-67338780099d1384b36623780a5a63c3be5ade9d.tar.gz
AGH-engineering-thesis-67338780099d1384b36623780a5a63c3be5ade9d.zip
add load_store bench for new stack machine
-rw-r--r--Makefile3
-rw-r--r--tclasm.tcl8
-rwxr-xr-xtests/stack_machine_load_store/instructions.s.tcl55
l---------tests/stack_machine_load_store/test.v1
-rw-r--r--tests/stack_machine_load_store/words_to_verify.mem12
5 files changed, 78 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 1f6cbce..59ec377 100644
--- a/Makefile
+++ b/Makefile
@@ -33,7 +33,8 @@ STACK_MACHINE_OLD_TESTS := \
cond_jump
STACK_MACHINE_TESTS := \
- store
+ store \
+ load_store
# Add other tests here if You need
TESTS := \
diff --git a/tclasm.tcl b/tclasm.tcl
index 27c92ae..e552b4d 100644
--- a/tclasm.tcl
+++ b/tclasm.tcl
@@ -76,6 +76,14 @@ proc _store+ {address_part} {
puts 011011100[__to_binary $address_part 7]
}
+proc _load {address_part} {
+ puts 010111100[__to_binary $address_part 7]
+}
+
+proc _load+ {address_part} {
+ puts 010011100[__to_binary $address_part 7]
+}
+
proc _set_sp {address_part} {
puts 010000000[__to_binary $address_part 7]
}
diff --git a/tests/stack_machine_load_store/instructions.s.tcl b/tests/stack_machine_load_store/instructions.s.tcl
new file mode 100755
index 0000000..4d6da2a
--- /dev/null
+++ b/tests/stack_machine_load_store/instructions.s.tcl
@@ -0,0 +1,55 @@
+#!/usr/bin/env tclsh
+
+source tclasm.tcl
+
+### set stack to 0, store 4 numbers (h2B, h3B, h4B and h5B) at addresses
+### h000002, h000012, h000022 and h000032 and load them back to stack (only 2
+### will really get written to stack's memory, other 2 will remain in r0 and
+### r1). Then, write them to h000008, h000018, h000028 and h000038.
+### At the and use operand-addressing to load back value h3B from h000018
+### (expressed as h000017 in im + h000001 in operand) and store it to h1FFFE2
+### (expressed as h1FFFC0 in im + h000022 in operand).
+
+### we're using small (in absolute) numbers and addresses for simplicity
+
+## set up stack
+_set_sp 0
+
+## get number h2B into r1, and store it - repeat for other 3 numbers;
+_const h2B
+_store h02
+
+_const h3B
+_store h12
+
+_const h2A
+_store h22
+
+_const h3A
+_store h32
+
+## get numbers back on stack
+_load h02
+_load h12
+_load h22
+_load h32
+
+## store copies to new locations
+_store h38
+_store h28
+_store h18
+_store h08
+
+## prepare operand for later store operation
+_const h22
+
+## use operand addressing to load back value from h000018
+_const h01
+_load+ h17
+
+## use operand addressing to trove value to h1FFFE2 = h1FFFC0 + h000022
+# immediate value gets sign-extended here!
+_store+ h40
+
+## finish test
+halt
diff --git a/tests/stack_machine_load_store/test.v b/tests/stack_machine_load_store/test.v
new file mode 120000
index 0000000..f5b6a59
--- /dev/null
+++ b/tests/stack_machine_load_store/test.v
@@ -0,0 +1 @@
+../stack_machine_store/test.v \ No newline at end of file
diff --git a/tests/stack_machine_load_store/words_to_verify.mem b/tests/stack_machine_load_store/words_to_verify.mem
new file mode 100644
index 0000000..c0b0d56
--- /dev/null
+++ b/tests/stack_machine_load_store/words_to_verify.mem
@@ -0,0 +1,12 @@
+// address value
+ 02 2B
+ 12 3B
+ 22 2A
+ 32 3A
+
+ 08 2B
+ 18 3B
+ 28 2A
+ 38 3A
+
+ 1FFFE2 3B