Registers used as Predicate Masks must *never* be altered by *any*
instruction when Vertical-First is active. If more than the available
-predicate registers are required (r3, r10, r30, CR Fields) then
-a simple branch-conditional test should be used instead.
+predicate registers are required (r3, r10, r30, CR Predicate Fields) then
+because Vertical-First is not that different from executing standard
+Scalar instructions,
+a simple branch-conditional test should be used instead of predication,
+exactly as would normally be done if SVP64 was not in use.
+
+These rules allow Hardware implementors to choose to
+free up the connection
+between registers used as predicates and registers used for standard
+purposes: Hazards need not be created.
+
+Note that each of the registers may each be used as predicates,
+or they may be used for standard normal purposes. If mixed for
+both purposes when Vertical-First is active, the results of execution
+is `UNDEFINED`.
# Pseudocode
if vf and not vs and not ms {
// increment src/dest step mode
// NOTE! this is in no way complete! predication is not included
- // and neither is SUB-VL mode
+ // and neither is SUBVL mode
srcstep = SPR[SV].srcstep
dststep = SPR[SV].dststep
VL = SPR[SV].VL
// write CR? helps for doing Vertical loops, detects end
// of Vector Elements
- if Rc {
+ if Rc = 1 {
// update CR to indicate that srcstep/dststep "rolled over"
CR0.eq = rollover
}
regs[rt] = VL;
}
// write CR?
- if Rc {
+ if Rc = 1 {
// update CR from VL (not rt)
CR0.eq = (VL == 0)
...