pass
-class LDSTIdxSimpleRM(SEABaseRM, ZZCombinedBaseRM, LDSTIdxBaseRM):
+class LDSTIdxSimpleRM(SEABaseRM, ZZBaseRM, LDSTIdxBaseRM):
"""ld/st index: simple mode (includes element-strided and Signed-EA)"""
+ pi: BaseRM.mode[2] # Post-Increment Mode
els: BaseRM.mode[0]
- SEA: BaseRM.mode[2]
+ SEA: BaseRM.mode[4]
+ zz: BaseRM.mode[3]
dz: BaseRM.mode[3]
- sz: BaseRM.mode[4]
+ sz: BaseRM.mode[3]
def specifiers(self, record):
if self.els:
yield "els"
+ if self.pi:
+ yield "pi"
yield from super().specifiers(record=record)
if desc != "pi":
return None
- if record.svp64.mode is not _SVMode.LDST_IMM:
- raise ValueError("only ld/st imm mode supported")
+ if record.svp64.mode not in [_SVMode.LDST_IMM, _SVMode.LDST_IDX]:
+ raise ValueError("only ld/st imm/idx mode supported")
return cls(record=record)
def assemble(self, insn):
selector = insn.select(record=self.record)
- selector.mode[1] = 0b0
selector.mode[2] = 0b1
selector.pi = 0b1
def assemble(self, insn):
selector = insn.select(record=self.record)
+ selector.mode[1] = 1
selector.VLi = 1
| 0 | 1 | 2 | 3 4 | description |
|---|---| --- |---------|--------------------------- |
-| 0 | 0 | 0 | zz els | simple mode |
-| 0 | 0 | 1 | PI LF | post-increment and Fault-First |
-| 1 | 0 | N | zz els | sat mode: N=0/1 u/s |
+|els| 0 | PI | zz LF | simple mode |
|VLi| 1 | inv | CR-bit | ffirst CR sel |
LD/ST indexed:
| 0 | 1 | 2 | 3 4 | description |
|---|---| --- |---------|--------------------------- |
-|els| 0 | SEA | dz sz | simple mode |
+|els| 0 | PI | zz SEA | simple mode |
|VLi| 1 | inv | CR-bit | ffirst CR sel |
Arithmetic: