Revision 2ea815ca target-sparc/translate.c

b/target-sparc/translate.c
311 311
    tcg_gen_brcondi_tl(TCG_COND_GE, r_temp, 0, l2);
312 312
    tcg_gen_ori_i32(cpu_psr, cpu_psr, PSR_NEG);
313 313
    gen_set_label(l2);
314
    tcg_temp_free(r_temp);
314 315
}
315 316

  
316 317
#ifdef TARGET_SPARC64
......
344 345
    tcg_gen_brcond_tl(TCG_COND_GEU, dst, src1, l1);
345 346
    tcg_gen_ori_i32(cpu_psr, cpu_psr, PSR_CARRY);
346 347
    gen_set_label(l1);
348
    tcg_temp_free(r_temp);
347 349
}
348 350

  
349 351
#ifdef TARGET_SPARC64
......
374 376
    tcg_gen_andi_tl(r_temp, r_temp, (1 << 31));
375 377
    tcg_gen_shri_tl(r_temp, r_temp, 31 - PSR_OVF_SHIFT);
376 378
    tcg_gen_trunc_tl_i32(cpu_tmp32, r_temp);
379
    tcg_temp_free(r_temp);
377 380
    tcg_gen_or_i32(cpu_psr, cpu_psr, cpu_tmp32);
378 381
}
379 382

  
......
390 393
    tcg_gen_andi_tl(r_temp, r_temp, (1ULL << 63));
391 394
    tcg_gen_shri_tl(r_temp, r_temp, 63 - PSR_OVF_SHIFT);
392 395
    tcg_gen_trunc_tl_i32(cpu_tmp32, r_temp);
396
    tcg_temp_free(r_temp);
393 397
    tcg_gen_or_i32(cpu_xcc, cpu_xcc, cpu_tmp32);
394 398
}
395 399
#endif
396 400

  
397 401
static inline void gen_add_tv(TCGv dst, TCGv src1, TCGv src2)
398 402
{
399
    TCGv r_temp;
403
    TCGv r_temp, r_const;
400 404
    int l1;
401 405

  
402 406
    l1 = gen_new_label();
......
408 412
    tcg_gen_and_tl(r_temp, r_temp, cpu_tmp0);
409 413
    tcg_gen_andi_tl(r_temp, r_temp, (1 << 31));
410 414
    tcg_gen_brcondi_tl(TCG_COND_EQ, r_temp, 0, l1);
411
    tcg_gen_helper_0_1(raise_exception, tcg_const_i32(TT_TOVF));
415
    r_const = tcg_const_i32(TT_TOVF);
416
    tcg_gen_helper_0_1(raise_exception, r_const);
417
    tcg_temp_free(r_const);
412 418
    gen_set_label(l1);
419
    tcg_temp_free(r_temp);
413 420
}
414 421

  
415 422
static inline void gen_cc_V_tag(TCGv src1, TCGv src2)
......
427 434
static inline void gen_tag_tv(TCGv src1, TCGv src2)
428 435
{
429 436
    int l1;
437
    TCGv r_const;
430 438

  
431 439
    l1 = gen_new_label();
432 440
    tcg_gen_or_tl(cpu_tmp0, src1, src2);
433 441
    tcg_gen_andi_tl(cpu_tmp0, cpu_tmp0, 0x3);
434 442
    tcg_gen_brcondi_tl(TCG_COND_EQ, cpu_tmp0, 0, l1);
435
    tcg_gen_helper_0_1(raise_exception, tcg_const_i32(TT_TOVF));
443
    r_const = tcg_const_i32(TT_TOVF);
444
    tcg_gen_helper_0_1(raise_exception, r_const);
445
    tcg_temp_free(r_const);
436 446
    gen_set_label(l1);
437 447
}
438 448

  
......
533 543
    tcg_gen_brcond_tl(TCG_COND_GEU, r_temp1, r_temp2, l1);
534 544
    tcg_gen_ori_i32(cpu_psr, cpu_psr, PSR_CARRY);
535 545
    gen_set_label(l1);
546
    tcg_temp_free(r_temp1);
547
    tcg_temp_free(r_temp2);
536 548
}
537 549

  
538 550
#ifdef TARGET_SPARC64
......
563 575
    tcg_gen_shri_tl(r_temp, r_temp, 31 - PSR_OVF_SHIFT);
564 576
    tcg_gen_trunc_tl_i32(cpu_tmp32, r_temp);
565 577
    tcg_gen_or_i32(cpu_psr, cpu_psr, cpu_tmp32);
578
    tcg_temp_free(r_temp);
566 579
}
567 580

  
568 581
#ifdef TARGET_SPARC64
......
578 591
    tcg_gen_shri_tl(r_temp, r_temp, 63 - PSR_OVF_SHIFT);
579 592
    tcg_gen_trunc_tl_i32(cpu_tmp32, r_temp);
580 593
    tcg_gen_or_i32(cpu_xcc, cpu_xcc, cpu_tmp32);
594
    tcg_temp_free(r_temp);
581 595
}
582 596
#endif
583 597

  
584 598
static inline void gen_sub_tv(TCGv dst, TCGv src1, TCGv src2)
585 599
{
586
    TCGv r_temp;
600
    TCGv r_temp, r_const;
587 601
    int l1;
588 602

  
589 603
    l1 = gen_new_label();
......
594 608
    tcg_gen_and_tl(r_temp, r_temp, cpu_tmp0);
595 609
    tcg_gen_andi_tl(r_temp, r_temp, (1 << 31));
596 610
    tcg_gen_brcondi_tl(TCG_COND_EQ, r_temp, 0, l1);
597
    tcg_gen_helper_0_1(raise_exception, tcg_const_i32(TT_TOVF));
611
    r_const = tcg_const_i32(TT_TOVF);
612
    tcg_gen_helper_0_1(raise_exception, r_const);
613
    tcg_temp_free(r_const);
598 614
    gen_set_label(l1);
615
    tcg_temp_free(r_temp);
599 616
}
600 617

  
601 618
static inline void gen_op_sub_cc(TCGv dst, TCGv src1, TCGv src2)
......
708 725
    tcg_gen_ld_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, y));
709 726
    tcg_gen_shri_i32(cpu_tmp32, cpu_tmp32, 1);
710 727
    tcg_gen_or_i32(cpu_tmp32, cpu_tmp32, r_temp2);
728
    tcg_temp_free(r_temp2);
711 729
    tcg_gen_st_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, y));
712 730

  
713 731
    // b1 = N ^ V;
