dis_res->jk_StopHere = Ijk_Call;
}
-/* Function call with known target. */
-static void
-call_function_and_chase(Addr64 callee_address)
-{
- put_IA(mkaddr_expr(callee_address));
-
- dis_res->whatNext = Dis_StopHere;
- dis_res->jk_StopHere = Ijk_Call;
-}
-
/* Function return sequence */
static void
return_from_function(IRExpr *return_address)
dis_res->jk_StopHere = Ijk_Boring;
}
-
-/* An unconditional branch to a known target. */
-// QQQQ fixme this is now the same as always_goto
-static void
-always_goto_and_chase(Addr64 target)
-{
- put_IA(mkaddr_expr(target));
-
- dis_res->whatNext = Dis_StopHere;
- dis_res->jk_StopHere = Ijk_Boring;
-}
-
/* A system call */
static void
system_call(IRExpr *sysno)
s390_irgen_BRAS(UChar r1, UShort i2)
{
put_gpr_dw0(r1, mkU64(guest_IA_next_instr));
- call_function_and_chase(addr_relative(i2));
+ call_function(mkaddr_expr(addr_relative(i2)));
return "bras";
}
s390_irgen_BRASL(UChar r1, UInt i2)
{
put_gpr_dw0(r1, mkU64(guest_IA_next_instr));
- call_function_and_chase(addr_rel_long(i2));
+ call_function(mkaddr_expr(addr_rel_long(i2)));
return "brasl";
}
if (m1 == 0) {
} else {
if (m1 == 15) {
- always_goto_and_chase(addr_relative(i2));
+ always_goto(mkaddr_expr(addr_relative(i2)));
} else {
assign(cond, s390_call_calculate_cond(m1));
if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)),
if (m1 == 0) {
} else {
if (m1 == 15) {
- always_goto_and_chase(addr_rel_long(i2));
+ always_goto(mkaddr_expr(addr_rel_long(i2)));
} else {
assign(cond, s390_call_calculate_cond(m1));
if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)),
if (m3 == 0) {
} else {
if (m3 == 14) {
- always_goto_and_chase(addr_relative(i4));
+ always_goto(mkaddr_expr(addr_relative(i4)));
} else {
assign(op1, get_gpr_w1(r1));
assign(op2, get_gpr_w1(r2));
if (m3 == 0) {
} else {
if (m3 == 14) {
- always_goto_and_chase(addr_relative(i4));
+ always_goto(mkaddr_expr(addr_relative(i4)));
} else {
assign(op1, get_gpr_dw0(r1));
assign(op2, get_gpr_dw0(r2));
if (m3 == 0) {
} else {
if (m3 == 14) {
- always_goto_and_chase(addr_relative(i4));
+ always_goto(mkaddr_expr(addr_relative(i4)));
} else {
assign(op1, get_gpr_w1(r1));
op2 = (Int)(Char)i2;
if (m3 == 0) {
} else {
if (m3 == 14) {
- always_goto_and_chase(addr_relative(i4));
+ always_goto(mkaddr_expr(addr_relative(i4)));
} else {
assign(op1, get_gpr_dw0(r1));
op2 = (Long)(Char)i2;
if (m3 == 0) {
} else {
if (m3 == 14) {
- always_goto_and_chase(addr_relative(i4));
+ always_goto(mkaddr_expr(addr_relative(i4)));
} else {
assign(op1, get_gpr_w1(r1));
assign(op2, get_gpr_w1(r2));
if (m3 == 0) {
} else {
if (m3 == 14) {
- always_goto_and_chase(addr_relative(i4));
+ always_goto(mkaddr_expr(addr_relative(i4)));
} else {
assign(op1, get_gpr_dw0(r1));
assign(op2, get_gpr_dw0(r2));
if (m3 == 0) {
} else {
if (m3 == 14) {
- always_goto_and_chase(addr_relative(i4));
+ always_goto(mkaddr_expr(addr_relative(i4)));
} else {
assign(op1, get_gpr_w1(r1));
op2 = (UInt)i2;
if (m3 == 0) {
} else {
if (m3 == 14) {
- always_goto_and_chase(addr_relative(i4));
+ always_goto(mkaddr_expr(addr_relative(i4)));
} else {
assign(op1, get_gpr_dw0(r1));
op2 = (ULong)i2;
dres.jk_StopHere = Ijk_INVALID;
dres.hint = Dis_HintNone;
- /* fixs390: consider chasing of conditional jumps */
-
/* Normal and special instruction handling starts here. */
if (s390_decode_and_irgen(insn, insn_length, &dres) == 0) {
/* All decode failures end up here. The decoder has already issued an