translate.c (377dc84e2d58a734f9b9d299f218c4111133addb) translate.c (199c42a6a16ba32b5684e679df949cf29024b0cf)
1/*
2 * S/390 translation
3 *
4 * Copyright (c) 2009 Ulrich Hecht
5 * Copyright (c) 2010 Alexander Graf
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public

--- 4054 unchanged lines hidden (view full) ---

4063}
4064
4065static DisasJumpType op_sske(DisasContext *s, DisasOps *o)
4066{
4067 gen_helper_sske(cpu_env, o->in1, o->in2);
4068 return DISAS_NEXT;
4069}
4070
1/*
2 * S/390 translation
3 *
4 * Copyright (c) 2009 Ulrich Hecht
5 * Copyright (c) 2010 Alexander Graf
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public

--- 4054 unchanged lines hidden (view full) ---

4063}
4064
4065static DisasJumpType op_sske(DisasContext *s, DisasOps *o)
4066{
4067 gen_helper_sske(cpu_env, o->in1, o->in2);
4068 return DISAS_NEXT;
4069}
4070
4071static void gen_check_psw_mask(DisasContext *s)
4072{
4073 TCGv_i64 reserved = tcg_temp_new_i64();
4074 TCGLabel *ok = gen_new_label();
4075
4076 tcg_gen_andi_i64(reserved, psw_mask, PSW_MASK_RESERVED);
4077 tcg_gen_brcondi_i64(TCG_COND_EQ, reserved, 0, ok);
4078 gen_program_exception(s, PGM_SPECIFICATION);
4079 gen_set_label(ok);
4080}
4081
4071static DisasJumpType op_ssm(DisasContext *s, DisasOps *o)
4072{
4073 tcg_gen_deposit_i64(psw_mask, psw_mask, o->in2, 56, 8);
4082static DisasJumpType op_ssm(DisasContext *s, DisasOps *o)
4083{
4084 tcg_gen_deposit_i64(psw_mask, psw_mask, o->in2, 56, 8);
4085
4086 gen_check_psw_mask(s);
4087
4074 /* Exit to main loop to reevaluate s390_cpu_exec_interrupt. */
4075 s->exit_to_mainloop = true;
4076 return DISAS_TOO_MANY;
4077}
4078
4079static DisasJumpType op_stap(DisasContext *s, DisasOps *o)
4080{
4081 tcg_gen_ld32u_i64(o->out, cpu_env, offsetof(CPUS390XState, core_id));

--- 244 unchanged lines hidden (view full) ---

4326
4327 if (s->fields.op == 0xac) {
4328 tcg_gen_andi_i64(psw_mask, psw_mask,
4329 (i2 << 56) | 0x00ffffffffffffffull);
4330 } else {
4331 tcg_gen_ori_i64(psw_mask, psw_mask, i2 << 56);
4332 }
4333
4088 /* Exit to main loop to reevaluate s390_cpu_exec_interrupt. */
4089 s->exit_to_mainloop = true;
4090 return DISAS_TOO_MANY;
4091}
4092
4093static DisasJumpType op_stap(DisasContext *s, DisasOps *o)
4094{
4095 tcg_gen_ld32u_i64(o->out, cpu_env, offsetof(CPUS390XState, core_id));

--- 244 unchanged lines hidden (view full) ---

4340
4341 if (s->fields.op == 0xac) {
4342 tcg_gen_andi_i64(psw_mask, psw_mask,
4343 (i2 << 56) | 0x00ffffffffffffffull);
4344 } else {
4345 tcg_gen_ori_i64(psw_mask, psw_mask, i2 << 56);
4346 }
4347
4348 gen_check_psw_mask(s);
4349
4334 /* Exit to main loop to reevaluate s390_cpu_exec_interrupt. */
4335 s->exit_to_mainloop = true;
4336 return DISAS_TOO_MANY;
4337}
4338
4339static DisasJumpType op_stura(DisasContext *s, DisasOps *o)
4340{
4341 tcg_gen_qemu_st_tl(o->in1, o->in2, MMU_REAL_IDX, s->insn->data);

--- 2154 unchanged lines hidden ---
4350 /* Exit to main loop to reevaluate s390_cpu_exec_interrupt. */
4351 s->exit_to_mainloop = true;
4352 return DISAS_TOO_MANY;
4353}
4354
4355static DisasJumpType op_stura(DisasContext *s, DisasOps *o)
4356{
4357 tcg_gen_qemu_st_tl(o->in1, o->in2, MMU_REAL_IDX, s->insn->data);

--- 2154 unchanged lines hidden ---