160 lines · plain
1// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve 2>&1 < %s| FileCheck %s2 3// --------------------------------------------------------------------------//4// Invalid operand (.b, .h)5 6ldff1w z12.b, p7/z, [x0]7// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width8// CHECK-NEXT: ldff1w z12.b, p7/z, [x0]9// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:10 11ldff1w z4.h, p7/z, [x0]12// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width13// CHECK-NEXT: ldff1w z4.h, p7/z, [x0]14// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:15 16// --------------------------------------------------------------------------//17// restricted predicate has range [0, 7].18 19ldff1w z12.s, p8/z, [x0]20// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid restricted predicate register, expected p0..p7 (without element suffix)21// CHECK-NEXT: ldff1w z12.s, p8/z, [x0]22// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:23 24ldff1w z4.d, p8/z, [x0]25// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid restricted predicate register, expected p0..p7 (without element suffix)26// CHECK-NEXT: ldff1w z4.d, p8/z, [x0]27// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:28 29// --------------------------------------------------------------------------//30// Invalid scalar + scalar addressing modes31 32ldff1w z0.s, p0/z, [x0, sp]33// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: register must be x0..x30 or xzr, with required shift 'lsl #2'34// CHECK-NEXT: ldff1w z0.s, p0/z, [x0, sp]35// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:36 37ldff1w z0.s, p0/z, [x0, x0, lsl #3]38// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: register must be x0..x30 or xzr, with required shift 'lsl #2'39// CHECK-NEXT: ldff1w z0.s, p0/z, [x0, x0, lsl #3]40// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:41 42ldff1w z0.s, p0/z, [x0, w0]43// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: register must be x0..x30 or xzr, with required shift 'lsl #2'44// CHECK-NEXT: ldff1w z0.s, p0/z, [x0, w0]45// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:46 47ldff1w z0.s, p0/z, [x0, w0, uxtw]48// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: register must be x0..x30 or xzr, with required shift 'lsl #2'49// CHECK-NEXT: ldff1w z0.s, p0/z, [x0, w0, uxtw]50// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:51 52 53// --------------------------------------------------------------------------//54// Invalid scalar + vector addressing modes55 56ldff1w z0.d, p0/z, [x0, z0.h]57// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand58// CHECK-NEXT: ldff1w z0.d, p0/z, [x0, z0.h]59// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:60 61ldff1w z0.d, p0/z, [x0, z0.s]62// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand63// CHECK-NEXT: ldff1w z0.d, p0/z, [x0, z0.s]64// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:65 66ldff1w z0.s, p0/z, [x0, z0.s]67// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid shift/extend specified, expected 'z[0..31].s, (uxtw|sxtw)'68// CHECK-NEXT: ldff1w z0.s, p0/z, [x0, z0.s]69// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:70 71ldff1w z0.s, p0/z, [x0, z0.s, uxtw #3]72// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid shift/extend specified, expected 'z[0..31].s, (uxtw|sxtw) #2'73// CHECK-NEXT: ldff1w z0.s, p0/z, [x0, z0.s, uxtw #3]74// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:75 76ldff1w z0.s, p0/z, [x0, z0.s, lsl #2]77// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid shift/extend specified, expected 'z[0..31].s, (uxtw|sxtw) #2'78// CHECK-NEXT: ldff1w z0.s, p0/z, [x0, z0.s, lsl #2]79// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:80 81ldff1w z0.d, p0/z, [x0, z0.d, lsl #3]82// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid shift/extend specified, expected 'z[0..31].d, (lsl|uxtw|sxtw) #2'83// CHECK-NEXT: ldff1w z0.d, p0/z, [x0, z0.d, lsl #3]84// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:85 86ldff1w z0.d, p0/z, [x0, z0.d, sxtw #3]87// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid shift/extend specified, expected 'z[0..31].d, (lsl|uxtw|sxtw) #2'88// CHECK-NEXT: ldff1w z0.d, p0/z, [x0, z0.d, sxtw #3]89// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:90 91 92// --------------------------------------------------------------------------//93// Invalid vector + immediate addressing modes94 95ldff1w z0.s, p0/z, [z0.s, #-4]96// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].97// CHECK-NEXT: ldff1w z0.s, p0/z, [z0.s, #-4]98// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:99 100ldff1w z0.s, p0/z, [z0.s, #-1]101// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].102// CHECK-NEXT: ldff1w z0.s, p0/z, [z0.s, #-1]103// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:104 105ldff1w z0.s, p0/z, [z0.s, #125]106// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].107// CHECK-NEXT: ldff1w z0.s, p0/z, [z0.s, #125]108// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:109 110ldff1w z0.s, p0/z, [z0.s, #128]111// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].112// CHECK-NEXT: ldff1w z0.s, p0/z, [z0.s, #128]113// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:114 115ldff1w z0.s, p0/z, [z0.s, #3]116// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].117// CHECK-NEXT: ldff1w z0.s, p0/z, [z0.s, #3]118// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:119 120ldff1w z0.d, p0/z, [z0.d, #-4]121// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].122// CHECK-NEXT: ldff1w z0.d, p0/z, [z0.d, #-4]123// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:124 125ldff1w z0.d, p0/z, [z0.d, #-1]126// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].127// CHECK-NEXT: ldff1w z0.d, p0/z, [z0.d, #-1]128// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:129 130ldff1w z0.d, p0/z, [z0.d, #125]131// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].132// CHECK-NEXT: ldff1w z0.d, p0/z, [z0.d, #125]133// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:134 135ldff1w z0.d, p0/z, [z0.d, #128]136// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].137// CHECK-NEXT: ldff1w z0.d, p0/z, [z0.d, #128]138// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:139 140ldff1w z0.d, p0/z, [z0.d, #3]141// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].142// CHECK-NEXT: ldff1w z0.d, p0/z, [z0.d, #3]143// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:144 145 146// --------------------------------------------------------------------------//147// Negative tests for instructions that are incompatible with movprfx148 149movprfx z0.d, p0/z, z7.d150ldff1w { z0.d }, p0/z, [z0.d]151// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov152// CHECK-NEXT: ldff1w { z0.d }, p0/z, [z0.d]153// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:154 155movprfx z0, z7156ldff1w { z0.d }, p0/z, [z0.d]157// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov158// CHECK-NEXT: ldff1w { z0.d }, p0/z, [z0.d]159// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:160