mbox series

[v10.5,00/20] tcg: generic vector operations

Message ID 20180117161435.28981-1-richard.henderson@linaro.org
Headers show
Series tcg: generic vector operations | expand

Message

Richard Henderson Jan. 17, 2018, 4:14 p.m. UTC
Changes since v10:
  * Squashed a fixup patch which escaped my attention while preparing
    the patch set.  Ho hum.

Changes since v9:
  * Detect whether __attribute__((vector_size(16))) operations are
    supported by the host compiler.  This includes the case affecting
    ppc64 where gcc-4.8.5 crashes.  Note that gcc-7.2 does pass the
    test on ppc64.

  * Dropped support for vector interleaves and element size changes.
    My target/arm patches were failing RISU checks on a big-endian host.
    I need to re-think what to do about host endianness and target
    representation of vector operations crossing lanes.  For now, only
    support generic vector operations that are agnostic to element order.


r~


Richard Henderson (21):
  tcg: Allow multiple word entries into the constant pool
  tcg: Add types and basic operations for host vectors
  tcg: Standardize integral arguments to expanders
  tcg: Add generic vector expanders
  tcg: Loosen vec_gen_op* typecheck rules
  tcg: Add generic vector ops for constant shifts
  tcg: Add generic vector ops for comparisons
  tcg: Add generic vector ops for multiplication
  tcg: Add generic helpers for saturating arithmetic
  tcg: Add generic vector helpers with a scalar operand
  tcg/optimize: Handle vector opcodes during optimize
  target/arm: Align vector registers
  target/arm: Use vector infrastructure for aa64 add/sub/logic
  target/arm: Use vector infrastructure for aa64 mov/not/neg
  target/arm: Use vector infrastructure for aa64 dup/movi
  target/arm: Use vector infrastructure for aa64 constant shifts
  target/arm: Use vector infrastructure for aa64 compares
  target/arm: Use vector infrastructure for aa64 multiplies
  target/arm: Use vector infrastructure for aa64 orr/bic immediate
  tcg/i386: Add vector operations
  tcg/aarch64: Add vector operations

 Makefile.target              |    4 +-
 accel/tcg/tcg-runtime.h      |  118 +++
 target/arm/cpu.h             |    2 +-
 tcg/aarch64/tcg-target.h     |   25 +-
 tcg/aarch64/tcg-target.opc.h |    3 +
 tcg/i386/tcg-target.h        |   41 +-
 tcg/i386/tcg-target.opc.h    |   13 +
 tcg/tcg-gvec-desc.h          |   49 +
 tcg/tcg-op-gvec.h            |  297 ++++++
 tcg/tcg-op.h                 |   55 +-
 tcg/tcg-opc.h                |   47 +
 tcg/tcg.h                    |   78 ++
 accel/tcg/tcg-runtime-gvec.c |  997 +++++++++++++++++++
 target/arm/translate-a64.c   |  974 +++++++++++++-----
 tcg/aarch64/tcg-target.inc.c |  607 +++++++++++-
 tcg/i386/tcg-target.inc.c    | 1043 +++++++++++++++++++-
 tcg/optimize.c               |  150 +--
 tcg/tcg-op-gvec.c            | 2226 ++++++++++++++++++++++++++++++++++++++++++
 tcg/tcg-op-vec.c             |  474 +++++++++
 tcg/tcg-op.c                 |   42 +-
 tcg/tcg-pool.inc.c           |  115 ++-
 tcg/tcg.c                    |  129 ++-
 accel/tcg/Makefile.objs      |    2 +-
 configure                    |   48 +
 tcg/README                   |   95 ++
 25 files changed, 7151 insertions(+), 483 deletions(-)
 create mode 100644 tcg/aarch64/tcg-target.opc.h
 create mode 100644 tcg/i386/tcg-target.opc.h
 create mode 100644 tcg/tcg-gvec-desc.h
 create mode 100644 tcg/tcg-op-gvec.h
 create mode 100644 accel/tcg/tcg-runtime-gvec.c
 create mode 100644 tcg/tcg-op-gvec.c
 create mode 100644 tcg/tcg-op-vec.c

