]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/obj/arm64: fix illegal 4-operand instructions accepted arm64 bug
authorfanzha02 <fannie.zhang@arm.com>
Wed, 25 Apr 2018 09:18:45 +0000 (09:18 +0000)
committerCherry Zhang <cherryyz@google.com>
Mon, 7 May 2018 15:12:35 +0000 (15:12 +0000)
Current assmbler accepts MUL* related instructions with 4 operands,
such as instruction "MUL R1, R2, R3, R4", which is illegal.

The fix adds an actual field informantion to Optab, which has value
of C_NONE, C_REG, etc, so assembler can use p.From3Type for checking
in oplook.

Add test cases.

Fixes #25059

Change-Id: I0656319383c460696b392197bf5960b987f8fc97
Reviewed-on: https://go-review.googlesource.com/109295
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Run-TryBot: Cherry Zhang <cherryyz@google.com>

src/cmd/asm/internal/asm/testdata/arm64.s
src/cmd/asm/internal/asm/testdata/arm64error.s
src/cmd/internal/obj/arm64/asm7.go

index 950ca2f9cb33ce5d8be821d1eda4fce4c72c602c..ce6282f0ddb9af39c2bbf05bfdc8ee2326c82aaf 100644 (file)
@@ -408,6 +408,7 @@ again:
 //             outcode($1, &$2, NREG, &$4);
 //     }
        CSET    GT, R1  // e1d79f9a
+       CSETW   HI, R2  // e2979f1a
 //
 // CSEL/CSINC/CSNEG/CSINV
 //
@@ -416,17 +417,22 @@ again:
 //             outgcode($1, &$2, $6.reg, &$4, &$8);
 //     }
        CSEL    LT, R1, R2, ZR  // 3fb0829a
+       CSELW   LT, R2, R3, R4  // 44b0831a
        CSINC   GT, R1, ZR, R3  // 23c49f9a
        CSNEG   MI, R1, R2, R3  // 234482da
        CSINV   CS, R1, R2, R3  // CSINV HS, R1, R2, R3 // 232082da
+       CSINVW  MI, R2, ZR, R2  // 42409f5a
 
 //             LTYPES cond ',' reg ',' reg
 //     {
 //             outcode($1, &$2, $4.reg, &$6);
 //     }
        CINC    EQ, R4, R9      // 8914849a
+       CINCW   PL, R2, ZR      // 5f44821a
        CINV    PL, R11, R22    // 76418bda
+       CINVW   LS, R7, R13     // ed80875a
        CNEG    LS, R13, R7     // a7858dda
+       CNEGW   EQ, R8, R13     // 0d15885a
 //
 // CCMN
 //
index 7de93849320cd12b4f5955fa1ed0a86bbd331b45..36829686f62313f76ea1bdd911fc192b2750159f 100644 (file)
@@ -83,4 +83,8 @@ TEXT errors(SB),$0
        VST1.P  [V1.B16], (R8)(R9<<1)                            // ERROR "invalid extended register"
        VREV64  V1.H4, V2.H8                                     // ERROR "invalid arrangement"
        VREV64  V1.D1, V2.D1                                     // ERROR "invalid arrangement"
+       ADD     R1, R2, R3, R4                                   // ERROR "illegal combination"
+       MADD    R1, R2, R3                                       // ERROR "illegal combination"
+       CINC    CS, R2, R3, R4                                   // ERROR "illegal combination"
+       CSEL    LT, R1, R2                                       // ERROR "illegal combination"
        RET
