]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/asm: sort test cases in the arm64.s file
authorfanzha02 <fannie.zhang@arm.com>
Fri, 16 Oct 2020 11:06:18 +0000 (19:06 +0800)
committerfannie zhang <Fannie.Zhang@arm.com>
Thu, 29 Oct 2020 04:12:30 +0000 (04:12 +0000)
This patch sorts the test cases in the arm64.s file by instruction
category and deletes comments related to the old parser.

Change-Id: I9bbf56281e247a4fd8d5e670e8ad67c923aef1ee
Reviewed-on: https://go-review.googlesource.com/c/go/+/263458
Trust: fannie zhang <Fannie.Zhang@arm.com>
Trust: Emmanuel Odeke <emmanuel@orijtech.com>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
src/cmd/asm/internal/asm/testdata/arm64.s

index b6c22e0d6f2f3d85fb71f01472ba4c453ee388d3..7943990e1671d9c41246a5fcbb267cd9badb7d39 100644 (file)
 
 TEXT   foo(SB), DUPOK|NOSPLIT, $-8
 
-//
-// ADD
-//
-//     LTYPE1 imsr ',' spreg ',' reg
-//     {
-//             outcode($1, &$2, $4, &$6);
-//     }
-// imsr comes from the old 7a, we only support immediates and registers
+
+// arithmetic operations
        ADDW    $1, R2, R3
        ADDW    R1, R2, R3
        ADDW    R1, ZR, R3
@@ -25,18 +19,29 @@ TEXT        foo(SB), DUPOK|NOSPLIT, $-8
        ADD     R1, R2, R3
        ADD     R1, ZR, R3
        ADD     $1, R2, R3
-       ADD     $0x000aaa, R2, R3 // ADD $2730, R2, R3     // 43a82a91
-       ADD     $0x000aaa, R2     // ADD $2730, R2         // 42a82a91
-       ADD     $0xaaa000, R2, R3 // ADD $11182080, R2, R3 // 43a86a91
-       ADD     $0xaaa000, R2     // ADD $11182080, R2     // 42a86a91
-       ADD     $0xaaaaaa, R2, R3 // ADD $11184810, R2, R3 // 43a82a9163a86a91
-       ADD     $0xaaaaaa, R2     // ADD $11184810, R2     // 42a82a9142a86a91
-       SUB     $0x000aaa, R2, R3 // SUB $2730, R2, R3     // 43a82ad1
-       SUB     $0x000aaa, R2     // SUB $2730, R2         // 42a82ad1
-       SUB     $0xaaa000, R2, R3 // SUB $11182080, R2, R3 // 43a86ad1
-       SUB     $0xaaa000, R2     // SUB $11182080, R2     // 42a86ad1
-       SUB     $0xaaaaaa, R2, R3 // SUB $11184810, R2, R3 // 43a82ad163a86ad1
-       SUB     $0xaaaaaa, R2     // SUB $11184810, R2     // 42a82ad142a86ad1
+       ADDW    $1, R2
+       ADDW    R1, R2
+       ADD     $1, R2
+       ADD     R1, R2
+       ADD     R1>>11, R2
+       ADD     R1<<22, R2
+       ADD     R1->33, R2
+       ADD     $0x000aaa, R2, R3               // ADD $2730, R2, R3                      // 43a82a91
+       ADD     $0x000aaa, R2                   // ADD $2730, R2                          // 42a82a91
+       ADD     $0xaaa000, R2, R3               // ADD $11182080, R2, R3                  // 43a86a91
+       ADD     $0xaaa000, R2                   // ADD $11182080, R2                      // 42a86a91
+       ADD     $0xaaaaaa, R2, R3               // ADD $11184810, R2, R3                  // 43a82a9163a86a91
+       ADD     $0xaaaaaa, R2                   // ADD $11184810, R2                      // 42a82a9142a86a91
+       SUB     $0x000aaa, R2, R3               // SUB $2730, R2, R3                      // 43a82ad1
+       SUB     $0x000aaa, R2                   // SUB $2730, R2                          // 42a82ad1
+       SUB     $0xaaa000, R2, R3               // SUB $11182080, R2, R3                  // 43a86ad1
+       SUB     $0xaaa000, R2                   // SUB $11182080, R2                      // 42a86ad1
+       SUB     $0xaaaaaa, R2, R3               // SUB $11184810, R2, R3                  // 43a82ad163a86ad1
+       SUB     $0xaaaaaa, R2                   // SUB $11184810, R2                      // 42a82ad142a86ad1
+       ADDW    $0x60060, R2                    // ADDW $393312, R2                       // 4280011142804111
+       ADD     $0x186a0, R2, R5                // ADD  $100000, R2, R5                   // 45801a91a5604091
+       SUB     $0xe7791f700, R3, R1            // SUB  $62135596800, R3, R1              // 1be09ed23bf2aef2db01c0f261001bcb
+       ADD     $0x3fffffffc000, R5             // ADD  $70368744161280, R5               // fb7f72b2a5001b8b
        ADD     R1>>11, R2, R3
        ADD     R1<<22, R2, R3
        ADD     R1->33, R2, R3
@@ -59,6 +64,30 @@ TEXT foo(SB), DUPOK|NOSPLIT, $-8
        CMN     R1.SXTX<<2, R10                 // 5fe921ab
        CMPW    R2.UXTH<<3, R11                 // 7f2d226b
        CMNW    R1.SXTB, R9                     // 3f81212b
+       CMPW    $0x60060, R2                    // CMPW $393312, R2                       // 1b0c8052db00a0725f001b6b
+       CMPW    $40960, R0                      // 1f284071
+       CMPW    $27745, R2                      // 3b8c8d525f001b6b
+       CMNW    $0x3fffffc0, R2                 // CMNW $1073741760, R2                   // fb5f1a325f001b2b
+       CMPW    $0xffff0, R1                    // CMPW $1048560, R1                      // fb3f1c323f001b6b
+       CMP     $0xffffffffffa0, R3             // CMP  $281474976710560, R3              // fb0b80921b00e0f27f001beb
+       CMP     $0xf4240, R1                    // CMP  $1000000, R1                      // 1b4888d2fb01a0f23f001beb
+       CMP     $3343198598084851058, R3        // 5bae8ed2db8daef23badcdf2bbcce5f27f001beb
+       CMP     $3, R2
+       CMP     R1, R2
+       CMP     R1->11, R2
+       CMP     R1>>22, R2
+       CMP     R1<<33, R2
+       CMP     R22.SXTX, RSP                    // ffe336eb
+       CMP     $0x22220000, RSP                 // CMP $572653568, RSP   // 5b44a4d2ff633beb
+       CMPW    $0x22220000, RSP                 // CMPW $572653568, RSP  // 5b44a452ff633b6b
+       CCMN    MI, ZR, R1, $4                   // e44341ba
+       // MADD Rn,Rm,Ra,Rd
+       MADD    R1, R2, R3, R4                   // 6408019b
+       // CLS
+       CLSW    R1, R2
+       CLS     R1, R2
+
+// fp/simd instructions.
        VADDP   V1.B16, V2.B16, V3.B16          // 43bc214e
        VADDP   V1.S4, V2.S4, V3.S4             // 43bca14e
        VADDP   V1.D2, V2.D2, V3.D2             // 43bce14e
