Revision 81ad8ba2 target-sparc/op.c
b/target-sparc/op.c | ||
---|---|---|
1862 | 1862 |
void OPPROTO op_st_asi_reg() |
1863 | 1863 |
{ |
1864 | 1864 |
T0 += PARAM1; |
1865 |
helper_st_asi(env->asi, PARAM2, PARAM3); |
|
1865 |
helper_st_asi(env->asi, PARAM2); |
|
1866 |
} |
|
1867 |
|
|
1868 |
void OPPROTO op_ldstub_asi_reg() /* XXX: should be atomically */ |
|
1869 |
{ |
|
1870 |
target_ulong tmp; |
|
1871 |
|
|
1872 |
T0 += PARAM1; |
|
1873 |
helper_ld_asi(env->asi, 1, 0); |
|
1874 |
tmp = T1; |
|
1875 |
T1 = 0xff; |
|
1876 |
helper_st_asi(env->asi, 1); |
|
1877 |
T1 = tmp; |
|
1878 |
} |
|
1879 |
|
|
1880 |
void OPPROTO op_swap_asi_reg() /* XXX: should be atomically */ |
|
1881 |
{ |
|
1882 |
target_ulong tmp1, tmp2; |
|
1883 |
|
|
1884 |
T0 += PARAM1; |
|
1885 |
tmp1 = T1; |
|
1886 |
helper_ld_asi(env->asi, 4, 0); |
|
1887 |
tmp2 = T1; |
|
1888 |
T1 = tmp1; |
|
1889 |
helper_st_asi(env->asi, 4); |
|
1890 |
T1 = tmp2; |
|
1891 |
} |
|
1892 |
|
|
1893 |
void OPPROTO op_ldda_asi() |
|
1894 |
{ |
|
1895 |
helper_ld_asi(PARAM1, 8, 0); |
|
1896 |
T0 = T1 & 0xffffffffUL; |
|
1897 |
T1 >>= 32; |
|
1898 |
} |
|
1899 |
|
|
1900 |
void OPPROTO op_ldda_asi_reg() |
|
1901 |
{ |
|
1902 |
T0 += PARAM1; |
|
1903 |
helper_ld_asi(env->asi, 8, 0); |
|
1904 |
T0 = T1 & 0xffffffffUL; |
|
1905 |
T1 >>= 32; |
|
1906 |
} |
|
1907 |
|
|
1908 |
void OPPROTO op_stda_asi() |
|
1909 |
{ |
|
1910 |
T1 <<= 32; |
|
1911 |
T1 += T2 & 0xffffffffUL; |
|
1912 |
helper_st_asi(PARAM1, 8); |
|
1913 |
} |
|
1914 |
|
|
1915 |
void OPPROTO op_stda_asi_reg() |
|
1916 |
{ |
|
1917 |
T0 += PARAM1; |
|
1918 |
T1 <<= 32; |
|
1919 |
T1 += T2 & 0xffffffffUL; |
|
1920 |
helper_st_asi(env->asi, 8); |
|
1921 |
} |
|
1922 |
|
|
1923 |
void OPPROTO op_cas_asi() /* XXX: should be atomically */ |
|
1924 |
{ |
|
1925 |
target_ulong tmp; |
|
1926 |
|
|
1927 |
tmp = T1 & 0xffffffffUL; |
|
1928 |
helper_ld_asi(PARAM1, 4, 0); |
|
1929 |
if (tmp == T1) { |
|
1930 |
tmp = T1; |
|
1931 |
T1 = T2 & 0xffffffffUL; |
|
1932 |
helper_st_asi(PARAM1, 4); |
|
1933 |
T1 = tmp; |
|
1934 |
} |
|
1935 |
T1 &= 0xffffffffUL; |
|
1936 |
} |
|
1937 |
|
|
1938 |
void OPPROTO op_cas_asi_reg() /* XXX: should be atomically */ |
|
1939 |
{ |
|
1940 |
target_ulong tmp; |
|
1941 |
|
|
1942 |
T0 += PARAM1; |
|
1943 |
tmp = T1 & 0xffffffffUL; |
|
1944 |
helper_ld_asi(env->asi, 4, 0); |
|
1945 |
if (tmp == T1) { |
|
1946 |
tmp = T1; |
|
1947 |
T1 = T2 & 0xffffffffUL; |
|
1948 |
helper_st_asi(env->asi, 4); |
|
1949 |
T1 = tmp; |
|
1950 |
} |
|
1951 |
T1 &= 0xffffffffUL; |
|
1952 |
} |
|
1953 |
|
|
1954 |
void OPPROTO op_casx_asi() /* XXX: should be atomically */ |
|
1955 |
{ |
|
1956 |
target_ulong tmp; |
|
1957 |
|
|
1958 |
tmp = T1; |
|
1959 |
helper_ld_asi(PARAM1, 8, 0); |
|
1960 |
if (tmp == T1) { |
|
1961 |
tmp = T1; |
|
1962 |
T1 = T2; |
|
1963 |
helper_st_asi(PARAM1, 8); |
|
1964 |
T1 = tmp; |
|
1965 |
} |
|
1966 |
} |
|
1967 |
|
|
1968 |
void OPPROTO op_casx_asi_reg() /* XXX: should be atomically */ |
|
1969 |
{ |
|
1970 |
target_ulong tmp; |
|
1971 |
|
|
1972 |
T0 += PARAM1; |
|
1973 |
tmp = T1; |
|
1974 |
helper_ld_asi(env->asi, 8, 0); |
|
1975 |
if (tmp == T1) { |
|
1976 |
tmp = T1; |
|
1977 |
T1 = T2; |
|
1978 |
helper_st_asi(env->asi, 8); |
|
1979 |
T1 = tmp; |
|
1980 |
} |
|
1866 | 1981 |
} |
1867 | 1982 |
#endif |
1868 | 1983 |
|
1984 |
#if !defined(CONFIG_USER_ONLY) || defined(TARGET_SPARC64) |
|
1869 | 1985 |
void OPPROTO op_ld_asi() |
1870 | 1986 |
{ |
1871 | 1987 |
helper_ld_asi(PARAM1, PARAM2, PARAM3); |
... | ... | |
1873 | 1989 |
|
1874 | 1990 |
void OPPROTO op_st_asi() |
1875 | 1991 |
{ |
1876 |
helper_st_asi(PARAM1, PARAM2, PARAM3);
|
|
1992 |
helper_st_asi(PARAM1, PARAM2); |
|
1877 | 1993 |
} |
1878 | 1994 |
|
1995 |
void OPPROTO op_ldstub_asi() /* XXX: should be atomically */ |
|
1996 |
{ |
|
1997 |
target_ulong tmp; |
|
1998 |
|
|
1999 |
helper_ld_asi(PARAM1, 1, 0); |
|
2000 |
tmp = T1; |
|
2001 |
T1 = 0xff; |
|
2002 |
helper_st_asi(PARAM1, 1); |
|
2003 |
T1 = tmp; |
|
2004 |
} |
|
2005 |
|
|
2006 |
void OPPROTO op_swap_asi() /* XXX: should be atomically */ |
|
2007 |
{ |
|
2008 |
target_ulong tmp1, tmp2; |
|
2009 |
|
|
2010 |
tmp1 = T1; |
|
2011 |
helper_ld_asi(PARAM1, 4, 0); |
|
2012 |
tmp2 = T1; |
|
2013 |
T1 = tmp1; |
|
2014 |
helper_st_asi(PARAM1, 4); |
|
2015 |
T1 = tmp2; |
|
2016 |
} |
|
2017 |
#endif |
|
2018 |
|
|
1879 | 2019 |
#ifdef TARGET_SPARC64 |
1880 | 2020 |
// This function uses non-native bit order |
1881 | 2021 |
#define GET_FIELD(X, FROM, TO) \ |
Also available in: Unified diff