-- 
2.14.3


Richard Henderson (20):
  tcg: Allow multiple word entries into the constant pool
  tcg: Add types and basic operations for host vectors
  tcg: Standardize integral arguments to expanders
  tcg: Add generic vector expanders
  tcg: Add generic vector ops for constant shifts
  tcg: Add generic vector ops for comparisons
  tcg: Add generic vector ops for multiplication
  tcg: Add generic helpers for saturating arithmetic
  tcg: Add generic vector helpers with a scalar operand
  tcg/optimize: Handle vector opcodes during optimize
  target/arm: Align vector registers
  target/arm: Use vector infrastructure for aa64 add/sub/logic
  target/arm: Use vector infrastructure for aa64 mov/not/neg
  target/arm: Use vector infrastructure for aa64 dup/movi
  target/arm: Use vector infrastructure for aa64 constant shifts
  target/arm: Use vector infrastructure for aa64 compares
  target/arm: Use vector infrastructure for aa64 multiplies
  target/arm: Use vector infrastructure for aa64 orr/bic immediate
  tcg/i386: Add vector operations
  tcg/aarch64: Add vector operations

 Makefile.target              |    4 +-
 accel/tcg/tcg-runtime.h      |  118 +++
 target/arm/cpu.h             |    2 +-
 tcg/aarch64/tcg-target.h     |   25 +-
 tcg/aarch64/tcg-target.opc.h |    3 +
 tcg/i386/tcg-target.h        |   41 +-
 tcg/i386/tcg-target.opc.h    |   13 +
 tcg/tcg-gvec-desc.h          |   49 +
 tcg/tcg-op-gvec.h            |  297 ++++++
 tcg/tcg-op.h                 |   55 +-
 tcg/tcg-opc.h                |   47 +
 tcg/tcg.h                    |   78 ++
 accel/tcg/tcg-runtime-gvec.c |  997 +++++++++++++++++++
 target/arm/translate-a64.c   |  974 +++++++++++++-----
 tcg/aarch64/tcg-target.inc.c |  607 +++++++++++-
 tcg/i386/tcg-target.inc.c    | 1043 +++++++++++++++++++-
 tcg/optimize.c               |  150 +--
 tcg/tcg-op-gvec.c            | 2226 ++++++++++++++++++++++++++++++++++++++++++
 tcg/tcg-op-vec.c             |  474 +++++++++
 tcg/tcg-op.c                 |   42 +-
 tcg/tcg-pool.inc.c           |  115 ++-
 tcg/tcg.c                    |  129 ++-
 accel/tcg/Makefile.objs      |    2 +-
 configure                    |   48 +
 tcg/README                   |   95 ++
 25 files changed, 7151 insertions(+), 483 deletions(-)
 create mode 100644 tcg/aarch64/tcg-target.opc.h
 create mode 100644 tcg/i386/tcg-target.opc.h
 create mode 100644 tcg/tcg-gvec-desc.h
 create mode 100644 tcg/tcg-op-gvec.h
 create mode 100644 accel/tcg/tcg-runtime-gvec.c
 create mode 100644 tcg/tcg-op-gvec.c
 create mode 100644 tcg/tcg-op-vec.c

-- 
2.14.3

Comments

no-reply@patchew.org Jan. 17, 2018, 5:14 p.m. UTC | #1
Hi,

This series seems to have some coding style problems. See output below for
more information:

Type: series
Message-id: 20180117161435.28981-1-richard.henderson@linaro.org
Subject: [Qemu-devel] [PATCH v10.5 00/20] tcg: generic vector operations

=== TEST SCRIPT BEGIN ===
#!/bin/bash

BASE=base
n=1
total=$(git log --oneline $BASE.. | wc -l)
failed=0

git config --local diff.renamelimit 0
git config --local diff.renames True

commits="$(git log --format=%H --reverse $BASE..)"
for c in $commits; do
    echo "Checking PATCH $n/$total: $(git log -n 1 --format=%s $c)..."
    if ! git show $c --format=email | ./scripts/checkpatch.pl --mailback -; then
        failed=1
        echo
    fi
    n=$((n+1))
