aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Peter McGoron 2023-02-09 16:32:32 +0000
committerGravatar Peter McGoron 2023-02-09 16:32:32 +0000
commitef84135a2e243ee8edf6f915405e2f5b65ab7500 (patch)
treece9a682df7f0da4f68cd07d4c5f60176c852251e
parentadd compile t est (diff)
change instructions to be an enum
-rw-r--r--asm/creole.py40
-rw-r--r--asm/test.py10
2 files changed, 25 insertions, 25 deletions
diff --git a/asm/creole.py b/asm/creole.py
index 1ed25e8..1d105a1 100644
--- a/asm/creole.py
+++ b/asm/creole.py
@@ -50,13 +50,23 @@ class TypecheckException(Exception):
self.opcode = opcode
def __str__(self):
return f'opcode {self.opcode} has invalid value {self.sarg} (expected {self.argtype} in position {self.i}'
-class Instruction:
- def __init__(self, opcode, argtypes):
+class Instruction(Enum):
+ NOP = 0
+ PUSH = 1, ArgType.VAL
+ POP = 2, ArgType.REG
+ ADD = 3, ArgType.VAL, ArgType.VAL, ArgType.VAL
+ MUL = 4, ArgType.VAL, ArgType.VAL, ArgType.VAL
+ DIV = 5, ArgType.VAL, ArgType.VAL, ArgType.VAL
+ JL = 6, ArgType.LAB, ArgType.VAL, ArgType.VAL
+ CLB = 7, ArgType.LAB
+ SYS = 8, ArgType.VAL
+
+ def __init__(self, opcode, *args):
if opcode > 0x7F or opcode < 0:
raise OpcodeException(opcode)
self.opcode = opcode
- self.argtypes = argtypes
+ self.argtypes = args
def typecheck(self, sargs):
rargs = []
if len(sargs) != len(self.argtypes):
@@ -71,18 +81,6 @@ class Instruction:
rargs.append(t)
return rargs
-instructions = {
-"nop" : Instruction(0, []),
-"push" : Instruction(1, [ArgType.VAL]),
-"pop" : Instruction(2, [ArgType.REG]),
-"add" : Instruction(3, [ArgType.VAL, ArgType.VAL, ArgType.VAL]),
-"mul" : Instruction(4, [ArgType.VAL, ArgType.VAL, ArgType.VAL]),
-"div" : Instruction(5, [ArgType.VAL, ArgType.VAL, ArgType.VAL]),
-"jl" : Instruction(6, [ArgType.LAB, ArgType.VAL, ArgType.VAL]),
-"clb" : Instruction(7, [ArgType.LAB]),
-"sys" : Instruction(8, [ArgType.VAL])
-}
-
encoding_types = {
# start mask A B
2: (0x7F, 0xC0, 7),
@@ -165,12 +163,14 @@ class Program:
def parse_asm_line(self, line):
line = line.split()
line[0] = line[0].casefold()
- if line[0] not in instructions:
+ try:
+ # TODO: is there no better way to do this in Python?
+ ins = getattr(Instruction, line[0].upper())
+ except Exception as e:
raise InstructionNotFoundException(line[0])
- else:
- ins = instructions[line[0]]
- args_w_type = ins.typecheck(line[1:])
- self.asm_push_line(ins.opcode, args_w_type)
+
+ args_w_type = ins.typecheck(line[1:])
+ self.asm_push_line(ins.opcode, args_w_type)
def __call__(self):
b = bytes()
diff --git a/asm/test.py b/asm/test.py
index 06a878f..640f3bf 100644
--- a/asm/test.py
+++ b/asm/test.py
@@ -9,7 +9,7 @@ class PushTest(unittest.TestCase):
b = p()
self.assertEqual(b, b'\x01\xC2\x85\x00')
ins = ffi.parse_line(b)
- self.assertEqual(ins[0], instructions["push"].opcode)
+ self.assertEqual(ins[0], Instruction.PUSH.opcode)
self.assertEqual(ins[1][0], (1,5))
def test_parse_push_imm(self):
@@ -18,7 +18,7 @@ class PushTest(unittest.TestCase):
b = p()
self.assertEqual(b, b'\x01\xC0\x85\x00')
ins = ffi.parse_line(b)
- self.assertEqual(ins[0], instructions["push"].opcode)
+ self.assertEqual(ins[0], Instruction.PUSH.opcode)
self.assertEqual(ins[1][0], (0,5))
def test_parse_push_catch_typecheck_push_lab(self):
@@ -55,7 +55,7 @@ class PushTest(unittest.TestCase):
def test_compile_push(self):
p = Program()
p.parse_asm_line("PUSH r0")
- p.parse_asm_line("PUSH r6")
+ p.parse_asm_line("PUSH 6")
b = p()
ex = ffi.ExecutionEnvironment()
@@ -71,7 +71,7 @@ class PushTest(unittest.TestCase):
self.assertEqual(ex.cenv.prg[0].w[2], 0)
self.assertEqual(ex.cenv.prg[1].opcode, 1)
- self.assertEqual(ex.cenv.prg[1].w_flags[0], 1)
+ self.assertEqual(ex.cenv.prg[1].w_flags[0], 0)
self.assertEqual(ex.cenv.prg[1].w_flags[1], 0)
self.assertEqual(ex.cenv.prg[1].w_flags[2], 0)
self.assertEqual(ex.cenv.prg[1].w[0], 6)
@@ -109,7 +109,7 @@ class ProgramTest(unittest.TestCase):
p = Program()
p.parse_asm_line("add r1 23 3648")
ins = ffi.parse_line(p())
- self.assertEqual(ins[0], instructions["add"].opcode)
+ self.assertEqual(ins[0], Instruction.ADD.opcode)
self.assertEqual(ins[1][0], (1,1))
self.assertEqual(ins[1][1], (0,23))
self.assertEqual(ins[1][2], (0,3648))
commit/configure.ac?h=v2.0.0&id=2d36fc10b27b05f5f49fd9a1c9ae0eb9b04302d3&follow=1'>Increase so maj/age so account for new recv-flush call.Gravatar bencollins 1-2/+2 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@129 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-07-22Patch from Stephen Tiedemann to allow reentrancy in raw1394's usage ofGravatar bencollins 7-200/+199 raw1394_request's. git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@128 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-07-17Patch from Dan Maas to add raw1394_iso_recv_flush() call to API, using theGravatar bencollins 2-3/+25 RAW1394_IOC_ISO_RECV_FLUSH ioctl. Updated the ieee1394-ioctl.h file aswell. git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@127 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-07-17pkg-config support from Kristian Hogsberg.Gravatar bencollins 3-1/+15 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@126 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-07-17Remove trailing whitespace, which automake chokes on.Gravatar bencollins 1-1/+1 Patch from Manish Singh. git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@125 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-07-13Fixed section for -dev package.Gravatar bencollins 1-1/+1 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@124 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-07-13Re-add the pdf buildGravatar bencollins 1-0/+1 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@121 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-07-13Update Debian files.Gravatar bencollins 4-25/+73 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@120 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-07-13Ok, the Debian package was way out of sync with upstreamGravatar bencollins 1-1/+1 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@119 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-07-13Ooops...libtool works a bit different than I thought, but atleast it worksGravatar bencollins 2-6/+1 like it is supposed to. git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@117 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-07-13Generate and install the pdf in the Debian package.Gravatar bencollins 3-3/+4 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@114 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-07-13Don't run configure at the end of autogen.sh. Also, remove autom4te.cache.Gravatar bencollins 1-1/+1 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@113 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-07-13Update Debian maintainerGravatar bencollins 1-1/+2 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@112 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-07-13Update Debian changelog.Gravatar bencollins 1-0/+8 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@111 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-07-13File doesn't really seem needed. The NEWS file gives a good overview, andGravatar bencollins 1-4/+0 the svn log is more than verbose enough for info seekers. git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@110 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-07-13Fix compiler warnings.Gravatar bencollins 4-12/+22 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@109 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-07-13Updates from 0.10.0 release.Gravatar bencollins 4-5/+14 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@108 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-04-23add libtoolize to bootstrapGravatar ddennedy 1-1/+10 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@107 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-04-21added Dan Maas' rawiso docsGravatar ddennedy 1-32/+295 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@106 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-04-07new_handle_on_port() error path fix from Jim RadfordGravatar dmaas 1-1/+3 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@105 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-03-26add raw1394_new_handle_on_port() convenience functionGravatar dmaas 2-1/+41 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@104 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-02-22Updates for new rawiso ioctl interface.Gravatar bencollins 3-37/+125 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@103 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-01-15add iso_xmit_sync() and iso_xmit_write(); clean up iso handling a bitGravatar dmaas 5-39/+161 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@102 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-01-15implement tag matching for rawiso receptionGravatar dmaas 3-4/+12 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@101 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-01-06back out previous commit - don't drop the legacy API just yetGravatar dmaas 6-173/+130 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@100 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-01-05emulate legacy ISO reception API on top of new rawiso APIGravatar dmaas 7-131/+174 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@99 53a565d1-3bb7-0310-b661-cf11e63c67ab 2002-12-24update iso API for multi-channel reception and new packet buffer layoutGravatar dmaas 4-123/+236 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@98 53a565d1-3bb7-0310-b661-cf11e63c67ab 2002-12-20oops, irq_interval needs to be signedGravatar anonymous 1-1/+1 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@97 53a565d1-3bb7-0310-b661-cf11e63c67ab 2002-12-20dmaas - renamed exported arm definitions into the raw1394_ namespace; ↵Gravatar anonymous 3-124/+48 brought kernel-raw1394.h back in sync with the kernel version git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@96 53a565d1-3bb7-0310-b661-cf11e63c67ab 2002-12-16rawiso updates:Gravatar dmaas 3-18/+25 - changed return type of rawiso xmit/recv handlers from int to enum raw1394_iso_disposition - added an ioctl (RAW1394_ISO_QUEUE_ACTIVITY) to force an ISO_ACTIVITY event into the queue. This is needed for handling RAW1394_ISO_DEFER, to kick us out of the next read() instead of sleeping forever. - removed references to "8-byte" isochronous header - this is an OHCI-specific implementation detail git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@95 53a565d1-3bb7-0310-b661-cf11e63c67ab 2002-11-18fix cplusplus extern C blockGravatar ddennedy 1-4/+4 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@94 53a565d1-3bb7-0310-b661-cf11e63c67ab 2002-11-18merged rawiso branchGravatar ddennedy 7-6/+488 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@93 53a565d1-3bb7-0310-b661-cf11e63c67ab