Revision c047da1a
b/target-sh4/op.c | ||
---|---|---|
115 | 115 |
RETURN(); |
116 | 116 |
} |
117 | 117 |
|
118 |
void OPPROTO op_shal_Rn(void) |
|
119 |
{ |
|
120 |
cond_t(env->gregs[PARAM1] & 0x80000000); |
|
121 |
env->gregs[PARAM1] <<= 1; |
|
122 |
RETURN(); |
|
123 |
} |
|
124 |
|
|
125 |
void OPPROTO op_shar_Rn(void) |
|
126 |
{ |
|
127 |
cond_t(env->gregs[PARAM1] & 1); |
|
128 |
*(int32_t *)&env->gregs[PARAM1] >>= 1; |
|
129 |
RETURN(); |
|
130 |
} |
|
131 |
|
|
132 |
void OPPROTO op_shlr_Rn(void) |
|
133 |
{ |
|
134 |
cond_t(env->gregs[PARAM1] & 1); |
|
135 |
env->gregs[PARAM1] >>= 1; |
|
136 |
RETURN(); |
|
137 |
} |
|
138 |
|
|
139 | 118 |
void OPPROTO op_fmov_frN_FT0(void) |
140 | 119 |
{ |
141 | 120 |
FT0 = env->fregs[PARAM1]; |
b/target-sh4/translate.c | ||
---|---|---|
1226 | 1226 |
return; |
1227 | 1227 |
case 0x4000: /* shll Rn */ |
1228 | 1228 |
case 0x4020: /* shal Rn */ |
1229 |
gen_op_shal_Rn(REG(B11_8)); |
|
1229 |
tcg_gen_andi_i32(cpu_T[0], cpu_gregs[REG(B11_8)], 0x80000000); |
|
1230 |
gen_cmp_imm(TCG_COND_NE, cpu_T[0], 0); |
|
1231 |
tcg_gen_shli_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 1); |
|
1230 | 1232 |
return; |
1231 | 1233 |
case 0x4021: /* shar Rn */ |
1232 |
gen_op_shar_Rn(REG(B11_8)); |
|
1234 |
tcg_gen_andi_i32(cpu_T[0], cpu_gregs[REG(B11_8)], 1); |
|
1235 |
gen_cmp_imm(TCG_COND_NE, cpu_T[0], 0); |
|
1236 |
tcg_gen_sari_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 1); |
|
1233 | 1237 |
return; |
1234 | 1238 |
case 0x4001: /* shlr Rn */ |
1235 |
gen_op_shlr_Rn(REG(B11_8)); |
|
1239 |
tcg_gen_andi_i32(cpu_T[0], cpu_gregs[REG(B11_8)], 1); |
|
1240 |
gen_cmp_imm(TCG_COND_NE, cpu_T[0], 0); |
|
1241 |
tcg_gen_shri_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 1); |
|
1236 | 1242 |
return; |
1237 | 1243 |
case 0x4008: /* shll2 Rn */ |
1238 | 1244 |
tcg_gen_shli_i32(cpu_gregs[REG(B11_8)], cpu_gregs[REG(B11_8)], 2); |
Also available in: Unified diff