done

exit $failed
=== TEST SCRIPT END ===

Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
From https://github.com/patchew-project/qemu
 t [tag update]            patchew/1516203816-19374-1-git-send-email-imammedo@redhat.com -> patchew/1516203816-19374-1-git-send-email-imammedo@redhat.com
 * [new tag]               patchew/20180117161435.28981-1-richard.henderson@linaro.org -> patchew/20180117161435.28981-1-richard.henderson@linaro.org
 t [tag update]            patchew/cover.1513342045.git.berto@igalia.com -> patchew/cover.1513342045.git.berto@igalia.com
Switched to a new branch 'test'
4a44f8555f tcg/aarch64: Add vector operations
3f13bbe828 tcg/i386: Add vector operations
728e947a0a target/arm: Use vector infrastructure for aa64 orr/bic immediate
34b5e36472 target/arm: Use vector infrastructure for aa64 multiplies
18e6130136 target/arm: Use vector infrastructure for aa64 compares
c81ef1ce77 target/arm: Use vector infrastructure for aa64 constant shifts
9cc821fe02 target/arm: Use vector infrastructure for aa64 dup/movi
3b2c705f87 target/arm: Use vector infrastructure for aa64 mov/not/neg
87e3acd50c target/arm: Use vector infrastructure for aa64 add/sub/logic
11664047d7 target/arm: Align vector registers
cb396195d6 tcg/optimize: Handle vector opcodes during optimize
6c3ebb28e1 tcg: Add generic vector helpers with a scalar operand
36b51bc4e7 tcg: Add generic helpers for saturating arithmetic
1e1d25fd62 tcg: Add generic vector ops for multiplication
bc56f0c86e tcg: Add generic vector ops for comparisons
7cb9933b88 tcg: Add generic vector ops for constant shifts
b71baaf8c2 tcg: Add generic vector expanders
8c13a53e09 tcg: Standardize integral arguments to expanders
2fb37be608 tcg: Add types and basic operations for host vectors
d5cc9c8771 tcg: Allow multiple word entries into the constant pool

=== OUTPUT BEGIN ===
Checking PATCH 1/20: tcg: Allow multiple word entries into the constant pool...
ERROR: spaces prohibited around that ':' (ctx:WxW)
#23: FILE: tcg/tcg-pool.inc.c:26:
+    int addend  : 32;
                 ^

ERROR: spaces prohibited around that ':' (ctx:WxW)
#24: FILE: tcg/tcg-pool.inc.c:27:
+    int rtype   : 16;
                 ^

ERROR: spaces prohibited around that ':' (ctx:WxW)
#25: FILE: tcg/tcg-pool.inc.c:28:
+    int nlong   : 16;
                 ^

total: 3 errors, 0 warnings, 156 lines checked

Your patch has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

Checking PATCH 2/20: tcg: Add types and basic operations for host vectors...
ERROR: externs should be avoided in .c files
#137: FILE: tcg/tcg-op-vec.c:37:
+extern TCGv_i32 TCGV_LOW_link_error(TCGv_i64);

ERROR: externs should be avoided in .c files
#138: FILE: tcg/tcg-op-vec.c:38:
+extern TCGv_i32 TCGV_HIGH_link_error(TCGv_i64);

ERROR: Macros with complex values should be enclosed in parenthesis
#535: FILE: tcg/tcg-opc.h:209:
+#define IMPLVEC  TCG_OPF_VECTOR | IMPL(TCG_TARGET_MAYBE_vec)

WARNING: line over 80 characters
#538: FILE: tcg/tcg-opc.h:212:
+DEF(movi_vec, 1, 0, 0, TCG_OPF_VECTOR | TCG_OPF_NOT_PRESENT) /* vecl defines const args */

ERROR: Macros with complex values should be enclosed in parenthesis
#800: FILE: tcg/tcg.h:621:
+#define TCGOP_VECL(X)     (X)->param1

