[llvm] r337272 - [AArch64][SVE] Asm: Support for predicated FP operations (FP immediate)
Sander de Smalen via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 17 05:36:09 PDT 2018
Author: s.desmalen
Date: Tue Jul 17 05:36:08 2018
New Revision: 337272
URL: http://llvm.org/viewvc/llvm-project?rev=337272&view=rev
Log:
[AArch64][SVE] Asm: Support for predicated FP operations (FP immediate)
This patch completes support for the following floating point
instructions that take FP immediates:
FADD* (addition)
FSUB (subtract)
FSUBR (subtract reverse form)
FMUL* (multiplication)
FMAX* (maximum)
FMAXNM (maximum number)
FMIN (maximum)
FMINNM (maximum number)
All operations are predicated and take a FP immediate operand,
e.g.
fadd z0.h, p0/m, z0.h, #0.5
fmin z0.s, p0/m, z0.s, #1.0
^___________^ (tied)
* Instructions added in a previous patch.
Modified:
llvm/trunk/lib/Target/AArch64/AArch64SVEInstrInfo.td
llvm/trunk/test/MC/AArch64/SVE/fmaxnm-diagnostics.s
llvm/trunk/test/MC/AArch64/SVE/fmaxnm.s
llvm/trunk/test/MC/AArch64/SVE/fmin-diagnostics.s
llvm/trunk/test/MC/AArch64/SVE/fmin.s
llvm/trunk/test/MC/AArch64/SVE/fminnm-diagnostics.s
llvm/trunk/test/MC/AArch64/SVE/fminnm.s
llvm/trunk/test/MC/AArch64/SVE/fsub-diagnostics.s
llvm/trunk/test/MC/AArch64/SVE/fsub.s
llvm/trunk/test/MC/AArch64/SVE/fsubr-diagnostics.s
llvm/trunk/test/MC/AArch64/SVE/fsubr.s
Modified: llvm/trunk/lib/Target/AArch64/AArch64SVEInstrInfo.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64SVEInstrInfo.td?rev=337272&r1=337271&r2=337272&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AArch64/AArch64SVEInstrInfo.td (original)
+++ llvm/trunk/lib/Target/AArch64/AArch64SVEInstrInfo.td Tue Jul 17 05:36:08 2018
@@ -82,8 +82,13 @@ let Predicates = [HasSVE] in {
defm UABD_ZPmZ : sve_int_bin_pred_arit_1<0b101, "uabd">;
defm FADD_ZPmI : sve_fp_2op_i_p_zds<0b000, "fadd", sve_fpimm_half_one>;
+ defm FSUB_ZPmI : sve_fp_2op_i_p_zds<0b001, "fsub", sve_fpimm_half_one>;
defm FMUL_ZPmI : sve_fp_2op_i_p_zds<0b010, "fmul", sve_fpimm_half_two>;
+ defm FSUBR_ZPmI : sve_fp_2op_i_p_zds<0b011, "fsubr", sve_fpimm_half_one>;
+ defm FMAXNM_ZPmI : sve_fp_2op_i_p_zds<0b100, "fmaxnm", sve_fpimm_zero_one>;
+ defm FMINNM_ZPmI : sve_fp_2op_i_p_zds<0b101, "fminnm", sve_fpimm_zero_one>;
defm FMAX_ZPmI : sve_fp_2op_i_p_zds<0b110, "fmax", sve_fpimm_zero_one>;
+ defm FMIN_ZPmI : sve_fp_2op_i_p_zds<0b111, "fmin", sve_fpimm_zero_one>;
defm FADD_ZPmZ : sve_fp_2op_p_zds<0b0000, "fadd">;
defm FSUB_ZPmZ : sve_fp_2op_p_zds<0b0001, "fsub">;
Modified: llvm/trunk/test/MC/AArch64/SVE/fmaxnm-diagnostics.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/SVE/fmaxnm-diagnostics.s?rev=337272&r1=337271&r2=337272&view=diff
==============================================================================
--- llvm/trunk/test/MC/AArch64/SVE/fmaxnm-diagnostics.s (original)
+++ llvm/trunk/test/MC/AArch64/SVE/fmaxnm-diagnostics.s Tue Jul 17 05:36:08 2018
@@ -1,5 +1,33 @@
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve 2>&1 < %s| FileCheck %s
+// ------------------------------------------------------------------------- //
+// Invalid immediates (must be 0.0 or 1.0)
+
+fmaxnm z0.h, p0/m, z0.h, #0.5
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.0 or 1.0.
+// CHECK-NEXT: fmaxnm z0.h, p0/m, z0.h, #0.5
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+fmaxnm z0.h, p0/m, z0.h, #-0.0
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.0 or 1.0.
+// CHECK-NEXT: fmaxnm z0.h, p0/m, z0.h, #-0.0
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+fmaxnm z0.h, p0/m, z0.h, #0.0000000000000000000000001
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.0 or 1.0.
+// CHECK-NEXT: fmaxnm z0.h, p0/m, z0.h, #0.0000000000000000000000001
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+fmaxnm z0.h, p0/m, z0.h, #1.0000000000000000000000001
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.0 or 1.0.
+// CHECK-NEXT: fmaxnm z0.h, p0/m, z0.h, #1.0000000000000000000000001
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+fmaxnm z0.h, p0/m, z0.h, #0.9999999999999999999999999
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.0 or 1.0.
+// CHECK-NEXT: fmaxnm z0.h, p0/m, z0.h, #0.9999999999999999999999999
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
// ------------------------------------------------------------------------- //
// Tied operands must match
Modified: llvm/trunk/test/MC/AArch64/SVE/fmaxnm.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/SVE/fmaxnm.s?rev=337272&r1=337271&r2=337272&view=diff
==============================================================================
--- llvm/trunk/test/MC/AArch64/SVE/fmaxnm.s (original)
+++ llvm/trunk/test/MC/AArch64/SVE/fmaxnm.s Tue Jul 17 05:36:08 2018
@@ -7,6 +7,54 @@
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve < %s \
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
+fmaxnm z0.h, p0/m, z0.h, #0.000000000000000
+// CHECK-INST: fmaxnm z0.h, p0/m, z0.h, #0.0
+// CHECK-ENCODING: [0x00,0x80,0x5c,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 00 80 5c 65 <unknown>
+
+fmaxnm z0.h, p0/m, z0.h, #0.0
+// CHECK-INST: fmaxnm z0.h, p0/m, z0.h, #0.0
+// CHECK-ENCODING: [0x00,0x80,0x5c,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 00 80 5c 65 <unknown>
+
+fmaxnm z0.s, p0/m, z0.s, #0.0
+// CHECK-INST: fmaxnm z0.s, p0/m, z0.s, #0.0
+// CHECK-ENCODING: [0x00,0x80,0x9c,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 00 80 9c 65 <unknown>
+
+fmaxnm z0.d, p0/m, z0.d, #0.0
+// CHECK-INST: fmaxnm z0.d, p0/m, z0.d, #0.0
+// CHECK-ENCODING: [0x00,0x80,0xdc,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 00 80 dc 65 <unknown>
+
+fmaxnm z31.h, p7/m, z31.h, #1.000000000000000
+// CHECK-INST: fmaxnm z31.h, p7/m, z31.h, #1.0
+// CHECK-ENCODING: [0x3f,0x9c,0x5c,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 3f 9c 5c 65 <unknown>
+
+fmaxnm z31.h, p7/m, z31.h, #1.0
+// CHECK-INST: fmaxnm z31.h, p7/m, z31.h, #1.0
+// CHECK-ENCODING: [0x3f,0x9c,0x5c,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 3f 9c 5c 65 <unknown>
+
+fmaxnm z31.s, p7/m, z31.s, #1.0
+// CHECK-INST: fmaxnm z31.s, p7/m, z31.s, #1.0
+// CHECK-ENCODING: [0x3f,0x9c,0x9c,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 3f 9c 9c 65 <unknown>
+
+fmaxnm z31.d, p7/m, z31.d, #1.0
+// CHECK-INST: fmaxnm z31.d, p7/m, z31.d, #1.0
+// CHECK-ENCODING: [0x3f,0x9c,0xdc,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 3f 9c dc 65 <unknown>
+
fmaxnm z0.h, p7/m, z0.h, z31.h
// CHECK-INST: fmaxnm z0.h, p7/m, z0.h, z31.h
// CHECK-ENCODING: [0xe0,0x9f,0x44,0x65]
Modified: llvm/trunk/test/MC/AArch64/SVE/fmin-diagnostics.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/SVE/fmin-diagnostics.s?rev=337272&r1=337271&r2=337272&view=diff
==============================================================================
--- llvm/trunk/test/MC/AArch64/SVE/fmin-diagnostics.s (original)
+++ llvm/trunk/test/MC/AArch64/SVE/fmin-diagnostics.s Tue Jul 17 05:36:08 2018
@@ -1,5 +1,33 @@
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve 2>&1 < %s| FileCheck %s
+// ------------------------------------------------------------------------- //
+// Invalid immediates (must be 0.0 or 1.0)
+
+fmin z0.h, p0/m, z0.h, #0.5
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.0 or 1.0.
+// CHECK-NEXT: fmin z0.h, p0/m, z0.h, #0.5
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+fmin z0.h, p0/m, z0.h, #-0.0
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.0 or 1.0.
+// CHECK-NEXT: fmin z0.h, p0/m, z0.h, #-0.0
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+fmin z0.h, p0/m, z0.h, #0.0000000000000000000000001
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.0 or 1.0.
+// CHECK-NEXT: fmin z0.h, p0/m, z0.h, #0.0000000000000000000000001
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+fmin z0.h, p0/m, z0.h, #1.0000000000000000000000001
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.0 or 1.0.
+// CHECK-NEXT: fmin z0.h, p0/m, z0.h, #1.0000000000000000000000001
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+fmin z0.h, p0/m, z0.h, #0.9999999999999999999999999
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.0 or 1.0.
+// CHECK-NEXT: fmin z0.h, p0/m, z0.h, #0.9999999999999999999999999
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
// ------------------------------------------------------------------------- //
// Tied operands must match
Modified: llvm/trunk/test/MC/AArch64/SVE/fmin.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/SVE/fmin.s?rev=337272&r1=337271&r2=337272&view=diff
==============================================================================
--- llvm/trunk/test/MC/AArch64/SVE/fmin.s (original)
+++ llvm/trunk/test/MC/AArch64/SVE/fmin.s Tue Jul 17 05:36:08 2018
@@ -7,6 +7,54 @@
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve < %s \
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
+fmin z0.h, p0/m, z0.h, #0.000000000000000
+// CHECK-INST: fmin z0.h, p0/m, z0.h, #0.0
+// CHECK-ENCODING: [0x00,0x80,0x5f,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 00 80 5f 65 <unknown>
+
+fmin z0.h, p0/m, z0.h, #0.0
+// CHECK-INST: fmin z0.h, p0/m, z0.h, #0.0
+// CHECK-ENCODING: [0x00,0x80,0x5f,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 00 80 5f 65 <unknown>
+
+fmin z0.s, p0/m, z0.s, #0.0
+// CHECK-INST: fmin z0.s, p0/m, z0.s, #0.0
+// CHECK-ENCODING: [0x00,0x80,0x9f,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 00 80 9f 65 <unknown>
+
+fmin z0.d, p0/m, z0.d, #0.0
+// CHECK-INST: fmin z0.d, p0/m, z0.d, #0.0
+// CHECK-ENCODING: [0x00,0x80,0xdf,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 00 80 df 65 <unknown>
+
+fmin z31.h, p7/m, z31.h, #1.000000000000000
+// CHECK-INST: fmin z31.h, p7/m, z31.h, #1.0
+// CHECK-ENCODING: [0x3f,0x9c,0x5f,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 3f 9c 5f 65 <unknown>
+
+fmin z31.h, p7/m, z31.h, #1.0
+// CHECK-INST: fmin z31.h, p7/m, z31.h, #1.0
+// CHECK-ENCODING: [0x3f,0x9c,0x5f,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 3f 9c 5f 65 <unknown>
+
+fmin z31.s, p7/m, z31.s, #1.0
+// CHECK-INST: fmin z31.s, p7/m, z31.s, #1.0
+// CHECK-ENCODING: [0x3f,0x9c,0x9f,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 3f 9c 9f 65 <unknown>
+
+fmin z31.d, p7/m, z31.d, #1.0
+// CHECK-INST: fmin z31.d, p7/m, z31.d, #1.0
+// CHECK-ENCODING: [0x3f,0x9c,0xdf,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 3f 9c df 65 <unknown>
+
fmin z0.h, p7/m, z0.h, z31.h
// CHECK-INST: fmin z0.h, p7/m, z0.h, z31.h
// CHECK-ENCODING: [0xe0,0x9f,0x47,0x65]
Modified: llvm/trunk/test/MC/AArch64/SVE/fminnm-diagnostics.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/SVE/fminnm-diagnostics.s?rev=337272&r1=337271&r2=337272&view=diff
==============================================================================
--- llvm/trunk/test/MC/AArch64/SVE/fminnm-diagnostics.s (original)
+++ llvm/trunk/test/MC/AArch64/SVE/fminnm-diagnostics.s Tue Jul 17 05:36:08 2018
@@ -1,5 +1,33 @@
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve 2>&1 < %s| FileCheck %s
+// ------------------------------------------------------------------------- //
+// Invalid immediates (must be 0.0 or 1.0)
+
+fminnm z0.h, p0/m, z0.h, #0.5
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.0 or 1.0.
+// CHECK-NEXT: fminnm z0.h, p0/m, z0.h, #0.5
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+fminnm z0.h, p0/m, z0.h, #-0.0
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.0 or 1.0.
+// CHECK-NEXT: fminnm z0.h, p0/m, z0.h, #-0.0
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+fminnm z0.h, p0/m, z0.h, #0.0000000000000000000000001
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.0 or 1.0.
+// CHECK-NEXT: fminnm z0.h, p0/m, z0.h, #0.0000000000000000000000001
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+fminnm z0.h, p0/m, z0.h, #1.0000000000000000000000001
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.0 or 1.0.
+// CHECK-NEXT: fminnm z0.h, p0/m, z0.h, #1.0000000000000000000000001
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+fminnm z0.h, p0/m, z0.h, #0.9999999999999999999999999
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.0 or 1.0.
+// CHECK-NEXT: fminnm z0.h, p0/m, z0.h, #0.9999999999999999999999999
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
// ------------------------------------------------------------------------- //
// Tied operands must match
Modified: llvm/trunk/test/MC/AArch64/SVE/fminnm.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/SVE/fminnm.s?rev=337272&r1=337271&r2=337272&view=diff
==============================================================================
--- llvm/trunk/test/MC/AArch64/SVE/fminnm.s (original)
+++ llvm/trunk/test/MC/AArch64/SVE/fminnm.s Tue Jul 17 05:36:08 2018
@@ -7,6 +7,54 @@
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve < %s \
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
+fminnm z0.h, p0/m, z0.h, #0.000000000000000
+// CHECK-INST: fminnm z0.h, p0/m, z0.h, #0.0
+// CHECK-ENCODING: [0x00,0x80,0x5d,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 00 80 5d 65 <unknown>
+
+fminnm z0.h, p0/m, z0.h, #0.0
+// CHECK-INST: fminnm z0.h, p0/m, z0.h, #0.0
+// CHECK-ENCODING: [0x00,0x80,0x5d,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 00 80 5d 65 <unknown>
+
+fminnm z0.s, p0/m, z0.s, #0.0
+// CHECK-INST: fminnm z0.s, p0/m, z0.s, #0.0
+// CHECK-ENCODING: [0x00,0x80,0x9d,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 00 80 9d 65 <unknown>
+
+fminnm z0.d, p0/m, z0.d, #0.0
+// CHECK-INST: fminnm z0.d, p0/m, z0.d, #0.0
+// CHECK-ENCODING: [0x00,0x80,0xdd,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 00 80 dd 65 <unknown>
+
+fminnm z31.h, p7/m, z31.h, #1.000000000000000
+// CHECK-INST: fminnm z31.h, p7/m, z31.h, #1.0
+// CHECK-ENCODING: [0x3f,0x9c,0x5d,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 3f 9c 5d 65 <unknown>
+
+fminnm z31.h, p7/m, z31.h, #1.0
+// CHECK-INST: fminnm z31.h, p7/m, z31.h, #1.0
+// CHECK-ENCODING: [0x3f,0x9c,0x5d,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 3f 9c 5d 65 <unknown>
+
+fminnm z31.s, p7/m, z31.s, #1.0
+// CHECK-INST: fminnm z31.s, p7/m, z31.s, #1.0
+// CHECK-ENCODING: [0x3f,0x9c,0x9d,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 3f 9c 9d 65 <unknown>
+
+fminnm z31.d, p7/m, z31.d, #1.0
+// CHECK-INST: fminnm z31.d, p7/m, z31.d, #1.0
+// CHECK-ENCODING: [0x3f,0x9c,0xdd,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 3f 9c dd 65 <unknown>
+
fminnm z0.h, p7/m, z0.h, z31.h
// CHECK-INST: fminnm z0.h, p7/m, z0.h, z31.h
// CHECK-ENCODING: [0xe0,0x9f,0x45,0x65]
Modified: llvm/trunk/test/MC/AArch64/SVE/fsub-diagnostics.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/SVE/fsub-diagnostics.s?rev=337272&r1=337271&r2=337272&view=diff
==============================================================================
--- llvm/trunk/test/MC/AArch64/SVE/fsub-diagnostics.s (original)
+++ llvm/trunk/test/MC/AArch64/SVE/fsub-diagnostics.s Tue Jul 17 05:36:08 2018
@@ -1,5 +1,33 @@
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve 2>&1 < %s| FileCheck %s
+// ------------------------------------------------------------------------- //
+// Invalid immediates (must be 0.5 or 1.0)
+
+fsub z0.h, p0/m, z0.h, #0.0
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.5 or 1.0.
+// CHECK-NEXT: fsub z0.h, p0/m, z0.h, #0.0
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+fsub z0.h, p0/m, z0.h, #0.4999999999999999999999999
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.5 or 1.0.
+// CHECK-NEXT: fsub z0.h, p0/m, z0.h, #0.4999999999999999999999999
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+fsub z0.h, p0/m, z0.h, #0.5000000000000000000000001
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.5 or 1.0.
+// CHECK-NEXT: fsub z0.h, p0/m, z0.h, #0.5000000000000000000000001
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+fsub z0.h, p0/m, z0.h, #1.0000000000000000000000001
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.5 or 1.0.
+// CHECK-NEXT: fsub z0.h, p0/m, z0.h, #1.0000000000000000000000001
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+fsub z0.h, p0/m, z0.h, #0.9999999999999999999999999
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.5 or 1.0.
+// CHECK-NEXT: fsub z0.h, p0/m, z0.h, #0.9999999999999999999999999
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
// ------------------------------------------------------------------------- //
// Tied operands must match
Modified: llvm/trunk/test/MC/AArch64/SVE/fsub.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/SVE/fsub.s?rev=337272&r1=337271&r2=337272&view=diff
==============================================================================
--- llvm/trunk/test/MC/AArch64/SVE/fsub.s (original)
+++ llvm/trunk/test/MC/AArch64/SVE/fsub.s Tue Jul 17 05:36:08 2018
@@ -7,6 +7,54 @@
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve < %s \
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
+fsub z0.h, p0/m, z0.h, #0.500000000000000
+// CHECK-INST: fsub z0.h, p0/m, z0.h, #0.5
+// CHECK-ENCODING: [0x00,0x80,0x59,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 00 80 59 65 <unknown>
+
+fsub z0.h, p0/m, z0.h, #0.5
+// CHECK-INST: fsub z0.h, p0/m, z0.h, #0.5
+// CHECK-ENCODING: [0x00,0x80,0x59,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 00 80 59 65 <unknown>
+
+fsub z0.s, p0/m, z0.s, #0.5
+// CHECK-INST: fsub z0.s, p0/m, z0.s, #0.5
+// CHECK-ENCODING: [0x00,0x80,0x99,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 00 80 99 65 <unknown>
+
+fsub z0.d, p0/m, z0.d, #0.5
+// CHECK-INST: fsub z0.d, p0/m, z0.d, #0.5
+// CHECK-ENCODING: [0x00,0x80,0xd9,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 00 80 d9 65 <unknown>
+
+fsub z31.h, p7/m, z31.h, #1.000000000000000
+// CHECK-INST: fsub z31.h, p7/m, z31.h, #1.0
+// CHECK-ENCODING: [0x3f,0x9c,0x59,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 3f 9c 59 65 <unknown>
+
+fsub z31.h, p7/m, z31.h, #1.0
+// CHECK-INST: fsub z31.h, p7/m, z31.h, #1.0
+// CHECK-ENCODING: [0x3f,0x9c,0x59,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 3f 9c 59 65 <unknown>
+
+fsub z31.s, p7/m, z31.s, #1.0
+// CHECK-INST: fsub z31.s, p7/m, z31.s, #1.0
+// CHECK-ENCODING: [0x3f,0x9c,0x99,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 3f 9c 99 65 <unknown>
+
+fsub z31.d, p7/m, z31.d, #1.0
+// CHECK-INST: fsub z31.d, p7/m, z31.d, #1.0
+// CHECK-ENCODING: [0x3f,0x9c,0xd9,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 3f 9c d9 65 <unknown>
+
fsub z0.h, p7/m, z0.h, z31.h
// CHECK-INST: fsub z0.h, p7/m, z0.h, z31.h
// CHECK-ENCODING: [0xe0,0x9f,0x41,0x65]
Modified: llvm/trunk/test/MC/AArch64/SVE/fsubr-diagnostics.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/SVE/fsubr-diagnostics.s?rev=337272&r1=337271&r2=337272&view=diff
==============================================================================
--- llvm/trunk/test/MC/AArch64/SVE/fsubr-diagnostics.s (original)
+++ llvm/trunk/test/MC/AArch64/SVE/fsubr-diagnostics.s Tue Jul 17 05:36:08 2018
@@ -1,5 +1,33 @@
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve 2>&1 < %s| FileCheck %s
+// ------------------------------------------------------------------------- //
+// Invalid immediates (must be 0.5 or 1.0)
+
+fsubr z0.h, p0/m, z0.h, #0.0
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.5 or 1.0.
+// CHECK-NEXT: fsubr z0.h, p0/m, z0.h, #0.0
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+fsubr z0.h, p0/m, z0.h, #0.4999999999999999999999999
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.5 or 1.0.
+// CHECK-NEXT: fsubr z0.h, p0/m, z0.h, #0.4999999999999999999999999
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+fsubr z0.h, p0/m, z0.h, #0.5000000000000000000000001
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.5 or 1.0.
+// CHECK-NEXT: fsubr z0.h, p0/m, z0.h, #0.5000000000000000000000001
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+fsubr z0.h, p0/m, z0.h, #1.0000000000000000000000001
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.5 or 1.0.
+// CHECK-NEXT: fsubr z0.h, p0/m, z0.h, #1.0000000000000000000000001
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+fsubr z0.h, p0/m, z0.h, #0.9999999999999999999999999
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid floating point constant, expected 0.5 or 1.0.
+// CHECK-NEXT: fsubr z0.h, p0/m, z0.h, #0.9999999999999999999999999
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
// ------------------------------------------------------------------------- //
// Tied operands must match
Modified: llvm/trunk/test/MC/AArch64/SVE/fsubr.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/SVE/fsubr.s?rev=337272&r1=337271&r2=337272&view=diff
==============================================================================
--- llvm/trunk/test/MC/AArch64/SVE/fsubr.s (original)
+++ llvm/trunk/test/MC/AArch64/SVE/fsubr.s Tue Jul 17 05:36:08 2018
@@ -7,6 +7,54 @@
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve < %s \
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
+fsubr z0.h, p0/m, z0.h, #0.500000000000000
+// CHECK-INST: fsubr z0.h, p0/m, z0.h, #0.5
+// CHECK-ENCODING: [0x00,0x80,0x5b,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 00 80 5b 65 <unknown>
+
+fsubr z0.h, p0/m, z0.h, #0.5
+// CHECK-INST: fsubr z0.h, p0/m, z0.h, #0.5
+// CHECK-ENCODING: [0x00,0x80,0x5b,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 00 80 5b 65 <unknown>
+
+fsubr z0.s, p0/m, z0.s, #0.5
+// CHECK-INST: fsubr z0.s, p0/m, z0.s, #0.5
+// CHECK-ENCODING: [0x00,0x80,0x9b,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 00 80 9b 65 <unknown>
+
+fsubr z0.d, p0/m, z0.d, #0.5
+// CHECK-INST: fsubr z0.d, p0/m, z0.d, #0.5
+// CHECK-ENCODING: [0x00,0x80,0xdb,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 00 80 db 65 <unknown>
+
+fsubr z31.h, p7/m, z31.h, #1.000000000000000
+// CHECK-INST: fsubr z31.h, p7/m, z31.h, #1.0
+// CHECK-ENCODING: [0x3f,0x9c,0x5b,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 3f 9c 5b 65 <unknown>
+
+fsubr z31.h, p7/m, z31.h, #1.0
+// CHECK-INST: fsubr z31.h, p7/m, z31.h, #1.0
+// CHECK-ENCODING: [0x3f,0x9c,0x5b,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 3f 9c 5b 65 <unknown>
+
+fsubr z31.s, p7/m, z31.s, #1.0
+// CHECK-INST: fsubr z31.s, p7/m, z31.s, #1.0
+// CHECK-ENCODING: [0x3f,0x9c,0x9b,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 3f 9c 9b 65 <unknown>
+
+fsubr z31.d, p7/m, z31.d, #1.0
+// CHECK-INST: fsubr z31.d, p7/m, z31.d, #1.0
+// CHECK-ENCODING: [0x3f,0x9c,0xdb,0x65]
+// CHECK-ERROR: instruction requires: sve
+// CHECK-UNKNOWN: 3f 9c db 65 <unknown>
+
fsubr z0.h, p7/m, z0.h, z31.h
// CHECK-INST: fsubr z0.h, p7/m, z0.h, z31.h
// CHECK-ENCODING: [0xe0,0x9f,0x43,0x65]
More information about the llvm-commits
mailing list