+INCR_CFA = defPrimWord("1+", () -> begin
+ ensurePSDepth(1)
+ mem[reg.PSP] += 1
+ return NEXT
+end)
+
+DECR_CFA = defPrimWord("1-", () -> begin
+ ensurePSDepth(1)
+ mem[reg.PSP] -= 1
+ return NEXT
+end)
+
+INCR2_CFA = defPrimWord("2+", () -> begin
+ ensurePSDepth(1)
+ mem[reg.PSP] += 2
+ return NEXT
+end)
+
+DECR2_CFA = defPrimWord("2-", () -> begin
+ ensurePSDepth(1)
+ mem[reg.PSP] -= 2
+ return NEXT
+end)
+
+ADD_CFA = defPrimWord("+", () -> begin
+ b = popPS()
+ a = popPS()
+ pushPS(a+b)
+ return NEXT
+end)
+
+SUB_CFA = defPrimWord("-", () -> begin
+ b = popPS()
+ a = popPS()
+ pushPS(a-b)
+ return NEXT
+end)
+
+MUL_CFA = defPrimWord("*", () -> begin
+ b = popPS()
+ a = popPS()
+ pushPS(a*b)
+ return NEXT
+end)
+
+DIVMOD_CFA = defPrimWord("/MOD", () -> begin
+ b = popPS()
+ a = popPS()
+ q,r = divrem(a,b)
+ pushPS(r)
+ pushPS(q)
+ return NEXT
+end)
+
+TWOMUL_CFA = defPrimWord("2*", () -> begin
+ pushPS(popPS() << 1)
+ return NEXT
+end)
+
+TWODIV_CFA = defPrimWord("2/", () -> begin
+ pushPS(popPS() >> 1)
+ return NEXT
+end)
+
+EQ_CFA = defPrimWord("=", () -> begin
+ b = popPS()
+ a = popPS()
+ pushPS(a==b ? -1 : 0)
+ return NEXT
+end)
+
+NE_CFA = defPrimWord("<>", () -> begin
+ b = popPS()
+ a = popPS()
+ pushPS(a!=b ? -1 : 0)
+ return NEXT
+end)
+
+LT_CFA = defPrimWord("<", () -> begin
+ b = popPS()
+ a = popPS()
+ pushPS(a<b ? -1 : 0)
+ return NEXT
+end)
+
+GT_CFA = defPrimWord(">", () -> begin
+ b = popPS()
+ a = popPS()
+ pushPS(a>b ? -1 : 0)
+ return NEXT
+end)
+
+LE_CFA = defPrimWord("<=", () -> begin
+ b = popPS()
+ a = popPS()
+ pushPS(a<=b ? -1 : 0)
+ return NEXT
+end)
+
+GE_CFA = defPrimWord(">=", () -> begin
+ b = popPS()
+ a = popPS()
+ pushPS(a>=b ? -1 : 0)
+ return NEXT
+end)
+
+ZE_CFA = defPrimWord("0=", () -> begin
+ pushPS(popPS() == 0 ? -1 : 0)
+ return NEXT
+end)
+
+ZNE_CFA = defPrimWord("0<>", () -> begin
+ pushPS(popPS() != 0 ? -1 : 0)
+ return NEXT
+end)
+
+ZLT_CFA = defPrimWord("0<", () -> begin
+ pushPS(popPS() < 0 ? -1 : 0)
+ return NEXT
+end)
+
+ZGT_CFA = defPrimWord("0>", () -> begin
+ pushPS(popPS() > 0 ? -1 : 0)
+ return NEXT
+end)
+
+ZLE_CFA = defPrimWord("0<=", () -> begin
+ pushPS(popPS() <= 0 ? -1 : 0)
+ return NEXT
+end)
+
+ZGE_CFA = defPrimWord("0>=", () -> begin
+ pushPS(popPS() >= 0 ? -1 : 0)
+ return NEXT
+end)
+
+AND_CFA = defPrimWord("AND", () -> begin
+ b = popPS()
+ a = popPS()
+ pushPS(a & b)
+ return NEXT
+end)
+
+OR_CFA = defPrimWord("OR", () -> begin
+ b = popPS()
+ a = popPS()
+ pushPS(a | b)
+ return NEXT
+end)
+
+XOR_CFA = defPrimWord("XOR", () -> begin
+ b = popPS()
+ a = popPS()
+ pushPS(a $ b)
+ return NEXT
+end)
+
+INVERT_CFA = defPrimWord("INVERT", () -> begin
+ pushPS(~popPS())
+ return NEXT
+end)
+
+# Literals
+
+LIT_CFA = defPrimWord("LIT", () -> begin