11 inv zz RC1 Rc=0: pred-result z/nonz
Arithmetic:
-00 0 dz sz normal mode
-00 1 0 RG scalar reduce mode (mapreduce), SUBVL=1
-00 1 1 / parallel reduce mode (mapreduce), SUBVL=1
-00 1 SVM 0 subvector reduce mode, SUBVL>1
-00 1 SVM 1 Pack/Unpack mode, SUBVL>1
-01 inv CR-bit Rc=1: ffirst CR sel
-01 inv VLi RC1 Rc=0: ffirst z/nonz
-10 N dz sz sat mode: N=0/1 u/s
-11 inv CR-bit Rc=1: pred-result CR sel
-11 inv zz RC1 Rc=0: pred-result z/nonz
+| 0-1 | 2 | 3 4 | description |
+| --- | --- |---------|-------------------------- |
+| 00 | 0 | dz sz | simple mode |
+| 00 | 1 | 0 RG | scalar reduce mode (mapreduce), SUBVL=1 |
+| 00 | 1 | 1 / | parallel reduce mode (mapreduce), SUBVL=1 |
+| 00 | 1 | SVM 0 | subvector reduce mode, SUBVL>1 |
+| 00 | 1 | SVM 1 | Pack/Unpack mode, SUBVL>1 |
+| 01 | inv | CR-bit | Rc=1: ffirst CR sel |
+| 01 | inv | VLi RC1 | Rc=0: ffirst z/nonz |
+| 10 | N | dz sz | sat mode: N=0/1 u/s, SUBVL=1 |
+| 10 | N | zz 0 | sat mode: N=0/1 u/s, SUBVL>1 |
+| 10 | N | zz 1 | Pack/Unpack sat mode: N=0/1 u/s, SUBVL>1 |
+| 11 | inv | CR-bit | Rc=1: pred-result CR sel |
+| 11 | inv | zz RC1 | Rc=0: pred-result z/nonz |
Branch Conditional:
note that additional BC modes are in *other bits*, specifically
comb += self.mode.eq(SVP64RMMode.NORMAL)
comb += do_pu.eq(mode[SVP64MODE.LDST_PACK]) # Pack mode
with m.Elif(mode[SVP64MODE.REDUCE]):
- comb += self.mode.eq(SVP64RMMode.MAPREDUCE)
- # Pack only active if SVM=1 & SUBVL>1 & Mode[4]=1
- with m.If(self.rm_in.subvl != Const(0, 2)): # active
- comb += do_pu.eq(mode[SVP64MODE.ARITH_PACK])
+ with m.If(mode[SVP64MODE.PARALLEL]):
+ comb += self.mode.eq(SVP64RMMode.PARALLEL)
+ with m.Else():
+ comb += self.mode.eq(SVP64RMMode.MAPREDUCE)
+ # Pack only active if SVM=1 & SUBVL>1 & Mode[4]=1
+ with m.If(self.rm_in.subvl != Const(0, 2)): # active
+ comb += do_pu.eq(mode[SVP64MODE.ARITH_PACK])
with m.Else():
comb += self.mode.eq(SVP64RMMode.NORMAL)
with m.Case(1):