@@ -67,22 +96,6 @@ TEXT foo(SB), DUPOK|NOSPLIT, $-8
        VORR    V5.B16, V4.B16, V3.B16          // 831ca54e
        VADD    V16.S4, V5.S4, V9.S4            // a984b04e
        VEOR    V0.B16, V1.B16, V0.B16          // 201c206e
-       SHA256H V9.S4, V3, V2                   // 6240095e
-       SHA256H2        V9.S4, V4, V3           // 8350095e
-       SHA256SU0       V8.S4, V7.S4            // 0729285e
-       SHA256SU1       V6.S4, V5.S4, V7.S4     // a760065e
-       SHA1SU0 V11.S4, V8.S4, V6.S4            // 06310b5e
-       SHA1SU1 V5.S4, V1.S4                    // a118285e
-       SHA1C   V1.S4, V2, V3                   // 4300015e
-       SHA1H   V5, V4                          // a408285e
-       SHA1M   V8.S4, V7, V6                   // e620085e
-       SHA1P   V11.S4, V10, V9                 // 49110b5e
-       SHA512H V2.D2, V1, V0                   // 208062ce
-       SHA512H2        V4.D2, V3, V2           // 628464ce
-       SHA512SU0       V9.D2, V8.D2            // 2881c0ce
-       SHA512SU1       V7.D2, V6.D2, V5.D2     // c58867ce
-       VRAX1   V26.D2, V29.D2, V30.D2          // be8f7ace
-       VXAR    $63, V27.D2, V21.D2, V26.D2     // bafe9bce
        VADDV   V0.S4, V0                       // 00b8b14e
        VMOVI   $82, V0.B16                     // 40e6024f
        VUADDLV V6.B16, V6                      // c638306e
@@ -96,10 +109,6 @@ TEXT        foo(SB), DUPOK|NOSPLIT, $-8
        VFMLS   V1.D2, V12.D2, V1.D2            // 81cde14e
        VFMLS   V1.S2, V12.S2, V1.S2            // 81cda10e
        VFMLS   V1.S4, V12.S4, V1.S4            // 81cda14e
-       VPMULL  V2.D1, V1.D1, V3.Q1             // 23e0e20e
-       VPMULL2 V2.D2, V1.D2, V4.Q1             // 24e0e24e
-       VPMULL  V2.B8, V1.B8, V3.H8             // 23e0220e
-       VPMULL2 V2.B16, V1.B16, V4.H8           // 24e0224e
        VEXT    $4, V2.B8, V1.B8, V3.B8         // 2320022e
        VEXT    $8, V2.B16, V1.B16, V3.B16      // 2340026e
        VRBIT   V24.B16, V24.B16                // 185b606e
@@ -125,6 +134,14 @@ TEXT       foo(SB), DUPOK|NOSPLIT, $-8
        VSRI    $8, V1.H8, V2.H8                // 2244186f
        VSRI    $2, V1.B8, V2.B8                // 22440e2f
        VSRI    $2, V1.B16, V2.B16              // 22440e6f
+       VSLI    $7, V2.B16, V3.B16              // 43540f6f
+       VSLI    $15, V3.H4, V4.H4               // 64541f2f
+       VSLI    $31, V5.S4, V6.S4               // a6543f6f
+       VSLI    $63, V7.D2, V8.D2               // e8547f6f
+       VUSRA   $8, V2.B16, V3.B16              // 4314086f
+       VUSRA   $16, V3.H4, V4.H4               // 6414102f
+       VUSRA   $32, V5.S4, V6.S4               // a614206f
+       VUSRA   $64, V7.D2, V8.D2               // e814406f
        VTBL    V22.B16, [V28.B16, V29.B16], V11.B16                                    // 8b23164e
        VTBL    V18.B8, [V17.B16, V18.B16, V19.B16], V22.B8                             // 3642120e
        VTBL    V31.B8, [V14.B16, V15.B16, V16.B16, V17.B16], V15.B8                    // cf611f0e
@@ -141,8 +158,6 @@ TEXT        foo(SB), DUPOK|NOSPLIT, $-8
        VTBL    V14.B16, [V3.B16, V4.B16, V5.B16], V17.B16                              // 71400e4e
        VTBL    V13.B16, [V29.B16, V30.B16, V31.B16, V0.B16], V28.B16                   // bc630d4e
        VTBL    V3.B8, [V27.B16], V8.B8                                                 // 6803030e
-       VEOR3   V2.B16, V7.B16, V12.B16, V25.B16                                        // 990907ce
-       VBCAX   V1.B16, V2.B16, V26.B16, V31.B16                                        // 5f0722ce
        VZIP1   V16.H8, V3.H8, V19.H8           // 7338504e
        VZIP2   V22.D2, V25.D2, V21.D2          // 357bd64e
        VZIP1   V6.D2, V9.D2, V11.D2            // 2b39c64e
@@ -180,114 +195,95 @@ TEXT     foo(SB), DUPOK|NOSPLIT, $-8
        VUSHLL2 $31, V30.S4, V2.D2              // c2a73f6f
        VBIF    V0.B8, V30.B8, V1.B8            // c11fe02e
        VBIF    V30.B16, V0.B16, V2.B16         // 021cfe6e
