Commit 3157a0a93b65aac3113ba1338221c262663ebd50

Authored by edgar_igl
1 parent 87e92502

More TCG conversions for CRIS.

* Bit swap insn (bitwise not, endian swap and bit reverse).
* Muls and mulu.
* Extended arithmetics.
* Parts of the condition code handling.
* Use tcg_const_tl.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4069 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 259 additions and 73 deletions
target-cris/translate.c
@@ -153,9 +153,9 @@ int preg_sizes[] = { @@ -153,9 +153,9 @@ int preg_sizes[] = {
153 }; 153 };
154 154
155 #define t_gen_mov_TN_env(tn, member) \ 155 #define t_gen_mov_TN_env(tn, member) \
156 - _t_gen_mov_TN_env((tn), offsetof(CPUState, (member))) 156 + _t_gen_mov_TN_env((tn), offsetof(CPUState, member))
157 #define t_gen_mov_env_TN(member, tn) \ 157 #define t_gen_mov_env_TN(member, tn) \
158 - _t_gen_mov_env_TN(offsetof(CPUState, (member)), (tn)) 158 + _t_gen_mov_env_TN(offsetof(CPUState, member), (tn))
159 159
160 #define t_gen_mov_TN_reg(tn, regno) \ 160 #define t_gen_mov_TN_reg(tn, regno) \
161 _t_gen_mov_TN_env((tn), offsetof(CPUState, regs[regno])) 161 _t_gen_mov_TN_env((tn), offsetof(CPUState, regs[regno]))
@@ -174,9 +174,9 @@ static inline void _t_gen_mov_env_TN(int offset, TCGv tn) @@ -174,9 +174,9 @@ static inline void _t_gen_mov_env_TN(int offset, TCGv tn)
174 static inline void t_gen_mov_TN_preg(TCGv tn, int r) 174 static inline void t_gen_mov_TN_preg(TCGv tn, int r)
175 { 175 {
176 if (r == PR_BZ || r == PR_WZ || r == PR_DZ) 176 if (r == PR_BZ || r == PR_WZ || r == PR_DZ)
177 - tcg_gen_mov_tl(tn, tcg_const_i32(0)); 177 + tcg_gen_mov_tl(tn, tcg_const_tl(0));
178 else if (r == PR_VR) 178 else if (r == PR_VR)
179 - tcg_gen_mov_tl(tn, tcg_const_i32(32)); 179 + tcg_gen_mov_tl(tn, tcg_const_tl(32));
180 else 180 else
181 tcg_gen_ld_tl(tn, cpu_env, offsetof(CPUState, pregs[r])); 181 tcg_gen_ld_tl(tn, cpu_env, offsetof(CPUState, pregs[r]));
182 } 182 }
@@ -200,7 +200,7 @@ static void t_gen_lsl(TCGv d, TCGv a, TCGv b) @@ -200,7 +200,7 @@ static void t_gen_lsl(TCGv d, TCGv a, TCGv b)
200 l1 = gen_new_label(); 200 l1 = gen_new_label();
201 /* Speculative shift. */ 201 /* Speculative shift. */
202 tcg_gen_shl_tl(d, a, b); 202 tcg_gen_shl_tl(d, a, b);
203 - tcg_gen_brcond_tl(TCG_COND_LE, b, tcg_const_i32(31), l1); 203 + tcg_gen_brcond_tl(TCG_COND_LE, b, tcg_const_tl(31), l1);
204 /* Clear dst if shift operands were to large. */ 204 /* Clear dst if shift operands were to large. */
205 tcg_gen_movi_tl(d, 0); 205 tcg_gen_movi_tl(d, 0);
206 gen_set_label(l1); 206 gen_set_label(l1);
@@ -213,7 +213,7 @@ static void t_gen_lsr(TCGv d, TCGv a, TCGv b) @@ -213,7 +213,7 @@ static void t_gen_lsr(TCGv d, TCGv a, TCGv b)
213 l1 = gen_new_label(); 213 l1 = gen_new_label();
214 /* Speculative shift. */ 214 /* Speculative shift. */
215 tcg_gen_shr_tl(d, a, b); 215 tcg_gen_shr_tl(d, a, b);
216 - tcg_gen_brcond_tl(TCG_COND_LE, b, tcg_const_i32(31), l1); 216 + tcg_gen_brcond_tl(TCG_COND_LE, b, tcg_const_tl(31), l1);
217 /* Clear dst if shift operands were to large. */ 217 /* Clear dst if shift operands were to large. */
218 tcg_gen_movi_tl(d, 0); 218 tcg_gen_movi_tl(d, 0);
219 gen_set_label(l1); 219 gen_set_label(l1);
@@ -226,14 +226,174 @@ static void t_gen_asr(TCGv d, TCGv a, TCGv b) @@ -226,14 +226,174 @@ static void t_gen_asr(TCGv d, TCGv a, TCGv b)
226 l1 = gen_new_label(); 226 l1 = gen_new_label();
227 /* Speculative shift. */ 227 /* Speculative shift. */
228 tcg_gen_sar_tl(d, a, b); 228 tcg_gen_sar_tl(d, a, b);
229 - tcg_gen_brcond_tl(TCG_COND_LE, b, tcg_const_i32(31), l1); 229 + tcg_gen_brcond_tl(TCG_COND_LE, b, tcg_const_tl(31), l1);
230 /* Clear dst if shift operands were to large. */ 230 /* Clear dst if shift operands were to large. */
231 tcg_gen_movi_tl(d, 0); 231 tcg_gen_movi_tl(d, 0);
232 - tcg_gen_brcond_tl(TCG_COND_LT, b, tcg_const_i32(0x80000000), l1); 232 + tcg_gen_brcond_tl(TCG_COND_LT, b, tcg_const_tl(0x80000000), l1);
233 tcg_gen_movi_tl(d, 0xffffffff); 233 tcg_gen_movi_tl(d, 0xffffffff);
234 gen_set_label(l1); 234 gen_set_label(l1);
235 } 235 }
236 236
  237 +/* 64-bit signed mul, lower result in d and upper in d2. */
  238 +static void t_gen_muls(TCGv d, TCGv d2, TCGv a, TCGv b)
  239 +{
  240 + TCGv t0, t1;
  241 +
  242 + t0 = tcg_temp_new(TCG_TYPE_I64);
  243 + t1 = tcg_temp_new(TCG_TYPE_I64);
  244 +
  245 + tcg_gen_ext32s_i64(t0, a);
  246 + tcg_gen_ext32s_i64(t1, b);
  247 + tcg_gen_mul_i64(t0, t0, t1);
  248 +
  249 + tcg_gen_trunc_i64_i32(d, t0);
  250 + tcg_gen_shri_i64(t0, t0, 32);
  251 + tcg_gen_trunc_i64_i32(d2, t0);
  252 +}
  253 +
  254 +/* 64-bit unsigned muls, lower result in d and upper in d2. */
  255 +static void t_gen_mulu(TCGv d, TCGv d2, TCGv a, TCGv b)
  256 +{
  257 + TCGv t0, t1;
  258 +
  259 + t0 = tcg_temp_new(TCG_TYPE_I64);
  260 + t1 = tcg_temp_new(TCG_TYPE_I64);
  261 +
  262 + tcg_gen_extu_i32_i64(t0, a);
  263 + tcg_gen_extu_i32_i64(t1, b);
  264 + tcg_gen_mul_i64(t0, t0, t1);
  265 +
  266 + tcg_gen_trunc_i64_i32(d, t0);
  267 + tcg_gen_shri_i64(t0, t0, 32);
  268 + tcg_gen_trunc_i64_i32(d2, t0);
  269 +}
  270 +
  271 +/* Extended arithmetics on CRIS. */
  272 +static inline void t_gen_add_flag(TCGv d, int flag)
  273 +{
  274 + TCGv c;
  275 +
  276 + c = tcg_temp_new(TCG_TYPE_TL);
  277 + t_gen_mov_TN_preg(c, PR_CCS);
  278 + /* Propagate carry into d. */
  279 + tcg_gen_andi_tl(c, c, 1 << flag);
  280 + if (flag)
  281 + tcg_gen_shri_tl(c, c, flag);
  282 + tcg_gen_add_tl(d, d, c);
  283 +}
  284 +
  285 +static inline void t_gen_addx_carry(TCGv d)
  286 +{
  287 + TCGv x, c;
  288 +
  289 + x = tcg_temp_new(TCG_TYPE_TL);
  290 + c = tcg_temp_new(TCG_TYPE_TL);
  291 + t_gen_mov_TN_preg(x, PR_CCS);
  292 + tcg_gen_mov_tl(c, x);
  293 +
  294 + /* Propagate carry into d if X is set. Branch free. */
  295 + tcg_gen_andi_tl(c, c, C_FLAG);
  296 + tcg_gen_andi_tl(x, x, X_FLAG);
  297 + tcg_gen_shri_tl(x, x, 4);
  298 +
  299 + tcg_gen_and_tl(x, x, c);
  300 + tcg_gen_add_tl(d, d, x);
  301 +}
  302 +
  303 +static inline void t_gen_subx_carry(TCGv d)
  304 +{
  305 + TCGv x, c;
  306 +
  307 + x = tcg_temp_new(TCG_TYPE_TL);
  308 + c = tcg_temp_new(TCG_TYPE_TL);
  309 + t_gen_mov_TN_preg(x, PR_CCS);
  310 + tcg_gen_mov_tl(c, x);
  311 +
  312 + /* Propagate carry into d if X is set. Branch free. */
  313 + tcg_gen_andi_tl(c, c, C_FLAG);
  314 + tcg_gen_andi_tl(x, x, X_FLAG);
  315 + tcg_gen_shri_tl(x, x, 4);
  316 +
  317 + tcg_gen_and_tl(x, x, c);
  318 + tcg_gen_sub_tl(d, d, x);
  319 +}
  320 +
  321 +/* Swap the two bytes within each half word of the s operand.
  322 + T0 = ((T0 << 8) & 0xff00ff00) | ((T0 >> 8) & 0x00ff00ff) */
  323 +static inline void t_gen_swapb(TCGv d, TCGv s)
  324 +{
  325 + TCGv t, org_s;
  326 +
  327 + t = tcg_temp_new(TCG_TYPE_TL);
  328 + org_s = tcg_temp_new(TCG_TYPE_TL);
  329 +
  330 + /* d and s may refer to the same object. */
  331 + tcg_gen_mov_tl(org_s, s);
  332 + tcg_gen_shli_tl(t, org_s, 8);
  333 + tcg_gen_andi_tl(d, t, 0xff00ff00);
  334 + tcg_gen_shri_tl(t, org_s, 8);
  335 + tcg_gen_andi_tl(t, t, 0x00ff00ff);
  336 + tcg_gen_or_tl(d, d, t);
  337 +}
  338 +
  339 +/* Swap the halfwords of the s operand. */
  340 +static inline void t_gen_swapw(TCGv d, TCGv s)
  341 +{
  342 + TCGv t;
  343 + /* d and s refer the same object. */
  344 + t = tcg_temp_new(TCG_TYPE_TL);
  345 + tcg_gen_mov_tl(t, s);
  346 + tcg_gen_shli_tl(d, t, 16);
  347 + tcg_gen_shri_tl(t, t, 16);
  348 + tcg_gen_or_tl(d, d, t);
  349 +}
  350 +
  351 +/* Reverse the within each byte.
  352 + T0 = (((T0 << 7) & 0x80808080) |
  353 + ((T0 << 5) & 0x40404040) |
  354 + ((T0 << 3) & 0x20202020) |
  355 + ((T0 << 1) & 0x10101010) |
  356 + ((T0 >> 1) & 0x08080808) |
  357 + ((T0 >> 3) & 0x04040404) |
  358 + ((T0 >> 5) & 0x02020202) |
  359 + ((T0 >> 7) & 0x01010101));
  360 + */
  361 +static inline void t_gen_swapr(TCGv d, TCGv s)
  362 +{
  363 + struct {
  364 + int shift; /* LSL when positive, LSR when negative. */
  365 + uint32_t mask;
  366 + } bitrev [] = {
  367 + {7, 0x80808080},
  368 + {5, 0x40404040},
  369 + {3, 0x20202020},
  370 + {1, 0x10101010},
  371 + {-1, 0x08080808},
  372 + {-3, 0x04040404},
  373 + {-5, 0x02020202},
  374 + {-7, 0x01010101}
  375 + };
  376 + int i;
  377 + TCGv t, org_s;
  378 +
  379 + /* d and s refer the same object. */
  380 + t = tcg_temp_new(TCG_TYPE_TL);
  381 + org_s = tcg_temp_new(TCG_TYPE_TL);
  382 + tcg_gen_mov_tl(org_s, s);
  383 +
  384 + tcg_gen_shli_tl(t, org_s, bitrev[0].shift);
  385 + tcg_gen_andi_tl(d, t, bitrev[0].mask);
  386 + for (i = 1; i < sizeof bitrev / sizeof bitrev[0]; i++) {
  387 + if (bitrev[i].shift >= 0) {
  388 + tcg_gen_shli_tl(t, org_s, bitrev[i].shift);
  389 + } else {
  390 + tcg_gen_shri_tl(t, org_s, -bitrev[i].shift);
  391 + }
  392 + tcg_gen_andi_tl(t, t, bitrev[i].mask);
  393 + tcg_gen_or_tl(d, d, t);
  394 + }
  395 +}
  396 +
