src2 = get_polymorphed_reg(RC, srcwid, irs3)
result = src1*src2 + src2
destmask = (2<<destwid)-1
- # store two halves of result
+ # store two halves of result, both start from RT.
set_polymorphed_reg(RT, destwid, ird , result&destmask)
set_polymorphed_reg(RT, destwid, ird+MAXVL, result>>destwid)
if (!RT.isvec) break
The significant part here is that the second half is stored
starting not from RT+MAXVL at all: it is the *element* index
-that is offset by MAXVL, both starting from RT.
+that is offset by MAXVL, both halves actually starting from RT.
+If VL is 3, MAXVL is 5, RT is 1, and dest elwidth is 32 then the elements
+RT0 to RT2 are stored:
+
+ 0..31 32..63
+ r0 unchanged unchanged
+ r1 RT0.lo RT1.lo
+ r2 RT2.lo unchanged
+ r3 unchanged RT0.hi
+ r4 RT1.hi RT2.hi
+ r5 unchanged unchanged
+
+Additional DRAFT Scalar instructions in 3-in 2-out form
+with an implicit 2nd destination:
* [[isa/svfixedarith]]
* [[isa/svfparith]]