Revision fd56059f target-cris/translate.c

b/target-cris/translate.c
110 110
	unsigned int mode;
111 111
	unsigned int postinc;
112 112

  
113

  
114
	struct
115
	{
116
		int op;
117
		int size;
118
		unsigned int mask;
119
	} cc_state[3];
120
	int cc_i;
121

  
122 113
	int update_cc;
123 114
	int cc_op;
124 115
	int cc_size;
......
183 174
	gen_op_movl_T0_im(32);
184 175
}
185 176

  
177
static void gen_movl_T0_p0(void) {
178
	gen_op_movl_T0_im(0);
179
}
180

  
186 181
static void gen_ccs_read(void) {
187 182
	gen_op_movl_T0_p13();
188 183
}
......
209 204
};
210 205
static GenOpFunc *gen_movl_T0_preg[16] =
211 206
{
212
	gen_op_movl_T0_p0,
207
	gen_movl_T0_p0,
213 208
	gen_vr_read,
214 209
	gen_op_movl_T0_p2, gen_op_movl_T0_p3,
215 210
	gen_op_movl_T0_p4, gen_op_movl_T0_p5,
......
345 340
{
346 341
	uint32_t ovl;
347 342

  
343
	/* Check if we need to evaluate the condition codes due to 
344
	   CC overlaying.  */
348 345
	ovl = (dc->cc_mask ^ mask) & ~mask;
349 346
	if (ovl) {
350 347
		/* TODO: optimize this case. It trigs all the time.  */
......
987 984
{
988 985
	dc->op1 = EXTRACT_FIELD(dc->ir, 0, 4);
989 986
	DIS(fprintf (logfile, "btstq %u, $r%d\n", dc->op1, dc->op2));
990
	cris_evaluate_flags(dc);
991 987
	cris_cc_mask(dc, CC_MASK_NZ);
992 988
	gen_movl_T0_reg[dc->op2]();
993 989
	gen_op_movl_T1_im(dc->op1);
......
1333 1329
{
1334 1330
	DIS(fprintf (logfile, "btst $r%u, $r%u\n",
1335 1331
		    dc->op1, dc->op2));
1336
	cris_evaluate_flags(dc);
1337 1332
	cris_cc_mask(dc, CC_MASK_NZ);
1338 1333
	dec_prep_alu_r(dc, dc->op1, dc->op2, 4, 0);
1339 1334
	crisv32_alu_op(dc, CC_OP_BTST, dc->op2, 4);
......
1518 1513
{
1519 1514
	DIS(fprintf (logfile, "move $p%u, $r%u\n", dc->op1, dc->op2));
1520 1515
	cris_cc_mask(dc, 0);
1521
	gen_movl_T0_preg[dc->op2]();
1522
	gen_op_movl_T1_T0();
1516
	/* Support register 0 is hardwired to zero. 
1517
	   Treat it specially. */
1518
	if (dc->op2 == 0)
1519
		gen_op_movl_T1_im(0);
1520
	else {
1521
		gen_movl_T0_preg[dc->op2]();
1522
		gen_op_movl_T1_T0();
1523
	}
1523 1524
	crisv32_alu_op(dc, CC_OP_MOVE, dc->op1, preg_sizes[dc->op2]);
1524 1525
	return 2;
1525 1526
}
......
1846 1847

  
1847 1848
	memsize = preg_sizes[dc->op2];
1848 1849

  
1849
	DIS(fprintf (logfile, "move.%d $p%u, [$r%u%s\n",
1850
		     memsize, dc->op2, dc->op1, dc->postinc ? "+]" : "]"));
1850
	DIS(fprintf (logfile, "move.%c $p%u, [$r%u%s\n",
1851
		     memsize_char(memsize), 
1852
		     dc->op2, dc->op1, dc->postinc ? "+]" : "]"));
1851 1853

  
1852 1854
	cris_cc_mask(dc, 0);
1853
	/* prepare store.  */
1854
	gen_movl_T0_preg[dc->op2]();
1855
	gen_op_movl_T1_T0();
1855
	/* prepare store. Address in T0, value in T1.  */
1856
	/* Support register 0 is hardwired to zero. 
1857
	   Treat it specially. */
1858
	if (dc->op2 == 0)
1859
		gen_op_movl_T1_im(0);
1860
	else
1861
	{
1862
		gen_movl_T0_preg[dc->op2]();
1863
		gen_op_movl_T1_T0();
1864
	}
1856 1865
	gen_movl_T0_reg[dc->op1]();
1857 1866
	gen_store_T0_T1(dc, memsize);
1858 1867
	if (dc->postinc)

Also available in: Unified diff