714 732
    gen_mov_reg_N(cpu_tmp0, cpu_psr);
715 733
    gen_mov_reg_V(r_temp, cpu_psr);
716 734
    tcg_gen_xor_tl(cpu_tmp0, cpu_tmp0, r_temp);
735
    tcg_temp_free(r_temp);
717 736

  
718 737
    // T0 = (b1 << 31) | (T0 >> 1);
719 738
    // src1 = T0;
......
745 764
    tcg_gen_shri_i64(r_temp, r_temp2, 32);
746 765
    tcg_gen_trunc_i64_i32(r_temp, r_temp);
747 766
    tcg_gen_st_i32(r_temp, cpu_env, offsetof(CPUSPARCState, y));
767
    tcg_temp_free(r_temp);
748 768
#ifdef TARGET_SPARC64
749 769
    tcg_gen_mov_i64(dst, r_temp2);
750 770
#else
751 771
    tcg_gen_trunc_i64_tl(dst, r_temp2);
752 772
#endif
773
    tcg_temp_free(r_temp2);
753 774
}
754 775

  
755 776
static inline void gen_op_smul(TCGv dst, TCGv src1, TCGv src2)
......
766 787
    tcg_gen_shri_i64(r_temp, r_temp2, 32);
767 788
    tcg_gen_trunc_i64_i32(r_temp, r_temp);
768 789
    tcg_gen_st_i32(r_temp, cpu_env, offsetof(CPUSPARCState, y));
790
    tcg_temp_free(r_temp);
769 791
#ifdef TARGET_SPARC64
770 792
    tcg_gen_mov_i64(dst, r_temp2);
771 793
#else
772 794
    tcg_gen_trunc_i64_tl(dst, r_temp2);
773 795
#endif
796
    tcg_temp_free(r_temp2);
