1 // RUN: not llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+v8.3a,-fullfp16 < %s 2>%t | FileCheck %s --check-prefix=CHECK --check-prefix=NO-FP16 2 // RUN: FileCheck --check-prefix=STDERR --check-prefix=STDERR-NO-FP16 %s < %t 3 // RUN: not llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+v8.3a,+fullfp16 < %s 2>%t | FileCheck %s --check-prefix=CHECK --check-prefix=FP16 4 // RUN: FileCheck --check-prefix=STDERR --check-prefix=STDERR-FP16 %s < %t 5 // RUN: not llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+v8.2a,-v8.3a,+fullfp16 < %s 2>&1 | FileCheck %s --check-prefix=NO-V83A 6 7 8 // ==== FCMLA vector ==== 9 // Types 10 fcmla v0.4h, v1.4h, v2.4h, #0 11 // FP16: fcmla v0.4h, v1.4h, v2.4h, #0 // encoding: [0x20,0xc4,0x42,0x2e] 12 // STDERR-NO-FP16: :[[@LINE-2]]:{{[0-9]*}}: error: instruction requires: fullfp16 13 // NO-V83A: :[[@LINE-3]]:{{[0-9]*}}: error: instruction requires: armv8.3a 14 fcmla v0.8h, v1.8h, v2.8h, #0 15 // FP16: fcmla v0.8h, v1.8h, v2.8h, #0 // encoding: [0x20,0xc4,0x42,0x6e] 16 // STDERR-NO-FP16: :[[@LINE-2]]:{{[0-9]*}}: error: instruction requires: fullfp16 17 // NO-V83A: :[[@LINE-3]]:{{[0-9]*}}: error: instruction requires: armv8.3a 18 fcmla v0.2s, v1.2s, v2.2s, #0 19 // CHECK: fcmla v0.2s, v1.2s, v2.2s, #0 // encoding: [0x20,0xc4,0x82,0x2e] 20 // NO-V83A: :[[@LINE-2]]:{{[0-9]*}}: error: instruction requires: armv8.3a 21 fcmla v0.4s, v1.4s, v2.4s, #0 22 // CHECK: fcmla v0.4s, v1.4s, v2.4s, #0 // encoding: [0x20,0xc4,0x82,0x6e] 23 // NO-V83A: :[[@LINE-2]]:{{[0-9]*}}: error: instruction requires: armv8.3a 24 fcmla v0.2d, v1.2d, v2.2d, #0 25 // CHECK: fcmla v0.2d, v1.2d, v2.2d, #0 // encoding: [0x20,0xc4,0xc2,0x6e] 26 // NO-V83A: :[[@LINE-2]]:{{[0-9]*}}: error: instruction requires: armv8.3a 27 28 // Rotations 29 fcmla v0.2s, v1.2s, v2.2s, #0 30 // CHECK: fcmla v0.2s, v1.2s, v2.2s, #0 // encoding: [0x20,0xc4,0x82,0x2e] 31 // NO-V83A: :[[@LINE-2]]:{{[0-9]*}}: error: instruction requires: armv8.3a 32 fcmla v0.2s, v1.2s, v2.2s, #90 33 // CHECK: fcmla v0.2s, v1.2s, v2.2s, #90 // encoding: [0x20,0xcc,0x82,0x2e] 34 // NO-V83A: :[[@LINE-2]]:{{[0-9]*}}: error: instruction requires: armv8.3a 35 fcmla v0.2s, v1.2s, v2.2s, #180 36 // CHECK: fcmla v0.2s, v1.2s, v2.2s, #180 // encoding: [0x20,0xd4,0x82,0x2e] 37 // NO-V83A: :[[@LINE-2]]:{{[0-9]*}}: error: instruction requires: armv8.3a 38 fcmla v0.2s, v1.2s, v2.2s, #270 39 // CHECK: fcmla v0.2s, v1.2s, v2.2s, #270 // encoding: [0x20,0xdc,0x82,0x2e] 40 // NO-V83A: :[[@LINE-2]]:{{[0-9]*}}: error: instruction requires: armv8.3a 41 42 // Invalid rotations 43 fcmla v0.2s, v1.2s, v2.2s, #1 44 // STDERR: :[[@LINE-1]]:{{[0-9]*}}: error: complex rotation must be 0, 90, 180 or 270. 45 fcmla v0.2s, v1.2s, v2.2s, #360 46 // STDERR: :[[@LINE-1]]:{{[0-9]*}}: error: complex rotation must be 0, 90, 180 or 270. 47 fcmla v0.2s, v1.2s, v2.2s, #-90 48 // STDERR: :[[@LINE-1]]:{{[0-9]*}}: error: complex rotation must be 0, 90, 180 or 270. 49 50 // ==== FCADD vector ==== 51 // Types 52 fcadd v0.4h, v1.4h, v2.4h, #90 53 // FP16: fcadd v0.4h, v1.4h, v2.4h, #90 // encoding: [0x20,0xe4,0x42,0x2e] 54 // STDERR-NO-FP16: :[[@LINE-2]]:{{[0-9]*}}: error: instruction requires: fullfp16 55 // NO-V83A: :[[@LINE-3]]:{{[0-9]*}}: error: instruction requires: armv8.3a 56 fcadd v0.8h, v1.8h, v2.8h, #90 57 // FP16: fcadd v0.8h, v1.8h, v2.8h, #90 // encoding: [0x20,0xe4,0x42,0x6e] 58 // STDERR-NO-FP16: :[[@LINE-2]]:{{[0-9]*}}: error: instruction requires: fullfp16 59 // NO-V83A: :[[@LINE-3]]:{{[0-9]*}}: error: instruction requires: armv8.3a 60 fcadd v0.2s, v1.2s, v2.2s, #90 61 // CHECK: fcadd v0.2s, v1.2s, v2.2s, #90 // encoding: [0x20,0xe4,0x82,0x2e] 62 // NO-V83A: :[[@LINE-2]]:{{[0-9]*}}: error: instruction requires: armv8.3a 63 fcadd v0.4s, v1.4s, v2.4s, #90 64 // CHECK: fcadd v0.4s, v1.4s, v2.4s, #90 // encoding: [0x20,0xe4,0x82,0x6e] 65 // NO-V83A: :[[@LINE-2]]:{{[0-9]*}}: error: instruction requires: armv8.3a 66 fcadd v0.2d, v1.2d, v2.2d, #90 67 // CHECK: fcadd v0.2d, v1.2d, v2.2d, #90 // encoding: [0x20,0xe4,0xc2,0x6e] 68 // NO-V83A: :[[@LINE-2]]:{{[0-9]*}}: error: instruction requires: armv8.3a 69 70 // Rotations 71 fcadd v0.2s, v1.2s, v2.2s, #90 72 // CHECK: fcadd v0.2s, v1.2s, v2.2s, #90 // encoding: [0x20,0xe4,0x82,0x2e] 73 // NO-V83A: :[[@LINE-2]]:{{[0-9]*}}: error: instruction requires: armv8.3a 74 fcadd v0.2s, v1.2s, v2.2s, #270 75 // CHECK: fcadd v0.2s, v1.2s, v2.2s, #270 // encoding: [0x20,0xf4,0x82,0x2e] 76 // NO-V83A: :[[@LINE-2]]:{{[0-9]*}}: error: instruction requires: armv8.3a 77 78 // Invalid rotations 79 fcadd v0.2s, v1.2s, v2.2s, #1 80 // STDERR: :[[@LINE-1]]:{{[0-9]*}}: error: complex rotation must be 90 or 270. 81 fcadd v0.2s, v1.2s, v2.2s, #360 82 // STDERR: :[[@LINE-1]]:{{[0-9]*}}: error: complex rotation must be 90 or 270. 83 fcadd v0.2s, v1.2s, v2.2s, #-90 84 // STDERR: :[[@LINE-1]]:{{[0-9]*}}: error: complex rotation must be 90 or 270. 85 fcadd v0.2s, v1.2s, v2.2s, #0 86 // STDERR: :[[@LINE-1]]:{{[0-9]*}}: error: complex rotation must be 90 or 270. 87 fcadd v0.2s, v1.2s, v2.2s, #180 88 // STDERR: :[[@LINE-1]]:{{[0-9]*}}: error: complex rotation must be 90 or 270. 89 90 // ==== FCMLA indexed ==== 91 // Types 92 fcmla v0.4h, v1.4h, v2.h[0], #0 93 // FP16: fcmla v0.4h, v1.4h, v2.h[0], #0 // encoding: [0x20,0x10,0x42,0x2f] 94 // STDERR-NO-FP16: :[[@LINE-2]]:{{[0-9]*}}: error: instruction requires: fullfp16 95 // NO-V83A: :[[@LINE-3]]:{{[0-9]*}}: error: instruction requires: armv8.3a 96 fcmla v0.8h, v1.8h, v2.h[0], #0 97 // FP16: fcmla v0.8h, v1.8h, v2.h[0], #0 // encoding: [0x20,0x10,0x42,0x6f] 98 // STDERR-NO-FP16: :[[@LINE-2]]:{{[0-9]*}}: error: instruction requires: fullfp16 99 // NO-V83A: :[[@LINE-3]]:{{[0-9]*}}: error: instruction requires: armv8.3a 100 fcmla v0.2s, v1.2s, v2.s[0], #0 101 // STDERR: :[[@LINE-1]]:{{[0-9]*}}: error: invalid operand for instruction 102 // NO-V83A: :[[@LINE-2]]:{{[0-9]*}}: error: invalid operand for instruction 103 fcmla v0.4s, v1.4s, v2.s[0], #0 104 // CHECK: fcmla v0.4s, v1.4s, v2.s[0], #0 // encoding: [0x20,0x10,0x82,0x6f] 105 // NO-V83A: :[[@LINE-2]]:{{[0-9]*}}: error: instruction requires: armv8.3a 106 fcmla v0.2d, v1.2d, v2.d[0], #0 107 // STDERR: :[[@LINE-1]]:{{[0-9]*}}: error: invalid operand for instruction 108 // NO-V83A: :[[@LINE-2]]:{{[0-9]*}}: error: invalid operand for instruction 109 110 // Rotations 111 fcmla v0.4s, v1.4s, v2.s[0], #90 112 // CHECK: fcmla v0.4s, v1.4s, v2.s[0], #90 // encoding: [0x20,0x30,0x82,0x6f] 113 // NO-V83A: :[[@LINE-2]]:{{[0-9]*}}: error: instruction requires: armv8.3a 114 fcmla v0.4s, v1.4s, v2.s[0], #180 115 // CHECK: fcmla v0.4s, v1.4s, v2.s[0], #180 // encoding: [0x20,0x50,0x82,0x6f] 116 // NO-V83A: :[[@LINE-2]]:{{[0-9]*}}: error: instruction requires: armv8.3a 117 fcmla v0.4s, v1.4s, v2.s[0], #270 118 // CHECK: fcmla v0.4s, v1.4s, v2.s[0], #270 // encoding: [0x20,0x70,0x82,0x6f] 119 // NO-V83A: :[[@LINE-2]]:{{[0-9]*}}: error: instruction requires: armv8.3a 120 121 // Valid indices 122 fcmla v0.4h, v1.4h, v2.h[1], #0 123 // FP16: fcmla v0.4h, v1.4h, v2.h[1], #0 // encoding: [0x20,0x10,0x62,0x2f] 124 // STDERR-NO-FP16: :[[@LINE-2]]:{{[0-9]*}}: error: instruction requires: fullfp16 125 // NO-V83A: :[[@LINE-3]]:{{[0-9]*}}: error: instruction requires: armv8.3a 126 fcmla v0.8h, v1.8h, v2.h[3], #0 127 // FP16: fcmla v0.8h, v1.8h, v2.h[3], #0 // encoding: [0x20,0x18,0x62,0x6f] 128 // STDERR-NO-FP16: :[[@LINE-2]]:{{[0-9]*}}: error: instruction requires: fullfp16 129 // NO-V83A: :[[@LINE-3]]:{{[0-9]*}}: error: instruction requires: armv8.3a 130 fcmla v0.4s, v1.4s, v2.s[1], #0 131 // CHECK: fcmla v0.4s, v1.4s, v2.s[1], #0 // encoding: [0x20,0x18,0x82,0x6f] 132 // NO-V83A: :[[@LINE-2]]:{{[0-9]*}}: error: instruction requires: armv8.3a 133 134 // Invalid indices 135 fcmla v0.4h, v1.4h, v2.h[2], #0 136 // STDERR-NO-FP16: :[[@LINE-1]]:{{[0-9]*}}: error: invalid operand for instruction 137 // STDERR-FP16: :[[@LINE-2]]:{{[0-9]*}}: error: vector lane must be an integer in range [0, 1]. 138 fcmla v0.8h, v1.8h, v2.h[4], #0 139 // STDERR-NO-FP16: :[[@LINE-1]]:{{[0-9]*}}: error: invalid operand for instruction 140 // STDERR-FP16: :[[@LINE-2]]:{{[0-9]*}}: error: vector lane must be an integer in range [0, 3]. 141 fcmla v0.4s, v1.4s, v2.s[2], #0 142 // STDERR: :[[@LINE-1]]:{{[0-9]*}}: error: vector lane must be an integer in range [0, 1]. 143 144 // Invalid rotations 145 fcmla v0.4s, v1.4s, v2.s[0], #1 146 // STDERR: :[[@LINE-1]]:{{[0-9]*}}: error: complex rotation must be 0, 90, 180 or 270. 147 fcmla v0.4s, v1.4s, v2.s[0], #360 148 // STDERR: :[[@LINE-1]]:{{[0-9]*}}: error: complex rotation must be 0, 90, 180 or 270. 149 fcmla v0.4s, v1.4s, v2.s[0], #-90 150 // STDERR: :[[@LINE-1]]:{{[0-9]*}}: error: complex rotation must be 0, 90, 180 or 270. 151