This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[AArch64][PATCH 13/14] Support FP16 Adv.SIMD Shift By Immediate instructions.


ARMv8.2 adds 16-bit floating point operations as an optional extension
to the floating point and Adv.SIMD support. This patch extends
instructions in the group Adv.SIMD Shift By Immediate to support FP16,
making this support available when +simd+fp16 is enabled.

The new instructions legal make some uses of the 4h vector type that had
been invalid. This patch adjusts a test that checks for these uses.

The extended instructions are: SCVTF, FCVTZS, UCVTF and FCVTZU.

The general form for these instructions is
   <OP> <Vd>.<T>, <Vs>.<T>, #<imm>
   where T is 4h or 8h.

Tested the series for aarch64-none-linux-gnu with cross-compiled
check-binutils and check-gas.

Ok for trunk?
Matthew

gas/testsuite/
2015-12-10  Matthew Wahab  <matthew.wahab@arm.com>

	* gas/aarch64/advsimd-fp16.d: Update expected output.
	* gas/aarch64/advsimd-fp16.s: Add tests for Adv.SIMD across lanes
	instructions.
        * gas/aarch64/illegal.d: Update expected output.
        * gas/aarch64/illegal.s: Replace tests for illegal use of 'h'
	specifier.

opcodes/
2015-12-10  Matthew Wahab  <matthew.wahab@arm.com>

	* aarch64-asm-2.c: Regenerate.
	* aarch64-dis-2.c: Regenerate.
	* aarch64-opc-2.c: Regenerate.
	* aarch64-tbl.h (QL_VSHIFT_H): New.
	(aarch64_opcode_table): Add fp16 versions of scvtf, fcvtzs, ucvtf
	and fcvtzu to the Adv.SIMD shift by immediate group.

>From d47594d6cb32a823f67abdd5d640399e6496b6d1 Mon Sep 17 00:00:00 2001
From: Matthew Wahab <matthew.wahab@arm.com>
Date: Thu, 10 Sep 2015 17:42:22 +0100
Subject: [PATCH 13/14] [AArch64] Add FP16 Adv.SIMD shift by immediate
 instructions (X).

---
 gas/testsuite/gas/aarch64/advsimd-fp16.d |   28 +
 gas/testsuite/gas/aarch64/advsimd-fp16.s |   18 +-
 gas/testsuite/gas/aarch64/illegal.l      |    2 +-
 gas/testsuite/gas/aarch64/illegal.s      |    2 +-
 opcodes/aarch64-asm-2.c                  |  628 +++++------
 opcodes/aarch64-dis-2.c                  | 1797 +++++++++++++++---------------
 opcodes/aarch64-opc-2.c                  |   90 +-
 opcodes/aarch64-tbl.h                    |   15 +
 8 files changed, 1322 insertions(+), 1258 deletions(-)

diff --git a/gas/testsuite/gas/aarch64/advsimd-fp16.d b/gas/testsuite/gas/aarch64/advsimd-fp16.d
index 3b8506b..a6792ee 100644
--- a/gas/testsuite/gas/aarch64/advsimd-fp16.d
+++ b/gas/testsuite/gas/aarch64/advsimd-fp16.d
@@ -519,3 +519,31 @@ Disassembly of section \.text:
  [0-9a-f]+:	7eb0f841 	fminp	s1, v2.2s
  [0-9a-f]+:	5eb0f841 	fminp	h1, v2.2h
  [0-9a-f]+:	5eb0f800 	fminp	h0, v0.2h
