616 lines · plain
1; RUN: llvm-mc -triple arm64-apple-darwin -mattr=neon -show-encoding < %s | FileCheck %s2 3foo:4;==---------------------------------------------------------------------------==5; Add/Subtract with carry/borrow6;==---------------------------------------------------------------------------==7 8 adc w1, w2, w39 adc x1, x2, x310 adcs w5, w4, w311 adcs x5, x4, x312 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, w319 sbc x1, x2, x320 sbcs w1, w2, w321 sbcs x1, x2, x322 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) immediate30;==---------------------------------------------------------------------------==31 32 add w3, w4, #102433 add w3, w4, #1024, lsl #034 add x3, x4, #102435 add x3, x4, #1024, lsl #036 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 #1243 add w3, w4, #419430444 add w3, w4, #0, lsl #1245 add x3, x4, #1024, lsl #1246 add x3, x4, #419430447 add x3, x4, #0, lsl #1248 add sp, sp, #3249 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, #102459 adds w3, w4, #1024, lsl #060 adds w3, w4, #1024, lsl #1261 adds x3, x4, #102462 adds x3, x4, #1024, lsl #063 adds x3, x4, #1024, lsl #1264 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, #102473 sub w3, w4, #1024, lsl #074 sub w3, w4, #1024, lsl #1275 sub x3, x4, #102476 sub x3, x4, #1024, lsl #077 sub x3, x4, #1024, lsl #1278 sub sp, sp, #3279 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, #102489 subs w3, w4, #1024, lsl #090 subs w3, w4, #1024, lsl #1291 subs x3, x4, #102492 subs x3, x4, #1024, lsl #093 subs x3, x4, #1024, lsl #1294 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) shift104;==---------------------------------------------------------------------------==105 106 add w12, w13, w14107 add x12, x13, x14108 add w12, w13, w14, lsl #12109 add x12, x13, x14, lsl #12110 add x12, x13, x14, lsr #42111 add x12, x13, x14, asr #39112 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, w14121 sub x12, x13, x14122 sub w12, w13, w14, lsl #12123 sub x12, x13, x14, lsl #12124 sub x12, x13, x14, lsr #42125 sub x12, x13, x14, asr #39126 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, w14135 adds x12, x13, x14136 adds w12, w13, w14, lsl #12137 adds x12, x13, x14, lsl #12138 adds x12, x13, x14, lsr #42139 adds x12, x13, x14, asr #39140 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, w14149 subs x12, x13, x14150 subs w12, w13, w14, lsl #12151 subs x12, x13, x14, lsl #12152 subs x12, x13, x14, lsr #42153 subs x12, x13, x14, asr #39154 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://14354073163 add X2, X2, X2164; CHECK: add x2, x2, x2 ; encoding: [0x42,0x00,0x02,0x8b]165 166;==---------------------------------------------------------------------------==167; Add/Subtract with (optional) extend168;==---------------------------------------------------------------------------==169 170 add w1, w2, w3, uxtb171 add w1, w2, w3, uxth172 add w1, w2, w3, uxtw173 add w1, w2, w3, uxtx174 add w1, w2, w3, sxtb175 add w1, w2, w3, sxth176 add w1, w2, w3, sxtw177 add w1, w2, w3, sxtx178 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, uxtb189 add x1, x2, w3, uxth190 add x1, x2, w3, uxtw191 add x1, x2, w3, sxtb192 add x1, x2, w3, sxth193 add x1, x2, w3, sxtw194 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, w3203 add w1, wsp, w3, uxtw #0204 add w2, wsp, w3, lsl #1205 add sp, x2, x3206 add sp, x2, x3, uxtx #0207 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, uxtb215 sub w1, w2, w3, uxth216 sub w1, w2, w3, uxtw217 sub w1, w2, w3, uxtx218 sub w1, w2, w3, sxtb219 sub w1, w2, w3, sxth220 sub w1, w2, w3, sxtw221 sub w1, w2, w3, sxtx222 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, uxtb233 sub x1, x2, w3, uxth234 sub x1, x2, w3, uxtw235 sub x1, x2, w3, sxtb236 sub x1, x2, w3, sxth237 sub x1, x2, w3, sxtw238 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, w3247 sub w1, wsp, w3, uxtw #0248 sub sp, x2, x3249 sub sp, x2, x3, uxtx #0250 sub sp, x3, x7, lsl #4251 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, uxtb259 adds w1, w2, w3, uxth260 adds w1, w2, w3, uxtw261 adds w1, w2, w3, uxtx262 adds w1, w2, w3, sxtb263 adds w1, w2, w3, sxth264 adds w1, w2, w3, sxtw265 adds w1, w2, w3, sxtx266 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, uxtb277 adds x1, x2, w3, uxth278 adds x1, x2, w3, uxtw279 adds x1, x2, w3, uxtx280 adds x1, x2, w3, sxtb281 adds x1, x2, w3, sxth282 adds x1, x2, w3, sxtw283 adds x1, x2, w3, sxtx284 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, w3295 adds w1, wsp, w3, uxtw #0296 adds wzr, wsp, w3, lsl #4297 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, uxtb303 subs w1, w2, w3, uxth304 subs w1, w2, w3, uxtw305 subs w1, w2, w3, uxtx306 subs w1, w2, w3, sxtb307 subs w1, w2, w3, sxth308 subs w1, w2, w3, sxtw309 subs w1, w2, w3, sxtx310 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, uxtb321 subs x1, x2, w3, uxth322 subs x1, x2, w3, uxtw323 subs x1, x2, w3, uxtx324 subs x1, x2, w3, sxtb325 subs x1, x2, w3, sxth326 subs x1, x2, w3, sxtw327 subs x1, x2, w3, sxtx328 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, w3339 subs w1, wsp, w3, uxtw #0340 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 #0345 subs x3, sp, x9, lsl #2346 cmp wsp, w8, uxtw347 subs wzr, wsp, w8, uxtw348 cmp sp, w8, uxtw349 subs xzr, sp, w8, uxtw350 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, uxtw359 sub w1, wsp, w8, uxtw360 sub wsp, wsp, w8, uxtw361 sub sp, x9, w8, uxtw362 sub x1, sp, w8, uxtw363 sub sp, sp, w8, uxtw364 subs w1, wsp, w8, uxtw365 subs x1, sp, w8, uxtw366 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 divide378;==---------------------------------------------------------------------------==379 380 sdiv w1, w2, w3381 sdiv x1, x2, x3382 udiv w1, w2, w3383 udiv x1, x2, x3384 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 shifts392;==---------------------------------------------------------------------------==393 394 asrv w1, w2, w3395 asrv x1, x2, x3396 asr w1, w2, w3397 asr x1, x2, x3398 lslv w1, w2, w3399 lslv x1, x2, x3400 lsl w1, w2, w3401 lsl x1, x2, x3402 lsrv w1, w2, w3403 lsrv x1, x2, x3404 lsr w1, w2, w3405 lsr x1, x2, x3406 rorv w1, w2, w3407 rorv x1, x2, x3408 ror w1, w2, w3409 ror x1, x2, x3410 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 instructions430;==---------------------------------------------------------------------------==431 432 cls w1, w2433 cls x1, x2434 clz w1, w2435 clz x1, x2436 rbit w1, w2437 rbit x1, x2438 rev w1, w2439 rev x1, x2440 rev16 w1, w2441 rev16 x1, x2442 rev32 x1, x2443 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 instructions458;==---------------------------------------------------------------------------==459 460 madd w1, w2, w3, w4461 madd x1, x2, x3, x4462 msub w1, w2, w3, w4463 msub x1, x2, x3, x4464 smaddl x1, w2, w3, x4465 smsubl x1, w2, w3, x4466 umaddl x1, w2, w3, x4467 umsubl x1, w2, w3, x4468 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 instructions480;==---------------------------------------------------------------------------==481 482 smulh x1, x2, x3483 umulh x1, x2, x3484 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 instructions490;==---------------------------------------------------------------------------==491 492 movz w0, #1493 movz x0, #1494 movz w0, #1, lsl #16495 movz x0, #1, lsl #16496 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, #2503 movn x0, #2504 movn w0, #2, lsl #16505 movn x0, #2, lsl #16506 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, #1513 movk x0, #1514 movk w0, #1, lsl #16515 movk x0, #1, lsl #16516 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 instructions524;==---------------------------------------------------------------------------==525 526 ccmn w1, #2, #3, eq527 ccmn x1, #2, #3, eq528 ccmp w1, #2, #3, eq529 ccmp x1, #2, #3, eq530 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, eq537 ccmn x1, x2, #3, eq538 ccmp w1, w2, #3, eq539 ccmp x1, x2, #3, eq540 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 instructions548;==---------------------------------------------------------------------------==549 550 csel w1, w2, w3, eq551 csel x1, x2, x3, eq552 csinc w1, w2, w3, eq553 csinc x1, x2, x3, eq554 csinv w1, w2, w3, eq555 csinv x1, x2, x3, eq556 csneg w1, w2, w3, eq557 csneg x1, x2, x3, eq558 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, EQ570 CSEL W15, W6, W26, NE571 CSEL W14, W5, W25, CS572 CSEL W13, W4, W24, HS573 csel w12, w3, w23, CC574 csel w11, w2, w22, LO575 csel w10, w1, w21, MI576 csel x9, x9, x1, PL577 csel x8, x8, x2, VS578 CSEL X7, X7, X3, VC579 CSEL X6, X7, X4, HI580 CSEL X5, X6, X5, LS581 CSEL X4, X5, X6, GE582 csel x3, x4, x7, LT583 csel x2, x3, x8, GT584 csel x1, x2, x9, LE585 csel x10, x1, x20, AL586 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 arithmetic608;==---------------------------------------------------------------------------==609 uqxtn b4, h2610 uqxtn h2, s3611 uqxtn s9, d2612 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