163 lines · plain
1// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve 2>&1 < %s| FileCheck %s2 3// --------------------------------------------------------------------------//4// Invalid immediates (must be 0.5 or 2.0)5 6fmul z0.h, p0/m, z0.h, #1.07// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.5 or 2.0.8// CHECK-NEXT: fmul z0.h, p0/m, z0.h, #1.09// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:10 11fmul z0.h, p0/m, z0.h, #0.012// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.5 or 2.0.13// CHECK-NEXT: fmul z0.h, p0/m, z0.h, #0.014// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:15 16fmul z0.h, p0/m, z0.h, #0.499999999999999999999999917// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.5 or 2.0.18// CHECK-NEXT: fmul z0.h, p0/m, z0.h, #0.499999999999999999999999919// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:20 21fmul z0.h, p0/m, z0.h, #0.500000000000000000000000122// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.5 or 2.0.23// CHECK-NEXT: fmul z0.h, p0/m, z0.h, #0.500000000000000000000000124// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:25 26fmul z0.h, p0/m, z0.h, #2.000000000000000000000000127// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.5 or 2.0.28// CHECK-NEXT: fmul z0.h, p0/m, z0.h, #2.000000000000000000000000129// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:30 31fmul z0.h, p0/m, z0.h, #1.999999999999999999999999932// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.5 or 2.0.33// CHECK-NEXT: fmul z0.h, p0/m, z0.h, #1.999999999999999999999999934// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:35 36 37// --------------------------------------------------------------------------//38// Restricted ZPR range39 40fmul z0.h, z0.h, z8.b[0]41// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid restricted vector register, expected z0.h..z7.h42// CHECK-NEXT: fmul z0.h, z0.h, z8.b[0]43// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:44 45fmul z0.h, z0.h, z8.h[0]46// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction47// CHECK-NEXT: fmul z0.h, z0.h, z8.h[0]48// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:49 50fmul z0.s, z0.s, z8.s[0]51// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction52// CHECK-NEXT: fmul z0.s, z0.s, z8.s[0]53// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:54 55fmul z0.d, z0.d, z16.d[0]56// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction57// CHECK-NEXT: fmul z0.d, z0.d, z16.d[0]58// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:59 60 61// --------------------------------------------------------------------------//62// Index out of bounds63 64fmul z0.h, z0.h, z0.h[-1]65// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7].66// CHECK-NEXT: fmul z0.h, z0.h, z0.h[-1]67// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:68 69fmul z0.h, z0.h, z0.h[8]70// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7].71// CHECK-NEXT: fmul z0.h, z0.h, z0.h[8]72// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:73 74fmul z0.s, z0.s, z0.s[-1]75// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3].76// CHECK-NEXT: fmul z0.s, z0.s, z0.s[-1]77// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:78 79fmul z0.s, z0.s, z0.s[4]80// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3].81// CHECK-NEXT: fmul z0.s, z0.s, z0.s[4]82// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:83 84fmul z0.d, z0.d, z0.d[-1]85// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 1].86// CHECK-NEXT: fmul z0.d, z0.d, z0.d[-1]87// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:88 89fmul z0.d, z0.d, z0.d[2]90// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 1].91// CHECK-NEXT: fmul z0.d, z0.d, z0.d[2]92// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:93 94 95// ------------------------------------------------------------------------- //96// Tied operands must match97 98fmul z0.h, p7/m, z1.h, z31.h99// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must match destination register100// CHECK-NEXT: fmul z0.h, p7/m, z1.h, z31.h101// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:102 103 104// ------------------------------------------------------------------------- //105// Invalid element widths.106 107fmul z0.b, p7/m, z0.b, z31.b108// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width109// CHECK-NEXT: fmul z0.b, p7/m, z0.b, z31.b110// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:111 112fmul z0.h, p7/m, z0.h, z31.s113// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width114// CHECK-NEXT: fmul z0.h, p7/m, z0.h, z31.s115// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:116 117fmul z0.b, z1.b, z2.b118// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width119// CHECK-NEXT: fmul z0.b, z1.b, z2.b120// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:121 122fmul z0.h, z1.s, z2.s123// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width124// CHECK-NEXT: fmul z0.h, z1.s, z2.s125// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:126 127 128// ------------------------------------------------------------------------- //129// Invalid predicate130 131fmul z0.h, p8/m, z0.h, z31.h132// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid restricted predicate register, expected p0..p7 (without element suffix)133// CHECK-NEXT: fmul z0.h, p8/m, z0.h, z31.h134// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:135 136 137// --------------------------------------------------------------------------//138// Negative tests for instructions that are incompatible with movprfx139 140movprfx z0.d, p0/z, z7.d141fmul z0.d, z1.d, z31.d142// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov143// CHECK-NEXT: fmul z0.d, z1.d, z31.d144// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:145 146movprfx z0, z7147fmul z0.d, z1.d, z31.d148// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov149// CHECK-NEXT: fmul z0.d, z1.d, z31.d150// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:151 152movprfx z31.d, p0/z, z6.d153fmul z31.d, z31.d, z15.d[1]154// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov155// CHECK-NEXT: fmul z31.d, z31.d, z15.d[1]156// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:157 158movprfx z31, z6159fmul z31.d, z31.d, z15.d[1]160// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov161// CHECK-NEXT: fmul z31.d, z31.d, z15.d[1]162// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:163