* crrweird. RT,BFA,M,fmsk,fmap (Rc=1)
```
- creg = CR{BFA}
+ creg = CR[4*BFA+32:4*BFA+35]
n0 = fmsk[0] & (fmap[0] == creg[0])
n1 = fmsk[1] & (fmap[1] == creg[1])
n2 = fmsk[2] & (fmap[2] == creg[2])
```
- creg = CR{BFA}
+ creg = CR[4*BFA+32:4*BFA+35]
n0 = fmsk[0] & (fmap[0] == creg[0])
n1 = fmsk[1] & (fmap[1] == creg[1])
n2 = fmsk[2] & (fmap[2] == creg[2])
n3 = fmsk[3] & (fmap[3] == a[60])
result = n0 || n1 || n2 || n3
if M:
- result |= CR{BF} & ~fmsk
- CR{BF} = result
+ result |= CR[4*BF+32:4*BF+35] & ~fmsk
+ CR[4*BF+32:4*BF+35] = result
```
When used with SVP64 Prefixing this is a [[sv/normal]]
## mtcrweird
-```
- mtcrweird: BF,RA,M,fmsk,fmap
+* mtcrweird BF,RA,M,fmsk,fmap
+```
reg = (RA|0)
- lsb = reg[63] # MSB0 numbering
+ lsb = reg[63] # MSB0 numbering, the LSB
n0 = fmsk[0] & (fmap[0] == lsb)
n1 = fmsk[1] & (fmap[1] == lsb)
n2 = fmsk[2] & (fmap[2] == lsb)
n3 = fmsk[3] & (fmap[3] == lsb)
result = n0 || n1 || n2 || n3
if M:
- result |= CR{BF} & ~fmsk
- CR{BF} = result
+ result |= CR[4*BF+32:4*BF+35] & ~fmsk
+ CR[4*BF+32:4*BF+35] = result
```
Note that when M=1 this operation is a Read-Modify-Write on the CR Field
```
mcrfm: BF,BFA,M,fmsk,fmap
- result = fmsk & CR{BFA}
+ result = fmsk & CR[4*BFA+32:4*BFA+35]
+ CR{BF} = result
if M:
- result |= CR{BF} & ~fmsk
+ result |= CR[4*BF+32:4*BF+35] & ~fmsk
result ^= fmap
- CR{BF} = result
+ CR[4*BF+32:4*BF+35] = result
```
When M=1 this operation is a Read-Modify-Write on the CR Field
```
crweirder: BT,BFA,fmsk,fmap
- creg = CR{BFA}
- n0 = fmsk[0] & (fmap[0] == creg[0])
- n1 = fmsk[1] & (fmap[1] == creg[1])
- n2 = fmsk[2] & (fmap[2] == creg[2])
- n3 = fmsk[3] & (fmap[3] == creg[3])
-
- n = (n0||n1||n2||n3) & fmsk
+ creg = CR[4*BFA+32:4*BFA+35]
+ n = (¬fmap ^ creg) & fmsk
result = (n != 0) if M else (n == fmsk)
- bf = BT[2:4] # select CR field
- bit = BT[0:1] # select bit of CR field
- CR{bf}[bit] = result # aka the usual "CR[32+BT] = result"
+ CR[32+BT] = result
```
When used with SVP64 Prefixing this is a [[sv/cr_ops]] SVP64