ERROR: Macros with complex values should be enclosed in parenthesis
#801: FILE: tcg/tcg.h:622:
+#define TCGOP_VECE(X)     (X)->param2

total: 5 errors, 1 warnings, 807 lines checked

Your patch has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

Checking PATCH 3/20: tcg: Standardize integral arguments to expanders...
Checking PATCH 4/20: tcg: Add generic vector expanders...
ERROR: spaces required around that '&' (ctx:WxO)
#350: FILE: accel/tcg/tcg-runtime-gvec.c:311:
+        *(vec64 *)(d + i) = *(vec64 *)(a + i) &~ *(vec64 *)(b + i);
                                               ^

ERROR: space prohibited after that '~' (ctx:OxW)
#350: FILE: accel/tcg/tcg-runtime-gvec.c:311:
+        *(vec64 *)(d + i) = *(vec64 *)(a + i) &~ *(vec64 *)(b + i);
                                                ^

ERROR: spaces required around that '|' (ctx:WxO)
#361: FILE: accel/tcg/tcg-runtime-gvec.c:322:
+        *(vec64 *)(d + i) = *(vec64 *)(a + i) |~ *(vec64 *)(b + i);
                                               ^

ERROR: space prohibited after that '~' (ctx:OxW)
#361: FILE: accel/tcg/tcg-runtime-gvec.c:322:
+        *(vec64 *)(d + i) = *(vec64 *)(a + i) |~ *(vec64 *)(b + i);
                                                ^

ERROR: trailing whitespace
#992: FILE: tcg/tcg-op-gvec.c:464:
+        } $

total: 5 errors, 0 warnings, 2151 lines checked

Your patch has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

Checking PATCH 5/20: tcg: Add generic vector ops for constant shifts...
Checking PATCH 6/20: tcg: Add generic vector ops for comparisons...
ERROR: trailing whitespace
#25: FILE: accel/tcg/tcg-runtime-gvec.c:478:
+ $

ERROR: spaces required around that '*' (ctx:WxV)
#32: FILE: accel/tcg/tcg-runtime-gvec.c:485:
+        *(TYPE *)(d + i) = DO_CMP0(*(TYPE *)(a + i) OP *(TYPE *)(b + i));  \
                                                        ^

