From: Richard Henderson <richard.henderson@linaro.org>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: qemu-arm <qemu-arm@nongnu.org>, QEMU Developers <qemu-devel@nongnu.org>
Subject: Re: [Qemu-arm] [Qemu-devel] [PATCH v2 43/67] target/arm: Implement SVE Floating Point Arithmetic - Unpredicated Group
Date: Fri, 23 Feb 2018 13:15:58 -0800 [thread overview]
Message-ID: <ca46b9e2-54ad-8547-e869-8c3c238cdaad@linaro.org> (raw)
In-Reply-To: <CAFEAcA_VMcqarGdf1nN9=yXn-ybsvHYMzYS6EF0UUDdECJ02_g@mail.gmail.com>
On 02/23/2018 09:25 AM, Peter Maydell wrote:
> On 17 February 2018 at 18:22, Richard Henderson
> <richard.henderson@linaro.org> wrote:
>> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
>> ---
>> target/arm/helper-sve.h | 14 +++++++
>> target/arm/helper.h | 19 ++++++++++
>> target/arm/translate-sve.c | 41 ++++++++++++++++++++
>> target/arm/vec_helper.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++
>> target/arm/Makefile.objs | 2 +-
>> target/arm/sve.decode | 10 +++++
>> 6 files changed, 179 insertions(+), 1 deletion(-)
>> create mode 100644 target/arm/vec_helper.c
>>
>
>> +/* Floating-point trigonometric starting value.
>> + * See the ARM ARM pseudocode function FPTrigSMul.
>> + */
>> +static float16 float16_ftsmul(float16 op1, uint16_t op2, float_status *stat)
>> +{
>> + float16 result = float16_mul(op1, op1, stat);
>> + if (!float16_is_any_nan(result)) {
>> + result = float16_set_sign(result, op2 & 1);
>> + }
>> + return result;
>> +}
>> +
>> +static float32 float32_ftsmul(float32 op1, uint32_t op2, float_status *stat)
>> +{
>> + float32 result = float32_mul(op1, op1, stat);
>> + if (!float32_is_any_nan(result)) {
>> + result = float32_set_sign(result, op2 & 1);
>> + }
>> + return result;
>> +}
>> +
>> +static float64 float64_ftsmul(float64 op1, uint64_t op2, float_status *stat)
>> +{
>> + float64 result = float64_mul(op1, op1, stat);
>> + if (!float64_is_any_nan(result)) {
>> + result = float64_set_sign(result, op2 & 1);
>> + }
>> + return result;
>> +}
>> +
>> +#define DO_3OP(NAME, FUNC, TYPE) \
>> +void HELPER(NAME)(void *vd, void *vn, void *vm, void *stat, uint32_t desc) \
>> +{ \
>> + intptr_t i, oprsz = simd_oprsz(desc); \
>> + TYPE *d = vd, *n = vn, *m = vm; \
>> + for (i = 0; i < oprsz / sizeof(TYPE); i++) { \
>> + d[i] = FUNC(n[i], m[i], stat); \
>> + } \
>> +}
>> +
>> +DO_3OP(gvec_fadd_h, float16_add, float16)
>> +DO_3OP(gvec_fadd_s, float32_add, float32)
>> +DO_3OP(gvec_fadd_d, float64_add, float64)
>> +
>> +DO_3OP(gvec_fsub_h, float16_sub, float16)
>> +DO_3OP(gvec_fsub_s, float32_sub, float32)
>> +DO_3OP(gvec_fsub_d, float64_sub, float64)
>> +
>> +DO_3OP(gvec_fmul_h, float16_mul, float16)
>> +DO_3OP(gvec_fmul_s, float32_mul, float32)
>> +DO_3OP(gvec_fmul_d, float64_mul, float64)
>> +
>> +DO_3OP(gvec_ftsmul_h, float16_ftsmul, float16)
>> +DO_3OP(gvec_ftsmul_s, float32_ftsmul, float32)
>> +DO_3OP(gvec_ftsmul_d, float64_ftsmul, float64)
>> +
>> +#ifdef TARGET_AARCH64
>
> This seems a bit odd given SVE is AArch64-only anyway...
Ah right.
The thing to notice here is that the helpers have been placed such that the
helpers can be shared with AA32 and AA64 AdvSIMD. One call to one of these
would replace the 2-8 calls that we currently generate for such an operation.
I thought it better to plan ahead for that cleanup as opposed to moving them later.
Here you see where AA64 differs from AA32 (and in particular where the scalar
operation is also conditionalized).
r~
next prev parent reply other threads:[~2018-02-23 21:16 UTC|newest]
Thread overview: 167+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-17 18:22 [Qemu-arm] [PATCH v2 00/67] target/arm: Scalable Vector Extension Richard Henderson
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 01/67] target/arm: Enable SVE for aarch64-linux-user Richard Henderson
2018-02-22 17:28 ` Peter Maydell
2018-02-22 19:27 ` Richard Henderson
2018-02-23 17:00 ` Alex Bennée
2018-02-23 18:47 ` Richard Henderson
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 02/67] target/arm: Introduce translate-a64.h Richard Henderson
2018-02-22 17:30 ` Peter Maydell
2018-04-03 9:01 ` Alex Bennée
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 03/67] target/arm: Add SVE decode skeleton Richard Henderson
2018-02-22 18:00 ` Peter Maydell
2018-02-23 11:40 ` Peter Maydell
2018-02-23 11:43 ` Peter Maydell
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 04/67] target/arm: Implement SVE Bitwise Logical - Unpredicated Group Richard Henderson
2018-02-22 18:04 ` Peter Maydell
2018-02-22 19:28 ` Richard Henderson
2018-02-17 18:22 ` [Qemu-devel] [PATCH v2 05/67] target/arm: Implement SVE load vector/predicate Richard Henderson
2018-02-22 18:20 ` Peter Maydell
2018-02-22 19:31 ` [Qemu-arm] " Richard Henderson
2018-04-03 9:26 ` Alex Bennée
2018-04-06 1:23 ` Richard Henderson
2018-04-06 13:03 ` Alex Bennée
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 06/67] target/arm: Implement SVE predicate test Richard Henderson
2018-02-22 18:38 ` Peter Maydell
2018-04-03 9:16 ` Alex Bennée
2018-04-06 1:27 ` Richard Henderson
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 07/67] target/arm: Implement SVE Predicate Logical Operations Group Richard Henderson
2018-02-22 18:55 ` Peter Maydell
2018-02-22 19:37 ` [Qemu-devel] " Richard Henderson
2018-02-23 9:56 ` Peter Maydell
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 08/67] target/arm: Implement SVE Predicate Misc Group Richard Henderson
2018-02-23 11:22 ` Peter Maydell
2018-02-17 18:22 ` [Qemu-devel] [PATCH v2 09/67] target/arm: Implement SVE Integer Binary Arithmetic - Predicated Group Richard Henderson
2018-02-23 11:35 ` [Qemu-arm] " Peter Maydell
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 10/67] target/arm: Implement SVE Integer Reduction Group Richard Henderson
2018-02-23 11:50 ` Peter Maydell
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 11/67] target/arm: Implement SVE bitwise shift by immediate (predicated) Richard Henderson
2018-02-23 12:03 ` [Qemu-devel] " Peter Maydell
2018-02-17 18:22 ` [Qemu-devel] [PATCH v2 12/67] target/arm: Implement SVE bitwise shift by vector (predicated) Richard Henderson
2018-02-23 12:50 ` [Qemu-arm] " Peter Maydell
2018-02-17 18:22 ` [Qemu-devel] [PATCH v2 13/67] target/arm: Implement SVE bitwise shift by wide elements (predicated) Richard Henderson
2018-02-23 12:57 ` [Qemu-arm] " Peter Maydell
2018-02-17 18:22 ` [Qemu-devel] [PATCH v2 14/67] target/arm: Implement SVE Integer Arithmetic - Unary Predicated Group Richard Henderson
2018-02-23 13:08 ` [Qemu-arm] " Peter Maydell
2018-02-23 17:25 ` Richard Henderson
2018-02-23 17:30 ` Peter Maydell
2018-02-17 18:22 ` [Qemu-devel] [PATCH v2 15/67] target/arm: Implement SVE Integer Multiply-Add Group Richard Henderson
2018-02-23 13:12 ` [Qemu-arm] " Peter Maydell
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 16/67] target/arm: Implement SVE Integer Arithmetic - Unpredicated Group Richard Henderson
2018-02-23 13:16 ` Peter Maydell
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 17/67] target/arm: Implement SVE Index Generation Group Richard Henderson
2018-02-23 13:22 ` Peter Maydell
2018-02-17 18:22 ` [Qemu-devel] [PATCH v2 18/67] target/arm: Implement SVE Stack Allocation Group Richard Henderson
2018-02-23 13:25 ` Peter Maydell
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 19/67] target/arm: Implement SVE Bitwise Shift - Unpredicated Group Richard Henderson
2018-02-23 13:28 ` [Qemu-devel] " Peter Maydell
2018-02-17 18:22 ` [Qemu-devel] [PATCH v2 20/67] target/arm: Implement SVE Compute Vector Address Group Richard Henderson
2018-02-23 13:34 ` [Qemu-arm] " Peter Maydell
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 21/67] target/arm: Implement SVE floating-point exponential accelerator Richard Henderson
2018-02-23 13:48 ` Peter Maydell
2018-02-23 17:29 ` Richard Henderson
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 22/67] target/arm: Implement SVE floating-point trig select coefficient Richard Henderson
2018-02-23 13:54 ` Peter Maydell
2018-02-17 18:22 ` [Qemu-devel] [PATCH v2 23/67] target/arm: Implement SVE Element Count Group Richard Henderson
2018-02-23 14:06 ` [Qemu-arm] " Peter Maydell
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 24/67] target/arm: Implement SVE Bitwise Immediate Group Richard Henderson
2018-02-23 14:10 ` Peter Maydell
2018-02-17 18:22 ` [Qemu-devel] [PATCH v2 25/67] target/arm: Implement SVE Integer Wide Immediate - Predicated Group Richard Henderson
2018-02-23 14:18 ` [Qemu-arm] " Peter Maydell
2018-02-23 17:31 ` Richard Henderson
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 26/67] target/arm: Implement SVE Permute - Extract Group Richard Henderson
2018-02-23 14:24 ` Peter Maydell
2018-02-23 17:46 ` Richard Henderson
2018-02-17 18:22 ` [Qemu-devel] [PATCH v2 27/67] target/arm: Implement SVE Permute - Unpredicated Group Richard Henderson
2018-02-23 14:34 ` [Qemu-arm] " Peter Maydell
2018-02-23 18:58 ` Richard Henderson
2018-02-17 18:22 ` [Qemu-devel] [PATCH v2 28/67] target/arm: Implement SVE Permute - Predicates Group Richard Henderson
2018-02-23 15:15 ` [Qemu-arm] " Peter Maydell
2018-02-23 19:59 ` Richard Henderson
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 29/67] target/arm: Implement SVE Permute - Interleaving Group Richard Henderson
2018-02-23 15:22 ` Peter Maydell
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 30/67] target/arm: Implement SVE compress active elements Richard Henderson
2018-02-23 15:25 ` Peter Maydell
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 31/67] target/arm: Implement SVE conditionally broadcast/extract element Richard Henderson
2018-02-23 15:44 ` [Qemu-devel] " Peter Maydell
2018-02-23 20:15 ` Richard Henderson
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 32/67] target/arm: Implement SVE copy to vector (predicated) Richard Henderson
2018-02-23 15:45 ` [Qemu-devel] " Peter Maydell
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 33/67] target/arm: Implement SVE reverse within elements Richard Henderson
2018-02-23 15:50 ` Peter Maydell
2018-02-23 20:21 ` Richard Henderson
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 34/67] target/arm: Implement SVE vector splice (predicated) Richard Henderson
2018-02-23 15:52 ` [Qemu-devel] " Peter Maydell
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 35/67] target/arm: Implement SVE Select Vectors Group Richard Henderson
2018-02-23 16:21 ` [Qemu-devel] " Peter Maydell
2018-02-17 18:22 ` [Qemu-devel] [PATCH v2 36/67] target/arm: Implement SVE Integer Compare - " Richard Henderson
2018-02-23 16:29 ` Peter Maydell
2018-02-23 20:57 ` [Qemu-arm] " Richard Henderson
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 37/67] target/arm: Implement SVE Integer Compare - Immediate Group Richard Henderson
2018-02-23 16:32 ` Peter Maydell
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 38/67] target/arm: Implement SVE Partition Break Group Richard Henderson
2018-02-23 16:41 ` Peter Maydell
2018-02-23 20:59 ` Richard Henderson
2018-02-17 18:22 ` [Qemu-devel] [PATCH v2 39/67] target/arm: Implement SVE Predicate Count Group Richard Henderson
2018-02-23 16:48 ` Peter Maydell
2018-02-17 18:22 ` [Qemu-devel] [PATCH v2 40/67] target/arm: Implement SVE Integer Compare - Scalars Group Richard Henderson
2018-02-23 17:00 ` Peter Maydell
2018-02-23 21:06 ` [Qemu-arm] " Richard Henderson
2018-02-17 18:22 ` [Qemu-devel] [PATCH v2 41/67] target/arm: Implement FDUP/DUP Richard Henderson
2018-02-23 17:12 ` [Qemu-arm] " Peter Maydell
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 42/67] target/arm: Implement SVE Integer Wide Immediate - Unpredicated Group Richard Henderson
2018-02-23 17:18 ` Peter Maydell
2018-02-17 18:22 ` [Qemu-devel] [PATCH v2 43/67] target/arm: Implement SVE Floating Point Arithmetic " Richard Henderson
2018-02-23 17:25 ` [Qemu-arm] " Peter Maydell
2018-02-23 21:15 ` Richard Henderson [this message]
2018-02-17 18:23 ` [Qemu-arm] [PATCH v2 44/67] target/arm: Implement SVE Memory Contiguous Load Group Richard Henderson
2018-02-27 12:16 ` Peter Maydell
2018-02-17 18:23 ` [Qemu-devel] [PATCH v2 45/67] target/arm: Implement SVE Memory Contiguous Store Group Richard Henderson
2018-02-27 13:22 ` [Qemu-arm] " Peter Maydell
2018-02-17 18:23 ` [Qemu-arm] [PATCH v2 46/67] target/arm: Implement SVE load and broadcast quadword Richard Henderson
2018-02-27 13:36 ` Peter Maydell
2018-02-17 18:23 ` [Qemu-devel] [PATCH v2 47/67] target/arm: Implement SVE integer convert to floating-point Richard Henderson
2018-02-27 13:47 ` [Qemu-arm] " Peter Maydell
2018-02-27 13:51 ` Peter Maydell
2018-02-17 18:23 ` [Qemu-devel] [PATCH v2 48/67] target/arm: Implement SVE floating-point arithmetic (predicated) Richard Henderson
2018-02-27 13:50 ` [Qemu-arm] " Peter Maydell
2018-02-17 18:23 ` [Qemu-arm] [PATCH v2 49/67] target/arm: Implement SVE FP Multiply-Add Group Richard Henderson
2018-02-27 13:54 ` Peter Maydell
2018-02-17 18:23 ` [Qemu-arm] [PATCH v2 50/67] target/arm: Implement SVE Floating Point Accumulating Reduction Group Richard Henderson
2018-02-27 13:59 ` Peter Maydell
2018-02-17 18:23 ` [Qemu-arm] [PATCH v2 51/67] target/arm: Implement SVE load and broadcast element Richard Henderson
2018-02-27 14:15 ` Peter Maydell
2018-02-17 18:23 ` [Qemu-arm] [PATCH v2 52/67] target/arm: Implement SVE store vector/predicate register Richard Henderson
2018-02-27 14:21 ` Peter Maydell
2018-02-17 18:23 ` [Qemu-devel] [PATCH v2 53/67] target/arm: Implement SVE scatter stores Richard Henderson
2018-02-27 14:36 ` [Qemu-arm] " Peter Maydell
2018-02-17 18:23 ` [Qemu-devel] [PATCH v2 54/67] target/arm: Implement SVE prefetches Richard Henderson
2018-02-27 14:43 ` Peter Maydell
2018-02-17 18:23 ` [Qemu-arm] [PATCH v2 55/67] target/arm: Implement SVE gather loads Richard Henderson
2018-02-27 14:53 ` [Qemu-devel] " Peter Maydell
2018-02-17 18:23 ` [Qemu-arm] [PATCH v2 56/67] target/arm: Implement SVE scatter store vector immediate Richard Henderson
2018-02-27 15:02 ` Peter Maydell
2018-02-17 18:23 ` [Qemu-arm] [PATCH v2 57/67] target/arm: Implement SVE floating-point compare vectors Richard Henderson
2018-02-27 15:04 ` [Qemu-devel] " Peter Maydell
2018-02-17 18:23 ` [Qemu-devel] [PATCH v2 58/67] target/arm: Implement SVE floating-point arithmetic with immediate Richard Henderson
2018-02-27 15:11 ` [Qemu-arm] " Peter Maydell
2018-02-17 18:23 ` [Qemu-arm] [PATCH v2 59/67] target/arm: Implement SVE Floating Point Multiply Indexed Group Richard Henderson
2018-02-27 15:18 ` [Qemu-devel] " Peter Maydell
2018-02-27 16:29 ` Richard Henderson
2018-02-17 18:23 ` [Qemu-devel] [PATCH v2 60/67] target/arm: Implement SVE FP Fast Reduction Group Richard Henderson
2018-02-27 15:24 ` Peter Maydell
2018-02-17 18:23 ` [Qemu-devel] [PATCH v2 61/67] target/arm: Implement SVE Floating Point Unary Operations - Unpredicated Group Richard Henderson
2018-02-27 15:28 ` [Qemu-arm] " Peter Maydell
2018-02-17 18:23 ` [Qemu-devel] [PATCH v2 62/67] target/arm: Implement SVE FP Compare with Zero Group Richard Henderson
2018-02-27 15:31 ` [Qemu-arm] " Peter Maydell
2018-02-17 18:23 ` [Qemu-arm] [PATCH v2 63/67] target/arm: Implement SVE floating-point trig multiply-add coefficient Richard Henderson
2018-02-27 15:34 ` Peter Maydell
2018-02-17 18:23 ` [Qemu-devel] [PATCH v2 64/67] target/arm: Implement SVE floating-point convert precision Richard Henderson
2018-02-27 15:35 ` Peter Maydell
2018-02-17 18:23 ` [Qemu-arm] [PATCH v2 65/67] target/arm: Implement SVE floating-point convert to integer Richard Henderson
2018-02-27 15:36 ` Peter Maydell
2018-02-17 18:23 ` [Qemu-arm] [PATCH v2 66/67] target/arm: Implement SVE floating-point round to integral value Richard Henderson
2018-02-27 15:39 ` Peter Maydell
2018-02-17 18:23 ` [Qemu-devel] [PATCH v2 67/67] target/arm: Implement SVE floating-point unary operations Richard Henderson
2018-02-27 15:40 ` Peter Maydell
2018-02-23 17:05 ` [Qemu-arm] [PATCH v2 00/67] target/arm: Scalable Vector Extension Alex Bennée
2018-04-03 15:41 ` Alex Bennée
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ca46b9e2-54ad-8547-e869-8c3c238cdaad@linaro.org \
--to=richard.henderson@linaro.org \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).