Revision 5d0fc900 target-mips/op.c

b/target-mips/op.c
377 377

  
378 378
#define FLOAT_OP(name, p) void OPPROTO op_float_##name##_##p(void)
379 379

  
380
FLOAT_OP(cvtd, s)
381
{
382
    CALL_FROM_TB0(do_float_cvtd_s);
383
    DEBUG_FPU_STATE();
384
    FORCE_RET();
385
}
386
FLOAT_OP(cvtd, w)
387
{
388
    CALL_FROM_TB0(do_float_cvtd_w);
389
    DEBUG_FPU_STATE();
390
    FORCE_RET();
391
}
392
FLOAT_OP(cvtd, l)
393
{
394
    CALL_FROM_TB0(do_float_cvtd_l);
395
    DEBUG_FPU_STATE();
396
    FORCE_RET();
397
}
398
FLOAT_OP(cvtl, d)
399
{
400
    CALL_FROM_TB0(do_float_cvtl_d);
401
    DEBUG_FPU_STATE();
402
    FORCE_RET();
403
}
404
FLOAT_OP(cvtl, s)
405
{
406
    CALL_FROM_TB0(do_float_cvtl_s);
407
    DEBUG_FPU_STATE();
408
    FORCE_RET();
409
}
410 380
FLOAT_OP(cvtps, s)
411 381
{
412 382
    WT2 = WT0;
......
414 384
    DEBUG_FPU_STATE();
415 385
    FORCE_RET();
416 386
}
417
FLOAT_OP(cvtps, pw)
418
{
419
    CALL_FROM_TB0(do_float_cvtps_pw);
420
    DEBUG_FPU_STATE();
421
    FORCE_RET();
422
}
423
FLOAT_OP(cvtpw, ps)
424
{
425
    CALL_FROM_TB0(do_float_cvtpw_ps);
426
    DEBUG_FPU_STATE();
427
    FORCE_RET();
428
}
429
FLOAT_OP(cvts, d)
430
{
431
    CALL_FROM_TB0(do_float_cvts_d);
432
    DEBUG_FPU_STATE();
433
    FORCE_RET();
434
}
435
FLOAT_OP(cvts, w)
436
{
437
    CALL_FROM_TB0(do_float_cvts_w);
438
    DEBUG_FPU_STATE();
439
    FORCE_RET();
440
}
441
FLOAT_OP(cvts, l)
442
{
443
    CALL_FROM_TB0(do_float_cvts_l);
444
    DEBUG_FPU_STATE();
445
    FORCE_RET();
446
}
447
FLOAT_OP(cvts, pl)
448
{
449
    CALL_FROM_TB0(do_float_cvts_pl);
450
    DEBUG_FPU_STATE();
451
    FORCE_RET();
452
}
453
FLOAT_OP(cvts, pu)
454
{
455
    CALL_FROM_TB0(do_float_cvts_pu);
456
    DEBUG_FPU_STATE();
457
    FORCE_RET();
458
}
459
FLOAT_OP(cvtw, s)
460
{
461
    CALL_FROM_TB0(do_float_cvtw_s);
462
    DEBUG_FPU_STATE();
463
    FORCE_RET();
464
}
465
FLOAT_OP(cvtw, d)
466
{
467
    CALL_FROM_TB0(do_float_cvtw_d);
468
    DEBUG_FPU_STATE();
469
    FORCE_RET();
470
}
471 387

  
472 388
FLOAT_OP(pll, ps)
473 389
{
......
494 410
    FORCE_RET();
495 411
}
496 412

  
497
#define FLOAT_ROUNDOP(op, ttype, stype)                    \
498
FLOAT_OP(op ## ttype, stype)                               \
499
{                                                          \
500
    CALL_FROM_TB0(do_float_ ## op ## ttype ## _ ## stype); \
501
    DEBUG_FPU_STATE();                                     \
502
    FORCE_RET();                                           \
503
}
504

  
505
FLOAT_ROUNDOP(round, l, d)
506
FLOAT_ROUNDOP(round, l, s)
507
FLOAT_ROUNDOP(round, w, d)
508
FLOAT_ROUNDOP(round, w, s)
509

  
510
FLOAT_ROUNDOP(trunc, l, d)
511
FLOAT_ROUNDOP(trunc, l, s)
512
FLOAT_ROUNDOP(trunc, w, d)
513
FLOAT_ROUNDOP(trunc, w, s)
514

  
515
FLOAT_ROUNDOP(ceil, l, d)
516
FLOAT_ROUNDOP(ceil, l, s)
517
FLOAT_ROUNDOP(ceil, w, d)
518
FLOAT_ROUNDOP(ceil, w, s)
519

  
520
FLOAT_ROUNDOP(floor, l, d)
521
FLOAT_ROUNDOP(floor, l, s)
522
FLOAT_ROUNDOP(floor, w, d)
523
FLOAT_ROUNDOP(floor, w, s)
524
#undef FLOAR_ROUNDOP
525

  
526 413
FLOAT_OP(movf, d)
527 414
{
528 415
    if (!(env->fpu->fcr31 & PARAM1))
......
618 505
    FORCE_RET();
619 506
}
620 507

  
621
/* operations calling helpers, for s, d and ps */
622
#define FLOAT_HOP(name)   \
623
FLOAT_OP(name, d)         \
624
{                         \
625
    CALL_FROM_TB0(do_float_ ## name ## _d);  \
626
    DEBUG_FPU_STATE();    \
627
    FORCE_RET();          \
628
}                         \
629
FLOAT_OP(name, s)         \
630
{                         \
631
    CALL_FROM_TB0(do_float_ ## name ## _s);  \
632
    DEBUG_FPU_STATE();    \
633
    FORCE_RET();          \
634
}                         \
635
FLOAT_OP(name, ps)        \
636
{                         \
637
    CALL_FROM_TB0(do_float_ ## name ## _ps); \
638
    DEBUG_FPU_STATE();    \
639
    FORCE_RET();          \
640
}
641
FLOAT_HOP(add)
642
FLOAT_HOP(sub)
643
FLOAT_HOP(mul)
644
FLOAT_HOP(div)
645
FLOAT_HOP(recip2)
646
FLOAT_HOP(rsqrt2)
647
FLOAT_HOP(rsqrt1)
648
FLOAT_HOP(recip1)
649
#undef FLOAT_HOP
650

  
651
/* operations calling helpers, for s and d */
652
#define FLOAT_HOP(name)   \
653
FLOAT_OP(name, d)         \
654
{                         \
655
    CALL_FROM_TB0(do_float_ ## name ## _d);  \
656
    DEBUG_FPU_STATE();    \
657
    FORCE_RET();          \
658
}                         \
659
FLOAT_OP(name, s)         \
660
{                         \
661
    CALL_FROM_TB0(do_float_ ## name ## _s);  \
662
    DEBUG_FPU_STATE();    \
663
    FORCE_RET();          \
664
}
665
FLOAT_HOP(rsqrt)
666
FLOAT_HOP(recip)
667
#undef FLOAT_HOP
668

  
669
/* operations calling helpers, for ps */
670
#define FLOAT_HOP(name)   \
671
FLOAT_OP(name, ps)        \
672
{                         \
673
    CALL_FROM_TB0(do_float_ ## name ## _ps); \
674
    DEBUG_FPU_STATE();    \
675
    FORCE_RET();          \
676
}
677
FLOAT_HOP(addr)
678
FLOAT_HOP(mulr)
679
#undef FLOAT_HOP
680

  
681 508
/* ternary operations */
682 509
#define FLOAT_TERNOP(name1, name2) \
683 510
FLOAT_OP(name1 ## name2, d)        \
......
836 663

  
837 664
extern void dump_fpu_s(CPUState *env);
838 665

  
839
#define CMP_OP(fmt, op)                                \
840
void OPPROTO op_cmp ## _ ## fmt ## _ ## op(void)       \
841
{                                                      \
842
    CALL_FROM_TB1(do_cmp ## _ ## fmt ## _ ## op, PARAM1); \
843
    DEBUG_FPU_STATE();                                 \
844
    FORCE_RET();                                       \
845
}                                                      \
846
void OPPROTO op_cmpabs ## _ ## fmt ## _ ## op(void)    \
847
{                                                      \
848
    CALL_FROM_TB1(do_cmpabs ## _ ## fmt ## _ ## op, PARAM1); \
849
    DEBUG_FPU_STATE();                                 \
850
    FORCE_RET();                                       \
851
}
852
#define CMP_OPS(op)   \
853
CMP_OP(d, op)         \
854
CMP_OP(s, op)         \
855
CMP_OP(ps, op)
856

  
857
CMP_OPS(f)
858
CMP_OPS(un)
859
CMP_OPS(eq)
860
CMP_OPS(ueq)
861
CMP_OPS(olt)
862
CMP_OPS(ult)
863
CMP_OPS(ole)
864
CMP_OPS(ule)
865
CMP_OPS(sf)
866
CMP_OPS(ngle)
867
CMP_OPS(seq)
868
CMP_OPS(ngl)
869
CMP_OPS(lt)
870
CMP_OPS(nge)
871
CMP_OPS(le)
872
CMP_OPS(ngt)
873
#undef CMP_OPS
874
#undef CMP_OP
875

  
876 666
void op_bc1f (void)
877 667
{
878 668
    T0 = !!(~GET_FP_COND(env->fpu) & (0x1 << PARAM1));

Also available in: Unified diff