+ [0-9a-f]+:	4f7de441 	scvtf	v1.2d, v2.2d, #3
+ [0-9a-f]+:	0f3de441 	scvtf	v1.2s, v2.2s, #3
+ [0-9a-f]+:	4f3de441 	scvtf	v1.4s, v2.4s, #3
+ [0-9a-f]+:	0f1de441 	scvtf	v1.4h, v2.4h, #3
+ [0-9a-f]+:	4f1de441 	scvtf	v1.8h, v2.8h, #3
+ [0-9a-f]+:	0f1fe400 	scvtf	v0.4h, v0.4h, #1
+ [0-9a-f]+:	4f1fe400 	scvtf	v0.8h, v0.8h, #1
+ [0-9a-f]+:	4f7dfc41 	fcvtzs	v1.2d, v2.2d, #3
+ [0-9a-f]+:	0f3dfc41 	fcvtzs	v1.2s, v2.2s, #3
+ [0-9a-f]+:	4f3dfc41 	fcvtzs	v1.4s, v2.4s, #3
+ [0-9a-f]+:	0f1dfc41 	fcvtzs	v1.4h, v2.4h, #3
+ [0-9a-f]+:	4f1dfc41 	fcvtzs	v1.8h, v2.8h, #3
+ [0-9a-f]+:	0f1ffc00 	fcvtzs	v0.4h, v0.4h, #1
+ [0-9a-f]+:	4f1ffc00 	fcvtzs	v0.8h, v0.8h, #1
+ [0-9a-f]+:	6f7de441 	ucvtf	v1.2d, v2.2d, #3
+ [0-9a-f]+:	2f3de441 	ucvtf	v1.2s, v2.2s, #3
+ [0-9a-f]+:	6f3de441 	ucvtf	v1.4s, v2.4s, #3
+ [0-9a-f]+:	2f1de441 	ucvtf	v1.4h, v2.4h, #3
+ [0-9a-f]+:	6f1de441 	ucvtf	v1.8h, v2.8h, #3
+ [0-9a-f]+:	2f1fe400 	ucvtf	v0.4h, v0.4h, #1
+ [0-9a-f]+:	6f1fe400 	ucvtf	v0.8h, v0.8h, #1
+ [0-9a-f]+:	6f7dfc41 	fcvtzu	v1.2d, v2.2d, #3
+ [0-9a-f]+:	2f3dfc41 	fcvtzu	v1.2s, v2.2s, #3
+ [0-9a-f]+:	6f3dfc41 	fcvtzu	v1.4s, v2.4s, #3
+ [0-9a-f]+:	2f1dfc41 	fcvtzu	v1.4h, v2.4h, #3
+ [0-9a-f]+:	6f1dfc41 	fcvtzu	v1.8h, v2.8h, #3
+ [0-9a-f]+:	2f1ffc00 	fcvtzu	v0.4h, v0.4h, #1
+ [0-9a-f]+:	6f1ffc00 	fcvtzu	v0.8h, v0.8h, #1
diff --git a/gas/testsuite/gas/aarch64/advsimd-fp16.s b/gas/testsuite/gas/aarch64/advsimd-fp16.s
index c0ea786..1eb7418 100644
--- a/gas/testsuite/gas/aarch64/advsimd-fp16.s
+++ b/gas/testsuite/gas/aarch64/advsimd-fp16.s
@@ -213,7 +213,7 @@
 	fmov	v0.4h, #1.0
 	fmov	v0.8h, #1.0
 
-	/* Adv.SIMD modified immediate.  */
+	/* Adv.SIMD scalar pairwise.  */
 
 	.macro scalar_pairwise, op
 	\op	d1, v2.2d
@@ -228,3 +228,19 @@
 	scalar_pairwise fminnmp
 	scalar_pairwise fminp
 
+	/* Adv.SIMD shift by immediate.  */
+
+	.macro shift_imm, op
+	\op v1.2d, v2.2d, #3
+	\op v1.2s, v2.2s, #3
+	\op v1.4s, v2.4s, #3
+	\op v1.4h, v2.4h, #3
+	\op v1.8h, v2.8h, #3
+	\op v0.4h, v0.4h, #1
+	\op v0.8h, v0.8h, #1
+	.endm
+
+	shift_imm scvtf
+	shift_imm fcvtzs
+	shift_imm ucvtf
+	shift_imm fcvtzu
diff --git a/gas/testsuite/gas/aarch64/illegal.l b/gas/testsuite/gas/aarch64/illegal.l
index 7482bc7..6119065 100644
--- a/gas/testsuite/gas/aarch64/illegal.l
+++ b/gas/testsuite/gas/aarch64/illegal.l
@@ -111,7 +111,7 @@
 [^:]*:160: Error: .*`sshr v0.4s,v1.4s,#33'
 [^:]*:161: Error: .*`sshr v0.4h,v1.4h,#20'
 [^:]*:163: Error: .*`shl v0.4s,v1.4s,#32'
-[^:]*:164: Error: .*`fcvtzs v0.4h,v1.4h,#2'
+[^:]*:164: Error: .*`fcvtzs v0.2h,v1.2h,#2'
 [^:]*:165: Error: .*`uqshrn v0.2s,v1.2d,33'
 [^:]*:166: Error: .*`uqrshrn v0.2s,v1.2s,32'
 [^:]*:167: Error: .*`sshll v8.8h,v2.8b,#8'