237 static void gen_goto_tb(DisasContext *dc, int n, target_ulong dest) 397 static void gen_goto_tb(DisasContext *dc, int n, target_ulong dest)
238 { 398 {
239 TranslationBlock *tb; 399 TranslationBlock *tb;
@@ -241,10 +401,10 @@ static void gen_goto_tb(DisasContext *dc, int n, target_ulong dest) @@ -241,10 +401,10 @@ static void gen_goto_tb(DisasContext *dc, int n, target_ulong dest)
241 if ((tb->pc & TARGET_PAGE_MASK) == (dest & TARGET_PAGE_MASK)) { 401 if ((tb->pc & TARGET_PAGE_MASK) == (dest & TARGET_PAGE_MASK)) {
242 tcg_gen_goto_tb(n); 402 tcg_gen_goto_tb(n);
243 tcg_gen_movi_tl(cpu_T[0], dest); 403 tcg_gen_movi_tl(cpu_T[0], dest);
244 - gen_op_movl_pc_T0(); 404 + t_gen_mov_env_TN(pc, cpu_T[0]);
245 tcg_gen_exit_tb((long)tb + n); 405 tcg_gen_exit_tb((long)tb + n);
246 } else { 406 } else {
247 - gen_op_movl_pc_T0(); 407 + t_gen_mov_env_TN(pc, cpu_T[0]);
248 tcg_gen_exit_tb(0); 408 tcg_gen_exit_tb(0);
249 } 409 }
250 } 410 }
@@ -264,13 +424,9 @@ static int sign_extend(unsigned int val, unsigned int width) @@ -264,13 +424,9 @@ static int sign_extend(unsigned int val, unsigned int width)
264 424
265 static inline void cris_clear_x_flag(DisasContext *dc) 425 static inline void cris_clear_x_flag(DisasContext *dc)
266 { 426 {
267 - TCGv ccs;  
268 -  
269 - ccs = tcg_temp_new(TCG_TYPE_TL);  
270 -  
271 - t_gen_mov_TN_preg(ccs, PR_CCS);  
272 - tcg_gen_andi_i32(ccs, ccs, ~X_FLAG);  
273 - t_gen_mov_preg_TN(PR_CCS, ccs); 427 + t_gen_mov_TN_preg(cpu_T[0], PR_CCS);
  428 + tcg_gen_andi_i32(cpu_T[0], cpu_T[0], ~X_FLAG);
  429 + t_gen_mov_preg_TN(PR_CCS, cpu_T[0]);
274 dc->flagx_live = 1; 430 dc->flagx_live = 1;
275 dc->flags_x = 0; 431 dc->flags_x = 0;
276 } 432 }
@@ -339,7 +495,7 @@ static void cris_cc_mask(DisasContext *dc, unsigned int mask) @@ -339,7 +495,7 @@ static void cris_cc_mask(DisasContext *dc, unsigned int mask)
339 if (mask == 0) 495 if (mask == 0)
340 dc->update_cc = 0; 496 dc->update_cc = 0;
341 else { 497 else {
342 - gen_op_update_cc_mask(mask); 498 + t_gen_mov_env_TN(cc_mask, tcg_const_tl(mask));
343 dc->flags_live = 0; 499 dc->flags_live = 0;
344 } 500 }
345 } 501 }
@@ -347,13 +503,13 @@ static void cris_cc_mask(DisasContext *dc, unsigned int mask) @@ -347,13 +503,13 @@ static void cris_cc_mask(DisasContext *dc, unsigned int mask)
347 static void cris_update_cc_op(DisasContext *dc, int op) 503 static void cris_update_cc_op(DisasContext *dc, int op)
348 { 504 {
349 dc->cc_op = op; 505 dc->cc_op = op;
350 - gen_op_update_cc_op(op);  
351 dc->flags_live = 0; 506 dc->flags_live = 0;
  507 + t_gen_mov_env_TN(cc_op, tcg_const_tl(op));
352 } 508 }
353 static void cris_update_cc_size(DisasContext *dc, int size) 509 static void cris_update_cc_size(DisasContext *dc, int size)
354 { 510 {
355 dc->cc_size = size; 511 dc->cc_size = size;
356 - gen_op_update_cc_size_im(size); 512 + t_gen_mov_env_TN(cc_size, tcg_const_tl(size));
357 } 513 }
358 514
359 /* op is the operation. 515 /* op is the operation.
@@ -364,10 +520,15 @@ static void crisv32_alu_op(DisasContext *dc, int op, int rd, int size) @@ -364,10 +520,15 @@ static void crisv32_alu_op(DisasContext *dc, int op, int rd, int size)
364 { 520 {
365 int writeback = 1; 521 int writeback = 1;
366 if (dc->update_cc) { 522 if (dc->update_cc) {
  523 +
367 cris_update_cc_op(dc, op); 524 cris_update_cc_op(dc, op);
368 cris_update_cc_size(dc, size); 525 cris_update_cc_size(dc, size);
369 - gen_op_update_cc_x(dc->flagx_live, dc->flags_x);  
370 - gen_op_update_cc_dest_T0(); 526 + t_gen_mov_env_TN(cc_dest, cpu_T[0]);
  527 +
  528 + /* FIXME: This shouldn't be needed. But we don't pass the
  529 + tests without it. Investigate. */
  530 + t_gen_mov_env_TN(cc_x_live, tcg_const_tl(dc->flagx_live));
  531 + t_gen_mov_env_TN(cc_x, tcg_const_tl(dc->flags_x));
