aboutsummaryrefslogtreecommitdiff
path: root/basewords.go
blob: d9027cddea39a9a18276329fadda48c021e84020 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package j1

var BaseWords = map[string][]ALU{
	"noop":   {{Opcode: opT}},
	"+":      {{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}},

	// misc
	"swapdown": {{Opcode: opN, TtoN: true}, {Opcode, opT, Ddir: -1}},
}