774 797
}
775 798

  
776 799
#ifdef TARGET_SPARC64
777 800
static inline void gen_trap_ifdivzero_tl(TCGv divisor)
778 801
{
802
    TCGv r_const;
779 803
    int l1;
780 804

  
781 805
    l1 = gen_new_label();
782 806
    tcg_gen_brcondi_tl(TCG_COND_NE, divisor, 0, l1);
783
    tcg_gen_helper_0_1(raise_exception, tcg_const_i32(TT_DIV_ZERO));
807
    r_const = tcg_const_i32(TT_DIV_ZERO);
808
    tcg_gen_helper_0_1(raise_exception, r_const);
809
    tcg_temp_free(r_const);
784 810
    gen_set_label(l1);
785 811
}
786 812

  
......
1563 1589

  
1564 1590
static inline void gen_op_fpexception_im(int fsr_flags)
1565 1591
{
1592
    TCGv r_const;
1593

  
1566 1594
    tcg_gen_andi_tl(cpu_fsr, cpu_fsr, ~FSR_FTT_MASK);
1567 1595
    tcg_gen_ori_tl(cpu_fsr, cpu_fsr, fsr_flags);
1568
    tcg_gen_helper_0_1(raise_exception, tcg_const_i32(TT_FP_EXCP));
1596
    r_const = tcg_const_i32(TT_FP_EXCP);
1597
    tcg_gen_helper_0_1(raise_exception, r_const);
1598
    tcg_temp_free(r_const);
1569 1599
}
1570 1600

  
1571 1601
static int gen_trap_ifnofpu(DisasContext *dc, TCGv r_cond)
1572 1602
{
1573 1603
#if !defined(CONFIG_USER_ONLY)
1574 1604
    if (!dc->fpu_enabled) {
1605
        TCGv r_const;
1606

  
1575 1607
        save_state(dc, r_cond);
1576
        tcg_gen_helper_0_1(raise_exception, tcg_const_i32(TT_NFPU_INSN));
1608
        r_const = tcg_const_i32(TT_NFPU_INSN);
1609
        tcg_gen_helper_0_1(raise_exception, r_const);
1610
        tcg_temp_free(r_const);
1577 1611
        dc->is_br = 1;
1578 1612
        return 1;
1579 1613
    }
......
1613 1647
static inline void gen_ld_asi(TCGv dst, TCGv addr, int insn, int size,
1614 1648
                              int sign)
1615 1649
{
1616
    TCGv r_asi;
1650
    TCGv r_asi, r_size, r_sign;
1617 1651

  
1618 1652
    r_asi = gen_get_asi(insn, addr);
1619
    tcg_gen_helper_1_4(helper_ld_asi, dst, addr, r_asi,
1620
                       tcg_const_i32(size), tcg_const_i32(sign));
1653
    r_size = tcg_const_i32(size);
1654
    r_sign = tcg_const_i32(sign);
1655
    tcg_gen_helper_1_4(helper_ld_asi, dst, addr, r_asi, r_size, r_sign);
1656
    tcg_temp_free(r_sign);
1657
    tcg_temp_free(r_size);
1658
    tcg_temp_free(r_asi);
1621 1659
}
1622 1660

  
1623 1661
static inline void gen_st_asi(TCGv src, TCGv addr, int insn, int size)
1624 1662
{
1625
    TCGv r_asi;
1663
    TCGv r_asi, r_size;
1626 1664

  
1627 1665
    r_asi = gen_get_asi(insn, addr);
1628
    tcg_gen_helper_0_4(helper_st_asi, addr, src, r_asi, tcg_const_i32(size));
1666
    r_size = tcg_const_i32(size);
1667
    tcg_gen_helper_0_4(helper_st_asi, addr, src, r_asi, r_size);
1668
    tcg_temp_free(r_size);
1669
    tcg_temp_free(r_asi);
1629 1670
}
1630 1671

  
1631 1672
static inline void gen_ldf_asi(TCGv addr, int insn, int size, int rd)
1632 1673
{
1633
    TCGv r_asi;
1674
    TCGv r_asi, r_size, r_rd;
1634 1675

  
1635 1676
    r_asi = gen_get_asi(insn, addr);
1636
    tcg_gen_helper_0_4(helper_ldf_asi, addr, r_asi, tcg_const_i32(size),
1637
                       tcg_const_i32(rd));
1677
    r_size = tcg_const_i32(size);
1678
    r_rd = tcg_const_i32(rd);
1679
    tcg_gen_helper_0_4(helper_ldf_asi, addr, r_asi, r_size, r_rd);
1680
    tcg_temp_free(r_rd);
1681
    tcg_temp_free(r_size);
1682
    tcg_temp_free(r_asi);
1638 1683
}
1639 1684

  
1640 1685
static inline void gen_stf_asi(TCGv addr, int insn, int size, int rd)
1641 1686
{
1642
    TCGv r_asi;
1687
    TCGv r_asi, r_size, r_rd;
1643 1688

  
1644 1689
    r_asi = gen_get_asi(insn, addr);
1645
    tcg_gen_helper_0_4(helper_stf_asi, addr, r_asi, tcg_const_i32(size),
1646
                       tcg_const_i32(rd));
1690
    r_size = tcg_const_i32(size);
1691
    r_rd = tcg_const_i32(rd);
1692
    tcg_gen_helper_0_4(helper_stf_asi, addr, r_asi, r_size, r_rd);
1693
    tcg_temp_free(r_rd);
1694
    tcg_temp_free(r_size);
1695
    tcg_temp_free(r_asi);
1647 1696
}
1648 1697

  
1649 1698
static inline void gen_swap_asi(TCGv dst, TCGv addr, int insn)
1650 1699
{
1651
    TCGv r_asi;
1700
    TCGv r_asi, r_size, r_sign;
1652 1701

  
1653 1702
    r_asi = gen_get_asi(insn, addr);
1654
    tcg_gen_helper_1_4(helper_ld_asi, cpu_tmp64, addr, r_asi,
1655
                       tcg_const_i32(4), tcg_const_i32(0));
1656
    tcg_gen_helper_0_4(helper_st_asi, addr, dst, r_asi,
1657
                       tcg_const_i32(4));
1703
    r_size = tcg_const_i32(4);
1704
    r_sign = tcg_const_i32(0);
1705
    tcg_gen_helper_1_4(helper_ld_asi, cpu_tmp64, addr, r_asi, r_size, r_sign);
1706
    tcg_temp_free(r_sign);
1707
    tcg_gen_helper_0_4(helper_st_asi, addr, dst, r_asi, r_size);
1708
    tcg_temp_free(r_size);
1709
    tcg_temp_free(r_asi);
1658 1710
    tcg_gen_trunc_i64_tl(dst, cpu_tmp64);
1659 1711
}
1660 1712

  
1661 1713
static inline void gen_ldda_asi(TCGv lo, TCGv hi, TCGv addr, int insn)
1662 1714
{
1663
    TCGv r_asi;
1715
    TCGv r_asi, r_size, r_sign;
1664 1716

  
1665 1717
    r_asi = gen_get_asi(insn, addr);
1666
    tcg_gen_helper_1_4(helper_ld_asi, cpu_tmp64, addr, r_asi,
1667
                       tcg_const_i32(8), tcg_const_i32(0));
1718
    r_size = tcg_const_i32(8);
1719
    r_sign = tcg_const_i32(0);
1720
    tcg_gen_helper_1_4(helper_ld_asi, cpu_tmp64, addr, r_asi, r_size, r_sign);
1721
    tcg_temp_free(r_sign);
1722
    tcg_temp_free(r_size);
1723
    tcg_temp_free(r_asi);
1668 1724
    tcg_gen_andi_i64(lo, cpu_tmp64, 0xffffffffULL);
1669 1725
    tcg_gen_shri_i64(cpu_tmp64, cpu_tmp64, 32);
1670 1726
    tcg_gen_andi_i64(hi, cpu_tmp64, 0xffffffffULL);
......
1672 1728

  
1673 1729
static inline void gen_stda_asi(TCGv hi, TCGv addr, int insn, int rd)
1674 1730
{
1675
    TCGv r_temp, r_asi;
1731
    TCGv r_temp, r_asi, r_size;
1676 1732

  
1677 1733
    r_temp = tcg_temp_new(TCG_TYPE_TL);
1678 1734
    gen_movl_reg_TN(rd + 1, r_temp);
1679 1735
    tcg_gen_helper_1_2(helper_pack64, cpu_tmp64, hi,
1680 1736
                       r_temp);
1737
    tcg_temp_free(r_temp);
1681 1738
    r_asi = gen_get_asi(insn, addr);
1682
    tcg_gen_helper_0_4(helper_st_asi, addr, cpu_tmp64, r_asi,
1683
                       tcg_const_i32(8));
1739
    r_size = tcg_const_i32(8);
1740
    tcg_gen_helper_0_4(helper_st_asi, addr, cpu_tmp64, r_asi, r_size);
1741
    tcg_temp_free(r_size);
1742
    tcg_temp_free(r_asi);
1684 1743
}
1685 1744

  
1686 1745
static inline void gen_cas_asi(TCGv dst, TCGv addr, TCGv val2, int insn,
......
1692 1751
    gen_movl_reg_TN(rd, r_val1);
1693 1752
    r_asi = gen_get_asi(insn, addr);
1694 1753
    tcg_gen_helper_1_4(helper_cas_asi, dst, addr, r_val1, val2, r_asi);
1754
    tcg_temp_free(r_asi);
1755
    tcg_temp_free(r_val1);
1695 1756
}
1696 1757

  
1697 1758
static inline void gen_casx_asi(TCGv dst, TCGv addr, TCGv val2, int insn,
......
1702 1763
    gen_movl_reg_TN(rd, cpu_tmp64);
1703 1764
    r_asi = gen_get_asi(insn, addr);
1704 1765
    tcg_gen_helper_1_4(helper_casx_asi, dst, addr, cpu_tmp64, val2, r_asi);
1766
    tcg_temp_free(r_asi);
1705 1767
}
1706 1768

  
1707 1769
#elif !defined(CONFIG_USER_ONLY)
......
1709 1771
static inline void gen_ld_asi(TCGv dst, TCGv addr, int insn, int size,
1710 1772
                              int sign)
1711 1773
{
1712
    int asi;
1774
    TCGv r_asi, r_size, r_sign;
1713 1775

  
1714
    asi = GET_FIELD(insn, 19, 26);
1715
    tcg_gen_helper_1_4(helper_ld_asi, cpu_tmp64, addr, tcg_const_i32(asi),
1716
                       tcg_const_i32(size), tcg_const_i32(sign));
1776
    r_asi = tcg_const_i32(GET_FIELD(insn, 19, 26));
1777
    r_size = tcg_const_i32(size);
1778
    r_sign = tcg_const_i32(sign);
1779
    tcg_gen_helper_1_4(helper_ld_asi, cpu_tmp64, addr, r_asi, r_size, r_sign);
1780
    tcg_temp_free(r_sign);
1781
    tcg_temp_free(r_size);
1782
    tcg_temp_free(r_asi);
1717 1783
    tcg_gen_trunc_i64_tl(dst, cpu_tmp64);
1718 1784
}
1719 1785

  
1720 1786
static inline void gen_st_asi(TCGv src, TCGv addr, int insn, int size)
1721 1787
{
1722
    int asi;
1788
    TCGv r_asi, r_size;
1723 1789

  
1724 1790
    tcg_gen_extu_tl_i64(cpu_tmp64, src);
1725
    asi = GET_FIELD(insn, 19, 26);
1726
    tcg_gen_helper_0_4(helper_st_asi, addr, cpu_tmp64, tcg_const_i32(asi),
1727
                       tcg_const_i32(size));
1791
    r_asi = tcg_const_i32(GET_FIELD(insn, 19, 26));
1792
    r_size = tcg_const_i32(size);
1793
    tcg_gen_helper_0_4(helper_st_asi, addr, cpu_tmp64, r_asi, r_size);
1794
    tcg_temp_free(r_size);
1795
    tcg_temp_free(r_asi);
1728 1796
}
1729 1797

  
1730 1798
static inline void gen_swap_asi(TCGv dst, TCGv addr, int insn)
1731 1799
{
1732
    int asi;
1800
    TCGv r_asi, r_size, r_sign;
1733 1801

  
1734
    asi = GET_FIELD(insn, 19, 26);
1735
    tcg_gen_helper_1_4(helper_ld_asi, cpu_tmp64, addr, tcg_const_i32(asi),
1736
                       tcg_const_i32(4), tcg_const_i32(0));
1737
    tcg_gen_helper_0_4(helper_st_asi, addr, dst, tcg_const_i32(asi),
1738
                       tcg_const_i32(4));
1802
    r_asi = tcg_const_i32(GET_FIELD(insn, 19, 26));
1803
    r_size = tcg_const_i32(4);
1804
    r_sign = tcg_const_i32(0);
1805
    tcg_gen_helper_1_4(helper_ld_asi, cpu_tmp64, addr, r_asi, r_size, r_sign);
1806
    tcg_temp_free(r_sign);
1807
    tcg_gen_helper_0_4(helper_st_asi, addr, dst, r_asi, r_size);
1808
    tcg_temp_free(r_size);
1809
    tcg_temp_free(r_asi);
1739 1810
    tcg_gen_trunc_i64_tl(dst, cpu_tmp64);
1740 1811
}
1741 1812

  
1742 1813
static inline void gen_ldda_asi(TCGv lo, TCGv hi, TCGv addr, int insn)
1743 1814
{
1744
    int asi;
1815
    TCGv r_asi, r_size, r_sign;
1745 1816

  
1746
    asi = GET_FIELD(insn, 19, 26);
1747
    tcg_gen_helper_1_4(helper_ld_asi, cpu_tmp64, addr, tcg_const_i32(asi),
1748
                       tcg_const_i32(8), tcg_const_i32(0));
1817
    r_asi = tcg_const_i32(GET_FIELD(insn, 19, 26));
1818
    r_size = tcg_const_i32(8);
1819
    r_sign = tcg_const_i32(0);
1820
    tcg_gen_helper_1_4(helper_ld_asi, cpu_tmp64, addr, r_asi, r_size, r_sign);
1821
    tcg_temp_free(r_sign);
1822
    tcg_temp_free(r_size);
1823
    tcg_temp_free(r_asi);
1749 1824
    tcg_gen_trunc_i64_tl(lo, cpu_tmp64);
1750 1825
    tcg_gen_shri_i64(cpu_tmp64, cpu_tmp64, 32);
1751 1826
    tcg_gen_trunc_i64_tl(hi, cpu_tmp64);
......
1753 1828

  
1754 1829
static inline void gen_stda_asi(TCGv hi, TCGv addr, int insn, int rd)
1755 1830
{
1756
    int asi;
1757
    TCGv r_temp;
1831
    TCGv r_temp, r_asi, r_size;
1758 1832

  
1759 1833
    r_temp = tcg_temp_new(TCG_TYPE_TL);
1760 1834
    gen_movl_reg_TN(rd + 1, r_temp);
1761 1835
    tcg_gen_helper_1_2(helper_pack64, cpu_tmp64, hi, r_temp);
1762
    asi = GET_FIELD(insn, 19, 26);
1763
    tcg_gen_helper_0_4(helper_st_asi, addr, cpu_tmp64, tcg_const_i32(asi),
1764
                       tcg_const_i32(8));
1836
    tcg_temp_free(r_temp);
1837
    r_asi = tcg_const_i32(GET_FIELD(insn, 19, 26));
1838
    r_size = tcg_const_i32(8);
1839
    tcg_gen_helper_0_4(helper_st_asi, addr, cpu_tmp64, r_asi, r_size);
1840
    tcg_temp_free(r_size);
1841
    tcg_temp_free(r_asi);
1765 1842
}
1766 1843
#endif
1767 1844

  
1768 1845
#if !defined(CONFIG_USER_ONLY) || defined(TARGET_SPARC64)
1769 1846
static inline void gen_ldstub_asi(TCGv dst, TCGv addr, int insn)
1770 1847
{
1771
    int asi;
1848
    TCGv r_val, r_asi, r_size;
1772 1849

  
1773 1850
    gen_ld_asi(dst, addr, insn, 1, 0);
1774 1851

  
1775
    asi = GET_FIELD(insn, 19, 26);
1776
    tcg_gen_helper_0_4(helper_st_asi, addr, tcg_const_i64(0xffULL),
1777
                       tcg_const_i32(asi), tcg_const_i32(1));
1852
    r_val = tcg_const_i64(0xffULL);
1853
    r_asi = tcg_const_i32(GET_FIELD(insn, 19, 26));
1854
    r_size = tcg_const_i32(1);
1855
    tcg_gen_helper_0_4(helper_st_asi, addr, r_val, r_asi, r_size);
1856
    tcg_temp_free(r_size);
1857
    tcg_temp_free(r_asi);
1858
    tcg_temp_free(r_val);
1778 1859
}
1779 1860
#endif
1780 1861

  
......
1802 1883

  
1803 1884
    if (IS_IMM) { /* immediate */
1804 1885
        rs2 = GET_FIELDs(insn, 19, 31);
1805
        r_rs2 = tcg_const_tl((int)rs2);
1886
        r_rs2 = tcg_const_tl((int)rs2); // XXX how to free?
1806 1887
    } else { /* register */
1807 1888
        rs2 = GET_FIELD(insn, 27, 31);
1808 1889
        if (rs2 == 0)
1809
            r_rs2 = tcg_const_tl(0);
1890
            r_rs2 = tcg_const_tl(0); // XXX how to free?
1810 1891
        else if (rs2 < 8)
1811 1892
            r_rs2 = cpu_gregs[rs2];
1812 1893
        else
......
1913 1994
            case 0x4:           /* SETHI */
1914 1995
                if (rd) { // nop
1915 1996
                    uint32_t value = GET_FIELD(insn, 10, 31);
1916
                    gen_movl_TN_reg(rd, tcg_const_tl(value << 10));
1997
                    TCGv r_const;
1998

  
1999
                    r_const = tcg_const_tl(value << 10);
2000
                    gen_movl_TN_reg(rd, r_const);
2001
                    tcg_temp_free(r_const);
1917 2002
                }
1918 2003
                break;
1919 2004
            case 0x0:           /* UNIMPL */
......
1926 2011
    case 1:
1927 2012
        /*CALL*/ {
1928 2013
            target_long target = GET_FIELDs(insn, 2, 31) << 2;
2014
            TCGv r_const;
1929 2015

  
1930
            gen_movl_TN_reg(15, tcg_const_tl(dc->pc));
2016
            r_const = tcg_const_tl(dc->pc);
2017
            gen_movl_TN_reg(15, r_const);
2018
            tcg_temp_free(r_const);
1931 2019
            target += dc->pc;
1932 2020
            gen_mov_pc_npc(dc, cpu_cond);
1933 2021
            dc->npc = target;
......
1973 2061
                    gen_cond(r_cond, 0, cond);
1974 2062
#endif
1975 2063
                    tcg_gen_helper_0_2(helper_trapcc, cpu_dst, r_cond);
2064
                    tcg_temp_free(r_cond);
1976 2065
                }
1977 2066
                gen_op_next_insn();
1978 2067
                tcg_gen_exit_tb(0);
......
2016 2105
                                       offsetof(CPUState, tick));
2017 2106
                        tcg_gen_helper_1_1(helper_tick_get_count, cpu_dst,
2018 2107
                                           r_tickptr);
2108
                        tcg_temp_free(r_tickptr);
2019 2109
                        gen_movl_TN_reg(rd, cpu_dst);
2020 2110
                    }
2021 2111
                    break;
2022 2112
                case 0x5: /* V9 rdpc */
2023
                    gen_movl_TN_reg(rd, tcg_const_tl(dc->pc));
2113
                    {
2114
                        TCGv r_const;
2115

  
2116
                        r_const = tcg_const_tl(dc->pc);
2117
                        gen_movl_TN_reg(rd, r_const);
2118
                        tcg_temp_free(r_const);
2119
                    }
2024 2120
                    break;
2025 2121
                case 0x6: /* V9 rdfprs */
2026 2122
                    tcg_gen_ld_i32(cpu_tmp32, cpu_env,
......
2051 2147
                                       offsetof(CPUState, stick));
2052 2148
                        tcg_gen_helper_1_1(helper_tick_get_count, cpu_dst,
2053 2149
                                           r_tickptr);
2150
                        tcg_temp_free(r_tickptr);
2054 2151
                        gen_movl_TN_reg(rd, cpu_dst);
2055 2152
                    }
2056 2153
                    break;
......
2127 2224
                                       offsetof(CPUState, tsptr));
