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