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 immediates (must be 0.5 or 1.0)
      5 
      6 fadd z0.h, p0/m, z0.h, #0.0
      7 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.5 or 1.0.
      8 // CHECK-NEXT: fadd z0.h, p0/m, z0.h, #0.0
      9 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     10 
     11 fadd z0.h, p0/m, z0.h, #0.4999999999999999999999999
     12 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.5 or 1.0.
     13 // CHECK-NEXT: fadd z0.h, p0/m, z0.h, #0.4999999999999999999999999
     14 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     15 
     16 fadd z0.h, p0/m, z0.h, #0.5000000000000000000000001
     17 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.5 or 1.0.
     18 // CHECK-NEXT: fadd z0.h, p0/m, z0.h, #0.5000000000000000000000001
     19 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     20 
     21 fadd z0.h, p0/m, z0.h, #1.0000000000000000000000001
     22 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.5 or 1.0.
     23 // CHECK-NEXT: fadd z0.h, p0/m, z0.h, #1.0000000000000000000000001
     24 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     25 
     26 fadd z0.h, p0/m, z0.h, #0.9999999999999999999999999
     27 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.5 or 1.0.
     28 // CHECK-NEXT: fadd z0.h, p0/m, z0.h, #0.9999999999999999999999999
     29 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     30 
     31 
     32 // ------------------------------------------------------------------------- //
     33 // Tied operands must match
     34 
     35 fadd    z0.h, p7/m, z1.h, z31.h
     36 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must match destination register
     37 // CHECK-NEXT: fadd    z0.h, p7/m, z1.h, z31.h
     38 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     39 
     40 
     41 // ------------------------------------------------------------------------- //
     42 // Invalid element widths.
     43 
     44 fadd    z0.b, p7/m, z0.b, z31.b
     45 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
     46 // CHECK-NEXT: fadd    z0.b, p7/m, z0.b, z31.b
     47 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     48 
     49 fadd    z0.h, p7/m, z0.h, z31.s
     50 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
     51 // CHECK-NEXT: fadd    z0.h, p7/m, z0.h, z31.s
     52 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     53 
     54 fadd z0.b, z1.b, z2.b
     55 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
     56 // CHECK-NEXT: fadd z0.b, z1.b, z2.b
     57 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     58 
     59 fadd z0.h, z1.s, z2.s
     60 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
     61 // CHECK-NEXT: fadd z0.h, z1.s, z2.s
     62 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     63 
     64 // ------------------------------------------------------------------------- //
     65 // Invalid predicate
     66 
     67 fadd    z0.h, p8/m, z0.h, z31.h
     68 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: restricted predicate has range [0, 7].
     69 // CHECK-NEXT: fadd    z0.h, p8/m, z0.h, z31.h
     70 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     71 
     72 
     73 // --------------------------------------------------------------------------//
     74 // Negative tests for instructions that are incompatible with movprfx
     75 
     76 movprfx z0.d, p0/z, z7.d
     77 fadd z0.d, z1.d, z31.d
     78 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
     79 // CHECK-NEXT: fadd z0.d, z1.d, z31.d
     80 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     81 
     82 movprfx z0, z7
     83 fadd z0.d, z1.d, z31.d
     84 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
     85 // CHECK-NEXT: fadd z0.d, z1.d, z31.d
     86 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     87