From: "Alex Bennée" <alex.bennee@linaro.org>
To: Richard Henderson <richard.henderson@linaro.org>
Cc: qemu-devel@nongnu.org, peter.maydell@linaro.org
Subject: Re: [Qemu-devel] [PATCH v2 06/16] target/arm: Add aa{32, 64}_vfp_{dreg, qreg} helpers
Date: Mon, 22 Jan 2018 11:02:18 +0000 [thread overview]
Message-ID: <87zi56jgw5.fsf@linaro.org> (raw)
In-Reply-To: <20180119045438.28582-7-richard.henderson@linaro.org>
Richard Henderson <richard.henderson@linaro.org> writes:
> Helpers that return a pointer into env->vfp.regs so that we isolate
> the logic of how to index the regs array for different cpu modes.
>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> target/arm/cpu.h | 27 +++++++++++++++++++++++++++
> linux-user/signal.c | 22 ++++++++++++----------
> target/arm/arch_dump.c | 8 +++++---
> target/arm/helper-a64.c | 5 +++--
> target/arm/helper.c | 32 ++++++++++++++++++++------------
> target/arm/kvm32.c | 4 ++--
> target/arm/kvm64.c | 31 ++++++++++---------------------
> target/arm/translate-a64.c | 25 ++++++++-----------------
> target/arm/translate.c | 16 +++++++++-------
> 9 files changed, 96 insertions(+), 74 deletions(-)
>
> diff --git a/target/arm/cpu.h b/target/arm/cpu.h
> index 76ab7953a6..7d396606f3 100644
> --- a/target/arm/cpu.h
> +++ b/target/arm/cpu.h
> @@ -2885,4 +2885,31 @@ static inline void *arm_get_el_change_hook_opaque(ARMCPU *cpu)
> return cpu->el_change_hook_opaque;
> }
>
> +/**
> + * aa32_vfp_dreg:
> + * Return a pointer to the Dn register within env in 32-bit mode.
> + */
> +static inline uint64_t *aa32_vfp_dreg(CPUARMState *env, unsigned regno)
> +{
> + return &env->vfp.regs[regno];
> +}
> +
> +/**
> + * aa32_vfp_qreg:
> + * Return a pointer to the Qn register within env in 32-bit mode.
> + */
> +static inline uint64_t *aa32_vfp_qreg(CPUARMState *env, unsigned regno)
> +{
> + return &env->vfp.regs[2 * regno];
> +}
> +
> +/**
> + * aa64_vfp_qreg:
> + * Return a pointer to the Qn register within env in 64-bit mode.
> + */
> +static inline uint64_t *aa64_vfp_qreg(CPUARMState *env, unsigned regno)
> +{
> + return &env->vfp.regs[2 * regno];
> +}
> +
> #endif
> diff --git a/linux-user/signal.c b/linux-user/signal.c
> index f85f0dd780..5321f9e795 100644
> --- a/linux-user/signal.c
> +++ b/linux-user/signal.c
> @@ -1487,12 +1487,13 @@ static int target_setup_sigframe(struct target_rt_sigframe *sf,
> }
>
> for (i = 0; i < 32; i++) {
> + uint64_t *q = aa64_vfp_qreg(env, i);
> #ifdef TARGET_WORDS_BIGENDIAN
> - __put_user(env->vfp.regs[i * 2], &aux->fpsimd.vregs[i * 2 + 1]);
> - __put_user(env->vfp.regs[i * 2 + 1], &aux->fpsimd.vregs[i * 2]);
> + __put_user(q[0], &aux->fpsimd.vregs[i * 2 + 1]);
> + __put_user(q[1], &aux->fpsimd.vregs[i * 2]);
> #else
> - __put_user(env->vfp.regs[i * 2], &aux->fpsimd.vregs[i * 2]);
> - __put_user(env->vfp.regs[i * 2 + 1], &aux->fpsimd.vregs[i * 2 + 1]);
> + __put_user(q[0], &aux->fpsimd.vregs[i * 2]);
> + __put_user(q[1], &aux->fpsimd.vregs[i * 2 + 1]);
> #endif
> }
> __put_user(vfp_get_fpsr(env), &aux->fpsimd.fpsr);
> @@ -1539,12 +1540,13 @@ static int target_restore_sigframe(CPUARMState *env,
> }
>
> for (i = 0; i < 32; i++) {
> + uint64_t *q = aa64_vfp_qreg(env, i);
> #ifdef TARGET_WORDS_BIGENDIAN
> - __get_user(env->vfp.regs[i * 2], &aux->fpsimd.vregs[i * 2 + 1]);
> - __get_user(env->vfp.regs[i * 2 + 1], &aux->fpsimd.vregs[i * 2]);
> + __get_user(q[0], &aux->fpsimd.vregs[i * 2 + 1]);
> + __get_user(q[1], &aux->fpsimd.vregs[i * 2]);
> #else
> - __get_user(env->vfp.regs[i * 2], &aux->fpsimd.vregs[i * 2]);
> - __get_user(env->vfp.regs[i * 2 + 1], &aux->fpsimd.vregs[i * 2 + 1]);
> + __get_user(q[0], &aux->fpsimd.vregs[i * 2]);
> + __get_user(q[1], &aux->fpsimd.vregs[i * 2 + 1]);
> #endif
> }
> __get_user(fpsr, &aux->fpsimd.fpsr);
> @@ -1903,7 +1905,7 @@ static abi_ulong *setup_sigframe_v2_vfp(abi_ulong *regspace, CPUARMState *env)
> __put_user(TARGET_VFP_MAGIC, &vfpframe->magic);
> __put_user(sizeof(*vfpframe), &vfpframe->size);
> for (i = 0; i < 32; i++) {
> - __put_user(float64_val(env->vfp.regs[i]), &vfpframe->ufp.fpregs[i]);
> + __put_user(*aa32_vfp_dreg(env, i), &vfpframe->ufp.fpregs[i]);
> }
> __put_user(vfp_get_fpscr(env), &vfpframe->ufp.fpscr);
> __put_user(env->vfp.xregs[ARM_VFP_FPEXC], &vfpframe->ufp_exc.fpexc);
> @@ -2210,7 +2212,7 @@ static abi_ulong *restore_sigframe_v2_vfp(CPUARMState *env, abi_ulong *regspace)
> return 0;
> }
> for (i = 0; i < 32; i++) {
> - __get_user(float64_val(env->vfp.regs[i]), &vfpframe->ufp.fpregs[i]);
> + __get_user(*aa32_vfp_dreg(env, i), &vfpframe->ufp.fpregs[i]);
> }
> __get_user(fpscr, &vfpframe->ufp.fpscr);
> vfp_set_fpscr(env, fpscr);
> diff --git a/target/arm/arch_dump.c b/target/arm/arch_dump.c
> index 0c43e0eef8..26a2c09868 100644
> --- a/target/arm/arch_dump.c
> +++ b/target/arm/arch_dump.c
> @@ -99,8 +99,10 @@ static int aarch64_write_elf64_prfpreg(WriteCoreDumpFunction f,
>
> aarch64_note_init(¬e, s, "CORE", 5, NT_PRFPREG, sizeof(note.vfp));
>
> - for (i = 0; i < 64; ++i) {
> - note.vfp.vregs[i] = cpu_to_dump64(s, env->vfp.regs[i]);
> + for (i = 0; i < 32; ++i) {
> + uint64_t *q = aa64_vfp_qreg(env, i);
> + note.vfp.vregs[2*i + 0] = cpu_to_dump64(s, q[0]);
> + note.vfp.vregs[2*i + 1] = cpu_to_dump64(s, q[1]);
> }
>
> if (s->dump_info.d_endian == ELFDATA2MSB) {
> @@ -229,7 +231,7 @@ static int arm_write_elf32_vfp(WriteCoreDumpFunction f, CPUARMState *env,
> arm_note_init(¬e, s, "LINUX", 6, NT_ARM_VFP, sizeof(note.vfp));
>
> for (i = 0; i < 32; ++i) {
> - note.vfp.vregs[i] = cpu_to_dump64(s, env->vfp.regs[i]);
> + note.vfp.vregs[i] = cpu_to_dump64(s, *aa32_vfp_dreg(env, i));
> }
>
> note.vfp.fpscr = cpu_to_dump32(s, vfp_get_fpscr(env));
> diff --git a/target/arm/helper-a64.c b/target/arm/helper-a64.c
> index 3e00a9ead1..06fd321fae 100644
> --- a/target/arm/helper-a64.c
> +++ b/target/arm/helper-a64.c
> @@ -153,13 +153,14 @@ uint64_t HELPER(simd_tbl)(CPUARMState *env, uint64_t result, uint64_t indices,
> if (index < 16 * numregs) {
> /* Convert index (a byte offset into the virtual table
> * which is a series of 128-bit vectors concatenated)
> - * into the correct vfp.regs[] element plus a bit offset
> + * into the correct register element plus a bit offset
> * into that element, bearing in mind that the table
> * can wrap around from V31 to V0.
> */
> int elt = (rn * 2 + (index >> 3)) % 64;
> int bitidx = (index & 7) * 8;
> - uint64_t val = extract64(env->vfp.regs[elt], bitidx, 8);
> + uint64_t *q = aa64_vfp_qreg(env, elt >> 1);
> + uint64_t val = extract64(q[elt & 1], bitidx, 8);
>
> result = deposit64(result, shift, 8, val);
> }
> diff --git a/target/arm/helper.c b/target/arm/helper.c
> index 8fda797582..6705903301 100644
> --- a/target/arm/helper.c
> +++ b/target/arm/helper.c
> @@ -64,15 +64,16 @@ static int vfp_gdb_get_reg(CPUARMState *env, uint8_t *buf, int reg)
> /* VFP data registers are always little-endian. */
> nregs = arm_feature(env, ARM_FEATURE_VFP3) ? 32 : 16;
> if (reg < nregs) {
> - stq_le_p(buf, env->vfp.regs[reg]);
> + stq_le_p(buf, *aa32_vfp_dreg(env, reg));
> return 8;
> }
> if (arm_feature(env, ARM_FEATURE_NEON)) {
> /* Aliases for Q regs. */
> nregs += 16;
> if (reg < nregs) {
> - stq_le_p(buf, env->vfp.regs[(reg - 32) * 2]);
> - stq_le_p(buf + 8, env->vfp.regs[(reg - 32) * 2 + 1]);
> + uint64_t *q = aa32_vfp_qreg(env, reg - 32);
> + stq_le_p(buf, q[0]);
> + stq_le_p(buf + 8, q[1]);
> return 16;
> }
> }
> @@ -90,14 +91,15 @@ static int vfp_gdb_set_reg(CPUARMState *env, uint8_t *buf, int reg)
>
> nregs = arm_feature(env, ARM_FEATURE_VFP3) ? 32 : 16;
> if (reg < nregs) {
> - env->vfp.regs[reg] = ldq_le_p(buf);
> + *aa32_vfp_dreg(env, reg) = ldq_le_p(buf);
> return 8;
> }
> if (arm_feature(env, ARM_FEATURE_NEON)) {
> nregs += 16;
> if (reg < nregs) {
> - env->vfp.regs[(reg - 32) * 2] = ldq_le_p(buf);
> - env->vfp.regs[(reg - 32) * 2 + 1] = ldq_le_p(buf + 8);
> + uint64_t *q = aa32_vfp_qreg(env, reg - 32);
> + q[0] = ldq_le_p(buf);
> + q[1] = ldq_le_p(buf + 8);
> return 16;
> }
> }
> @@ -114,9 +116,12 @@ static int aarch64_fpu_gdb_get_reg(CPUARMState *env, uint8_t *buf, int reg)
> switch (reg) {
> case 0 ... 31:
> /* 128 bit FP register */
> - stq_le_p(buf, env->vfp.regs[reg * 2]);
> - stq_le_p(buf + 8, env->vfp.regs[reg * 2 + 1]);
> - return 16;
> + {
> + uint64_t *q = aa64_vfp_qreg(env, reg);
> + stq_le_p(buf, q[0]);
> + stq_le_p(buf + 8, q[1]);
> + return 16;
> + }
> case 32:
> /* FPSR */
> stl_p(buf, vfp_get_fpsr(env));
> @@ -135,9 +140,12 @@ static int aarch64_fpu_gdb_set_reg(CPUARMState *env, uint8_t *buf, int reg)
> switch (reg) {
> case 0 ... 31:
> /* 128 bit FP register */
> - env->vfp.regs[reg * 2] = ldq_le_p(buf);
> - env->vfp.regs[reg * 2 + 1] = ldq_le_p(buf + 8);
> - return 16;
> + {
> + uint64_t *q = aa64_vfp_qreg(env, reg);
> + q[0] = ldq_le_p(buf);
> + q[1] = ldq_le_p(buf + 8);
> + return 16;
> + }
> case 32:
> /* FPSR */
> vfp_set_fpsr(env, ldl_p(buf));
> diff --git a/target/arm/kvm32.c b/target/arm/kvm32.c
> index f925a21481..f77c9c494b 100644
> --- a/target/arm/kvm32.c
> +++ b/target/arm/kvm32.c
> @@ -358,7 +358,7 @@ int kvm_arch_put_registers(CPUState *cs, int level)
> /* VFP registers */
> r.id = KVM_REG_ARM | KVM_REG_SIZE_U64 | KVM_REG_ARM_VFP;
> for (i = 0; i < 32; i++) {
> - r.addr = (uintptr_t)(&env->vfp.regs[i]);
> + r.addr = (uintptr_t)aa32_vfp_dreg(env, i);
> ret = kvm_vcpu_ioctl(cs, KVM_SET_ONE_REG, &r);
> if (ret) {
> return ret;
> @@ -445,7 +445,7 @@ int kvm_arch_get_registers(CPUState *cs)
> /* VFP registers */
> r.id = KVM_REG_ARM | KVM_REG_SIZE_U64 | KVM_REG_ARM_VFP;
> for (i = 0; i < 32; i++) {
> - r.addr = (uintptr_t)(&env->vfp.regs[i]);
> + r.addr = (uintptr_t)aa32_vfp_dreg(env, i);
> ret = kvm_vcpu_ioctl(cs, KVM_GET_ONE_REG, &r);
> if (ret) {
> return ret;
> diff --git a/target/arm/kvm64.c b/target/arm/kvm64.c
> index 6554c30007..ac728494a4 100644
> --- a/target/arm/kvm64.c
> +++ b/target/arm/kvm64.c
> @@ -696,21 +696,16 @@ int kvm_arch_put_registers(CPUState *cs, int level)
> }
> }
>
> - /* Advanced SIMD and FP registers
> - * We map Qn = regs[2n+1]:regs[2n]
> - */
> + /* Advanced SIMD and FP registers. */
> for (i = 0; i < 32; i++) {
> - int rd = i << 1;
> - uint64_t fp_val[2];
> + uint64_t *q = aa64_vfp_qreg(env, i);
> #ifdef HOST_WORDS_BIGENDIAN
> - fp_val[0] = env->vfp.regs[rd + 1];
> - fp_val[1] = env->vfp.regs[rd];
> + uint64_t fp_val[2] = { q[1], q[0] };
> + reg.addr = (uintptr_t)fp_val;
> #else
> - fp_val[1] = env->vfp.regs[rd + 1];
> - fp_val[0] = env->vfp.regs[rd];
> + reg.addr = (uintptr_t)q;
> #endif
> reg.id = AARCH64_SIMD_CORE_REG(fp_regs.vregs[i]);
> - reg.addr = (uintptr_t)(&fp_val);
> ret = kvm_vcpu_ioctl(cs, KVM_SET_ONE_REG, ®);
> if (ret) {
> return ret;
> @@ -837,24 +832,18 @@ int kvm_arch_get_registers(CPUState *cs)
> env->spsr = env->banked_spsr[i];
> }
>
> - /* Advanced SIMD and FP registers
> - * We map Qn = regs[2n+1]:regs[2n]
> - */
> + /* Advanced SIMD and FP registers */
> for (i = 0; i < 32; i++) {
> - uint64_t fp_val[2];
> + uint64_t *q = aa64_vfp_qreg(env, i);
> reg.id = AARCH64_SIMD_CORE_REG(fp_regs.vregs[i]);
> - reg.addr = (uintptr_t)(&fp_val);
> + reg.addr = (uintptr_t)q;
> ret = kvm_vcpu_ioctl(cs, KVM_GET_ONE_REG, ®);
> if (ret) {
> return ret;
> } else {
> - int rd = i << 1;
> #ifdef HOST_WORDS_BIGENDIAN
> - env->vfp.regs[rd + 1] = fp_val[0];
> - env->vfp.regs[rd] = fp_val[1];
> -#else
> - env->vfp.regs[rd + 1] = fp_val[1];
> - env->vfp.regs[rd] = fp_val[0];
> + uint64_t t;
> + t = q[0], q[0] = q[1], q[1] = t;
> #endif
> }
> }
> diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
> index c14fb4185c..eed64c73e5 100644
> --- a/target/arm/translate-a64.c
> +++ b/target/arm/translate-a64.c
> @@ -164,15 +164,12 @@ void aarch64_cpu_dump_state(CPUState *cs, FILE *f,
>
> if (flags & CPU_DUMP_FPU) {
> int numvfpregs = 32;
> - for (i = 0; i < numvfpregs; i += 2) {
> - uint64_t vlo = env->vfp.regs[i * 2];
> - uint64_t vhi = env->vfp.regs[(i * 2) + 1];
> - cpu_fprintf(f, "q%02d=%016" PRIx64 ":%016" PRIx64 " ",
> - i, vhi, vlo);
> - vlo = env->vfp.regs[(i + 1) * 2];
> - vhi = env->vfp.regs[((i + 1) * 2) + 1];
> - cpu_fprintf(f, "q%02d=%016" PRIx64 ":%016" PRIx64 "\n",
> - i + 1, vhi, vlo);
> + for (i = 0; i < numvfpregs; i++) {
> + uint64_t *q = aa64_vfp_qreg(env, i);
> + uint64_t vlo = q[0];
> + uint64_t vhi = q[1];
> + cpu_fprintf(f, "q%02d=%016" PRIx64 ":%016" PRIx64 "%c",
> + i, vhi, vlo, (i & 1 ? '\n' : ' '));
> }
> cpu_fprintf(f, "FPCR: %08x FPSR: %08x\n",
> vfp_get_fpcr(env), vfp_get_fpsr(env));
> @@ -558,19 +555,13 @@ static TCGv_ptr vec_full_reg_ptr(DisasContext *s, int regno)
> */
> static inline int fp_reg_offset(DisasContext *s, int regno, TCGMemOp size)
> {
> - int offs = offsetof(CPUARMState, vfp.regs[regno * 2]);
> -#ifdef HOST_WORDS_BIGENDIAN
> - offs += (8 - (1 << size));
> -#endif
> - assert_fp_access_checked(s);
> - return offs;
> + return vec_reg_offset(s, regno, 0, size);
> }
>
> /* Offset of the high half of the 128 bit vector Qn */
> static inline int fp_reg_hi_offset(DisasContext *s, int regno)
> {
> - assert_fp_access_checked(s);
> - return offsetof(CPUARMState, vfp.regs[regno * 2 + 1]);
> + return vec_reg_offset(s, regno, 1, MO_64);
> }
>
> /* Convenience accessors for reading and writing single and double
> diff --git a/target/arm/translate.c b/target/arm/translate.c
> index cfe49bf579..55826b7e5a 100644
> --- a/target/arm/translate.c
> +++ b/target/arm/translate.c
> @@ -1515,14 +1515,16 @@ static inline void gen_vfp_st(DisasContext *s, int dp, TCGv_i32 addr)
> static inline long
> vfp_reg_offset (int dp, int reg)
> {
> - if (dp)
> + if (dp) {
> return offsetof(CPUARMState, vfp.regs[reg]);
> - else if (reg & 1) {
> - return offsetof(CPUARMState, vfp.regs[reg >> 1])
> - + offsetof(CPU_DoubleU, l.upper);
> } else {
> - return offsetof(CPUARMState, vfp.regs[reg >> 1])
> - + offsetof(CPU_DoubleU, l.lower);
> + long ofs = offsetof(CPUARMState, vfp.regs[reg >> 1]);
> + if (reg & 1) {
> + ofs += offsetof(CPU_DoubleU, l.upper);
> + } else {
> + ofs += offsetof(CPU_DoubleU, l.lower);
> + }
> + return ofs;
> }
> }
>
> @@ -12572,7 +12574,7 @@ void arm_cpu_dump_state(CPUState *cs, FILE *f, fprintf_function cpu_fprintf,
> numvfpregs += 16;
> }
> for (i = 0; i < numvfpregs; i++) {
> - uint64_t v = env->vfp.regs[i];
> + uint64_t v = *aa32_vfp_dreg(env, i);
> cpu_fprintf(f, "s%02d=%08x s%02d=%08x d%02d=%016" PRIx64 "\n",
> i * 2, (uint32_t)v,
> i * 2 + 1, (uint32_t)(v >> 32),
--
Alex Bennée
next prev parent reply other threads:[~2018-01-22 11:02 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-19 4:54 [Qemu-devel] [PATCH v2 00/16] target/arm: Prepatory work for SVE Richard Henderson
2018-01-19 4:54 ` [Qemu-devel] [PATCH v2 01/16] target/arm: Mark disas_set_insn_syndrome inline Richard Henderson
2018-01-19 13:54 ` Alex Bennée
2018-01-19 4:54 ` [Qemu-devel] [PATCH v2 02/16] target/arm: Use pointers in crypto helpers Richard Henderson
2018-01-22 10:09 ` Alex Bennée
2018-01-19 4:54 ` [Qemu-devel] [PATCH v2 03/16] target/arm: Use pointers in neon zip/uzp helpers Richard Henderson
2018-01-22 10:44 ` Alex Bennée
2018-01-22 10:44 ` Alex Bennée
2018-01-19 4:54 ` [Qemu-devel] [PATCH v2 04/16] target/arm: Use pointers in neon tbl helper Richard Henderson
2018-01-22 10:52 ` Alex Bennée
2018-01-19 4:54 ` [Qemu-devel] [PATCH v2 05/16] target/arm: Change the type of vfp.regs Richard Henderson
2018-01-22 10:56 ` Alex Bennée
2018-01-22 16:03 ` Richard Henderson
2018-01-19 4:54 ` [Qemu-devel] [PATCH v2 06/16] target/arm: Add aa{32, 64}_vfp_{dreg, qreg} helpers Richard Henderson
2018-01-22 11:02 ` Alex Bennée [this message]
2018-01-19 4:54 ` [Qemu-devel] [PATCH v2 07/16] vmstate: Add VMSTATE_UINT64_SUB_ARRAY Richard Henderson
2018-01-22 11:02 ` Alex Bennée
2018-01-19 4:54 ` [Qemu-devel] [PATCH v2 08/16] target/arm: Expand vector registers for SVE Richard Henderson
2018-01-22 11:08 ` Alex Bennée
2018-01-19 4:54 ` [Qemu-devel] [PATCH v2 09/16] target/arm: Add predicate " Richard Henderson
2018-01-22 12:04 ` Alex Bennée
2018-01-22 16:07 ` Richard Henderson
2018-01-22 18:35 ` Alex Bennée
2018-01-19 4:54 ` [Qemu-devel] [PATCH v2 10/16] target/arm: Add ARM_FEATURE_SVE Richard Henderson
2018-01-22 12:05 ` Alex Bennée
2018-01-19 4:54 ` [Qemu-devel] [PATCH v2 11/16] target/arm: Add SVE to migration state Richard Henderson
2018-01-22 13:40 ` Alex Bennée
2018-01-22 16:11 ` Richard Henderson
2018-01-22 14:16 ` Peter Maydell
2018-01-22 16:10 ` Richard Henderson
2018-01-19 4:54 ` [Qemu-devel] [PATCH v2 12/16] target/arm: Add ZCR_ELx Richard Henderson
2018-01-22 14:38 ` Peter Maydell
2018-01-22 15:00 ` Alex Bennée
2018-01-19 4:54 ` [Qemu-devel] [PATCH v2 13/16] target/arm: Move cpu_get_tb_cpu_state out of line Richard Henderson
2018-01-22 15:07 ` Alex Bennée
2018-01-22 16:18 ` Richard Henderson
2018-01-19 4:54 ` [Qemu-devel] [PATCH v2 14/16] target/arm: Hoist store to flags output in cpu_get_tb_cpu_state Richard Henderson
2018-01-22 15:09 ` Alex Bennée
2018-01-19 4:54 ` [Qemu-devel] [PATCH v2 15/16] target/arm: Simplify fp_exception_el for user-only Richard Henderson
2018-01-22 15:10 ` Alex Bennée
2018-01-19 4:54 ` [Qemu-devel] [PATCH v2 16/16] target/arm: Add SVE state to TB->FLAGS Richard Henderson
2018-01-22 14:40 ` Peter Maydell
2018-01-19 5:29 ` [Qemu-devel] [PATCH v2 00/16] target/arm: Prepatory work for SVE no-reply
2018-01-22 14:12 ` Peter Maydell
2018-01-22 15:12 ` Alex Bennée
2018-01-22 15:12 ` 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=87zi56jgw5.fsf@linaro.org \
--to=alex.bennee@linaro.org \
--cc=peter.maydell@linaro.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.