[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 12/16] ARM: linux-user: Expose iWMMXT registers to s
From: |
Riku |
Subject: |
[Qemu-devel] [PATCH 12/16] ARM: linux-user: Expose iWMMXT registers to signal handlers |
Date: |
Fri, 3 Dec 2010 15:36:39 +0200 |
From: Peter Maydell <address@hidden>
Signed-off-by: Peter Maydell <address@hidden>
Signed-off-by: Riku Voipio <address@hidden>
---
linux-user/signal.c | 37 +++++++++++++++++++++++++++++++++++++
1 files changed, 37 insertions(+), 0 deletions(-)
diff --git a/linux-user/signal.c b/linux-user/signal.c
index 63d893b..b4b610b 100644
--- a/linux-user/signal.c
+++ b/linux-user/signal.c
@@ -1130,7 +1130,21 @@ struct target_vfp_sigframe {
struct target_user_vfp_exc ufp_exc;
} __attribute__((__aligned__(8)));
+struct target_iwmmxt_sigframe {
+ abi_ulong magic;
+ abi_ulong size;
+ uint64_t regs[16];
+ /* Note that not all the coprocessor control registers are stored here */
+ uint32_t wcssf;
+ uint32_t wcasf;
+ uint32_t wcgr0;
+ uint32_t wcgr1;
+ uint32_t wcgr2;
+ uint32_t wcgr3;
+} __attribute__((__aligned__(8)));
+
#define TARGET_VFP_MAGIC 0x56465001
+#define TARGET_IWMMXT_MAGIC 0x12ef842a
struct sigframe_v1
{
@@ -1292,6 +1306,25 @@ static abi_ulong *setup_sigframe_v2_vfp(abi_ulong
*regspace, CPUState *env)
return (abi_ulong*)(vfpframe+1);
}
+static abi_ulong *setup_sigframe_v2_iwmmxt(abi_ulong *regspace, CPUState *env)
+{
+ int i;
+ struct target_iwmmxt_sigframe *iwmmxtframe;
+ iwmmxtframe = (struct target_iwmmxt_sigframe *)regspace;
+ __put_user(TARGET_IWMMXT_MAGIC, &iwmmxtframe->magic);
+ __put_user(sizeof(*iwmmxtframe), &iwmmxtframe->size);
+ for (i = 0; i < 16; i++) {
+ __put_user(env->iwmmxt.regs[i], &iwmmxtframe->regs[i]);
+ }
+ __put_user(env->vfp.xregs[ARM_IWMMXT_wCSSF], &iwmmxtframe->wcssf);
+ __put_user(env->vfp.xregs[ARM_IWMMXT_wCASF], &iwmmxtframe->wcssf);
+ __put_user(env->vfp.xregs[ARM_IWMMXT_wCGR0], &iwmmxtframe->wcgr0);
+ __put_user(env->vfp.xregs[ARM_IWMMXT_wCGR1], &iwmmxtframe->wcgr1);
+ __put_user(env->vfp.xregs[ARM_IWMMXT_wCGR2], &iwmmxtframe->wcgr2);
+ __put_user(env->vfp.xregs[ARM_IWMMXT_wCGR3], &iwmmxtframe->wcgr3);
+ return (abi_ulong*)(iwmmxtframe+1);
+}
+
static void setup_sigframe_v2(struct target_ucontext_v2 *uc,
target_sigset_t *set, CPUState *env)
{
@@ -1314,6 +1347,10 @@ static void setup_sigframe_v2(struct target_ucontext_v2
*uc,
if (arm_feature(env, ARM_FEATURE_VFP)) {
regspace = setup_sigframe_v2_vfp(regspace, env);
}
+ if (arm_feature(env, ARM_FEATURE_IWMMXT)) {
+ regspace = setup_sigframe_v2_iwmmxt(regspace, env);
+ }
+
/* Write terminating magic word */
__put_user(0, regspace);
--
1.6.5
- [Qemu-devel] [PATCH 02/16] linux-user: mmap_reserve() not controlled by RESERVED_VA, (continued)
- [Qemu-devel] [PATCH 02/16] linux-user: mmap_reserve() not controlled by RESERVED_VA, Riku, 2010/12/03
- [Qemu-devel] [PATCH 07/16] target-sparc: remove unused functions cpu_lock(), cpu_unlock(), Riku, 2010/12/03
- [Qemu-devel] [PATCH 08/16] ARM: linux-user: Correct size of padding in target_ucontext_v2, Riku, 2010/12/03
- [Qemu-devel] [PATCH 13/16] ARM: linux-user: Restore iWMMXT state from ucontext on sigreturn, Riku, 2010/12/03
- [Qemu-devel] [PATCH 05/16] linux-user: Translate getsockopt level option, Riku, 2010/12/03
- [Qemu-devel] [PATCH 04/16] linux-user: remove unnecessary local from __get_user(), __put_user(), Riku, 2010/12/03
- [Qemu-devel] [PATCH 14/16] linux-user: fix compiler error on nptl, Riku, 2010/12/03
- [Qemu-devel] [PATCH 03/16] linux-user: fix memory leaks with NPTL emulation, Riku, 2010/12/03
- [Qemu-devel] [PATCH 10/16] ARM: linux-user: Expose VFP registers to signal handlers, Riku, 2010/12/03
- [Qemu-devel] [PATCH 11/16] ARM: linux-user: Restore VFP state from ucontext on sigreturn, Riku, 2010/12/03
- [Qemu-devel] [PATCH 12/16] ARM: linux-user: Expose iWMMXT registers to signal handlers,
Riku <=
- [Qemu-devel] [PATCH 06/16] ARM: enable XScale/iWMMXT in linux-user mode, Riku, 2010/12/03
- [Qemu-devel] [PATCH 15/16] update binfmt conf, Riku, 2010/12/03
- [Qemu-devel] [PATCH 01/16] [PATCH] target-arm: remove unused functions cpu_lock(), cpu_unlock(), Riku, 2010/12/03
- [Qemu-devel] [PATCH 16/16] linux-user: fix mips and ppc to use UID16, Riku, 2010/12/03
- [Qemu-devel] [PATCH 09/16] ARM: Expose vfp_get_fpscr() and vfp_set_fpscr() to C code, Riku, 2010/12/03
- Re: [Qemu-devel] [PATCH 00/16] linux-user updates, Peter Maydell, 2010/12/03
- Re: [Qemu-devel] [PATCH 00/16] linux-user updates, Edgar E. Iglesias, 2010/12/03