* [Qemu-devel] [PULL v2 00/20] tcg generic vectors @ 2018-02-08 16:49 Richard Henderson 2018-02-08 16:49 ` [Qemu-devel] [PULL v2 01/20] tcg: Allow multiple word entries into the constant pool Richard Henderson 2018-02-09 9:46 ` [Qemu-devel] [PULL v2 00/20] tcg generic vectors Peter Maydell 0 siblings, 2 replies; 3+ messages in thread From: Richard Henderson @ 2018-02-08 16:49 UTC (permalink / raw) To: qemu-devel; +Cc: peter.maydell Changes since last: * Fix the constant pool patch for ppc64 and sparc64 hosts. That's a bit of a brown-bag moment. I failed to test those because "clearly" they weren't affected the patches. r~ The following changes since commit b256b89c63c12e902645dd55e7b5362f60574742: Merge remote-tracking branch 'remotes/jnsnow/tags/bitmaps-pull-request' into staging (2018-02-08 10:16:59 +0000) are available in the Git repository at: git://github.com/rth7680/qemu.git tags/pull-tcg-20180208 for you to fetch changes up to 14e4c1e2355473ccb2939afc69ac8f25de103b92: tcg/aarch64: Add vector operations (2018-02-08 15:54:08 +0000) ---------------------------------------------------------------- tcg generic vectors ---------------------------------------------------------------- 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 | 306 ++++++ tcg/tcg-op.h | 52 +- tcg/tcg-opc.h | 46 + tcg/tcg.h | 87 ++ accel/tcg/tcg-runtime-gvec.c | 997 +++++++++++++++++++ target/arm/translate-a64.c | 975 ++++++++++++++----- tcg/aarch64/tcg-target.inc.c | 588 ++++++++++- tcg/i386/tcg-target.inc.c | 987 ++++++++++++++++++- tcg/optimize.c | 150 +-- tcg/tcg-op-gvec.c | 2216 ++++++++++++++++++++++++++++++++++++++++++ tcg/tcg-op-vec.c | 389 ++++++++ tcg/tcg-op.c | 42 +- tcg/tcg-pool.inc.c | 113 ++- tcg/tcg.c | 125 ++- accel/tcg/Makefile.objs | 2 +- configure | 48 + tcg/README | 86 ++ 25 files changed, 6969 insertions(+), 495 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 ^ permalink raw reply [flat|nested] 3+ messages in thread
* [Qemu-devel] [PULL v2 01/20] tcg: Allow multiple word entries into the constant pool 2018-02-08 16:49 [Qemu-devel] [PULL v2 00/20] tcg generic vectors Richard Henderson @ 2018-02-08 16:49 ` Richard Henderson 2018-02-09 9:46 ` [Qemu-devel] [PULL v2 00/20] tcg generic vectors Peter Maydell 1 sibling, 0 replies; 3+ messages in thread From: Richard Henderson @ 2018-02-08 16:49 UTC (permalink / raw) To: qemu-devel; +Cc: peter.maydell This will be required for storing vector constants. Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- tcg/tcg-pool.inc.c | 113 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 92 insertions(+), 21 deletions(-) diff --git a/tcg/tcg-pool.inc.c b/tcg/tcg-pool.inc.c index 8a85131405..7af5513ff3 100644 --- a/tcg/tcg-pool.inc.c +++ b/tcg/tcg-pool.inc.c @@ -22,39 +22,110 @@ typedef struct TCGLabelPoolData { struct TCGLabelPoolData *next; - tcg_target_ulong data; tcg_insn_unit *label; intptr_t addend; - int type; + int rtype; + unsigned nlong; + tcg_target_ulong data[]; } TCGLabelPoolData; -static void new_pool_label(TCGContext *s, tcg_target_ulong data, int type, - tcg_insn_unit *label, intptr_t addend) +static TCGLabelPoolData *new_pool_alloc(TCGContext *s, int nlong, int rtype, + tcg_insn_unit *label, intptr_t addend) { - TCGLabelPoolData *n = tcg_malloc(sizeof(*n)); - TCGLabelPoolData *i, **pp; + TCGLabelPoolData *n = tcg_malloc(sizeof(TCGLabelPoolData) + + sizeof(tcg_target_ulong) * nlong); - n->data = data; n->label = label; - n->type = type; n->addend = addend; + n->rtype = rtype; + n->nlong = nlong; + return n; +} + +static void new_pool_insert(TCGContext *s, TCGLabelPoolData *n) +{ + TCGLabelPoolData *i, **pp; + int nlong = n->nlong; /* Insertion sort on the pool. */ - for (pp = &s->pool_labels; (i = *pp) && i->data < data; pp = &i->next) { - continue; + for (pp = &s->pool_labels; (i = *pp) != NULL; pp = &i->next) { + if (nlong > i->nlong) { + break; + } + if (nlong < i->nlong) { + continue; + } + if (memcmp(n->data, i->data, sizeof(tcg_target_ulong) * nlong) >= 0) { + break; + } } n->next = *pp; *pp = n; } +/* The "usual" for generic integer code. */ +static inline void new_pool_label(TCGContext *s, tcg_target_ulong d, int rtype, + tcg_insn_unit *label, intptr_t addend) +{ + TCGLabelPoolData *n = new_pool_alloc(s, 1, rtype, label, addend); + n->data[0] = d; + new_pool_insert(s, n); +} + +/* For v64 or v128, depending on the host. */ +static inline void new_pool_l2(TCGContext *s, int rtype, tcg_insn_unit *label, + intptr_t addend, tcg_target_ulong d0, + tcg_target_ulong d1) +{ + TCGLabelPoolData *n = new_pool_alloc(s, 2, rtype, label, addend); + n->data[0] = d0; + n->data[1] = d1; + new_pool_insert(s, n); +} + +/* For v128 or v256, depending on the host. */ +static inline void new_pool_l4(TCGContext *s, int rtype, tcg_insn_unit *label, + intptr_t addend, tcg_target_ulong d0, + tcg_target_ulong d1, tcg_target_ulong d2, + tcg_target_ulong d3) +{ + TCGLabelPoolData *n = new_pool_alloc(s, 4, rtype, label, addend); + n->data[0] = d0; + n->data[1] = d1; + n->data[2] = d2; + n->data[3] = d3; + new_pool_insert(s, n); +} + +/* For v256, for 32-bit host. */ +static inline void new_pool_l8(TCGContext *s, int rtype, tcg_insn_unit *label, + intptr_t addend, tcg_target_ulong d0, + tcg_target_ulong d1, tcg_target_ulong d2, + tcg_target_ulong d3, tcg_target_ulong d4, + tcg_target_ulong d5, tcg_target_ulong d6, + tcg_target_ulong d7) +{ + TCGLabelPoolData *n = new_pool_alloc(s, 8, rtype, label, addend); + n->data[0] = d0; + n->data[1] = d1; + n->data[2] = d2; + n->data[3] = d3; + n->data[4] = d4; + n->data[5] = d5; + n->data[6] = d6; + n->data[7] = d7; + new_pool_insert(s, n); +} + /* To be provided by cpu/tcg-target.inc.c. */ static void tcg_out_nop_fill(tcg_insn_unit *p, int count); static bool tcg_out_pool_finalize(TCGContext *s) { TCGLabelPoolData *p = s->pool_labels; - tcg_target_ulong d, *a; + TCGLabelPoolData *l = NULL; + void *a; if (p == NULL) { return true; @@ -62,24 +133,24 @@ static bool tcg_out_pool_finalize(TCGContext *s) /* ??? Round up to qemu_icache_linesize, but then do not round again when allocating the next TranslationBlock structure. */ - a = (void *)ROUND_UP((uintptr_t)s->code_ptr, sizeof(tcg_target_ulong)); + a = (void *)ROUND_UP((uintptr_t)s->code_ptr, + sizeof(tcg_target_ulong) * p->nlong); tcg_out_nop_fill(s->code_ptr, (tcg_insn_unit *)a - s->code_ptr); s->data_gen_ptr = a; - /* Ensure the first comparison fails. */ - d = p->data + 1; - for (; p != NULL; p = p->next) { - if (p->data != d) { - d = p->data; - if (unlikely((void *)a > s->code_gen_highwater)) { + size_t size = sizeof(tcg_target_ulong) * p->nlong; + if (!l || l->nlong != p->nlong || memcmp(l->data, p->data, size)) { + if (unlikely(a > s->code_gen_highwater)) { return false; } - *a++ = d; + memcpy(a, p->data, size); + a += size; + l = p; } - patch_reloc(p->label, p->type, (intptr_t)(a - 1), p->addend); + patch_reloc(p->label, p->rtype, (intptr_t)a - size, p->addend); } - s->code_ptr = (void *)a; + s->code_ptr = a; return true; } -- 2.14.3 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [Qemu-devel] [PULL v2 00/20] tcg generic vectors 2018-02-08 16:49 [Qemu-devel] [PULL v2 00/20] tcg generic vectors Richard Henderson 2018-02-08 16:49 ` [Qemu-devel] [PULL v2 01/20] tcg: Allow multiple word entries into the constant pool Richard Henderson @ 2018-02-09 9:46 ` Peter Maydell 1 sibling, 0 replies; 3+ messages in thread From: Peter Maydell @ 2018-02-09 9:46 UTC (permalink / raw) To: Richard Henderson; +Cc: QEMU Developers On 8 February 2018 at 16:49, Richard Henderson <richard.henderson@linaro.org> wrote: > Changes since last: > * Fix the constant pool patch for ppc64 and sparc64 hosts. > That's a bit of a brown-bag moment. I failed to test those > because "clearly" they weren't affected the patches. > > > r~ > > > The following changes since commit b256b89c63c12e902645dd55e7b5362f60574742: > > Merge remote-tracking branch 'remotes/jnsnow/tags/bitmaps-pull-request' into staging (2018-02-08 10:16:59 +0000) > > are available in the Git repository at: > > git://github.com/rth7680/qemu.git tags/pull-tcg-20180208 > > for you to fetch changes up to 14e4c1e2355473ccb2939afc69ac8f25de103b92: > > tcg/aarch64: Add vector operations (2018-02-08 15:54:08 +0000) > > ---------------------------------------------------------------- > tcg generic vectors > Applied, thanks. -- PMM ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-02-09 9:47 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-02-08 16:49 [Qemu-devel] [PULL v2 00/20] tcg generic vectors Richard Henderson 2018-02-08 16:49 ` [Qemu-devel] [PULL v2 01/20] tcg: Allow multiple word entries into the constant pool Richard Henderson 2018-02-09 9:46 ` [Qemu-devel] [PULL v2 00/20] tcg generic vectors Peter Maydell
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).