(RT, RA, SVi, vf, vs, ms) = fields
SVi -= 1
return instruction(
- (PO , 0 , 5 ),
- (RT , 6 , 10),
- (RA , 11, 15),
+ (PO, 0, 5),
+ (RT, 6, 10),
+ (RA, 11, 15),
(SVi, 16, 22),
- (ms , 23, 23),
- (vs , 24, 24),
- (vf , 25, 25),
- (XO , 26, 30),
- (Rc , 31, 31),
+ (ms, 23, 23),
+ (vs, 24, 24),
+ (vf, 25, 25),
+ (XO, 26, 30),
+ (Rc, 31, 31),
)
(RT, SVi, vf) = fields
SVi -= 1
return instruction(
- (PO , 0 , 5 ),
- (RT , 6 , 10),
- (0 , 11, 15),
+ (PO, 0, 5),
+ (RT, 6, 10),
+ (0, 11, 15),
(SVi, 16, 22),
- (0 , 23, 23),
- (0 , 24, 24),
- (vf , 25, 25),
- (XO , 26, 30),
- (Rc , 31, 31),
+ (0, 23, 23),
+ (0, 24, 24),
+ (vf, 25, 25),
+ (XO, 26, 30),
+ (Rc, 31, 31),
)
SVyd -= 1
SVzd -= 1
return instruction(
- (PO , 0 , 5 ),
- (SVxd, 6 , 10),
+ (PO, 0, 5),
+ (SVxd, 6, 10),
(SVyd, 11, 15),
(SVzd, 16, 20),
(SVrm, 21, 24),
- (vf , 25, 25),
- (XO , 26, 31),
+ (vf, 25, 25),
+ (XO, 26, 31),
)
(SVG, rmm, SVd, ew, yx, mm, sk) = fields
SVd -= 1
return instruction(
- (PO , 0 , 5 ),
- (SVG, 6 , 10),
+ (PO, 0, 5),
+ (SVG, 6, 10),
(rmm, 11, 15),
(SVd, 16, 20),
- (ew , 21, 22),
- (yx , 23, 23),
- (mm , 24, 24),
- (sk , 25, 25),
- (XO , 26, 31),
+ (ew, 21, 22),
+ (yx, 23, 23),
+ (mm, 24, 24),
+ (sk, 25, 25),
+ (XO, 26, 31),
)
XO = 0b111001
(SVme, mi0, mi1, mi2, mo0, mo1, pst) = fields
return instruction(
- (PO , 0 , 5 ),
- (SVme, 6 , 10),
- (mi0 , 11, 12),
- (mi1 , 13, 14),
- (mi2 , 15, 16),
- (mo0 , 17, 18),
- (mo1 , 19, 20),
- (pst , 21, 21),
- (0 , 22, 25),
- (XO , 26, 31),
+ (PO, 0, 5),
+ (SVme, 6, 10),
+ (mi0, 11, 12),
+ (mi1, 13, 14),
+ (mi2, 15, 16),
+ (mo0, 17, 18),
+ (mo1, 19, 20),
+ (pst, 21, 21),
+ (0, 22, 25),
+ (XO, 26, 31),
)
XO = 0b010001
(RT, RA, RB, bm, L) = fields
return instruction(
- (PO, 0 , 5 ),
- (RT, 6 , 10),
+ (PO, 0, 5),
+ (RT, 6, 10),
(RA, 11, 15),
(RB, 16, 20),
(bm, 21, 25),
- (L , 26, 26),
+ (L, 26, 26),
(XO, 27, 31),
)
XO = 0b1000001110
(FRT, FRB) = fields
return instruction(
- (PO , 0 , 5 ),
- (FRT, 6 , 10),
- (0 , 11, 15),
+ (PO, 0, 5),
+ (FRT, 6, 10),
+ (0, 11, 15),
(FRB, 16, 20),
- (XO , 21, 30),
- (Rc , 31, 31),
+ (XO, 21, 30),
+ (Rc, 31, 31),
)
XO = 0b1000101110
(FRT, FRB) = fields
return instruction(
- (PO , 0 , 5 ),
- (FRT, 6 , 10),
- (0 , 11, 15),
+ (PO, 0, 5),
+ (FRT, 6, 10),
+ (0, 11, 15),
(FRB, 16, 20),
- (XO , 21, 30),
- (Rc , 31, 31),
+ (XO, 21, 30),
+ (Rc, 31, 31),
)
XO = 0
(RT, RA, RB, TLI) = fields
return instruction(
- (PO , 0 , 5 ),
- (RT , 6 , 10),
- (RA , 11, 15),
- (RB , 16, 20),
+ (PO, 0, 5),
+ (RT, 6, 10),
+ (RA, 11, 15),
+ (RB, 16, 20),
(TLI, 21, 28),
- (XO , 29, 30),
- (Rc , 31, 31),
+ (XO, 29, 30),
+ (Rc, 31, 31),
)
PO = 22
(RT, RA, RB) = fields
return instruction(
- (PO, 0 , 5 ),
- (RT, 6 , 10),
+ (PO, 0, 5),
+ (RT, 6, 10),
(RA, 11, 15),
(RB, 16, 20),
(XO, 21, 30),
XO = 0b00011
(FRS, imm) = fields
# first split imm into d1, d0 and d2. sigh
- d2 = (imm & 1) # LSB (0)
- d1 = (imm >> 1) & 0b11111 # bits 1-5
- d0 = (imm >> 6) # MSBs 6-15
+ d2 = (imm & 1) # LSB (0)
+ d1 = (imm >> 1) & 0b11111 # bits 1-5
+ d0 = (imm >> 6) # MSBs 6-15
return instruction(
- (PO , 0 , 5),
- (FRS, 6 , 10),
+ (PO, 0, 5),
+ (FRS, 6, 10),
(d1, 11, 15),
(d0, 16, 25),
- (XO , 26, 30),
- (d2 , 31, 31),
+ (XO, 26, 30),
+ (d2, 31, 31),
)
XO = 0b01011
(FRS, imm) = fields
# first split imm into d1, d0 and d2. sigh
- d2 = (imm & 1) # LSB (0)
- d1 = (imm >> 1) & 0b11111 # bits 1-5
- d0 = (imm >> 6) # MSBs 6-15
+ d2 = (imm & 1) # LSB (0)
+ d1 = (imm >> 1) & 0b11111 # bits 1-5
+ d0 = (imm >> 6) # MSBs 6-15
return instruction(
- (PO , 0 , 5),
- (FRS, 6 , 10),
+ (PO, 0, 5),
+ (FRS, 6, 10),
(d1, 11, 15),
(d0, 16, 25),
- (XO , 26, 30),
- (d2 , 31, 31),
+ (XO, 26, 30),
+ (d2, 31, 31),
)
CUSTOM_INSNS = {}
for (name, hook) in (
- ("setvl", setvl),
- ("svstep", svstep),
- ("fsins", fsins),
- ("fcoss", fcoss),
- ("ternlogi", ternlogi),
- ):
+ ("setvl", setvl),
+ ("svstep", svstep),
+ ("fsins", fsins),
+ ("fcoss", fcoss),
+ ("ternlogi", ternlogi),
+):
CUSTOM_INSNS[name] = functools.partial(hook, Rc=False)
CUSTOM_INSNS[f"{name}."] = functools.partial(hook, Rc=True)
CUSTOM_INSNS["bmask"] = bmask
CUSTOM_INSNS["fishmv"] = fishmv
for (name, imm, wide) in (
- ("grev", False, False),
- ("grevi", True, False),
- ("grevw", False, True),
- ("grevwi", True, True),
- ):
+ ("grev", False, False),
+ ("grevi", True, False),
+ ("grevw", False, True),
+ ("grevwi", True, True),
+):
CUSTOM_INSNS[name] = functools.partial(grev,
- imm=("i" in name), wide=("w" in name), Rc=False)
+ imm=("i" in name), wide=("w" in name), Rc=False)
CUSTOM_INSNS[f"{name}."] = functools.partial(grev,
- imm=("i" in name), wide=("w" in name), Rc=True)
+ imm=("i" in name), wide=("w" in name), Rc=True)
for (name, XO) in (
- ("maxs" , 0b0111001110),
- ("maxu" , 0b0011001110),
- ("minu" , 0b0001001110),
- ("mins" , 0b0101001110),
- ("absdu" , 0b1011110110),
- ("absds" , 0b1001110110),
- ("avgadd" , 0b1101001110),
- ("absdacu", 0b1111110110),
- ("absdacs", 0b0111110110),
- ("cprop" , 0b0110001110),
- ):
+ ("maxs", 0b0111001110),
+ ("maxu", 0b0011001110),
+ ("minu", 0b0001001110),
+ ("mins", 0b0101001110),
+ ("absdu", 0b1011110110),
+ ("absds", 0b1001110110),
+ ("avgadd", 0b1101001110),
+ ("absdacu", 0b1111110110),
+ ("absdacs", 0b0111110110),
+ ("cprop", 0b0110001110),
+):
CUSTOM_INSNS[name] = functools.partial(av, XO=XO, Rc=False)
CUSTOM_INSNS[f"{name}."] = functools.partial(av, XO=XO, Rc=True)
(rname, str(extras[extra_idx]))
# all good: encode as scalar
sv_extra = sv_extra & 0b01
- else: # vector
+ else: # vector
# range is CR0-CR127 in increments of 16
assert sv_extra & 0b111 == 0, \
"vector CR %s cannot fit into EXTRA2 %s" % \
(rname, str(extras[extra_idx]))
# all good: encode as scalar
sv_extra = sv_extra & 0b11
- else: # vector
+ else: # vector
# range is CR0-CR127 in increments of 8
assert sv_extra & 0b11 == 0, \
"vector CR %s cannot fit into EXTRA3 %s" % \
if v30b_op_orig not in svp64.instrs:
raise Exception("opcode %s of '%s' not an svp64 instruction" %
(v30b_op, insn))
- v30b_regs = isa.instr[v30b_op_orig].regs[0] # get regs info "RT, RA, RB"
+ # get regs info "RT, RA, RB"
+ v30b_regs = isa.instr[v30b_op_orig].regs[0]
rm = svp64.instrs[v30b_op_orig] # one row of the svp64 RM CSV
log("v3.0B op", v30b_op, "Rc=1" if rc_mode else '')
log("v3.0B regs", opcode, v30b_regs)
# encode SV-CR 3-bit field into extra, v3.0field.
# 3-bit is for things like BF and BFA
elif rtype == 'CR_3bit':
- sv_extra, field = crf_extra(etype, regmode, field, extras)
+ sv_extra, field = crf_extra(etype, regmode, field, extras)
# encode SV-CR 5-bit field into extra, v3.0field
# 5-bit is for things like BA BB BC BT etc.
# *sigh* this is the same as 3-bit except the 2 LSBs of the
# 5-bit field are passed through unaltered.
elif rtype == 'CR_5bit':
- cr_subfield = field & 0b11 # record bottom 2 bits for later
+ cr_subfield = field & 0b11 # record bottom 2 bits for later
field = field >> 2 # strip bottom 2 bits
# use the exact same 3-bit function for the top 3 bits
- sv_extra, field = crf_extra(etype, regmode, field, extras)
+ sv_extra, field = crf_extra(etype, regmode, field, extras)
# reconstruct the actual 5-bit CR field (preserving the
# bottom 2 bits, unaltered)
field = (field << 2) | cr_subfield