Revision 19e6c4b8 target-i386/op.c

b/target-i386/op.c
1401 1401
#endif
1402 1402
};
1403 1403

  
1404
/* floating point support. Some of the code for complicated x87
1405
   functions comes from the LGPL'ed x86 emulator found in the Willows
1406
   TWIN windows emulator. */
1407

  
1408
/* fp load FT0 */
1409

  
1410
void OPPROTO op_flds_FT0_A0(void)
1411
{
1412
#ifdef USE_FP_CONVERT
1413
    FP_CONVERT.i32 = ldl(A0);
1414
    FT0 = FP_CONVERT.f;
1415
#else
1416
    FT0 = ldfl(A0);
1417
#endif
1418
}
1419

  
1420
void OPPROTO op_fldl_FT0_A0(void)
1421
{
1422
#ifdef USE_FP_CONVERT
1423
    FP_CONVERT.i64 = ldq(A0);
1424
    FT0 = FP_CONVERT.d;
1425
#else
1426
    FT0 = ldfq(A0);
1427
#endif
1428
}
1429

  
1430
/* helpers are needed to avoid static constant reference. XXX: find a better way */
1431
#ifdef USE_INT_TO_FLOAT_HELPERS
1432

  
1433
void helper_fild_FT0_A0(void)
1434
{
1435
    FT0 = (CPU86_LDouble)ldsw(A0);
1436
}
1437

  
1438
void helper_fildl_FT0_A0(void)
1439
{
1440
    FT0 = (CPU86_LDouble)((int32_t)ldl(A0));
1441
}
1442

  
1443
void helper_fildll_FT0_A0(void)
1444
{
1445
    FT0 = (CPU86_LDouble)((int64_t)ldq(A0));
1446
}
1447

  
1448
void OPPROTO op_fild_FT0_A0(void)
1449
{
1450
    helper_fild_FT0_A0();
1451
}
1452

  
1453
void OPPROTO op_fildl_FT0_A0(void)
1454
{
1455
    helper_fildl_FT0_A0();
1456
}
1457

  
1458
void OPPROTO op_fildll_FT0_A0(void)
1459
{
1460
    helper_fildll_FT0_A0();
1461
}
1462

  
1463
#else
1464

  
1465
void OPPROTO op_fild_FT0_A0(void)
1466
{
1467
#ifdef USE_FP_CONVERT
1468
    FP_CONVERT.i32 = ldsw(A0);
1469
    FT0 = (CPU86_LDouble)FP_CONVERT.i32;
1470
#else
1471
    FT0 = (CPU86_LDouble)ldsw(A0);
1472
#endif
1473
}
1474

  
1475
void OPPROTO op_fildl_FT0_A0(void)
1476
{
1477
#ifdef USE_FP_CONVERT
1478
    FP_CONVERT.i32 = (int32_t) ldl(A0);
1479
    FT0 = (CPU86_LDouble)FP_CONVERT.i32;
1480
#else
1481
    FT0 = (CPU86_LDouble)((int32_t)ldl(A0));
1482
#endif
1483
}
1484

  
1485
void OPPROTO op_fildll_FT0_A0(void)
1486
{
1487
#ifdef USE_FP_CONVERT
1488
    FP_CONVERT.i64 = (int64_t) ldq(A0);
1489
    FT0 = (CPU86_LDouble)FP_CONVERT.i64;
1490
#else
1491
    FT0 = (CPU86_LDouble)((int64_t)ldq(A0));
1492
#endif
1493
}
1494
#endif
1495

  
1496
/* fp load ST0 */
1497

  
1498
void OPPROTO op_flds_ST0_A0(void)
1499
{
1500
    int new_fpstt;
1501
    new_fpstt = (env->fpstt - 1) & 7;
1502
#ifdef USE_FP_CONVERT
1503
    FP_CONVERT.i32 = ldl(A0);
1504
    env->fpregs[new_fpstt].d = FP_CONVERT.f;
1505
#else
1506
    env->fpregs[new_fpstt].d = ldfl(A0);
1507
#endif
1508
    env->fpstt = new_fpstt;
1509
    env->fptags[new_fpstt] = 0; /* validate stack entry */
1510
}
1511

  
1512
void OPPROTO op_fldl_ST0_A0(void)
1513
{
1514
    int new_fpstt;
1515
    new_fpstt = (env->fpstt - 1) & 7;
1516
#ifdef USE_FP_CONVERT
1517
    FP_CONVERT.i64 = ldq(A0);
1518
    env->fpregs[new_fpstt].d = FP_CONVERT.d;
1519
#else
1520
    env->fpregs[new_fpstt].d = ldfq(A0);
1521
#endif
1522
    env->fpstt = new_fpstt;
1523
    env->fptags[new_fpstt] = 0; /* validate stack entry */
1524
}
1525

  
1526
void OPPROTO op_fldt_ST0_A0(void)
1527
{
1528
    helper_fldt_ST0_A0();
1529
}
1530

  
1531
/* helpers are needed to avoid static constant reference. XXX: find a better way */
1532
#ifdef USE_INT_TO_FLOAT_HELPERS
1533

  
1534
void helper_fild_ST0_A0(void)
1535
{
1536
    int new_fpstt;
1537
    new_fpstt = (env->fpstt - 1) & 7;
1538
    env->fpregs[new_fpstt].d = (CPU86_LDouble)ldsw(A0);
1539
    env->fpstt = new_fpstt;
1540
    env->fptags[new_fpstt] = 0; /* validate stack entry */
1541
}
1542

  
1543
void helper_fildl_ST0_A0(void)
1544
{
1545
    int new_fpstt;
1546
    new_fpstt = (env->fpstt - 1) & 7;
1547
    env->fpregs[new_fpstt].d = (CPU86_LDouble)((int32_t)ldl(A0));
1548
    env->fpstt = new_fpstt;
1549
    env->fptags[new_fpstt] = 0; /* validate stack entry */
1550
}
1551

  
1552
void helper_fildll_ST0_A0(void)
1553
{
1554
    int new_fpstt;
1555
    new_fpstt = (env->fpstt - 1) & 7;
1556
    env->fpregs[new_fpstt].d = (CPU86_LDouble)((int64_t)ldq(A0));
1557
    env->fpstt = new_fpstt;
1558
    env->fptags[new_fpstt] = 0; /* validate stack entry */
1559
}
1560

  
1561
void OPPROTO op_fild_ST0_A0(void)
1562
{
1563
    helper_fild_ST0_A0();
1564
}
1565

  
1566
void OPPROTO op_fildl_ST0_A0(void)
1567
{
1568
    helper_fildl_ST0_A0();
1569
}
1570

  
1571
void OPPROTO op_fildll_ST0_A0(void)
1572
{
1573
    helper_fildll_ST0_A0();
1574
}
1575

  
1576
#else
1577

  
1578
void OPPROTO op_fild_ST0_A0(void)
1579
{
1580
    int new_fpstt;
1581
    new_fpstt = (env->fpstt - 1) & 7;
1582
#ifdef USE_FP_CONVERT
1583
    FP_CONVERT.i32 = ldsw(A0);
1584
    env->fpregs[new_fpstt].d = (CPU86_LDouble)FP_CONVERT.i32;
1585
#else
1586
    env->fpregs[new_fpstt].d = (CPU86_LDouble)ldsw(A0);
1587
#endif
1588
    env->fpstt = new_fpstt;
1589
    env->fptags[new_fpstt] = 0; /* validate stack entry */
1590
}
1591

  
1592
void OPPROTO op_fildl_ST0_A0(void)
1593
{
1594
    int new_fpstt;
1595
    new_fpstt = (env->fpstt - 1) & 7;
1596
#ifdef USE_FP_CONVERT
1597
    FP_CONVERT.i32 = (int32_t) ldl(A0);
1598
    env->fpregs[new_fpstt].d = (CPU86_LDouble)FP_CONVERT.i32;
1599
#else
1600
    env->fpregs[new_fpstt].d = (CPU86_LDouble)((int32_t)ldl(A0));
1601
#endif
1602
    env->fpstt = new_fpstt;
1603
    env->fptags[new_fpstt] = 0; /* validate stack entry */
1604
}
1605

  
1606
void OPPROTO op_fildll_ST0_A0(void)
1607
{
1608
    int new_fpstt;
1609
    new_fpstt = (env->fpstt - 1) & 7;
1610
#ifdef USE_FP_CONVERT
1611
    FP_CONVERT.i64 = (int64_t) ldq(A0);
1612
    env->fpregs[new_fpstt].d = (CPU86_LDouble)FP_CONVERT.i64;
1613
#else
1614
    env->fpregs[new_fpstt].d = (CPU86_LDouble)((int64_t)ldq(A0));
1615
#endif
1616
    env->fpstt = new_fpstt;
1617
    env->fptags[new_fpstt] = 0; /* validate stack entry */
1618
}
1619

  
1620
#endif
1621

  
1622
/* fp store */
1623

  
1624
void OPPROTO op_fsts_ST0_A0(void)
1625
{
1626
#ifdef USE_FP_CONVERT
1627
    FP_CONVERT.f = (float)ST0;
1628
    stfl(A0, FP_CONVERT.f);
1629
#else
1630
    stfl(A0, (float)ST0);
1631
#endif
1632
    FORCE_RET();
1633
}
1634

  
1635
void OPPROTO op_fstl_ST0_A0(void)
1636
{
1637
    stfq(A0, (double)ST0);
1638
    FORCE_RET();
1639
}
1640

  
1641
void OPPROTO op_fstt_ST0_A0(void)
1642
{
1643
    helper_fstt_ST0_A0();
1644
}
1645

  
1646
void OPPROTO op_fist_ST0_A0(void)
1647
{
1648
#if defined(__sparc__) && !defined(__sparc_v9__)
1649
    register CPU86_LDouble d asm("o0");
1650
#else
1651
    CPU86_LDouble d;
1652
#endif
1653
    int val;
1654

  
1655
    d = ST0;
1656
    val = floatx_to_int32(d, &env->fp_status);
1657
    if (val != (int16_t)val)
1658
        val = -32768;
1659
    stw(A0, val);
1660
    FORCE_RET();
1661
}
1662

  
1663
void OPPROTO op_fistl_ST0_A0(void)
1664
{
1665
#if defined(__sparc__) && !defined(__sparc_v9__)
1666
    register CPU86_LDouble d asm("o0");
1667
#else
1668
    CPU86_LDouble d;
1669
#endif
1670
    int val;
1671

  
1672
    d = ST0;
1673
    val = floatx_to_int32(d, &env->fp_status);
1674
    stl(A0, val);
1675
    FORCE_RET();
1676
}
1677

  
1678
void OPPROTO op_fistll_ST0_A0(void)
1679
{
1680
#if defined(__sparc__) && !defined(__sparc_v9__)
1681
    register CPU86_LDouble d asm("o0");
1682
#else
1683
    CPU86_LDouble d;
1684
#endif
1685
    int64_t val;
1686

  
1687
    d = ST0;
1688
    val = floatx_to_int64(d, &env->fp_status);
1689
    stq(A0, val);
1690
    FORCE_RET();
1691
}
1692

  
1693
void OPPROTO op_fistt_ST0_A0(void)
1694
{
1695
#if defined(__sparc__) && !defined(__sparc_v9__)
1696
    register CPU86_LDouble d asm("o0");
1697
#else
1698
    CPU86_LDouble d;
1699
#endif
1700
    int val;
1701

  
1702
    d = ST0;
1703
    val = floatx_to_int32_round_to_zero(d, &env->fp_status);
1704
    if (val != (int16_t)val)
1705
        val = -32768;
1706
    stw(A0, val);
1707
    FORCE_RET();
1708
}
1709

  
1710
void OPPROTO op_fisttl_ST0_A0(void)
1711
{
1712
#if defined(__sparc__) && !defined(__sparc_v9__)
1713
    register CPU86_LDouble d asm("o0");
1714
#else
1715
    CPU86_LDouble d;
1716
#endif
1717
    int val;
1718

  
1719
    d = ST0;
1720
    val = floatx_to_int32_round_to_zero(d, &env->fp_status);
1721
    stl(A0, val);
1722
    FORCE_RET();
1723
}
1724

  
1725
void OPPROTO op_fisttll_ST0_A0(void)
1726
{
1727
#if defined(__sparc__) && !defined(__sparc_v9__)
1728
    register CPU86_LDouble d asm("o0");
1729
#else
1730
    CPU86_LDouble d;
1731
#endif
1732
    int64_t val;
1733

  
1734
    d = ST0;
1735
    val = floatx_to_int64_round_to_zero(d, &env->fp_status);
1736
    stq(A0, val);
1737
    FORCE_RET();
1738
}
1739

  
1740
void OPPROTO op_fbld_ST0_A0(void)
1741
{
1742
    helper_fbld_ST0_A0();
1743
}
1744

  
1745
void OPPROTO op_fbst_ST0_A0(void)
1746
{
1747
    helper_fbst_ST0_A0();
1748
}
1749

  
1750
/* FPU move */
1751

  
1752
void OPPROTO op_fpush(void)
1753
{
1754
    fpush();
1755
}
1756

  
1757
void OPPROTO op_fpop(void)
1758
{
1759
    fpop();
1760
}
1761

  
1762
void OPPROTO op_fdecstp(void)
1763
{
1764
    env->fpstt = (env->fpstt - 1) & 7;
1765
    env->fpus &= (~0x4700);
1766
}
1767

  
1768
void OPPROTO op_fincstp(void)
1769
{
1770
    env->fpstt = (env->fpstt + 1) & 7;
1771
    env->fpus &= (~0x4700);
1772
}
1773

  
1774
void OPPROTO op_ffree_STN(void)
1775
{
1776
    env->fptags[(env->fpstt + PARAM1) & 7] = 1;
1777
}
1778

  
1779
void OPPROTO op_fmov_ST0_FT0(void)
1780
{
1781
    ST0 = FT0;
1782
}
1783

  
1784
void OPPROTO op_fmov_FT0_STN(void)
1785
{
1786
    FT0 = ST(PARAM1);
1787
}
1788

  
1789
void OPPROTO op_fmov_ST0_STN(void)
1790
{
1791
    ST0 = ST(PARAM1);
1792
}
1793

  
1794
void OPPROTO op_fmov_STN_ST0(void)
1795
{
1796
    ST(PARAM1) = ST0;
1797
}
1798

  
1799
void OPPROTO op_fxchg_ST0_STN(void)
1404
void OPPROTO op_fcomi_dummy(void)
1800 1405
{
1801
    CPU86_LDouble tmp;
1802
    tmp = ST(PARAM1);
1803
    ST(PARAM1) = ST0;
1804
    ST0 = tmp;
1805
}
1806

  
1807
/* FPU operations */
1808

  
1809
const int fcom_ccval[4] = {0x0100, 0x4000, 0x0000, 0x4500};
1810

  
1811
void OPPROTO op_fcom_ST0_FT0(void)
1812
{
1813
    int ret;
1814

  
1815
    ret = floatx_compare(ST0, FT0, &env->fp_status);
1816
    env->fpus = (env->fpus & ~0x4500) | fcom_ccval[ret + 1];
1817
    FORCE_RET();
1818
}
1819

  
1820
void OPPROTO op_fucom_ST0_FT0(void)
1821
{
1822
    int ret;
1823

  
1824
    ret = floatx_compare_quiet(ST0, FT0, &env->fp_status);
1825
    env->fpus = (env->fpus & ~0x4500) | fcom_ccval[ret+ 1];
1826
    FORCE_RET();
1827
}
1828

  
1829
const int fcomi_ccval[4] = {CC_C, CC_Z, 0, CC_Z | CC_P | CC_C};
1830

  
1831
void OPPROTO op_fcomi_ST0_FT0(void)
1832
{
1833
    int eflags;
1834
    int ret;
1835

  
1836
    ret = floatx_compare(ST0, FT0, &env->fp_status);
1837
    eflags = cc_table[CC_OP].compute_all();
1838
    eflags = (eflags & ~(CC_Z | CC_P | CC_C)) | fcomi_ccval[ret + 1];
1839
    CC_SRC = eflags;
1840
    FORCE_RET();
1841
}
1842

  
1843
void OPPROTO op_fucomi_ST0_FT0(void)
1844
{
1845
    int eflags;
1846
    int ret;
1847

  
1848
    ret = floatx_compare_quiet(ST0, FT0, &env->fp_status);
1849
    eflags = cc_table[CC_OP].compute_all();
1850
    eflags = (eflags & ~(CC_Z | CC_P | CC_C)) | fcomi_ccval[ret + 1];
1851
    CC_SRC = eflags;
1852
    FORCE_RET();
1853
}
1854

  
1855
void OPPROTO op_fcmov_ST0_STN_T0(void)
1856
{
1857
    if (T0) {
1858
        ST0 = ST(PARAM1);
1859
    }
1860
    FORCE_RET();
1861
}
1862

  
1863
void OPPROTO op_fadd_ST0_FT0(void)
1864
{
1865
    ST0 += FT0;
1866
}
1867

  
1868
void OPPROTO op_fmul_ST0_FT0(void)
1869
{
1870
    ST0 *= FT0;
1871
}
1872

  
1873
void OPPROTO op_fsub_ST0_FT0(void)
1874
{
1875
    ST0 -= FT0;
1876
}
1877

  
1878
void OPPROTO op_fsubr_ST0_FT0(void)
1879
{
1880
    ST0 = FT0 - ST0;
1881
}
1882

  
1883
void OPPROTO op_fdiv_ST0_FT0(void)
1884
{
1885
    ST0 = helper_fdiv(ST0, FT0);
1886
}
1887

  
1888
void OPPROTO op_fdivr_ST0_FT0(void)
1889
{
1890
    ST0 = helper_fdiv(FT0, ST0);
1891
}
1892

  
1893
/* fp operations between STN and ST0 */
1894

  
1895
void OPPROTO op_fadd_STN_ST0(void)
1896
{
1897
    ST(PARAM1) += ST0;
1898
}
1899

  
1900
void OPPROTO op_fmul_STN_ST0(void)
1901
{
1902
    ST(PARAM1) *= ST0;
1903
}
1904

  
1905
void OPPROTO op_fsub_STN_ST0(void)
1906
{
1907
    ST(PARAM1) -= ST0;
1908
}
1909

  
1910
void OPPROTO op_fsubr_STN_ST0(void)
1911
{
1912
    CPU86_LDouble *p;
1913
    p = &ST(PARAM1);
1914
    *p = ST0 - *p;
1915
}
1916

  
1917
void OPPROTO op_fdiv_STN_ST0(void)
1918
{
1919
    CPU86_LDouble *p;
1920
    p = &ST(PARAM1);
1921
    *p = helper_fdiv(*p, ST0);
1922
}
1923

  
1924
void OPPROTO op_fdivr_STN_ST0(void)
1925
{
1926
    CPU86_LDouble *p;
1927
    p = &ST(PARAM1);
1928
    *p = helper_fdiv(ST0, *p);
1929
}
1930

  
1931
/* misc FPU operations */
1932
void OPPROTO op_fchs_ST0(void)
1933
{
1934
    ST0 = floatx_chs(ST0);
1935
}
1936

  
1937
void OPPROTO op_fabs_ST0(void)
1938
{
1939
    ST0 = floatx_abs(ST0);
1940
}
1941

  
1942
void OPPROTO op_fxam_ST0(void)
1943
{
1944
    helper_fxam_ST0();
1945
}
1946

  
1947
void OPPROTO op_fld1_ST0(void)
1948
{
1949
    ST0 = f15rk[1];
1950
}
1951

  
1952
void OPPROTO op_fldl2t_ST0(void)
1953
{
1954
    ST0 = f15rk[6];
1955
}
1956

  
1957
void OPPROTO op_fldl2e_ST0(void)
1958
{
1959
    ST0 = f15rk[5];
1960
}
1961

  
1962
void OPPROTO op_fldpi_ST0(void)
1963
{
1964
    ST0 = f15rk[2];
1965
}
1966

  
1967
void OPPROTO op_fldlg2_ST0(void)
1968
{
1969
    ST0 = f15rk[3];
1970
}
1971

  
1972
void OPPROTO op_fldln2_ST0(void)
1973
{
1974
    ST0 = f15rk[4];
1975
}
1976

  
1977
void OPPROTO op_fldz_ST0(void)
1978
{
1979
    ST0 = f15rk[0];
1980
}
1981

  
1982
void OPPROTO op_fldz_FT0(void)
1983
{
1984
    FT0 = f15rk[0];
1985
}
1986

  
1987
/* associated heplers to reduce generated code length and to simplify
1988
   relocation (FP constants are usually stored in .rodata section) */
