Revision 4f821e17 target-alpha/translate.c

b/target-alpha/translate.c
273 273
        gen_op_nop();
274 274
    } else {
275 275
        if (rb != 31)
276
            tcg_gen_mov_i64(cpu_T[0], cpu_ir[rb]);
276
            tcg_gen_addi_i64(cpu_T[0], cpu_ir[rb], disp16);
277 277
        else
278
            tcg_gen_movi_i64(cpu_T[0], 0);
279
        if (disp16 != 0) {
280
            tcg_gen_movi_i64(cpu_T[1], disp16);
281
            gen_op_addq();
282
        }
278
            tcg_gen_movi_i64(cpu_T[0], disp16);
283 279
        if (clear)
284
            gen_op_n7();
280
            tcg_gen_andi_i64(cpu_T[0], cpu_T[0], ~0x7);
285 281
        (*gen_load_op)(ctx);
286 282
        if (ra != 31)
287 283
            tcg_gen_mov_i64(cpu_ir[ra], cpu_T[1]);
......
294 290
                                         int clear)
295 291
{
296 292
    if (rb != 31)
297
        tcg_gen_mov_i64(cpu_T[0], cpu_ir[rb]);
293
        tcg_gen_addi_i64(cpu_T[0], cpu_ir[rb], disp16);
298 294
    else
299
        tcg_gen_movi_i64(cpu_T[0], 0);
300
    if (disp16 != 0) {
301
        tcg_gen_movi_i64(cpu_T[1], disp16);
302
        gen_op_addq();
303
    }
295
        tcg_gen_movi_i64(cpu_T[0], disp16);
304 296
    if (clear)
305
        gen_op_n7();
297
        tcg_gen_andi_i64(cpu_T[0], cpu_T[0], ~0x7);
306 298
    if (ra != 31)
307 299
        tcg_gen_mov_i64(cpu_T[1], cpu_ir[ra]);
308 300
    else
......
315 307
                                         int ra, int rb, int32_t disp16)
316 308
{
317 309
    if (rb != 31)
318
        tcg_gen_mov_i64(cpu_T[0], cpu_ir[rb]);
310
        tcg_gen_addi_i64(cpu_T[0], cpu_ir[rb], disp16);
319 311
    else
320
        tcg_gen_movi_i64(cpu_T[0], 0);
321
    if (disp16 != 0) {
322
        tcg_gen_movi_i64(cpu_T[1], disp16);
323
        gen_op_addq();
324
    }
312
        tcg_gen_movi_i64(cpu_T[0], disp16);
325 313
    (*gen_load_fop)(ctx);
326 314
    gen_store_fir(ctx, ra, 1);
327 315
}
......
331 319
                                          int ra, int rb, int32_t disp16)
332 320
{
333 321
    if (rb != 31)
334
        tcg_gen_mov_i64(cpu_T[0], cpu_ir[rb]);
322
        tcg_gen_addi_i64(cpu_T[0], cpu_ir[rb], disp16);
335 323
    else
336
        tcg_gen_movi_i64(cpu_T[0], 0);
337
    if (disp16 != 0) {
338
        tcg_gen_movi_i64(cpu_T[1], disp16);
339
        gen_op_addq();
340
    }
324
        tcg_gen_movi_i64(cpu_T[0], disp16);
341 325
    gen_load_fir(ctx, ra, 1);
342 326
    (*gen_store_fop)(ctx);
343 327
}
......
346 330
                                     void (*gen_test_op)(void),
347 331
                                     int ra, int32_t disp16)
348 332
{
349
    if (disp16 != 0) {
350
        tcg_gen_movi_i64(cpu_T[0], ctx->pc);
351
        tcg_gen_movi_i64(cpu_T[1], disp16 << 2);
352
        gen_op_addq1();
353
    } else {
354
        tcg_gen_movi_i64(cpu_T[1], ctx->pc);
355
    }
333
    tcg_gen_movi_i64(cpu_T[1], ctx->pc + (int64_t)(disp16 << 2));
356 334
    if (ra != 31)
357 335
        tcg_gen_mov_i64(cpu_T[0], cpu_ir[ra]);
358 336
    else
......
365 343
                                      void (*gen_test_op)(void),
366 344
                                      int ra, int32_t disp16)