2128 2225
                        tcg_gen_ld_tl(cpu_dst, r_tsptr,
2129 2226
                                      offsetof(trap_state, tpc));
2227
                        tcg_temp_free(r_tsptr);
2130 2228
                    }
2131 2229
                    break;
2132 2230
                case 1: // tnpc
......
2138 2236
                                       offsetof(CPUState, tsptr));
2139 2237
                        tcg_gen_ld_tl(cpu_dst, r_tsptr,
2140 2238
                                      offsetof(trap_state, tnpc));
2239
                        tcg_temp_free(r_tsptr);
2141 2240
                    }
2142 2241
                    break;
2143 2242
                case 2: // tstate
......
2149 2248
                                       offsetof(CPUState, tsptr));
2150 2249
                        tcg_gen_ld_tl(cpu_dst, r_tsptr,
2151 2250
                                      offsetof(trap_state, tstate));
2251
                        tcg_temp_free(r_tsptr);
2152 2252
                    }
2153 2253
                    break;
2154 2254
                case 3: // tt
......
2160 2260
                                       offsetof(CPUState, tsptr));
2161 2261
                        tcg_gen_ld_i32(cpu_dst, r_tsptr,
2162 2262
                                       offsetof(trap_state, tt));
2263
                        tcg_temp_free(r_tsptr);
