Revision 1000822b target-sh4/op.c

b/target-sh4/op.c
37 37
	clr_t();
38 38
}
39 39

  
40
void OPPROTO op_bf_s(void)
41
{
42
    env->delayed_pc = PARAM1;
43
    if (!(env->sr & SR_T)) {
44
        env->flags |= DELAY_SLOT_TRUE;
45
    }
46
    RETURN();
47
}
48

  
49
void OPPROTO op_bt_s(void)
50
{
51
    env->delayed_pc = PARAM1;
52
    if (env->sr & SR_T) {
53
        env->flags |= DELAY_SLOT_TRUE;
54
    }
55
    RETURN();
56
}
57

  
58
void OPPROTO op_store_flags(void)
59
{
60
    env->flags &= DELAY_SLOT_TRUE;
61
    env->flags |= PARAM1;
62
    RETURN();
63
}
64

  
65
void OPPROTO op_bra(void)
66
{
67
    env->delayed_pc = PARAM1;
68
    RETURN();
69
}
70

  
71
void OPPROTO op_braf_T0(void)
72
{
73
    env->delayed_pc = PARAM1 + T0;
74
    RETURN();
75
}
76

  
77
void OPPROTO op_bsr(void)
78
{
79
    env->pr = PARAM1;
80
    env->delayed_pc = PARAM2;
81
    RETURN();
82
}
83

  
84
void OPPROTO op_bsrf_T0(void)
85
{
86
    env->pr = PARAM1;
87
    env->delayed_pc = PARAM1 + T0;
88
    RETURN();
89
}
90

  
91
void OPPROTO op_jsr_T0(void)
92
{
93
    env->pr = PARAM1;
94
    env->delayed_pc = T0;
95
    RETURN();
96
}
97

  
98
void OPPROTO op_rts(void)
99
{
100
    env->delayed_pc = env->pr;
101
    RETURN();
102
}
103

  
104 40
void OPPROTO op_ldtlb(void)
105 41
{
106 42
    helper_ldtlb();
......
119 55
    RETURN();
120 56
}
121 57

  
122
void OPPROTO op_rte(void)
123
{
124
    env->sr = env->ssr;
125
    env->delayed_pc = env->spc;
126
    RETURN();
127
}
128

  
129 58
void OPPROTO op_addc_T0_T1(void)
130 59
{
131 60
    helper_addc_T0_T1();
......
257 186
    RETURN();
258 187
}
259 188

  
260
void OPPROTO op_jmp_T0(void)
261
{
262
    env->delayed_pc = T0;
263
    RETURN();
264
}
265

  
266 189
void OPPROTO op_ldcl_rMplus_rN_bank(void)
267 190
{
268 191
    env->gregs[PARAM2] = env->gregs[PARAM1];
......
568 491
    RETURN();
569 492
}
570 493

  
571
void OPPROTO op_jT(void)
572
{
573
    if (env->sr & SR_T)
574
	GOTO_LABEL_PARAM(1);
575
    RETURN();
576
}
577

  
578
void OPPROTO op_jdelayed(void)
579
{
580
    if (env->flags & DELAY_SLOT_TRUE) {
581
        env->flags &= ~DELAY_SLOT_TRUE;
582
        GOTO_LABEL_PARAM(1);
583
    }
584
    RETURN();
585
}
586

  
587
void OPPROTO op_movl_delayed_pc_PC(void)
588
{
589
    env->pc = env->delayed_pc;
590
    RETURN();
591
}
592

  
593 494
void OPPROTO op_raise_illegal_instruction(void)
594 495
{
595 496
    env->exception_index = 0x180;

Also available in: Unified diff