else return 64
```
-# alternative encoding (4)
-
-derived from <https://bugs.libre-soc.org/show_bug.cgi?id=924#c20>
-
-In order for `Rc` and similar fields to not move for 32-bit instructions, bits
-`28:29` are used as the main encoding bits instead of `30:31`.
-
-space saving measures: EXT2xx is half the size
-
-## length decoding algorithm
-```
-if PREFIX[0:5] = 1 then return 64
-else if PREFIX[0:5] = 9 then
- if PREFIX[28:29] = 3 then
- if PREFIX[26:27] = 3 then return 64
- else return 32
- else return 64
-else return 32
-```
-
-## short table
-```
-|0 |6 |11 |16 |21 |22 |26 |28|29|30 |31 |32|33 |38 |
-| 9| SVRM[0:21] | 0| 0| SVRM[22:23]| EXT0xx insn | SVP64 ext0xx
-| 9| SVRM[0:21] | 0| 1| SVRM[22:23]| EXT0xx insn | SVP64Single ext0xx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| 0| EXT2xx insn | SVP64 ext2xx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| 1| EXT2xx insn | SVP64Single ext2xx
-| 9| - | 00| 1| 1| - | N/A | scalar 32-bit
-| 9| - | 01| 1| 1| - | N/A | scalar 32-bit
-| 9| - | 10| 1| 1| - | N/A | scalar 32-bit
-| 9| - | 11| 1| 1| - | scalar 64-bit
-| 9| RT| RA| RB| OE| XO| 00| 1| 1| XO | Rc| N/A | XO-form 32-bit
-| 9| RT| RA| RB| XO | 00| 1| 1| XO | Rc| N/A | X-form 32-bit
-| 9| RS| RA| sh| XO | 00| 1| 1| sh | Rc| N/A | XS-form 32-bit
-```
-
-## SVP64Single in SFFS
-
-important note: SFFS implementations that don't implement SVP64 can still
-implement EXT2xx instructions by using the SVP64Single encoding with SVRM=0,
-no other SVP64 state needs to be implemented to do that.
-(TODO: double check that)
-
-## full table
-
-note: I mostly stashed stuff in EXT2xx, so the scalar 32-bit space is still
-mostly free, most the instructions I wanted in the scalar 32-bit space took
-up too much room. I didn't allocate XO values in EXT2xx yet since there's
-plenty of space (32 POs equivalent)
-
-note: setvl is split into a 32-bit insn with a common subset of settings and
-a full 64-bit insn with all the settings; svstep is 32-bit
-
-note: fmv/fcvt are 32-bit ops, so you can see how they easily fit around bits
-26-29 which are used to distinguish from SVP64 prefixes.
-
-```
-|0 |6 |11 |16 |21 |22 |26 |28|29|30 |31 |32|33 |38 |
-| 9| SVRM[0:21] | 0| 0| SVRM[22:23]| EXT0xx insn | SVP64 ext0xx
-| 9| SVRM[0:21] | 0| 1| SVRM[22:23]| EXT0xx insn | SVP64Single ext0xx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| 0| EXT2xx insn | SVP64 ext2xx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| 1| EXT2xx insn | SVP64Single ext2xx
-| 9| - | 00| 1| 1| - | N/A | scalar 32-bit
-| 9| - | 01| 1| 1| - | N/A | scalar 32-bit
-| 9| - | 10| 1| 1| - | N/A | scalar 32-bit
-| 9| - | 11| 1| 1| - | scalar 64-bit
-| 9| RT| RA| RB| OE| XO| 00| 1| 1| XO | Rc| N/A | XO-form 32-bit
-| 9| RT| RA| RB| XO | 00| 1| 1| XO | Rc| N/A | X-form 32-bit
-| 9| RS| RA| sh| XO | 00| 1| 1| sh | Rc| N/A | XS-form 32-bit
-
-|0 |6 |11 |16 |21 |22 |26 |28|29|30 |31 |32|33 |38 |
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lbzup
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lbzupx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lhzup
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lhzupx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lhaup
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lhaupx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lwzup
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lwzupx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lwaupx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | ldup
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | ldupx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stbup
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stbupx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | sthup
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | sthupx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stwup
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stwupx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stdup
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stdupx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lfdu
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lfsup
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lfdupx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lsdupx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stfdup
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stfsup
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stfdupx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stfsupx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lbzuspx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lhzuspx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lhauspx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lwzuspx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lwauspx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lduspx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stbuspx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | sthuspx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stwuspx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stduspx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lfdupsx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lsdupsx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stfdupsx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stfsupsx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lbzsx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lbzusx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lhzsx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lhzusx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lhasx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lhausx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lwzsx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lwzusx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lwasx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lwausx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | ldsx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | ldusx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lhbrsx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lwbrsx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | ldbrsx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stbsx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stbusx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | sthsx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | sthusx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stwsx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stwusx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stdsx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stdusx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | sthbrsx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stwbrsx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stdbrsx
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lfsxs
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lfsuxs
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lfdxs
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lfduxs
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lfiwaxs
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | lfiwzxs
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stfsxs
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stfsuxs
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stfdxs
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stfduxs
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | stfiwxs
-
-|0 |6 |11 |16 |21 |22 |26 |28|29|30 |31 |32|33 |38 |
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | grevlut
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | grevluti
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | ternlogi
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | crternlogi
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | binlut
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | crbinlut
-
-|0 |6 |11 |14 |26 |28|29|30 |32 |
-| 9|FRT|mode| XO | 11| 1| 1| XO | imm32 | fli 64-bit
-
-|0 |6 |11 |16 |21 |23 |26 |28|29|30 |31 |32|33 |38 |
-| 9| RT| RA| RB| sm|000| 00| 1| 1| 0 | Rc| N/A | shadd
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | shadduw
-| 9| RT| RA| RB| sm|000| 00| 1| 1| 1 | Rc| N/A | shaddw
-
-|0 |6 |11 |16 |21 |22 |26 |28|29|30 |31 |32|33 |38 |
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | absdu
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | avgadd
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | minmax
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | absaccs
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | absaccu
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | bmask
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | cprop
-
-|0 |6 |11 |16 |21 |22 |26 |28|29|30 |31 |32|33 |38 |
-| 9| RT| RA| SVi |001| 00| 1| 1| vs | Rc| N/A | setvl (common 32-bit, ms=vs, vf=0)
-| 9| TBD | 11| 1| 1| TBD | setvl (full 64-bit)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | svremap
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | svshape
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | svshape2
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | svindex
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | mv.swizzle
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fmv.swizzle
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | crrweird
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | mfcrweird
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | mtcrrweird
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | mtcrweird
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | crweirder
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | mcrfm
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fptstp(s)
-
-|0 |6 |11 |13 |16 |21 |22 |26 |28|29|30 |31 |32|33 |38 |
-| 9| RT| 11|111| SVi |010| 00| 1| 1| vf | Rc| N/A | svstep
-| 9| RT| 10|111| FRB |010| 00| 1| 1| 0 | Rc| N/A | fmvtg
-| 9| RT| 10|111| FRB |010| 00| 1| 1| 1 | Rc| N/A | fmvtgs
-| 9|FRT| 01|111| RB |010| 00| 1| 1| 0 | Rc| N/A | fmvfg
-| 9|FRT| 01|111| RB |010| 00| 1| 1| 1 | Rc| N/A | fmvfgs
-| 9|FRT| IT|110| RB |010| 00| 1| 1| 0 | Rc| N/A | fcvtfg
-| 9|FRT| IT|110| RB |010| 00| 1| 1| 1 | Rc| N/A | fcvtfgs
-| 9| RT| IT|CVM| FRB |010| 00| 1| 1| 0 | Rc| N/A | fcvttg
-| 9|- | - |0-5| - |010| 00| 1| 1| 1 | Rc| N/A | *reserved*
-
-|0 |6 |11 |16 |21 |22 |26 |28|29|30 |31 |32|33 |38 |
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | dsld
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | dsrd
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | maddedu
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | maddedus
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | divmod2du
-
-|0 |6 |11 |16 |21 |22 |26 |28|29|30 |31 |32|33 |38 |
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | ffadd(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | ffsub(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | ffmul(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | ffdiv(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fdmadd(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | ffmadd(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | ffmsub(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | ffnmadd(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | ffnmsub(s)
-
-|0 |6 |11 |16 |21 |22 |26 |28|29|30 |31 |32|33 |38 |
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fsin(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fcos(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | ftan(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fasin(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | facos(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fatan(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fsinpi(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fcospi(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | ftanpi(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fasinpi(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | facospi(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fatanpi(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fsinh(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fcosh(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | ftanh(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fasinh(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | facosh(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fatanh(s)
-
-|0 |6 |11 |16 |21 |22 |26 |28|29|30 |31 |32|33 |38 |
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | frsqrt(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fcbrt(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | frecip(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fexp2m1(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | flog2p1(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fexp2(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | flog2(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fexpm1(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | flogp1(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fexp(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | flog(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fexp10m1(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | flog10p1(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fexp10(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | flog10(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fatan2(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fatan2pi(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fpow(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fpown(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fpowr(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | frootn(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fhypot(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fminmax
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fmod(s)
-| 9| SVRM[0:21] | 1| 0| SVRM[22:23]| -| TBD | fremainder(s)
-```