From: "Alex Bennée" <alex.bennee@linaro.org>
To: Richard Henderson <richard.henderson@linaro.org>
Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org
Subject: Re: [Qemu-arm] [PATCH v2 02/67] target/arm: Introduce translate-a64.h
Date: Tue, 03 Apr 2018 10:01:46 +0100 [thread overview]
Message-ID: <871sfwek91.fsf@linaro.org> (raw)
In-Reply-To: <20180217182323.25885-3-richard.henderson@linaro.org>
Richard Henderson <richard.henderson@linaro.org> writes:
> Move some stuff that will be common to both translate-a64.c
> and translate-sve.c.
>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> target/arm/translate-a64.h | 110 +++++++++++++++++++++++++++++++++++++++++++++
> target/arm/translate-a64.c | 101 ++++++-----------------------------------
> 2 files changed, 123 insertions(+), 88 deletions(-)
> create mode 100644 target/arm/translate-a64.h
>
> diff --git a/target/arm/translate-a64.h b/target/arm/translate-a64.h
> new file mode 100644
> index 0000000000..e519aee314
> --- /dev/null
> +++ b/target/arm/translate-a64.h
> @@ -0,0 +1,110 @@
> +/*
> + * AArch64 translation, common definitions.
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> + */
> +
> +#ifndef TARGET_ARM_TRANSLATE_A64_H
> +#define TARGET_ARM_TRANSLATE_A64_H
> +
> +void unallocated_encoding(DisasContext *s);
> +
> +#define unsupported_encoding(s, insn) \
> + do { \
> + qemu_log_mask(LOG_UNIMP, \
> + "%s:%d: unsupported instruction encoding 0x%08x " \
> + "at pc=%016" PRIx64 "\n", \
> + __FILE__, __LINE__, insn, s->pc - 4); \
> + unallocated_encoding(s); \
> + } while (0)
> +
> +TCGv_i64 new_tmp_a64(DisasContext *s);
> +TCGv_i64 new_tmp_a64_zero(DisasContext *s);
> +TCGv_i64 cpu_reg(DisasContext *s, int reg);
> +TCGv_i64 cpu_reg_sp(DisasContext *s, int reg);
> +TCGv_i64 read_cpu_reg(DisasContext *s, int reg, int sf);
> +TCGv_i64 read_cpu_reg_sp(DisasContext *s, int reg, int sf);
> +void write_fp_dreg(DisasContext *s, int reg, TCGv_i64 v);
> +TCGv_ptr get_fpstatus_ptr(bool);
> +bool logic_imm_decode_wmask(uint64_t *result, unsigned int immn,
> + unsigned int imms, unsigned int immr);
> +uint64_t vfp_expand_imm(int size, uint8_t imm8);
> +
> +/* We should have at some point before trying to access an FP register
> + * done the necessary access check, so assert that
> + * (a) we did the check and
> + * (b) we didn't then just plough ahead anyway if it failed.
> + * Print the instruction pattern in the abort message so we can figure
> + * out what we need to fix if a user encounters this problem in the wild.
> + */
> +static inline void assert_fp_access_checked(DisasContext *s)
> +{
> +#ifdef CONFIG_DEBUG_TCG
> + if (unlikely(!s->fp_access_checked || s->fp_excp_el)) {
> + fprintf(stderr, "target-arm: FP access check missing for "
> + "instruction 0x%08x\n", s->insn);
> + abort();
> + }
> +#endif
> +}
> +
> +/* Return the offset into CPUARMState of an element of specified
> + * size, 'element' places in from the least significant end of
> + * the FP/vector register Qn.
> + */
> +static inline int vec_reg_offset(DisasContext *s, int regno,
> + int element, TCGMemOp size)
> +{
> + int offs = 0;
> +#ifdef HOST_WORDS_BIGENDIAN
> + /* This is complicated slightly because vfp.zregs[n].d[0] is
> + * still the low half and vfp.zregs[n].d[1] the high half
> + * of the 128 bit vector, even on big endian systems.
> + * Calculate the offset assuming a fully bigendian 128 bits,
> + * then XOR to account for the order of the two 64 bit halves.
> + */
> + offs += (16 - ((element + 1) * (1 << size)));
> + offs ^= 8;
> +#else
> + offs += element * (1 << size);
> +#endif
> + offs += offsetof(CPUARMState, vfp.zregs[regno]);
> + assert_fp_access_checked(s);
> + return offs;
> +}
> +
> +/* Return the offset info CPUARMState of the "whole" vector register Qn. */
> +static inline int vec_full_reg_offset(DisasContext *s, int regno)
> +{
> + assert_fp_access_checked(s);
> + return offsetof(CPUARMState, vfp.zregs[regno]);
> +}
> +
> +/* Return a newly allocated pointer to the vector register. */
> +static inline TCGv_ptr vec_full_reg_ptr(DisasContext *s, int regno)
> +{
> + TCGv_ptr ret = tcg_temp_new_ptr();
> + tcg_gen_addi_ptr(ret, cpu_env, vec_full_reg_offset(s, regno));
> + return ret;
> +}
> +
> +/* Return the byte size of the "whole" vector register, VL / 8. */
> +static inline int vec_full_reg_size(DisasContext *s)
> +{
> + return s->sve_len;
> +}
> +
> +bool disas_sve(DisasContext *, uint32_t);
> +
> +#endif /* TARGET_ARM_TRANSLATE_A64_H */
> diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
> index 032cbfa17d..e0e7ebf68c 100644
> --- a/target/arm/translate-a64.c
> +++ b/target/arm/translate-a64.c
> @@ -36,13 +36,13 @@
> #include "exec/log.h"
>
> #include "trace-tcg.h"
> +#include "translate-a64.h"
>
> static TCGv_i64 cpu_X[32];
> static TCGv_i64 cpu_pc;
>
> /* Load/store exclusive handling */
> static TCGv_i64 cpu_exclusive_high;
> -static TCGv_i64 cpu_reg(DisasContext *s, int reg);
>
> static const char *regnames[] = {
> "x0", "x1", "x2", "x3", "x4", "x5", "x6", "x7",
> @@ -392,22 +392,13 @@ static inline void gen_goto_tb(DisasContext *s, int n, uint64_t dest)
> }
> }
>
> -static void unallocated_encoding(DisasContext *s)
> +void unallocated_encoding(DisasContext *s)
> {
> /* Unallocated and reserved encodings are uncategorized */
> gen_exception_insn(s, 4, EXCP_UDEF, syn_uncategorized(),
> default_exception_el(s));
> }
>
> -#define unsupported_encoding(s, insn) \
> - do { \
> - qemu_log_mask(LOG_UNIMP, \
> - "%s:%d: unsupported instruction encoding 0x%08x " \
> - "at pc=%016" PRIx64 "\n", \
> - __FILE__, __LINE__, insn, s->pc - 4); \
> - unallocated_encoding(s); \
> - } while (0)
> -
> static void init_tmp_a64_array(DisasContext *s)
> {
> #ifdef CONFIG_DEBUG_TCG
> @@ -425,13 +416,13 @@ static void free_tmp_a64(DisasContext *s)
> init_tmp_a64_array(s);
> }
>
> -static TCGv_i64 new_tmp_a64(DisasContext *s)
> +TCGv_i64 new_tmp_a64(DisasContext *s)
> {
> assert(s->tmp_a64_count < TMP_A64_MAX);
> return s->tmp_a64[s->tmp_a64_count++] = tcg_temp_new_i64();
> }
>
> -static TCGv_i64 new_tmp_a64_zero(DisasContext *s)
> +TCGv_i64 new_tmp_a64_zero(DisasContext *s)
> {
> TCGv_i64 t = new_tmp_a64(s);
> tcg_gen_movi_i64(t, 0);
> @@ -453,7 +444,7 @@ static TCGv_i64 new_tmp_a64_zero(DisasContext *s)
> * to cpu_X[31] and ZR accesses to a temporary which can be discarded.
> * This is the point of the _sp forms.
> */
> -static TCGv_i64 cpu_reg(DisasContext *s, int reg)
> +TCGv_i64 cpu_reg(DisasContext *s, int reg)
> {
> if (reg == 31) {
> return new_tmp_a64_zero(s);
> @@ -463,7 +454,7 @@ static TCGv_i64 cpu_reg(DisasContext *s, int reg)
> }
>
> /* register access for when 31 == SP */
> -static TCGv_i64 cpu_reg_sp(DisasContext *s, int reg)
> +TCGv_i64 cpu_reg_sp(DisasContext *s, int reg)
> {
> return cpu_X[reg];
> }
> @@ -472,7 +463,7 @@ static TCGv_i64 cpu_reg_sp(DisasContext *s, int reg)
> * representing the register contents. This TCGv is an auto-freed
> * temporary so it need not be explicitly freed, and may be modified.
> */
> -static TCGv_i64 read_cpu_reg(DisasContext *s, int reg, int sf)
> +TCGv_i64 read_cpu_reg(DisasContext *s, int reg, int sf)
> {
> TCGv_i64 v = new_tmp_a64(s);
> if (reg != 31) {
> @@ -487,7 +478,7 @@ static TCGv_i64 read_cpu_reg(DisasContext *s, int reg, int sf)
> return v;
> }
>
> -static TCGv_i64 read_cpu_reg_sp(DisasContext *s, int reg, int sf)
> +TCGv_i64 read_cpu_reg_sp(DisasContext *s, int reg, int sf)
> {
> TCGv_i64 v = new_tmp_a64(s);
> if (sf) {
> @@ -498,72 +489,6 @@ static TCGv_i64 read_cpu_reg_sp(DisasContext *s, int reg, int sf)
> return v;
> }
>
> -/* We should have at some point before trying to access an FP register
> - * done the necessary access check, so assert that
> - * (a) we did the check and
> - * (b) we didn't then just plough ahead anyway if it failed.
> - * Print the instruction pattern in the abort message so we can figure
> - * out what we need to fix if a user encounters this problem in the wild.
> - */
> -static inline void assert_fp_access_checked(DisasContext *s)
> -{
> -#ifdef CONFIG_DEBUG_TCG
> - if (unlikely(!s->fp_access_checked || s->fp_excp_el)) {
> - fprintf(stderr, "target-arm: FP access check missing for "
> - "instruction 0x%08x\n", s->insn);
> - abort();
> - }
> -#endif
> -}
> -
> -/* Return the offset into CPUARMState of an element of specified
> - * size, 'element' places in from the least significant end of
> - * the FP/vector register Qn.
> - */
> -static inline int vec_reg_offset(DisasContext *s, int regno,
> - int element, TCGMemOp size)
> -{
> - int offs = 0;
> -#ifdef HOST_WORDS_BIGENDIAN
> - /* This is complicated slightly because vfp.zregs[n].d[0] is
> - * still the low half and vfp.zregs[n].d[1] the high half
> - * of the 128 bit vector, even on big endian systems.
> - * Calculate the offset assuming a fully bigendian 128 bits,
> - * then XOR to account for the order of the two 64 bit halves.
> - */
> - offs += (16 - ((element + 1) * (1 << size)));
> - offs ^= 8;
> -#else
> - offs += element * (1 << size);
> -#endif
> - offs += offsetof(CPUARMState, vfp.zregs[regno]);
> - assert_fp_access_checked(s);
> - return offs;
> -}
> -
> -/* Return the offset info CPUARMState of the "whole" vector register Qn. */
> -static inline int vec_full_reg_offset(DisasContext *s, int regno)
> -{
> - assert_fp_access_checked(s);
> - return offsetof(CPUARMState, vfp.zregs[regno]);
> -}
> -
> -/* Return a newly allocated pointer to the vector register. */
> -static TCGv_ptr vec_full_reg_ptr(DisasContext *s, int regno)
> -{
> - TCGv_ptr ret = tcg_temp_new_ptr();
> - tcg_gen_addi_ptr(ret, cpu_env, vec_full_reg_offset(s, regno));
> - return ret;
> -}
> -
> -/* Return the byte size of the "whole" vector register, VL / 8. */
> -static inline int vec_full_reg_size(DisasContext *s)
> -{
> - /* FIXME SVE: We should put the composite ZCR_EL* value into tb->flags.
> - In the meantime this is just the AdvSIMD length of 128. */
> - return 128 / 8;
> -}
> -
> /* Return the offset into CPUARMState of a slice (from
> * the least significant end) of FP register Qn (ie
> * Dn, Sn, Hn or Bn).
> @@ -620,7 +545,7 @@ static void clear_vec_high(DisasContext *s, bool is_q, int rd)
> }
> }
>
> -static void write_fp_dreg(DisasContext *s, int reg, TCGv_i64 v)
> +void write_fp_dreg(DisasContext *s, int reg, TCGv_i64 v)
> {
> unsigned ofs = fp_reg_offset(s, reg, MO_64);
>
> @@ -637,7 +562,7 @@ static void write_fp_sreg(DisasContext *s, int reg, TCGv_i32 v)
> tcg_temp_free_i64(tmp);
> }
>
> -static TCGv_ptr get_fpstatus_ptr(bool is_f16)
> +TCGv_ptr get_fpstatus_ptr(bool is_f16)
> {
> TCGv_ptr statusptr = tcg_temp_new_ptr();
> int offset;
> @@ -3130,8 +3055,8 @@ static inline uint64_t bitmask64(unsigned int length)
> * value (ie should cause a guest UNDEF exception), and true if they are
> * valid, in which case the decoded bit pattern is written to result.
> */
> -static bool logic_imm_decode_wmask(uint64_t *result, unsigned int immn,
> - unsigned int imms, unsigned int immr)
> +bool logic_imm_decode_wmask(uint64_t *result, unsigned int immn,
> + unsigned int imms, unsigned int immr)
> {
> uint64_t mask;
> unsigned e, levels, s, r;
> @@ -5164,7 +5089,7 @@ static void disas_fp_3src(DisasContext *s, uint32_t insn)
> * the range 01....1xx to 10....0xx, and the most significant 4 bits of
> * the mantissa; see VFPExpandImm() in the v8 ARM ARM.
> */
> -static uint64_t vfp_expand_imm(int size, uint8_t imm8)
> +uint64_t vfp_expand_imm(int size, uint8_t imm8)
> {
> uint64_t imm;
--
Alex Bennée
WARNING: multiple messages have this Message-ID (diff)
From: "Alex Bennée" <alex.bennee@linaro.org>
To: Richard Henderson <richard.henderson@linaro.org>
Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org
Subject: Re: [Qemu-devel] [Qemu-arm] [PATCH v2 02/67] target/arm: Introduce translate-a64.h
Date: Tue, 03 Apr 2018 10:01:46 +0100 [thread overview]
Message-ID: <871sfwek91.fsf@linaro.org> (raw)
In-Reply-To: <20180217182323.25885-3-richard.henderson@linaro.org>
Richard Henderson <richard.henderson@linaro.org> writes:
> Move some stuff that will be common to both translate-a64.c
> and translate-sve.c.
>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> target/arm/translate-a64.h | 110 +++++++++++++++++++++++++++++++++++++++++++++
> target/arm/translate-a64.c | 101 ++++++-----------------------------------
> 2 files changed, 123 insertions(+), 88 deletions(-)
> create mode 100644 target/arm/translate-a64.h
>
> diff --git a/target/arm/translate-a64.h b/target/arm/translate-a64.h
> new file mode 100644
> index 0000000000..e519aee314
> --- /dev/null
> +++ b/target/arm/translate-a64.h
> @@ -0,0 +1,110 @@
> +/*
> + * AArch64 translation, common definitions.
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> + */
> +
> +#ifndef TARGET_ARM_TRANSLATE_A64_H
> +#define TARGET_ARM_TRANSLATE_A64_H
> +
> +void unallocated_encoding(DisasContext *s);
> +
> +#define unsupported_encoding(s, insn) \
> + do { \
> + qemu_log_mask(LOG_UNIMP, \
> + "%s:%d: unsupported instruction encoding 0x%08x " \
> + "at pc=%016" PRIx64 "\n", \
> + __FILE__, __LINE__, insn, s->pc - 4); \
> + unallocated_encoding(s); \
> + } while (0)
> +
> +TCGv_i64 new_tmp_a64(DisasContext *s);
> +TCGv_i64 new_tmp_a64_zero(DisasContext *s);
> +TCGv_i64 cpu_reg(DisasContext *s, int reg);
> +TCGv_i64 cpu_reg_sp(DisasContext *s, int reg);
> +TCGv_i64 read_cpu_reg(DisasContext *s, int reg, int sf);
> +TCGv_i64 read_cpu_reg_sp(DisasContext *s, int reg, int sf);
> +void write_fp_dreg(DisasContext *s, int reg, TCGv_i64 v);
> +TCGv_ptr get_fpstatus_ptr(bool);
> +bool logic_imm_decode_wmask(uint64_t *result, unsigned int immn,
> + unsigned int imms, unsigned int immr);
> +uint64_t vfp_expand_imm(int size, uint8_t imm8);
> +
> +/* We should have at some point before trying to access an FP register
> + * done the necessary access check, so assert that
> + * (a) we did the check and
> + * (b) we didn't then just plough ahead anyway if it failed.
> + * Print the instruction pattern in the abort message so we can figure
> + * out what we need to fix if a user encounters this problem in the wild.
> + */
> +static inline void assert_fp_access_checked(DisasContext *s)
> +{
> +#ifdef CONFIG_DEBUG_TCG
> + if (unlikely(!s->fp_access_checked || s->fp_excp_el)) {
> + fprintf(stderr, "target-arm: FP access check missing for "
> + "instruction 0x%08x\n", s->insn);
> + abort();
> + }
> +#endif
> +}
> +
> +/* Return the offset into CPUARMState of an element of specified
> + * size, 'element' places in from the least significant end of
> + * the FP/vector register Qn.
> + */
> +static inline int vec_reg_offset(DisasContext *s, int regno,
> + int element, TCGMemOp size)
> +{
> + int offs = 0;
> +#ifdef HOST_WORDS_BIGENDIAN
> + /* This is complicated slightly because vfp.zregs[n].d[0] is
> + * still the low half and vfp.zregs[n].d[1] the high half
> + * of the 128 bit vector, even on big endian systems.
> + * Calculate the offset assuming a fully bigendian 128 bits,
> + * then XOR to account for the order of the two 64 bit halves.
> + */
> + offs += (16 - ((element + 1) * (1 << size)));
> + offs ^= 8;
> +#else
> + offs += element * (1 << size);
> +#endif
> + offs += offsetof(CPUARMState, vfp.zregs[regno]);
> + assert_fp_access_checked(s);
> + return offs;
> +}
> +
> +/* Return the offset info CPUARMState of the "whole" vector register Qn. */
> +static inline int vec_full_reg_offset(DisasContext *s, int regno)
> +{
> + assert_fp_access_checked(s);
> + return offsetof(CPUARMState, vfp.zregs[regno]);
> +}
> +
> +/* Return a newly allocated pointer to the vector register. */
> +static inline TCGv_ptr vec_full_reg_ptr(DisasContext *s, int regno)
> +{
> + TCGv_ptr ret = tcg_temp_new_ptr();
> + tcg_gen_addi_ptr(ret, cpu_env, vec_full_reg_offset(s, regno));
> + return ret;
> +}
> +
> +/* Return the byte size of the "whole" vector register, VL / 8. */
> +static inline int vec_full_reg_size(DisasContext *s)
> +{
> + return s->sve_len;
> +}
> +
> +bool disas_sve(DisasContext *, uint32_t);
> +
> +#endif /* TARGET_ARM_TRANSLATE_A64_H */
> diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
> index 032cbfa17d..e0e7ebf68c 100644
> --- a/target/arm/translate-a64.c
> +++ b/target/arm/translate-a64.c
> @@ -36,13 +36,13 @@
> #include "exec/log.h"
>
> #include "trace-tcg.h"
> +#include "translate-a64.h"
>
> static TCGv_i64 cpu_X[32];
> static TCGv_i64 cpu_pc;
>
> /* Load/store exclusive handling */
> static TCGv_i64 cpu_exclusive_high;
> -static TCGv_i64 cpu_reg(DisasContext *s, int reg);
>
> static const char *regnames[] = {
> "x0", "x1", "x2", "x3", "x4", "x5", "x6", "x7",
> @@ -392,22 +392,13 @@ static inline void gen_goto_tb(DisasContext *s, int n, uint64_t dest)
> }
> }
>
> -static void unallocated_encoding(DisasContext *s)
> +void unallocated_encoding(DisasContext *s)
> {
> /* Unallocated and reserved encodings are uncategorized */
> gen_exception_insn(s, 4, EXCP_UDEF, syn_uncategorized(),
> default_exception_el(s));
> }
>
> -#define unsupported_encoding(s, insn) \
> - do { \
> - qemu_log_mask(LOG_UNIMP, \
> - "%s:%d: unsupported instruction encoding 0x%08x " \
> - "at pc=%016" PRIx64 "\n", \
> - __FILE__, __LINE__, insn, s->pc - 4); \
> - unallocated_encoding(s); \
> - } while (0)
> -
> static void init_tmp_a64_array(DisasContext *s)
> {
> #ifdef CONFIG_DEBUG_TCG
> @@ -425,13 +416,13 @@ static void free_tmp_a64(DisasContext *s)
> init_tmp_a64_array(s);
> }
>
> -static TCGv_i64 new_tmp_a64(DisasContext *s)
> +TCGv_i64 new_tmp_a64(DisasContext *s)
> {
> assert(s->tmp_a64_count < TMP_A64_MAX);
> return s->tmp_a64[s->tmp_a64_count++] = tcg_temp_new_i64();
> }
>
> -static TCGv_i64 new_tmp_a64_zero(DisasContext *s)
> +TCGv_i64 new_tmp_a64_zero(DisasContext *s)
> {
> TCGv_i64 t = new_tmp_a64(s);
> tcg_gen_movi_i64(t, 0);
> @@ -453,7 +444,7 @@ static TCGv_i64 new_tmp_a64_zero(DisasContext *s)
> * to cpu_X[31] and ZR accesses to a temporary which can be discarded.
> * This is the point of the _sp forms.
> */
> -static TCGv_i64 cpu_reg(DisasContext *s, int reg)
> +TCGv_i64 cpu_reg(DisasContext *s, int reg)
> {
> if (reg == 31) {
> return new_tmp_a64_zero(s);
> @@ -463,7 +454,7 @@ static TCGv_i64 cpu_reg(DisasContext *s, int reg)
> }
>
> /* register access for when 31 == SP */
> -static TCGv_i64 cpu_reg_sp(DisasContext *s, int reg)
> +TCGv_i64 cpu_reg_sp(DisasContext *s, int reg)
> {
> return cpu_X[reg];
> }
> @@ -472,7 +463,7 @@ static TCGv_i64 cpu_reg_sp(DisasContext *s, int reg)
> * representing the register contents. This TCGv is an auto-freed
> * temporary so it need not be explicitly freed, and may be modified.
> */
> -static TCGv_i64 read_cpu_reg(DisasContext *s, int reg, int sf)
> +TCGv_i64 read_cpu_reg(DisasContext *s, int reg, int sf)
> {
> TCGv_i64 v = new_tmp_a64(s);
> if (reg != 31) {
> @@ -487,7 +478,7 @@ static TCGv_i64 read_cpu_reg(DisasContext *s, int reg, int sf)
> return v;
> }
>
> -static TCGv_i64 read_cpu_reg_sp(DisasContext *s, int reg, int sf)
> +TCGv_i64 read_cpu_reg_sp(DisasContext *s, int reg, int sf)
> {
> TCGv_i64 v = new_tmp_a64(s);
> if (sf) {
> @@ -498,72 +489,6 @@ static TCGv_i64 read_cpu_reg_sp(DisasContext *s, int reg, int sf)
> return v;
> }
>
> -/* We should have at some point before trying to access an FP register
> - * done the necessary access check, so assert that
> - * (a) we did the check and
> - * (b) we didn't then just plough ahead anyway if it failed.
> - * Print the instruction pattern in the abort message so we can figure
> - * out what we need to fix if a user encounters this problem in the wild.
> - */
> -static inline void assert_fp_access_checked(DisasContext *s)
> -{
> -#ifdef CONFIG_DEBUG_TCG
> - if (unlikely(!s->fp_access_checked || s->fp_excp_el)) {
> - fprintf(stderr, "target-arm: FP access check missing for "
> - "instruction 0x%08x\n", s->insn);
> - abort();
> - }
> -#endif
> -}
> -
> -/* Return the offset into CPUARMState of an element of specified
> - * size, 'element' places in from the least significant end of
> - * the FP/vector register Qn.
> - */
> -static inline int vec_reg_offset(DisasContext *s, int regno,
> - int element, TCGMemOp size)
> -{
> - int offs = 0;
> -#ifdef HOST_WORDS_BIGENDIAN
> - /* This is complicated slightly because vfp.zregs[n].d[0] is
> - * still the low half and vfp.zregs[n].d[1] the high half
> - * of the 128 bit vector, even on big endian systems.
> - * Calculate the offset assuming a fully bigendian 128 bits,
> - * then XOR to account for the order of the two 64 bit halves.
> - */
> - offs += (16 - ((element + 1) * (1 << size)));
> - offs ^= 8;
> -#else
> - offs += element * (1 << size);
> -#endif
> - offs += offsetof(CPUARMState, vfp.zregs[regno]);
> - assert_fp_access_checked(s);
> - return offs;
> -}
> -
> -/* Return the offset info CPUARMState of the "whole" vector register Qn. */
> -static inline int vec_full_reg_offset(DisasContext *s, int regno)
> -{
> - assert_fp_access_checked(s);
> - return offsetof(CPUARMState, vfp.zregs[regno]);
> -}
> -
> -/* Return a newly allocated pointer to the vector register. */
> -static TCGv_ptr vec_full_reg_ptr(DisasContext *s, int regno)
> -{
> - TCGv_ptr ret = tcg_temp_new_ptr();
> - tcg_gen_addi_ptr(ret, cpu_env, vec_full_reg_offset(s, regno));
> - return ret;
> -}
> -
> -/* Return the byte size of the "whole" vector register, VL / 8. */
> -static inline int vec_full_reg_size(DisasContext *s)
> -{
> - /* FIXME SVE: We should put the composite ZCR_EL* value into tb->flags.
> - In the meantime this is just the AdvSIMD length of 128. */
> - return 128 / 8;
> -}
> -
> /* Return the offset into CPUARMState of a slice (from
> * the least significant end) of FP register Qn (ie
> * Dn, Sn, Hn or Bn).
> @@ -620,7 +545,7 @@ static void clear_vec_high(DisasContext *s, bool is_q, int rd)
> }
> }
>
> -static void write_fp_dreg(DisasContext *s, int reg, TCGv_i64 v)
> +void write_fp_dreg(DisasContext *s, int reg, TCGv_i64 v)
> {
> unsigned ofs = fp_reg_offset(s, reg, MO_64);
>
> @@ -637,7 +562,7 @@ static void write_fp_sreg(DisasContext *s, int reg, TCGv_i32 v)
> tcg_temp_free_i64(tmp);
> }
>
> -static TCGv_ptr get_fpstatus_ptr(bool is_f16)
> +TCGv_ptr get_fpstatus_ptr(bool is_f16)
> {
> TCGv_ptr statusptr = tcg_temp_new_ptr();
> int offset;
> @@ -3130,8 +3055,8 @@ static inline uint64_t bitmask64(unsigned int length)
> * value (ie should cause a guest UNDEF exception), and true if they are
> * valid, in which case the decoded bit pattern is written to result.
> */
> -static bool logic_imm_decode_wmask(uint64_t *result, unsigned int immn,
> - unsigned int imms, unsigned int immr)
> +bool logic_imm_decode_wmask(uint64_t *result, unsigned int immn,
> + unsigned int imms, unsigned int immr)
> {
> uint64_t mask;
> unsigned e, levels, s, r;
> @@ -5164,7 +5089,7 @@ static void disas_fp_3src(DisasContext *s, uint32_t insn)
> * the range 01....1xx to 10....0xx, and the most significant 4 bits of
> * the mantissa; see VFPExpandImm() in the v8 ARM ARM.
> */
> -static uint64_t vfp_expand_imm(int size, uint8_t imm8)
> +uint64_t vfp_expand_imm(int size, uint8_t imm8)
> {
> uint64_t imm;
--
Alex Bennée
next prev parent reply other threads:[~2018-04-03 9:01 UTC|newest]
Thread overview: 303+ 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-devel] " 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-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-22 17:28 ` [Qemu-arm] " Peter Maydell
2018-02-22 17:28 ` [Qemu-devel] " Peter Maydell
2018-02-22 19:27 ` Richard Henderson
2018-02-22 19:27 ` [Qemu-devel] " Richard Henderson
2018-02-23 17:00 ` Alex Bennée
2018-02-23 17:00 ` [Qemu-devel] " Alex Bennée
2018-02-23 18:47 ` Richard Henderson
2018-02-23 18:47 ` [Qemu-devel] " Richard Henderson
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 02/67] target/arm: Introduce translate-a64.h Richard Henderson
2018-02-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-22 17:30 ` [Qemu-arm] " Peter Maydell
2018-02-22 17:30 ` [Qemu-devel] " Peter Maydell
2018-04-03 9:01 ` Alex Bennée [this message]
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-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-22 18:00 ` [Qemu-arm] " Peter Maydell
2018-02-22 18:00 ` [Qemu-devel] " Peter Maydell
2018-02-23 11:40 ` Peter Maydell
2018-02-23 11:40 ` [Qemu-devel] " Peter Maydell
2018-02-23 11:43 ` Peter Maydell
2018-02-23 11:43 ` [Qemu-devel] " 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-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-22 18:04 ` [Qemu-arm] " Peter Maydell
2018-02-22 18:04 ` [Qemu-devel] " Peter Maydell
2018-02-22 19:28 ` Richard Henderson
2018-02-22 19:28 ` [Qemu-devel] " 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 18:20 ` Peter Maydell
2018-02-22 19:31 ` [Qemu-arm] " Richard Henderson
2018-02-22 19:31 ` 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-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-22 18:38 ` [Qemu-arm] " Peter Maydell
2018-02-22 18:38 ` [Qemu-devel] " Peter Maydell
2018-04-03 9:16 ` Alex Bennée
2018-04-03 9:16 ` [Qemu-devel] " Alex Bennée
2018-04-06 1:27 ` Richard Henderson
2018-04-06 1:27 ` [Qemu-devel] " 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-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-22 18:55 ` [Qemu-arm] " Peter Maydell
2018-02-22 18:55 ` [Qemu-devel] " Peter Maydell
2018-02-22 19:37 ` Richard Henderson
2018-02-22 19:37 ` Richard Henderson
2018-02-23 9:56 ` Peter Maydell
2018-02-23 9:56 ` [Qemu-devel] " Peter Maydell
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 08/67] target/arm: Implement SVE Predicate Misc Group Richard Henderson
2018-02-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-23 11:22 ` [Qemu-arm] " Peter Maydell
2018-02-23 11:22 ` [Qemu-devel] " 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-23 11:35 ` Peter Maydell
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 10/67] target/arm: Implement SVE Integer Reduction Group Richard Henderson
2018-02-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-23 11:50 ` [Qemu-arm] " Peter Maydell
2018-02-23 11:50 ` [Qemu-devel] " 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-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-23 12:03 ` [Qemu-devel] [Qemu-arm] " Peter Maydell
2018-02-23 12:03 ` 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-23 12:50 ` [Qemu-devel] " 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-23 12:57 ` 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 13:08 ` Peter Maydell
2018-02-23 17:25 ` [Qemu-arm] " Richard Henderson
2018-02-23 17:25 ` Richard Henderson
2018-02-23 17:30 ` [Qemu-arm] " Peter Maydell
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-23 13:12 ` 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-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-23 13:16 ` [Qemu-arm] " Peter Maydell
2018-02-23 13:16 ` [Qemu-devel] " Peter Maydell
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 17/67] target/arm: Implement SVE Index Generation Group Richard Henderson
2018-02-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-23 13:22 ` [Qemu-arm] " Peter Maydell
2018-02-23 13:22 ` [Qemu-devel] " 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-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-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-23 13:28 ` [Qemu-devel] [Qemu-arm] " Peter Maydell
2018-02-23 13:28 ` 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-23 13:34 ` 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-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-23 13:48 ` [Qemu-arm] " Peter Maydell
2018-02-23 13:48 ` [Qemu-devel] " Peter Maydell
2018-02-23 17:29 ` Richard Henderson
2018-02-23 17:29 ` [Qemu-devel] " 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-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-23 13:54 ` [Qemu-arm] " Peter Maydell
2018-02-23 13:54 ` [Qemu-devel] " 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-23 14:06 ` Peter Maydell
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 24/67] target/arm: Implement SVE Bitwise Immediate Group Richard Henderson
2018-02-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-23 14:10 ` [Qemu-arm] " Peter Maydell
2018-02-23 14:10 ` [Qemu-devel] " 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 14:18 ` Peter Maydell
2018-02-23 17:31 ` [Qemu-arm] " Richard Henderson
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-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-23 14:24 ` [Qemu-arm] " Peter Maydell
2018-02-23 14:24 ` [Qemu-devel] " Peter Maydell
2018-02-23 17:46 ` Richard Henderson
2018-02-23 17:46 ` [Qemu-devel] " 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 14:34 ` Peter Maydell
2018-02-23 18:58 ` [Qemu-arm] " Richard Henderson
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 15:15 ` Peter Maydell
2018-02-23 19:59 ` [Qemu-arm] " Richard Henderson
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-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-23 15:22 ` [Qemu-arm] " Peter Maydell
2018-02-23 15:22 ` [Qemu-devel] " Peter Maydell
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 30/67] target/arm: Implement SVE compress active elements Richard Henderson
2018-02-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-23 15:25 ` [Qemu-arm] " Peter Maydell
2018-02-23 15:25 ` [Qemu-devel] " 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-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-23 15:44 ` [Qemu-devel] [Qemu-arm] " Peter Maydell
2018-02-23 15:44 ` Peter Maydell
2018-02-23 20:15 ` Richard Henderson
2018-02-23 20:15 ` [Qemu-devel] " 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-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-23 15:45 ` [Qemu-devel] [Qemu-arm] " Peter Maydell
2018-02-23 15:45 ` Peter Maydell
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 33/67] target/arm: Implement SVE reverse within elements Richard Henderson
2018-02-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-23 15:50 ` [Qemu-arm] " Peter Maydell
2018-02-23 15:50 ` [Qemu-devel] " Peter Maydell
2018-02-23 20:21 ` Richard Henderson
2018-02-23 20:21 ` [Qemu-devel] " Richard Henderson
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 34/67] target/arm: Implement SVE vector splice (predicated) Richard Henderson
2018-02-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-23 15:52 ` [Qemu-devel] [Qemu-arm] " Peter Maydell
2018-02-23 15:52 ` Peter Maydell
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 35/67] target/arm: Implement SVE Select Vectors Group Richard Henderson
2018-02-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-23 16:21 ` [Qemu-devel] [Qemu-arm] " Peter Maydell
2018-02-23 16:21 ` 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 16:29 ` Peter Maydell
2018-02-23 20:57 ` [Qemu-arm] " Richard Henderson
2018-02-23 20:57 ` 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-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-23 16:32 ` [Qemu-arm] " Peter Maydell
2018-02-23 16:32 ` [Qemu-devel] " Peter Maydell
2018-02-17 18:22 ` [Qemu-arm] [PATCH v2 38/67] target/arm: Implement SVE Partition Break Group Richard Henderson
2018-02-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-23 16:41 ` [Qemu-arm] " Peter Maydell
2018-02-23 16:41 ` [Qemu-devel] " Peter Maydell
2018-02-23 20:59 ` Richard Henderson
2018-02-23 20:59 ` [Qemu-devel] " 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-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 17:00 ` Peter Maydell
2018-02-23 21:06 ` [Qemu-arm] " Richard Henderson
2018-02-23 21:06 ` 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-23 17:12 ` 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-17 18:22 ` [Qemu-devel] " Richard Henderson
2018-02-23 17:18 ` [Qemu-arm] " Peter Maydell
2018-02-23 17:18 ` [Qemu-devel] " 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 17:25 ` Peter Maydell
2018-02-23 21:15 ` [Qemu-arm] " Richard Henderson
2018-02-23 21:15 ` Richard Henderson
2018-02-17 18:23 ` [Qemu-arm] [PATCH v2 44/67] target/arm: Implement SVE Memory Contiguous Load Group Richard Henderson
2018-02-17 18:23 ` [Qemu-devel] " Richard Henderson
2018-02-27 12:16 ` [Qemu-arm] " Peter Maydell
2018-02-27 12:16 ` [Qemu-devel] " 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-27 13:22 ` 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-17 18:23 ` [Qemu-devel] " Richard Henderson
2018-02-27 13:36 ` [Qemu-arm] " Peter Maydell
2018-02-27 13:36 ` [Qemu-devel] " 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:47 ` Peter Maydell
2018-02-27 13:51 ` 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-27 13:50 ` 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-17 18:23 ` [Qemu-devel] " Richard Henderson
2018-02-27 13:54 ` [Qemu-arm] " Peter Maydell
2018-02-27 13:54 ` [Qemu-devel] " 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-17 18:23 ` [Qemu-devel] " Richard Henderson
2018-02-27 13:59 ` [Qemu-arm] " Peter Maydell
2018-02-27 13:59 ` [Qemu-devel] " 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-17 18:23 ` [Qemu-devel] " Richard Henderson
2018-02-27 14:15 ` [Qemu-arm] " Peter Maydell
2018-02-27 14:15 ` [Qemu-devel] " 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-17 18:23 ` [Qemu-devel] " Richard Henderson
2018-02-27 14:21 ` [Qemu-arm] " Peter Maydell
2018-02-27 14:21 ` [Qemu-devel] " 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-27 14:36 ` 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-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-17 18:23 ` [Qemu-devel] " Richard Henderson
2018-02-27 14:53 ` [Qemu-devel] [Qemu-arm] " Peter Maydell
2018-02-27 14:53 ` 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-17 18:23 ` [Qemu-devel] " Richard Henderson
2018-02-27 15:02 ` [Qemu-arm] " Peter Maydell
2018-02-27 15:02 ` [Qemu-devel] " 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-17 18:23 ` [Qemu-devel] " Richard Henderson
2018-02-27 15:04 ` [Qemu-devel] [Qemu-arm] " Peter Maydell
2018-02-27 15:04 ` 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-27 15:11 ` 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-17 18:23 ` [Qemu-devel] " Richard Henderson
2018-02-27 15:18 ` [Qemu-devel] [Qemu-arm] " Peter Maydell
2018-02-27 15:18 ` Peter Maydell
2018-02-27 16:29 ` Richard Henderson
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-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-27 15:28 ` 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-27 15:31 ` 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-17 18:23 ` [Qemu-devel] " Richard Henderson
2018-02-27 15:34 ` [Qemu-arm] " Peter Maydell
2018-02-27 15:34 ` [Qemu-devel] " 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-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-17 18:23 ` [Qemu-devel] " Richard Henderson
2018-02-27 15:36 ` [Qemu-arm] " Peter Maydell
2018-02-27 15:36 ` [Qemu-devel] " 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-17 18:23 ` [Qemu-devel] " Richard Henderson
2018-02-27 15:39 ` [Qemu-arm] " Peter Maydell
2018-02-27 15:39 ` [Qemu-devel] " 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-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-02-23 17:05 ` [Qemu-devel] " Alex Bennée
2018-04-03 15:41 ` Alex Bennée
2018-04-03 15:41 ` [Qemu-devel] " 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=871sfwek91.fsf@linaro.org \
--to=alex.bennee@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.