Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. | 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. |
| 2 // All Rights Reserved. | 2 // All Rights Reserved. |
| 3 // | 3 // |
| 4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
| 5 // modification, are permitted provided that the following conditions are | 5 // modification, are permitted provided that the following conditions are |
| 6 // met: | 6 // met: |
| 7 // | 7 // |
| 8 // - Redistributions of source code must retain the above copyright notice, | 8 // - Redistributions of source code must retain the above copyright notice, |
| 9 // this list of conditions and the following disclaimer. | 9 // this list of conditions and the following disclaimer. |
| 10 // | 10 // |
| (...skipping 1885 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1896 } | 1896 } |
| 1897 | 1897 |
| 1898 | 1898 |
| 1899 void Assembler::movf(Register rd, Register rs, uint16_t cc) { | 1899 void Assembler::movf(Register rd, Register rs, uint16_t cc) { |
| 1900 Register rt; | 1900 Register rt; |
| 1901 rt.code_ = (cc & 0x0007) << 2 | 0; | 1901 rt.code_ = (cc & 0x0007) << 2 | 0; |
| 1902 GenInstrRegister(SPECIAL, rs, rt, rd, 0, MOVCI); | 1902 GenInstrRegister(SPECIAL, rs, rt, rd, 0, MOVCI); |
| 1903 } | 1903 } |
| 1904 | 1904 |
| 1905 | 1905 |
| 1906 void Assembler::movn_s(FPURegister fd, FPURegister fs, Register rt) { | |
| 1907 DCHECK(IsMipsArchVariant(kMips32r2)); | |
| 1908 GenInstrRegister(COP1, S, rt, fs, fd, MOVN_C); | |
| 1909 } | |
| 1910 | |
| 1911 | |
| 1912 void Assembler::movn_d(FPURegister fd, FPURegister fs, Register rt) { | |
| 1913 DCHECK(IsMipsArchVariant(kMips32r2)); | |
| 1914 GenInstrRegister(COP1, D, rt, fs, fd, MOVN_C); | |
| 1915 } | |
| 1916 | |
| 1917 | |
| 1906 void Assembler::sel(SecondaryField fmt, FPURegister fd, FPURegister fs, | 1918 void Assembler::sel(SecondaryField fmt, FPURegister fd, FPURegister fs, |
| 1907 FPURegister ft) { | 1919 FPURegister ft) { |
| 1908 DCHECK(IsMipsArchVariant(kMips32r6)); | 1920 DCHECK(IsMipsArchVariant(kMips32r6)); |
| 1909 DCHECK((fmt == D) || (fmt == S)); | 1921 DCHECK((fmt == D) || (fmt == S)); |
| 1910 | 1922 |
| 1911 Instr instr = COP1 | fmt << kRsShift | ft.code() << kFtShift | | 1923 GenInstrRegister(COP1, fmt, ft, fs, fd, SEL); |
| 1912 fs.code() << kFsShift | fd.code() << kFdShift | SEL; | |
| 1913 emit(instr); | |
| 1914 } | 1924 } |
| 1915 | 1925 |
| 1916 | 1926 |
| 1927 void Assembler::sel_s(FPURegister fd, FPURegister fs, FPURegister ft) { | |
| 1928 sel(S, fd, fs, ft); | |
| 1929 } | |
| 1930 | |
| 1931 | |
| 1932 void Assembler::sel_d(FPURegister fd, FPURegister fs, FPURegister ft) { | |
| 1933 sel(D, fd, fs, ft); | |
| 1934 } | |
| 1935 | |
| 1936 | |
| 1917 void Assembler::seleqz(Register rd, Register rs, Register rt) { | 1937 void Assembler::seleqz(Register rd, Register rs, Register rt) { |
| 1918 DCHECK(IsMipsArchVariant(kMips32r6)); | 1938 DCHECK(IsMipsArchVariant(kMips32r6)); |
| 1919 GenInstrRegister(SPECIAL, rs, rt, rd, 0, SELEQZ_S); | 1939 GenInstrRegister(SPECIAL, rs, rt, rd, 0, SELEQZ_S); |
| 1920 } | 1940 } |
| 1921 | 1941 |
| 1922 | 1942 |
| 1923 void Assembler::seleqz(SecondaryField fmt, FPURegister fd, FPURegister fs, | 1943 void Assembler::seleqz(SecondaryField fmt, FPURegister fd, FPURegister fs, |
| 1924 FPURegister ft) { | 1944 FPURegister ft) { |
| 1925 DCHECK(IsMipsArchVariant(kMips32r6)); | 1945 DCHECK(IsMipsArchVariant(kMips32r6)); |
| 1926 DCHECK((fmt == D) || (fmt == S)); | 1946 DCHECK((fmt == D) || (fmt == S)); |
| 1927 GenInstrRegister(COP1, fmt, ft, fs, fd, SELEQZ_C); | 1947 GenInstrRegister(COP1, fmt, ft, fs, fd, SELEQZ_C); |
| 1928 } | 1948 } |
| 1929 | 1949 |
| 1930 | 1950 |
| 1931 void Assembler::selnez(Register rd, Register rs, Register rt) { | 1951 void Assembler::selnez(Register rd, Register rs, Register rt) { |
| 1932 DCHECK(IsMipsArchVariant(kMips32r6)); | 1952 DCHECK(IsMipsArchVariant(kMips32r6)); |
| 1933 GenInstrRegister(SPECIAL, rs, rt, rd, 0, SELNEZ_S); | 1953 GenInstrRegister(SPECIAL, rs, rt, rd, 0, SELNEZ_S); |
| 1934 } | 1954 } |
| 1935 | 1955 |
| 1936 | 1956 |
| 1937 void Assembler::selnez(SecondaryField fmt, FPURegister fd, FPURegister fs, | 1957 void Assembler::selnez(SecondaryField fmt, FPURegister fd, FPURegister fs, |
| 1938 FPURegister ft) { | 1958 FPURegister ft) { |
| 1939 DCHECK(IsMipsArchVariant(kMips32r6)); | 1959 DCHECK(IsMipsArchVariant(kMips32r6)); |
| 1940 DCHECK((fmt == D) || (fmt == S)); | 1960 DCHECK((fmt == D) || (fmt == S)); |
| 1941 GenInstrRegister(COP1, fmt, ft, fs, fd, SELNEZ_C); | 1961 GenInstrRegister(COP1, fmt, ft, fs, fd, SELNEZ_C); |
| 1942 } | 1962 } |
| 1943 | 1963 |
| 1944 | 1964 |
| 1965 void Assembler::seleqz_d(FPURegister fd, FPURegister fs, FPURegister ft) { | |
| 1966 seleqz(D, fd, fs, ft); | |
| 1967 } | |
| 1968 | |
| 1969 | |
| 1970 void Assembler::seleqz_s(FPURegister fd, FPURegister fs, FPURegister ft) { | |
| 1971 seleqz(S, fd, fs, ft); | |
| 1972 } | |
| 1973 | |
| 1974 | |
| 1975 void Assembler::selnez_d(FPURegister fd, FPURegister fs, FPURegister ft) { | |
| 1976 selnez(D, fd, fs, ft); | |
| 1977 } | |
| 1978 | |
| 1979 | |
| 1980 void Assembler::selnez_s(FPURegister fd, FPURegister fs, FPURegister ft) { | |
| 1981 selnez(S, fd, fs, ft); | |
| 1982 } | |
| 1983 | |
| 1984 | |
| 1985 void Assembler::movz_s(FPURegister fd, FPURegister fs, Register rt) { | |
| 1986 DCHECK(IsMipsArchVariant(kMips32r2)); | |
| 1987 GenInstrRegister(COP1, S, rt, fs, fd, MOVZ_C); | |
| 1988 } | |
| 1989 | |
| 1990 | |
| 1991 void Assembler::movz_d(FPURegister fd, FPURegister fs, Register rt) { | |
| 1992 DCHECK(IsMipsArchVariant(kMips32r2)); | |
| 1993 GenInstrRegister(COP1, D, rt, fs, fd, MOVZ_C); | |
| 1994 } | |
| 1995 | |
| 1996 | |
| 1997 void Assembler::movt_s(FPURegister fd, FPURegister fs, uint16_t cc) { | |
| 1998 DCHECK(IsMipsArchVariant(kMips32r2)); | |
| 1999 FPURegister ft; | |
| 2000 ft.code_ = (cc & 0x0007) << 2 | 1; | |
| 2001 GenInstrRegister(COP1, S, ft, fs, fd, MOVF); | |
| 2002 } | |
| 2003 | |
| 2004 | |
| 2005 void Assembler::movt_d(FPURegister fd, FPURegister fs, uint16_t cc) { | |
| 2006 DCHECK(IsMipsArchVariant(kMips32r2)); | |
| 2007 FPURegister ft; | |
| 2008 ft.code_ = (cc & 0x0007) << 2 | 1; | |
| 2009 GenInstrRegister(COP1, D, ft, fs, fd, MOVF); | |
| 2010 } | |
| 2011 | |
| 2012 | |
| 2013 void Assembler::movf_s(FPURegister fd, FPURegister fs, uint16_t cc) { | |
| 2014 DCHECK(IsMipsArchVariant(kMips32r2)); | |
| 2015 FPURegister ft; | |
| 2016 ft.code_ = (cc & 0x0007) << 2 | 0; | |
| 2017 GenInstrRegister(COP1, S, ft, fs, fd, MOVF); | |
| 2018 } | |
| 2019 | |
| 2020 | |
| 2021 void Assembler::movf_d(FPURegister fd, FPURegister fs, uint16_t cc) { | |
| 2022 DCHECK(IsMipsArchVariant(kMips32r2)); | |
| 2023 FPURegister ft; | |
| 2024 ft.code_ = (cc & 0x0007) << 2 | 0; | |
| 2025 GenInstrRegister(COP1, D, ft, fs, fd, MOVF); | |
| 2026 } | |
| 2027 | |
| 2028 | |
| 1945 // Bit twiddling. | 2029 // Bit twiddling. |
| 1946 void Assembler::clz(Register rd, Register rs) { | 2030 void Assembler::clz(Register rd, Register rs) { |
| 1947 if (!IsMipsArchVariant(kMips32r6)) { | 2031 if (!IsMipsArchVariant(kMips32r6)) { |
| 1948 // Clz instr requires same GPR number in 'rd' and 'rt' fields. | 2032 // Clz instr requires same GPR number in 'rd' and 'rt' fields. |
| 1949 GenInstrRegister(SPECIAL2, rs, rd, rd, 0, CLZ); | 2033 GenInstrRegister(SPECIAL2, rs, rd, rd, 0, CLZ); |
| 1950 } else { | 2034 } else { |
| 1951 GenInstrRegister(SPECIAL, rs, zero_reg, rd, 1, CLZ_R6); | 2035 GenInstrRegister(SPECIAL, rs, zero_reg, rd, 1, CLZ_R6); |
| 1952 } | 2036 } |
| 1953 } | 2037 } |
| 1954 | 2038 |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2167 void Assembler::abs_d(FPURegister fd, FPURegister fs) { | 2251 void Assembler::abs_d(FPURegister fd, FPURegister fs) { |
| 2168 GenInstrRegister(COP1, D, f0, fs, fd, ABS_D); | 2252 GenInstrRegister(COP1, D, f0, fs, fd, ABS_D); |
| 2169 } | 2253 } |
| 2170 | 2254 |
| 2171 | 2255 |
| 2172 void Assembler::mov_d(FPURegister fd, FPURegister fs) { | 2256 void Assembler::mov_d(FPURegister fd, FPURegister fs) { |
| 2173 GenInstrRegister(COP1, D, f0, fs, fd, MOV_D); | 2257 GenInstrRegister(COP1, D, f0, fs, fd, MOV_D); |
| 2174 } | 2258 } |
| 2175 | 2259 |
| 2176 | 2260 |
| 2261 void Assembler::mov_s(FPURegister fd, FPURegister fs) { | |
| 2262 GenInstrRegister(COP1, S, f0, fs, fd, MOV_D); | |
| 2263 } | |
| 2264 | |
| 2265 | |
| 2177 void Assembler::neg_s(FPURegister fd, FPURegister fs) { | 2266 void Assembler::neg_s(FPURegister fd, FPURegister fs) { |
| 2178 GenInstrRegister(COP1, S, f0, fs, fd, NEG_D); | 2267 GenInstrRegister(COP1, S, f0, fs, fd, NEG_D); |
| 2179 } | 2268 } |
| 2180 | 2269 |
| 2181 | 2270 |
| 2182 void Assembler::neg_d(FPURegister fd, FPURegister fs) { | 2271 void Assembler::neg_d(FPURegister fd, FPURegister fs) { |
| 2183 GenInstrRegister(COP1, D, f0, fs, fd, NEG_D); | 2272 GenInstrRegister(COP1, D, f0, fs, fd, NEG_D); |
| 2184 } | 2273 } |
| 2185 | 2274 |
| 2186 | 2275 |
| 2187 void Assembler::sqrt_s(FPURegister fd, FPURegister fs) { | 2276 void Assembler::sqrt_s(FPURegister fd, FPURegister fs) { |
| 2188 GenInstrRegister(COP1, S, f0, fs, fd, SQRT_D); | 2277 GenInstrRegister(COP1, S, f0, fs, fd, SQRT_D); |
| 2189 } | 2278 } |
| 2190 | 2279 |
| 2191 | 2280 |
| 2192 void Assembler::sqrt_d(FPURegister fd, FPURegister fs) { | 2281 void Assembler::sqrt_d(FPURegister fd, FPURegister fs) { |
| 2193 GenInstrRegister(COP1, D, f0, fs, fd, SQRT_D); | 2282 GenInstrRegister(COP1, D, f0, fs, fd, SQRT_D); |
| 2194 } | 2283 } |
| 2195 | 2284 |
| 2196 | 2285 |
| 2286 void Assembler::rsqrt_s(FPURegister fd, FPURegister fs) { | |
| 2287 GenInstrRegister(COP1, S, f0, fs, fd, RSQRT_D); | |
| 2288 } | |
| 2289 | |
| 2290 | |
| 2291 void Assembler::rsqrt_d(FPURegister fd, FPURegister fs) { | |
|
paul.l...
2015/05/09 01:07:47
From the manual: "The result of RSQRT.D is UNPREDI
Djordje.Pesic
2015/05/14 13:22:30
Done.
| |
| 2292 GenInstrRegister(COP1, D, f0, fs, fd, RSQRT_D); | |
| 2293 } | |
| 2294 | |
| 2295 | |
| 2296 void Assembler::recip_d(FPURegister fd, FPURegister fs) { | |
|
paul.l...
2015/05/09 01:07:47
From the manual: "The result of RECIP.D is UNPREDI
Djordje.Pesic
2015/05/14 13:22:30
Done.
| |
| 2297 GenInstrRegister(COP1, D, f0, fs, fd, RECIP); | |
| 2298 } | |
| 2299 | |
| 2300 | |
| 2301 void Assembler::recip_s(FPURegister fd, FPURegister fs) { | |
| 2302 GenInstrRegister(COP1, S, f0, fs, fd, RECIP); | |
| 2303 } | |
| 2304 | |
| 2305 | |
| 2197 // Conversions. | 2306 // Conversions. |
| 2198 | 2307 |
| 2199 void Assembler::cvt_w_s(FPURegister fd, FPURegister fs) { | 2308 void Assembler::cvt_w_s(FPURegister fd, FPURegister fs) { |
| 2200 GenInstrRegister(COP1, S, f0, fs, fd, CVT_W_S); | 2309 GenInstrRegister(COP1, S, f0, fs, fd, CVT_W_S); |
| 2201 } | 2310 } |
| 2202 | 2311 |
| 2203 | 2312 |
| 2204 void Assembler::cvt_w_d(FPURegister fd, FPURegister fs) { | 2313 void Assembler::cvt_w_d(FPURegister fd, FPURegister fs) { |
| 2205 GenInstrRegister(COP1, D, f0, fs, fd, CVT_W_D); | 2314 GenInstrRegister(COP1, D, f0, fs, fd, CVT_W_D); |
| 2206 } | 2315 } |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2244 void Assembler::ceil_w_d(FPURegister fd, FPURegister fs) { | 2353 void Assembler::ceil_w_d(FPURegister fd, FPURegister fs) { |
| 2245 GenInstrRegister(COP1, D, f0, fs, fd, CEIL_W_D); | 2354 GenInstrRegister(COP1, D, f0, fs, fd, CEIL_W_D); |
| 2246 } | 2355 } |
| 2247 | 2356 |
| 2248 | 2357 |
| 2249 void Assembler::rint_s(FPURegister fd, FPURegister fs) { rint(S, fd, fs); } | 2358 void Assembler::rint_s(FPURegister fd, FPURegister fs) { rint(S, fd, fs); } |
| 2250 | 2359 |
| 2251 | 2360 |
| 2252 void Assembler::rint(SecondaryField fmt, FPURegister fd, FPURegister fs) { | 2361 void Assembler::rint(SecondaryField fmt, FPURegister fd, FPURegister fs) { |
| 2253 DCHECK(IsMipsArchVariant(kMips32r6)); | 2362 DCHECK(IsMipsArchVariant(kMips32r6)); |
| 2363 DCHECK((fmt == D) || (fmt == S)); | |
| 2254 GenInstrRegister(COP1, fmt, f0, fs, fd, RINT); | 2364 GenInstrRegister(COP1, fmt, f0, fs, fd, RINT); |
| 2255 } | 2365 } |
| 2256 | 2366 |
| 2257 | 2367 |
| 2258 void Assembler::rint_d(FPURegister fd, FPURegister fs) { rint(D, fd, fs); } | 2368 void Assembler::rint_d(FPURegister fd, FPURegister fs) { rint(D, fd, fs); } |
| 2259 | 2369 |
| 2260 | 2370 |
| 2261 void Assembler::cvt_l_s(FPURegister fd, FPURegister fs) { | 2371 void Assembler::cvt_l_s(FPURegister fd, FPURegister fs) { |
| 2262 DCHECK(IsMipsArchVariant(kMips32r2)); | 2372 DCHECK(IsMipsArchVariant(kMips32r2)); |
| 2263 GenInstrRegister(COP1, S, f0, fs, fd, CVT_L_S); | 2373 GenInstrRegister(COP1, S, f0, fs, fd, CVT_L_S); |
| (...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2883 void Assembler::PopulateConstantPool(ConstantPoolArray* constant_pool) { | 2993 void Assembler::PopulateConstantPool(ConstantPoolArray* constant_pool) { |
| 2884 // No out-of-line constant pool support. | 2994 // No out-of-line constant pool support. |
| 2885 DCHECK(!FLAG_enable_ool_constant_pool); | 2995 DCHECK(!FLAG_enable_ool_constant_pool); |
| 2886 return; | 2996 return; |
| 2887 } | 2997 } |
| 2888 | 2998 |
| 2889 | 2999 |
| 2890 } } // namespace v8::internal | 3000 } } // namespace v8::internal |
| 2891 | 3001 |
| 2892 #endif // V8_TARGET_ARCH_MIPS | 3002 #endif // V8_TARGET_ARCH_MIPS |
| OLD | NEW |