367 345
{
368
    if (disp16 != 0) {
369
        tcg_gen_movi_i64(cpu_T[0], ctx->pc);
370
        tcg_gen_movi_i64(cpu_T[1], disp16 << 2);
371
        gen_op_addq1();
372
    } else {
373
        tcg_gen_movi_i64(cpu_T[1], ctx->pc);
374
    }
346
    tcg_gen_movi_i64(cpu_T[1], ctx->pc + (int64_t)(disp16 << 2));
375 347
    gen_load_fir(ctx, ra, 0);
376 348
    (*gen_test_op)();
377 349
    _gen_op_bcond(ctx);
......
484 456

  
485 457
static always_inline void gen_s4addl (void)
486 458
{
487
    gen_op_s4();
459
    tcg_gen_shli_i64(cpu_T[0], cpu_T[0], 2);
488 460
    gen_op_addl();
489 461
}
490 462

  
491 463
static always_inline void gen_s4subl (void)
492 464
{
493
    gen_op_s4();
465
    tcg_gen_shli_i64(cpu_T[0], cpu_T[0], 2);
494 466
    gen_op_subl();
495 467
}
496 468

  
497 469
static always_inline void gen_s8addl (void)
498 470
{
499
    gen_op_s8();
471
    tcg_gen_shli_i64(cpu_T[0], cpu_T[0], 3);
500 472
    gen_op_addl();
501 473
}
502 474

  
503 475
static always_inline void gen_s8subl (void)
504 476
{
505
    gen_op_s8();
477
    tcg_gen_shli_i64(cpu_T[0], cpu_T[0], 3);
506 478
    gen_op_subl();
507 479
}
508 480

  
509 481
static always_inline void gen_s4addq (void)
510 482
{
511
    gen_op_s4();
512
    gen_op_addq();
483
    tcg_gen_shli_i64(cpu_T[0], cpu_T[0], 2);
484
    tcg_gen_add_i64(cpu_T[0], cpu_T[0], cpu_T[1]);
513 485
}
514 486

  
515 487
static always_inline void gen_s4subq (void)
516 488
{
517
    gen_op_s4();
518
    gen_op_subq();
489
    tcg_gen_shli_i64(cpu_T[0], cpu_T[0], 2);
490
    tcg_gen_sub_i64(cpu_T[0], cpu_T[0], cpu_T[1]);
519 491
}
520 492

  
521 493
static always_inline void gen_s8addq (void)
522 494
{
523
    gen_op_s8();
524
    gen_op_addq();
495
    tcg_gen_shli_i64(cpu_T[0], cpu_T[0], 3);
496
    tcg_gen_add_i64(cpu_T[0], cpu_T[0], cpu_T[1]);
525 497
}
526 498

  
527 499
static always_inline void gen_s8subq (void)
528 500
{
529
    gen_op_s8();
530
    gen_op_subq();
501
    tcg_gen_shli_i64(cpu_T[0], cpu_T[0], 3);
502
    tcg_gen_sub_i64(cpu_T[0], cpu_T[0], cpu_T[1]);
531 503
}
532 504

  
533 505
static always_inline void gen_amask (void)
......
1383 1355
        else
1384 1356
            tcg_gen_movi_i64(cpu_T[0], 0);
1385 1357
        tcg_gen_movi_i64(cpu_T[1], disp12);
1386
        gen_op_addq();
1358
        tcg_gen_add_i64(cpu_T[0], cpu_T[0], cpu_T[1]);
1387 1359
        switch ((insn >> 12) & 0xF) {
1388 1360
        case 0x0:
1389 1361
            /* Longword physical access */
......
1638 1610
            else
1639 1611
                tcg_gen_movi_i64(cpu_T[0], 0);
1640 1612
            tcg_gen_movi_i64(cpu_T[1], (((int64_t)insn << 51) >> 51));
1641
            gen_op_addq();
1613
            tcg_gen_add_i64(cpu_T[0], cpu_T[0], cpu_T[1]);
1642 1614
            gen_op_hw_ret();
1643 1615
        }
1644 1616
        ret = 2;
......
1652 1624
        if (!ctx->pal_mode)
1653 1625
            goto invalid_opc;
1654 1626
        if (ra != 31)
1655
            tcg_gen_mov_i64(cpu_T[0], cpu_ir[rb]);
1627
            tcg_gen_addi_i64(cpu_T[0], cpu_ir[rb], disp12);
1656 1628
        else
1657
            tcg_gen_movi_i64(cpu_T[0], 0);
1658
        tcg_gen_movi_i64(cpu_T[1], disp12);
1659
        gen_op_addq();
1629
            tcg_gen_movi_i64(cpu_T[0], disp12);
1660 1630
        if (ra != 31)
1661 1631
            tcg_gen_mov_i64(cpu_T[1], cpu_ir[ra]);
1662 1632
        else

Also available in: Unified diff