index f01b8363ad4f62053daf8004a44be13888328cd1..bf96bb58a6abb8d15419998505286f478b80f9e5 100644 (file)
@@ -70,6 +70,7 @@ type Optab struct {
        a1    uint8
        a2    uint8
        a3    uint8
+       a4    uint8
        type_ int8
        size  int8
        param int16
@@ -169,549 +170,552 @@ const (
 
 var optab = []Optab{
        /* struct Optab:
-       OPCODE, from, prog->reg, to, type,size,param,flag,scond */
-       {obj.ATEXT, C_ADDR, C_NONE, C_TEXTSIZE, 0, 0, 0, 0, 0},
+       OPCODE, from, prog->reg, from3, to, type,size,param,flag,scond */
+       {obj.ATEXT, C_ADDR, C_NONE, C_NONE, C_TEXTSIZE, 0, 0, 0, 0, 0},
 
        /* arithmetic operations */
-       {AADD, C_REG, C_REG, C_REG, 1, 4, 0, 0, 0},
-       {AADD, C_REG, C_NONE, C_REG, 1, 4, 0, 0, 0},
-       {AADC, C_REG, C_REG, C_REG, 1, 4, 0, 0, 0},
-       {AADC, C_REG, C_NONE, C_REG, 1, 4, 0, 0, 0},
-       {ANEG, C_REG, C_NONE, C_REG, 25, 4, 0, 0, 0},
-       {ANEG, C_NONE, C_NONE, C_REG, 25, 4, 0, 0, 0},
-       {ANGC, C_REG, C_NONE, C_REG, 17, 4, 0, 0, 0},
-       {ACMP, C_REG, C_REG, C_NONE, 1, 4, 0, 0, 0},
-       {AADD, C_ADDCON, C_RSP, C_RSP, 2, 4, 0, 0, 0},
-       {AADD, C_ADDCON, C_NONE, C_RSP, 2, 4, 0, 0, 0},
-       {ACMP, C_ADDCON, C_RSP, C_NONE, 2, 4, 0, 0, 0},
-       {AADD, C_MOVCON, C_RSP, C_RSP, 62, 8, 0, 0, 0},
-       {AADD, C_MOVCON, C_NONE, C_RSP, 62, 8, 0, 0, 0},
-       {ACMP, C_MOVCON, C_RSP, C_NONE, 62, 8, 0, 0, 0},
-       {AADD, C_BITCON, C_RSP, C_RSP, 62, 8, 0, 0, 0},
-       {AADD, C_BITCON, C_NONE, C_RSP, 62, 8, 0, 0, 0},
-       {ACMP, C_BITCON, C_RSP, C_NONE, 62, 8, 0, 0, 0},
-       {AADD, C_VCON, C_RSP, C_RSP, 13, 8, 0, LFROM, 0},
-       {AADD, C_VCON, C_NONE, C_RSP, 13, 8, 0, LFROM, 0},
-       {ACMP, C_VCON, C_REG, C_NONE, 13, 8, 0, LFROM, 0},
-       {AADD, C_SHIFT, C_REG, C_REG, 3, 4, 0, 0, 0},
-       {AADD, C_SHIFT, C_NONE, C_REG, 3, 4, 0, 0, 0},
-       {AMVN, C_SHIFT, C_NONE, C_REG, 3, 4, 0, 0, 0},
-       {ACMP, C_SHIFT, C_REG, C_NONE, 3, 4, 0, 0, 0},
-       {ANEG, C_SHIFT, C_NONE, C_REG, 26, 4, 0, 0, 0},
-       {AADD, C_REG, C_RSP, C_RSP, 27, 4, 0, 0, 0},
-       {AADD, C_REG, C_NONE, C_RSP, 27, 4, 0, 0, 0},
-       {ACMP, C_REG, C_RSP, C_NONE, 27, 4, 0, 0, 0},
-       {AADD, C_EXTREG, C_RSP, C_RSP, 27, 4, 0, 0, 0},
-       {AADD, C_EXTREG, C_NONE, C_RSP, 27, 4, 0, 0, 0},
-       {AMVN, C_EXTREG, C_NONE, C_RSP, 27, 4, 0, 0, 0},
-       {ACMP, C_EXTREG, C_RSP, C_NONE, 27, 4, 0, 0, 0},
-       {AADD, C_REG, C_REG, C_REG, 1, 4, 0, 0, 0},
-       {AADD, C_REG, C_NONE, C_REG, 1, 4, 0, 0, 0},
-       {AMUL, C_REG, C_REG, C_REG, 15, 4, 0, 0, 0},
-       {AMUL, C_REG, C_NONE, C_REG, 15, 4, 0, 0, 0},
-       {AMADD, C_REG, C_REG, C_REG, 15, 4, 0, 0, 0},
-       {AREM, C_REG, C_REG, C_REG, 16, 8, 0, 0, 0},
-       {AREM, C_REG, C_NONE, C_REG, 16, 8, 0, 0, 0},
-       {ASDIV, C_REG, C_NONE, C_REG, 1, 4, 0, 0, 0},
-       {ASDIV, C_REG, C_REG, C_REG, 1, 4, 0, 0, 0},
-
-       {AFADDS, C_FREG, C_NONE, C_FREG, 54, 4, 0, 0, 0},
-       {AFADDS, C_FREG, C_FREG, C_FREG, 54, 4, 0, 0, 0},
-       {AFADDS, C_FCON, C_NONE, C_FREG, 54, 4, 0, 0, 0},
-       {AFADDS, C_FCON, C_FREG, C_FREG, 54, 4, 0, 0, 0},
-       {AFMSUBD, C_FREG, C_FREG, C_FREG, 15, 4, 0, 0, 0},
-       {AFCMPS, C_FREG, C_FREG, C_NONE, 56, 4, 0, 0, 0},
-       {AFCMPS, C_FCON, C_FREG, C_NONE, 56, 4, 0, 0, 0},
-       {AVADDP, C_ARNG, C_ARNG, C_ARNG, 72, 4, 0, 0, 0},
-       {AVADD, C_ARNG, C_ARNG, C_ARNG, 72, 4, 0, 0, 0},
-       {AVADD, C_VREG, C_VREG, C_VREG, 89, 4, 0, 0, 0},
-       {AVADD, C_VREG, C_NONE, C_VREG, 89, 4, 0, 0, 0},
-       {AVADDV, C_ARNG, C_NONE, C_VREG, 85, 4, 0, 0, 0},
+       {AADD, C_REG, C_REG, C_NONE, C_REG, 1, 4, 0, 0, 0},
+       {AADD, C_REG, C_NONE, C_NONE, C_REG, 1, 4, 0, 0, 0},
+       {AADC, C_REG, C_REG, C_NONE, C_REG, 1, 4, 0, 0, 0},
+       {AADC, C_REG, C_NONE, C_NONE, C_REG, 1, 4, 0, 0, 0},
+       {ANEG, C_REG, C_NONE, C_NONE, C_REG, 25, 4, 0, 0, 0},
+       {ANEG, C_NONE, C_NONE, C_NONE, C_REG, 25, 4, 0, 0, 0},
+       {ANGC, C_REG, C_NONE, C_NONE, C_REG, 17, 4, 0, 0, 0},
+       {ACMP, C_REG, C_REG, C_NONE, C_NONE, 1, 4, 0, 0, 0},
+       {AADD, C_ADDCON, C_RSP, C_NONE, C_RSP, 2, 4, 0, 0, 0},
+       {AADD, C_ADDCON, C_NONE, C_NONE, C_RSP, 2, 4, 0, 0, 0},
+       {ACMP, C_ADDCON, C_RSP, C_NONE, C_NONE, 2, 4, 0, 0, 0},
+       {AADD, C_MOVCON, C_RSP, C_NONE, C_RSP, 62, 8, 0, 0, 0},
+       {AADD, C_MOVCON, C_NONE, C_NONE, C_RSP, 62, 8, 0, 0, 0},
+       {ACMP, C_MOVCON, C_RSP, C_NONE, C_NONE, 62, 8, 0, 0, 0},
+       {AADD, C_BITCON, C_RSP, C_NONE, C_RSP, 62, 8, 0, 0, 0},
+       {AADD, C_BITCON, C_NONE, C_NONE, C_RSP, 62, 8, 0, 0, 0},
+       {ACMP, C_BITCON, C_RSP, C_NONE, C_NONE, 62, 8, 0, 0, 0},
+       {AADD, C_VCON, C_RSP, C_NONE, C_RSP, 13, 8, 0, LFROM, 0},
+       {AADD, C_VCON, C_NONE, C_NONE, C_RSP, 13, 8, 0, LFROM, 0},
+       {ACMP, C_VCON, C_REG, C_NONE, C_NONE, 13, 8, 0, LFROM, 0},
+       {AADD, C_SHIFT, C_REG, C_NONE, C_REG, 3, 4, 0, 0, 0},
+       {AADD, C_SHIFT, C_NONE, C_NONE, C_REG, 3, 4, 0, 0, 0},
+       {AMVN, C_SHIFT, C_NONE, C_NONE, C_REG, 3, 4, 0, 0, 0},
+       {ACMP, C_SHIFT, C_REG, C_NONE, C_NONE, 3, 4, 0, 0, 0},
+       {ANEG, C_SHIFT, C_NONE, C_NONE, C_REG, 26, 4, 0, 0, 0},
+       {AADD, C_REG, C_RSP, C_NONE, C_RSP, 27, 4, 0, 0, 0},
+       {AADD, C_REG, C_NONE, C_NONE, C_RSP, 27, 4, 0, 0, 0},
+       {ACMP, C_REG, C_RSP, C_NONE, C_NONE, 27, 4, 0, 0, 0},
+       {AADD, C_EXTREG, C_RSP, C_NONE, C_RSP, 27, 4, 0, 0, 0},
+       {AADD, C_EXTREG, C_NONE, C_NONE, C_RSP, 27, 4, 0, 0, 0},
+       {AMVN, C_EXTREG, C_NONE, C_NONE, C_RSP, 27, 4, 0, 0, 0},
+       {ACMP, C_EXTREG, C_RSP, C_NONE, C_NONE, 27, 4, 0, 0, 0},
+       {AADD, C_REG, C_REG, C_NONE, C_REG, 1, 4, 0, 0, 0},
+       {AADD, C_REG, C_NONE, C_NONE, C_REG, 1, 4, 0, 0, 0},
+       {AMUL, C_REG, C_REG, C_NONE, C_REG, 15, 4, 0, 0, 0},
+       {AMUL, C_REG, C_NONE, C_NONE, C_REG, 15, 4, 0, 0, 0},
+       {AMADD, C_REG, C_REG, C_REG, C_REG, 15, 4, 0, 0, 0},
+       {AREM, C_REG, C_REG, C_NONE, C_REG, 16, 8, 0, 0, 0},
+       {AREM, C_REG, C_NONE, C_NONE, C_REG, 16, 8, 0, 0, 0},
+       {ASDIV, C_REG, C_NONE, C_NONE, C_REG, 1, 4, 0, 0, 0},
+       {ASDIV, C_REG, C_REG, C_NONE, C_REG, 1, 4, 0, 0, 0},
+
+       {AFADDS, C_FREG, C_NONE, C_NONE, C_FREG, 54, 4, 0, 0, 0},
+       {AFADDS, C_FREG, C_FREG, C_NONE, C_FREG, 54, 4, 0, 0, 0},
+       {AFADDS, C_FCON, C_NONE, C_NONE, C_FREG, 54, 4, 0, 0, 0},
+       {AFADDS, C_FCON, C_FREG, C_NONE, C_FREG, 54, 4, 0, 0, 0},
+       {AFMSUBD, C_FREG, C_FREG, C_FREG, C_FREG, 15, 4, 0, 0, 0},
+       {AFCMPS, C_FREG, C_FREG, C_NONE, C_NONE, 56, 4, 0, 0, 0},
+       {AFCMPS, C_FCON, C_FREG, C_NONE, C_NONE, 56, 4, 0, 0, 0},
+       {AVADDP, C_ARNG, C_ARNG, C_NONE, C_ARNG, 72, 4, 0, 0, 0},
+       {AVADD, C_ARNG, C_ARNG, C_NONE, C_ARNG, 72, 4, 0, 0, 0},
+       {AVADD, C_VREG, C_VREG, C_NONE, C_VREG, 89, 4, 0, 0, 0},
+       {AVADD, C_VREG, C_NONE, C_NONE, C_VREG, 89, 4, 0, 0, 0},
+       {AVADDV, C_ARNG, C_NONE, C_NONE, C_VREG, 85, 4, 0, 0, 0},
 
        /* logical operations */
-       {AAND, C_REG, C_REG, C_REG, 1, 4, 0, 0, 0},
-       {AAND, C_REG, C_NONE, C_REG, 1, 4, 0, 0, 0},
-       {AANDS, C_REG, C_REG, C_REG, 1, 4, 0, 0, 0},
-       {AANDS, C_REG, C_NONE, C_REG, 1, 4, 0, 0, 0},
-       {ATST, C_REG, C_REG, C_NONE, 1, 4, 0, 0, 0},
-       {AAND, C_MBCON, C_REG, C_RSP, 53, 4, 0, 0, 0},
-       {AAND, C_MBCON, C_NONE, C_REG, 53, 4, 0, 0, 0},
-       {AANDS, C_MBCON, C_REG, C_REG, 53, 4, 0, 0, 0},
-       {AANDS, C_MBCON, C_NONE, C_REG, 53, 4, 0, 0, 0},
-       {ATST, C_MBCON, C_REG, C_NONE, 53, 4, 0, 0, 0},
-       {AAND, C_BITCON, C_REG, C_RSP, 53, 4, 0, 0, 0},
-       {AAND, C_BITCON, C_NONE, C_REG, 53, 4, 0, 0, 0},
-       {AANDS, C_BITCON, C_REG, C_REG, 53, 4, 0, 0, 0},
-       {AANDS, C_BITCON, C_NONE, C_REG, 53, 4, 0, 0, 0},
-       {ATST, C_BITCON, C_REG, C_NONE, 53, 4, 0, 0, 0},
-       {AAND, C_MOVCON, C_REG, C_RSP, 62, 8, 0, 0, 0},
-       {AAND, C_MOVCON, C_NONE, C_REG, 62, 8, 0, 0, 0},
-       {AANDS, C_MOVCON, C_REG, C_REG, 62, 8, 0, 0, 0},
-       {AANDS, C_MOVCON, C_NONE, C_REG, 62, 8, 0, 0, 0},
-       {ATST, C_MOVCON, C_REG, C_NONE, 62, 8, 0, 0, 0},
-       {AAND, C_VCON, C_REG, C_RSP, 28, 8, 0, LFROM, 0},
-       {AAND, C_VCON, C_NONE, C_REG, 28, 8, 0, LFROM, 0},
-       {AANDS, C_VCON, C_REG, C_REG, 28, 8, 0, LFROM, 0},
-       {AANDS, C_VCON, C_NONE, C_REG, 28, 8, 0, LFROM, 0},
-       {ATST, C_VCON, C_REG, C_NONE, 28, 8, 0, LFROM, 0},
-       {AAND, C_SHIFT, C_REG, C_REG, 3, 4, 0, 0, 0},
-       {AAND, C_SHIFT, C_NONE, C_REG, 3, 4, 0, 0, 0},
-       {AANDS, C_SHIFT, C_REG, C_REG, 3, 4, 0, 0, 0},
-       {AANDS, C_SHIFT, C_NONE, C_REG, 3, 4, 0, 0, 0},
-       {ATST, C_SHIFT, C_REG, C_NONE, 3, 4, 0, 0, 0},
-       {AMOVD, C_RSP, C_NONE, C_RSP, 24, 4, 0, 0, 0},
-       {AMVN, C_REG, C_NONE, C_REG, 24, 4, 0, 0, 0},
-       {AMOVB, C_REG, C_NONE, C_REG, 45, 4, 0, 0, 0},
-       {AMOVBU, C_REG, C_NONE, C_REG, 45, 4, 0, 0, 0},
-       {AMOVH, C_REG, C_NONE, C_REG, 45, 4, 0, 0, 0}, /* also MOVHU */
-       {AMOVW, C_REG, C_NONE, C_REG, 45, 4, 0, 0, 0}, /* also MOVWU */
+       {AAND, C_REG, C_REG, C_NONE, C_REG, 1, 4, 0, 0, 0},
+       {AAND, C_REG, C_NONE, C_NONE, C_REG, 1, 4, 0, 0, 0},
+       {AANDS, C_REG, C_REG, C_NONE, C_REG, 1, 4, 0, 0, 0},
+       {AANDS, C_REG, C_NONE, C_NONE, C_REG, 1, 4, 0, 0, 0},
+       {ATST, C_REG, C_REG, C_NONE, C_NONE, 1, 4, 0, 0, 0},
+       {AAND, C_MBCON, C_REG, C_NONE, C_RSP, 53, 4, 0, 0, 0},
+       {AAND, C_MBCON, C_NONE, C_NONE, C_REG, 53, 4, 0, 0, 0},
+       {AANDS, C_MBCON, C_REG, C_NONE, C_REG, 53, 4, 0, 0, 0},
+       {AANDS, C_MBCON, C_NONE, C_NONE, C_REG, 53, 4, 0, 0, 0},
+       {ATST, C_MBCON, C_REG, C_NONE, C_NONE, 53, 4, 0, 0, 0},
+       {AAND, C_BITCON, C_REG, C_NONE, C_RSP, 53, 4, 0, 0, 0},
+       {AAND, C_BITCON, C_NONE, C_NONE, C_REG, 53, 4, 0, 0, 0},
+       {AANDS, C_BITCON, C_REG, C_NONE, C_REG, 53, 4, 0, 0, 0},
+       {AANDS, C_BITCON, C_NONE, C_NONE, C_REG, 53, 4, 0, 0, 0},
+       {ATST, C_BITCON, C_REG, C_NONE, C_NONE, 53, 4, 0, 0, 0},
+       {AAND, C_MOVCON, C_REG, C_NONE, C_RSP, 62, 8, 0, 0, 0},
+       {AAND, C_MOVCON, C_NONE, C_NONE, C_REG, 62, 8, 0, 0, 0},
+       {AANDS, C_MOVCON, C_REG, C_NONE, C_REG, 62, 8, 0, 0, 0},
+       {AANDS, C_MOVCON, C_NONE, C_NONE, C_REG, 62, 8, 0, 0, 0},
+       {ATST, C_MOVCON, C_REG, C_NONE, C_NONE, 62, 8, 0, 0, 0},
+       {AAND, C_VCON, C_REG, C_NONE, C_RSP, 28, 8, 0, LFROM, 0},
+       {AAND, C_VCON, C_NONE, C_NONE, C_REG, 28, 8, 0, LFROM, 0},
+       {AANDS, C_VCON, C_REG, C_NONE, C_REG, 28, 8, 0, LFROM, 0},
+       {AANDS, C_VCON, C_NONE, C_NONE, C_REG, 28, 8, 0, LFROM, 0},
+       {ATST, C_VCON, C_REG, C_NONE, C_NONE, 28, 8, 0, LFROM, 0},
+       {AAND, C_SHIFT, C_REG, C_NONE, C_REG, 3, 4, 0, 0, 0},
+       {AAND, C_SHIFT, C_NONE, C_NONE, C_REG, 3, 4, 0, 0, 0},
+       {AANDS, C_SHIFT, C_REG, C_NONE, C_REG, 3, 4, 0, 0, 0},
+       {AANDS, C_SHIFT, C_NONE, C_NONE, C_REG, 3, 4, 0, 0, 0},
+       {ATST, C_SHIFT, C_REG, C_NONE, C_NONE, 3, 4, 0, 0, 0},
+       {AMOVD, C_RSP, C_NONE, C_NONE, C_RSP, 24, 4, 0, 0, 0},
+       {AMVN, C_REG, C_NONE, C_NONE, C_REG, 24, 4, 0, 0, 0},
+       {AMOVB, C_REG, C_NONE, C_NONE, C_REG, 45, 4, 0, 0, 0},
+       {AMOVBU, C_REG, C_NONE, C_NONE, C_REG, 45, 4, 0, 0, 0},
+       {AMOVH, C_REG, C_NONE, C_NONE, C_REG, 45, 4, 0, 0, 0}, /* also MOVHU */
+       {AMOVW, C_REG, C_NONE, C_NONE, C_REG, 45, 4, 0, 0, 0}, /* also MOVWU */
        /* TODO: MVN C_SHIFT */
 
        /* MOVs that become MOVK/MOVN/MOVZ/ADD/SUB/OR */
-       {AMOVW, C_MOVCON, C_NONE, C_REG, 32, 4, 0, 0, 0},
-       {AMOVD, C_MOVCON, C_NONE, C_REG, 32, 4, 0, 0, 0},
+       {AMOVW, C_MOVCON, C_NONE, C_NONE, C_REG, 32, 4, 0, 0, 0},
+       {AMOVD, C_MOVCON, C_NONE, C_NONE, C_REG, 32, 4, 0, 0, 0},
 
        // TODO: these don't work properly.
        // { AMOVW,             C_ADDCON,       C_NONE, C_REG,          2, 4, 0 , 0},
        // { AMOVD,             C_ADDCON,       C_NONE, C_REG,          2, 4, 0 , 0},
-       {AMOVW, C_BITCON, C_NONE, C_REG, 32, 4, 0, 0, 0},
-       {AMOVD, C_BITCON, C_NONE, C_REG, 32, 4, 0, 0, 0},
-
-       {AMOVK, C_VCON, C_NONE, C_REG, 33, 4, 0, 0, 0},
-       {AMOVD, C_AACON, C_NONE, C_REG, 4, 4, REGFROM, 0, 0},
-
-       {AB, C_NONE, C_NONE, C_SBRA, 5, 4, 0, 0, 0},
-       {ABL, C_NONE, C_NONE, C_SBRA, 5, 4, 0, 0, 0},
-       {AB, C_NONE, C_NONE, C_ZOREG, 6, 4, 0, 0, 0},
-       {ABL, C_NONE, C_NONE, C_REG, 6, 4, 0, 0, 0},
-       {ABL, C_REG, C_NONE, C_REG, 6, 4, 0, 0, 0},
-       {ABL, C_NONE, C_NONE, C_ZOREG, 6, 4, 0, 0, 0},
-       {obj.ARET, C_NONE, C_NONE, C_REG, 6, 4, 0, 0, 0},
-       {obj.ARET, C_NONE, C_NONE, C_ZOREG, 6, 4, 0, 0, 0},
-       {AADRP, C_SBRA, C_NONE, C_REG, 60, 4, 0, 0, 0},
-       {AADR, C_SBRA, C_NONE, C_REG, 61, 4, 0, 0, 0},
-       {ACBZ, C_REG, C_NONE, C_SBRA, 39, 4, 0, 0, 0},
-       {ATBZ, C_VCON, C_REG, C_SBRA, 40, 4, 0, 0, 0},
-
-       {AERET, C_NONE, C_NONE, C_NONE, 41, 4, 0, 0, 0},
-       {ACLREX, C_NONE, C_NONE, C_VCON, 38, 4, 0, 0, 0},
-       {ACLREX, C_NONE, C_NONE, C_NONE, 38, 4, 0, 0, 0},
-       {ABFM, C_VCON, C_REG, C_REG, 42, 4, 0, 0, 0},
-       {ABFI, C_VCON, C_REG, C_REG, 43, 4, 0, 0, 0},
-       {AEXTR, C_VCON, C_REG, C_REG, 44, 4, 0, 0, 0},
-       {ASXTB, C_REG, C_NONE, C_REG, 45, 4, 0, 0, 0},
-       {ACLS, C_REG, C_NONE, C_REG, 46, 4, 0, 0, 0},
-       {ABEQ, C_NONE, C_NONE, C_SBRA, 7, 4, 0, 0, 0},
-       {ALSL, C_VCON, C_REG, C_REG, 8, 4, 0, 0, 0},
-       {ALSL, C_VCON, C_NONE, C_REG, 8, 4, 0, 0, 0},
-       {ALSL, C_REG, C_NONE, C_REG, 9, 4, 0, 0, 0},
-       {ALSL, C_REG, C_REG, C_REG, 9, 4, 0, 0, 0},
-       {ASVC, C_VCON, C_NONE, C_NONE, 10, 4, 0, 0, 0},
-       {ASVC, C_NONE, C_NONE, C_NONE, 10, 4, 0, 0, 0},
-       {ADWORD, C_NONE, C_NONE, C_VCON, 11, 8, 0, 0, 0},
-       {ADWORD, C_NONE, C_NONE, C_LEXT, 11, 8, 0, 0, 0},
-       {ADWORD, C_NONE, C_NONE, C_ADDR, 11, 8, 0, 0, 0},
-       {ADWORD, C_NONE, C_NONE, C_LACON, 11, 8, 0, 0, 0},
-       {AWORD, C_NONE, C_NONE, C_LCON, 14, 4, 0, 0, 0},
-       {AWORD, C_NONE, C_NONE, C_LEXT, 14, 4, 0, 0, 0},
-       {AWORD, C_NONE, C_NONE, C_ADDR, 14, 4, 0, 0, 0},
-       {AMOVW, C_VCON, C_NONE, C_REG, 12, 4, 0, LFROM, 0},
-       {AMOVW, C_VCONADDR, C_NONE, C_REG, 68, 8, 0, 0, 0},
-       {AMOVD, C_VCON, C_NONE, C_REG, 12, 4, 0, LFROM, 0},
-       {AMOVD, C_VCONADDR, C_NONE, C_REG, 68, 8, 0, 0, 0},
-       {AMOVB, C_REG, C_NONE, C_ADDR, 64, 12, 0, 0, 0},
-       {AMOVBU, C_REG, C_NONE, C_ADDR, 64, 12, 0, 0, 0},
-       {AMOVH, C_REG, C_NONE, C_ADDR, 64, 12, 0, 0, 0},
-       {AMOVW, C_REG, C_NONE, C_ADDR, 64, 12, 0, 0, 0},
-       {AMOVD, C_REG, C_NONE, C_ADDR, 64, 12, 0, 0, 0},
-       {AMOVB, C_ADDR, C_NONE, C_REG, 65, 12, 0, 0, 0},
-       {AMOVBU, C_ADDR, C_NONE, C_REG, 65, 12, 0, 0, 0},
-       {AMOVH, C_ADDR, C_NONE, C_REG, 65, 12, 0, 0, 0},
-       {AMOVW, C_ADDR, C_NONE, C_REG, 65, 12, 0, 0, 0},
-       {AMOVD, C_ADDR, C_NONE, C_REG, 65, 12, 0, 0, 0},
-       {AMOVD, C_GOTADDR, C_NONE, C_REG, 71, 8, 0, 0, 0},
-       {AMOVD, C_TLS_LE, C_NONE, C_REG, 69, 4, 0, 0, 0},
-       {AMOVD, C_TLS_IE, C_NONE, C_REG, 70, 8, 0, 0, 0},
-
-       {AFMOVS, C_FREG, C_NONE, C_ADDR, 64, 12, 0, 0, 0},
-       {AFMOVS, C_ADDR, C_NONE, C_FREG, 65, 12, 0, 0, 0},
-       {AFMOVD, C_FREG, C_NONE, C_ADDR, 64, 12, 0, 0, 0},
-       {AFMOVD, C_ADDR, C_NONE, C_FREG, 65, 12, 0, 0, 0},
-       {AFMOVS, C_FCON, C_NONE, C_FREG, 54, 4, 0, 0, 0},
-       {AFMOVS, C_FREG, C_NONE, C_FREG, 54, 4, 0, 0, 0},
-       {AFMOVD, C_FCON, C_NONE, C_FREG, 54, 4, 0, 0, 0},
-       {AFMOVD, C_FREG, C_NONE, C_FREG, 54, 4, 0, 0, 0},
-       {AFMOVS, C_REG, C_NONE, C_FREG, 29, 4, 0, 0, 0},
-       {AFMOVS, C_FREG, C_NONE, C_REG, 29, 4, 0, 0, 0},
-       {AFMOVD, C_REG, C_NONE, C_FREG, 29, 4, 0, 0, 0},
-       {AFMOVD, C_FREG, C_NONE, C_REG, 29, 4, 0, 0, 0},
-       {AFCVTZSD, C_FREG, C_NONE, C_REG, 29, 4, 0, 0, 0},
-       {ASCVTFD, C_REG, C_NONE, C_FREG, 29, 4, 0, 0, 0},
-       {AFCVTSD, C_FREG, C_NONE, C_FREG, 29, 4, 0, 0, 0},
-       {AVCNT, C_ARNG, C_NONE, C_ARNG, 29, 4, 0, 0, 0},
-       {AVMOV, C_ELEM, C_NONE, C_REG, 73, 4, 0, 0, 0},
-       {AVMOV, C_ELEM, C_NONE, C_ELEM, 92, 4, 0, 0, 0},
-       {AVMOV, C_ELEM, C_NONE, C_VREG, 80, 4, 0, 0, 0},
-       {AVMOV, C_REG, C_NONE, C_ARNG, 82, 4, 0, 0, 0},
-       {AVMOV, C_REG, C_NONE, C_ELEM, 78, 4, 0, 0, 0},
-       {AVMOV, C_ARNG, C_NONE, C_ARNG, 83, 4, 0, 0, 0},
-       {AVDUP, C_ELEM, C_NONE, C_ARNG, 79, 4, 0, 0, 0},
-       {AVMOVI, C_ADDCON, C_NONE, C_ARNG, 86, 4, 0, 0, 0},
-       {AVFMLA, C_ARNG, C_ARNG, C_ARNG, 72, 4, 0, 0, 0},
-       {AVEXT, C_VCON, C_ARNG, C_ARNG, 94, 4, 0, 0, 0},
-       {AVTBL, C_ARNG, C_NONE, C_ARNG, 100, 4, 0, 0, 0},
-       {AVUSHR, C_VCON, C_ARNG, C_ARNG, 95, 4, 0, 0, 0},
-       {AVZIP1, C_ARNG, C_ARNG, C_ARNG, 72, 4, 0, 0, 0},
+       {AMOVW, C_BITCON, C_NONE, C_NONE, C_REG, 32, 4, 0, 0, 0},
+       {AMOVD, C_BITCON, C_NONE, C_NONE, C_REG, 32, 4, 0, 0, 0},
+
+       {AMOVK, C_VCON, C_NONE, C_NONE, C_REG, 33, 4, 0, 0, 0},
+       {AMOVD, C_AACON, C_NONE, C_NONE, C_REG, 4, 4, REGFROM, 0, 0},
+
+       /* jump operations */
+       {AB, C_NONE, C_NONE, C_NONE, C_SBRA, 5, 4, 0, 0, 0},
+       {ABL, C_NONE, C_NONE, C_NONE, C_SBRA, 5, 4, 0, 0, 0},
+       {AB, C_NONE, C_NONE, C_NONE, C_ZOREG, 6, 4, 0, 0, 0},
+       {ABL, C_NONE, C_NONE, C_NONE, C_REG, 6, 4, 0, 0, 0},
+       {ABL, C_REG, C_NONE, C_NONE, C_REG, 6, 4, 0, 0, 0},
+       {ABL, C_NONE, C_NONE, C_NONE, C_ZOREG, 6, 4, 0, 0, 0},
+       {obj.ARET, C_NONE, C_NONE, C_NONE, C_REG, 6, 4, 0, 0, 0},
+       {obj.ARET, C_NONE, C_NONE, C_NONE, C_ZOREG, 6, 4, 0, 0, 0},
+       {ABEQ, C_NONE, C_NONE, C_NONE, C_SBRA, 7, 4, 0, 0, 0},
+       {AADRP, C_SBRA, C_NONE, C_NONE, C_REG, 60, 4, 0, 0, 0},
+       {AADR, C_SBRA, C_NONE, C_NONE, C_REG, 61, 4, 0, 0, 0},
+       {ACBZ, C_REG, C_NONE, C_NONE, C_SBRA, 39, 4, 0, 0, 0},
+       {ATBZ, C_VCON, C_REG, C_NONE, C_SBRA, 40, 4, 0, 0, 0},
+       {AERET, C_NONE, C_NONE, C_NONE, C_NONE, 41, 4, 0, 0, 0},
+
+       {ACLREX, C_NONE, C_NONE, C_NONE, C_VCON, 38, 4, 0, 0, 0},
+       {ACLREX, C_NONE, C_NONE, C_NONE, C_NONE, 38, 4, 0, 0, 0},
+       {ABFM, C_VCON, C_REG, C_VCON, C_REG, 42, 4, 0, 0, 0},
+       {ABFI, C_VCON, C_REG, C_VCON, C_REG, 43, 4, 0, 0, 0},
+       {AEXTR, C_VCON, C_REG, C_REG, C_REG, 44, 4, 0, 0, 0},
+       {ASXTB, C_REG, C_NONE, C_NONE, C_REG, 45, 4, 0, 0, 0},
+       {ACLS, C_REG, C_NONE, C_NONE, C_REG, 46, 4, 0, 0, 0},
+       {ALSL, C_VCON, C_REG, C_NONE, C_REG, 8, 4, 0, 0, 0},
+       {ALSL, C_VCON, C_NONE, C_NONE, C_REG, 8, 4, 0, 0, 0},
+       {ALSL, C_REG, C_NONE, C_NONE, C_REG, 9, 4, 0, 0, 0},
+       {ALSL, C_REG, C_REG, C_NONE, C_REG, 9, 4, 0, 0, 0},
+       {ASVC, C_VCON, C_NONE, C_NONE, C_NONE, 10, 4, 0, 0, 0},
+       {ASVC, C_NONE, C_NONE, C_NONE, C_NONE, 10, 4, 0, 0, 0},
+       {ADWORD, C_NONE, C_NONE, C_NONE, C_VCON, 11, 8, 0, 0, 0},
+       {ADWORD, C_NONE, C_NONE, C_NONE, C_LEXT, 11, 8, 0, 0, 0},
+       {ADWORD, C_NONE, C_NONE, C_NONE, C_ADDR, 11, 8, 0, 0, 0},
+       {ADWORD, C_NONE, C_NONE, C_NONE, C_LACON, 11, 8, 0, 0, 0},
+       {AWORD, C_NONE, C_NONE, C_NONE, C_LCON, 14, 4, 0, 0, 0},
+       {AWORD, C_NONE, C_NONE, C_NONE, C_LEXT, 14, 4, 0, 0, 0},
+       {AWORD, C_NONE, C_NONE, C_NONE, C_ADDR, 14, 4, 0, 0, 0},
+       {AMOVW, C_VCON, C_NONE, C_NONE, C_REG, 12, 4, 0, LFROM, 0},
+       {AMOVW, C_VCONADDR, C_NONE, C_NONE, C_REG, 68, 8, 0, 0, 0},
+       {AMOVD, C_VCON, C_NONE, C_NONE, C_REG, 12, 4, 0, LFROM, 0},
+       {AMOVD, C_VCONADDR, C_NONE, C_NONE, C_REG, 68, 8, 0, 0, 0},
+       {AMOVB, C_REG, C_NONE, C_NONE, C_ADDR, 64, 12, 0, 0, 0},
+       {AMOVBU, C_REG, C_NONE, C_NONE, C_ADDR, 64, 12, 0, 0, 0},
+       {AMOVH, C_REG, C_NONE, C_NONE, C_ADDR, 64, 12, 0, 0, 0},
+       {AMOVW, C_REG, C_NONE, C_NONE, C_ADDR, 64, 12, 0, 0, 0},
+       {AMOVD, C_REG, C_NONE, C_NONE, C_ADDR, 64, 12, 0, 0, 0},
+       {AMOVB, C_ADDR, C_NONE, C_NONE, C_REG, 65, 12, 0, 0, 0},
+       {AMOVBU, C_ADDR, C_NONE, C_NONE, C_REG, 65, 12, 0, 0, 0},
+       {AMOVH, C_ADDR, C_NONE, C_NONE, C_REG, 65, 12, 0, 0, 0},
+       {AMOVW, C_ADDR, C_NONE, C_NONE, C_REG, 65, 12, 0, 0, 0},
+       {AMOVD, C_ADDR, C_NONE, C_NONE, C_REG, 65, 12, 0, 0, 0},
+       {AMOVD, C_GOTADDR, C_NONE, C_NONE, C_REG, 71, 8, 0, 0, 0},
+       {AMOVD, C_TLS_LE, C_NONE, C_NONE, C_REG, 69, 4, 0, 0, 0},
+       {AMOVD, C_TLS_IE, C_NONE, C_NONE, C_REG, 70, 8, 0, 0, 0},
+
+       {AFMOVS, C_FREG, C_NONE, C_NONE, C_ADDR, 64, 12, 0, 0, 0},
+       {AFMOVS, C_ADDR, C_NONE, C_NONE, C_FREG, 65, 12, 0, 0, 0},
+       {AFMOVD, C_FREG, C_NONE, C_NONE, C_ADDR, 64, 12, 0, 0, 0},
+       {AFMOVD, C_ADDR, C_NONE, C_NONE, C_FREG, 65, 12, 0, 0, 0},
+       {AFMOVS, C_FCON, C_NONE, C_NONE, C_FREG, 54, 4, 0, 0, 0},
+       {AFMOVS, C_FREG, C_NONE, C_NONE, C_FREG, 54, 4, 0, 0, 0},
+       {AFMOVD, C_FCON, C_NONE, C_NONE, C_FREG, 54, 4, 0, 0, 0},
+       {AFMOVD, C_FREG, C_NONE, C_NONE, C_FREG, 54, 4, 0, 0, 0},
+       {AFMOVS, C_REG, C_NONE, C_NONE, C_FREG, 29, 4, 0, 0, 0},
+       {AFMOVS, C_FREG, C_NONE, C_NONE, C_REG, 29, 4, 0, 0, 0},
+       {AFMOVD, C_REG, C_NONE, C_NONE, C_FREG, 29, 4, 0, 0, 0},
+       {AFMOVD, C_FREG, C_NONE, C_NONE, C_REG, 29, 4, 0, 0, 0},
+       {AFCVTZSD, C_FREG, C_NONE, C_NONE, C_REG, 29, 4, 0, 0, 0},
+       {ASCVTFD, C_REG, C_NONE, C_NONE, C_FREG, 29, 4, 0, 0, 0},
+       {AFCVTSD, C_FREG, C_NONE, C_NONE, C_FREG, 29, 4, 0, 0, 0},
+       {AVCNT, C_ARNG, C_NONE, C_NONE, C_ARNG, 29, 4, 0, 0, 0},
+       {AVMOV, C_ELEM, C_NONE, C_NONE, C_REG, 73, 4, 0, 0, 0},
+       {AVMOV, C_ELEM, C_NONE, C_NONE, C_ELEM, 92, 4, 0, 0, 0},
+       {AVMOV, C_ELEM, C_NONE, C_NONE, C_VREG, 80, 4, 0, 0, 0},
+       {AVMOV, C_REG, C_NONE, C_NONE, C_ARNG, 82, 4, 0, 0, 0},
+       {AVMOV, C_REG, C_NONE, C_NONE, C_ELEM, 78, 4, 0, 0, 0},
+       {AVMOV, C_ARNG, C_NONE, C_NONE, C_ARNG, 83, 4, 0, 0, 0},
+       {AVDUP, C_ELEM, C_NONE, C_NONE, C_ARNG, 79, 4, 0, 0, 0},
+       {AVMOVI, C_ADDCON, C_NONE, C_NONE, C_ARNG, 86, 4, 0, 0, 0},
+       {AVFMLA, C_ARNG, C_ARNG, C_NONE, C_ARNG, 72, 4, 0, 0, 0},
+       {AVEXT, C_VCON, C_ARNG, C_ARNG, C_ARNG, 94, 4, 0, 0, 0},
+       {AVTBL, C_ARNG, C_NONE, C_LIST, C_ARNG, 100, 4, 0, 0, 0},
+       {AVUSHR, C_VCON, C_ARNG, C_NONE, C_ARNG, 95, 4, 0, 0, 0},
+       {AVZIP1, C_ARNG, C_ARNG, C_NONE, C_ARNG, 72, 4, 0, 0, 0},
 
        /* conditional operations */
-       {ACSEL, C_COND, C_REG, C_REG, 18, 4, 0, 0, 0}, /* from3 optional */
-       {ACSET, C_COND, C_NONE, C_REG, 18, 4, 0, 0, 0},
-       {AFCSELD, C_COND, C_FREG, C_FREG, 18, 4, 0, 0, 0},
-       {ACCMN, C_COND, C_REG, C_VCON, 19, 4, 0, 0, 0}, /* from3 either C_REG or C_VCON */
-       {AFCCMPS, C_COND, C_FREG, C_VCON, 57, 4, 0, 0, 0},
+       {ACSEL, C_COND, C_REG, C_REG, C_REG, 18, 4, 0, 0, 0},
+       {ACINC, C_COND, C_REG, C_NONE, C_REG, 18, 4, 0, 0, 0},
+       {ACSET, C_COND, C_NONE, C_NONE, C_REG, 18, 4, 0, 0, 0},
+       {AFCSELD, C_COND, C_FREG, C_FREG, C_FREG, 18, 4, 0, 0, 0},
+       {ACCMN, C_COND, C_REG, C_REG, C_VCON, 19, 4, 0, 0, 0},
+       {ACCMN, C_COND, C_REG, C_VCON, C_VCON, 19, 4, 0, 0, 0},
+       {AFCCMPS, C_COND, C_FREG, C_FREG, C_VCON, 57, 4, 0, 0, 0},
 
        /* scaled 12-bit unsigned displacement store */
-       {AMOVB, C_REG, C_NONE, C_UAUTO4K, 20, 4, REGSP, 0, 0},
-       {AMOVB, C_REG, C_NONE, C_UOREG4K, 20, 4, 0, 0, 0},
-       {AMOVBU, C_REG, C_NONE, C_UAUTO4K, 20, 4, REGSP, 0, 0},
-       {AMOVBU, C_REG, C_NONE, C_UOREG4K, 20, 4, 0, 0, 0},
-       {AMOVH, C_REG, C_NONE, C_UAUTO8K, 20, 4, REGSP, 0, 0},
-       {AMOVH, C_REG, C_NONE, C_UOREG8K, 20, 4, 0, 0, 0},
-       {AMOVW, C_REG, C_NONE, C_UAUTO16K, 20, 4, REGSP, 0, 0},
-       {AMOVW, C_REG, C_NONE, C_UOREG16K, 20, 4, 0, 0, 0},
-       {AMOVD, C_REG, C_NONE, C_UAUTO32K, 20, 4, REGSP, 0, 0},
-       {AMOVD, C_REG, C_NONE, C_UOREG32K, 20, 4, 0, 0, 0},
-
-       {AFMOVS, C_FREG, C_NONE, C_UAUTO16K, 20, 4, REGSP, 0, 0},
-       {AFMOVS, C_FREG, C_NONE, C_UOREG16K, 20, 4, 0, 0, 0},
-       {AFMOVD, C_FREG, C_NONE, C_UAUTO32K, 20, 4, REGSP, 0, 0},
-       {AFMOVD, C_FREG, C_NONE, C_UOREG32K, 20, 4, 0, 0, 0},
+       {AMOVB, C_REG, C_NONE, C_NONE, C_UAUTO4K, 20, 4, REGSP, 0, 0},
+       {AMOVB, C_REG, C_NONE, C_NONE, C_UOREG4K, 20, 4, 0, 0, 0},
+       {AMOVBU, C_REG, C_NONE, C_NONE, C_UAUTO4K, 20, 4, REGSP, 0, 0},
+       {AMOVBU, C_REG, C_NONE, C_NONE, C_UOREG4K, 20, 4, 0, 0, 0},
+       {AMOVH, C_REG, C_NONE, C_NONE, C_UAUTO8K, 20, 4, REGSP, 0, 0},
+       {AMOVH, C_REG, C_NONE, C_NONE, C_UOREG8K, 20, 4, 0, 0, 0},
+       {AMOVW, C_REG, C_NONE, C_NONE, C_UAUTO16K, 20, 4, REGSP, 0, 0},
+       {AMOVW, C_REG, C_NONE, C_NONE, C_UOREG16K, 20, 4, 0, 0, 0},
+       {AMOVD, C_REG, C_NONE, C_NONE, C_UAUTO32K, 20, 4, REGSP, 0, 0},
+       {AMOVD, C_REG, C_NONE, C_NONE, C_UOREG32K, 20, 4, 0, 0, 0},
+
+       {AFMOVS, C_FREG, C_NONE, C_NONE, C_UAUTO16K, 20, 4, REGSP, 0, 0},
+       {AFMOVS, C_FREG, C_NONE, C_NONE, C_UOREG16K, 20, 4, 0, 0, 0},
+       {AFMOVD, C_FREG, C_NONE, C_NONE, C_UAUTO32K, 20, 4, REGSP, 0, 0},
+       {AFMOVD, C_FREG, C_NONE, C_NONE, C_UOREG32K, 20, 4, 0, 0, 0},
 
        /* unscaled 9-bit signed displacement store */
-       {AMOVB, C_REG, C_NONE, C_NSAUTO, 20, 4, REGSP, 0, 0},
-       {AMOVB, C_REG, C_NONE, C_NSOREG, 20, 4, 0, 0, 0},
-       {AMOVBU, C_REG, C_NONE, C_NSAUTO, 20, 4, REGSP, 0, 0},
-       {AMOVBU, C_REG, C_NONE, C_NSOREG, 20, 4, 0, 0, 0},
-       {AMOVH, C_REG, C_NONE, C_NSAUTO, 20, 4, REGSP, 0, 0},
-       {AMOVH, C_REG, C_NONE, C_NSOREG, 20, 4, 0, 0, 0},
-       {AMOVW, C_REG, C_NONE, C_NSAUTO, 20, 4, REGSP, 0, 0},
-       {AMOVW, C_REG, C_NONE, C_NSOREG, 20, 4, 0, 0, 0},
-       {AMOVD, C_REG, C_NONE, C_NSOREG, 20, 4, 0, 0, 0},
-       {AMOVD, C_REG, C_NONE, C_NSAUTO, 20, 4, REGSP, 0, 0},
-
-       {AFMOVS, C_FREG, C_NONE, C_NSAUTO, 20, 4, REGSP, 0, 0},
-       {AFMOVS, C_FREG, C_NONE, C_NSOREG, 20, 4, 0, 0, 0},
-       {AFMOVD, C_FREG, C_NONE, C_NSAUTO, 20, 4, REGSP, 0, 0},
-       {AFMOVD, C_FREG, C_NONE, C_NSOREG, 20, 4, 0, 0, 0},
+       {AMOVB, C_REG, C_NONE, C_NONE, C_NSAUTO, 20, 4, REGSP, 0, 0},
+       {AMOVB, C_REG, C_NONE, C_NONE, C_NSOREG, 20, 4, 0, 0, 0},
+       {AMOVBU, C_REG, C_NONE, C_NONE, C_NSAUTO, 20, 4, REGSP, 0, 0},
+       {AMOVBU, C_REG, C_NONE, C_NONE, C_NSOREG, 20, 4, 0, 0, 0},
+       {AMOVH, C_REG, C_NONE, C_NONE, C_NSAUTO, 20, 4, REGSP, 0, 0},
+       {AMOVH, C_REG, C_NONE, C_NONE, C_NSOREG, 20, 4, 0, 0, 0},
+       {AMOVW, C_REG, C_NONE, C_NONE, C_NSAUTO, 20, 4, REGSP, 0, 0},
+       {AMOVW, C_REG, C_NONE, C_NONE, C_NSOREG, 20, 4, 0, 0, 0},
+       {AMOVD, C_REG, C_NONE, C_NONE, C_NSOREG, 20, 4, 0, 0, 0},
+       {AMOVD, C_REG, C_NONE, C_NONE, C_NSAUTO, 20, 4, REGSP, 0, 0},
+
+       {AFMOVS, C_FREG, C_NONE, C_NONE, C_NSAUTO, 20, 4, REGSP, 0, 0},
+       {AFMOVS, C_FREG, C_NONE, C_NONE, C_NSOREG, 20, 4, 0, 0, 0},
+       {AFMOVD, C_FREG, C_NONE, C_NONE, C_NSAUTO, 20, 4, REGSP, 0, 0},
+       {AFMOVD, C_FREG, C_NONE, C_NONE, C_NSOREG, 20, 4, 0, 0, 0},
 
        /* scaled 12-bit unsigned displacement load */
-       {AMOVB, C_UAUTO4K, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
-       {AMOVB, C_UOREG4K, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
-       {AMOVBU, C_UAUTO4K, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
-       {AMOVBU, C_UOREG4K, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
-       {AMOVH, C_UAUTO8K, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
-       {AMOVH, C_UOREG8K, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
-       {AMOVW, C_UAUTO16K, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
-       {AMOVW, C_UOREG16K, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
-       {AMOVD, C_UAUTO32K, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
-       {AMOVD, C_UOREG32K, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
-
-       {AFMOVS, C_UAUTO16K, C_NONE, C_FREG, 21, 4, REGSP, 0, 0},
-       {AFMOVS, C_UOREG16K, C_NONE, C_FREG, 21, 4, 0, 0, 0},
-       {AFMOVD, C_UAUTO32K, C_NONE, C_FREG, 21, 4, REGSP, 0, 0},
-       {AFMOVD, C_UOREG32K, C_NONE, C_FREG, 21, 4, 0, 0, 0},
+       {AMOVB, C_UAUTO4K, C_NONE, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
+       {AMOVB, C_UOREG4K, C_NONE, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
+       {AMOVBU, C_UAUTO4K, C_NONE, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
+       {AMOVBU, C_UOREG4K, C_NONE, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
+       {AMOVH, C_UAUTO8K, C_NONE, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
+       {AMOVH, C_UOREG8K, C_NONE, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
+       {AMOVW, C_UAUTO16K, C_NONE, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
+       {AMOVW, C_UOREG16K, C_NONE, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
+       {AMOVD, C_UAUTO32K, C_NONE, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
+       {AMOVD, C_UOREG32K, C_NONE, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
+
+       {AFMOVS, C_UAUTO16K, C_NONE, C_NONE, C_FREG, 21, 4, REGSP, 0, 0},
+       {AFMOVS, C_UOREG16K, C_NONE, C_NONE, C_FREG, 21, 4, 0, 0, 0},
+       {AFMOVD, C_UAUTO32K, C_NONE, C_NONE, C_FREG, 21, 4, REGSP, 0, 0},
+       {AFMOVD, C_UOREG32K, C_NONE, C_NONE, C_FREG, 21, 4, 0, 0, 0},
 
        /* unscaled 9-bit signed displacement load */
-       {AMOVB, C_NSAUTO, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
-       {AMOVB, C_NSOREG, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
-       {AMOVBU, C_NSAUTO, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
-       {AMOVBU, C_NSOREG, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
-       {AMOVH, C_NSAUTO, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
-       {AMOVH, C_NSOREG, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
-       {AMOVW, C_NSAUTO, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
-       {AMOVW, C_NSOREG, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
-       {AMOVD, C_NSAUTO, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
-       {AMOVD, C_NSOREG, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
-
-       {AFMOVS, C_NSAUTO, C_NONE, C_FREG, 21, 4, REGSP, 0, 0},
-       {AFMOVS, C_NSOREG, C_NONE, C_FREG, 21, 4, 0, 0, 0},
-       {AFMOVD, C_NSAUTO, C_NONE, C_FREG, 21, 4, REGSP, 0, 0},
-       {AFMOVD, C_NSOREG, C_NONE, C_FREG, 21, 4, 0, 0, 0},
+       {AMOVB, C_NSAUTO, C_NONE, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
+       {AMOVB, C_NSOREG, C_NONE, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
+       {AMOVBU, C_NSAUTO, C_NONE, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
+       {AMOVBU, C_NSOREG, C_NONE, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
+       {AMOVH, C_NSAUTO, C_NONE, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
+       {AMOVH, C_NSOREG, C_NONE, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
+       {AMOVW, C_NSAUTO, C_NONE, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
+       {AMOVW, C_NSOREG, C_NONE, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
+       {AMOVD, C_NSAUTO, C_NONE, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
+       {AMOVD, C_NSOREG, C_NONE, C_NONE, C_REG, 21, 4, REGSP, 0, 0},
+
+       {AFMOVS, C_NSAUTO, C_NONE, C_NONE, C_FREG, 21, 4, REGSP, 0, 0},
+       {AFMOVS, C_NSOREG, C_NONE, C_NONE, C_FREG, 21, 4, 0, 0, 0},
+       {AFMOVD, C_NSAUTO, C_NONE, C_NONE, C_FREG, 21, 4, REGSP, 0, 0},
+       {AFMOVD, C_NSOREG, C_NONE, C_NONE, C_FREG, 21, 4, 0, 0, 0},
 
        /* long displacement store */
-       {AMOVB, C_REG, C_NONE, C_LAUTO, 30, 8, REGSP, LTO, 0},
-       {AMOVB, C_REG, C_NONE, C_LOREG, 30, 8, 0, LTO, 0},
-       {AMOVBU, C_REG, C_NONE, C_LAUTO, 30, 8, REGSP, LTO, 0},
-       {AMOVBU, C_REG, C_NONE, C_LOREG, 30, 8, 0, LTO, 0},
-       {AMOVH, C_REG, C_NONE, C_LAUTO, 30, 8, REGSP, LTO, 0},
-       {AMOVH, C_REG, C_NONE, C_LOREG, 30, 8, 0, LTO, 0},
-       {AMOVW, C_REG, C_NONE, C_LAUTO, 30, 8, REGSP, LTO, 0},
-       {AMOVW, C_REG, C_NONE, C_LOREG, 30, 8, 0, LTO, 0},
-       {AMOVD, C_REG, C_NONE, C_LAUTO, 30, 8, REGSP, LTO, 0},
-       {AMOVD, C_REG, C_NONE, C_LOREG, 30, 8, 0, LTO, 0},
-
-       {AFMOVS, C_FREG, C_NONE, C_LAUTO, 30, 8, REGSP, LTO, 0},
-       {AFMOVS, C_FREG, C_NONE, C_LOREG, 30, 8, 0, LTO, 0},
-       {AFMOVD, C_FREG, C_NONE, C_LAUTO, 30, 8, REGSP, LTO, 0},
-       {AFMOVD, C_FREG, C_NONE, C_LOREG, 30, 8, 0, LTO, 0},
+       {AMOVB, C_REG, C_NONE, C_NONE, C_LAUTO, 30, 8, REGSP, LTO, 0},
+       {AMOVB, C_REG, C_NONE, C_NONE, C_LOREG, 30, 8, 0, LTO, 0},
+       {AMOVBU, C_REG, C_NONE, C_NONE, C_LAUTO, 30, 8, REGSP, LTO, 0},
+       {AMOVBU, C_REG, C_NONE, C_NONE, C_LOREG, 30, 8, 0, LTO, 0},
+       {AMOVH, C_REG, C_NONE, C_NONE, C_LAUTO, 30, 8, REGSP, LTO, 0},
+       {AMOVH, C_REG, C_NONE, C_NONE, C_LOREG, 30, 8, 0, LTO, 0},
+       {AMOVW, C_REG, C_NONE, C_NONE, C_LAUTO, 30, 8, REGSP, LTO, 0},
+       {AMOVW, C_REG, C_NONE, C_NONE, C_LOREG, 30, 8, 0, LTO, 0},
+       {AMOVD, C_REG, C_NONE, C_NONE, C_LAUTO, 30, 8, REGSP, LTO, 0},
+       {AMOVD, C_REG, C_NONE, C_NONE, C_LOREG, 30, 8, 0, LTO, 0},
+
+       {AFMOVS, C_FREG, C_NONE, C_NONE, C_LAUTO, 30, 8, REGSP, LTO, 0},
+       {AFMOVS, C_FREG, C_NONE, C_NONE, C_LOREG, 30, 8, 0, LTO, 0},
+       {AFMOVD, C_FREG, C_NONE, C_NONE, C_LAUTO, 30, 8, REGSP, LTO, 0},
+       {AFMOVD, C_FREG, C_NONE, C_NONE, C_LOREG, 30, 8, 0, LTO, 0},
 
        /* long displacement load */
-       {AMOVB, C_LAUTO, C_NONE, C_REG, 31, 8, REGSP, LFROM, 0},
-       {AMOVB, C_LOREG, C_NONE, C_REG, 31, 8, 0, LFROM, 0},
-       {AMOVBU, C_LAUTO, C_NONE, C_REG, 31, 8, REGSP, LFROM, 0},
-       {AMOVBU, C_LOREG, C_NONE, C_REG, 31, 8, 0, LFROM, 0},
-       {AMOVH, C_LAUTO, C_NONE, C_REG, 31, 8, REGSP, LFROM, 0},
-       {AMOVH, C_LOREG, C_NONE, C_REG, 31, 8, 0, LFROM, 0},
-       {AMOVW, C_LAUTO, C_NONE, C_REG, 31, 8, REGSP, LFROM, 0},
-       {AMOVW, C_LOREG, C_NONE, C_REG, 31, 8, 0, LFROM, 0},
-       {AMOVD, C_LAUTO, C_NONE, C_REG, 31, 8, REGSP, LFROM, 0},
-       {AMOVD, C_LOREG, C_NONE, C_REG, 31, 8, 0, LFROM, 0},
-
-       {AFMOVS, C_LAUTO, C_NONE, C_FREG, 31, 8, REGSP, LFROM, 0},
-       {AFMOVS, C_LOREG, C_NONE, C_FREG, 31, 8, 0, LFROM, 0},
-       {AFMOVD, C_LAUTO, C_NONE, C_FREG, 31, 8, REGSP, LFROM, 0},
-       {AFMOVD, C_LOREG, C_NONE, C_FREG, 31, 8, 0, LFROM, 0},
+       {AMOVB, C_LAUTO, C_NONE, C_NONE, C_REG, 31, 8, REGSP, LFROM, 0},
+       {AMOVB, C_LOREG, C_NONE, C_NONE, C_REG, 31, 8, 0, LFROM, 0},
+       {AMOVBU, C_LAUTO, C_NONE, C_NONE, C_REG, 31, 8, REGSP, LFROM, 0},
+       {AMOVBU, C_LOREG, C_NONE, C_NONE, C_REG, 31, 8, 0, LFROM, 0},
+       {AMOVH, C_LAUTO, C_NONE, C_NONE, C_REG, 31, 8, REGSP, LFROM, 0},
+       {AMOVH, C_LOREG, C_NONE, C_NONE, C_REG, 31, 8, 0, LFROM, 0},
+       {AMOVW, C_LAUTO, C_NONE, C_NONE, C_REG, 31, 8, REGSP, LFROM, 0},
+       {AMOVW, C_LOREG, C_NONE, C_NONE, C_REG, 31, 8, 0, LFROM, 0},
+       {AMOVD, C_LAUTO, C_NONE, C_NONE, C_REG, 31, 8, REGSP, LFROM, 0},
+       {AMOVD, C_LOREG, C_NONE, C_NONE, C_REG, 31, 8, 0, LFROM, 0},
+
+       {AFMOVS, C_LAUTO, C_NONE, C_NONE, C_FREG, 31, 8, REGSP, LFROM, 0},
+       {AFMOVS, C_LOREG, C_NONE, C_NONE, C_FREG, 31, 8, 0, LFROM, 0},
+       {AFMOVD, C_LAUTO, C_NONE, C_NONE, C_FREG, 31, 8, REGSP, LFROM, 0},
+       {AFMOVD, C_LOREG, C_NONE, C_NONE, C_FREG, 31, 8, 0, LFROM, 0},
 
        /* load long effective stack address (load int32 offset and add) */
-       {AMOVD, C_LACON, C_NONE, C_REG, 34, 8, REGSP, LFROM, 0},
+       {AMOVD, C_LACON, C_NONE, C_NONE, C_REG, 34, 8, REGSP, LFROM, 0},
 
        /* pre/post-indexed load (unscaled, signed 9-bit offset) */
-       {AMOVD, C_LOREG, C_NONE, C_REG, 22, 4, 0, 0, C_XPOST},
-       {AMOVW, C_LOREG, C_NONE, C_REG, 22, 4, 0, 0, C_XPOST},
-       {AMOVH, C_LOREG, C_NONE, C_REG, 22, 4, 0, 0, C_XPOST},
-       {AMOVB, C_LOREG, C_NONE, C_REG, 22, 4, 0, 0, C_XPOST},
-       {AMOVBU, C_LOREG, C_NONE, C_REG, 22, 4, 0, 0, C_XPOST},
-       {AFMOVS, C_LOREG, C_NONE, C_FREG, 22, 4, 0, 0, C_XPOST},
-       {AFMOVD, C_LOREG, C_NONE, C_FREG, 22, 4, 0, 0, C_XPOST},
-
-       {AMOVD, C_LOREG, C_NONE, C_REG, 22, 4, 0, 0, C_XPRE},
-       {AMOVW, C_LOREG, C_NONE, C_REG, 22, 4, 0, 0, C_XPRE},
-       {AMOVH, C_LOREG, C_NONE, C_REG, 22, 4, 0, 0, C_XPRE},
-       {AMOVB, C_LOREG, C_NONE, C_REG, 22, 4, 0, 0, C_XPRE},
-       {AMOVBU, C_LOREG, C_NONE, C_REG, 22, 4, 0, 0, C_XPRE},
-       {AFMOVS, C_LOREG, C_NONE, C_FREG, 22, 4, 0, 0, C_XPRE},
-       {AFMOVD, C_LOREG, C_NONE, C_FREG, 22, 4, 0, 0, C_XPRE},
+       {AMOVD, C_LOREG, C_NONE, C_NONE, C_REG, 22, 4, 0, 0, C_XPOST},
+       {AMOVW, C_LOREG, C_NONE, C_NONE, C_REG, 22, 4, 0, 0, C_XPOST},
+       {AMOVH, C_LOREG, C_NONE, C_NONE, C_REG, 22, 4, 0, 0, C_XPOST},
+       {AMOVB, C_LOREG, C_NONE, C_NONE, C_REG, 22, 4, 0, 0, C_XPOST},
+       {AMOVBU, C_LOREG, C_NONE, C_NONE, C_REG, 22, 4, 0, 0, C_XPOST},
+       {AFMOVS, C_LOREG, C_NONE, C_NONE, C_FREG, 22, 4, 0, 0, C_XPOST},
+       {AFMOVD, C_LOREG, C_NONE, C_NONE, C_FREG, 22, 4, 0, 0, C_XPOST},
+
+       {AMOVD, C_LOREG, C_NONE, C_NONE, C_REG, 22, 4, 0, 0, C_XPRE},
+       {AMOVW, C_LOREG, C_NONE, C_NONE, C_REG, 22, 4, 0, 0, C_XPRE},
+       {AMOVH, C_LOREG, C_NONE, C_NONE, C_REG, 22, 4, 0, 0, C_XPRE},
+       {AMOVB, C_LOREG, C_NONE, C_NONE, C_REG, 22, 4, 0, 0, C_XPRE},
+       {AMOVBU, C_LOREG, C_NONE, C_NONE, C_REG, 22, 4, 0, 0, C_XPRE},
+       {AFMOVS, C_LOREG, C_NONE, C_NONE, C_FREG, 22, 4, 0, 0, C_XPRE},
+       {AFMOVD, C_LOREG, C_NONE, C_NONE, C_FREG, 22, 4, 0, 0, C_XPRE},
 
        /* pre/post-indexed store (unscaled, signed 9-bit offset) */
-       {AMOVD, C_REG, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPOST},
-       {AMOVW, C_REG, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPOST},
-       {AMOVH, C_REG, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPOST},
-       {AMOVB, C_REG, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPOST},
-       {AMOVBU, C_REG, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPOST},
-       {AFMOVS, C_FREG, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPOST},
-       {AFMOVD, C_FREG, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPOST},
-
-       {AMOVD, C_REG, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPRE},
-       {AMOVW, C_REG, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPRE},
-       {AMOVH, C_REG, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPRE},
-       {AMOVB, C_REG, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPRE},
-       {AMOVBU, C_REG, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPRE},
-       {AFMOVS, C_FREG, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPRE},
-       {AFMOVD, C_FREG, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPRE},
+       {AMOVD, C_REG, C_NONE, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPOST},
+       {AMOVW, C_REG, C_NONE, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPOST},
+       {AMOVH, C_REG, C_NONE, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPOST},
+       {AMOVB, C_REG, C_NONE, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPOST},
+       {AMOVBU, C_REG, C_NONE, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPOST},
+       {AFMOVS, C_FREG, C_NONE, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPOST},
+       {AFMOVD, C_FREG, C_NONE, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPOST},
+
+       {AMOVD, C_REG, C_NONE, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPRE},
+       {AMOVW, C_REG, C_NONE, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPRE},
+       {AMOVH, C_REG, C_NONE, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPRE},
+       {AMOVB, C_REG, C_NONE, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPRE},
+       {AMOVBU, C_REG, C_NONE, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPRE},
+       {AFMOVS, C_FREG, C_NONE, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPRE},
+       {AFMOVD, C_FREG, C_NONE, C_NONE, C_LOREG, 23, 4, 0, 0, C_XPRE},
 
        /* load with shifted or extended register offset */
-       {AMOVD, C_ROFF, C_NONE, C_REG, 98, 4, 0, 0, 0},
-       {AMOVW, C_ROFF, C_NONE, C_REG, 98, 4, 0, 0, 0},
-       {AMOVH, C_ROFF, C_NONE, C_REG, 98, 4, 0, 0, 0},
-       {AMOVB, C_ROFF, C_NONE, C_REG, 98, 4, 0, 0, 0},
-       {AMOVBU, C_ROFF, C_NONE, C_REG, 98, 4, 0, 0, 0},
+       {AMOVD, C_ROFF, C_NONE, C_NONE, C_REG, 98, 4, 0, 0, 0},
+       {AMOVW, C_ROFF, C_NONE, C_NONE, C_REG, 98, 4, 0, 0, 0},
+       {AMOVH, C_ROFF, C_NONE, C_NONE, C_REG, 98, 4, 0, 0, 0},
+       {AMOVB, C_ROFF, C_NONE, C_NONE, C_REG, 98, 4, 0, 0, 0},
+       {AMOVBU, C_ROFF, C_NONE, C_NONE, C_REG, 98, 4, 0, 0, 0},
 
        /* store with extended register offset */
-       {AMOVD, C_REG, C_NONE, C_ROFF, 99, 4, 0, 0, 0},
-       {AMOVW, C_REG, C_NONE, C_ROFF, 99, 4, 0, 0, 0},
-       {AMOVH, C_REG, C_NONE, C_ROFF, 99, 4, 0, 0, 0},
-       {AMOVB, C_REG, C_NONE, C_ROFF, 99, 4, 0, 0, 0},
+       {AMOVD, C_REG, C_NONE, C_NONE, C_ROFF, 99, 4, 0, 0, 0},
+       {AMOVW, C_REG, C_NONE, C_NONE, C_ROFF, 99, 4, 0, 0, 0},
+       {AMOVH, C_REG, C_NONE, C_NONE, C_ROFF, 99, 4, 0, 0, 0},
+       {AMOVB, C_REG, C_NONE, C_NONE, C_ROFF, 99, 4, 0, 0, 0},
 
        /* pre/post-indexed/signed-offset load/store register pair
           (unscaled, signed 10-bit quad-aligned and long offset) */
-       {ALDP, C_NPAUTO, C_NONE, C_PAIR, 66, 4, REGSP, 0, 0},
-       {ALDP, C_NPAUTO, C_NONE, C_PAIR, 66, 4, REGSP, 0, C_XPRE},
-       {ALDP, C_NPAUTO, C_NONE, C_PAIR, 66, 4, REGSP, 0, C_XPOST},
-       {ALDP, C_PPAUTO, C_NONE, C_PAIR, 66, 4, REGSP, 0, 0},
-       {ALDP, C_PPAUTO, C_NONE, C_PAIR, 66, 4, REGSP, 0, C_XPRE},
-       {ALDP, C_PPAUTO, C_NONE, C_PAIR, 66, 4, REGSP, 0, C_XPOST},
-       {ALDP, C_UAUTO4K, C_NONE, C_PAIR, 74, 8, REGSP, 0, 0},
-       {ALDP, C_UAUTO4K, C_NONE, C_PAIR, 74, 8, REGSP, 0, C_XPRE},
-       {ALDP, C_UAUTO4K, C_NONE, C_PAIR, 74, 8, REGSP, 0, C_XPOST},
-       {ALDP, C_NAUTO4K, C_NONE, C_PAIR, 74, 8, REGSP, 0, 0},
-       {ALDP, C_NAUTO4K, C_NONE, C_PAIR, 74, 8, REGSP, 0, C_XPRE},
-       {ALDP, C_NAUTO4K, C_NONE, C_PAIR, 74, 8, REGSP, 0, C_XPOST},
-       {ALDP, C_LAUTO, C_NONE, C_PAIR, 75, 12, REGSP, LFROM, 0},
-       {ALDP, C_LAUTO, C_NONE, C_PAIR, 75, 12, REGSP, LFROM, C_XPRE},
-       {ALDP, C_LAUTO, C_NONE, C_PAIR, 75, 12, REGSP, LFROM, C_XPOST},
-       {ALDP, C_NPOREG, C_NONE, C_PAIR, 66, 4, 0, 0, 0},
-       {ALDP, C_NPOREG, C_NONE, C_PAIR, 66, 4, 0, 0, C_XPRE},
-       {ALDP, C_NPOREG, C_NONE, C_PAIR, 66, 4, 0, 0, C_XPOST},
-       {ALDP, C_PPOREG, C_NONE, C_PAIR, 66, 4, 0, 0, 0},
-       {ALDP, C_PPOREG, C_NONE, C_PAIR, 66, 4, 0, 0, C_XPRE},
-       {ALDP, C_PPOREG, C_NONE, C_PAIR, 66, 4, 0, 0, C_XPOST},
-       {ALDP, C_UOREG4K, C_NONE, C_PAIR, 74, 8, 0, 0, 0},
-       {ALDP, C_UOREG4K, C_NONE, C_PAIR, 74, 8, 0, 0, C_XPRE},
-       {ALDP, C_UOREG4K, C_NONE, C_PAIR, 74, 8, 0, 0, C_XPOST},
-       {ALDP, C_NOREG4K, C_NONE, C_PAIR, 74, 8, 0, 0, 0},
-       {ALDP, C_NOREG4K, C_NONE, C_PAIR, 74, 8, 0, 0, C_XPRE},
-       {ALDP, C_NOREG4K, C_NONE, C_PAIR, 74, 8, 0, 0, C_XPOST},
-       {ALDP, C_LOREG, C_NONE, C_PAIR, 75, 12, 0, LFROM, 0},
-       {ALDP, C_LOREG, C_NONE, C_PAIR, 75, 12, 0, LFROM, C_XPRE},
-       {ALDP, C_LOREG, C_NONE, C_PAIR, 75, 12, 0, LFROM, C_XPOST},
-       {ALDP, C_ADDR, C_NONE, C_PAIR, 88, 12, 0, 0, 0},
-
-       {ASTP, C_PAIR, C_NONE, C_NPAUTO, 67, 4, REGSP, 0, 0},
-       {ASTP, C_PAIR, C_NONE, C_NPAUTO, 67, 4, REGSP, 0, C_XPRE},
-       {ASTP, C_PAIR, C_NONE, C_NPAUTO, 67, 4, REGSP, 0, C_XPOST},
-       {ASTP, C_PAIR, C_NONE, C_PPAUTO, 67, 4, REGSP, 0, 0},
-       {ASTP, C_PAIR, C_NONE, C_PPAUTO, 67, 4, REGSP, 0, C_XPRE},
-       {ASTP, C_PAIR, C_NONE, C_PPAUTO, 67, 4, REGSP, 0, C_XPOST},
-       {ASTP, C_PAIR, C_NONE, C_UAUTO4K, 76, 8, REGSP, 0, 0},
-       {ASTP, C_PAIR, C_NONE, C_UAUTO4K, 76, 8, REGSP, 0, C_XPRE},
-       {ASTP, C_PAIR, C_NONE, C_UAUTO4K, 76, 8, REGSP, 0, C_XPOST},
-       {ASTP, C_PAIR, C_NONE, C_NAUTO4K, 76, 12, REGSP, 0, 0},
-       {ASTP, C_PAIR, C_NONE, C_NAUTO4K, 76, 12, REGSP, 0, C_XPRE},
-       {ASTP, C_PAIR, C_NONE, C_NAUTO4K, 76, 12, REGSP, 0, C_XPOST},
-       {ASTP, C_PAIR, C_NONE, C_LAUTO, 77, 12, REGSP, LTO, 0},
-       {ASTP, C_PAIR, C_NONE, C_LAUTO, 77, 12, REGSP, LTO, C_XPRE},
-       {ASTP, C_PAIR, C_NONE, C_LAUTO, 77, 12, REGSP, LTO, C_XPOST},
-       {ASTP, C_PAIR, C_NONE, C_NPOREG, 67, 4, 0, 0, 0},
-       {ASTP, C_PAIR, C_NONE, C_NPOREG, 67, 4, 0, 0, C_XPRE},
-       {ASTP, C_PAIR, C_NONE, C_NPOREG, 67, 4, 0, 0, C_XPOST},
-       {ASTP, C_PAIR, C_NONE, C_PPOREG, 67, 4, 0, 0, 0},
-       {ASTP, C_PAIR, C_NONE, C_PPOREG, 67, 4, 0, 0, C_XPRE},
-       {ASTP, C_PAIR, C_NONE, C_PPOREG, 67, 4, 0, 0, C_XPOST},
-       {ASTP, C_PAIR, C_NONE, C_UOREG4K, 76, 8, 0, 0, 0},
-       {ASTP, C_PAIR, C_NONE, C_UOREG4K, 76, 8, 0, 0, C_XPRE},
-       {ASTP, C_PAIR, C_NONE, C_UOREG4K, 76, 8, 0, 0, C_XPOST},
-       {ASTP, C_PAIR, C_NONE, C_NOREG4K, 76, 8, 0, 0, 0},
-       {ASTP, C_PAIR, C_NONE, C_NOREG4K, 76, 8, 0, 0, C_XPRE},
-       {ASTP, C_PAIR, C_NONE, C_NOREG4K, 76, 8, 0, 0, C_XPOST},
-       {ASTP, C_PAIR, C_NONE, C_LOREG, 77, 12, 0, LTO, 0},
-       {ASTP, C_PAIR, C_NONE, C_LOREG, 77, 12, 0, LTO, C_XPRE},
-       {ASTP, C_PAIR, C_NONE, C_LOREG, 77, 12, 0, LTO, C_XPOST},
-       {ASTP, C_PAIR, C_NONE, C_ADDR, 87, 12, 0, 0, 0},
+       {ALDP, C_NPAUTO, C_NONE, C_NONE, C_PAIR, 66, 4, REGSP, 0, 0},
+       {ALDP, C_NPAUTO, C_NONE, C_NONE, C_PAIR, 66, 4, REGSP, 0, C_XPRE},
+       {ALDP, C_NPAUTO, C_NONE, C_NONE, C_PAIR, 66, 4, REGSP, 0, C_XPOST},
+       {ALDP, C_PPAUTO, C_NONE, C_NONE, C_PAIR, 66, 4, REGSP, 0, 0},
+       {ALDP, C_PPAUTO, C_NONE, C_NONE, C_PAIR, 66, 4, REGSP, 0, C_XPRE},
+       {ALDP, C_PPAUTO, C_NONE, C_NONE, C_PAIR, 66, 4, REGSP, 0, C_XPOST},
+       {ALDP, C_UAUTO4K, C_NONE, C_NONE, C_PAIR, 74, 8, REGSP, 0, 0},
+       {ALDP, C_UAUTO4K, C_NONE, C_NONE, C_PAIR, 74, 8, REGSP, 0, C_XPRE},
+       {ALDP, C_UAUTO4K, C_NONE, C_NONE, C_PAIR, 74, 8, REGSP, 0, C_XPOST},
+       {ALDP, C_NAUTO4K, C_NONE, C_NONE, C_PAIR, 74, 8, REGSP, 0, 0},
+       {ALDP, C_NAUTO4K, C_NONE, C_NONE, C_PAIR, 74, 8, REGSP, 0, C_XPRE},
+       {ALDP, C_NAUTO4K, C_NONE, C_NONE, C_PAIR, 74, 8, REGSP, 0, C_XPOST},
+       {ALDP, C_LAUTO, C_NONE, C_NONE, C_PAIR, 75, 12, REGSP, LFROM, 0},
+       {ALDP, C_LAUTO, C_NONE, C_NONE, C_PAIR, 75, 12, REGSP, LFROM, C_XPRE},
+       {ALDP, C_LAUTO, C_NONE, C_NONE, C_PAIR, 75, 12, REGSP, LFROM, C_XPOST},
+       {ALDP, C_NPOREG, C_NONE, C_NONE, C_PAIR, 66, 4, 0, 0, 0},
+       {ALDP, C_NPOREG, C_NONE, C_NONE, C_PAIR, 66, 4, 0, 0, C_XPRE},
+       {ALDP, C_NPOREG, C_NONE, C_NONE, C_PAIR, 66, 4, 0, 0, C_XPOST},
+       {ALDP, C_PPOREG, C_NONE, C_NONE, C_PAIR, 66, 4, 0, 0, 0},
+       {ALDP, C_PPOREG, C_NONE, C_NONE, C_PAIR, 66, 4, 0, 0, C_XPRE},
+       {ALDP, C_PPOREG, C_NONE, C_NONE, C_PAIR, 66, 4, 0, 0, C_XPOST},
+       {ALDP, C_UOREG4K, C_NONE, C_NONE, C_PAIR, 74, 8, 0, 0, 0},
+       {ALDP, C_UOREG4K, C_NONE, C_NONE, C_PAIR, 74, 8, 0, 0, C_XPRE},
+       {ALDP, C_UOREG4K, C_NONE, C_NONE, C_PAIR, 74, 8, 0, 0, C_XPOST},
+       {ALDP, C_NOREG4K, C_NONE, C_NONE, C_PAIR, 74, 8, 0, 0, 0},
+       {ALDP, C_NOREG4K, C_NONE, C_NONE, C_PAIR, 74, 8, 0, 0, C_XPRE},
+       {ALDP, C_NOREG4K, C_NONE, C_NONE, C_PAIR, 74, 8, 0, 0, C_XPOST},
+       {ALDP, C_LOREG, C_NONE, C_NONE, C_PAIR, 75, 12, 0, LFROM, 0},
+       {ALDP, C_LOREG, C_NONE, C_NONE, C_PAIR, 75, 12, 0, LFROM, C_XPRE},
+       {ALDP, C_LOREG, C_NONE, C_NONE, C_PAIR, 75, 12, 0, LFROM, C_XPOST},
+       {ALDP, C_ADDR, C_NONE, C_NONE, C_PAIR, 88, 12, 0, 0, 0},
+
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_NPAUTO, 67, 4, REGSP, 0, 0},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_NPAUTO, 67, 4, REGSP, 0, C_XPRE},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_NPAUTO, 67, 4, REGSP, 0, C_XPOST},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_PPAUTO, 67, 4, REGSP, 0, 0},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_PPAUTO, 67, 4, REGSP, 0, C_XPRE},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_PPAUTO, 67, 4, REGSP, 0, C_XPOST},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_UAUTO4K, 76, 8, REGSP, 0, 0},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_UAUTO4K, 76, 8, REGSP, 0, C_XPRE},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_UAUTO4K, 76, 8, REGSP, 0, C_XPOST},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_NAUTO4K, 76, 12, REGSP, 0, 0},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_NAUTO4K, 76, 12, REGSP, 0, C_XPRE},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_NAUTO4K, 76, 12, REGSP, 0, C_XPOST},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_LAUTO, 77, 12, REGSP, LTO, 0},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_LAUTO, 77, 12, REGSP, LTO, C_XPRE},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_LAUTO, 77, 12, REGSP, LTO, C_XPOST},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_NPOREG, 67, 4, 0, 0, 0},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_NPOREG, 67, 4, 0, 0, C_XPRE},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_NPOREG, 67, 4, 0, 0, C_XPOST},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_PPOREG, 67, 4, 0, 0, 0},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_PPOREG, 67, 4, 0, 0, C_XPRE},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_PPOREG, 67, 4, 0, 0, C_XPOST},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_UOREG4K, 76, 8, 0, 0, 0},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_UOREG4K, 76, 8, 0, 0, C_XPRE},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_UOREG4K, 76, 8, 0, 0, C_XPOST},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_NOREG4K, 76, 8, 0, 0, 0},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_NOREG4K, 76, 8, 0, 0, C_XPRE},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_NOREG4K, 76, 8, 0, 0, C_XPOST},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_LOREG, 77, 12, 0, LTO, 0},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_LOREG, 77, 12, 0, LTO, C_XPRE},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_LOREG, 77, 12, 0, LTO, C_XPOST},
+       {ASTP, C_PAIR, C_NONE, C_NONE, C_ADDR, 87, 12, 0, 0, 0},
 
        // differ from LDP/STP for C_NSAUTO_4/C_PSAUTO_4/C_NSOREG_4/C_PSOREG_4
-       {ALDPW, C_NSAUTO_4, C_NONE, C_PAIR, 66, 4, REGSP, 0, 0},
-       {ALDPW, C_NSAUTO_4, C_NONE, C_PAIR, 66, 4, REGSP, 0, C_XPRE},
-       {ALDPW, C_NSAUTO_4, C_NONE, C_PAIR, 66, 4, REGSP, 0, C_XPOST},
-       {ALDPW, C_PSAUTO_4, C_NONE, C_PAIR, 66, 4, REGSP, 0, 0},
-       {ALDPW, C_PSAUTO_4, C_NONE, C_PAIR, 66, 4, REGSP, 0, C_XPRE},
-       {ALDPW, C_PSAUTO_4, C_NONE, C_PAIR, 66, 4, REGSP, 0, C_XPOST},
-       {ALDPW, C_UAUTO4K, C_NONE, C_PAIR, 74, 8, REGSP, 0, 0},
-       {ALDPW, C_UAUTO4K, C_NONE, C_PAIR, 74, 8, REGSP, 0, C_XPRE},
-       {ALDPW, C_UAUTO4K, C_NONE, C_PAIR, 74, 8, REGSP, 0, C_XPOST},
-       {ALDPW, C_NAUTO4K, C_NONE, C_PAIR, 74, 8, REGSP, 0, 0},
-       {ALDPW, C_NAUTO4K, C_NONE, C_PAIR, 74, 8, REGSP, 0, C_XPRE},
-       {ALDPW, C_NAUTO4K, C_NONE, C_PAIR, 74, 8, REGSP, 0, C_XPOST},
-       {ALDPW, C_LAUTO, C_NONE, C_PAIR, 75, 12, REGSP, LFROM, 0},
-       {ALDPW, C_LAUTO, C_NONE, C_PAIR, 75, 12, REGSP, LFROM, C_XPRE},
-       {ALDPW, C_LAUTO, C_NONE, C_PAIR, 75, 12, REGSP, LFROM, C_XPOST},
-       {ALDPW, C_NSOREG_4, C_NONE, C_PAIR, 66, 4, 0, 0, 0},
-       {ALDPW, C_NSOREG_4, C_NONE, C_PAIR, 66, 4, 0, 0, C_XPRE},
-       {ALDPW, C_NSOREG_4, C_NONE, C_PAIR, 66, 4, 0, 0, C_XPOST},
-       {ALDPW, C_PSOREG_4, C_NONE, C_PAIR, 66, 4, 0, 0, 0},
-       {ALDPW, C_PSOREG_4, C_NONE, C_PAIR, 66, 4, 0, 0, C_XPRE},
-       {ALDPW, C_PSOREG_4, C_NONE, C_PAIR, 66, 4, 0, 0, C_XPOST},
-       {ALDPW, C_UOREG4K, C_NONE, C_PAIR, 74, 8, 0, 0, 0},
-       {ALDPW, C_UOREG4K, C_NONE, C_PAIR, 74, 8, 0, 0, C_XPRE},
-       {ALDPW, C_UOREG4K, C_NONE, C_PAIR, 74, 8, 0, 0, C_XPOST},
-       {ALDPW, C_NOREG4K, C_NONE, C_PAIR, 74, 8, 0, 0, 0},
-       {ALDPW, C_NOREG4K, C_NONE, C_PAIR, 74, 8, 0, 0, C_XPRE},
-       {ALDPW, C_NOREG4K, C_NONE, C_PAIR, 74, 8, 0, 0, C_XPOST},
-       {ALDPW, C_LOREG, C_NONE, C_PAIR, 75, 12, 0, LFROM, 0},
-       {ALDPW, C_LOREG, C_NONE, C_PAIR, 75, 12, 0, LFROM, C_XPRE},
-       {ALDPW, C_LOREG, C_NONE, C_PAIR, 75, 12, 0, LFROM, C_XPOST},
-       {ALDPW, C_ADDR, C_NONE, C_PAIR, 88, 12, 0, 0, 0},
-
-       {ASTPW, C_PAIR, C_NONE, C_NSAUTO_4, 67, 4, REGSP, 0, 0},
-       {ASTPW, C_PAIR, C_NONE, C_NSAUTO_4, 67, 4, REGSP, 0, C_XPRE},
-       {ASTPW, C_PAIR, C_NONE, C_NSAUTO_4, 67, 4, REGSP, 0, C_XPOST},
-       {ASTPW, C_PAIR, C_NONE, C_PSAUTO_4, 67, 4, REGSP, 0, 0},
-       {ASTPW, C_PAIR, C_NONE, C_PSAUTO_4, 67, 4, REGSP, 0, C_XPRE},
-       {ASTPW, C_PAIR, C_NONE, C_PSAUTO_4, 67, 4, REGSP, 0, C_XPOST},
-       {ASTPW, C_PAIR, C_NONE, C_UAUTO4K, 76, 8, REGSP, 0, 0},
-       {ASTPW, C_PAIR, C_NONE, C_UAUTO4K, 76, 8, REGSP, 0, C_XPRE},
-       {ASTPW, C_PAIR, C_NONE, C_UAUTO4K, 76, 8, REGSP, 0, C_XPOST},
-       {ASTPW, C_PAIR, C_NONE, C_NAUTO4K, 76, 12, REGSP, 0, 0},
-       {ASTPW, C_PAIR, C_NONE, C_NAUTO4K, 76, 12, REGSP, 0, C_XPRE},
-       {ASTPW, C_PAIR, C_NONE, C_NAUTO4K, 76, 12, REGSP, 0, C_XPOST},
-       {ASTPW, C_PAIR, C_NONE, C_LAUTO, 77, 12, REGSP, LTO, 0},
-       {ASTPW, C_PAIR, C_NONE, C_LAUTO, 77, 12, REGSP, LTO, C_XPRE},
-       {ASTPW, C_PAIR, C_NONE, C_LAUTO, 77, 12, REGSP, LTO, C_XPOST},
-       {ASTPW, C_PAIR, C_NONE, C_NSOREG_4, 67, 4, 0, 0, 0},
-       {ASTPW, C_PAIR, C_NONE, C_NSOREG_4, 67, 4, 0, 0, C_XPRE},
-       {ASTPW, C_PAIR, C_NONE, C_NSOREG_4, 67, 4, 0, 0, C_XPOST},
-       {ASTPW, C_PAIR, C_NONE, C_PSOREG_4, 67, 4, 0, 0, 0},
-       {ASTPW, C_PAIR, C_NONE, C_PSOREG_4, 67, 4, 0, 0, C_XPRE},
-       {ASTPW, C_PAIR, C_NONE, C_PSOREG_4, 67, 4, 0, 0, C_XPOST},
-       {ASTPW, C_PAIR, C_NONE, C_UOREG4K, 76, 8, 0, 0, 0},
-       {ASTPW, C_PAIR, C_NONE, C_UOREG4K, 76, 8, 0, 0, C_XPRE},
-       {ASTPW, C_PAIR, C_NONE, C_UOREG4K, 76, 8, 0, 0, C_XPOST},
-       {ASTPW, C_PAIR, C_NONE, C_NOREG4K, 76, 8, 0, 0, 0},
-       {ASTPW, C_PAIR, C_NONE, C_NOREG4K, 76, 8, 0, 0, C_XPRE},
-       {ASTPW, C_PAIR, C_NONE, C_NOREG4K, 76, 8, 0, 0, C_XPOST},
-       {ASTPW, C_PAIR, C_NONE, C_LOREG, 77, 12, 0, LTO, 0},
-       {ASTPW, C_PAIR, C_NONE, C_LOREG, 77, 12, 0, LTO, C_XPRE},
-       {ASTPW, C_PAIR, C_NONE, C_LOREG, 77, 12, 0, LTO, C_XPOST},
-       {ASTPW, C_PAIR, C_NONE, C_ADDR, 87, 12, 0, 0, 0},
-
-       {ASWPD, C_REG, C_NONE, C_ZOREG, 47, 4, 0, 0, 0},     // RegTo2=C_REG
-       {ASWPD, C_REG, C_NONE, C_ZAUTO, 47, 4, REGSP, 0, 0}, // RegTo2=C_REG
-       {ALDAR, C_ZOREG, C_NONE, C_REG, 58, 4, 0, 0, 0},
-       {ALDXR, C_ZOREG, C_NONE, C_REG, 58, 4, 0, 0, 0},
-       {ALDAXR, C_ZOREG, C_NONE, C_REG, 58, 4, 0, 0, 0},
-       {ALDXP, C_ZOREG, C_NONE, C_PAIR, 58, 4, 0, 0, 0},
-       {ASTLR, C_REG, C_NONE, C_ZOREG, 59, 4, 0, 0, 0},     // RegTo2=C_NONE
-       {ASTXR, C_REG, C_NONE, C_ZOREG, 59, 4, 0, 0, 0},     // RegTo2=C_REG
-       {ASTLXR, C_REG, C_NONE, C_ZOREG, 59, 4, 0, 0, 0},    // RegTo2=C_REG
-       {ASTXP, C_PAIR, C_NONE, C_ZOREG, 59, 4, 0, 0, 0},
+       {ALDPW, C_NSAUTO_4, C_NONE, C_NONE, C_PAIR, 66, 4, REGSP, 0, 0},
+       {ALDPW, C_NSAUTO_4, C_NONE, C_NONE, C_PAIR, 66, 4, REGSP, 0, C_XPRE},
+       {ALDPW, C_NSAUTO_4, C_NONE, C_NONE, C_PAIR, 66, 4, REGSP, 0, C_XPOST},
+       {ALDPW, C_PSAUTO_4, C_NONE, C_NONE, C_PAIR, 66, 4, REGSP, 0, 0},
+       {ALDPW, C_PSAUTO_4, C_NONE, C_NONE, C_PAIR, 66, 4, REGSP, 0, C_XPRE},
+       {ALDPW, C_PSAUTO_4, C_NONE, C_NONE, C_PAIR, 66, 4, REGSP, 0, C_XPOST},
+       {ALDPW, C_UAUTO4K, C_NONE, C_NONE, C_PAIR, 74, 8, REGSP, 0, 0},
+       {ALDPW, C_UAUTO4K, C_NONE, C_NONE, C_PAIR, 74, 8, REGSP, 0, C_XPRE},
+       {ALDPW, C_UAUTO4K, C_NONE, C_NONE, C_PAIR, 74, 8, REGSP, 0, C_XPOST},
+       {ALDPW, C_NAUTO4K, C_NONE, C_NONE, C_PAIR, 74, 8, REGSP, 0, 0},
+       {ALDPW, C_NAUTO4K, C_NONE, C_NONE, C_PAIR, 74, 8, REGSP, 0, C_XPRE},
+       {ALDPW, C_NAUTO4K, C_NONE, C_NONE, C_PAIR, 74, 8, REGSP, 0, C_XPOST},
+       {ALDPW, C_LAUTO, C_NONE, C_NONE, C_PAIR, 75, 12, REGSP, LFROM, 0},
+       {ALDPW, C_LAUTO, C_NONE, C_NONE, C_PAIR, 75, 12, REGSP, LFROM, C_XPRE},
+       {ALDPW, C_LAUTO, C_NONE, C_NONE, C_PAIR, 75, 12, REGSP, LFROM, C_XPOST},
+       {ALDPW, C_NSOREG_4, C_NONE, C_NONE, C_PAIR, 66, 4, 0, 0, 0},
+       {ALDPW, C_NSOREG_4, C_NONE, C_NONE, C_PAIR, 66, 4, 0, 0, C_XPRE},
+       {ALDPW, C_NSOREG_4, C_NONE, C_NONE, C_PAIR, 66, 4, 0, 0, C_XPOST},
+       {ALDPW, C_PSOREG_4, C_NONE, C_NONE, C_PAIR, 66, 4, 0, 0, 0},
+       {ALDPW, C_PSOREG_4, C_NONE, C_NONE, C_PAIR, 66, 4, 0, 0, C_XPRE},
+       {ALDPW, C_PSOREG_4, C_NONE, C_NONE, C_PAIR, 66, 4, 0, 0, C_XPOST},
+       {ALDPW, C_UOREG4K, C_NONE, C_NONE, C_PAIR, 74, 8, 0, 0, 0},
+       {ALDPW, C_UOREG4K, C_NONE, C_NONE, C_PAIR, 74, 8, 0, 0, C_XPRE},
+       {ALDPW, C_UOREG4K, C_NONE, C_NONE, C_PAIR, 74, 8, 0, 0, C_XPOST},
+       {ALDPW, C_NOREG4K, C_NONE, C_NONE, C_PAIR, 74, 8, 0, 0, 0},
+       {ALDPW, C_NOREG4K, C_NONE, C_NONE, C_PAIR, 74, 8, 0, 0, C_XPRE},
+       {ALDPW, C_NOREG4K, C_NONE, C_NONE, C_PAIR, 74, 8, 0, 0, C_XPOST},
+       {ALDPW, C_LOREG, C_NONE, C_NONE, C_PAIR, 75, 12, 0, LFROM, 0},
+       {ALDPW, C_LOREG, C_NONE, C_NONE, C_PAIR, 75, 12, 0, LFROM, C_XPRE},
+       {ALDPW, C_LOREG, C_NONE, C_NONE, C_PAIR, 75, 12, 0, LFROM, C_XPOST},
+       {ALDPW, C_ADDR, C_NONE, C_NONE, C_PAIR, 88, 12, 0, 0, 0},
+
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_NSAUTO_4, 67, 4, REGSP, 0, 0},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_NSAUTO_4, 67, 4, REGSP, 0, C_XPRE},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_NSAUTO_4, 67, 4, REGSP, 0, C_XPOST},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_PSAUTO_4, 67, 4, REGSP, 0, 0},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_PSAUTO_4, 67, 4, REGSP, 0, C_XPRE},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_PSAUTO_4, 67, 4, REGSP, 0, C_XPOST},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_UAUTO4K, 76, 8, REGSP, 0, 0},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_UAUTO4K, 76, 8, REGSP, 0, C_XPRE},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_UAUTO4K, 76, 8, REGSP, 0, C_XPOST},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_NAUTO4K, 76, 12, REGSP, 0, 0},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_NAUTO4K, 76, 12, REGSP, 0, C_XPRE},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_NAUTO4K, 76, 12, REGSP, 0, C_XPOST},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_LAUTO, 77, 12, REGSP, LTO, 0},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_LAUTO, 77, 12, REGSP, LTO, C_XPRE},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_LAUTO, 77, 12, REGSP, LTO, C_XPOST},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_NSOREG_4, 67, 4, 0, 0, 0},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_NSOREG_4, 67, 4, 0, 0, C_XPRE},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_NSOREG_4, 67, 4, 0, 0, C_XPOST},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_PSOREG_4, 67, 4, 0, 0, 0},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_PSOREG_4, 67, 4, 0, 0, C_XPRE},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_PSOREG_4, 67, 4, 0, 0, C_XPOST},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_UOREG4K, 76, 8, 0, 0, 0},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_UOREG4K, 76, 8, 0, 0, C_XPRE},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_UOREG4K, 76, 8, 0, 0, C_XPOST},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_NOREG4K, 76, 8, 0, 0, 0},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_NOREG4K, 76, 8, 0, 0, C_XPRE},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_NOREG4K, 76, 8, 0, 0, C_XPOST},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_LOREG, 77, 12, 0, LTO, 0},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_LOREG, 77, 12, 0, LTO, C_XPRE},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_LOREG, 77, 12, 0, LTO, C_XPOST},
+       {ASTPW, C_PAIR, C_NONE, C_NONE, C_ADDR, 87, 12, 0, 0, 0},
+
+       {ASWPD, C_REG, C_NONE, C_NONE, C_ZOREG, 47, 4, 0, 0, 0},     // RegTo2=C_REG
+       {ASWPD, C_REG, C_NONE, C_NONE, C_ZAUTO, 47, 4, REGSP, 0, 0}, // RegTo2=C_REG
+       {ALDAR, C_ZOREG, C_NONE, C_NONE, C_REG, 58, 4, 0, 0, 0},
+       {ALDXR, C_ZOREG, C_NONE, C_NONE, C_REG, 58, 4, 0, 0, 0},
+       {ALDAXR, C_ZOREG, C_NONE, C_NONE, C_REG, 58, 4, 0, 0, 0},
+       {ALDXP, C_ZOREG, C_NONE, C_NONE, C_PAIR, 58, 4, 0, 0, 0},
+       {ASTLR, C_REG, C_NONE, C_NONE, C_ZOREG, 59, 4, 0, 0, 0},  // RegTo2=C_NONE
+       {ASTXR, C_REG, C_NONE, C_NONE, C_ZOREG, 59, 4, 0, 0, 0},  // RegTo2=C_REG
+       {ASTLXR, C_REG, C_NONE, C_NONE, C_ZOREG, 59, 4, 0, 0, 0}, // RegTo2=C_REG
+       {ASTXP, C_PAIR, C_NONE, C_NONE, C_ZOREG, 59, 4, 0, 0, 0},
 
        /* VLD1/VST1 */