371 } 532 }
372 533
373 /* Emit the ALU insns. */ 534 /* Emit the ALU insns. */
@@ -376,25 +537,25 @@ static void crisv32_alu_op(DisasContext *dc, int op, int rd, int size) @@ -376,25 +537,25 @@ static void crisv32_alu_op(DisasContext *dc, int op, int rd, int size)
376 case CC_OP_ADD: 537 case CC_OP_ADD:
377 tcg_gen_add_tl(cpu_T[0], cpu_T[0], cpu_T[1]); 538 tcg_gen_add_tl(cpu_T[0], cpu_T[0], cpu_T[1]);
378 /* Extended arithmetics. */ 539 /* Extended arithmetics. */
379 - gen_op_addxl_T0_C(); 540 + t_gen_addx_carry(cpu_T[0]);
380 break; 541 break;
381 case CC_OP_ADDC: 542 case CC_OP_ADDC:
382 tcg_gen_add_tl(cpu_T[0], cpu_T[0], cpu_T[1]); 543 tcg_gen_add_tl(cpu_T[0], cpu_T[0], cpu_T[1]);
383 - gen_op_addl_T0_C(); 544 + t_gen_add_flag(cpu_T[0], 0); /* C_FLAG. */
384 break; 545 break;
385 case CC_OP_MCP: 546 case CC_OP_MCP:
386 tcg_gen_add_tl(cpu_T[0], cpu_T[0], cpu_T[1]); 547 tcg_gen_add_tl(cpu_T[0], cpu_T[0], cpu_T[1]);
387 - gen_op_addl_T0_R(); 548 + t_gen_add_flag(cpu_T[0], 8); /* R_FLAG. */
388 break; 549 break;
389 case CC_OP_SUB: 550 case CC_OP_SUB:
390 - tcg_gen_sub_tl(cpu_T[1], tcg_const_i32(0), cpu_T[1]); 551 + tcg_gen_sub_tl(cpu_T[1], tcg_const_tl(0), cpu_T[1]);
391 tcg_gen_add_tl(cpu_T[0], cpu_T[0], cpu_T[1]); 552 tcg_gen_add_tl(cpu_T[0], cpu_T[0], cpu_T[1]);
  553 + tcg_gen_sub_tl(cpu_T[1], tcg_const_tl(0), cpu_T[1]);
