Revision 786c02f1 target-cris/op.c
b/target-cris/op.c | ||
---|---|---|
153 | 153 |
|
154 | 154 |
void OPPROTO op_break_im(void) |
155 | 155 |
{ |
156 |
env->trapnr = PARAM1;
|
|
156 |
env->trap_vector = PARAM1;
|
|
157 | 157 |
env->exception_index = EXCP_BREAK; |
158 | 158 |
cpu_loop_exit(); |
159 | 159 |
} |
... | ... | |
196 | 196 |
|
197 | 197 |
/* Apply the ccs shift. */ |
198 | 198 |
ccs = env->pregs[PR_CCS]; |
199 |
ccs = (ccs & 0xc0000000) | (ccs >> 10);
|
|
199 |
ccs = (ccs & 0xc0000000) | ((ccs & 0x0fffffff) >> 10);
|
|
200 | 200 |
env->pregs[PR_CCS] = ccs; |
201 | 201 |
RETURN(); |
202 | 202 |
} |
... | ... | |
269 | 269 |
RETURN(); |
270 | 270 |
} |
271 | 271 |
|
272 |
void OPPROTO op_movl_tlb_hi_T0 (void) |
|
273 |
{ |
|
274 |
uint32_t srs; |
|
275 |
srs = env->pregs[PR_SRS]; |
|
276 |
if (srs == 1 || srs == 2) |
|
277 |
{ |
|
278 |
/* Writes to tlb-hi write to mm_cause as a side effect. */ |
|
279 |
env->sregs[SFR_RW_MM_TLB_HI] = T0; |
|
280 |
env->sregs[SFR_R_MM_CAUSE] = T0; |
|
281 |
} |
|
282 |
RETURN(); |
|
283 |
} |
|
284 |
|
|
272 | 285 |
void OPPROTO op_movl_tlb_lo_T0 (void) |
273 | 286 |
{ |
274 |
int srs;
|
|
287 |
uint32_t srs;
|
|
275 | 288 |
srs = env->pregs[PR_SRS]; |
276 | 289 |
if (srs == 1 || srs == 2) |
277 | 290 |
{ |
278 |
int set;
|
|
279 |
int idx;
|
|
291 |
uint32_t set;
|
|
292 |
uint32_t idx;
|
|
280 | 293 |
uint32_t lo, hi; |
281 | 294 |
|
282 | 295 |
idx = set = env->sregs[SFR_RW_MM_TLB_SEL]; |
283 | 296 |
set >>= 4; |
284 | 297 |
set &= 3; |
285 | 298 |
|
286 |
idx &= 31;
|
|
299 |
idx &= 15;
|
|
287 | 300 |
/* We've just made a write to tlb_lo. */ |
288 | 301 |
lo = env->sregs[SFR_RW_MM_TLB_LO]; |
289 |
hi = env->sregs[SFR_RW_MM_TLB_HI]; |
|
302 |
/* Writes are done via r_mm_cause. */ |
|
303 |
hi = env->sregs[SFR_R_MM_CAUSE]; |
|
290 | 304 |
env->tlbsets[srs - 1][set][idx].lo = lo; |
291 | 305 |
env->tlbsets[srs - 1][set][idx].hi = hi; |
292 | 306 |
} |
293 |
|
|
294 | 307 |
RETURN(); |
295 | 308 |
} |
296 | 309 |
|
Also available in: Unified diff