diff options
author | Richard Henderson <rth@twiddle.net> | 2013-09-20 11:33:41 -0700 |
---|---|---|
committer | Richard Henderson <rth@twiddle.net> | 2015-02-03 12:06:37 -0800 |
commit | 7f745b31b39cb9be8b3c3dfaf3173390ae07353e (patch) | |
tree | 2143e9ff944720d1e9ee00807412ce7ab16d9a4a | |
parent | e30a9d3fea58c356000ce328421fe65e03143bb1 (diff) |
target-s390: Fix STIDP
The implementation had been incomplete, as we did not store the
machine type. Note that the machine_type member is still unset
during initialization, so this has no effect yet.
Signed-off-by: Richard Henderson <rth@twiddle.net>
-rw-r--r-- | target-s390x/cpu.h | 4 | ||||
-rw-r--r-- | target-s390x/translate.c | 6 |
2 files changed, 9 insertions, 1 deletions
diff --git a/target-s390x/cpu.h b/target-s390x/cpu.h index c123b6f023..2e2554c4b3 100644 --- a/target-s390x/cpu.h +++ b/target-s390x/cpu.h @@ -133,7 +133,9 @@ typedef struct CPUS390XState { /* reset does memset(0) up to here */ - int cpu_num; + uint32_t cpu_num; + uint32_t machine_type; + uint8_t *storage_keys; uint64_t tod_offset; diff --git a/target-s390x/translate.c b/target-s390x/translate.c index 97137c99cf..0c5191737d 100644 --- a/target-s390x/translate.c +++ b/target-s390x/translate.c @@ -3262,8 +3262,14 @@ static ExitStatus op_stctl(DisasContext *s, DisasOps *o) static ExitStatus op_stidp(DisasContext *s, DisasOps *o) { + TCGv_i64 t1 = tcg_temp_new_i64(); + check_privileged(s); tcg_gen_ld32u_i64(o->out, cpu_env, offsetof(CPUS390XState, cpu_num)); + tcg_gen_ld32u_i64(t1, cpu_env, offsetof(CPUS390XState, machine_type)); + tcg_gen_deposit_i64(o->out, o->out, t1, 32, 32); + tcg_temp_free_i64(t1); + return NO_EXIT; } |