diff --git a/gas/testsuite/gas/aarch64/illegal.s b/gas/testsuite/gas/aarch64/illegal.s
index 0960b7e..ee75aff 100644
--- a/gas/testsuite/gas/aarch64/illegal.s
+++ b/gas/testsuite/gas/aarch64/illegal.s
@@ -161,7 +161,7 @@
 	sshr	v0.4h, v1.4h, #20
 
 	shl	v0.4s, v1.4s, #32
-	fcvtzs	v0.4h, v1.4h, #2
+	fcvtzs	v0.2h, v1.2h, #2
 	uqshrn	v0.2s, v1.2d, 33
 	uqrshrn	v0.2s, v1.2s, 32
 	sshll	v8.8h, v2.8b, #8
diff --git a/opcodes/aarch64-tbl.h b/opcodes/aarch64-tbl.h
index 684df5d..20dd175 100644
--- a/opcodes/aarch64-tbl.h
+++ b/opcodes/aarch64-tbl.h
@@ -406,6 +406,13 @@
   QLF3(V_2D , V_2D , V_2D )	\
 }
 
+/* e.g. SCVTF <Vd>.<T>, <Vn>.<T>, #<fbits>.  */
+#define QL_VSHIFT_H		\
+{				\
+  QLF3 (V_4H, V_4H, V_4H),	\
+  QLF3 (V_8H, V_8H, V_8H)	\
+}
+
 /* e.g. SHRN<Q> <Vd>.<Tb>, <Vn>.<Ta>, #<shift>.  */
 #define QL_VSHIFTN		\
 {				\
@@ -1832,7 +1839,11 @@ struct aarch64_opcode aarch64_opcode_table[] =
   {"sshll2", 0x4f00a400, 0xff80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSL), QL_VSHIFTL2, F_HAS_ALIAS},
   {"sxtl2", 0x4f00a400, 0xff87fc00, asimdshf, OP_SXTL2, SIMD, OP2 (Vd, Vn), QL_V2LONGBHS2, F_ALIAS | F_CONV},
   {"scvtf", 0xf00e400, 0xbf80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFT_SD, 0},
+  {"scvtf", 0xf10e400, 0xbf80fc00, asimdshf, 0, SIMD_F16,
+   OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFT_H, 0},
   {"fcvtzs", 0xf00fc00, 0xbf80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFT_SD, 0},
+  {"fcvtzs", 0xf10fc00, 0xbf80fc00, asimdshf, 0, SIMD_F16,
+   OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFT_H, 0},
   {"ushr", 0x2f000400, 0xbf80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFT, 0},
   {"usra", 0x2f001400, 0xbf80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFT, 0},
   {"urshr", 0x2f002400, 0xbf80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFT, 0},
@@ -1854,7 +1865,11 @@ struct aarch64_opcode aarch64_opcode_table[] =
   {"ushll2", 0x6f00a400, 0xff80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSL), QL_VSHIFTL2, F_HAS_ALIAS},
   {"uxtl2", 0x6f00a400, 0xff87fc00, asimdshf, OP_UXTL2, SIMD, OP2 (Vd, Vn), QL_V2LONGBHS2, F_ALIAS | F_CONV},
   {"ucvtf", 0x2f00e400, 0xbf80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFT_SD, 0},
+  {"ucvtf", 0x2f10e400, 0xbf80fc00, asimdshf, 0, SIMD_F16,
+   OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFT_H, 0},
   {"fcvtzu", 0x2f00fc00, 0xbf80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFT_SD, 0},
+  {"fcvtzu", 0x2f10fc00, 0xbf80fc00, asimdshf, 0, SIMD_F16,
+   OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFT_H, 0},
   /* AdvSIMD TBL/TBX.  */
   {"tbl", 0xe000000, 0xbfe09c00, asimdtbl, 0, SIMD, OP3 (Vd, LVn, Vm), QL_TABLE, F_SIZEQ},
   {"tbx", 0xe001000, 0xbfe09c00, asimdtbl, 0, SIMD, OP3 (Vd, LVn, Vm), QL_TABLE, F_SIZEQ},
-- 
2.1.4


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]