2163 2264
                    }
2164 2265
                    break;
2165 2266
                case 4: // tick
......
2172 2273
                        tcg_gen_helper_1_1(helper_tick_get_count, cpu_dst,
2173 2274
                                           r_tickptr);
2174 2275
                        gen_movl_TN_reg(rd, cpu_dst);
2276
                        tcg_temp_free(r_tickptr);
2175 2277
                    }
2176 2278
                    break;
2177 2279
                case 5: // tba
......
2653 2755
                        glue(glue(gen_op_store_, size_FDQ), T0_fpr)     \
2654 2756
                            (glue(size_FDQ, FPREG(rd)));                \
2655 2757
                        gen_set_label(l1);                              \
2758
                        tcg_temp_free(r_cond);                          \
2656 2759
                    }
2657 2760
                    case 0x001: /* V9 fmovscc %fcc0 */
2658 2761
                        FMOVCC(F, 0);
......
2711 2814
                        glue(glue(gen_op_store_, size_FDQ), T0_fpr)     \
2712 2815
                            (glue(size_FDQ, FPREG(rd)));                \
2713 2816
                        gen_set_label(l1);                              \
2817
                        tcg_temp_free(r_cond);                          \
2714 2818
                    }
2715 2819

  
2716 2820
                    case 0x101: /* V9 fmovscc %icc */
......
2776 2880
                if (rs1 == 0) {
2777 2881
                    // or %g0, x, y -> mov T0, x; mov y, T0
2778 2882
                    if (IS_IMM) {       /* immediate */
2883
                        TCGv r_const;
2884

  
2779 2885
                        rs2 = GET_FIELDs(insn, 19, 31);
2780
                        gen_movl_TN_reg(rd, tcg_const_tl((int)rs2));
2886
                        r_const = tcg_const_tl((int)rs2);
2887
                        gen_movl_TN_reg(rd, r_const);
2888
                        tcg_temp_free(r_const);
2781 2889
                    } else {            /* register */
2782 2890
                        rs2 = GET_FIELD(insn, 27, 31);
2783 2891
                        gen_movl_reg_TN(rs2, cpu_dst);
......
3107 3215
                                                   offsetof(CPUState, tick));
3108 3216
                                    tcg_gen_helper_0_2(helper_tick_set_limit,
3109 3217
                                                       r_tickptr, cpu_dst);
3218
                                    tcg_temp_free(r_tickptr);
3110 3219
                                }
