Revision 69d6275b target-sh4/op.c

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

  
40
void OPPROTO op_cmp_str_T0_T1(void)
41
{
42
    cond_t((T0 & 0x000000ff) == (T1 & 0x000000ff) ||
43
	   (T0 & 0x0000ff00) == (T1 & 0x0000ff00) ||
44
	   (T0 & 0x00ff0000) == (T1 & 0x00ff0000) ||
45
	   (T0 & 0xff000000) == (T1 & 0xff000000));
46
    RETURN();
47
}
48

  
49
void OPPROTO op_div0s_T0_T1(void)
50
{
51
    if (T1 & 0x80000000)
52
	env->sr |= SR_Q;
53
    else
54
	env->sr &= ~SR_Q;
55
    if (T0 & 0x80000000)
56
	env->sr |= SR_M;
57
    else
58
	env->sr &= ~SR_M;
59
    cond_t((T1 ^ T0) & 0x80000000);
60
    RETURN();
61
}
62

  
63
void OPPROTO op_div1_T0_T1(void)
64
{
65
    helper_div1_T0_T1();
66
    RETURN();
67
}
68

  
69
void OPPROTO op_shad_T0_T1(void)
70
{
71
    if ((T0 & 0x80000000) == 0)
72
	T1 <<= (T0 & 0x1f);
73
    else if ((T0 & 0x1f) == 0)
74
	T1 = (T1 & 0x80000000)? 0xffffffff : 0;
75
    else
76
	T1 = ((int32_t) T1) >> ((~T0 & 0x1f) + 1);
77
    RETURN();
78
}
79

  
80
void OPPROTO op_shld_T0_T1(void)
81
{
82
    if ((T0 & 0x80000000) == 0)
83
	T1 <<= (T0 & 0x1f);
84
    else if ((T0 & 0x1f) == 0)
85
	T1 = 0;
86
    else
87
	T1 = ((uint32_t) T1) >> ((~T0 & 0x1f) + 1);
88
    RETURN();
89
}
90

  
91
void OPPROTO op_rotcl_Rn(void)
92
{
93
    helper_rotcl(&env->gregs[PARAM1]);
94
    RETURN();
95
}
96

  
97
void OPPROTO op_rotcr_Rn(void)
98
{
99
    helper_rotcr(&env->gregs[PARAM1]);
100
    RETURN();
101
}
102

  
103
void OPPROTO op_rotl_Rn(void) 
104
{
105
    cond_t(env->gregs[PARAM1] & 0x80000000);
106
    env->gregs[PARAM1] = (env->gregs[PARAM1] << 1) | (env->sr & SR_T);
107
    RETURN();
108
}
109

  
110
void OPPROTO op_rotr_Rn(void)
111
{
112
    cond_t(env->gregs[PARAM1] & 1);
113
    env->gregs[PARAM1] = (env->gregs[PARAM1] >> 1) |
114
	((env->sr & SR_T) ? 0x80000000 : 0);
115
    RETURN();
116
}
117

  
118 40
void OPPROTO op_fmov_frN_FT0(void)
119 41
{
120 42
    FT0 = env->fregs[PARAM1];

Also available in: Unified diff