-       {AVLD1, C_ZOREG, C_NONE, C_LIST, 81, 4, 0, 0, 0},
-       {AVLD1, C_LOREG, C_NONE, C_LIST, 81, 4, 0, 0, C_XPOST},
-       {AVLD1, C_ROFF, C_NONE, C_LIST, 81, 4, 0, 0, C_XPOST},
-       {AVLD1, C_LOREG, C_NONE, C_ELEM, 97, 4, 0, 0, C_XPOST},
-       {AVLD1, C_ROFF, C_NONE, C_ELEM, 97, 4, 0, 0, C_XPOST},
-       {AVLD1, C_LOREG, C_NONE, C_ELEM, 97, 4, 0, 0, 0},
-       {AVST1, C_LIST, C_NONE, C_ZOREG, 84, 4, 0, 0, 0},
-       {AVST1, C_LIST, C_NONE, C_LOREG, 84, 4, 0, 0, C_XPOST},
-       {AVST1, C_LIST, C_NONE, C_ROFF, 84, 4, 0, 0, C_XPOST},
-       {AVST1, C_ELEM, C_NONE, C_LOREG, 96, 4, 0, 0, C_XPOST},
-       {AVST1, C_ELEM, C_NONE, C_ROFF, 96, 4, 0, 0, C_XPOST},
-       {AVST1, C_ELEM, C_NONE, C_LOREG, 96, 4, 0, 0, 0},
+       {AVLD1, C_ZOREG, C_NONE, C_NONE, C_LIST, 81, 4, 0, 0, 0},
+       {AVLD1, C_LOREG, C_NONE, C_NONE, C_LIST, 81, 4, 0, 0, C_XPOST},
+       {AVLD1, C_ROFF, C_NONE, C_NONE, C_LIST, 81, 4, 0, 0, C_XPOST},
+       {AVLD1, C_LOREG, C_NONE, C_NONE, C_ELEM, 97, 4, 0, 0, C_XPOST},
+       {AVLD1, C_ROFF, C_NONE, C_NONE, C_ELEM, 97, 4, 0, 0, C_XPOST},
+       {AVLD1, C_LOREG, C_NONE, C_NONE, C_ELEM, 97, 4, 0, 0, 0},
+       {AVST1, C_LIST, C_NONE, C_NONE, C_ZOREG, 84, 4, 0, 0, 0},
+       {AVST1, C_LIST, C_NONE, C_NONE, C_LOREG, 84, 4, 0, 0, C_XPOST},
+       {AVST1, C_LIST, C_NONE, C_NONE, C_ROFF, 84, 4, 0, 0, C_XPOST},
+       {AVST1, C_ELEM, C_NONE, C_NONE, C_LOREG, 96, 4, 0, 0, C_XPOST},
+       {AVST1, C_ELEM, C_NONE, C_NONE, C_ROFF, 96, 4, 0, 0, C_XPOST},
+       {AVST1, C_ELEM, C_NONE, C_NONE, C_LOREG, 96, 4, 0, 0, 0},
 
        /* special */
