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