392 /* CRIS flag evaluation needs ~src. */ 554 /* CRIS flag evaluation needs ~src. */
393 - tcg_gen_sub_tl(cpu_T[1], tcg_const_i32(0), cpu_T[1]);  
394 - gen_op_not_T1_T1(); 555 + tcg_gen_xori_tl(cpu_T[1], cpu_T[1], -1);
395 556
396 /* Extended arithmetics. */ 557 /* Extended arithmetics. */
397 - gen_op_subxl_T0_C(); 558 + t_gen_subx_carry(cpu_T[0]);
398 break; 559 break;
399 case CC_OP_MOVE: 560 case CC_OP_MOVE:
400 tcg_gen_mov_tl(cpu_T[0], cpu_T[1]); 561 tcg_gen_mov_tl(cpu_T[0], cpu_T[1]);
@@ -418,11 +579,11 @@ static void crisv32_alu_op(DisasContext *dc, int op, int rd, int size) @@ -418,11 +579,11 @@ static void crisv32_alu_op(DisasContext *dc, int op, int rd, int size)
418 t_gen_asr(cpu_T[0], cpu_T[0], cpu_T[1]); 579 t_gen_asr(cpu_T[0], cpu_T[0], cpu_T[1]);
419 break; 580 break;
420 case CC_OP_NEG: 581 case CC_OP_NEG:
421 - /* TCG-FIXME: this is not optimal. Many archs have  
422 - fast neg insns. */  
423 - tcg_gen_sub_tl(cpu_T[0], tcg_const_i32(0), cpu_T[1]); 582 + /* Hopefully the TCG backend recognizes this pattern
  583 + and makes a real neg out of it. */
  584 + tcg_gen_sub_tl(cpu_T[0], tcg_const_tl(0), cpu_T[1]);
424 /* Extended arithmetics. */ 585 /* Extended arithmetics. */
425 - gen_op_subxl_T0_C(); 586 + t_gen_subx_carry(cpu_T[0]);
426 break; 587 break;
427 case CC_OP_LZ: 588 case CC_OP_LZ:
428 gen_op_lz_T0_T1(); 589 gen_op_lz_T0_T1();
@@ -432,27 +593,44 @@ static void crisv32_alu_op(DisasContext *dc, int op, int rd, int size) @@ -432,27 +593,44 @@ static void crisv32_alu_op(DisasContext *dc, int op, int rd, int size)
432 writeback = 0; 593 writeback = 0;
433 break; 594 break;
434 case CC_OP_MULS: 595 case CC_OP_MULS:
435 - gen_op_muls_T0_T1();  
436 - break; 596 + {
  597 + TCGv mof;
  598 + mof = tcg_temp_new(TCG_TYPE_TL);
  599 + t_gen_muls(cpu_T[0], mof, cpu_T[0], cpu_T[1]);
  600 + t_gen_mov_preg_TN(PR_MOF, mof);
  601 + }
  602 + break;
437 case CC_OP_MULU: 603 case CC_OP_MULU:
438 - gen_op_mulu_T0_T1();  
439 - break; 604 + {
  605 + TCGv mof;
  606 + mof = tcg_temp_new(TCG_TYPE_TL);
  607 + t_gen_mulu(cpu_T[0], mof, cpu_T[0], cpu_T[1]);
  608 + t_gen_mov_preg_TN(PR_MOF, mof);
  609 + }
  610 + break;
440 case CC_OP_DSTEP: 611 case CC_OP_DSTEP:
441 gen_op_dstep_T0_T1(); 612 gen_op_dstep_T0_T1();
442 break; 613 break;
443 case CC_OP_BOUND: 614 case CC_OP_BOUND:
444 - gen_op_bound_T0_T1();  
445 - break; 615 + {
  616 + int l1;
  617 + l1 = gen_new_label();
  618 + tcg_gen_brcond_tl(TCG_COND_LEU,
  619 + cpu_T[0], cpu_T[1], l1);
  620 + tcg_gen_mov_tl(cpu_T[0], cpu_T[1]);
  621 + gen_set_label(l1);
  622 + }
  623 + break;