-       MOVD    (R2)(R6.SXTW), R4               // 44c866f8
-       MOVD    (R3)(R6), R5                    // MOVD (R3)(R6*1), R5                  // 656866f8
-       MOVD    (R2)(R6), R4                    // MOVD (R2)(R6*1), R4                  // 446866f8
-       MOVWU   (R19)(R20<<2), R20              // 747a74b8
-       MOVD    (R2)(R6<<3), R4                 // 447866f8
-       MOVD    (R3)(R7.SXTX<<3), R8            // 68f867f8
-       MOVWU   (R5)(R4.UXTW), R10              // aa4864b8
-       MOVBU   (R3)(R9.UXTW), R8               // 68486938
-       MOVBU   (R5)(R8), R10                   // MOVBU        (R5)(R8*1), R10         // aa686838
-       MOVHU   (R2)(R7.SXTW<<1), R11           // 4bd86778
-       MOVHU   (R1)(R2<<1), R5                 // 25786278
-       MOVB    (R9)(R3.UXTW), R6               // 2649a338
-       MOVB    (R10)(R6), R15                  // MOVB (R10)(R6*1), R15                // 4f69a638
-       MOVH    (R5)(R7.SXTX<<1), R19           // b3f8a778
-       MOVH    (R8)(R4<<1), R10                // 0a79a478
-       MOVW    (R9)(R8.SXTW<<2), R19           // 33d9a8b8
-       MOVW    (R1)(R4.SXTX), R11              // 2be8a4b8
-       MOVW    (R1)(R4.SXTX), ZR               // 3fe8a4b8
-       MOVW    (R2)(R5), R12                   // MOVW (R2)(R5*1), R12                  // 4c68a5b8
-       MOVD    R5, (R2)(R6<<3)                 // 457826f8
-       MOVD    R9, (R6)(R7.SXTX<<3)            // c9f827f8
-       MOVD    ZR, (R6)(R7.SXTX<<3)            // dff827f8
-       MOVW    R8, (R2)(R3.UXTW<<2)            // 485823b8
-       MOVW    R7, (R3)(R4.SXTW)               // 67c824b8
-       MOVB    R4, (R2)(R6.SXTX)               // 44e82638
-       MOVB    R8, (R3)(R9.UXTW)               // 68482938
-       MOVB    R10, (R5)(R8)                   // MOVB R10, (R5)(R8*1)                  // aa682838
-       MOVH    R11, (R2)(R7.SXTW<<1)           // 4bd82778
-       MOVH    R5, (R1)(R2<<1)                 // 25782278
-       MOVH    R7, (R2)(R5.SXTX<<1)            // 47f82578
-       MOVH    R8, (R3)(R6.UXTW)               // 68482678
-       MOVB    (R29)(R30<<0), R14              // ae7bbe38
-       MOVB    (R29)(R30), R14                 // MOVB (R29)(R30*1), R14                // ae6bbe38
-       MOVB    R4, (R2)(R6.SXTX)               // 44e82638
        FMOVS   $(4.0), F0                      // 0010221e
        FMOVD   $(4.0), F0                      // 0010621e
        FMOVS   $(0.265625), F1                 // 01302a1e
        FMOVD   $(0.1796875), F2                // 02f0681e
        FMOVS   $(0.96875), F3                  // 03f02d1e
        FMOVD   $(28.0), F4                     // 0490671e
+       VUADDW  V9.B8, V12.H8, V14.H8           // 8e11292e
+       VUADDW  V13.H4, V10.S4, V11.S4          // 4b116d2e
+       VUADDW  V21.S2, V24.D2, V29.D2          // 1d13b52e
+       VUADDW2 V9.B16, V12.H8, V14.H8          // 8e11296e
+       VUADDW2 V13.H8, V20.S4, V30.S4          // 9e126d6e
+       VUADDW2 V21.S4, V24.D2, V29.D2          // 1d13b56e
+       FCCMPS  LT, F1, F2, $1                  // 41b4211e
+       FMADDS  F1, F3, F2, F4                  // 440c011f
+       FMADDD  F4, F5, F4, F4                  // 8414441f
+       FMSUBS  F13, F21, F13, F19              // b3d50d1f
+       FMSUBD  F11, F7, F15, F31               // ff9d4b1f
+       FNMADDS F1, F3, F2, F4                  // 440c211f
+       FNMADDD F1, F3, F2, F4                  // 440c611f
+       FNMSUBS F1, F3, F2, F4                  // 448c211f
+       FNMSUBD F1, F3, F2, F4                  // 448c611f
+       FADDS   F2, F3, F4                      // 6428221e
+       FADDD   F1, F2                          // 4228611e
+       VDUP    V19.S[0], V17.S4                // 7106044e
 
-// move a large constant to a Vd.
-       VMOVS   $0x80402010, V11                                      // VMOVS  $2151686160, V11
-       VMOVD   $0x8040201008040201, V20                              // VMOVD  $-9205322385119247871, V20
-       VMOVQ   $0x7040201008040201, $0x8040201008040201, V10         // VMOVQ  $8088500183983456769, $-9205322385119247871, V10
-       VMOVQ   $0x8040201008040202, $0x7040201008040201, V20         // VMOVQ  $-9205322385119247870, $8088500183983456769, V20
 
-       FMOVS   (R2)(R6), F4       // FMOVS (R2)(R6*1), F4    // 446866bc
-       FMOVS   (R2)(R6<<2), F4                               // 447866bc
-       FMOVD   (R2)(R6), F4       // FMOVD (R2)(R6*1), F4    // 446866fc
-       FMOVD   (R2)(R6<<3), F4                               // 447866fc
-       FMOVS   F4, (R2)(R6)       // FMOVS F4, (R2)(R6*1)    // 446826bc
-       FMOVS   F4, (R2)(R6<<2)                               // 447826bc
-       FMOVD   F4, (R2)(R6)       // FMOVD F4, (R2)(R6*1)    // 446826fc
-       FMOVD   F4, (R2)(R6<<3)                               // 447826fc
+// special
+       PRFM    (R2), PLDL1KEEP                 // 400080f9
+       PRFM    16(R2), PLDL1KEEP               // 400880f9
+       PRFM    48(R6), PSTL2STRM               // d31880f9
+       PRFM    8(R12), PLIL3STRM               // 8d0580f9
+       PRFM    (R8), $25                       // 190180f9
+       PRFM    8(R9), $30                      // 3e0580f9
+       NOOP                                    // 1f2003d5
+       HINT $0                                 // 1f2003d5
+       DMB     $1
+       SVC
 
