From 441afe17e6ba0e68e603667d14b1913ab1c7cf63 Mon Sep 17 00:00:00 2001 From: lazymio Date: Mon, 10 Jan 2022 15:34:04 +0100 Subject: [PATCH] Add psw.mask register --- include/unicorn/s390x.h | 1 + qemu/target/s390x/unicorn.c | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/include/unicorn/s390x.h b/include/unicorn/s390x.h index 68bb0210..02e53ae0 100644 --- a/include/unicorn/s390x.h +++ b/include/unicorn/s390x.h @@ -128,6 +128,7 @@ typedef enum uc_s390x_reg { UC_S390X_REG_A15, UC_S390X_REG_PC, // PC register + UC_S390X_REG_PSWM, UC_S390X_REG_ENDING, // <-- mark the end of the list or registers diff --git a/qemu/target/s390x/unicorn.c b/qemu/target/s390x/unicorn.c index b53a1e07..81d64e0c 100644 --- a/qemu/target/s390x/unicorn.c +++ b/qemu/target/s390x/unicorn.c @@ -6,6 +6,7 @@ #include "unicorn_common.h" #include "uc_priv.h" #include "unicorn.h" +#include "internal.h" S390CPU *cpu_s390_init(struct uc_struct *uc, const char *cpu_model); @@ -65,6 +66,9 @@ static void reg_read(CPUS390XState *env, unsigned int regid, void *value) case UC_S390X_REG_PC: *(uint64_t *)value = env->psw.addr; break; + case UC_S390X_REG_PSWM: + *(uint64_t *)value = get_psw_mask(env); + break; } } @@ -86,6 +90,10 @@ static void reg_write(CPUS390XState *env, unsigned int regid, const void *value) case UC_S390X_REG_PC: env->psw.addr = *(uint64_t *)value; break; + case UC_S390X_REG_PSWM: + env->psw.mask = *(uint64_t *)value; + env->cc_op = (env->psw.mask >> 44) & 3; + break; } }