[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 07/18] linux-user: arm: handle CPSR.E correct
From: |
Peter Maydell |
Subject: |
Re: [Qemu-devel] [PATCH v2 07/18] linux-user: arm: handle CPSR.E correctly in strex emulation |
Date: |
Thu, 3 Mar 2016 15:09:01 +0000 |
On 2 March 2016 at 06:56, Peter Crosthwaite <address@hidden> wrote:
> From: Paolo Bonzini <address@hidden>
> @@ -610,11 +642,11 @@ static int do_strex(CPUARMState *env)
> segv = get_user_u8(val, addr);
> break;
> case 1:
> - segv = get_user_u16(val, addr);
> + segv = get_user_data_u16(val, addr, env);
> break;
> case 2:
> case 3:
> - segv = get_user_u32(val, addr);
> + segv = get_user_data_u32(val, addr, env);
> break;
> default:
> abort();
> @@ -625,12 +657,16 @@ static int do_strex(CPUARMState *env)
> }
> if (size == 3) {
> uint32_t valhi;
> - segv = get_user_u32(valhi, addr + 4);
> + segv = get_user_data_u32(valhi, addr + 4, env);
> if (segv) {
> env->exception.vaddress = addr + 4;
> goto done;
> }
> - val = deposit64(val, 32, 32, valhi);
> + if (arm_cpu_bswap_data(env)) {
> + val = deposit64((uint64_t)valhi, 32, 32, val);
> + } else {
> + val = deposit64(val, 32, 32, valhi);
> + }
> }
> if (val != env->exclusive_val) {
> goto fail;
> @@ -642,11 +678,11 @@ static int do_strex(CPUARMState *env)
> segv = put_user_u8(val, addr);
> break;
> case 1:
> - segv = put_user_u16(val, addr);
> + segv = put_user_data_u16(val, addr, env);
> break;
> case 2:
> case 3:
> - segv = put_user_u32(val, addr);
> + segv = put_user_data_u32(val, addr, env);
> break;
> }
> if (segv) {
> @@ -655,7 +691,7 @@ static int do_strex(CPUARMState *env)
> }
> if (size == 3) {
> val = env->regs[(env->exclusive_info >> 12) & 0xf];
> - segv = put_user_u32(val, addr + 4);
> + segv = put_user_data_u32(val, addr + 4, env);
> if (segv) {
> env->exception.vaddress = addr + 4;
> goto done;
This confused me for a bit because it doesn't swap the two
halves of a 64-bit word on the 'store new value' codepath,
but it is correct -- for STREXD for AArch32 the first word
in memory is Rt and the second is Rt2, regardless of
endianness.
Reviewed-by: Peter Maydell <address@hidden>
thanks
-- PMM
- [Qemu-devel] [PATCH v2 00/18] ARM big-endian and setend support, Peter Crosthwaite, 2016/03/02
- [Qemu-devel] [PATCH v2 01/18] linux-user: arm: fix coding style for some linux-user signal functions, Peter Crosthwaite, 2016/03/02
- [Qemu-devel] [PATCH v2 02/18] linux-user: arm: pass env to get_user_code_*, Peter Crosthwaite, 2016/03/02
- [Qemu-devel] [PATCH v2 04/18] target-arm: cpu: Move cpu_is_big_endian to header, Peter Crosthwaite, 2016/03/02
- [Qemu-devel] [PATCH v2 03/18] target-arm: implement SCTLR.B, drop bswap_code, Peter Crosthwaite, 2016/03/02
- [Qemu-devel] [PATCH v2 05/18] arm: cpu: handle BE32 user-mode as BE, Peter Crosthwaite, 2016/03/02
- [Qemu-devel] [PATCH v2 06/18] linux-user: arm: set CPSR.E/SCTLR.E0E correctly for BE mode, Peter Crosthwaite, 2016/03/02
- [Qemu-devel] [PATCH v2 07/18] linux-user: arm: handle CPSR.E correctly in strex emulation, Peter Crosthwaite, 2016/03/02
- Re: [Qemu-devel] [PATCH v2 07/18] linux-user: arm: handle CPSR.E correctly in strex emulation,
Peter Maydell <=
- [Qemu-devel] [PATCH v2 08/18] target-arm: implement SCTLR.EE, Peter Crosthwaite, 2016/03/02
- [Qemu-devel] [PATCH v2 10/18] target-arm: introduce disas flag for endianness, Peter Crosthwaite, 2016/03/02
- [Qemu-devel] [PATCH v2 09/18] target-arm: pass DisasContext to gen_aa32_ld*/st*, Peter Crosthwaite, 2016/03/02
- [Qemu-devel] [PATCH v2 11/18] target-arm: a64: Add endianness support, Peter Crosthwaite, 2016/03/02
- [Qemu-devel] [PATCH v2 12/18] target-arm: introduce tbflag for endianness, Peter Crosthwaite, 2016/03/02
- [Qemu-devel] [PATCH v2 13/18] target-arm: implement setend, Peter Crosthwaite, 2016/03/02
- [Qemu-devel] [PATCH v2 15/18] loader: add API to load elf header, Peter Crosthwaite, 2016/03/02
- [Qemu-devel] [PATCH v2 16/18] loader: load_elf(): Add doc comment, Peter Crosthwaite, 2016/03/02
- [Qemu-devel] [PATCH v2 17/18] loader: Add data swap option to load-elf, Peter Crosthwaite, 2016/03/02