-       {AMOVD, C_SPR, C_NONE, C_REG, 35, 4, 0, 0, 0},
-       {AMRS, C_SPR, C_NONE, C_REG, 35, 4, 0, 0, 0},
-       {AMOVD, C_REG, C_NONE, C_SPR, 36, 4, 0, 0, 0},
-       {AMSR, C_REG, C_NONE, C_SPR, 36, 4, 0, 0, 0},
-       {AMOVD, C_VCON, C_NONE, C_SPR, 37, 4, 0, 0, 0},
-       {AMSR, C_VCON, C_NONE, C_SPR, 37, 4, 0, 0, 0},
-       {APRFM, C_UOREG32K, C_NONE, C_SPR, 91, 4, 0, 0, 0},
-       {APRFM, C_UOREG32K, C_NONE, C_LCON, 91, 4, 0, 0, 0},
-       {ADMB, C_VCON, C_NONE, C_NONE, 51, 4, 0, 0, 0},
-       {AHINT, C_VCON, C_NONE, C_NONE, 52, 4, 0, 0, 0},
-       {ASYS, C_VCON, C_NONE, C_NONE, 50, 4, 0, 0, 0},
-       {ASYS, C_VCON, C_REG, C_NONE, 50, 4, 0, 0, 0},
-       {ASYSL, C_VCON, C_NONE, C_REG, 50, 4, 0, 0, 0},
+       {AMOVD, C_SPR, C_NONE, C_NONE, C_REG, 35, 4, 0, 0, 0},
+       {AMRS, C_SPR, C_NONE, C_NONE, C_REG, 35, 4, 0, 0, 0},
+       {AMOVD, C_REG, C_NONE, C_NONE, C_SPR, 36, 4, 0, 0, 0},
+       {AMSR, C_REG, C_NONE, C_NONE, C_SPR, 36, 4, 0, 0, 0},
+       {AMOVD, C_VCON, C_NONE, C_NONE, C_SPR, 37, 4, 0, 0, 0},
+       {AMSR, C_VCON, C_NONE, C_NONE, C_SPR, 37, 4, 0, 0, 0},
+       {APRFM, C_UOREG32K, C_NONE, C_NONE, C_SPR, 91, 4, 0, 0, 0},
+       {APRFM, C_UOREG32K, C_NONE, C_NONE, C_LCON, 91, 4, 0, 0, 0},
+       {ADMB, C_VCON, C_NONE, C_NONE, C_NONE, 51, 4, 0, 0, 0},
+       {AHINT, C_VCON, C_NONE, C_NONE, C_NONE, 52, 4, 0, 0, 0},
+       {ASYS, C_VCON, C_NONE, C_NONE, C_NONE, 50, 4, 0, 0, 0},
+       {ASYS, C_VCON, C_REG, C_NONE, C_NONE, 50, 4, 0, 0, 0},
+       {ASYSL, C_VCON, C_NONE, C_NONE, C_REG, 50, 4, 0, 0, 0},
 
        /* encryption instructions */
