Home | History | Annotate | Download | only in AArch64
      1 ; RUN: llvm-mc -triple arm64-apple-darwin -mattr=neon -show-encoding < %s | FileCheck %s
      2 
      3 foo:
      4 ;==---------------------------------------------------------------------------==
      5 ; Add/Subtract with carry/borrow
      6 ;==---------------------------------------------------------------------------==
      7 
      8   adc   w1, w2, w3
      9   adc   x1, x2, x3
     10   adcs  w5, w4, w3
     11   adcs  x5, x4, x3
     12 
     13 ; CHECK: adc  w1, w2, w3             ; encoding: [0x41,0x00,0x03,0x1a]
     14 ; CHECK: adc  x1, x2, x3             ; encoding: [0x41,0x00,0x03,0x9a]
     15 ; CHECK: adcs w5, w4, w3             ; encoding: [0x85,0x00,0x03,0x3a]
     16 ; CHECK: adcs x5, x4, x3             ; encoding: [0x85,0x00,0x03,0xba]
     17 
     18   sbc   w1, w2, w3
     19   sbc   x1, x2, x3
     20   sbcs  w1, w2, w3
     21   sbcs  x1, x2, x3
     22 
     23 ; CHECK: sbc  w1, w2, w3             ; encoding: [0x41,0x00,0x03,0x5a]
     24 ; CHECK: sbc  x1, x2, x3             ; encoding: [0x41,0x00,0x03,0xda]
     25 ; CHECK: sbcs w1, w2, w3             ; encoding: [0x41,0x00,0x03,0x7a]
     26 ; CHECK: sbcs x1, x2, x3             ; encoding: [0x41,0x00,0x03,0xfa]
     27 
     28 ;==---------------------------------------------------------------------------==
     29 ; Add/Subtract with (optionally shifted) immediate
     30 ;==---------------------------------------------------------------------------==
     31 
     32   add w3, w4, #1024
     33   add w3, w4, #1024, lsl #0
     34   add x3, x4, #1024
     35   add x3, x4, #1024, lsl #0
     36 
     37 ; CHECK: add w3, w4, #1024           ; encoding: [0x83,0x00,0x10,0x11]
     38 ; CHECK: add w3, w4, #1024           ; encoding: [0x83,0x00,0x10,0x11]
     39 ; CHECK: add x3, x4, #1024           ; encoding: [0x83,0x00,0x10,0x91]
     40 ; CHECK: add x3, x4, #1024           ; encoding: [0x83,0x00,0x10,0x91]
     41 
     42   add w3, w4, #1024, lsl #12
     43   add w3, w4, #4194304
     44   add w3, w4, #0, lsl #12
     45   add x3, x4, #1024, lsl #12
     46   add x3, x4, #4194304
     47   add x3, x4, #0, lsl #12
     48   add sp, sp, #32
     49 
     50 ; CHECK: add w3, w4, #1024, lsl #12  ; encoding: [0x83,0x00,0x50,0x11]
     51 ; CHECK: add w3, w4, #1024, lsl #12  ; encoding: [0x83,0x00,0x50,0x11]
     52 ; CHECK: add w3, w4, #0, lsl #12     ; encoding: [0x83,0x00,0x40,0x11]
     53 ; CHECK: add x3, x4, #1024, lsl #12  ; encoding: [0x83,0x00,0x50,0x91]
     54 ; CHECK: add x3, x4, #1024, lsl #12  ; encoding: [0x83,0x00,0x50,0x91]
     55 ; CHECK: add x3, x4, #0, lsl #12     ; encoding: [0x83,0x00,0x40,0x91]
     56 ; CHECK: add sp, sp, #32             ; encoding: [0xff,0x83,0x00,0x91]
     57 
     58   adds w3, w4, #1024
     59   adds w3, w4, #1024, lsl #0
     60   adds w3, w4, #1024, lsl #12
     61   adds x3, x4, #1024
     62   adds x3, x4, #1024, lsl #0
     63   adds x3, x4, #1024, lsl #12
     64 
     65 ; CHECK: adds w3, w4, #1024          ; encoding: [0x83,0x00,0x10,0x31]
     66 ; CHECK: adds w3, w4, #1024          ; encoding: [0x83,0x00,0x10,0x31]
     67 ; CHECK: adds w3, w4, #1024, lsl #12 ; encoding: [0x83,0x00,0x50,0x31]
     68 ; CHECK: adds x3, x4, #1024          ; encoding: [0x83,0x00,0x10,0xb1]
     69 ; CHECK: adds x3, x4, #1024          ; encoding: [0x83,0x00,0x10,0xb1]
     70 ; CHECK: adds x3, x4, #1024, lsl #12 ; encoding: [0x83,0x00,0x50,0xb1]
     71 
     72   sub w3, w4, #1024
     73   sub w3, w4, #1024, lsl #0
     74   sub w3, w4, #1024, lsl #12
     75   sub x3, x4, #1024
     76   sub x3, x4, #1024, lsl #0
     77   sub x3, x4, #1024, lsl #12
     78   sub sp, sp, #32
     79 
     80 ; CHECK: sub w3, w4, #1024           ; encoding: [0x83,0x00,0x10,0x51]
     81 ; CHECK: sub w3, w4, #1024           ; encoding: [0x83,0x00,0x10,0x51]
     82 ; CHECK: sub w3, w4, #1024, lsl #12  ; encoding: [0x83,0x00,0x50,0x51]
     83 ; CHECK: sub x3, x4, #1024           ; encoding: [0x83,0x00,0x10,0xd1]
     84 ; CHECK: sub x3, x4, #1024           ; encoding: [0x83,0x00,0x10,0xd1]
     85 ; CHECK: sub x3, x4, #1024, lsl #12  ; encoding: [0x83,0x00,0x50,0xd1]
     86 ; CHECK: sub sp, sp, #32             ; encoding: [0xff,0x83,0x00,0xd1]
     87 
     88   subs w3, w4, #1024
     89   subs w3, w4, #1024, lsl #0
     90   subs w3, w4, #1024, lsl #12
     91   subs x3, x4, #1024
     92   subs x3, x4, #1024, lsl #0
     93   subs x3, x4, #1024, lsl #12
     94 
     95 ; CHECK: subs w3, w4, #1024          ; encoding: [0x83,0x00,0x10,0x71]
     96 ; CHECK: subs w3, w4, #1024          ; encoding: [0x83,0x00,0x10,0x71]
     97 ; CHECK: subs w3, w4, #1024, lsl #12 ; encoding: [0x83,0x00,0x50,0x71]
     98 ; CHECK: subs x3, x4, #1024          ; encoding: [0x83,0x00,0x10,0xf1]
     99 ; CHECK: subs x3, x4, #1024          ; encoding: [0x83,0x00,0x10,0xf1]
    100 ; CHECK: subs x3, x4, #1024, lsl #12 ; encoding: [0x83,0x00,0x50,0xf1]
    101 
    102 ;==---------------------------------------------------------------------------==
    103 ; Add/Subtract register with (optional) shift
    104 ;==---------------------------------------------------------------------------==
    105 
    106   add w12, w13, w14
    107   add x12, x13, x14
    108   add w12, w13, w14, lsl #12
    109   add x12, x13, x14, lsl #12
    110   add x12, x13, x14, lsr #42
    111   add x12, x13, x14, asr #39
    112 
    113 ; CHECK: add w12, w13, w14           ; encoding: [0xac,0x01,0x0e,0x0b]
    114 ; CHECK: add x12, x13, x14           ; encoding: [0xac,0x01,0x0e,0x8b]
    115 ; CHECK: add w12, w13, w14, lsl #12  ; encoding: [0xac,0x31,0x0e,0x0b]
    116 ; CHECK: add x12, x13, x14, lsl #12  ; encoding: [0xac,0x31,0x0e,0x8b]
    117 ; CHECK: add x12, x13, x14, lsr #42  ; encoding: [0xac,0xa9,0x4e,0x8b]
    118 ; CHECK: add x12, x13, x14, asr #39  ; encoding: [0xac,0x9d,0x8e,0x8b]
    119 
    120   sub w12, w13, w14
    121   sub x12, x13, x14
    122   sub w12, w13, w14, lsl #12
    123   sub x12, x13, x14, lsl #12
    124   sub x12, x13, x14, lsr #42
    125   sub x12, x13, x14, asr #39
    126 
    127 ; CHECK: sub w12, w13, w14           ; encoding: [0xac,0x01,0x0e,0x4b]
    128 ; CHECK: sub x12, x13, x14           ; encoding: [0xac,0x01,0x0e,0xcb]
    129 ; CHECK: sub w12, w13, w14, lsl #12  ; encoding: [0xac,0x31,0x0e,0x4b]
    130 ; CHECK: sub x12, x13, x14, lsl #12  ; encoding: [0xac,0x31,0x0e,0xcb]
    131 ; CHECK: sub x12, x13, x14, lsr #42  ; encoding: [0xac,0xa9,0x4e,0xcb]
    132 ; CHECK: sub x12, x13, x14, asr #39  ; encoding: [0xac,0x9d,0x8e,0xcb]
    133 
    134   adds w12, w13, w14
    135   adds x12, x13, x14
    136   adds w12, w13, w14, lsl #12
    137   adds x12, x13, x14, lsl #12
    138   adds x12, x13, x14, lsr #42
    139   adds x12, x13, x14, asr #39
    140 
    141 ; CHECK: adds w12, w13, w14          ; encoding: [0xac,0x01,0x0e,0x2b]
    142 ; CHECK: adds x12, x13, x14          ; encoding: [0xac,0x01,0x0e,0xab]
    143 ; CHECK: adds w12, w13, w14, lsl #12 ; encoding: [0xac,0x31,0x0e,0x2b]
    144 ; CHECK: adds x12, x13, x14, lsl #12 ; encoding: [0xac,0x31,0x0e,0xab]
    145 ; CHECK: adds x12, x13, x14, lsr #42 ; encoding: [0xac,0xa9,0x4e,0xab]
    146 ; CHECK: adds x12, x13, x14, asr #39 ; encoding: [0xac,0x9d,0x8e,0xab]
    147 
    148   subs w12, w13, w14
    149   subs x12, x13, x14
    150   subs w12, w13, w14, lsl #12
    151   subs x12, x13, x14, lsl #12
    152   subs x12, x13, x14, lsr #42
    153   subs x12, x13, x14, asr #39
    154 
    155 ; CHECK: subs w12, w13, w14          ; encoding: [0xac,0x01,0x0e,0x6b]
    156 ; CHECK: subs x12, x13, x14          ; encoding: [0xac,0x01,0x0e,0xeb]
    157 ; CHECK: subs w12, w13, w14, lsl #12 ; encoding: [0xac,0x31,0x0e,0x6b]
    158 ; CHECK: subs x12, x13, x14, lsl #12 ; encoding: [0xac,0x31,0x0e,0xeb]
    159 ; CHECK: subs x12, x13, x14, lsr #42 ; encoding: [0xac,0xa9,0x4e,0xeb]
    160 ; CHECK: subs x12, x13, x14, asr #39 ; encoding: [0xac,0x9d,0x8e,0xeb]
    161 
    162 ; Check use of upper case register names rdar://14354073
    163   add X2, X2, X2
    164 ; CHECK: add x2, x2, x2              ; encoding: [0x42,0x00,0x02,0x8b]
    165 
    166 ;==---------------------------------------------------------------------------==
    167 ; Add/Subtract with (optional) extend
    168 ;==---------------------------------------------------------------------------==
    169 
    170   add w1, w2, w3, uxtb
    171   add w1, w2, w3, uxth
    172   add w1, w2, w3, uxtw
    173   add w1, w2, w3, uxtx
    174   add w1, w2, w3, sxtb
    175   add w1, w2, w3, sxth
    176   add w1, w2, w3, sxtw
    177   add w1, w2, w3, sxtx
    178 
    179 ; CHECK: add w1, w2, w3, uxtb        ; encoding: [0x41,0x00,0x23,0x0b]
    180 ; CHECK: add w1, w2, w3, uxth        ; encoding: [0x41,0x20,0x23,0x0b]
    181 ; CHECK: add w1, w2, w3, uxtw        ; encoding: [0x41,0x40,0x23,0x0b]
    182 ; CHECK: add w1, w2, w3, uxtx        ; encoding: [0x41,0x60,0x23,0x0b]
    183 ; CHECK: add w1, w2, w3, sxtb        ; encoding: [0x41,0x80,0x23,0x0b]
    184 ; CHECK: add w1, w2, w3, sxth        ; encoding: [0x41,0xa0,0x23,0x0b]
    185 ; CHECK: add w1, w2, w3, sxtw        ; encoding: [0x41,0xc0,0x23,0x0b]
    186 ; CHECK: add w1, w2, w3, sxtx        ; encoding: [0x41,0xe0,0x23,0x0b]
    187 
    188   add x1, x2, w3, uxtb
    189   add x1, x2, w3, uxth
    190   add x1, x2, w3, uxtw
    191   add x1, x2, w3, sxtb
    192   add x1, x2, w3, sxth
    193   add x1, x2, w3, sxtw
    194 
    195 ; CHECK: add x1, x2, w3, uxtb        ; encoding: [0x41,0x00,0x23,0x8b]
    196 ; CHECK: add x1, x2, w3, uxth        ; encoding: [0x41,0x20,0x23,0x8b]
    197 ; CHECK: add x1, x2, w3, uxtw        ; encoding: [0x41,0x40,0x23,0x8b]
    198 ; CHECK: add x1, x2, w3, sxtb        ; encoding: [0x41,0x80,0x23,0x8b]
    199 ; CHECK: add x1, x2, w3, sxth        ; encoding: [0x41,0xa0,0x23,0x8b]
    200 ; CHECK: add x1, x2, w3, sxtw        ; encoding: [0x41,0xc0,0x23,0x8b]
    201 
    202   add w1, wsp, w3
    203   add w1, wsp, w3, uxtw #0
    204   add w2, wsp, w3, lsl #1
    205   add sp, x2, x3
    206   add sp, x2, x3, uxtx #0
    207 
    208 ; CHECK: add w1, wsp, w3             ; encoding: [0xe1,0x43,0x23,0x0b]
    209 ; CHECK: add w1, wsp, w3             ; encoding: [0xe1,0x43,0x23,0x0b]
    210 ; CHECK: add w2, wsp, w3, lsl #1     ; encoding: [0xe2,0x47,0x23,0x0b]
    211 ; CHECK: add sp, x2, x3              ; encoding: [0x5f,0x60,0x23,0x8b]
    212 ; CHECK: add sp, x2, x3              ; encoding: [0x5f,0x60,0x23,0x8b]
    213 
    214   sub w1, w2, w3, uxtb
    215   sub w1, w2, w3, uxth
    216   sub w1, w2, w3, uxtw
    217   sub w1, w2, w3, uxtx
    218   sub w1, w2, w3, sxtb
    219   sub w1, w2, w3, sxth
    220   sub w1, w2, w3, sxtw
    221   sub w1, w2, w3, sxtx
    222 
    223 ; CHECK: sub w1, w2, w3, uxtb        ; encoding: [0x41,0x00,0x23,0x4b]
    224 ; CHECK: sub w1, w2, w3, uxth        ; encoding: [0x41,0x20,0x23,0x4b]
    225 ; CHECK: sub w1, w2, w3, uxtw        ; encoding: [0x41,0x40,0x23,0x4b]
    226 ; CHECK: sub w1, w2, w3, uxtx        ; encoding: [0x41,0x60,0x23,0x4b]
    227 ; CHECK: sub w1, w2, w3, sxtb        ; encoding: [0x41,0x80,0x23,0x4b]
    228 ; CHECK: sub w1, w2, w3, sxth        ; encoding: [0x41,0xa0,0x23,0x4b]
    229 ; CHECK: sub w1, w2, w3, sxtw        ; encoding: [0x41,0xc0,0x23,0x4b]
    230 ; CHECK: sub w1, w2, w3, sxtx        ; encoding: [0x41,0xe0,0x23,0x4b]
    231 
    232   sub x1, x2, w3, uxtb
    233   sub x1, x2, w3, uxth
    234   sub x1, x2, w3, uxtw
    235   sub x1, x2, w3, sxtb
    236   sub x1, x2, w3, sxth
    237   sub x1, x2, w3, sxtw
    238 
    239 ; CHECK: sub x1, x2, w3, uxtb        ; encoding: [0x41,0x00,0x23,0xcb]
    240 ; CHECK: sub x1, x2, w3, uxth        ; encoding: [0x41,0x20,0x23,0xcb]
    241 ; CHECK: sub x1, x2, w3, uxtw        ; encoding: [0x41,0x40,0x23,0xcb]
    242 ; CHECK: sub x1, x2, w3, sxtb        ; encoding: [0x41,0x80,0x23,0xcb]
    243 ; CHECK: sub x1, x2, w3, sxth        ; encoding: [0x41,0xa0,0x23,0xcb]
    244 ; CHECK: sub x1, x2, w3, sxtw        ; encoding: [0x41,0xc0,0x23,0xcb]
    245 
    246   sub w1, wsp, w3
    247   sub w1, wsp, w3, uxtw #0
    248   sub sp, x2, x3
    249   sub sp, x2, x3, uxtx #0
    250   sub sp, x3, x7, lsl #4
    251 
    252 ; CHECK: sub w1, wsp, w3             ; encoding: [0xe1,0x43,0x23,0x4b]
    253 ; CHECK: sub w1, wsp, w3             ; encoding: [0xe1,0x43,0x23,0x4b]
    254 ; CHECK: sub sp, x2, x3              ; encoding: [0x5f,0x60,0x23,0xcb]
    255 ; CHECK: sub sp, x2, x3              ; encoding: [0x5f,0x60,0x23,0xcb]
    256 ; CHECK: sp, x3, x7, lsl #4          ; encoding: [0x7f,0x70,0x27,0xcb]
    257 
    258   adds w1, w2, w3, uxtb
    259   adds w1, w2, w3, uxth
    260   adds w1, w2, w3, uxtw
    261   adds w1, w2, w3, uxtx
    262   adds w1, w2, w3, sxtb
    263   adds w1, w2, w3, sxth
    264   adds w1, w2, w3, sxtw
    265   adds w1, w2, w3, sxtx
    266 
    267 ; CHECK: adds w1, w2, w3, uxtb       ; encoding: [0x41,0x00,0x23,0x2b]
    268 ; CHECK: adds w1, w2, w3, uxth       ; encoding: [0x41,0x20,0x23,0x2b]
    269 ; CHECK: adds w1, w2, w3, uxtw       ; encoding: [0x41,0x40,0x23,0x2b]
    270 ; CHECK: adds w1, w2, w3, uxtx       ; encoding: [0x41,0x60,0x23,0x2b]
    271 ; CHECK: adds w1, w2, w3, sxtb       ; encoding: [0x41,0x80,0x23,0x2b]
    272 ; CHECK: adds w1, w2, w3, sxth       ; encoding: [0x41,0xa0,0x23,0x2b]
    273 ; CHECK: adds w1, w2, w3, sxtw       ; encoding: [0x41,0xc0,0x23,0x2b]
    274 ; CHECK: adds w1, w2, w3, sxtx       ; encoding: [0x41,0xe0,0x23,0x2b]
    275 
    276   adds x1, x2, w3, uxtb
    277   adds x1, x2, w3, uxth
    278   adds x1, x2, w3, uxtw
    279   adds x1, x2, w3, uxtx
    280   adds x1, x2, w3, sxtb
    281   adds x1, x2, w3, sxth
    282   adds x1, x2, w3, sxtw
    283   adds x1, x2, w3, sxtx
    284 
    285 ; CHECK: adds x1, x2, w3, uxtb       ; encoding: [0x41,0x00,0x23,0xab]
    286 ; CHECK: adds x1, x2, w3, uxth       ; encoding: [0x41,0x20,0x23,0xab]
    287 ; CHECK: adds x1, x2, w3, uxtw       ; encoding: [0x41,0x40,0x23,0xab]
    288 ; CHECK: adds x1, x2, w3, uxtx       ; encoding: [0x41,0x60,0x23,0xab]
    289 ; CHECK: adds x1, x2, w3, sxtb       ; encoding: [0x41,0x80,0x23,0xab]
    290 ; CHECK: adds x1, x2, w3, sxth       ; encoding: [0x41,0xa0,0x23,0xab]
    291 ; CHECK: adds x1, x2, w3, sxtw       ; encoding: [0x41,0xc0,0x23,0xab]
    292 ; CHECK: adds x1, x2, w3, sxtx       ; encoding: [0x41,0xe0,0x23,0xab]
    293 
    294   adds w1, wsp, w3
    295   adds w1, wsp, w3, uxtw #0
    296   adds wzr, wsp, w3, lsl #4
    297 
    298 ; CHECK: adds w1, wsp, w3            ; encoding: [0xe1,0x43,0x23,0x2b]
    299 ; CHECK: adds w1, wsp, w3            ; encoding: [0xe1,0x43,0x23,0x2b]
    300 ; CHECK: cmn wsp, w3, lsl #4         ; encoding: [0xff,0x53,0x23,0x2b]
    301 
    302   subs w1, w2, w3, uxtb
    303   subs w1, w2, w3, uxth
    304   subs w1, w2, w3, uxtw
    305   subs w1, w2, w3, uxtx
    306   subs w1, w2, w3, sxtb
    307   subs w1, w2, w3, sxth
    308   subs w1, w2, w3, sxtw
    309   subs w1, w2, w3, sxtx
    310 
    311 ; CHECK: subs w1, w2, w3, uxtb       ; encoding: [0x41,0x00,0x23,0x6b]
    312 ; CHECK: subs w1, w2, w3, uxth       ; encoding: [0x41,0x20,0x23,0x6b]
    313 ; CHECK: subs w1, w2, w3, uxtw       ; encoding: [0x41,0x40,0x23,0x6b]
    314 ; CHECK: subs w1, w2, w3, uxtx       ; encoding: [0x41,0x60,0x23,0x6b]
    315 ; CHECK: subs w1, w2, w3, sxtb       ; encoding: [0x41,0x80,0x23,0x6b]
    316 ; CHECK: subs w1, w2, w3, sxth       ; encoding: [0x41,0xa0,0x23,0x6b]
    317 ; CHECK: subs w1, w2, w3, sxtw       ; encoding: [0x41,0xc0,0x23,0x6b]
    318 ; CHECK: subs w1, w2, w3, sxtx       ; encoding: [0x41,0xe0,0x23,0x6b]
    319 
    320   subs x1, x2, w3, uxtb
    321   subs x1, x2, w3, uxth
    322   subs x1, x2, w3, uxtw
    323   subs x1, x2, w3, uxtx
    324   subs x1, x2, w3, sxtb
    325   subs x1, x2, w3, sxth
    326   subs x1, x2, w3, sxtw
    327   subs x1, x2, w3, sxtx
    328 
    329 ; CHECK: subs x1, x2, w3, uxtb       ; encoding: [0x41,0x00,0x23,0xeb]
    330 ; CHECK: subs x1, x2, w3, uxth       ; encoding: [0x41,0x20,0x23,0xeb]
    331 ; CHECK: subs x1, x2, w3, uxtw       ; encoding: [0x41,0x40,0x23,0xeb]
    332 ; CHECK: subs x1, x2, w3, uxtx       ; encoding: [0x41,0x60,0x23,0xeb]
    333 ; CHECK: subs x1, x2, w3, sxtb       ; encoding: [0x41,0x80,0x23,0xeb]
    334 ; CHECK: subs x1, x2, w3, sxth       ; encoding: [0x41,0xa0,0x23,0xeb]
    335 ; CHECK: subs x1, x2, w3, sxtw       ; encoding: [0x41,0xc0,0x23,0xeb]
    336 ; CHECK: subs x1, x2, w3, sxtx       ; encoding: [0x41,0xe0,0x23,0xeb]
    337 
    338   subs w1, wsp, w3
    339   subs w1, wsp, w3, uxtw #0
    340 
    341 ; CHECK: subs w1, wsp, w3            ; encoding: [0xe1,0x43,0x23,0x6b]
    342 ; CHECK: subs w1, wsp, w3            ; encoding: [0xe1,0x43,0x23,0x6b]
    343 
    344   cmp wsp, w9, lsl #0
    345   subs x3, sp, x9, lsl #2
    346   cmp wsp, w8, uxtw
    347   subs wzr, wsp, w8, uxtw
    348   cmp sp, w8, uxtw
    349   subs xzr, sp, w8, uxtw
    350 
    351 ; CHECK: cmp wsp, w9                 ; encoding: [0xff,0x43,0x29,0x6b]
    352 ; CHECK: subs x3, sp, x9, lsl #2     ; encoding: [0xe3,0x6b,0x29,0xeb]
    353 ; CHECK: cmp wsp, w8                 ; encoding: [0xff,0x43,0x28,0x6b]
    354 ; CHECK: cmp wsp, w8                 ; encoding: [0xff,0x43,0x28,0x6b]
    355 ; CHECK: cmp sp, w8, uxtw            ; encoding: [0xff,0x43,0x28,0xeb]
    356 ; CHECK: cmp sp, w8, uxtw            ; encoding: [0xff,0x43,0x28,0xeb]
    357 
    358   sub wsp, w9, w8, uxtw
    359   sub w1, wsp, w8, uxtw
    360   sub wsp, wsp, w8, uxtw
    361   sub sp, x9, w8, uxtw
    362   sub x1, sp, w8, uxtw
    363   sub sp, sp, w8, uxtw
    364   subs w1, wsp, w8, uxtw
    365   subs x1, sp, w8, uxtw
    366 
    367 ; CHECK: sub wsp, w9, w8             ; encoding: [0x3f,0x41,0x28,0x4b]
    368 ; CHECK: sub w1, wsp, w8             ; encoding: [0xe1,0x43,0x28,0x4b]
    369 ; CHECK: sub wsp, wsp, w8            ; encoding: [0xff,0x43,0x28,0x4b]
    370 ; CHECK: sub sp, x9, w8, uxtw        ; encoding: [0x3f,0x41,0x28,0xcb]
    371 ; CHECK: sub x1, sp, w8, uxtw        ; encoding: [0xe1,0x43,0x28,0xcb]
    372 ; CHECK: sub sp, sp, w8, uxtw        ; encoding: [0xff,0x43,0x28,0xcb]
    373 ; CHECK: subs w1, wsp, w8            ; encoding: [0xe1,0x43,0x28,0x6b]
    374 ; CHECK: subs x1, sp, w8, uxtw       ; encoding: [0xe1,0x43,0x28,0xeb]
    375 
    376 ;==---------------------------------------------------------------------------==
    377 ; Signed/Unsigned divide
    378 ;==---------------------------------------------------------------------------==
    379 
    380   sdiv w1, w2, w3
    381   sdiv x1, x2, x3
    382   udiv w1, w2, w3
    383   udiv x1, x2, x3
    384 
    385 ; CHECK: sdiv w1, w2, w3             ; encoding: [0x41,0x0c,0xc3,0x1a]
    386 ; CHECK: sdiv x1, x2, x3             ; encoding: [0x41,0x0c,0xc3,0x9a]
    387 ; CHECK: udiv w1, w2, w3             ; encoding: [0x41,0x08,0xc3,0x1a]
    388 ; CHECK: udiv x1, x2, x3             ; encoding: [0x41,0x08,0xc3,0x9a]
    389 
    390 ;==---------------------------------------------------------------------------==
    391 ; Variable shifts
    392 ;==---------------------------------------------------------------------------==
    393 
    394   asrv w1, w2, w3
    395   asrv x1, x2, x3
    396   asr w1, w2, w3
    397   asr x1, x2, x3
    398   lslv w1, w2, w3
    399   lslv x1, x2, x3
    400   lsl w1, w2, w3
    401   lsl x1, x2, x3
    402   lsrv w1, w2, w3
    403   lsrv x1, x2, x3
    404   lsr w1, w2, w3
    405   lsr x1, x2, x3
    406   rorv w1, w2, w3
    407   rorv x1, x2, x3
    408   ror w1, w2, w3
    409   ror x1, x2, x3
    410 
    411 ; CHECK: encoding: [0x41,0x28,0xc3,0x1a]
    412 ; CHECK: encoding: [0x41,0x28,0xc3,0x9a]
    413 ; CHECK: encoding: [0x41,0x28,0xc3,0x1a]
    414 ; CHECK: encoding: [0x41,0x28,0xc3,0x9a]
    415 ; CHECK: encoding: [0x41,0x20,0xc3,0x1a]
    416 ; CHECK: encoding: [0x41,0x20,0xc3,0x9a]
    417 ; CHECK: encoding: [0x41,0x20,0xc3,0x1a]
    418 ; CHECK: encoding: [0x41,0x20,0xc3,0x9a]
    419 ; CHECK: encoding: [0x41,0x24,0xc3,0x1a]
    420 ; CHECK: encoding: [0x41,0x24,0xc3,0x9a]
    421 ; CHECK: encoding: [0x41,0x24,0xc3,0x1a]
    422 ; CHECK: encoding: [0x41,0x24,0xc3,0x9a]
    423 ; CHECK: encoding: [0x41,0x2c,0xc3,0x1a]
    424 ; CHECK: encoding: [0x41,0x2c,0xc3,0x9a]
    425 ; CHECK: encoding: [0x41,0x2c,0xc3,0x1a]
    426 ; CHECK: encoding: [0x41,0x2c,0xc3,0x9a]
    427 
    428 ;==---------------------------------------------------------------------------==
    429 ; One operand instructions
    430 ;==---------------------------------------------------------------------------==
    431 
    432   cls w1, w2
    433   cls x1, x2
    434   clz w1, w2
    435   clz x1, x2
    436   rbit w1, w2
    437   rbit x1, x2
    438   rev w1, w2
    439   rev x1, x2
    440   rev16 w1, w2
    441   rev16 x1, x2
    442   rev32 x1, x2
    443 
    444 ; CHECK: encoding: [0x41,0x14,0xc0,0x5a]
    445 ; CHECK: encoding: [0x41,0x14,0xc0,0xda]
    446 ; CHECK: encoding: [0x41,0x10,0xc0,0x5a]
    447 ; CHECK: encoding: [0x41,0x10,0xc0,0xda]
    448 ; CHECK: encoding: [0x41,0x00,0xc0,0x5a]
    449 ; CHECK: encoding: [0x41,0x00,0xc0,0xda]
    450 ; CHECK: encoding: [0x41,0x08,0xc0,0x5a]
    451 ; CHECK: encoding: [0x41,0x0c,0xc0,0xda]
    452 ; CHECK: encoding: [0x41,0x04,0xc0,0x5a]
    453 ; CHECK: encoding: [0x41,0x04,0xc0,0xda]
    454 ; CHECK: encoding: [0x41,0x08,0xc0,0xda]
    455 
    456 ;==---------------------------------------------------------------------------==
    457 ; 6.6.1 Multiply-add instructions
    458 ;==---------------------------------------------------------------------------==
    459 
    460   madd   w1, w2, w3, w4
    461   madd   x1, x2, x3, x4
    462   msub   w1, w2, w3, w4
    463   msub   x1, x2, x3, x4
    464   smaddl x1, w2, w3, x4
    465   smsubl x1, w2, w3, x4
    466   umaddl x1, w2, w3, x4
    467   umsubl x1, w2, w3, x4
    468 
    469 ; CHECK: madd   w1, w2, w3, w4       ; encoding: [0x41,0x10,0x03,0x1b]
    470 ; CHECK: madd   x1, x2, x3, x4       ; encoding: [0x41,0x10,0x03,0x9b]
    471 ; CHECK: msub   w1, w2, w3, w4       ; encoding: [0x41,0x90,0x03,0x1b]
    472 ; CHECK: msub   x1, x2, x3, x4       ; encoding: [0x41,0x90,0x03,0x9b]
    473 ; CHECK: smaddl x1, w2, w3, x4       ; encoding: [0x41,0x10,0x23,0x9b]
    474 ; CHECK: smsubl x1, w2, w3, x4       ; encoding: [0x41,0x90,0x23,0x9b]
    475 ; CHECK: umaddl x1, w2, w3, x4       ; encoding: [0x41,0x10,0xa3,0x9b]
    476 ; CHECK: umsubl x1, w2, w3, x4       ; encoding: [0x41,0x90,0xa3,0x9b]
    477 
    478 ;==---------------------------------------------------------------------------==
    479 ; Multiply-high instructions
    480 ;==---------------------------------------------------------------------------==
    481 
    482   smulh x1, x2, x3
    483   umulh x1, x2, x3
    484 
    485 ; CHECK: smulh x1, x2, x3            ; encoding: [0x41,0x7c,0x43,0x9b]
    486 ; CHECK: umulh x1, x2, x3            ; encoding: [0x41,0x7c,0xc3,0x9b]
    487 
    488 ;==---------------------------------------------------------------------------==
    489 ; Move immediate instructions
    490 ;==---------------------------------------------------------------------------==
    491 
    492   movz w0, #1
    493   movz x0, #1
    494   movz w0, #1, lsl #16
    495   movz x0, #1, lsl #16
    496 
    497 ; CHECK: mov w0, #1                 ; encoding: [0x20,0x00,0x80,0x52]
    498 ; CHECK: mov x0, #1                 ; encoding: [0x20,0x00,0x80,0xd2]
    499 ; CHECK: mov w0, #65536             ; encoding: [0x20,0x00,0xa0,0x52]
    500 ; CHECK: mov x0, #65536             ; encoding: [0x20,0x00,0xa0,0xd2]
    501 
    502   movn w0, #2
    503   movn x0, #2
    504   movn w0, #2, lsl #16
    505   movn x0, #2, lsl #16
    506 
    507 ; CHECK: mov w0, #-3                 ; encoding: [0x40,0x00,0x80,0x12]
    508 ; CHECK: mov x0, #-3                 ; encoding: [0x40,0x00,0x80,0x92]
    509 ; CHECK: mov w0, #-131073            ; encoding: [0x40,0x00,0xa0,0x12]
    510 ; CHECK: mov x0, #-131073            ; encoding: [0x40,0x00,0xa0,0x92]
    511 
    512   movk w0, #1
    513   movk x0, #1
    514   movk w0, #1, lsl #16
    515   movk x0, #1, lsl #16
    516 
    517 ; CHECK: movk w0, #1                 ; encoding: [0x20,0x00,0x80,0x72]
    518 ; CHECK: movk x0, #1                 ; encoding: [0x20,0x00,0x80,0xf2]
    519 ; CHECK: movk w0, #1, lsl #16        ; encoding: [0x20,0x00,0xa0,0x72]
    520 ; CHECK: movk x0, #1, lsl #16        ; encoding: [0x20,0x00,0xa0,0xf2]
    521 
    522 ;==---------------------------------------------------------------------------==
    523 ; Conditionally set flags instructions
    524 ;==---------------------------------------------------------------------------==
    525 
    526   ccmn w1, #2, #3, eq
    527   ccmn x1, #2, #3, eq
    528   ccmp w1, #2, #3, eq
    529   ccmp x1, #2, #3, eq
    530 
    531 ; CHECK: encoding: [0x23,0x08,0x42,0x3a]
    532 ; CHECK: encoding: [0x23,0x08,0x42,0xba]
    533 ; CHECK: encoding: [0x23,0x08,0x42,0x7a]
    534 ; CHECK: encoding: [0x23,0x08,0x42,0xfa]
    535 
    536   ccmn w1, w2, #3, eq
    537   ccmn x1, x2, #3, eq
    538   ccmp w1, w2, #3, eq
    539   ccmp x1, x2, #3, eq
    540 
    541 ; CHECK: encoding: [0x23,0x00,0x42,0x3a]
    542 ; CHECK: encoding: [0x23,0x00,0x42,0xba]
    543 ; CHECK: encoding: [0x23,0x00,0x42,0x7a]
    544 ; CHECK: encoding: [0x23,0x00,0x42,0xfa]
    545 
    546 ;==---------------------------------------------------------------------------==
    547 ; Conditional select instructions
    548 ;==---------------------------------------------------------------------------==
    549 
    550   csel w1, w2, w3, eq
    551   csel x1, x2, x3, eq
    552   csinc w1, w2, w3, eq
    553   csinc x1, x2, x3, eq
    554   csinv w1, w2, w3, eq
    555   csinv x1, x2, x3, eq
    556   csneg w1, w2, w3, eq
    557   csneg x1, x2, x3, eq
    558 
    559 ; CHECK: encoding: [0x41,0x00,0x83,0x1a]
    560 ; CHECK: encoding: [0x41,0x00,0x83,0x9a]
    561 ; CHECK: encoding: [0x41,0x04,0x83,0x1a]
    562 ; CHECK: encoding: [0x41,0x04,0x83,0x9a]
    563 ; CHECK: encoding: [0x41,0x00,0x83,0x5a]
    564 ; CHECK: encoding: [0x41,0x00,0x83,0xda]
    565 ; CHECK: encoding: [0x41,0x04,0x83,0x5a]
    566 ; CHECK: encoding: [0x41,0x04,0x83,0xda]
    567 
    568 ; Make sure we handle upper case, too. In particular, condition codes.
    569   CSEL W16, W7, W27, EQ
    570   CSEL W15, W6, W26, NE
    571   CSEL W14, W5, W25, CS
    572   CSEL W13, W4, W24, HS
    573   csel w12, w3, w23, CC
    574   csel w11, w2, w22, LO
    575   csel w10, w1, w21, MI
    576   csel x9, x9, x1, PL
    577   csel x8, x8, x2, VS
    578   CSEL X7, X7, X3, VC
    579   CSEL X6, X7, X4, HI
    580   CSEL X5, X6, X5, LS
    581   CSEL X4, X5, X6, GE
    582   csel x3, x4, x7, LT
    583   csel x2, x3, x8, GT
    584   csel x1, x2, x9, LE
    585   csel x10, x1, x20, AL
    586 
    587 ; CHECK: csel	w16, w7, w27, eq        ; encoding: [0xf0,0x00,0x9b,0x1a]
    588 ; CHECK: csel	w15, w6, w26, ne        ; encoding: [0xcf,0x10,0x9a,0x1a]
    589 ; CHECK: csel	w14, w5, w25, hs        ; encoding: [0xae,0x20,0x99,0x1a]
    590 ; CHECK: csel	w13, w4, w24, hs        ; encoding: [0x8d,0x20,0x98,0x1a]
    591 ; CHECK: csel	w12, w3, w23, lo        ; encoding: [0x6c,0x30,0x97,0x1a]
    592 ; CHECK: csel	w11, w2, w22, lo        ; encoding: [0x4b,0x30,0x96,0x1a]
    593 ; CHECK: csel	w10, w1, w21, mi        ; encoding: [0x2a,0x40,0x95,0x1a]
    594 ; CHECK: csel	x9, x9, x1, pl          ; encoding: [0x29,0x51,0x81,0x9a]
    595 ; CHECK: csel	x8, x8, x2, vs          ; encoding: [0x08,0x61,0x82,0x9a]
    596 ; CHECK: csel	x7, x7, x3, vc          ; encoding: [0xe7,0x70,0x83,0x9a]
    597 ; CHECK: csel	x6, x7, x4, hi          ; encoding: [0xe6,0x80,0x84,0x9a]
    598 ; CHECK: csel	x5, x6, x5, ls          ; encoding: [0xc5,0x90,0x85,0x9a]
    599 ; CHECK: csel	x4, x5, x6, ge          ; encoding: [0xa4,0xa0,0x86,0x9a]
    600 ; CHECK: csel	x3, x4, x7, lt          ; encoding: [0x83,0xb0,0x87,0x9a]
    601 ; CHECK: csel	x2, x3, x8, gt          ; encoding: [0x62,0xc0,0x88,0x9a]
    602 ; CHECK: csel	x1, x2, x9, le          ; encoding: [0x41,0xd0,0x89,0x9a]
    603 ; CHECK: csel	x10, x1, x20, al        ; encoding: [0x2a,0xe0,0x94,0x9a]
    604 
    605 
    606 ;==---------------------------------------------------------------------------==
    607 ; Scalar saturating arithmetic
    608 ;==---------------------------------------------------------------------------==
    609   uqxtn b4, h2
    610   uqxtn h2, s3
    611   uqxtn s9, d2
    612 
    613 ; CHECK: uqxtn b4, h2                  ; encoding: [0x44,0x48,0x21,0x7e]
    614 ; CHECK: uqxtn h2, s3                  ; encoding: [0x62,0x48,0x61,0x7e]
    615 ; CHECK: uqxtn s9, d2                  ; encoding: [0x49,0x48,0xa1,0x7e]
    616