diff options
author | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2005-07-24 15:11:38 +0000 |
---|---|---|
committer | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2005-07-24 15:11:38 +0000 |
commit | 90cb94935228cc064f99fe98e70a8ea5deefb689 (patch) | |
tree | 5597bfabfeb95f6e6c4587369c070ed565f815c7 | |
parent | db6e6ed77ec38506ffe842c8d419aebbb074f967 (diff) |
s390 bits
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1530 c046a42c-6fe2-441c-8c8c-71466251a162
-rw-r--r-- | cpu-exec.c | 17 | ||||
-rw-r--r-- | dyngen-exec.h | 1 | ||||
-rw-r--r-- | vl.c | 9 |
3 files changed, 27 insertions, 0 deletions
diff --git a/cpu-exec.c b/cpu-exec.c index c7cd607887..e7f4322ef4 100644 --- a/cpu-exec.c +++ b/cpu-exec.c @@ -1280,6 +1280,23 @@ int cpu_signal_handler(int host_signum, struct siginfo *info, void *puc) &uc->uc_sigmask, puc); } +#elif defined(__s390__) + +int cpu_signal_handler(int host_signum, struct siginfo *info, + void *puc) +{ + struct ucontext *uc = puc; + unsigned long pc; + int is_write; + + pc = uc->uc_mcontext.psw.addr; + /* XXX: compute is_write */ + is_write = 0; + return handle_cpu_signal(pc, (unsigned long)info->si_addr, + is_write, + &uc->uc_sigmask, puc); +} + #else #error host CPU specific signal handler needed diff --git a/dyngen-exec.h b/dyngen-exec.h index 2dc948bf4a..946347d6c7 100644 --- a/dyngen-exec.h +++ b/dyngen-exec.h @@ -218,6 +218,7 @@ extern int __op_jmp0, __op_jmp1, __op_jmp2, __op_jmp3; #endif #ifdef __s390__ #define EXIT_TB() asm volatile ("br %r14") +#define GOTO_LABEL_PARAM(n) asm volatile ("b " ASM_NAME(__op_gen_label) #n) #endif #ifdef __alpha__ #define EXIT_TB() asm volatile ("ret") @@ -532,6 +532,15 @@ int64_t cpu_get_real_ticks(void) return val; } +#elif defined(__s390__) + +int64_t cpu_get_real_ticks(void) +{ + int64_t val; + asm volatile("stck 0(%1)" : "=m" (val) : "a" (&val) : "cc"); + return val; +} + #else #error unsupported CPU #endif |