446 case CC_OP_CMP: 624 case CC_OP_CMP:
447 - tcg_gen_sub_tl(cpu_T[1], tcg_const_i32(0), cpu_T[1]); 625 + tcg_gen_sub_tl(cpu_T[1], tcg_const_tl(0), cpu_T[1]);
448 tcg_gen_add_tl(cpu_T[0], cpu_T[0], cpu_T[1]); 626 tcg_gen_add_tl(cpu_T[0], cpu_T[0], cpu_T[1]);
449 /* CRIS flag evaluation needs ~src. */ 627 /* CRIS flag evaluation needs ~src. */
450 - tcg_gen_sub_tl(cpu_T[1], tcg_const_i32(0), cpu_T[1]); 628 + tcg_gen_sub_tl(cpu_T[1], tcg_const_tl(0), cpu_T[1]);
451 /* CRIS flag evaluation needs ~src. */ 629 /* CRIS flag evaluation needs ~src. */
452 - gen_op_not_T1_T1(); 630 + tcg_gen_xori_tl(cpu_T[1], cpu_T[1], -1);
453 631
454 /* Extended arithmetics. */ 632 /* Extended arithmetics. */
455 - gen_op_subxl_T0_C(); 633 + t_gen_subx_carry(cpu_T[0]);
456 writeback = 0; 634 writeback = 0;
457 break; 635 break;
458 default: 636 default:
@@ -462,7 +640,7 @@ static void crisv32_alu_op(DisasContext *dc, int op, int rd, int size) @@ -462,7 +640,7 @@ static void crisv32_alu_op(DisasContext *dc, int op, int rd, int size)
462 } 640 }
463 641
464 if (dc->update_cc) 642 if (dc->update_cc)
465 - gen_op_update_cc_src_T1(); 643 + t_gen_mov_env_TN(cc_src, cpu_T[1]);
466 644
467 if (size == 1) 645 if (size == 1)
468 tcg_gen_andi_tl(cpu_T[0], cpu_T[0], 0xff); 646 tcg_gen_andi_tl(cpu_T[0], cpu_T[0], 0xff);
@@ -486,7 +664,7 @@ static void crisv32_alu_op(DisasContext *dc, int op, int rd, int size) @@ -486,7 +664,7 @@ static void crisv32_alu_op(DisasContext *dc, int op, int rd, int size)
486 } 664 }
487 } 665 }
488 if (dc->update_cc) 666 if (dc->update_cc)
489 - gen_op_update_cc_result_T0(); 667 + t_gen_mov_env_TN(cc_result, cpu_T[0]);
490 668
491 { 669 {
492 /* TODO: Optimize this. */ 670 /* TODO: Optimize this. */
@@ -617,8 +795,8 @@ static void cris_prepare_cc_branch (DisasContext *dc, int offset, int cond) @@ -617,8 +795,8 @@ static void cris_prepare_cc_branch (DisasContext *dc, int offset, int cond)
617 gen_tst_cc (dc, cond); 795 gen_tst_cc (dc, cond);
618 gen_op_evaluate_bcc (); 796 gen_op_evaluate_bcc ();
619 } 797 }
620 - gen_op_movl_T0_im (dc->delayed_pc);  
621 - gen_op_movl_btarget_T0 (); 798 + tcg_gen_movi_tl(cpu_T[0], dc->delayed_pc);
  799 + t_gen_mov_env_TN(btarget, cpu_T[0]);