-       CMPW    $40960, R0                      // 1f284071
-       CMPW    $27745, R2                      // 3b8c8d525f001b6b
-       CMNW    $0x3fffffc0, R2                 // CMNW $1073741760, R2                   // fb5f1a325f001b2b
-       CMPW    $0xffff0, R1                    // CMPW $1048560, R1                      // fb3f1c323f001b6b
-       CMP     $0xffffffffffa0, R3             // CMP  $281474976710560, R3              // fb0b80921b00e0f27f001beb
-       CMP     $0xf4240, R1                    // CMP  $1000000, R1                      // 1b4888d2fb01a0f23f001beb
-       ADD     $0x186a0, R2, R5                // ADD  $100000, R2, R5                   // 45801a91a5604091
-       SUB     $0xe7791f700, R3, R1            // SUB  $62135596800, R3, R1              // 1be09ed23bf2aef2db01c0f261001bcb
-       CMP     $3343198598084851058, R3        // 5bae8ed2db8daef23badcdf2bbcce5f27f001beb
-       ADD     $0x3fffffffc000, R5             // ADD  $70368744161280, R5               // fb7f72b2a5001b8b
-//     LTYPE1 imsr ',' spreg ','
-//     {
-//             outcode($1, &$2, $4, &nullgen);
-//     }
-//     LTYPE1 imsr ',' reg
-//     {
-//             outcode($1, &$2, NREG, &$4);
-//     }
-       ADDW    $1, R2
-       ADDW    R1, R2
-       ADD     $1, R2
-       ADD     R1, R2
-       ADD     R1>>11, R2
-       ADD     R1<<22, R2
-       ADD     R1->33, R2
-       AND     R1@>33, R2
+// encryption
+       SHA256H V9.S4, V3, V2                   // 6240095e
+       SHA256H2        V9.S4, V4, V3           // 8350095e
+       SHA256SU0       V8.S4, V7.S4            // 0729285e
+       SHA256SU1       V6.S4, V5.S4, V7.S4     // a760065e
+       SHA1SU0 V11.S4, V8.S4, V6.S4            // 06310b5e
+       SHA1SU1 V5.S4, V1.S4                    // a118285e
+       SHA1C   V1.S4, V2, V3                   // 4300015e
+       SHA1H   V5, V4                          // a408285e
+       SHA1M   V8.S4, V7, V6                   // e620085e
+       SHA1P   V11.S4, V10, V9                 // 49110b5e
+       SHA512H V2.D2, V1, V0                   // 208062ce
+       SHA512H2        V4.D2, V3, V2           // 628464ce
+       SHA512SU0       V9.D2, V8.D2            // 2881c0ce
+       SHA512SU1       V7.D2, V6.D2, V5.D2     // c58867ce
+       VRAX1   V26.D2, V29.D2, V30.D2          // be8f7ace
+       VXAR    $63, V27.D2, V21.D2, V26.D2     // bafe9bce
+       VPMULL  V2.D1, V1.D1, V3.Q1             // 23e0e20e
+       VPMULL2 V2.D2, V1.D2, V4.Q1             // 24e0e24e
+       VPMULL  V2.B8, V1.B8, V3.H8             // 23e0220e
+       VPMULL2 V2.B16, V1.B16, V4.H8           // 24e0224e
+       VEOR3   V2.B16, V7.B16, V12.B16, V25.B16            // 990907ce
+       VBCAX   V1.B16, V2.B16, V26.B16, V31.B16            // 5f0722ce
+       VREV32  V5.B16, V5.B16                  // a508206e
+       VREV64  V2.S2, V3.S2                    // 4308a00e
+       VREV64  V2.S4, V3.S4                    // 4308a04e
 
 // logical ops
+//
 // make sure constants get encoded into an instruction when it could
-       AND     $(1<<63), R1   // AND   $-9223372036854775808, R1 // 21004192
-       AND     $(1<<63-1), R1 // AND   $9223372036854775807, R1  // 21f84092
-       ORR     $(1<<63), R1   // ORR   $-9223372036854775808, R1 // 210041b2
-       ORR     $(1<<63-1), R1 // ORR   $9223372036854775807, R1  // 21f840b2
-       EOR     $(1<<63), R1   // EOR   $-9223372036854775808, R1 // 210041d2
-       EOR     $(1<<63-1), R1 // EOR   $9223372036854775807, R1  // 21f840d2
-
-       ANDW    $0x3ff00000, R2 // ANDW $1072693248, R2 // 42240c12
-       BICW    $0x3ff00000, R2 // BICW $1072693248, R2 // 42540212
-       ORRW    $0x3ff00000, R2 // ORRW $1072693248, R2 // 42240c32
-       ORNW    $0x3ff00000, R2 // ORNW $1072693248, R2 // 42540232
-       EORW    $0x3ff00000, R2 // EORW $1072693248, R2 // 42240c52
-       EONW    $0x3ff00000, R2 // EONW $1072693248, R2 // 42540252
-
-       AND     $0x22220000, R3, R4   // AND $572653568, R3, R4   // 5b44a4d264001b8a
-       ORR     $0x22220000, R3, R4   // ORR $572653568, R3, R4   // 5b44a4d264001baa
-       EOR     $0x22220000, R3, R4   // EOR $572653568, R3, R4   // 5b44a4d264001bca
-       BIC     $0x22220000, R3, R4   // BIC $572653568, R3, R4   // 5b44a4d264003b8a
-       ORN     $0x22220000, R3, R4   // ORN $572653568, R3, R4   // 5b44a4d264003baa
-       EON     $0x22220000, R3, R4   // EON $572653568, R3, R4   // 5b44a4d264003bca
-       ANDS    $0x22220000, R3, R4   // ANDS $572653568, R3, R4  // 5b44a4d264001bea
-       BICS    $0x22220000, R3, R4   // BICS $572653568, R3, R4  // 5b44a4d264003bea
-
+       AND     R1@>33, R2
+       AND     $(1<<63), R1                        // AND      $-9223372036854775808, R1       // 21004192
+       AND     $(1<<63-1), R1                      // AND      $9223372036854775807, R1        // 21f84092
+       ORR     $(1<<63), R1                        // ORR      $-9223372036854775808, R1       // 210041b2
+       ORR     $(1<<63-1), R1                      // ORR      $9223372036854775807, R1        // 21f840b2
+       EOR     $(1<<63), R1                        // EOR      $-9223372036854775808, R1       // 210041d2
+       EOR     $(1<<63-1), R1                      // EOR      $9223372036854775807, R1        // 21f840d2
+       ANDW    $0x3ff00000, R2                     // ANDW     $1072693248, R2                 // 42240c12
+       BICW    $0x3ff00000, R2                     // BICW     $1072693248, R2                 // 42540212
+       ORRW    $0x3ff00000, R2                     // ORRW     $1072693248, R2                 // 42240c32
+       ORNW    $0x3ff00000, R2                     // ORNW     $1072693248, R2                 // 42540232
+       EORW    $0x3ff00000, R2                     // EORW     $1072693248, R2                 // 42240c52
+       EONW    $0x3ff00000, R2                     // EONW     $1072693248, R2                 // 42540252
+       AND     $0x22220000, R3, R4                 // AND      $572653568, R3, R4              // 5b44a4d264001b8a
+       ORR     $0x22220000, R3, R4                 // ORR      $572653568, R3, R4              // 5b44a4d264001baa
+       EOR     $0x22220000, R3, R4                 // EOR      $572653568, R3, R4              // 5b44a4d264001bca
+       BIC     $0x22220000, R3, R4                 // BIC      $572653568, R3, R4              // 5b44a4d264003b8a
+       ORN     $0x22220000, R3, R4                 // ORN      $572653568, R3, R4              // 5b44a4d264003baa
+       EON     $0x22220000, R3, R4                 // EON      $572653568, R3, R4              // 5b44a4d264003bca
+       ANDS    $0x22220000, R3, R4                 // ANDS     $572653568, R3, R4              // 5b44a4d264001bea
+       BICS    $0x22220000, R3, R4                 // BICS     $572653568, R3, R4              // 5b44a4d264003bea
        EOR     $0xe03fffffffffffff, R20, R22       // EOR      $-2287828610704211969, R20, R22 // 96e243d2
        TSTW    $0x600000006, R1                    // TSTW     $25769803782, R1                // 3f041f72
        TST     $0x4900000049, R0                   // TST      $313532612681, R0               // 3b0980d23b09c0f21f001bea