3111 3220
                                break;
3112 3221
                            case 0x18: /* System tick */
......
3124 3233
                                                   offsetof(CPUState, stick));
3125 3234
                                    tcg_gen_helper_0_2(helper_tick_set_count,
3126 3235
                                                       r_tickptr, cpu_dst);
3236
                                    tcg_temp_free(r_tickptr);
3127 3237
                                }
3128 3238
                                break;
3129 3239
                            case 0x19: /* System tick compare */
......
3144 3254
                                                   offsetof(CPUState, stick));
3145 3255
                                    tcg_gen_helper_0_2(helper_tick_set_limit,
3146 3256
                                                       r_tickptr, cpu_dst);
3257
                                    tcg_temp_free(r_tickptr);
3147 3258
                                }
3148 3259
                                break;
3149 3260

  
......
3207 3318
                                                   offsetof(CPUState, tsptr));
3208 3319
                                    tcg_gen_st_tl(cpu_dst, r_tsptr,
3209 3320
                                                  offsetof(trap_state, tpc));
3321
                                    tcg_temp_free(r_tsptr);
3210 3322
                                }
3211 3323
                                break;
3212 3324
                            case 1: // tnpc
......
3218 3330
                                                   offsetof(CPUState, tsptr));
3219 3331
                                    tcg_gen_st_tl(cpu_dst, r_tsptr,
3220 3332
                                                  offsetof(trap_state, tnpc));
3333
                                    tcg_temp_free(r_tsptr);
3221 3334
                                }
3222 3335
                                break;
3223 3336
                            case 2: // tstate
......
3230 3343
                                    tcg_gen_st_tl(cpu_dst, r_tsptr,
3231 3344
                                                  offsetof(trap_state,
3232 3345
                                                           tstate));
3346
                                    tcg_temp_free(r_tsptr);
3233 3347
                                }
3234 3348
                                break;
3235 3349
                            case 3: // tt
......
3241 3355
                                                   offsetof(CPUState, tsptr));
3242 3356
                                    tcg_gen_st_i32(cpu_dst, r_tsptr,
3243 3357
                                                   offsetof(trap_state, tt));
3358
                                    tcg_temp_free(r_tsptr);
3244 3359
                                }
3245 3360
                                break;
3246 3361
                            case 4: // tick
......
3252 3367
                                                   offsetof(CPUState, tick));
3253 3368
                                    tcg_gen_helper_0_2(helper_tick_set_count,
3254 3369
                                                       r_tickptr, cpu_dst);
3370
                                    tcg_temp_free(r_tickptr);
3255 3371
                                }
3256 3372
                                break;
3257 3373
                            case 5: // tba
......
3378 3494
                                                   offsetof(CPUState, hstick));
3379 3495
                                    tcg_gen_helper_0_2(helper_tick_set_limit,
3380 3496
                                                       r_tickptr, cpu_dst);
3497
                                    tcg_temp_free(r_tickptr);
3381 3498
                                }
3382 3499
                                break;
3383 3500
                            case 6: // hver readonly
......
3412 3529

  
3413 3530
                            tcg_gen_brcondi_tl(TCG_COND_EQ, r_cond, 0, l1);
3414 3531
                            if (IS_IMM) {       /* immediate */
3532
                                TCGv r_const;
3533

  
3415 3534
                                rs2 = GET_FIELD_SPs(insn, 0, 10);
3416
                                gen_movl_TN_reg(rd, tcg_const_tl((int)rs2));
3535
                                r_const = tcg_const_tl((int)rs2);
3536
                                gen_movl_TN_reg(rd, r_const);
3537
                                tcg_temp_free(r_const);
3417 3538
                            } else {
3418 3539
                                rs2 = GET_FIELD_SP(insn, 0, 4);
3419 3540
                                gen_movl_reg_TN(rs2, cpu_tmp0);
3420 3541
                                gen_movl_TN_reg(rd, cpu_tmp0);
3421 3542
                            }
3422 3543
                            gen_set_label(l1);
3544
                            tcg_temp_free(r_cond);
3423 3545
                            break;
3424 3546
                        }
3425 3547
                    case 0x2d: /* V9 sdivx */
......
3445 3567
                            tcg_gen_brcondi_tl(gen_tcg_cond_reg[cond],
3446 3568
                                              cpu_src1, 0, l1);