1989

  
1990
void OPPROTO op_f2xm1(void)
1991
{
1992
    helper_f2xm1();
1993
}
1994

  
1995
void OPPROTO op_fyl2x(void)
1996
{
1997
    helper_fyl2x();
1998
}
1999

  
2000
void OPPROTO op_fptan(void)
2001
{
2002
    helper_fptan();
2003
}
2004

  
2005
void OPPROTO op_fpatan(void)
2006
{
2007
    helper_fpatan();
2008
}
2009

  
2010
void OPPROTO op_fxtract(void)
2011
{
2012
    helper_fxtract();
2013
}
2014

  
2015
void OPPROTO op_fprem1(void)
2016
{
2017
    helper_fprem1();
2018
}
2019

  
2020

  
2021
void OPPROTO op_fprem(void)
2022
{
2023
    helper_fprem();
2024
}
2025

  
2026
void OPPROTO op_fyl2xp1(void)
2027
{
2028
    helper_fyl2xp1();
2029
}
2030

  
2031
void OPPROTO op_fsqrt(void)
2032
{
2033
    helper_fsqrt();
2034
}
2035

  
2036
void OPPROTO op_fsincos(void)
2037
{
2038
    helper_fsincos();
2039
}
2040

  
2041
void OPPROTO op_frndint(void)
2042
{
2043
    helper_frndint();
2044
}
2045

  
2046
void OPPROTO op_fscale(void)
2047
{
2048
    helper_fscale();
2049
}
2050

  
2051
void OPPROTO op_fsin(void)
2052
{
2053
    helper_fsin();
2054
}
2055

  
2056
void OPPROTO op_fcos(void)
2057
{
2058
    helper_fcos();
2059
}
2060

  
2061
void OPPROTO op_fnstsw_A0(void)
2062
{
2063
    int fpus;
2064
    fpus = (env->fpus & ~0x3800) | (env->fpstt & 0x7) << 11;
2065
    stw(A0, fpus);
2066
    FORCE_RET();
2067
}
2068

  
2069
void OPPROTO op_fnstsw_EAX(void)
2070
{
2071
    int fpus;
2072
    fpus = (env->fpus & ~0x3800) | (env->fpstt & 0x7) << 11;
2073
    EAX = (EAX & ~0xffff) | fpus;
2074
}
2075

  
2076
void OPPROTO op_fnstcw_A0(void)
2077
{
2078
    stw(A0, env->fpuc);
2079
    FORCE_RET();
2080
}
2081

  
2082
void OPPROTO op_fldcw_A0(void)
2083
{
2084
    env->fpuc = lduw(A0);
2085
    update_fp_status();
2086
}
2087

  
2088
void OPPROTO op_fclex(void)
2089
{
2090
    env->fpus &= 0x7f00;
2091
}
2092

  
2093
void OPPROTO op_fwait(void)
2094
{
2095
    if (env->fpus & FPUS_SE)
2096
        fpu_raise_exception();
2097
    FORCE_RET();
2098
}
2099

  
2100
void OPPROTO op_fninit(void)
2101
{
2102
    env->fpus = 0;
2103
    env->fpstt = 0;
2104
    env->fpuc = 0x37f;
2105
    env->fptags[0] = 1;
2106
    env->fptags[1] = 1;
2107
    env->fptags[2] = 1;
2108
    env->fptags[3] = 1;
2109
    env->fptags[4] = 1;
2110
    env->fptags[5] = 1;
2111
    env->fptags[6] = 1;
2112
    env->fptags[7] = 1;
2113
}
2114

  
2115
void OPPROTO op_fnstenv_A0(void)
2116
{
2117
    helper_fstenv(A0, PARAM1);
2118
}
2119

  
2120
void OPPROTO op_fldenv_A0(void)
2121
{
2122
    helper_fldenv(A0, PARAM1);
2123
}
2124

  
2125
void OPPROTO op_fnsave_A0(void)
2126
{
2127
    helper_fsave(A0, PARAM1);
2128
}
2129

  
2130
void OPPROTO op_frstor_A0(void)
2131
{
2132
    helper_frstor(A0, PARAM1);
1406
    T0 = 0;
2133 1407
}
2134 1408

  
2135 1409
/* threading support */
......
2149 1423
    T0 = 0;
2150 1424
}
2151 1425

  
2152
void OPPROTO op_fxsave_A0(void)
2153
{
2154
    helper_fxsave(A0, PARAM1);
2155
}
2156

  
2157
void OPPROTO op_fxrstor_A0(void)
2158
{
2159
    helper_fxrstor(A0, PARAM1);
2160
}
2161

  
2162 1426
/* Secure Virtual Machine ops */
2163 1427

  
2164 1428
void OPPROTO op_vmrun(void)

Also available in: Unified diff