622 } 800 }
623 801
624 /* Dynamic jumps, when the dest is in a live reg for example. */ 802 /* Dynamic jumps, when the dest is in a live reg for example. */
@@ -726,7 +904,7 @@ static void do_postinc (DisasContext *dc, int size) @@ -726,7 +904,7 @@ static void do_postinc (DisasContext *dc, int size)
726 if (!dc->postinc) 904 if (!dc->postinc)
727 return; 905 return;
728 t_gen_mov_TN_reg(cpu_T[0], dc->op1); 906 t_gen_mov_TN_reg(cpu_T[0], dc->op1);
729 - gen_op_addl_T0_im(size); 907 + tcg_gen_addi_tl(cpu_T[0], cpu_T[0], size);
730 t_gen_mov_reg_TN(dc->op1, cpu_T[0]); 908 t_gen_mov_reg_TN(dc->op1, cpu_T[0]);
731 } 909 }
732 910
@@ -874,7 +1052,7 @@ static unsigned int dec_moveq(DisasContext *dc) @@ -874,7 +1052,7 @@ static unsigned int dec_moveq(DisasContext *dc)
874 imm = sign_extend(dc->op1, 5); 1052 imm = sign_extend(dc->op1, 5);
875 DIS(fprintf (logfile, "moveq %d, $r%u\n", imm, dc->op2)); 1053 DIS(fprintf (logfile, "moveq %d, $r%u\n", imm, dc->op2));
876 1054
877 - t_gen_mov_reg_TN(dc->op2, tcg_const_i32(imm)); 1055 + t_gen_mov_reg_TN(dc->op2, tcg_const_tl(imm));
878 if (!dc->flagx_live || dc->flags_x) 1056 if (!dc->flagx_live || dc->flags_x)
879 cris_clear_x_flag(dc); 1057 cris_clear_x_flag(dc);
880 return 2; 1058 return 2;
@@ -940,7 +1118,7 @@ static unsigned int dec_btstq(DisasContext *dc) @@ -940,7 +1118,7 @@ static unsigned int dec_btstq(DisasContext *dc)
940 crisv32_alu_op(dc, CC_OP_BTST, dc->op2, 4); 1118 crisv32_alu_op(dc, CC_OP_BTST, dc->op2, 4);
941 1119
942 cris_update_cc_op(dc, CC_OP_FLAGS); 1120 cris_update_cc_op(dc, CC_OP_FLAGS);
943 - gen_op_movl_flags_T0(); 1121 + t_gen_mov_preg_TN(PR_CCS, cpu_T[0]);
944 dc->flags_live = 1; 1122 dc->flags_live = 1;
945 return 2; 1123 return 2;
946 } 1124 }
@@ -1000,10 +1178,10 @@ static unsigned int dec_scc_r(DisasContext *dc) @@ -1000,10 +1178,10 @@ static unsigned int dec_scc_r(DisasContext *dc)
1000 if (cond != CC_A) 1178 if (cond != CC_A)
1001 { 1179 {
1002 gen_tst_cc (dc, cond); 1180 gen_tst_cc (dc, cond);
1003 - gen_op_movl_T1_T0(); 1181 + tcg_gen_mov_tl(cpu_T[1], cpu_T[0]);
1004 } 1182 }
1005 else 1183 else
1006 - gen_op_movl_T1_im(1); 1184 + tcg_gen_movi_tl(cpu_T[1], 1);
1007 1185
1008 cris_cc_mask(dc, 0); 1186 cris_cc_mask(dc, 0);
1009 crisv32_alu_op(dc, CC_OP_MOVE, dc->op1, 4); 1187 crisv32_alu_op(dc, CC_OP_MOVE, dc->op1, 4);
@@ -1147,11 +1325,18 @@ static unsigned int dec_cmp_r(DisasContext *dc) @@ -1147,11 +1325,18 @@ static unsigned int dec_cmp_r(DisasContext *dc)
1147 1325
1148 static unsigned int dec_abs_r(DisasContext *dc) 1326 static unsigned int dec_abs_r(DisasContext *dc)
1149 { 1327 {
  1328 + int l1;
  1329 +
1150 DIS(fprintf (logfile, "abs $r%u, $r%u\n", 1330 DIS(fprintf (logfile, "abs $r%u, $r%u\n",
1151 dc->op1, dc->op2)); 1331 dc->op1, dc->op2));
1152 cris_cc_mask(dc, CC_MASK_NZ); 1332 cris_cc_mask(dc, CC_MASK_NZ);
1153 dec_prep_move_r(dc, dc->op1, dc->op2, 4, 0); 1333 dec_prep_move_r(dc, dc->op1, dc->op2, 4, 0);
1154 - gen_op_absl_T1_T1(); 1334 +
  1335 + /* TODO: consider a branch free approach. */
  1336 + l1 = gen_new_label();
  1337 + tcg_gen_brcond_tl(TCG_COND_GE, cpu_T[1], tcg_const_tl(0), l1);
  1338 + tcg_gen_sub_tl(cpu_T[1], tcg_const_tl(0), cpu_T[1]);
  1339 + gen_set_label(l1);
1155 crisv32_alu_op(dc, CC_OP_MOVE, dc->op2, 4); 1340 crisv32_alu_op(dc, CC_OP_MOVE, dc->op2, 4);
1156 return 2; 1341 return 2;
1157 } 1342 }
@@ -1215,14 +1400,14 @@ static unsigned int dec_swap_r(DisasContext *dc) @@ -1215,14 +1400,14 @@ static unsigned int dec_swap_r(DisasContext *dc)
1215 cris_cc_mask(dc, CC_MASK_NZ); 1400 cris_cc_mask(dc, CC_MASK_NZ);
1216 t_gen_mov_TN_reg(cpu_T[0], dc->op1); 1401 t_gen_mov_TN_reg(cpu_T[0], dc->op1);
1217 if (dc->op2 & 8) 1402 if (dc->op2 & 8)
1218 - gen_op_not_T0_T0(); 1403 + tcg_gen_xori_tl(cpu_T[0], cpu_T[0], -1);
1219 if (dc->op2 & 4) 1404 if (dc->op2 & 4)
1220 - gen_op_swapw_T0_T0(); 1405 + t_gen_swapw(cpu_T[0], cpu_T[0]);
1221 if (dc->op2 & 2) 1406 if (dc->op2 & 2)
1222 - gen_op_swapb_T0_T0(); 1407 + t_gen_swapb(cpu_T[0], cpu_T[0]);
1223 if (dc->op2 & 1) 1408 if (dc->op2 & 1)
1224 - gen_op_swapr_T0_T0();  
1225 - gen_op_movl_T1_T0(); 1409 + t_gen_swapr(cpu_T[0], cpu_T[0]);
  1410 + tcg_gen_mov_tl(cpu_T[1], cpu_T[0]);