@@ -316,19 +312,22 @@ TEXT      foo(SB), DUPOK|NOSPLIT, $-8
        EONW    $0x6006000060060, R5                // EONW     $1689262177517664, R5           // 1b0c8052db00a072a5003b4a
        ORNW    $0x6006000060060, R5                // ORNW     $1689262177517664, R5           // 1b0c8052db00a072a5003b2a
        BICSW   $0x6006000060060, R5                // BICSW    $1689262177517664, R5           // 1b0c8052db00a072a5003b6a
-       ADDW    $0x60060, R2                        // ADDW     $393312, R2                     // 4280011142804111
-       CMPW    $0x60060, R2                        // CMPW     $393312, R2                     // 1b0c8052db00a0725f001b6b
-
        // TODO: this could have better encoding
-       ANDW    $-1, R10 // 1b0080124a011b0a
-
-       AND     $8, R0, RSP // 1f007d92
-       ORR     $8, R0, RSP // 1f007db2
-       EOR     $8, R0, RSP // 1f007dd2
-       BIC     $8, R0, RSP // 1ff87c92
-       ORN     $8, R0, RSP // 1ff87cb2
-       EON     $8, R0, RSP // 1ff87cd2
+       ANDW    $-1, R10                            // 1b0080124a011b0a
+       AND     $8, R0, RSP                         // 1f007d92
+       ORR     $8, R0, RSP                         // 1f007db2
+       EOR     $8, R0, RSP                         // 1f007dd2
+       BIC     $8, R0, RSP                         // 1ff87c92
+       ORN     $8, R0, RSP                         // 1ff87cb2
+       EON     $8, R0, RSP                         // 1ff87cd2
+       TST     $15, R2                             // 5f0c40f2
+       TST     R1, R2                              // 5f0001ea
+       TST     R1->11, R2                          // 5f2c81ea
+       TST     R1>>22, R2                          // 5f5841ea
+       TST     R1<<33, R2                          // 5f8401ea
+       TST     $0x22220000, R3                     // TST $572653568, R3           // 5b44a4d27f001bea
 
+// move an immediate to a Rn.
        MOVD    $0x3fffffffc000, R0           // MOVD   $70368744161280, R0         // e07f72b2
        MOVW    $1000000, R4                  // 04488852e401a072
        MOVW    $0xaaaa0000, R1               // MOVW   $2863267840, R1             // 4155b552
@@ -348,46 +347,37 @@ TEXT      foo(SB), DUPOK|NOSPLIT, $-8
        MOVD    $-1, R1                       // 01008092
        MOVD    $0x210000, R0                 // MOVD   $2162688, R0                // 2004a0d2
        MOVD    $0xffffffffffffaaaa, R1       // MOVD   $-21846, R1                 // a1aa8a92
+       MOVW    $1, ZR
+       MOVW    $1, R1
+       MOVD    $1, ZR
+       MOVD    $1, R1
+       MOVK    $1, R1
+
+// move a large constant to a Vd.
+       VMOVS   $0x80402010, V11                                      // VMOVS  $2151686160, V11
+       VMOVD   $0x8040201008040201, V20                              // VMOVD  $-9205322385119247871, V20
+       VMOVQ   $0x7040201008040201, $0x8040201008040201, V10         // VMOVQ  $8088500183983456769, $-9205322385119247871, V10
+       VMOVQ   $0x8040201008040202, $0x7040201008040201, V20         // VMOVQ  $-9205322385119247870, $8088500183983456769, V20
 
+// mov(to/from sp)
        MOVD    $0x1002(RSP), R1              // MOVD   $4098(RSP), R1              // fb074091610b0091
        MOVD    $0x1708(RSP), RSP             // MOVD   $5896(RSP), RSP             // fb0740917f231c91
        MOVD    $0x2001(R7), R1               // MOVD   $8193(R7), R1               // fb08409161070091
        MOVD    $0xffffff(R7), R1             // MOVD   $16777215(R7), R1           // fbfc7f9161ff3f91
-
        MOVD    $-0x1(R7), R1                 // MOVD   $-1(R7), R1                 // e10400d1
        MOVD    $-0x30(R7), R1                // MOVD   $-48(R7), R1                // e1c000d1
        MOVD    $-0x708(R7), R1               // MOVD   $-1800(R7), R1              // e1201cd1
        MOVD    $-0x2000(RSP), R1             // MOVD   $-8192(RSP), R1             // e10b40d1
        MOVD    $-0x10000(RSP), RSP           // MOVD   $-65536(RSP), RSP           // ff4340d1
-
-//
-// CLS
-//
-//     LTYPE2 imsr ',' reg
-//     {
-//             outcode($1, &$2, NREG, &$4);
-//     }
-       CLSW    R1, R2
-       CLS     R1, R2
-
-//
-// MOV
-//
-//     LTYPE3 addr ',' addr
-//     {
-//             outcode($1, &$2, NREG, &$4);
-//     }
        MOVW    R1, R2
        MOVW    ZR, R1
        MOVW    R1, ZR
-       MOVW    $1, ZR
-       MOVW    $1, R1
-       MOVW    ZR, (R1)
        MOVD    R1, R2
        MOVD    ZR, R1
-       MOVD    $1, ZR
-       MOVD    $1, R1
-       MOVD    ZR, (R1)
+
+// store and load
+//
+// LD1/ST1
        VLD1    (R8), [V1.B16, V2.B16]                          // 01a1404c
        VLD1.P  (R3), [V31.H8, V0.H8]                           // 7fa4df4c
        VLD1.P  (R8)(R20), [V21.B16, V22.B16]                   // VLD1.P       (R8)(R20*1), [V21.B16,V22.B16] // 15a1d44c
@@ -445,45 +435,21 @@ TEXT      foo(SB), DUPOK|NOSPLIT, $-8
        VST4    [V22.D2, V23.D2, V24.D2, V25.D2], (R3)          // 760c004c
        VST4.P  [V14.D2, V15.D2, V16.D2, V17.D2], 64(R15)       // ee0d9f4c
        VST4.P  [V24.B8, V25.B8, V26.B8, V27.B8], (R3)(R23)     // VST4.P       [V24.B8, V25.B8, V26.B8, V27.B8], (R3)(R23*1) // 7800970c
-       FMOVS   F20, (R0)                                       // 140000bd
+
+// pre/post-indexed
        FMOVS.P F20, 4(R0)                                      // 144400bc
        FMOVS.W F20, 4(R0)                                      // 144c00bc
-       FMOVS   (R0), F20                                       // 140040bd
-       FMOVS.P 8(R0), F20                                      // 148440bc
-       FMOVS.W 8(R0), F20                                      // 148c40bc
-       FMOVD   F20, (R2)                                       // 540000fd
        FMOVD.P F20, 8(R1)                                      // 348400fc
-       FMOVD.W 8(R1), F20                                      // 348c40fc
        FMOVQ.P F13, 11(R10)                                    // 4db5803c
        FMOVQ.W F15, 11(R20)                                    // 8fbe803c
