Special Registers Altered:
CR0 (if Rc=1)
+
+# DRAFT bmask (don't know full name)
+
+BM2-Form
+
+* bmask RT,RA,RB,mode
+
+Pseudo-code:
+
+ if _RB = 0 then mask <- [1] * XLEN else mask = (RB)
+ a1 <- (RA) & mask
+ if mode[1] then a1 <- ¬ra
+ mode2 <- mode[2:3]
+ if mode2 = 0 then a2 <- (¬ra)+1
+ if mode2 = 1 then a2 <- ra-1
+ if mode2 = 2 then a2 <- ra+1
+ if mode2 = 3 then a2 <- ¬(ra+1)
+ a1 <- a1 & mask
+ a2 <- a2 & mask
+ # select operator
+ mode3 <- mode[3:4]
+ if mode3 = 0 then result <- a1 | a2
+ if mode3 = 1 then result <- a1 & a2
+ if mode3 = 2 then result <- a1 ^ a2
+ if mode3 = 3 then result <- UNDEFINED
+ result <- result & mask
+ # optionally restore masked-out bits
+ if L = 1 then
+ result <- result | (RA & ¬mask)
+ RT <- result
0111110110-,ALU,OP_ABSADD,RA,RB,RT,RT,NONE,CR0,0,0,ZERO,0,NONE,0,0,0,0,0,0,RC,0,0,absdacs,X,,1,unofficial until submitted and approved/renumbered by the opf isa wg
# Vector bitmanip
0110001110-,ALU,OP_CPROP,RA,RB,NONE,RT,NONE,CR0,0,0,ZERO,0,NONE,0,0,0,0,0,0,RC,0,0,cprop,X,,1,unofficial until submitted and approved/renumbered by the opf isa wg
+------10001,ALU,OP_BMASK,RA,RB,NONE,RT,NONE,NONE,0,0,ZERO,0,NONE,0,0,0,0,0,0,RC,0,0,cprop,BM2,,1,unofficial until submitted and approved/renumbered by the opf isa wg
# they can - if implementations then choose - be Vectorised
# (sv.fsins) because they are general-purpose scalar instructions
+ # 1.6.2.1 BM-FORM
+ # |0 |6 |10 |15 |22 |23 |31|
+ # | PO | RS | me | sh | me | XO |Rc|
+ if opcode == ('bmask'):
+ fields = list(map(int, fields))
+ insn = 59 << (31-5) # opcode 59, bits 0-5
+ insn |= fields[0] << (31-10) # RT , bits 6-10
+ insn |= fields[1] << (31-20) # RB , bits 16-20
+ insn |= 0b1000001110 << (31-30) # XO , bits 21..30
+ log("fsins", bin(insn))
+ yield ".long 0x%x" % insn
+ return
+
+
# and fsins
# XXX WARNING THESE ARE NOT APPROVED BY OPF ISA WG
# however we are out of space with opcode 22