aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-06-18 01:03:15 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-06-18 01:03:15 +0200
commit6a57e671b8d534b45d07316ec751a2d99e380803 (patch)
tree94db4bead309417174671669e41263b6774fb001
parent4e04ceaf005537194177559d414fb2fc99dc3e2d (diff)
Add basewords
-rw-r--r--basewords.go55
-rw-r--r--basewords_test.go13
2 files changed, 68 insertions, 0 deletions
diff --git a/basewords.go b/basewords.go
new file mode 100644
index 0000000..47e92c5
--- /dev/null
+++ b/basewords.go
@@ -0,0 +1,55 @@
+package j1
+
+var BaseWords = map[string][]ALU{
+ "noop": {{Opcode: opN}},
+ "+": {{Opcode: opTplusN, Ddir: -1}},
+ "xor": {{Opcode: opTxorN, Ddir: -1}},
+ "and": {{Opcode: opTandN, Ddir: -1}},
+ "or": {{Opcode: opTorN, Ddir: -1}},
+ "invert": {{Opcode: opNotT}},
+ "=": {{Opcode: opNeqT, Ddir: -1}},
+ "<": {{Opcode: opNleT, Ddir: -1}},
+ "u<": {{Opcode: opNuleT, Ddir: -1}},
+ "swap": {{Opcode: opN, TtoN: true}},
+ "dup": {{Opcode: opT, TtoN: true, Ddir: 1}},
+ "drop": {{Opcode: opN, Ddir: -1}},
+ "over": {{Opcode: opN, TtoN: true, Ddir: 1}},
+ "nip": {{Opcode: opT, Ddir: -1}},
+ ">r": {{Opcode: opN, TtoR: true, Rdir: 1, Ddir: -1}},
+ "r>": {{Opcode: opR, TtoN: true, Rdir: -1, Ddir: 1}},
+ "r@": {{Opcode: opR, TtoN: true, Ddir: 1}},
+ "@": {{Opcode: opAtT}},
+ "!": {{Opcode: opT, NtoAtT: true, Ddir: -1}, {Opcode: opN, Ddir: -1}},
+ "dsp": {{Opcode: opDepth, TtoN: true, Ddir: 1}},
+ "lshift": {{Opcode: opNlshiftT, Ddir: -1}},
+ "rshift": {{Opcode: opNrshiftT, Ddir: -1}},
+ "1-": {{Opcode: opTminus1}},
+ "2r>": {{Opcode: opR, TtoN: true, Rdir: -1, Ddir: 1},
+ {Opcode: opR, TtoN: true, Rdir: -1, Ddir: 1},
+ {Opcode: opN, TtoN: true}},
+ "2>r": {{Opcode: opN, TtoN: true},
+ {Opcode: opN, TtoR: true, Rdir: 1, Ddir: -1},
+ {Opcode: opN, TtoR: true, Rdir: 1, Ddir: -1}},
+ "2r@": {{Opcode: opR, TtoN: true, Rdir: -1, Ddir: 1},
+ {Opcode: opR, TtoN: true, Rdir: -1, Ddir: 1},
+ {Opcode: opN, TtoN: true, Ddir: 1},
+ {Opcode: opN, TtoN: true, Ddir: 1},
+ {Opcode: opN, TtoR: true, Rdir: 1, Ddir: -1},
+ {Opcode: opN, TtoR: true, Rdir: 1, Ddir: -1},
+ {Opcode: opN, TtoN: true}},
+ "unloop": {{Opcode: opT, Rdir: -1}, {Opcode: opT, Rdir: -1}},
+ "exit": {{Opcode: opT, RtoPC: true, Rdir: -1}},
+
+ // Elided words
+ "dup@": {{Opcode: opAtT, TtoN: true, Ddir: 1}},
+ "dup>r": {{Opcode: opT, TtoR: true, Rdir: 1}},
+ "2dupxor": {{Opcode: opTxorN, TtoN: true, Ddir: 1}},
+ "2dup=": {{Opcode: opNeqT, TtoN: true, Ddir: 1}},
+ "!nip": {{Opcode: opT, NtoAtT: true, Ddir: -1}},
+ "2dup!": {{Opcode: opT, NtoAtT: true}},
+
+ // Words used to implement pick
+ "up1": {{Opcode: opT, Ddir: 1}},
+ "down1": {{Opcode: opT, Ddir: -1}},
+ "copy": {{Opcode: opN}},
+}
diff --git a/basewords_test.go b/basewords_test.go
new file mode 100644
index 0000000..769036d
--- /dev/null
+++ b/basewords_test.go
@@ -0,0 +1,13 @@
+package j1
+
+import "testing"
+
+func TestBaseWords(t *testing.T) {
+ for word, alu := range BaseWords {
+ t.Run(word, func(t *testing.T) {
+ for _, ins := range alu {
+ t.Logf("%4.0X", ins.Compile())
+ }
+ })
+ }
+}