+
+       FMOVS.P 8(R0), F20                                      // 148440bc
+       FMOVS.W 8(R0), F20                                      // 148c40bc
+       FMOVD.W 8(R1), F20                                      // 348c40fc
        FMOVQ.P 11(R10), F13                                    // 4db5c03c
        FMOVQ.W 11(R20), F15                                    // 8fbec03c
-       FMOVQ   F10, 65520(R10)                                 // 4afdbf3d
-       FMOVQ   F11, 64(RSP)                                    // eb13803d
-       FMOVQ   F11, 8(R20)                                     // 8b82803c
-       FMOVQ   F11, 4(R20)                                     // 8b42803c
-       FMOVQ   32(R5), F2                                      // a208c03d
-       FMOVQ   65520(R10), F10                                 // 4afdff3d
-       FMOVQ   64(RSP), F11                                    // eb13c03d
-       PRFM    (R2), PLDL1KEEP                                 // 400080f9
-       PRFM    16(R2), PLDL1KEEP                               // 400880f9
-       PRFM    48(R6), PSTL2STRM                               // d31880f9
-       PRFM    8(R12), PLIL3STRM                               // 8d0580f9
-       PRFM    (R8), $25                                       // 190180f9
-       PRFM    8(R9), $30                                      // 3e0580f9
 
-       // small offset fits into instructions
-       MOVB    1(R1), R2 // 22048039
-       MOVH    1(R1), R2 // 22108078
-       MOVH    2(R1), R2 // 22048079
-       MOVW    1(R1), R2 // 221080b8
-       MOVW    4(R1), R2 // 220480b9
-       MOVD    1(R1), R2 // 221040f8
-       MOVD    8(R1), R2 // 220440f9
-       FMOVS   1(R1), F2 // 221040bc
-       FMOVS   4(R1), F2 // 220440bd
-       FMOVD   1(R1), F2 // 221040fc
-       FMOVD   8(R1), F2 // 220440fd
+// small offset fits into instructions
        MOVB    R1, 1(R2) // 41040039
        MOVH    R1, 1(R2) // 41100078
        MOVH    R1, 2(R2) // 41040079
@@ -491,18 +457,37 @@ TEXT      foo(SB), DUPOK|NOSPLIT, $-8
        MOVW    R1, 4(R2) // 410400b9
        MOVD    R1, 1(R2) // 411000f8
        MOVD    R1, 8(R2) // 410400f9
+       MOVD    ZR, (R1)
+       MOVW    ZR, (R1)
        FMOVS   F1, 1(R2) // 411000bc
        FMOVS   F1, 4(R2) // 410400bd
+       FMOVS   F20, (R0) // 140000bd
        FMOVD   F1, 1(R2) // 411000fc
        FMOVD   F1, 8(R2) // 410400fd
+       FMOVD   F20, (R2) // 540000fd
+       FMOVQ   F0, 32(R5)// a008803d
+       FMOVQ   F10, 65520(R10) // 4afdbf3d
+       FMOVQ   F11, 64(RSP)    // eb13803d
+       FMOVQ   F11, 8(R20)     // 8b82803c
+       FMOVQ   F11, 4(R20)     // 8b42803c
 
-       // large aligned offset, use two instructions
-       MOVB    0x1001(R1), R2 // MOVB  4097(R1), R2  // 3b04409162078039
-       MOVH    0x2002(R1), R2 // MOVH  8194(R1), R2  // 3b08409162078079
-       MOVW    0x4004(R1), R2 // MOVW  16388(R1), R2 // 3b104091620780b9
-       MOVD    0x8008(R1), R2 // MOVD  32776(R1), R2 // 3b204091620740f9
-       FMOVS   0x4004(R1), F2 // FMOVS 16388(R1), F2 // 3b104091620740bd
-       FMOVD   0x8008(R1), F2 // FMOVD 32776(R1), F2 // 3b204091620740fd
+       MOVB    1(R1), R2 // 22048039
+       MOVH    1(R1), R2 // 22108078
+       MOVH    2(R1), R2 // 22048079
+       MOVW    1(R1), R2 // 221080b8
+       MOVW    4(R1), R2 // 220480b9
+       MOVD    1(R1), R2 // 221040f8
+       MOVD    8(R1), R2 // 220440f9
+       FMOVS   (R0), F20 // 140040bd
+       FMOVS   1(R1), F2 // 221040bc
+       FMOVS   4(R1), F2 // 220440bd
+       FMOVD   1(R1), F2 // 221040fc
+       FMOVD   8(R1), F2 // 220440fd
+       FMOVQ   32(R5), F2 // a208c03d
+       FMOVQ   65520(R10), F10 // 4afdff3d
+       FMOVQ   64(RSP), F11    // eb13c03d
+
+// large aligned offset, use two instructions(add+ldr/store).
        MOVB    R1, 0x1001(R2) // MOVB  R1, 4097(R2)  // 5b04409161070039
        MOVH    R1, 0x2002(R2) // MOVH  R1, 8194(R2)  // 5b08409161070079
        MOVW    R1, 0x4004(R2) // MOVW  R1, 16388(R2) // 5b104091610700b9
@@ -510,15 +495,16 @@ TEXT      foo(SB), DUPOK|NOSPLIT, $-8
        FMOVS   F1, 0x4004(R2) // FMOVS F1, 16388(R2) // 5b104091610700bd
        FMOVD   F1, 0x8008(R2) // FMOVD F1, 32776(R2) // 5b204091610700fd
 
-       // very large or unaligned offset uses constant pool
-       // the encoding cannot be checked as the address of the constant pool is unknown.
-       // here we only test that they can be assembled.
-       MOVB    0x44332211(R1), R2 // MOVB      1144201745(R1), R2
-       MOVH    0x44332211(R1), R2 // MOVH      1144201745(R1), R2
-       MOVW    0x44332211(R1), R2 // MOVW      1144201745(R1), R2
-       MOVD    0x44332211(R1), R2 // MOVD      1144201745(R1), R2
-       FMOVS   0x44332211(R1), F2 // FMOVS     1144201745(R1), F2
-       FMOVD   0x44332211(R1), F2 // FMOVD     1144201745(R1), F2
+       MOVB    0x1001(R1), R2 // MOVB  4097(R1), R2  // 3b04409162078039
+       MOVH    0x2002(R1), R2 // MOVH  8194(R1), R2  // 3b08409162078079
+       MOVW    0x4004(R1), R2 // MOVW  16388(R1), R2 // 3b104091620780b9
+       MOVD    0x8008(R1), R2 // MOVD  32776(R1), R2 // 3b204091620740f9
+       FMOVS   0x4004(R1), F2 // FMOVS 16388(R1), F2 // 3b104091620740bd
+       FMOVD   0x8008(R1), F2 // FMOVD 32776(R1), F2 // 3b204091620740fd
+
+// very large or unaligned offset uses constant pool.
+// the encoding cannot be checked as the address of the constant pool is unknown.
+// here we only test that they can be assembled.
        MOVB    R1, 0x44332211(R2) // MOVB      R1, 1144201745(R2)
        MOVH    R1, 0x44332211(R2) // MOVH      R1, 1144201745(R2)
        MOVW    R1, 0x44332211(R2) // MOVW      R1, 1144201745(R2)
