From 6a57e671b8d534b45d07316ec751a2d99e380803 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 18 Jun 2017 01:03:15 +0200 Subject: Add basewords --- basewords.go | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 basewords.go (limited to 'basewords.go') 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}}, +} -- cgit v1.2.3