1226 crisv32_alu_op(dc, CC_OP_MOVE, dc->op1, 4); 1411 crisv32_alu_op(dc, CC_OP_MOVE, dc->op1, 4);
1227 return 2; 1412 return 2;
1228 } 1413 }
@@ -1244,7 +1429,7 @@ static unsigned int dec_addi_r(DisasContext *dc) @@ -1244,7 +1429,7 @@ static unsigned int dec_addi_r(DisasContext *dc)
1244 memsize_char(memsize_zz(dc)), dc->op2, dc->op1)); 1429 memsize_char(memsize_zz(dc)), dc->op2, dc->op1));
1245 cris_cc_mask(dc, 0); 1430 cris_cc_mask(dc, 0);
1246 dec_prep_alu_r(dc, dc->op1, dc->op2, 4, 0); 1431 dec_prep_alu_r(dc, dc->op1, dc->op2, 4, 0);
1247 - t_gen_lsl(cpu_T[0], cpu_T[0], tcg_const_i32(dc->zzsize)); 1432 + t_gen_lsl(cpu_T[0], cpu_T[0], tcg_const_tl(dc->zzsize));
1248 tcg_gen_add_tl(cpu_T[0], cpu_T[0], cpu_T[1]); 1433 tcg_gen_add_tl(cpu_T[0], cpu_T[0], cpu_T[1]);
1249 t_gen_mov_reg_TN(dc->op1, cpu_T[0]); 1434 t_gen_mov_reg_TN(dc->op1, cpu_T[0]);
1250 return 2; 1435 return 2;
@@ -1256,7 +1441,7 @@ static unsigned int dec_addi_acr(DisasContext *dc) @@ -1256,7 +1441,7 @@ static unsigned int dec_addi_acr(DisasContext *dc)
1256 memsize_char(memsize_zz(dc)), dc->op2, dc->op1)); 1441 memsize_char(memsize_zz(dc)), dc->op2, dc->op1));
1257 cris_cc_mask(dc, 0); 1442 cris_cc_mask(dc, 0);
1258 dec_prep_alu_r(dc, dc->op1, dc->op2, 4, 0); 1443 dec_prep_alu_r(dc, dc->op1, dc->op2, 4, 0);
1259 - t_gen_lsl(cpu_T[0], cpu_T[0], tcg_const_i32(dc->zzsize)); 1444 + t_gen_lsl(cpu_T[0], cpu_T[0], tcg_const_tl(dc->zzsize));
1260 1445
1261 tcg_gen_add_tl(cpu_T[0], cpu_T[0], cpu_T[1]); 1446 tcg_gen_add_tl(cpu_T[0], cpu_T[0], cpu_T[1]);
1262 t_gen_mov_reg_TN(R_ACR, cpu_T[0]); 1447 t_gen_mov_reg_TN(R_ACR, cpu_T[0]);
@@ -1283,7 +1468,7 @@ static unsigned int dec_btst_r(DisasContext *dc) @@ -1283,7 +1468,7 @@ static unsigned int dec_btst_r(DisasContext *dc)
1283 crisv32_alu_op(dc, CC_OP_BTST, dc->op2, 4); 1468 crisv32_alu_op(dc, CC_OP_BTST, dc->op2, 4);
1284 1469
1285 cris_update_cc_op(dc, CC_OP_FLAGS); 1470 cris_update_cc_op(dc, CC_OP_FLAGS);
1286 - gen_op_movl_flags_T0(); 1471 + t_gen_mov_preg_TN(PR_CCS, cpu_T[0]);
1287 dc->flags_live = 1; 1472 dc->flags_live = 1;
1288 return 2; 1473 return 2;
1289 } 1474 }
@@ -1910,7 +2095,7 @@ static unsigned int dec_lapc_im(DisasContext *dc) @@ -1910,7 +2095,7 @@ static unsigned int dec_lapc_im(DisasContext *dc)
1910 cris_cc_mask(dc, 0); 2095 cris_cc_mask(dc, 0);
1911 imm = ldl_code(dc->pc + 2); 2096 imm = ldl_code(dc->pc + 2);
1912 DIS(fprintf (logfile, "lapc 0x%x, $r%u\n", imm + dc->pc, dc->op2)); 2097 DIS(fprintf (logfile, "lapc 0x%x, $r%u\n", imm + dc->pc, dc->op2));
1913 - t_gen_mov_reg_TN(rd, tcg_const_i32(dc->pc + imm)); 2098 + t_gen_mov_reg_TN(rd, tcg_const_tl(dc->pc + imm));
1914 return 6; 2099 return 6;
1915 } 2100 }
1916 2101
@@ -1921,7 +2106,7 @@ static unsigned int dec_jump_p(DisasContext *dc) @@ -1921,7 +2106,7 @@ static unsigned int dec_jump_p(DisasContext *dc)
1921 cris_cc_mask(dc, 0); 2106 cris_cc_mask(dc, 0);
1922 /* Store the return address in Pd. */ 2107 /* Store the return address in Pd. */
1923 t_gen_mov_TN_preg(cpu_T[0], dc->op2); 2108 t_gen_mov_TN_preg(cpu_T[0], dc->op2);
1924 - gen_op_movl_btarget_T0(); 2109 + t_gen_mov_env_TN(btarget, cpu_T[0]);
1925 cris_prepare_dyn_jmp(dc); 2110 cris_prepare_dyn_jmp(dc);
1926 return 2; 2111 return 2;
1927 } 2112 }
@@ -1933,7 +2118,7 @@ static unsigned int dec_jas_r(DisasContext *dc) @@ -1933,7 +2118,7 @@ static unsigned int dec_jas_r(DisasContext *dc)
1933 cris_cc_mask(dc, 0); 2118 cris_cc_mask(dc, 0);
1934 /* Stor the return address in Pd. */ 2119 /* Stor the return address in Pd. */
1935 t_gen_mov_TN_reg(cpu_T[0], dc->op1); 2120 t_gen_mov_TN_reg(cpu_T[0], dc->op1);
1936 - gen_op_movl_btarget_T0(); 2121 + t_gen_mov_env_TN(btarget, cpu_T[0]);
1937 tcg_gen_movi_tl(cpu_T[0], dc->pc + 4); 2122 tcg_gen_movi_tl(cpu_T[0], dc->pc + 4);
1938 t_gen_mov_preg_TN(dc->op2, cpu_T[0]); 2123 t_gen_mov_preg_TN(dc->op2, cpu_T[0]);
1939 cris_prepare_dyn_jmp(dc); 2124 cris_prepare_dyn_jmp(dc);
@@ -1950,7 +2135,7 @@ static unsigned int dec_jas_im(DisasContext *dc) @@ -1950,7 +2135,7 @@ static unsigned int dec_jas_im(DisasContext *dc)
1950 cris_cc_mask(dc, 0); 2135 cris_cc_mask(dc, 0);
1951 /* Stor the return address in Pd. */ 2136 /* Stor the return address in Pd. */
1952 tcg_gen_movi_tl(cpu_T[0], imm); 2137 tcg_gen_movi_tl(cpu_T[0], imm);
1953 - gen_op_movl_btarget_T0(); 2138 + t_gen_mov_env_TN(btarget, cpu_T[0]);
1954 tcg_gen_movi_tl(cpu_T[0], dc->pc + 8); 2139 tcg_gen_movi_tl(cpu_T[0], dc->pc + 8);
1955 t_gen_mov_preg_TN(dc->op2, cpu_T[0]); 2140 t_gen_mov_preg_TN(dc->op2, cpu_T[0]);
1956 cris_prepare_dyn_jmp(dc); 2141 cris_prepare_dyn_jmp(dc);
@@ -1967,7 +2152,7 @@ static unsigned int dec_jasc_im(DisasContext *dc) @@ -1967,7 +2152,7 @@ static unsigned int dec_jasc_im(DisasContext *dc)
1967 cris_cc_mask(dc, 0); 2152 cris_cc_mask(dc, 0);
1968 /* Stor the return address in Pd. */ 2153 /* Stor the return address in Pd. */
1969 tcg_gen_movi_tl(cpu_T[0], imm); 2154 tcg_gen_movi_tl(cpu_T[0], imm);
1970 - gen_op_movl_btarget_T0(); 2155 + t_gen_mov_env_TN(btarget, cpu_T[0]);
1971 tcg_gen_movi_tl(cpu_T[0], dc->pc + 8 + 4); 2156 tcg_gen_movi_tl(cpu_T[0], dc->pc + 8 + 4);
1972 t_gen_mov_preg_TN(dc->op2, cpu_T[0]); 2157 t_gen_mov_preg_TN(dc->op2, cpu_T[0]);
1973 cris_prepare_dyn_jmp(dc); 2158 cris_prepare_dyn_jmp(dc);
@@ -1980,7 +2165,7 @@ static unsigned int dec_jasc_r(DisasContext *dc) @@ -1980,7 +2165,7 @@ static unsigned int dec_jasc_r(DisasContext *dc)
1980 cris_cc_mask(dc, 0); 2165 cris_cc_mask(dc, 0);
1981 /* Stor the return address in Pd. */ 2166 /* Stor the return address in Pd. */
1982 t_gen_mov_TN_reg(cpu_T[0], dc->op1); 2167 t_gen_mov_TN_reg(cpu_T[0], dc->op1);
1983 - gen_op_movl_btarget_T0(); 2168 + t_gen_mov_env_TN(btarget, cpu_T[0]);
1984 tcg_gen_movi_tl(cpu_T[0], dc->pc + 4 + 4); 2169 tcg_gen_movi_tl(cpu_T[0], dc->pc + 4 + 4);
1985 t_gen_mov_preg_TN(dc->op2, cpu_T[0]); 2170 t_gen_mov_preg_TN(dc->op2, cpu_T[0]);
1986 cris_prepare_dyn_jmp(dc); 2171 cris_prepare_dyn_jmp(dc);
@@ -2016,7 +2201,7 @@ static unsigned int dec_bas_im(DisasContext *dc) @@ -2016,7 +2201,7 @@ static unsigned int dec_bas_im(DisasContext *dc)
2016 cris_cc_mask(dc, 0); 2201 cris_cc_mask(dc, 0);
2017 /* Stor the return address in Pd. */ 2202 /* Stor the return address in Pd. */
2018 tcg_gen_movi_tl(cpu_T[0], dc->pc + simm); 2203 tcg_gen_movi_tl(cpu_T[0], dc->pc + simm);
2019 - gen_op_movl_btarget_T0(); 2204 + t_gen_mov_env_TN(btarget, cpu_T[0]);
2020 tcg_gen_movi_tl(cpu_T[0], dc->pc + 8); 2205 tcg_gen_movi_tl(cpu_T[0], dc->pc + 8);
2021 t_gen_mov_preg_TN(dc->op2, cpu_T[0]); 2206 t_gen_mov_preg_TN(dc->op2, cpu_T[0]);
2022 cris_prepare_dyn_jmp(dc); 2207 cris_prepare_dyn_jmp(dc);
@@ -2032,7 +2217,7 @@ static unsigned int dec_basc_im(DisasContext *dc) @@ -2032,7 +2217,7 @@ static unsigned int dec_basc_im(DisasContext *dc)
2032 cris_cc_mask(dc, 0); 2217 cris_cc_mask(dc, 0);
2033 /* Stor the return address in Pd. */ 2218 /* Stor the return address in Pd. */
2034 tcg_gen_movi_tl(cpu_T[0], dc->pc + simm); 2219 tcg_gen_movi_tl(cpu_T[0], dc->pc + simm);
2035 - gen_op_movl_btarget_T0(); 2220 + t_gen_mov_env_TN(btarget, cpu_T[0]);
2036 tcg_gen_movi_tl(cpu_T[0], dc->pc + 12); 2221 tcg_gen_movi_tl(cpu_T[0], dc->pc + 12);
2037 t_gen_mov_preg_TN(dc->op2, cpu_T[0]); 2222 t_gen_mov_preg_TN(dc->op2, cpu_T[0]);
2038 cris_prepare_dyn_jmp(dc); 2223 cris_prepare_dyn_jmp(dc);
@@ -2062,7 +2247,7 @@ static unsigned int dec_rfe_etc(DisasContext *dc) @@ -2062,7 +2247,7 @@ static unsigned int dec_rfe_etc(DisasContext *dc)
2062 case 6: 2247 case 6:
2063 /* break. */ 2248 /* break. */
2064 tcg_gen_movi_tl(cpu_T[0], dc->pc); 2249 tcg_gen_movi_tl(cpu_T[0], dc->pc);
2065 - gen_op_movl_pc_T0(); 2250 + t_gen_mov_env_TN(pc, cpu_T[0]);
2066 /* Breaks start at 16 in the exception vector. */ 2251 /* Breaks start at 16 in the exception vector. */
2067 gen_op_break_im(dc->op1 + 16); 2252 gen_op_break_im(dc->op1 + 16);
2068 dc->is_jmp = DISAS_SWI; 2253 dc->is_jmp = DISAS_SWI;
@@ -2247,7 +2432,7 @@ static void check_breakpoint(CPUState *env, DisasContext *dc) @@ -2247,7 +2432,7 @@ static void check_breakpoint(CPUState *env, DisasContext *dc)
2247 if (env->breakpoints[j] == dc->pc) { 2432 if (env->breakpoints[j] == dc->pc) {
2248 cris_evaluate_flags (dc); 2433 cris_evaluate_flags (dc);
2249 tcg_gen_movi_tl(cpu_T[0], dc->pc); 2434 tcg_gen_movi_tl(cpu_T[0], dc->pc);
2250 - gen_op_movl_pc_T0(); 2435 + t_gen_mov_env_TN(pc, cpu_T[0]);
2251 gen_op_debug(); 2436 gen_op_debug();
2252 dc->is_jmp = DISAS_UPDATE; 2437 dc->is_jmp = DISAS_UPDATE;
2253 } 2438 }
@@ -2279,6 +2464,7 @@ gen_intermediate_code_internal(CPUState *env, TranslationBlock *tb, @@ -2279,6 +2464,7 @@ gen_intermediate_code_internal(CPUState *env, TranslationBlock *tb,
2279 dc->singlestep_enabled = env->singlestep_enabled; 2464 dc->singlestep_enabled = env->singlestep_enabled;
2280 dc->flagx_live = 0; 2465 dc->flagx_live = 0;
2281 dc->flags_x = 0; 2466 dc->flags_x = 0;
  2467 +
2282 next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE; 2468 next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE;
2283 lj = -1; 2469 lj = -1;
2284 do 2470 do
@@ -2333,8 +2519,8 @@ gen_intermediate_code_internal(CPUState *env, TranslationBlock *tb, @@ -2333,8 +2519,8 @@ gen_intermediate_code_internal(CPUState *env, TranslationBlock *tb,
2333 && dc->pc < next_page_start); 2519 && dc->pc < next_page_start);
2334 2520
2335 if (!dc->is_jmp) { 2521 if (!dc->is_jmp) {
2336 - gen_op_movl_T0_im((long)dc->pc);  
2337 - gen_op_movl_pc_T0(); 2522 + tcg_gen_movi_tl(cpu_T[0], dc->pc);
  2523 + t_gen_mov_env_TN(pc, cpu_T[0]);
2338 } 2524 }
2339 2525
2340 cris_evaluate_flags (dc); 2526 cris_evaluate_flags (dc);