summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--notes/todo242
-rw-r--r--src/display.rs6
-rw-r--r--src/lib.rs16
-rw-r--r--tests/from_brain.rs23
4 files changed, 153 insertions, 134 deletions
diff --git a/notes/todo b/notes/todo
index dd94d6b..d3fe4de 100644
--- a/notes/todo
+++ b/notes/todo
@@ -921,25 +921,25 @@ A L I A S A L I A S A L I A S A L I A S A L I A S | Rd=zxtb(Rs)
-test|1 1 0 0|0 0 0 1|0 0 -|s s s s s| P P |- t t t t t|0 0 -|d d d d d| Rdd=extractu(Rss,Rtt) - XTYPE ALU/slot 2,3
-test|1 1 0 0|0 0 0 1|0 0 -|s s s s s| P P |- t t t t t|0 1 -|d d d d d| Rdd=shuffeb(Rss,Rtt) - XTYPE PERM/slot 2,3
-test|1 1 0 0|0 0 0 1|0 0 -|s s s s s| P P |- t t t t t|1 0 -|d d d d d| Rdd=shuffob(Rtt,Rss) - XTYPE PERM/slot 2,3
-test|1 1 0 0|0 0 0 1|0 0 -|s s s s s| P P |- t t t t t|1 1 -|d d d d d| Rdd=shuffeh(Rtt,Rss) - XTYPE PERM/slot 2,3
-test|1 1 0 0|0 0 0 1|0 1 -|s s s s s| P P |- t t t t t|0 0 0|d d d d d| Rdd=vxaddsubw(Rss,Rtt):sat - XTYPE COMPLEX/slot 2,3
-test|1 1 0 0|0 0 0 1|0 1 -|s s s s s| P P |- t t t t t|0 0 1|d d d d d| Rd=vaddhub(Rss,Rtt):sat - XTYPE ALU/slot 2,3
-test|1 1 0 0|0 0 0 1|0 1 -|s s s s s| P P |- t t t t t|0 1 0|d d d d d| Rdd=vxsubaddw(Rss,Rtt):sat - XTYPE COMPLEX/slot 2,3
-test|1 1 0 0|0 0 0 1|0 1 -|s s s s s| P P |- t t t t t|1 0 0|d d d d d| Rdd=vxaddsubh(Rss,Rtt):sat - XTYPE COMPLEX/slot 2,3
-test|1 1 0 0|0 0 0 1|0 1 -|s s s s s| P P |- t t t t t|1 1 0|d d d d d| Rdd=vxsubaddh(Rss,Rtt):sat - XTYPE COMPLEX/slot 2,3
-test|1 1 0 0|0 0 0 1|1 0 -|s s s s s| P P |- t t t t t|0 0 0|d d d d d| Rdd=shuffoh(Rtt,Rss) - XTYPE PERM/slot 2,3
-test|1 1 0 0|0 0 0 1|1 0 -|s s s s s| P P |- t t t t t|0 1 0|d d d d d| Rdd=vtrunewh(Rss,Rtt) - XTYPE PERM/slot 2,3
-test|1 1 0 0|0 0 0 1|1 0 -|s s s s s| P P |- t t t t t|0 1 1|d d d d d| Rdd=vtrunehb(Rss,Rtt) - XTYPE PERM/slot 2,3
-test|1 1 0 0|0 0 0 1|1 0 -|s s s s s| P P |- t t t t t|1 0 0|d d d d d| Rdd=vtrunowh(Rss,Rtt) - XTYPE PERM/slot 2,3
-test|1 1 0 0|0 0 0 1|1 0 -|s s s s s| P P |- t t t t t|1 0 1|d d d d d| Rdd=vtrunohb(Rss,Rtt) - XTYPE PERM/slot 2,3
-test|1 1 0 0|0 0 0 1|1 0 -|s s s s s| P P |- t t t t t|1 1 0|d d d d d| Rdd=lfs(Rss,Rtt) - XTYPE ALU/slot 2,3
-test|1 1 0 0|0 0 0 1|1 1 -|s s s s s| P P |- t t t t t|0 0 -|d d d d d| Rdd=vxaddsubh(Rss,Rtt):rnd:>>1:sat - XTYPE COMPLEX/slot 2,3
-test|1 1 0 0|0 0 0 1|1 1 -|s s s s s| P P |- t t t t t|0 1 -|d d d d d| Rdd=vxsubaddh(Rss,Rtt):rnd:>>1:sat - XTYPE COMPLEX/slot 2,3
-test|1 1 0 0|0 0 0 1|1 1 -|s s s s s| P P |- t t t t t|1 0 -|d d d d d| Rdd=extractu(Rss,Rtt) - XTYPE ALU/slot 2,3
-test|1 1 0 0|0 0 0 1|1 1 -|s s s s s| P P |- t t t t t|1 1 -|d d d d d| Rdd=decbin(Rss,Rtt) - XTYPE PERM/slot 2,3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
test|1 1 0 0|0 0 1 0|0 - -|s s s s s| P P |- t t t t t|- u u|d d d d d| Rdd=valignb(Rtt,Rss,Pu) - XTYPE PERM/slot 2,3
test|1 1 0 0|0 0 1 0|1 0 0|s s s s s| P P |- t t t t t|- u u|d d d d d| Rdd=vspliceb(Rss,Rtt,Pu) - XTYPE PERM/slot 2,3
test|1 1 0 0|0 0 1 0|1 1 0|s s s s s| P P |- t t t t t|- x x|d d d d d| Rdd=add(Rss,Rtt,Px):carry - XTYPE ALU/slot 2,3
@@ -1033,9 +1033,6 @@ test|1 1 0 0|1 0 1 0|1 0 -|s s s s s| P P |0 t t t t t|0 0 0|x x x x x| Rxx^=xor
-test|1 1 0 1|0 0 1 0|1 0 0|s s s s s| P P |- t t t t t|0 0 0|- - - d d| Pd=cmp.gt(Rss,Rtt) - XTYPE PERM/slot 2,3
-test|1 1 0 1|0 0 1 0|1 0 0|s s s s s| P P |- t t t t t|0 1 0|- - - d d| Pd=cmp.eq(Rss,Rtt) - XTYPE PERM/slot 2,3
-test|1 1 0 1|0 0 1 0|1 0 0|s s s s s| P P |- t t t t t|1 0 0|- - - d d| Pd=cmp.gtu(Rss,Rtt) - XTYPE PERM/slot 2,3
@@ -1062,105 +1059,108 @@ test|1 1 0 1|0 0 1 0|1 0 0|s s s s s| P P |- t t t t t|1 0 0|- - - d d| Pd=cmp.g
-test|1 1 0 1|0 0 1 1|0 0 0|s s s s s| P P |- t t t t t|0 0 0|d d d d d| Rdd=vaddub(Rss,Rtt) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 0 0|s s s s s| P P |- t t t t t|0 0 1|d d d d d| Rdd=vaddub(Rss,Rtt):sat - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 0 0|s s s s s| P P |- t t t t t|0 1 0|d d d d d| Rdd=vaddh(Rss,Rtt) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 0 0|s s s s s| P P |- t t t t t|0 1 1|d d d d d| Rdd=vaddh(Rss,Rtt):sat - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 0 0|s s s s s| P P |- t t t t t|1 0 0|d d d d d| Rdd=vadduh(Rss,Rtt):sat - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 0 0|s s s s s| P P |- t t t t t|1 0 1|d d d d d| Rdd=vaddw(Rss,Rtt) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 0 0|s s s s s| P P |- t t t t t|1 1 0|d d d d d| Rdd=vaddw(Rss,Rtt):sat - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 0 0|s s s s s| P P |- t t t t t|1 1 1|d d d d d| Rdd=add(Rss,Rtt) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 0 1|s s s s s| P P |- t t t t t|0 0 0|d d d d d| Rdd=vsubub(Rtt,Rss) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 0 1|s s s s s| P P |- t t t t t|0 0 1|d d d d d| Rdd=vsubub(Rtt,Rss):sat - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 0 1|s s s s s| P P |- t t t t t|0 1 0|d d d d d| Rdd=vsubh(Rtt,Rss) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 0 1|s s s s s| P P |- t t t t t|0 1 1|d d d d d| Rdd=vsubh(Rtt,Rss):sat - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 0 1|s s s s s| P P |- t t t t t|1 0 0|d d d d d| Rdd=vsubuh(Rtt,Rss):sat - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 0 1|s s s s s| P P |- t t t t t|1 0 1|d d d d d| Rdd=vsubw(Rtt,Rss) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 0 1|s s s s s| P P |- t t t t t|1 1 0|d d d d d| Rdd=vsubw(Rtt,Rss):sat - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 0 1|s s s s s| P P |- t t t t t|1 1 1|d d d d d| Rdd=sub(Rtt,Rss) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 1 0|s s s s s| P P |- t t t t t|0 0 0|d d d d d| Rdd=vavgub(Rss,Rtt) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 1 0|s s s s s| P P |- t t t t t|0 0 1|d d d d d| Rdd=vavgub(Rss,Rtt):rnd - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 1 0|s s s s s| P P |- t t t t t|0 1 0|d d d d d| Rdd=vavgh(Rss,Rtt) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 1 0|s s s s s| P P |- t t t t t|0 1 1|d d d d d| Rdd=vavgh(Rss,Rtt):rnd - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 1 0|s s s s s| P P |- t t t t t|1 0 0|d d d d d| Rdd=vavgh(Rss,Rtt):crnd - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 1 0|s s s s s| P P |- t t t t t|1 0 1|d d d d d| Rdd=vavguh(Rss,Rtt) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 1 0|s s s s s| P P |- t t t t t|1 1 -|d d d d d| Rdd=vavguh(Rss,Rtt):rnd - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 1 1|s s s s s| P P |- t t t t t|0 0 0|d d d d d| Rdd=vavgw(Rss,Rtt) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 1 1|s s s s s| P P |- t t t t t|0 0 1|d d d d d| Rdd=vavgw(Rss,Rtt):rnd - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 1 1|s s s s s| P P |- t t t t t|0 1 0|d d d d d| Rdd=vavgw(Rss,Rtt):crnd - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 1 1|s s s s s| P P |- t t t t t|0 1 1|d d d d d| Rdd=vavguw(Rss,Rtt) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 1 1|s s s s s| P P |- t t t t t|1 0 0|d d d d d| Rdd=vavguw(Rss,Rtt):rnd - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 1 1|s s s s s| P P |- t t t t t|1 0 1|d d d d d| Rdd=add(Rss,Rtt):sat - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 1 1|s s s s s| P P |- t t t t t|1 1 0|d d d d d| Rdd=add(Rss,Rtt):raw:lo - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|0 1 1|s s s s s| P P |- t t t t t|1 1 1|d d d d d| Rdd=add(Rss,Rtt):raw:hi - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 0 0|s s s s s| P P |- t t t t t|0 0 0|d d d d d| Rdd=vnavgh(Rtt,Rss) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 0 0|s s s s s| P P |- t t t t t|0 0 1|d d d d d| Rdd=vnavgh(Rtt,Rss):rnd:sat - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 0 0|s s s s s| P P |- t t t t t|0 1 0|d d d d d| Rdd=vnavgh(Rtt,Rss):crnd:sat - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 0 0|s s s s s| P P |- t t t t t|0 1 1|d d d d d| Rdd=vnavgw(Rtt,Rss) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 0 0|s s s s s| P P |- t t t t t|1 0 -|d d d d d| Rdd=vnavgw(Rtt,Rss):rnd:sat - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 0 0|s s s s s| P P |- t t t t t|1 1 -|d d d d d| Rdd=vnavgw(Rtt,Rss):crnd:sat - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 0 1|s s s s s| P P |- t t t t t|0 0 0|d d d d d| Rdd=vminub(Rtt,Rss) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 0 1|s s s s s| P P |- t t t t t|0 0 1|d d d d d| Rdd=vminh(Rtt,Rss) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 0 1|s s s s s| P P |- t t t t t|0 1 0|d d d d d| Rdd=vminuh(Rtt,Rss) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 0 1|s s s s s| P P |- t t t t t|1 0 1|d d d d d| Rdd=vmaxuw(Rtt,Rss) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 0 1|s s s s s| P P |- t t t t t|1 1 0|d d d d d| Rdd=min(Rtt,Rss) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 0 1|s s s s s| P P |- t t t t t|1 1 1|d d d d d| Rdd=minu(Rtt,Rss) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 0 1|s s s s s| P P |- x x x x x|0 1 1|d d d d d| Rdd=vminw(Rtt,Rss) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 0 1|s s s s s| P P |- x x x x x|1 0 0|d d d d d| Rdd=vminuw(Rtt,Rss) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 1 0|s s s s s| P P |- t t t t t|0 0 0|d d d d d| Rdd=vmaxub(Rtt,Rss) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 1 0|s s s s s| P P |- t t t t t|0 0 1|d d d d d| Rdd=vmaxh(Rtt,Rss) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 1 0|s s s s s| P P |- t t t t t|0 1 0|d d d d d| Rdd=vmaxuh(Rtt,Rss) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 1 0|s s s s s| P P |- t t t t t|0 1 1|d d d d d| Rdd=vmaxw(Rtt,Rss) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 1 0|s s s s s| P P |- t t t t t|1 0 0|d d d d d| Rdd=max(Rss,Rtt) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 1 0|s s s s s| P P |- t t t t t|1 0 1|d d d d d| Rdd=maxu(Rss,Rtt) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 1 0|s s s s s| P P |- t t t t t|1 1 0|d d d d d| Rdd=vmaxb(Rtt,Rss) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 1 0|s s s s s| P P |- t t t t t|1 1 1|d d d d d| Rdd=vminb(Rtt,Rss) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 1 1|s s s s s| P P |- t t t t t|0 0 0|d d d d d| Rdd=and(Rss,Rtt) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 1 1|s s s s s| P P |- t t t t t|0 0 1|d d d d d| Rdd=and(Rss,~Rtt) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 1 1|s s s s s| P P |- t t t t t|0 1 0|d d d d d| Rdd=or(Rss,Rtt) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 1 1|s s s s s| P P |- t t t t t|0 1 1|d d d d d| Rdd=or(Rss,~Rtt) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 1 1|s s s s s| P P |- t t t t t|1 0 0|d d d d d| Rdd=xor(Rss,Rtt) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 0 1 1|1 1 1|s s s s s| P P |- t t t t t|1 1 1|d d d d d| Rd=modwrap(Rs,Rt) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 0|- - 1|s s s s s| P P |- t t t t t|- - -|d d d d d| Rdd=bitsplit(Rs,Rt) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|0 0 0|s s s s s| P P |- t t t t t|0 0 -|d d d d d| Rd=add(Rt.L,Rs.L) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|0 0 0|s s s s s| P P |- t t t t t|0 1 -|d d d d d| Rd=add(Rt.L,Rs.H) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|0 0 0|s s s s s| P P |- t t t t t|1 0 -|d d d d d| Rd=add(Rt.L,Rs.L):sat - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|0 0 0|s s s s s| P P |- t t t t t|1 1 -|d d d d d| Rd=add(Rt.L,Rs.H):sat - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|0 0 1|s s s s s| P P |- t t t t t|0 0 -|d d d d d| Rd=sub(Rt.L,Rs.L) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|0 0 1|s s s s s| P P |- t t t t t|0 1 -|d d d d d| Rd=sub(Rt.L,Rs.H) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|0 0 1|s s s s s| P P |- t t t t t|1 0 -|d d d d d| Rd=sub(Rt.L,Rs.L):sat - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|0 0 1|s s s s s| P P |- t t t t t|1 1 -|d d d d d| Rd=sub(Rt.L,Rs.H):sat - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|0 1 0|s s s s s| P P |- t t t t t|0 0 0|d d d d d| Rd=add(Rt.L,Rs.L):<<16 - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|0 1 0|s s s s s| P P |- t t t t t|0 0 1|d d d d d| Rd=add(Rt.L,Rs.H):<<16 - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|0 1 0|s s s s s| P P |- t t t t t|0 1 0|d d d d d| Rd=add(Rt.H,Rs.L):<<16 - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|0 1 0|s s s s s| P P |- t t t t t|0 1 1|d d d d d| Rd=add(Rt.H,Rs.H):<<16 - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|0 1 0|s s s s s| P P |- t t t t t|1 0 0|d d d d d| Rd=add(Rt.L,Rs.L):sat:<<16 - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|0 1 0|s s s s s| P P |- t t t t t|1 0 1|d d d d d| Rd=add(Rt.L,Rs.H):sat:<<16 - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|0 1 0|s s s s s| P P |- t t t t t|1 1 0|d d d d d| Rd=add(Rt.H,Rs.L):sat:<<16 - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|0 1 0|s s s s s| P P |- t t t t t|1 1 1|d d d d d| Rd=add(Rt.H,Rs.H):sat:<<16 - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|0 1 1|s s s s s| P P |- t t t t t|0 0 0|d d d d d| Rd=sub(Rt.L,Rs.L):<<16 - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|0 1 1|s s s s s| P P |- t t t t t|0 0 1|d d d d d| Rd=sub(Rt.L,Rs.H):<<16 - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|0 1 1|s s s s s| P P |- t t t t t|0 1 0|d d d d d| Rd=sub(Rt.H,Rs.L):<<16 - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|0 1 1|s s s s s| P P |- t t t t t|0 1 1|d d d d d| Rd=sub(Rt.H,Rs.H):<<16 - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|0 1 1|s s s s s| P P |- t t t t t|1 0 0|d d d d d| Rd=sub(Rt.L,Rs.L):sat:<<16 - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|0 1 1|s s s s s| P P |- t t t t t|1 0 1|d d d d d| Rd=sub(Rt.L,Rs.H):sat:<<16 - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|0 1 1|s s s s s| P P |- t t t t t|1 1 0|d d d d d| Rd=sub(Rt.H,Rs.L):sat:<<16 - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|0 1 1|s s s s s| P P |- t t t t t|1 1 1|d d d d d| Rd=sub(Rt.H,Rs.H):sat:<<16 - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|1 0 0|s s s s s| P P |- t t t t t|0 - -|d d d d d| Rd=add(Rs,Rt):sat:deprecated - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|1 0 0|s s s s s| P P |- t t t t t|1 - -|d d d d d| Rd=sub(Rt,Rs):sat:deprecated - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|1 0 1|s s s s s| P P |- t t t t t|0 - -|d d d d d| Rd=min(Rs,Rt) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|1 0 1|s s s s s| P P |- t t t t t|1 - -|d d d d d| Rd=minu(Rs,Rt) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|1 1 0|s s s s s| P P |- t t t t t|0 - -|d d d d d| Rd=max(Rs,Rt) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|1 1 0|s s s s s| P P |- t t t t t|1 - -|d d d d d| Rd=maxu(Rs,Rt) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 0 1|1 1 1|s s s s s| P P |- t t t t t|- - -|d d d d d| Rd=parity(Rs,Rt) - XTYPE ALU/slot 2,3
-test|1 1 0 1|0 1 1 0|0 0 i|- - - - -| P P |i i i i i i|i i i|d d d d d| Rd=sfmake(#u10):pos - XTYPE FP/slot 2,3
-test|1 1 0 1|0 1 1 0|0 1 i|- - - - -| P P |i i i i i i|i i i|d d d d d| Rd=sfmake(#u10):neg - XTYPE FP/slot 2,3
-test|1 1 0 1|0 1 1 0|1 1 1|s s s s s| P P |- t t t t t|0 0 0|- - - d d| Pd=dfcmp.eq(Rss,Rtt) - XTYPE FP/slot 2,3
-test|1 1 0 1|0 1 1 0|1 1 1|s s s s s| P P |- t t t t t|0 0 1|- - - d d| Pd=dfcmp.gt(Rss,Rtt) - XTYPE FP/slot 2,3
-test|1 1 0 1|0 1 1 0|1 1 1|s s s s s| P P |- t t t t t|0 1 1|- - - d d| Pd=dfcmp.ge(Rss,Rtt) - XTYPE FP/slot 2,3
-test|1 1 0 1|0 1 1 0|1 1 1|s s s s s| P P |- t t t t t|1 0 0|- - - d d| Pd=dfcmp.uo(Rss,Rtt) - XTYPE FP/slot 2,3
-test|1 1 0 1|0 1 1 1|0 i i|s s s s s| P P |i t t t t t|i i i|d d d d d| Rd=add(#u6,mpyi(Rs,Rt)) - XTYPE FP/slot 2,3
-test|1 1 0 1|1 0 0 0|l i i|s s s s s| P P |i d d d d d|i i i|l l l l l| Rd=add(#u6,mpyi(Rs,#U6)) - XTYPE FP/slot 2,3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
test|1 1 0 1|1 0 0 1|0 0 i|- - - - -| P P |i i i i i i|i i i|d d d d d| Rdd=dfmake(#u10):pos - XTYPE FP/slot 2,3
test|1 1 0 1|1 0 0 1|0 1 i|- - - - -| P P |i i i i i i|i i i|d d d d d| Rdd=dfmake(#u10):neg - XTYPE FP/slot 2,3
test|1 1 0 1|1 0 1 0|0 0 i|s s s s s| P P |i i i i i i|i i i|x x x x x| Rx|=and(Rs,#s10) - XTYPE ALU/slot 2,3
diff --git a/src/display.rs b/src/display.rs
index 309781b..3074701 100644
--- a/src/display.rs
+++ b/src/display.rs
@@ -346,15 +346,15 @@ impl fmt::Display for Instruction {
if self.flags.chop {
f.write_str(":chop")?;
}
- if self.flags.saturate {
- f.write_str(":sat")?;
- }
if let Some(shift) = self.flags.shift_left {
write!(f, ":<<{}", shift)?;
}
if let Some(shift) = self.flags.shift_right {
write!(f, ":>>{}", shift)?;
}
+ if self.flags.saturate {
+ f.write_str(":sat")?;
+ }
if self.flags.deprecated {
f.write_str(":deprecated")?;
}
diff --git a/src/lib.rs b/src/lib.rs
index c9b2bb0..650c7f9 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -4520,13 +4520,8 @@ fn decode_instruction<
} else {
handler.on_dest_decoded(Operand::gprpair(ddddd)?)?;
}
- if op_lo < 0b10 {
- handler.on_source_decoded(Operand::gprpair(sssss)?)?;
- handler.on_source_decoded(Operand::gprpair(ttttt)?)?;
- } else {
- handler.on_source_decoded(Operand::gprpair(ttttt)?)?;
- handler.on_source_decoded(Operand::gprpair(sssss)?)?;
- }
+ handler.on_source_decoded(Operand::gprpair(sssss)?)?;
+ handler.on_source_decoded(Operand::gprpair(ttttt)?)?;
}
0b10 => {
static OPCODES: [Option<Opcode>; 8] = [
@@ -4548,8 +4543,9 @@ fn decode_instruction<
}
}
_ => {
- static OPCODES: [Opcode; 4] = [
- Opcode::Vxaddsubh, Opcode::Vxsubaddh, Opcode::Extractu, Opcode::Decbin,
+ static OPCODES: [Opcode; 8] = [
+ Opcode::Vxaddsubh, Opcode::Vxaddsubh, Opcode::Vxsubaddh, Opcode::Vxsubaddh,
+ Opcode::Extractu, Opcode::Extractu, Opcode::Decbin, Opcode::Decbin,
];
handler.on_opcode_decoded(OPCODES[op_lo as usize])?;
@@ -4557,7 +4553,7 @@ fn decode_instruction<
handler.on_source_decoded(Operand::gprpair(sssss)?)?;
handler.on_source_decoded(Operand::gprpair(ttttt)?)?;
- if op_lo < 0b10 {
+ if op_lo < 0b100 {
handler.rounded(RoundingMode::Round)?;
handler.shift_right(1)?;
handler.saturate()?;
diff --git a/tests/from_brain.rs b/tests/from_brain.rs
index 644195d..55c231e 100644
--- a/tests/from_brain.rs
+++ b/tests/from_brain.rs
@@ -1050,6 +1050,29 @@ fn inst_1100() {
test_display(&0b1100_0001_000_00100_11_0_1_0000_100_10110u32.to_le_bytes(), "{ R23:22 = shuffob(R17:16, R5:4) }");
test_display(&0b1100_0001_000_00100_11_0_1_0000_110_10110u32.to_le_bytes(), "{ R23:22 = shuffeh(R17:16, R5:4) }");
+ test_display(&0b1100_0001_010_10100_11_000110_000_10110u32.to_le_bytes(), "{ R23:22 = vxaddsubw(R21:20, R7:6):sat }");
+ test_display(&0b1100_0001_010_10100_11_000110_001_10110u32.to_le_bytes(), "{ R22 = vaddhub(R21:20, R7:6):sat }");
+ test_display(&0b1100_0001_010_10100_11_000110_010_10110u32.to_le_bytes(), "{ R23:22 = vxsubaddw(R21:20, R7:6):sat }");
+ test_invalid(&0b1100_0001_010_10100_11_000110_011_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_display(&0b1100_0001_010_10100_11_000110_100_10110u32.to_le_bytes(), "{ R23:22 = vxaddsubh(R21:20, R7:6):sat }");
+ test_invalid(&0b1100_0001_010_10100_11_000110_101_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_display(&0b1100_0001_010_10100_11_000110_110_10110u32.to_le_bytes(), "{ R23:22 = vxsubaddh(R21:20, R7:6):sat }");
+ test_invalid(&0b1100_0001_010_10100_11_000110_111_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+
+ test_display(&0b1100_0001_100_10100_11_000110_000_10110u32.to_le_bytes(), "{ R23:22 = shuffoh(R7:6, R21:20) }");
+ test_invalid(&0b1100_0001_100_10100_11_000110_001_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_display(&0b1100_0001_100_10100_11_000110_010_10110u32.to_le_bytes(), "{ R23:22 = vtrunewh(R21:20, R7:6) }");
+ test_display(&0b1100_0001_100_10100_11_000110_011_10110u32.to_le_bytes(), "{ R23:22 = vtrunehb(R21:20, R7:6) }");
+ test_display(&0b1100_0001_100_10100_11_000110_100_10110u32.to_le_bytes(), "{ R23:22 = vtrunowh(R21:20, R7:6) }");
+ test_display(&0b1100_0001_100_10100_11_000110_101_10110u32.to_le_bytes(), "{ R23:22 = vtrunohb(R21:20, R7:6) }");
+ test_display(&0b1100_0001_100_10100_11_000110_110_10110u32.to_le_bytes(), "{ R23:22 = lfs(R21:20, R7:6) }");
+ test_invalid(&0b1100_0001_100_10100_11_000110_111_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+
+ test_display(&0b1100_0001_110_10100_11_000110_000_10110u32.to_le_bytes(), "{ R23:22 = vxaddsubh(R21:20, R7:6):rnd:>>1:sat }");
+ test_display(&0b1100_0001_110_10100_11_000110_010_10110u32.to_le_bytes(), "{ R23:22 = vxsubaddh(R21:20, R7:6):rnd:>>1:sat }");
+ test_display(&0b1100_0001_110_10100_11_000110_100_10110u32.to_le_bytes(), "{ R23:22 = extractu(R21:20, R7:6) }");
+ test_display(&0b1100_0001_110_10100_11_000110_110_10110u32.to_le_bytes(), "{ R23:22 = decbin(R21:20, R7:6) }");
+
// test_display(&0b1100_0011110_10100_11_000110_011_10110u32.to_le_bytes(), "{ R23:22 = vcnegh(R21:20, R6) }");
test_display(&0b1100_1011_000_10100_11_000110_000_10110u32.to_le_bytes(), "{ R23:22 |= asr(R21:20, R6) }");