1// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve 2>&1 < %s| FileCheck %s 2 3// --------------------------------------------------------------------------// 4// Invalid predicate suffix 5fmov z0.h, p0/z, #0.0 6// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction 7// CHECK-NEXT: fmov z0.h, p0/z, #0.0 8// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 9 10fmov z0.s, p0/z, #0.0 11// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction 12// CHECK-NEXT: fmov z0.s, p0/z, #0.0 13// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 14 15fmov z0.d, p0/z, #0.0 16// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction 17// CHECK-NEXT: fmov z0.d, p0/z, #0.0 18// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 19 20 21// --------------------------------------------------------------------------// 22// Invalid immediates 23 24fmov z0.h, #-0.05859375 // r = -4, n = 15 25// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant 26// CHECK-NEXT: fmov z0.h, #-0.05859375 // r = -4, n = 15 27// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 28 29fmov z0.s, #-0.05859375 // r = -4, n = 15 30// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant 31// CHECK-NEXT: fmov z0.s, #-0.05859375 // r = -4, n = 15 32// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 33 34fmov z0.d, #-0.05859375 // r = -4, n = 15 35// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant 36// CHECK-NEXT: fmov z0.d, #-0.05859375 // r = -4, n = 15 37// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 38 39fmov z0.h, #-64.00000000 // r = 5, n = 32 40// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant 41// CHECK-NEXT: fmov z0.h, #-64.00000000 // r = 5, n = 32 42// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 43 44fmov z0.s, #-64.00000000 // r = 5, n = 32 45// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant 46// CHECK-NEXT: fmov z0.s, #-64.00000000 // r = 5, n = 32 47// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 48 49fmov z0.d, #-64.00000000 // r = 5, n = 32 50// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant 51// CHECK-NEXT: fmov z0.d, #-64.00000000 // r = 5, n = 32 52// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 53 54fmov z0.h, #0.05859375 // r = -4, n = 15 55// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant 56// CHECK-NEXT: fmov z0.h, #0.05859375 // r = -4, n = 15 57// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 58 59fmov z0.s, #0.05859375 // r = -4, n = 15 60// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant 61// CHECK-NEXT: fmov z0.s, #0.05859375 // r = -4, n = 15 62// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 63 64fmov z0.d, #0.05859375 // r = -4, n = 15 65// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant 66// CHECK-NEXT: fmov z0.d, #0.05859375 // r = -4, n = 15 67// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 68 69fmov z0.h, #64.00000000 // r = 5, n = 32 70// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant 71// CHECK-NEXT: fmov z0.h, #64.00000000 // r = 5, n = 32 72// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 73 74fmov z0.s, #64.00000000 // r = 5, n = 32 75// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant 76// CHECK-NEXT: fmov z0.s, #64.00000000 // r = 5, n = 32 77// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 78 79fmov z0.d, #64.00000000 // r = 5, n = 32 80// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant 81// CHECK-NEXT: fmov z0.d, #64.00000000 // r = 5, n = 32 82// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 83 84fmov z0.h, p0/m, #-0.05859375 // r = -4, n = 15 85// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant 86// CHECK-NEXT: fmov z0.h, p0/m, #-0.05859375 // r = -4, n = 15 87// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 88 89fmov z0.s, p0/m, #-0.05859375 // r = -4, n = 15 90// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant 91// CHECK-NEXT: fmov z0.s, p0/m, #-0.05859375 // r = -4, n = 15 92// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 93 94fmov z0.d, p0/m, #-0.05859375 // r = -4, n = 15 95// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant 96// CHECK-NEXT: fmov z0.d, p0/m, #-0.05859375 // r = -4, n = 15 97// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 98 99fmov z0.h, p0/m, #-64.00000000 // r = 5, n = 32 100// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant 101// CHECK-NEXT: fmov z0.h, p0/m, #-64.00000000 // r = 5, n = 32 102// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 103 104fmov z0.s, p0/m, #-64.00000000 // r = 5, n = 32 105// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant 106// CHECK-NEXT: fmov z0.s, p0/m, #-64.00000000 // r = 5, n = 32 107// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 108 109fmov z0.d, p0/m, #-64.00000000 // r = 5, n = 32 110// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant 111// CHECK-NEXT: fmov z0.d, p0/m, #-64.00000000 // r = 5, n = 32 112// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 113 114fmov z0.h, p0/m, #0.05859375 // r = -4, n = 15 115// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant 116// CHECK-NEXT: fmov z0.h, p0/m, #0.05859375 // r = -4, n = 15 117// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 118 119fmov z0.s, p0/m, #0.05859375 // r = -4, n = 15 120// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant 121// CHECK-NEXT: fmov z0.s, p0/m, #0.05859375 // r = -4, n = 15 122// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 123 124fmov z0.d, p0/m, #0.05859375 // r = -4, n = 15 125// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant 126// CHECK-NEXT: fmov z0.d, p0/m, #0.05859375 // r = -4, n = 15 127// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 128 129fmov z0.h, p0/m, #64.00000000 // r = 5, n = 32 130// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant 131// CHECK-NEXT: fmov z0.h, p0/m, #64.00000000 // r = 5, n = 32 132// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 133 134fmov z0.s, p0/m, #64.00000000 // r = 5, n = 32 135// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant 136// CHECK-NEXT: fmov z0.s, p0/m, #64.00000000 // r = 5, n = 32 137// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 138 139fmov z0.d, p0/m, #64.00000000 // r = 5, n = 32 140// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant 141// CHECK-NEXT: fmov z0.d, p0/m, #64.00000000 // r = 5, n = 32 142// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 143 144 145// --------------------------------------------------------------------------// 146// Negative tests for instructions that are incompatible with movprfx 147 148movprfx z0.d, p0/z, z7.d 149fmov z0.d, #31.00000000 150// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov 151// CHECK-NEXT: fmov z0.d, #31.00000000 152// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 153 154movprfx z0, z7 155fmov z0.d, #31.00000000 156// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov 157// CHECK-NEXT: fmov z0.d, #31.00000000 158// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 159