-       {AAESD, C_VREG, C_NONE, C_VREG, 29, 4, 0, 0, 0}, // for compatibility with old code
-       {AAESD, C_ARNG, C_NONE, C_ARNG, 29, 4, 0, 0, 0}, // recommend using the new one for better readability
-       {ASHA1C, C_VREG, C_REG, C_VREG, 1, 4, 0, 0, 0},
-       {ASHA1C, C_ARNG, C_VREG, C_VREG, 1, 4, 0, 0, 0},
-       {ASHA1H, C_VREG, C_NONE, C_VREG, 29, 4, 0, 0, 0},
-       {ASHA1SU0, C_ARNG, C_ARNG, C_ARNG, 1, 4, 0, 0, 0},
-       {ASHA256H, C_ARNG, C_VREG, C_VREG, 1, 4, 0, 0, 0},
-       {AVREV32, C_ARNG, C_NONE, C_ARNG, 83, 4, 0, 0, 0},
-       {AVPMULL, C_ARNG, C_ARNG, C_ARNG, 93, 4, 0, 0, 0},
-
-       {obj.AUNDEF, C_NONE, C_NONE, C_NONE, 90, 4, 0, 0, 0},
-       {obj.APCDATA, C_VCON, C_NONE, C_VCON, 0, 0, 0, 0, 0},
-       {obj.AFUNCDATA, C_VCON, C_NONE, C_ADDR, 0, 0, 0, 0, 0},
-       {obj.ANOP, C_NONE, C_NONE, C_NONE, 0, 0, 0, 0, 0},
-       {obj.ADUFFZERO, C_NONE, C_NONE, C_SBRA, 5, 4, 0, 0, 0}, // same as AB/ABL
-       {obj.ADUFFCOPY, C_NONE, C_NONE, C_SBRA, 5, 4, 0, 0, 0}, // same as AB/ABL
-
-       {obj.AXXX, C_NONE, C_NONE, C_NONE, 0, 4, 0, 0, 0},
+       {AAESD, C_VREG, C_NONE, C_NONE, C_VREG, 29, 4, 0, 0, 0}, // for compatibility with old code
+       {AAESD, C_ARNG, C_NONE, C_NONE, C_ARNG, 29, 4, 0, 0, 0}, // recommend using the new one for better readability
+       {ASHA1C, C_VREG, C_REG, C_NONE, C_VREG, 1, 4, 0, 0, 0},
+       {ASHA1C, C_ARNG, C_VREG, C_NONE, C_VREG, 1, 4, 0, 0, 0},
+       {ASHA1H, C_VREG, C_NONE, C_NONE, C_VREG, 29, 4, 0, 0, 0},
+       {ASHA1SU0, C_ARNG, C_ARNG, C_NONE, C_ARNG, 1, 4, 0, 0, 0},
+       {ASHA256H, C_ARNG, C_VREG, C_NONE, C_VREG, 1, 4, 0, 0, 0},
+       {AVREV32, C_ARNG, C_NONE, C_NONE, C_ARNG, 83, 4, 0, 0, 0},
+       {AVPMULL, C_ARNG, C_ARNG, C_NONE, C_ARNG, 93, 4, 0, 0, 0},
+
+       {obj.AUNDEF, C_NONE, C_NONE, C_NONE, C_NONE, 90, 4, 0, 0, 0},
+       {obj.APCDATA, C_VCON, C_NONE, C_NONE, C_VCON, 0, 0, 0, 0, 0},
+       {obj.AFUNCDATA, C_VCON, C_NONE, C_NONE, C_ADDR, 0, 0, 0, 0, 0},
+       {obj.ANOP, C_NONE, C_NONE, C_NONE, C_NONE, 0, 0, 0, 0, 0},
+       {obj.ADUFFZERO, C_NONE, C_NONE, C_NONE, C_SBRA, 5, 4, 0, 0, 0}, // same as AB/ABL
+       {obj.ADUFFCOPY, C_NONE, C_NONE, C_NONE, C_SBRA, 5, 4, 0, 0, 0}, // same as AB/ABL
+
+       {obj.AXXX, C_NONE, C_NONE, C_NONE, C_NONE, 0, 4, 0, 0, 0},
 }
 
 /*
@@ -1569,20 +1573,30 @@ func (c *ctxt7) oplook(p *obj.Prog) *Optab {
        }
 
        a1--
-       a3 := int(p.To.Class)
-       if a3 == 0 {
-               a3 = c.aclass(&p.To) + 1
-               p.To.Class = int8(a3)
+       a3 := C_NONE + 1
+       if p.GetFrom3() != nil {
+               a3 = int(p.GetFrom3().Class)
+               if a3 == 0 {
+                       a3 = c.aclass(p.GetFrom3()) + 1
+                       p.GetFrom3().Class = int8(a3)
+               }
        }
 
        a3--
+       a4 := int(p.To.Class)
+       if a4 == 0 {
+               a4 = c.aclass(&p.To) + 1
+               p.To.Class = int8(a4)
+       }
+
+       a4--
        a2 := C_NONE
        if p.Reg != 0 {
                a2 = rclass(p.Reg)
        }
 
        if false {
-               fmt.Printf("oplook %v %d %d %d\n", p.As, a1, a2, a3)
+               fmt.Printf("oplook %v %d %d %d %d\n", p.As, a1, a2, a3, a4)
                fmt.Printf("\t\t%d %d\n", p.From.Type, p.To.Type)
        }
 
@@ -1590,18 +1604,19 @@ func (c *ctxt7) oplook(p *obj.Prog) *Optab {
        c1 := &xcmp[a1]
        c2 := &xcmp[a2]
        c3 := &xcmp[a3]
-       c4 := &xcmp[p.Scond>>5]
+       c4 := &xcmp[a4]
+       c5 := &xcmp[p.Scond>>5]
        for i := range ops {
                op := &ops[i]
-               if (int(op.a2) == a2 || c2[op.a2]) && c4[op.scond>>5] && c1[op.a1] && c3[op.a3] {
+               if (int(op.a2) == a2 || c2[op.a2]) && c5[op.scond>>5] && c1[op.a1] && c3[op.a3] && c4[op.a4] {
                        p.Optab = uint16(cap(optab) - cap(ops) + i + 1)
                        return op
                }
        }
 
-       c.ctxt.Diag("illegal combination: %v %v %v %v, %d %d", p, DRconv(a1), DRconv(a2), DRconv(a3), p.From.Type, p.To.Type)
+       c.ctxt.Diag("illegal combination: %v %v %v %v %v, %d %d", p, DRconv(a1), DRconv(a2), DRconv(a3), DRconv(a4), p.From.Type, p.To.Type)
        // Turn illegal instruction into an UNDEF, avoid crashing in asmout
-       return &Optab{obj.AUNDEF, C_NONE, C_NONE, C_NONE, 90, 4, 0, 0, 0}
+       return &Optab{obj.AUNDEF, C_NONE, C_NONE, C_NONE, C_NONE, 90, 4, 0, 0, 0}
 }
 
 func cmp(a int, b int) bool {
@@ -1878,6 +1893,9 @@ func (x ocmp) Less(i, j int) bool {
        if p1.a3 != p2.a3 {
                return p1.a3 < p2.a3
        }
+       if p1.a4 != p2.a4 {
+               return p1.a4 < p2.a4
+       }
        if p1.scond != p2.scond {
                return p1.scond < p2.scond
        }
@@ -2143,9 +2161,8 @@ func buildop(ctxt *obj.Link) {
                        oprangeset(ACSNEG, t)
                        oprangeset(ACSNEGW, t)
 
+               case ACINC:
                        // aliases Rm=Rn, !cond
-                       oprangeset(ACINC, t)
-
                        oprangeset(ACINCW, t)
                        oprangeset(ACINV, t)
                        oprangeset(ACINVW, t)
@@ -2822,7 +2839,7 @@ func (c *ctxt7) asmout(p *obj.Prog, o *Optab, out []uint32) {
 
                cond := int(p.From.Reg)
                if cond < COND_EQ || cond > COND_NV {
-                       c.ctxt.Diag("invalid condition\n%v", p)
+                       c.ctxt.Diag("invalid condition%v", p)
                } else {
                        cond -= COND_EQ
                }
@@ -2833,16 +2850,12 @@ func (c *ctxt7) asmout(p *obj.Prog, o *Optab, out []uint32) {
                        if p.From3Type() == obj.TYPE_NONE {
                                /* CINC/CINV/CNEG */
                                rf = r