@@ -526,14 +512,59 @@ TEXT      foo(SB), DUPOK|NOSPLIT, $-8
        FMOVS   F1, 0x44332211(R2) // FMOVS     F1, 1144201745(R2)
        FMOVD   F1, 0x44332211(R2) // FMOVD     F1, 1144201745(R2)
 
-//
-// MOVK
-//
-//             LMOVK imm ',' reg
-//     {
-//             outcode($1, &$2, NREG, &$4);
-//     }
-       MOVK    $1, R1
+       MOVB    0x44332211(R1), R2 // MOVB      1144201745(R1), R2
+       MOVH    0x44332211(R1), R2 // MOVH      1144201745(R1), R2
+       MOVW    0x44332211(R1), R2 // MOVW      1144201745(R1), R2
+       MOVD    0x44332211(R1), R2 // MOVD      1144201745(R1), R2
+       FMOVS   0x44332211(R1), F2 // FMOVS     1144201745(R1), F2
+       FMOVD   0x44332211(R1), F2 // FMOVD     1144201745(R1), F2
+
+// shifted or extended register offset.
+       MOVD    (R2)(R6.SXTW), R4               // 44c866f8
+       MOVD    (R3)(R6), R5                    // MOVD (R3)(R6*1), R5               // 656866f8
+       MOVD    (R2)(R6), R4                    // MOVD (R2)(R6*1), R4               // 446866f8
+       MOVWU   (R19)(R20<<2), R20              // 747a74b8
+       MOVD    (R2)(R6<<3), R4                 // 447866f8
+       MOVD    (R3)(R7.SXTX<<3), R8            // 68f867f8
+       MOVWU   (R5)(R4.UXTW), R10              // aa4864b8
+       MOVBU   (R3)(R9.UXTW), R8               // 68486938
+       MOVBU   (R5)(R8), R10                   // MOVBU        (R5)(R8*1), R10      // aa686838
+       MOVHU   (R2)(R7.SXTW<<1), R11           // 4bd86778
+       MOVHU   (R1)(R2<<1), R5                 // 25786278
+       MOVB    (R9)(R3.UXTW), R6               // 2649a338
+       MOVB    (R10)(R6), R15                  // MOVB (R10)(R6*1), R15             // 4f69a638
+       MOVB    (R29)(R30<<0), R14              // ae7bbe38
+       MOVB    (R29)(R30), R14                 // MOVB (R29)(R30*1), R14            // ae6bbe38
+       MOVH    (R5)(R7.SXTX<<1), R19           // b3f8a778
+       MOVH    (R8)(R4<<1), R10                // 0a79a478
+       MOVW    (R9)(R8.SXTW<<2), R19           // 33d9a8b8
+       MOVW    (R1)(R4.SXTX), R11              // 2be8a4b8
+       MOVW    (R1)(R4.SXTX), ZR               // 3fe8a4b8
+       MOVW    (R2)(R5), R12                   // MOVW (R2)(R5*1), R12               // 4c68a5b8
+       FMOVS   (R2)(R6), F4                    // FMOVS        (R2)(R6*1), F4        // 446866bc
+       FMOVS   (R2)(R6<<2), F4                 // 447866bc
+       FMOVD   (R2)(R6), F4                    // FMOVD        (R2)(R6*1), F4        // 446866fc
+       FMOVD   (R2)(R6<<3), F4                 // 447866fc
+
+       MOVD    R5, (R2)(R6<<3)                 // 457826f8
+       MOVD    R9, (R6)(R7.SXTX<<3)            // c9f827f8
+       MOVD    ZR, (R6)(R7.SXTX<<3)            // dff827f8
+       MOVW    R8, (R2)(R3.UXTW<<2)            // 485823b8
+       MOVW    R7, (R3)(R4.SXTW)               // 67c824b8
+       MOVB    R4, (R2)(R6.SXTX)               // 44e82638
+       MOVB    R8, (R3)(R9.UXTW)               // 68482938
+       MOVB    R10, (R5)(R8)                   // MOVB R10, (R5)(R8*1)               // aa682838
+       MOVH    R11, (R2)(R7.SXTW<<1)           // 4bd82778
+       MOVH    R5, (R1)(R2<<1)                 // 25782278
+       MOVH    R7, (R2)(R5.SXTX<<1)            // 47f82578
+       MOVH    R8, (R3)(R6.UXTW)               // 68482678
+       MOVB    R4, (R2)(R6.SXTX)               // 44e82638
+       FMOVS   F4, (R2)(R6)                    // FMOVS        F4, (R2)(R6*1)        // 446826bc
+       FMOVS   F4, (R2)(R6<<2)                 // 447826bc
+       FMOVD   F4, (R2)(R6)                    // FMOVD        F4, (R2)(R6*1)        // 446826fc
+       FMOVD   F4, (R2)(R6<<3)                 // 447826fc
+
+// vmov
        VMOV    V8.S[1], R1           // 013d0c0e
        VMOV    V0.D[0], R11          // 0b3c084e
        VMOV    V0.D[1], R11          // 0b3c184e
@@ -548,205 +579,28 @@ TEXT     foo(SB), DUPOK|NOSPLIT, $-8
        VMOV    V9.H[0], V12.H[1]     // 2c05066e
        VMOV    V8.B[0], V12.B[1]     // 0c05036e
        VMOV    V8.B[7], V4.B[8]      // 043d116e
-       VREV32  V5.B16, V5.B16        // a508206e
-       VREV64  V2.S2, V3.S2          // 4308a00e
-       VREV64  V2.S4, V3.S4          // 4308a04e
-       VDUP    V19.S[0], V17.S4      // 7106044e
-//
-// B/BL
-//
-//             LTYPE4 comma rel
-//     {
-//             outcode($1, &nullgen, NREG, &$3);
-//     }
-       BL      1(PC) // CALL 1(PC)
-
-//             LTYPE4 comma nireg
-//     {
-//             outcode($1, &nullgen, NREG, &$3);
-//     }
-       BL      (R2) // CALL (R2)
-       BL      foo(SB) // CALL foo(SB)
-       BL      bar<>(SB) // CALL bar<>(SB)
-//
-// BEQ
-//
-//             LTYPE5 comma rel
-//     {
-//             outcode($1, &nullgen, NREG, &$3);
-//     }
-       BEQ     1(PC)
-//
-// SVC
-//
-//             LTYPE6
-//     {
-//             outcode($1, &nullgen, NREG, &nullgen);
-//     }
-       SVC
 
