diff options
author | Matthew Wahab <matthew.wahab@arm.com> | 2015-12-14 17:16:50 +0000 |
---|---|---|
committer | Matthew Wahab <matthew.wahab@arm.com> | 2015-12-14 17:18:50 +0000 |
commit | bb515fea4ac30f761c17dec701c95c0b54fabf30 (patch) | |
tree | 1c5ddde0ea278a49008fc85b83ae530c5433146b /gas | |
parent | 5f7728b7413b3bed576f8dd11d1343c20b3a2333 (diff) | |
download | gdb-bb515fea4ac30f761c17dec701c95c0b54fabf30.zip gdb-bb515fea4ac30f761c17dec701c95c0b54fabf30.tar.gz gdb-bb515fea4ac30f761c17dec701c95c0b54fabf30.tar.bz2 |
[AArch64][PATCH 8/14] Support FP16 Adv.SIMD Across Lanes instructions.
ARMv8.2 adds 16-bit floating point operations as an optional extension
to the floating point and Adv.SIMD support. This patch adds FP16
instructions to the group Adv.SIMD Across Lanes, making them available
when +simd+fp16 is enabled.
The instructions added are: FMAXNMV, FMAXV, FMINNMV and FMINV.
The general form for these instructions is
<OP> <Hd>, <V>.<T>
where T is 4h or 8h.
The new instructions valid make uses of the 8H and 4H that were
previously illegal. The patch adjusts a test for illegal uses of vector
types to take this into account.
gas/testsuite/
2015-12-14 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 test for illegal use of 'h'
specifier.
opcodes/
2015-12-14 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_XLANES_FP_H): New.
(aarch64_opcode_table): Add fp16 versions of fmaxnmv, fmaxv,
fminnmv, fminv to the Adv.SIMD across lanes group.
Change-Id: Ib9a47e867f55e0272c2446eb7e16837503d2f94c
Diffstat (limited to 'gas')
-rw-r--r-- | gas/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gas/testsuite/gas/aarch64/advsimd-fp16.d | 20 | ||||
-rw-r--r-- | gas/testsuite/gas/aarch64/advsimd-fp16.s | 16 | ||||
-rw-r--r-- | gas/testsuite/gas/aarch64/illegal.l | 4 | ||||
-rw-r--r-- | gas/testsuite/gas/aarch64/illegal.s | 4 |
5 files changed, 48 insertions, 4 deletions
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 4a44439..a2a3bf8 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,6 +1,14 @@ 2015-12-14 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 test for illegal use of 'h' specifier. + +2015-12-14 Matthew Wahab <matthew.wahab@arm.com> + + * gas/aarch64/advsimd-fp16.d: Update expected output. * gas/aarch64/advsimd-fp16.s: Add tests for scalar indexed element instructions. diff --git a/gas/testsuite/gas/aarch64/advsimd-fp16.d b/gas/testsuite/gas/aarch64/advsimd-fp16.d index dacd51b..241dc3f 100644 --- a/gas/testsuite/gas/aarch64/advsimd-fp16.d +++ b/gas/testsuite/gas/aarch64/advsimd-fp16.d @@ -472,3 +472,23 @@ Disassembly of section \.text: [0-9a-f]+: 7fa39041 fmulx s1, s2, v3.s\[1\] [0-9a-f]+: 7f139041 fmulx h1, h2, v3.h\[1\] [0-9a-f]+: 7f009000 fmulx h0, h0, v0.h\[0\] + [0-9a-f]+: 6e30c841 fmaxnmv s1, v2.4s + [0-9a-f]+: 0e30c841 fmaxnmv h1, v2.4h + [0-9a-f]+: 4e30c841 fmaxnmv h1, v2.8h + [0-9a-f]+: 0e30c800 fmaxnmv h0, v0.4h + [0-9a-f]+: 4e30c800 fmaxnmv h0, v0.8h + [0-9a-f]+: 6e30f841 fmaxv s1, v2.4s + [0-9a-f]+: 0e30f841 fmaxv h1, v2.4h + [0-9a-f]+: 4e30f841 fmaxv h1, v2.8h + [0-9a-f]+: 0e30f800 fmaxv h0, v0.4h + [0-9a-f]+: 4e30f800 fmaxv h0, v0.8h + [0-9a-f]+: 6eb0c841 fminnmv s1, v2.4s + [0-9a-f]+: 0eb0c841 fminnmv h1, v2.4h + [0-9a-f]+: 4eb0c841 fminnmv h1, v2.8h + [0-9a-f]+: 0eb0c800 fminnmv h0, v0.4h + [0-9a-f]+: 4eb0c800 fminnmv h0, v0.8h + [0-9a-f]+: 6eb0f841 fminv s1, v2.4s + [0-9a-f]+: 0eb0f841 fminv h1, v2.4h + [0-9a-f]+: 4eb0f841 fminv h1, v2.8h + [0-9a-f]+: 0eb0f800 fminv h0, v0.4h + [0-9a-f]+: 4eb0f800 fminv h0, v0.8h diff --git a/gas/testsuite/gas/aarch64/advsimd-fp16.s b/gas/testsuite/gas/aarch64/advsimd-fp16.s index 10f9067..c4e0ad1 100644 --- a/gas/testsuite/gas/aarch64/advsimd-fp16.s +++ b/gas/testsuite/gas/aarch64/advsimd-fp16.s @@ -187,3 +187,19 @@ sindexed_elem fmul sindexed_elem fmulx + + /* Adv.SIMD across lanes. */ + + .macro across_lanes, op + \op s1, v2.4s + \op h1, v2.4h + \op h1, v2.8h + \op h0, v0.4h + \op h0, v0.8h + .endm + + across_lanes fmaxnmv + across_lanes fmaxv + across_lanes fminnmv + across_lanes fminv + diff --git a/gas/testsuite/gas/aarch64/illegal.l b/gas/testsuite/gas/aarch64/illegal.l index 0e8c7eb..7482bc7 100644 --- a/gas/testsuite/gas/aarch64/illegal.l +++ b/gas/testsuite/gas/aarch64/illegal.l @@ -8,8 +8,8 @@ [^:]*:32: Error: .*`saddlv q7,v31.2d' [^:]*:33: Error: .*`smaxv s7,v31.2s' [^:]*:34: Error: .*`sminv d7,v31.2d' -[^:]*:35: Error: .*`fmaxv h7,v31.8h' -[^:]*:36: Error: .*`fmaxv h7,v31.4h' +[^:]*:35: Error: .*`fmaxv h7,v31.2h' +[^:]*:36: Error: .*`fmaxv s7,v31.4h' [^:]*:37: Error: .*`fminv d7,v31.2d' [^:]*:39: Error: .*`abs b0,b31' [^:]*:40: Error: .*`neg b0,b31' diff --git a/gas/testsuite/gas/aarch64/illegal.s b/gas/testsuite/gas/aarch64/illegal.s index 718f7ed..0960b7e 100644 --- a/gas/testsuite/gas/aarch64/illegal.s +++ b/gas/testsuite/gas/aarch64/illegal.s @@ -32,8 +32,8 @@ saddlv q7, v31.2d smaxv s7, v31.2s sminv d7, v31.2d - fmaxv h7, v31.8h - fmaxv h7, v31.4h + fmaxv h7, v31.2h + fmaxv s7, v31.4h fminv d7, v31.2d abs b0, b31 |