Re: [Qemu-devel] [RCF PATCH 5/8] arm/nwfps: remove use of cpsr_write() and set flags directly

2014-06-04 Thread Alex Bennée

Peter Maydell writes:

 On 2 June 2014 17:21, Alex Bennée alex.ben...@linaro.org wrote:
 This is a pre-cursor to removing the cpsr_write function.

 diff --git a/linux-user/arm/nwfpe/fpa11.h b/linux-user/arm/nwfpe/fpa11.h
 index bb9ac65..0dbdf75 100644
 --- a/linux-user/arm/nwfpe/fpa11.h
 +++ b/linux-user/arm/nwfpe/fpa11.h
 @@ -108,7 +108,10 @@ static inline void writeRegister(unsigned int x, 
 unsigned int y)

  static inline void writeConditionCodes(unsigned int x)
  {
 -cpsr_write(user_registers,x,CPSR_NZCV);
 +user_registers-ZF = (~val)  CPSR_Z;
 +user_registers-NF = val;
 +user_registers-CF = (val  29)  1;
 +user_registers-VF = (val  3)  0x8000;
  }

  #define ARM_REG_PC 15

 This seems like it's clearly making things worse.
 We definitely don't want to have to have code in
 linux-user be aware of the interesting definitions
 of our ZF/NF/CF/VF fields.
snip

You are right. I could make restore_state_from_spsr use a mask like the
old cpsr_write did or as the flags are a special case have a flag only
setting function for these cases.

-- 
Alex Bennée



Re: [Qemu-devel] [RCF PATCH 5/8] arm/nwfps: remove use of cpsr_write() and set flags directly

2014-06-04 Thread Peter Maydell
On 4 June 2014 12:11, Alex Bennée alex.ben...@linaro.org wrote:
 Peter Maydell writes:
 This seems like it's clearly making things worse.
 We definitely don't want to have to have code in
 linux-user be aware of the interesting definitions
 of our ZF/NF/CF/VF fields.
 snip

 You are right. I could make restore_state_from_spsr use a mask like the
 old cpsr_write did

But restore_state_from_spsr is the just load state, no side effects
function which machine.c is using, isn't it? I think part of the
problem here is that you're trying to have one function do
both the read/write like the CPU would with all the modeswitch
stuff that entails and also side effect free access for state
save/restore.

thanks
-- PMM



Re: [Qemu-devel] [RCF PATCH 5/8] arm/nwfps: remove use of cpsr_write() and set flags directly

2014-06-03 Thread Peter Maydell
On 2 June 2014 17:21, Alex Bennée alex.ben...@linaro.org wrote:
 This is a pre-cursor to removing the cpsr_write function.

 diff --git a/linux-user/arm/nwfpe/fpa11.h b/linux-user/arm/nwfpe/fpa11.h
 index bb9ac65..0dbdf75 100644
 --- a/linux-user/arm/nwfpe/fpa11.h
 +++ b/linux-user/arm/nwfpe/fpa11.h
 @@ -108,7 +108,10 @@ static inline void writeRegister(unsigned int x, 
 unsigned int y)

  static inline void writeConditionCodes(unsigned int x)
  {
 -cpsr_write(user_registers,x,CPSR_NZCV);
 +user_registers-ZF = (~val)  CPSR_Z;
 +user_registers-NF = val;
 +user_registers-CF = (val  29)  1;
 +user_registers-VF = (val  3)  0x8000;
  }

  #define ARM_REG_PC 15

This seems like it's clearly making things worse.
We definitely don't want to have to have code in
linux-user be aware of the interesting definitions
of our ZF/NF/CF/VF fields.

thanks
-- PMM