s390x/tcg: get rid of runtime_exception()

Let's use s390_program_interrupt() instead.

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
Message-Id: <20171130162744.25442-3-david@redhat.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
This commit is contained in:
David Hildenbrand 2017-11-30 17:27:30 +01:00 committed by Cornelia Huck
parent 8d2f850a5a
commit 7693f77a7f
4 changed files with 8 additions and 26 deletions

View File

@ -44,7 +44,7 @@ static void ieee_exception(CPUS390XState *env, uint32_t dxc, uintptr_t retaddr)
/* Install the DXC code. */ /* Install the DXC code. */
env->fpc = (env->fpc & ~0xff00) | (dxc << 8); env->fpc = (env->fpc & ~0xff00) | (dxc << 8);
/* Trap. */ /* Trap. */
runtime_exception(env, PGM_DATA, retaddr); s390_program_interrupt(env, PGM_DATA, ILEN_AUTO, retaddr);
} }
/* Should be called after any operation that may raise IEEE exceptions. */ /* Should be called after any operation that may raise IEEE exceptions. */

View File

@ -39,7 +39,7 @@ int64_t HELPER(divs32)(CPUS390XState *env, int64_t a, int64_t b64)
int64_t q; int64_t q;
if (b == 0) { if (b == 0) {
runtime_exception(env, PGM_FIXPT_DIVIDE, GETPC()); s390_program_interrupt(env, PGM_FIXPT_DIVIDE, ILEN_AUTO, GETPC());
} }
ret = q = a / b; ret = q = a / b;
@ -47,7 +47,7 @@ int64_t HELPER(divs32)(CPUS390XState *env, int64_t a, int64_t b64)
/* Catch non-representable quotient. */ /* Catch non-representable quotient. */
if (ret != q) { if (ret != q) {
runtime_exception(env, PGM_FIXPT_DIVIDE, GETPC()); s390_program_interrupt(env, PGM_FIXPT_DIVIDE, ILEN_AUTO, GETPC());
} }
return ret; return ret;
@ -60,7 +60,7 @@ uint64_t HELPER(divu32)(CPUS390XState *env, uint64_t a, uint64_t b64)
uint64_t q; uint64_t q;
if (b == 0) { if (b == 0) {
runtime_exception(env, PGM_FIXPT_DIVIDE, GETPC()); s390_program_interrupt(env, PGM_FIXPT_DIVIDE, ILEN_AUTO, GETPC());
} }
ret = q = a / b; ret = q = a / b;
@ -68,7 +68,7 @@ uint64_t HELPER(divu32)(CPUS390XState *env, uint64_t a, uint64_t b64)
/* Catch non-representable quotient. */ /* Catch non-representable quotient. */
if (ret != q) { if (ret != q) {
runtime_exception(env, PGM_FIXPT_DIVIDE, GETPC()); s390_program_interrupt(env, PGM_FIXPT_DIVIDE, ILEN_AUTO, GETPC());
} }
return ret; return ret;
@ -79,7 +79,7 @@ int64_t HELPER(divs64)(CPUS390XState *env, int64_t a, int64_t b)
{ {
/* Catch divide by zero, and non-representable quotient (MIN / -1). */ /* Catch divide by zero, and non-representable quotient (MIN / -1). */
if (b == 0 || (b == -1 && a == (1ll << 63))) { if (b == 0 || (b == -1 && a == (1ll << 63))) {
runtime_exception(env, PGM_FIXPT_DIVIDE, GETPC()); s390_program_interrupt(env, PGM_FIXPT_DIVIDE, ILEN_AUTO, GETPC());
} }
env->retxl = a % b; env->retxl = a % b;
return a / b; return a / b;
@ -92,7 +92,7 @@ uint64_t HELPER(divu64)(CPUS390XState *env, uint64_t ah, uint64_t al,
uint64_t ret; uint64_t ret;
/* Signal divide by zero. */ /* Signal divide by zero. */
if (b == 0) { if (b == 0) {
runtime_exception(env, PGM_FIXPT_DIVIDE, GETPC()); s390_program_interrupt(env, PGM_FIXPT_DIVIDE, ILEN_AUTO, GETPC());
} }
if (ah == 0) { if (ah == 0) {
/* 64 -> 64/64 case */ /* 64 -> 64/64 case */
@ -106,7 +106,7 @@ uint64_t HELPER(divu64)(CPUS390XState *env, uint64_t ah, uint64_t al,
env->retxl = a % b; env->retxl = a % b;
ret = q; ret = q;
if (ret != q) { if (ret != q) {
runtime_exception(env, PGM_FIXPT_DIVIDE, GETPC()); s390_program_interrupt(env, PGM_FIXPT_DIVIDE, ILEN_AUTO, GETPC());
} }
#else #else
S390CPU *cpu = s390_env_get_cpu(env); S390CPU *cpu = s390_env_get_cpu(env);

View File

@ -408,8 +408,6 @@ int mmu_translate_real(CPUS390XState *env, target_ulong raddr, int rw,
/* misc_helper.c */ /* misc_helper.c */
void QEMU_NORETURN runtime_exception(CPUS390XState *env, int excp,
uintptr_t retaddr);
int handle_diag_288(CPUS390XState *env, uint64_t r1, uint64_t r3); int handle_diag_288(CPUS390XState *env, uint64_t r1, uint64_t r3);
void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3); void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3);

View File

@ -45,22 +45,6 @@
#define HELPER_LOG(x...) #define HELPER_LOG(x...)
#endif #endif
/* Raise an exception dynamically from a helper function. */
void QEMU_NORETURN runtime_exception(CPUS390XState *env, int excp,
uintptr_t retaddr)
{
CPUState *cs = CPU(s390_env_get_cpu(env));
cs->exception_index = EXCP_PGM;
env->int_pgm_code = excp;
env->int_pgm_ilen = ILEN_AUTO;
/* Use the (ultimate) callers address to find the insn that trapped. */
cpu_restore_state(cs, retaddr);
cpu_loop_exit(cs);
}
/* Raise an exception statically from a TB. */ /* Raise an exception statically from a TB. */
void HELPER(exception)(CPUS390XState *env, uint32_t excp) void HELPER(exception)(CPUS390XState *env, uint32_t excp)
{ {