ERROR: spaces required around that '==' (ctx:WxB)
#38: FILE: accel/tcg/tcg-runtime-gvec.c:491:
+    DO_CMP1(gvec_eq##SZ, vec##SZ, ==)    \
                                   ^

ERROR: spaces required around that '!=' (ctx:WxB)
#39: FILE: accel/tcg/tcg-runtime-gvec.c:492:
+    DO_CMP1(gvec_ne##SZ, vec##SZ, !=)    \
                                   ^

ERROR: spaces required around that '<' (ctx:WxB)
#40: FILE: accel/tcg/tcg-runtime-gvec.c:493:
+    DO_CMP1(gvec_lt##SZ, svec##SZ, <)    \
                                    ^

ERROR: spaces required around that '<=' (ctx:WxB)
#41: FILE: accel/tcg/tcg-runtime-gvec.c:494:
+    DO_CMP1(gvec_le##SZ, svec##SZ, <=)   \
                                    ^

ERROR: spaces required around that '<' (ctx:WxB)
#42: FILE: accel/tcg/tcg-runtime-gvec.c:495:
+    DO_CMP1(gvec_ltu##SZ, vec##SZ, <)    \
                                    ^

ERROR: spaces required around that '<=' (ctx:WxB)
#43: FILE: accel/tcg/tcg-runtime-gvec.c:496:
+    DO_CMP1(gvec_leu##SZ, vec##SZ, <=)
                                    ^

ERROR: space prohibited after that '&&' (ctx:ExW)
#235: FILE: tcg/tcg-op-gvec.c:1689:
+               && check_size_impl(oprsz, 8)
                ^

total: 9 errors, 0 warnings, 299 lines checked

Your patch has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

Checking PATCH 7/20: tcg: Add generic vector ops for multiplication...
Checking PATCH 8/20: tcg: Add generic helpers for saturating arithmetic...
ERROR: spaces required around that '&' (ctx:WxO)
#64: FILE: accel/tcg/tcg-runtime-gvec.c:594:
+        if (((di ^ ai) &~ (ai ^ bi)) < 0) {
                        ^

ERROR: space prohibited after that '~' (ctx:OxW)
#64: FILE: accel/tcg/tcg-runtime-gvec.c:594:
+        if (((di ^ ai) &~ (ai ^ bi)) < 0) {
                         ^

ERROR: spaces required around that '&' (ctx:WxO)
#82: FILE: accel/tcg/tcg-runtime-gvec.c:612:
+        if (((di ^ ai) &~ (ai ^ bi)) < 0) {
                        ^

ERROR: space prohibited after that '~' (ctx:OxW)
#82: FILE: accel/tcg/tcg-runtime-gvec.c:612:
+        if (((di ^ ai) &~ (ai ^ bi)) < 0) {
                         ^

total: 4 errors, 0 warnings, 411 lines checked

Your patch has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

Checking PATCH 9/20: tcg: Add generic vector helpers with a scalar operand...
Checking PATCH 10/20: tcg/optimize: Handle vector opcodes during optimize...
ERROR: spaces required around that ':' (ctx:VxE)
#170: FILE: tcg/optimize.c:644:
+        CASE_OP_32_64_VEC(add):
                               ^

ERROR: spaces required around that ':' (ctx:VxE)
#171: FILE: tcg/optimize.c:645:
+        CASE_OP_32_64_VEC(mul):
                               ^

ERROR: spaces required around that ':' (ctx:VxE)
#172: FILE: tcg/optimize.c:646:
+        CASE_OP_32_64_VEC(and):
                               ^

ERROR: spaces required around that ':' (ctx:VxE)
#173: FILE: tcg/optimize.c:647:
+        CASE_OP_32_64_VEC(or):
                              ^

ERROR: spaces required around that ':' (ctx:VxE)
#174: FILE: tcg/optimize.c:648:
+        CASE_OP_32_64_VEC(xor):
                               ^

ERROR: spaces required around that ':' (ctx:VxE)
#183: FILE: tcg/optimize.c:713:
+        CASE_OP_32_64_VEC(sub):
                               ^

ERROR: spaces required around that ':' (ctx:VxE)
#206: FILE: tcg/optimize.c:744:
+        CASE_OP_32_64_VEC(xor):
                               ^

ERROR: spaces required around that ':' (ctx:VxE)
#215: FILE: tcg/optimize.c:761:
+        CASE_OP_32_64_VEC(andc):
                                ^

ERROR: spaces required around that ':' (ctx:VxE)
#224: FILE: tcg/optimize.c:769:
+        CASE_OP_32_64_VEC(orc):
                               ^

ERROR: spaces required around that ':' (ctx:VxE)
#246: FILE: tcg/optimize.c:807:
+        CASE_OP_32_64_VEC(add):
                               ^

ERROR: spaces required around that ':' (ctx:VxE)
#247: FILE: tcg/optimize.c:808:
+        CASE_OP_32_64_VEC(sub):
                               ^

ERROR: spaces required around that ':' (ctx:VxE)
#248: FILE: tcg/optimize.c:809:
+        CASE_OP_32_64_VEC(or):
                              ^

ERROR: spaces required around that ':' (ctx:VxE)
#249: FILE: tcg/optimize.c:810:
+        CASE_OP_32_64_VEC(xor):
                               ^

ERROR: spaces required around that ':' (ctx:VxE)
#250: FILE: tcg/optimize.c:811:
+        CASE_OP_32_64_VEC(andc):
                                ^

ERROR: spaces required around that ':' (ctx:VxE)
#268: FILE: tcg/optimize.c:824:
+        CASE_OP_32_64_VEC(and):
                               ^

ERROR: spaces required around that ':' (ctx:VxE)
#269: FILE: tcg/optimize.c:825:
+        CASE_OP_32_64_VEC(orc):
                               ^

ERROR: spaces required around that ':' (ctx:VxE)
#279: FILE: tcg/optimize.c:1039:
+        CASE_OP_32_64_VEC(and):
                               ^

ERROR: spaces required around that ':' (ctx:VxE)
#280: FILE: tcg/optimize.c:1040:
+        CASE_OP_32_64_VEC(mul):
                               ^

ERROR: spaces required around that ':' (ctx:VxE)
#290: FILE: tcg/optimize.c:1055:
+        CASE_OP_32_64_VEC(or):
                              ^

ERROR: spaces required around that ':' (ctx:VxE)
#291: FILE: tcg/optimize.c:1056:
+        CASE_OP_32_64_VEC(and):
                               ^

ERROR: spaces required around that ':' (ctx:VxE)
#302: FILE: tcg/optimize.c:1068:
+        CASE_OP_32_64_VEC(andc):
                                ^

ERROR: spaces required around that ':' (ctx:VxE)
#303: FILE: tcg/optimize.c:1069:
+        CASE_OP_32_64_VEC(sub):
                               ^

ERROR: spaces required around that ':' (ctx:VxE)
#304: FILE: tcg/optimize.c:1070:
+        CASE_OP_32_64_VEC(xor):
                               ^

ERROR: spaces required around that ':' (ctx:VxE)
#313: FILE: tcg/optimize.c:1084:
+        CASE_OP_32_64_VEC(mov):
                               ^

total: 24 errors, 0 warnings, 296 lines checked

Your patch has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

Checking PATCH 11/20: target/arm: Align vector registers...
Checking PATCH 12/20: target/arm: Use vector infrastructure for aa64 add/sub/logic...
Checking PATCH 13/20: target/arm: Use vector infrastructure for aa64 mov/not/neg...
Checking PATCH 14/20: target/arm: Use vector infrastructure for aa64 dup/movi...
Checking PATCH 15/20: target/arm: Use vector infrastructure for aa64 constant shifts...
Checking PATCH 16/20: target/arm: Use vector infrastructure for aa64 compares...
Checking PATCH 17/20: target/arm: Use vector infrastructure for aa64 multiplies...
Checking PATCH 18/20: target/arm: Use vector infrastructure for aa64 orr/bic immediate...
Checking PATCH 19/20: tcg/i386: Add vector operations...
Checking PATCH 20/20: tcg/aarch64: Add vector operations...
=== OUTPUT END ===

Test command exited with code: 1


---
Email generated automatically by Patchew [http://patchew.org/].
Please send your feedback to patchew-devel@freelists.org
Peter Maydell Jan. 25, 2018, 5:28 p.m. UTC | #2
On 17 January 2018 at 16:14, Richard Henderson
<richard.henderson@linaro.org> wrote:
> Richard Henderson (21):

>   tcg: Allow multiple word entries into the constant pool

>   tcg: Add types and basic operations for host vectors

>   tcg: Standardize integral arguments to expanders

>   tcg: Add generic vector expanders

>   tcg: Loosen vec_gen_op* typecheck rules

>   tcg: Add generic vector ops for constant shifts

>   tcg: Add generic vector ops for comparisons

>   tcg: Add generic vector ops for multiplication

>   tcg: Add generic helpers for saturating arithmetic

>   tcg: Add generic vector helpers with a scalar operand

>   tcg/optimize: Handle vector opcodes during optimize

>   target/arm: Align vector registers

>   target/arm: Use vector infrastructure for aa64 add/sub/logic

>   target/arm: Use vector infrastructure for aa64 mov/not/neg

>   target/arm: Use vector infrastructure for aa64 dup/movi

>   target/arm: Use vector infrastructure for aa64 constant shifts

>   target/arm: Use vector infrastructure for aa64 compares

>   target/arm: Use vector infrastructure for aa64 multiplies

>   target/arm: Use vector infrastructure for aa64 orr/bic immediate

>   tcg/i386: Add vector operations

>   tcg/aarch64: Add vector operations


I've reviewed the arm frontend patches, at least. The tcg backend
stuff is a combination of huge patches and not an area of the
code I'm familiar with, so I've left those in the hope that
somebody else will look at them...

thanks
-- PMM