-
                                cond ^= 1
                        } else {
                                rf = int(p.GetFrom3().Reg) /* CSEL */
                        }
                } else {
                        /* CSET */
-                       if p.From3Type() != obj.TYPE_NONE {
-                               c.ctxt.Diag("invalid combination\n%v", p)
-                       }
                        rf = REGZERO
                        r = rf
                        cond ^= 1
@@ -2882,7 +2895,7 @@ func (c *ctxt7) asmout(p *obj.Prog, o *Optab, out []uint32) {
                if v < 0 || v%sz != 0 { /* unscaled 9-bit signed */
                        o1 = c.olsr9s(p, int32(c.opstr9(p, p.As)), v, r, int(p.From.Reg))
                } else {
-                       v = int32(c.offsetshift(p, int64(v), int(o.a3)))
+                       v = int32(c.offsetshift(p, int64(v), int(o.a4)))
                        o1 = c.olsr12u(p, int32(c.opstr12(p, p.As)), v, r, int(p.From.Reg))
                }
 
@@ -3241,7 +3254,6 @@ func (c *ctxt7) asmout(p *obj.Prog, o *Optab, out []uint32) {
 
        case 43: /* bfm aliases */
                r := int(p.From.Offset)
-
                s := int(p.GetFrom3().Offset)
                rf := int(p.Reg)
                rt := int(p.To.Reg)
@@ -4258,10 +4270,6 @@ func (c *ctxt7) asmout(p *obj.Prog, o *Optab, out []uint32) {
                o1 |= ((Q & 1) << 30) | ((size & 3) << 22) | (uint32(rf&31) << 16) | (uint32(r&31) << 5) | uint32(rt&31)
 
        case 94: /* vext $imm4, Vm.<T>, Vn.<T>, Vd.<T> */
-               if p.From3Type() != obj.TYPE_REG {
-                       c.ctxt.Diag("illegal combination: %v", p)
-                       break
-               }
                af := int(((p.GetFrom3().Reg) >> 5) & 15)
                at := int((p.To.Reg >> 5) & 15)
                a := int((p.Reg >> 5) & 15)