-//
-// CMP
-//
-//             LTYPE7 imsr ',' spreg comma
-//     {
-//             outcode($1, &$2, $4, &nullgen);
-//     }
-       CMP     $3, R2
-       CMP     R1, R2
-       CMP     R1->11, R2
-       CMP     R1>>22, R2
-       CMP     R1<<33, R2
-       CMP     R22.SXTX, RSP // ffe336eb
-
-       CMP     $0x22220000, RSP  // CMP $572653568, RSP   // 5b44a4d2ff633beb
-       CMPW    $0x22220000, RSP  // CMPW $572653568, RSP  // 5b44a452ff633b6b
-
-// TST
-       TST     $15, R2                               // 5f0c40f2
-       TST     R1, R2                                // 5f0001ea
-       TST     R1->11, R2                            // 5f2c81ea
-       TST     R1>>22, R2                            // 5f5841ea
-       TST     R1<<33, R2                            // 5f8401ea
-       TST     $0x22220000, R3 // TST $572653568, R3 // 5b44a4d27f001bea
-
-//
 // CBZ
-//
-//             LTYPE8 reg ',' rel
-//     {
-//             outcode($1, &$2, NREG, &$4);
-//     }
 again:
        CBZ     R1, again // CBZ R1
 
-//
-// CSET
-//
-//             LTYPER cond ',' reg
-//     {
-//             outcode($1, &$2, NREG, &$4);
-//     }
-       CSET    GT, R1  // e1d79f9a
-       CSETW   HI, R2  // e2979f1a
-//
-// CSEL/CSINC/CSNEG/CSINV
-//
-//             LTYPES cond ',' reg ',' reg ',' reg
-//     {
-//             outgcode($1, &$2, $6.reg, &$4, &$8);
-//     }
+// conditional operations
+       CSET    GT, R1          // e1d79f9a
+       CSETW   HI, R2          // e2979f1a
        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
-//
-//             LTYPEU cond ',' imsr ',' reg ',' imm comma
-//     {
-//             outgcode($1, &$2, $6.reg, &$4, &$8);
-//     }
-       CCMN    MI, ZR, R1, $4  // e44341ba
-
-//
-// FADDD
-//
-//             LTYPEK frcon ',' freg
-//     {
-//             outcode($1, &$2, NREG, &$4);
-//     }
-//     FADDD   $0.5, F1 // FADDD $(0.5), F1
-       FADDD   F1, F2
-
-//             LTYPEK frcon ',' freg ',' freg
-//     {
-//             outcode($1, &$2, $4.reg, &$6);
-//     }
-//     FADDD   $0.7, F1, F2 // FADDD   $(0.69999999999999996), F1, F2
-       FADDD   F1, F2, F3
-
-//
-// FCMP
-//
-//             LTYPEL frcon ',' freg comma
-//     {
-//             outcode($1, &$2, $4.reg, &nullgen);
-//     }
-//     FCMP    $0.2, F1
-//     FCMP    F1, F2
-
-//
-// FCCMP
-//
-//             LTYPEF cond ',' freg ',' freg ',' imm comma
-//     {
-//             outgcode($1, &$2, $6.reg, &$4, &$8);
-//     }
-       FCCMPS  LT, F1, F2, $1  // 41b4211e
-
-//
-// FMULA
-//
-//             LTYPE9 freg ',' freg ',' freg ',' freg comma
-//     {
-//             outgcode($1, &$2, $4.reg, &$6, &$8);
-//     }
-//     FMULA   F1, F2, F3, F4
 
-//
-// FCSEL
-//
-//             LFCSEL cond ',' freg ',' freg ',' freg
-//     {
-//             outgcode($1, &$2, $6.reg, &$4, &$8);
-//     }
-//
-// MADD Rn,Rm,Ra,Rd
-//
-//             LTYPEM reg ',' reg ',' sreg ',' reg
-//     {
-//             outgcode($1, &$2, $6, &$4, &$8);
-//     }
-//     MADD    R1, R2, R3, R4
-
-       FMADDS  F1, F3, F2, F4          // 440c011f
-       FMADDD  F4, F5, F4, F4          // 8414441f
-       FMSUBS  F13, F21, F13, F19      // b3d50d1f
-       FMSUBD  F11, F7, F15, F31       // ff9d4b1f
-       FNMADDS F1, F3, F2, F4          // 440c211f
-       FNMADDD F1, F3, F2, F4          // 440c611f
-       FNMSUBS F1, F3, F2, F4          // 448c211f
-       FNMSUBD F1, F3, F2, F4          // 448c611f
-
-// DMB, HINT
-//
-//             LDMB imm
-//     {
-//             outcode($1, &$2, NREG, &nullgen);
-//     }
-       DMB     $1
-
-//
-// STXR
-//
-//             LSTXR reg ',' addr ',' reg
-//     {
-//             outcode($1, &$2, &$4, &$6);
-//     }
+// atomic ops
        LDARB   (R25), R2                            // 22ffdf08
        LDARH   (R5), R7                             // a7fcdf48
        LDAXPW  (R10), (R20, R16)                    // 54c17f88
@@ -923,21 +777,18 @@ again:
        LDORLH  R5, (RSP), R7                        // e7336578
        LDORLB  R5, (R6), R7                         // c7306538
        LDORLB  R5, (RSP), R7                        // e7336538
+
 // RET
-//
-//             LTYPEA comma
-//     {
-//             outcode($1, &nullgen, NREG, &nullgen);
-//     }
-       BEQ     2(PC)
        RET
        RET     foo(SB)
 
-// More B/BL cases, and canonical names JMP, CALL.
-
-       BEQ     2(PC)
-       B       foo(SB) // JMP foo(SB)
-       BL      foo(SB) // CALL foo(SB)
+// B/BL/B.cond cases, and canonical names JMP, CALL.
+       BL      1(PC)      // CALL 1(PC)
+       BL      (R2)       // CALL (R2)
+       BL      foo(SB)    // CALL foo(SB)
+       BL      bar<>(SB)  // CALL bar<>(SB)
+       B       foo(SB)    // JMP foo(SB)
+       BEQ     1(PC)
        BEQ     2(PC)
        TBZ     $1, R1, 2(PC)
        TBNZ    $2, R2, 2(PC)
@@ -1112,8 +963,6 @@ again:
        FSTPS   (F3, F4), 1024(RSP) // fb0310916313002d
        FSTPS   (F3, F4), x(SB)
        FSTPS   (F3, F4), x+8(SB)
-       NOOP                        // 1f2003d5
-       HINT $0                     // 1f2003d5
 
 // System Register
        MSR     $1, SPSel                          // bf4100d5
@@ -1675,11 +1524,4 @@ again:
        MSR     R13, ZCR_EL1                       // 0d1218d5
        MRS     ZCR_EL1, R23                       // 171238d5
        MSR     R17, ZCR_EL1                       // 111218d5
-
-// END
-//
-//     LTYPEE comma
-//     {
-//             outcode($1, &nullgen, NREG, &nullgen);
-//     }
        END