Home | History | Annotate | Download | only in SVE
      1 // RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve  2>&1 < %s| FileCheck %s
      2 
      3 // --------------------------------------------------------------------------//
      4 // Invalid predicate suffix
      5 fmov 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 
     10 fmov 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 
     15 fmov 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 
     24 fmov 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 
     29 fmov 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 
     34 fmov 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 
     39 fmov 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 
     44 fmov 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 
     49 fmov 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 
     54 fmov 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 
     59 fmov 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 
     64 fmov 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 
     69 fmov 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 
     74 fmov 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 
     79 fmov 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 
     84 fmov 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 
     89 fmov 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 
     94 fmov 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 
     99 fmov 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 
    104 fmov 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 
    109 fmov 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 
    114 fmov 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 
    119 fmov 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 
    124 fmov 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 
    129 fmov 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 
    134 fmov 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 
    139 fmov 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 
    148 movprfx z0.d, p0/z, z7.d
    149 fmov 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 
    154 movprfx z0, z7
    155 fmov 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