flip Read/Write, Data/Prog, Jump/Call
authorrekado <rekado@elephly.net>
Thu, 18 Sep 2014 17:44:51 +0000 (19:44 +0200)
committerrekado <rekado@elephly.net>
Thu, 18 Sep 2014 17:44:51 +0000 (19:44 +0200)
SHARC/Instruction.hs
SHARC/Types.hs

index 5c3b1bf..4073248 100644 (file)
@@ -301,8 +301,8 @@ parseType3 w = Type3 cond compute ireg mreg ureg rw mem wa up
     ireg = mkIreg $ w64 `cutMask` [b| 000 0 111 000 00000 000 0000000 0000000 00000000 00000000 |]
     mreg = mkMreg $ w64 `cutMask` [b| 000 0 000 111 00000 000 0000000 0000000 00000000 00000000 |]
     ureg = mkUreg $ w64 `cutMask` [b| 000 0 000 000 00000 000 1111111 0000000 00000000 00000000 |]
-    rw   = if w64 `testBit` 31 then Read else Write
-    mem  = if w64 `testBit` 32 then Data else Prog
+    rw   = if w64 `testBit` 31 then Write else Read
+    mem  = if w64 `testBit` 32 then Prog else Data
     wa   = if w64 `testBit` 30 then LW else NW
     up   = if w64 `testBit` 44 then PostModify else PreModify
 
@@ -314,8 +314,8 @@ parseType4 w = Type4 cond compute dat dreg ireg rw mem up
     dat  = w64 `cutMask` 0x0001F8000000
     dreg = mkDreg $ w64 `cutMask` 0x000007800000
     ireg = mkIreg $ w64 `cutMask` [b| 000 0 111 000 00000 000 0000000 0000000 00000000 00000000 |]
-    rw   = if w64 `testBit` 39 then Read else Write
-    mem  = if w64 `testBit` 40 then Data else Prog
+    rw   = if w64 `testBit` 39 then Write else Read
+    mem  = if w64 `testBit` 40 then Prog else Data
     up   = if w64 `testBit` 38 then PostModify else PreModify
 
 parseType5 w = if w64 `testBit` 43
@@ -337,8 +337,8 @@ parseType6 w = if w64 `testBit` 47
                  dreg = mkDreg $ w64 `cutMask` [b| 0000 000 000 00000 00 0000 1111 0 000000 00000000 0000 0000 |]
                  ireg = mkIreg $ w64 `cutMask` [b| 0000 111 000 00000 00 0000 0000 0 000000 00000000 0000 0000 |]
                  mreg = mkMreg $ w64 `cutMask` [b| 0000 000 111 00000 00 0000 0000 0 000000 00000000 0000 0000 |]
-                 rw   = if w64 `testBit` 31 then Read else Write
-                 mem  = if w64 `testBit` 32 then Data else Prog
+                 rw   = if w64 `testBit` 31 then Write else Read
+                 mem  = if w64 `testBit` 32 then Prog else Data
                  in
                   Type6WithDataAccess cond shiftField dreg ireg mreg rw mem
                else -- without data access
@@ -359,7 +359,7 @@ parseType8 :: (Word32 -> Address24) -> Word48 -> Instruction
 parseType8 addressConstr w = Type8 t cond addr a d c
   where
     w64 = word48ToWord64 w
-    t = if w64 `testBit` 39 then Jump else Call
+    t = if w64 `testBit` 39 then Call else Jump
     cond = mkCond w
     addr = addressConstr $ w64 `cutMask` 0x000000FFFFFF
     a = w64 `testBit` 38 -- loop abort
@@ -400,8 +400,8 @@ parseType13 w = Type13 term reladdr
 parseType14 w = Type14 rw mem wa ureg addr
   where
     w64 = word48ToWord64 w
-    rw   = if w64 `testBit` 40 then Read else Write
-    mem  = if w64 `testBit` 41 then Data else Prog
+    rw   = if w64 `testBit` 40 then Write else Read
+    mem  = if w64 `testBit` 41 then Prog else Data
     wa   = if w64 `testBit` 39 then LW   else NW
     ureg = mkUreg $ w64 `cutMask` 0x00EF00000000
     addr = Address32 $ w64 `cutMask` 0x0000FFFFFFFF
index 47e4686..e58fed3 100644 (file)
@@ -153,7 +153,6 @@ toWord32 (a,b,c,d) = fromIntegral a `shift` 24 .|.
 data Update = PreModify -- 0, no update
             | PostModify -- 1, with update
 
--- TODO: check again Table 1-7 Opcode Acronyms to be sure that the mapping order is right!
 type PushPops = ([String], [String])
 
 data Memory = Data -- data memory