From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36317) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aZmwX-0004PL-RS for qemu-devel@nongnu.org; Sat, 27 Feb 2016 17:02:30 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aZmwT-0003R6-07 for qemu-devel@nongnu.org; Sat, 27 Feb 2016 17:02:29 -0500 MIME-Version: 1.0 In-Reply-To: References: <2d20fa6a88faf2b99719ac90c9205e280e632634.1453100525.git.crosthwaite.peter@gmail.com> Date: Sat, 27 Feb 2016 14:02:17 -0800 Message-ID: From: Peter Crosthwaite Content-Type: text/plain; charset=UTF-8 Subject: Re: [Qemu-devel] [PATCH v1 08/17] target-arm: cpu: Move cpu_is_big_endian to header List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell Cc: QEMU Developers , Alistair Francis , sridhar kulkarni , qemu-arm , Paolo Bonzini , =?UTF-8?Q?Piotr_Kr=C3=B3l?= On Tue, Jan 19, 2016 at 8:11 AM, Peter Maydell wrote: > On 18 January 2016 at 07:12, Peter Crosthwaite > wrote: >> From: Peter Crosthwaite >> >> There is a CPU data endianness test that is used to drive the >> virtio_big_endian test. >> >> Move this up to the header so it can be more generally used for endian >> tests. The KVM specific cpu_syncronize_state call is left behind in the >> virtio specific function. >> >> Signed-off-by: Peter Crosthwaite >> --- >> >> target-arm/cpu.c | 19 +++---------------- >> target-arm/cpu.h | 19 +++++++++++++++++++ >> 2 files changed, 22 insertions(+), 16 deletions(-) >> >> diff --git a/target-arm/cpu.c b/target-arm/cpu.c >> index 35a1f12..d3b73bf 100644 >> --- a/target-arm/cpu.c >> +++ b/target-arm/cpu.c >> @@ -368,26 +368,13 @@ static void arm_cpu_kvm_set_irq(void *opaque, int irq, int level) >> #endif >> } >> >> -static bool arm_cpu_is_big_endian(CPUState *cs) >> +static bool arm_cpu_virtio_is_big_endian(CPUState *cs) >> { >> ARMCPU *cpu = ARM_CPU(cs); >> CPUARMState *env = &cpu->env; >> - int cur_el; >> >> cpu_synchronize_state(cs); >> - >> - /* In 32bit guest endianness is determined by looking at CPSR's E bit */ >> - if (!is_a64(env)) { >> - return (env->uncached_cpsr & CPSR_E) ? 1 : 0; >> - } >> - >> - cur_el = arm_current_el(env); >> - >> - if (cur_el == 0) { >> - return (env->cp15.sctlr_el[1] & SCTLR_E0E) != 0; >> - } >> - >> - return (env->cp15.sctlr_el[cur_el] & SCTLR_EE) != 0; >> + return arm_cpu_is_big_endian(env); >> } >> >> #endif >> @@ -1420,7 +1407,7 @@ static void arm_cpu_class_init(ObjectClass *oc, void *data) >> cc->do_unaligned_access = arm_cpu_do_unaligned_access; >> cc->get_phys_page_debug = arm_cpu_get_phys_page_debug; >> cc->vmsd = &vmstate_arm_cpu; >> - cc->virtio_is_big_endian = arm_cpu_is_big_endian; >> + cc->virtio_is_big_endian = arm_cpu_virtio_is_big_endian; >> #endif >> cc->gdb_num_core_regs = 26; >> cc->gdb_core_xml_file = "arm-core.xml"; >> diff --git a/target-arm/cpu.h b/target-arm/cpu.h >> index f83070a..54675c7 100644 >> --- a/target-arm/cpu.h >> +++ b/target-arm/cpu.h >> @@ -1795,6 +1795,25 @@ static inline bool arm_singlestep_active(CPUARMState *env) >> && arm_generate_debug_exceptions(env); >> } >> >> +/* Return true if the processor is in big-endian mode. */ >> +static bool arm_cpu_is_big_endian(CPUARMState *env) >> +{ > > No problems code-wise, but can we call the function > arm_cpu_data_is_big_endian() or something? Fixed. Regards, Peter > This is returning the > endianness to use for data accesses; there isn't an overall > "big-endian mode" that affects everything except for the > obsolete BE32. > > thanks > -- PMM