3447 3569
                            if (IS_IMM) {       /* immediate */
3570
                                TCGv r_const;
3571

  
3448 3572
                                rs2 = GET_FIELD_SPs(insn, 0, 9);
3449
                                gen_movl_TN_reg(rd, tcg_const_tl((int)rs2));
3573
                                r_const = tcg_const_tl((int)rs2);
3574
                                gen_movl_TN_reg(rd, r_const);
3575
                                tcg_temp_free(r_const);
3450 3576
                            } else {
3451 3577
                                rs2 = GET_FIELD_SP(insn, 0, 4);
3452 3578
                                gen_movl_reg_TN(rs2, cpu_tmp0);
......
3934 4060
#endif
3935 4061
#ifdef TARGET_SPARC64
3936 4062
            } else if (xop == 0x39) { /* V9 return */
4063
                TCGv r_const;
4064

  
3937 4065
                save_state(dc, cpu_cond);
3938 4066
                cpu_src1 = get_src1(insn, cpu_src1);
3939 4067
                if (IS_IMM) {   /* immediate */
......
3949 4077
                }
3950 4078
                tcg_gen_helper_0_0(helper_restore);
3951 4079
                gen_mov_pc_npc(dc, cpu_cond);
3952
                tcg_gen_helper_0_2(helper_check_align, cpu_dst,
3953
                                   tcg_const_i32(3));
4080
                r_const = tcg_const_i32(3);
4081
                tcg_gen_helper_0_2(helper_check_align, cpu_dst, r_const);
4082
                tcg_temp_free(r_const);
3954 4083
                tcg_gen_mov_tl(cpu_npc, cpu_dst);
3955 4084
                dc->npc = DYNAMIC_PC;
3956 4085
                goto jmp_insn;
......
3971 4100
                switch (xop) {
3972 4101
                case 0x38:      /* jmpl */
3973 4102
                    {
3974
                        gen_movl_TN_reg(rd, tcg_const_tl(dc->pc));
4103
                        TCGv r_const;
4104

  
4105
                        r_const = tcg_const_tl(dc->pc);
4106
                        gen_movl_TN_reg(rd, r_const);
4107
                        tcg_temp_free(r_const);
3975 4108
                        gen_mov_pc_npc(dc, cpu_cond);
4109
                        r_const = tcg_const_i32(3);
3976 4110
                        tcg_gen_helper_0_2(helper_check_align, cpu_dst,
3977
                                           tcg_const_i32(3));
4111
                                           r_const);
4112
                        tcg_temp_free(r_const);
3978 4113
                        tcg_gen_mov_tl(cpu_npc, cpu_dst);
3979 4114
                        dc->npc = DYNAMIC_PC;
3980 4115
                    }
......
3982 4117
#if !defined(CONFIG_USER_ONLY) && !defined(TARGET_SPARC64)
3983 4118
                case 0x39:      /* rett, V9 return */
3984 4119
                    {
4120
                        TCGv r_const;
4121

  
3985 4122
                        if (!supervisor(dc))
3986 4123
                            goto priv_insn;
3987 4124
                        gen_mov_pc_npc(dc, cpu_cond);
4125
                        r_const = tcg_const_i32(3);
3988 4126
                        tcg_gen_helper_0_2(helper_check_align, cpu_dst,
3989
                                           tcg_const_i32(3));
4127
                                           r_const);
4128
                        tcg_temp_free(r_const);
3990 4129
                        tcg_gen_mov_tl(cpu_npc, cpu_dst);
3991 4130
                        dc->npc = DYNAMIC_PC;
3992 4131
                        tcg_gen_helper_0_0(helper_rett);
......
4080 4219
                    if (rd & 1)
4081 4220
                        goto illegal_insn;
4082 4221
                    else {
4222
                        TCGv r_const;
4223

  
4083 4224
                        save_state(dc, cpu_cond);
4084
                        tcg_gen_helper_0_2(helper_check_align, cpu_addr,
4085
                                           tcg_const_i32(7)); // XXX remove
4225
                        r_const = tcg_const_i32(7);
4226
                        tcg_gen_helper_0_2(helper_check_align, cpu_dst,
4227
                                           r_const); // XXX remove
4228
                        tcg_temp_free(r_const);
4086 4229
                        ABI32_MASK(cpu_addr);
4087 4230
                        tcg_gen_qemu_ld64(cpu_tmp64, cpu_addr, dc->mem_idx);
4088 4231
                        tcg_gen_trunc_i64_tl(cpu_tmp0, cpu_tmp64);
......
4102 4245
                    tcg_gen_qemu_ld16s(cpu_val, cpu_addr, dc->mem_idx);
4103 4246
                    break;
4104 4247
                case 0xd:       /* ldstub -- XXX: should be atomically */
4105
                    ABI32_MASK(cpu_addr);
4106
                    tcg_gen_qemu_ld8s(cpu_val, cpu_addr, dc->mem_idx);
4107
                    tcg_gen_qemu_st8(tcg_const_tl(0xff), cpu_addr,
4108
                                     dc->mem_idx);
4248
                    {
4249
                        TCGv r_const;
4250

  
4251
                        ABI32_MASK(cpu_addr);
4252
                        tcg_gen_qemu_ld8s(cpu_val, cpu_addr, dc->mem_idx);
4253
                        r_const = tcg_const_tl(0xff);
4254
                        tcg_gen_qemu_st8(r_const, cpu_addr, dc->mem_idx);
4255
                        tcg_temp_free(r_const);
4256
                    }
4109 4257
                    break;
4110 4258
                case 0x0f:      /* swap register with memory. Also
4111 4259
                                   atomically */
......
4272 4420
                    tcg_gen_helper_0_0(helper_ldfsr);
4273 4421
                    break;
4274 4422
                case 0x22:      /* load quad fpreg */
4275
                    CHECK_FPU_FEATURE(dc, FLOAT128);
4276
                    tcg_gen_helper_0_2(helper_ldqf, cpu_addr,
4277
                                       tcg_const_i32(dc->mem_idx));
4278
                    gen_op_store_QT0_fpr(QFPREG(rd));
4423
                    {
4424
                        TCGv r_const;
4425

  
4426
                        CHECK_FPU_FEATURE(dc, FLOAT128);
4427
                        r_const = tcg_const_i32(dc->mem_idx);
4428
                        tcg_gen_helper_0_2(helper_ldqf, cpu_addr, r_const);
4429
                        tcg_temp_free(r_const);
4430
                        gen_op_store_QT0_fpr(QFPREG(rd));
4431
                    }
4279 4432
                    break;
4280 4433
                case 0x23:      /* load double fpreg */
4281
                    tcg_gen_helper_0_2(helper_lddf, cpu_addr,
4282
                                       tcg_const_i32(dc->mem_idx));
4283
                    gen_op_store_DT0_fpr(DFPREG(rd));
4434
                    {
4435
                        TCGv r_const;
4436

  
4437
                        r_const = tcg_const_i32(dc->mem_idx);
4438
                        tcg_gen_helper_0_2(helper_lddf, cpu_addr, r_const);
4439
                        tcg_temp_free(r_const);
4440
                        gen_op_store_DT0_fpr(DFPREG(rd));
4441
                    }
4284 4442
                    break;
4285 4443
                default:
4286 4444
                    goto illegal_insn;
......
4305 4463
                    if (rd & 1)
4306 4464
                        goto illegal_insn;
4307 4465
                    else {
4308
                        TCGv r_low;
4466
                        TCGv r_low, r_const;
4309 4467

  
4310 4468
                        save_state(dc, cpu_cond);
4311 4469
                        ABI32_MASK(cpu_addr);
4470
                        r_const = tcg_const_i32(7);
4312 4471
                        tcg_gen_helper_0_2(helper_check_align, cpu_addr,
4313
                                           tcg_const_i32(7)); // XXX remove
4472
                                           r_const); // XXX remove
4473
                        tcg_temp_free(r_const);
4314 4474
                        r_low = tcg_temp_new(TCG_TYPE_TL);
4315 4475
                        gen_movl_reg_TN(rd + 1, r_low);
4316 4476
                        tcg_gen_helper_1_2(helper_pack64, cpu_tmp64, cpu_val,
4317 4477
                                           r_low);
4478
                        tcg_temp_free(r_low);
4318 4479
                        tcg_gen_qemu_st64(cpu_tmp64, cpu_addr, dc->mem_idx);
4319 4480
                    }
4320 4481
                    break;
......
4398 4559
                case 0x26:
4399 4560
#ifdef TARGET_SPARC64
4400 4561
                    /* V9 stqf, store quad fpreg */
4401
                    CHECK_FPU_FEATURE(dc, FLOAT128);
4402
                    gen_op_load_fpr_QT0(QFPREG(rd));
4403
                    tcg_gen_helper_0_2(helper_stqf, cpu_addr,
4404
                                       tcg_const_i32(dc->mem_idx));
4562
                    {
4563
                        TCGv r_const;
4564

  
4565
                        CHECK_FPU_FEATURE(dc, FLOAT128);
4566
                        gen_op_load_fpr_QT0(QFPREG(rd));
4567
                        r_const = tcg_const_i32(dc->mem_idx);
4568
                        tcg_gen_helper_0_2(helper_stqf, cpu_addr, r_const);
4569
                        tcg_temp_free(r_const);
4570
                    }
4405 4571
                    break;
4406 4572
#else /* !TARGET_SPARC64 */
4407 4573
                    /* stdfq, store floating point queue */
......
4416 4582
#endif
4417 4583
#endif
4418 4584
                case 0x27: /* store double fpreg */
4419
                    gen_op_load_fpr_DT0(DFPREG(rd));
4420
                    tcg_gen_helper_0_2(helper_stdf, cpu_addr,
4421
                                       tcg_const_i32(dc->mem_idx));
4585
                    {
4586
                        TCGv r_const;
4587

  
4588
                        gen_op_load_fpr_DT0(DFPREG(rd));
4589
                        r_const = tcg_const_i32(dc->mem_idx);
4590
                        tcg_gen_helper_0_2(helper_stdf, cpu_addr, r_const);
4591
                        tcg_temp_free(r_const);
4592
                    }
4422 4593
                    break;
4423 4594
                default:
4424 4595
                    goto illegal_insn;
......
4432 4603
                    gen_stf_asi(cpu_addr, insn, 4, rd);
4433 4604
                    break;
4434 4605
                case 0x36: /* V9 stqfa */
4435
                    CHECK_FPU_FEATURE(dc, FLOAT128);
4436
                    tcg_gen_helper_0_2(helper_check_align, cpu_addr,
4437
                                       tcg_const_i32(7));
4438
                    gen_op_load_fpr_QT0(QFPREG(rd));
4439
                    gen_stf_asi(cpu_addr, insn, 16, QFPREG(rd));
4606
                    {
4607
                        TCGv r_const;
4608

  
4609
                        CHECK_FPU_FEATURE(dc, FLOAT128);
4610
                        r_const = tcg_const_i32(7);
4611
                        tcg_gen_helper_0_2(helper_check_align, cpu_addr,
4612
                                           r_const);
4613
                        tcg_temp_free(r_const);
4614
                        gen_op_load_fpr_QT0(QFPREG(rd));
4615
                        gen_stf_asi(cpu_addr, insn, 16, QFPREG(rd));
4616
                    }
4440 4617
                    break;
4441 4618
                case 0x37: /* V9 stdfa */
4442 4619
                    gen_op_load_fpr_DT0(DFPREG(rd));
......
4481 4658
 jmp_insn:
4482 4659
    return;
4483 4660
 illegal_insn:
4484
    save_state(dc, cpu_cond);
4485
    tcg_gen_helper_0_1(raise_exception, tcg_const_i32(TT_ILL_INSN));
4486
    dc->is_br = 1;
4661
    {
4662
        TCGv r_const;
4663

  
4664
        save_state(dc, cpu_cond);
4665
        r_const = tcg_const_i32(TT_ILL_INSN);
4666
        tcg_gen_helper_0_1(raise_exception, r_const);
4667
        tcg_temp_free(r_const);
4668
        dc->is_br = 1;
4669
    }
4487 4670
    return;
4488 4671
 unimp_flush:
4489
    save_state(dc, cpu_cond);
4490
    tcg_gen_helper_0_1(raise_exception, tcg_const_i32(TT_UNIMP_FLUSH));
4491
    dc->is_br = 1;
4672
    {
4673
        TCGv r_const;
4674

  
4675
        save_state(dc, cpu_cond);
4676
        r_const = tcg_const_i32(TT_UNIMP_FLUSH);
4677
        tcg_gen_helper_0_1(raise_exception, r_const);
4678
        tcg_temp_free(r_const);
4679
        dc->is_br = 1;
4680
    }
4492 4681
    return;
4493 4682
#if !defined(CONFIG_USER_ONLY)
4494 4683
 priv_insn:
4495
    save_state(dc, cpu_cond);
4496
    tcg_gen_helper_0_1(raise_exception, tcg_const_i32(TT_PRIV_INSN));
4497
    dc->is_br = 1;
4684
    {
4685
        TCGv r_const;
4686

  
4687
        save_state(dc, cpu_cond);
4688
        r_const = tcg_const_i32(TT_PRIV_INSN);
4689
        tcg_gen_helper_0_1(raise_exception, r_const);
4690
        tcg_temp_free(r_const);
4691
        dc->is_br = 1;
4692
    }
4498 4693
    return;
4499 4694
#endif
4500 4695
 nfpu_insn:
......
4511 4706
#endif
4512 4707
#ifndef TARGET_SPARC64
4513 4708
 ncp_insn:
4514
    save_state(dc, cpu_cond);
4515
    tcg_gen_helper_0_1(raise_exception, tcg_const_i32(TT_NCP_INSN));
4516
    dc->is_br = 1;
4709
    {
4710
        TCGv r_const;
4711

  
4712
        save_state(dc, cpu_cond);
4713
        r_const = tcg_const_i32(TT_NCP_INSN);
4714
        tcg_gen_helper_0_1(raise_exception, r_const);
4715
        tcg_temp_free(r_const);
4716
        dc->is_br = 1;
4717
    }
4517 4718
    return;
4518 4719
#endif
4519 4720
}
......
4596 4797
             (dc->pc - pc_start) < (TARGET_PAGE_SIZE - 32));
4597 4798

  
4598 4799
 exit_gen_loop:
4800
    tcg_temp_free(cpu_tmp64);
4801
    tcg_temp_free(cpu_tmp32);
4802
    tcg_temp_free(cpu_tmp0);
4599 4803
    if (!dc->is_br) {
4600 4804
        if (dc->pc != DYNAMIC_PC &&
4601 4805
            (dc->npc != DYNAMIC_PC && dc->npc != JUMP_PC)) {

Also available in: Unified diff