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 1602 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1613 | 1613 |
1614 | 1614 |
1615 void Assembler::srav(Register rd, Register rt, Register rs) { | 1615 void Assembler::srav(Register rd, Register rt, Register rs) { |
1616 GenInstrRegister(SPECIAL, rs, rt, rd, 0, SRAV); | 1616 GenInstrRegister(SPECIAL, rs, rt, rd, 0, SRAV); |
1617 } | 1617 } |
1618 | 1618 |
1619 | 1619 |
1620 void Assembler::rotr(Register rd, Register rt, uint16_t sa) { | 1620 void Assembler::rotr(Register rd, Register rt, uint16_t sa) { |
1621 // Should be called via MacroAssembler::Ror. | 1621 // Should be called via MacroAssembler::Ror. |
1622 DCHECK(rd.is_valid() && rt.is_valid() && is_uint5(sa)); | 1622 DCHECK(rd.is_valid() && rt.is_valid() && is_uint5(sa)); |
1623 DCHECK(IsMipsArchVariant(kMips32r2)); | 1623 DCHECK(IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)); |
1624 Instr instr = SPECIAL | (1 << kRsShift) | (rt.code() << kRtShift) | 1624 Instr instr = SPECIAL | (1 << kRsShift) | (rt.code() << kRtShift) |
1625 | (rd.code() << kRdShift) | (sa << kSaShift) | SRL; | 1625 | (rd.code() << kRdShift) | (sa << kSaShift) | SRL; |
1626 emit(instr); | 1626 emit(instr); |
1627 } | 1627 } |
1628 | 1628 |
1629 | 1629 |
1630 void Assembler::rotrv(Register rd, Register rt, Register rs) { | 1630 void Assembler::rotrv(Register rd, Register rt, Register rs) { |
1631 // Should be called via MacroAssembler::Ror. | 1631 // Should be called via MacroAssembler::Ror. |
1632 DCHECK(rd.is_valid() && rt.is_valid() && rs.is_valid() ); | 1632 DCHECK(rd.is_valid() && rt.is_valid() && rs.is_valid() ); |
1633 DCHECK(IsMipsArchVariant(kMips32r2)); | 1633 DCHECK(IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)); |
1634 Instr instr = SPECIAL | (rs.code() << kRsShift) | (rt.code() << kRtShift) | 1634 Instr instr = SPECIAL | (rs.code() << kRsShift) | (rt.code() << kRtShift) |
1635 | (rd.code() << kRdShift) | (1 << kSaShift) | SRLV; | 1635 | (rd.code() << kRdShift) | (1 << kSaShift) | SRLV; |
1636 emit(instr); | 1636 emit(instr); |
1637 } | 1637 } |
1638 | 1638 |
1639 | 1639 |
1640 // ------------Memory-instructions------------- | 1640 // ------------Memory-instructions------------- |
1641 | 1641 |
1642 // Helper for base-reg + offset, when offset is larger than int16. | 1642 // Helper for base-reg + offset, when offset is larger than int16. |
1643 void Assembler::LoadRegPlusOffsetToAt(const MemOperand& src) { | 1643 void Assembler::LoadRegPlusOffsetToAt(const MemOperand& src) { |
(...skipping 252 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::sel(SecondaryField fmt, FPURegister fd, FPURegister fs, | |
1907 FPURegister ft) { | |
1908 DCHECK(IsMipsArchVariant(kMips32r6)); | |
1909 DCHECK((fmt == D) || (fmt == S)); | |
1910 | |
1911 Instr instr = COP1 | fmt << kRsShift | ft.code() << kFtShift | | |
1912 fs.code() << kFsShift | fd.code() << kFdShift | SEL; | |
1913 emit(instr); | |
1914 } | |
1915 | |
1916 | |
1917 void Assembler::seleqz(Register rd, Register rs, Register rt) { | 1906 void Assembler::seleqz(Register rd, Register rs, Register rt) { |
1918 DCHECK(IsMipsArchVariant(kMips32r6)); | 1907 DCHECK(IsMipsArchVariant(kMips32r6)); |
1919 GenInstrRegister(SPECIAL, rs, rt, rd, 0, SELEQZ_S); | 1908 GenInstrRegister(SPECIAL, rs, rt, rd, 0, SELEQZ_S); |
1920 } | 1909 } |
1921 | 1910 |
1922 | 1911 |
1923 void Assembler::seleqz(SecondaryField fmt, FPURegister fd, FPURegister fs, | |
1924 FPURegister ft) { | |
1925 DCHECK(IsMipsArchVariant(kMips32r6)); | |
1926 DCHECK((fmt == D) || (fmt == S)); | |
1927 GenInstrRegister(COP1, fmt, ft, fs, fd, SELEQZ_C); | |
1928 } | |
1929 | |
1930 | |
1931 void Assembler::selnez(Register rd, Register rs, Register rt) { | |
1932 DCHECK(IsMipsArchVariant(kMips32r6)); | |
1933 GenInstrRegister(SPECIAL, rs, rt, rd, 0, SELNEZ_S); | |
1934 } | |
1935 | |
1936 | |
1937 void Assembler::selnez(SecondaryField fmt, FPURegister fd, FPURegister fs, | |
1938 FPURegister ft) { | |
1939 DCHECK(IsMipsArchVariant(kMips32r6)); | |
1940 DCHECK((fmt == D) || (fmt == S)); | |
1941 GenInstrRegister(COP1, fmt, ft, fs, fd, SELNEZ_C); | |
1942 } | |
1943 | |
1944 | |
1945 // Bit twiddling. | 1912 // Bit twiddling. |
1946 void Assembler::clz(Register rd, Register rs) { | 1913 void Assembler::clz(Register rd, Register rs) { |
1947 if (!IsMipsArchVariant(kMips32r6)) { | 1914 if (!IsMipsArchVariant(kMips32r6)) { |
1948 // Clz instr requires same GPR number in 'rd' and 'rt' fields. | 1915 // Clz instr requires same GPR number in 'rd' and 'rt' fields. |
1949 GenInstrRegister(SPECIAL2, rs, rd, rd, 0, CLZ); | 1916 GenInstrRegister(SPECIAL2, rs, rd, rd, 0, CLZ); |
1950 } else { | 1917 } else { |
1951 GenInstrRegister(SPECIAL, rs, zero_reg, rd, 1, CLZ_R6); | 1918 GenInstrRegister(SPECIAL, rs, zero_reg, rd, 1, CLZ_R6); |
1952 } | 1919 } |
1953 } | 1920 } |
1954 | 1921 |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2103 | 2070 |
2104 void Assembler::DoubleAsTwoUInt32(double d, uint32_t* lo, uint32_t* hi) { | 2071 void Assembler::DoubleAsTwoUInt32(double d, uint32_t* lo, uint32_t* hi) { |
2105 uint64_t i; | 2072 uint64_t i; |
2106 memcpy(&i, &d, 8); | 2073 memcpy(&i, &d, 8); |
2107 | 2074 |
2108 *lo = i & 0xffffffff; | 2075 *lo = i & 0xffffffff; |
2109 *hi = i >> 32; | 2076 *hi = i >> 32; |
2110 } | 2077 } |
2111 | 2078 |
2112 | 2079 |
| 2080 void Assembler::movn_s(FPURegister fd, FPURegister fs, Register rt) { |
| 2081 DCHECK(IsMipsArchVariant(kMips32r2)); |
| 2082 GenInstrRegister(COP1, S, rt, fs, fd, MOVN_C); |
| 2083 } |
| 2084 |
| 2085 |
| 2086 void Assembler::movn_d(FPURegister fd, FPURegister fs, Register rt) { |
| 2087 DCHECK(IsMipsArchVariant(kMips32r2)); |
| 2088 GenInstrRegister(COP1, D, rt, fs, fd, MOVN_C); |
| 2089 } |
| 2090 |
| 2091 |
| 2092 void Assembler::sel(SecondaryField fmt, FPURegister fd, FPURegister fs, |
| 2093 FPURegister ft) { |
| 2094 DCHECK(IsMipsArchVariant(kMips32r6)); |
| 2095 DCHECK((fmt == D) || (fmt == S)); |
| 2096 |
| 2097 GenInstrRegister(COP1, fmt, ft, fs, fd, SEL); |
| 2098 } |
| 2099 |
| 2100 |
| 2101 void Assembler::sel_s(FPURegister fd, FPURegister fs, FPURegister ft) { |
| 2102 sel(S, fd, fs, ft); |
| 2103 } |
| 2104 |
| 2105 |
| 2106 void Assembler::sel_d(FPURegister fd, FPURegister fs, FPURegister ft) { |
| 2107 sel(D, fd, fs, ft); |
| 2108 } |
| 2109 |
| 2110 |
| 2111 void Assembler::seleqz(SecondaryField fmt, FPURegister fd, FPURegister fs, |
| 2112 FPURegister ft) { |
| 2113 DCHECK(IsMipsArchVariant(kMips32r6)); |
| 2114 DCHECK((fmt == D) || (fmt == S)); |
| 2115 GenInstrRegister(COP1, fmt, ft, fs, fd, SELEQZ_C); |
| 2116 } |
| 2117 |
| 2118 |
| 2119 void Assembler::selnez(Register rd, Register rs, Register rt) { |
| 2120 DCHECK(IsMipsArchVariant(kMips32r6)); |
| 2121 GenInstrRegister(SPECIAL, rs, rt, rd, 0, SELNEZ_S); |
| 2122 } |
| 2123 |
| 2124 |
| 2125 void Assembler::selnez(SecondaryField fmt, FPURegister fd, FPURegister fs, |
| 2126 FPURegister ft) { |
| 2127 DCHECK(IsMipsArchVariant(kMips32r6)); |
| 2128 DCHECK((fmt == D) || (fmt == S)); |
| 2129 GenInstrRegister(COP1, fmt, ft, fs, fd, SELNEZ_C); |
| 2130 } |
| 2131 |
| 2132 |
| 2133 void Assembler::seleqz_d(FPURegister fd, FPURegister fs, FPURegister ft) { |
| 2134 seleqz(D, fd, fs, ft); |
| 2135 } |
| 2136 |
| 2137 |
| 2138 void Assembler::seleqz_s(FPURegister fd, FPURegister fs, FPURegister ft) { |
| 2139 seleqz(S, fd, fs, ft); |
| 2140 } |
| 2141 |
| 2142 |
| 2143 void Assembler::selnez_d(FPURegister fd, FPURegister fs, FPURegister ft) { |
| 2144 selnez(D, fd, fs, ft); |
| 2145 } |
| 2146 |
| 2147 |
| 2148 void Assembler::selnez_s(FPURegister fd, FPURegister fs, FPURegister ft) { |
| 2149 selnez(S, fd, fs, ft); |
| 2150 } |
| 2151 |
| 2152 |
| 2153 void Assembler::movz_s(FPURegister fd, FPURegister fs, Register rt) { |
| 2154 DCHECK(IsMipsArchVariant(kMips32r2)); |
| 2155 GenInstrRegister(COP1, S, rt, fs, fd, MOVZ_C); |
| 2156 } |
| 2157 |
| 2158 |
| 2159 void Assembler::movz_d(FPURegister fd, FPURegister fs, Register rt) { |
| 2160 DCHECK(IsMipsArchVariant(kMips32r2)); |
| 2161 GenInstrRegister(COP1, D, rt, fs, fd, MOVZ_C); |
| 2162 } |
| 2163 |
| 2164 |
| 2165 void Assembler::movt_s(FPURegister fd, FPURegister fs, uint16_t cc) { |
| 2166 DCHECK(IsMipsArchVariant(kMips32r2)); |
| 2167 FPURegister ft; |
| 2168 ft.code_ = (cc & 0x0007) << 2 | 1; |
| 2169 GenInstrRegister(COP1, S, ft, fs, fd, MOVF); |
| 2170 } |
| 2171 |
| 2172 |
| 2173 void Assembler::movt_d(FPURegister fd, FPURegister fs, uint16_t cc) { |
| 2174 DCHECK(IsMipsArchVariant(kMips32r2)); |
| 2175 FPURegister ft; |
| 2176 ft.code_ = (cc & 0x0007) << 2 | 1; |
| 2177 GenInstrRegister(COP1, D, ft, fs, fd, MOVF); |
| 2178 } |
| 2179 |
| 2180 |
| 2181 void Assembler::movf_s(FPURegister fd, FPURegister fs, uint16_t cc) { |
| 2182 DCHECK(IsMipsArchVariant(kMips32r2)); |
| 2183 FPURegister ft; |
| 2184 ft.code_ = (cc & 0x0007) << 2 | 0; |
| 2185 GenInstrRegister(COP1, S, ft, fs, fd, MOVF); |
| 2186 } |
| 2187 |
| 2188 |
| 2189 void Assembler::movf_d(FPURegister fd, FPURegister fs, uint16_t cc) { |
| 2190 DCHECK(IsMipsArchVariant(kMips32r2)); |
| 2191 FPURegister ft; |
| 2192 ft.code_ = (cc & 0x0007) << 2 | 0; |
| 2193 GenInstrRegister(COP1, D, ft, fs, fd, MOVF); |
| 2194 } |
| 2195 |
| 2196 |
2113 // Arithmetic. | 2197 // Arithmetic. |
2114 | 2198 |
2115 void Assembler::add_s(FPURegister fd, FPURegister fs, FPURegister ft) { | 2199 void Assembler::add_s(FPURegister fd, FPURegister fs, FPURegister ft) { |
2116 GenInstrRegister(COP1, S, ft, fs, fd, ADD_D); | 2200 GenInstrRegister(COP1, S, ft, fs, fd, ADD_S); |
2117 } | 2201 } |
2118 | 2202 |
2119 | 2203 |
2120 void Assembler::add_d(FPURegister fd, FPURegister fs, FPURegister ft) { | 2204 void Assembler::add_d(FPURegister fd, FPURegister fs, FPURegister ft) { |
2121 GenInstrRegister(COP1, D, ft, fs, fd, ADD_D); | 2205 GenInstrRegister(COP1, D, ft, fs, fd, ADD_D); |
2122 } | 2206 } |
2123 | 2207 |
2124 | 2208 |
2125 void Assembler::sub_s(FPURegister fd, FPURegister fs, FPURegister ft) { | 2209 void Assembler::sub_s(FPURegister fd, FPURegister fs, FPURegister ft) { |
2126 GenInstrRegister(COP1, S, ft, fs, fd, SUB_D); | 2210 GenInstrRegister(COP1, S, ft, fs, fd, SUB_S); |
2127 } | 2211 } |
2128 | 2212 |
2129 | 2213 |
2130 void Assembler::sub_d(FPURegister fd, FPURegister fs, FPURegister ft) { | 2214 void Assembler::sub_d(FPURegister fd, FPURegister fs, FPURegister ft) { |
2131 GenInstrRegister(COP1, D, ft, fs, fd, SUB_D); | 2215 GenInstrRegister(COP1, D, ft, fs, fd, SUB_D); |
2132 } | 2216 } |
2133 | 2217 |
2134 | 2218 |
2135 void Assembler::mul_s(FPURegister fd, FPURegister fs, FPURegister ft) { | 2219 void Assembler::mul_s(FPURegister fd, FPURegister fs, FPURegister ft) { |
2136 GenInstrRegister(COP1, S, ft, fs, fd, MUL_D); | 2220 GenInstrRegister(COP1, S, ft, fs, fd, MUL_S); |
2137 } | 2221 } |
2138 | 2222 |
2139 | 2223 |
2140 void Assembler::mul_d(FPURegister fd, FPURegister fs, FPURegister ft) { | 2224 void Assembler::mul_d(FPURegister fd, FPURegister fs, FPURegister ft) { |
2141 GenInstrRegister(COP1, D, ft, fs, fd, MUL_D); | 2225 GenInstrRegister(COP1, D, ft, fs, fd, MUL_D); |
2142 } | 2226 } |
2143 | 2227 |
2144 | 2228 |
2145 void Assembler::madd_d(FPURegister fd, FPURegister fr, FPURegister fs, | 2229 void Assembler::madd_d(FPURegister fd, FPURegister fr, FPURegister fs, |
2146 FPURegister ft) { | 2230 FPURegister ft) { |
2147 DCHECK(IsMipsArchVariant(kMips32r2)); | 2231 DCHECK(IsMipsArchVariant(kMips32r2)); |
2148 GenInstrRegister(COP1X, fr, ft, fs, fd, MADD_D); | 2232 GenInstrRegister(COP1X, fr, ft, fs, fd, MADD_D); |
2149 } | 2233 } |
2150 | 2234 |
2151 | 2235 |
2152 void Assembler::div_s(FPURegister fd, FPURegister fs, FPURegister ft) { | 2236 void Assembler::div_s(FPURegister fd, FPURegister fs, FPURegister ft) { |
2153 GenInstrRegister(COP1, S, ft, fs, fd, DIV_D); | 2237 GenInstrRegister(COP1, S, ft, fs, fd, DIV_S); |
2154 } | 2238 } |
2155 | 2239 |
2156 | 2240 |
2157 void Assembler::div_d(FPURegister fd, FPURegister fs, FPURegister ft) { | 2241 void Assembler::div_d(FPURegister fd, FPURegister fs, FPURegister ft) { |
2158 GenInstrRegister(COP1, D, ft, fs, fd, DIV_D); | 2242 GenInstrRegister(COP1, D, ft, fs, fd, DIV_D); |
2159 } | 2243 } |
2160 | 2244 |
2161 | 2245 |
2162 void Assembler::abs_s(FPURegister fd, FPURegister fs) { | 2246 void Assembler::abs_s(FPURegister fd, FPURegister fs) { |
2163 GenInstrRegister(COP1, S, f0, fs, fd, ABS_D); | 2247 GenInstrRegister(COP1, S, f0, fs, fd, ABS_S); |
2164 } | 2248 } |
2165 | 2249 |
2166 | 2250 |
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_S); |
| 2258 } |
| 2259 |
| 2260 |
| 2261 void Assembler::mov_s(FPURegister fd, FPURegister fs) { |
| 2262 GenInstrRegister(COP1, S, f0, fs, fd, MOV_D); |
2174 } | 2263 } |
2175 | 2264 |
2176 | 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_S); |
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_S); |
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_S); |
| 2288 } |
| 2289 |
| 2290 |
| 2291 void Assembler::rsqrt_d(FPURegister fd, FPURegister fs) { |
| 2292 GenInstrRegister(COP1, D, f0, fs, fd, RSQRT_D); |
| 2293 } |
| 2294 |
| 2295 |
| 2296 void Assembler::recip_d(FPURegister fd, FPURegister fs) { |
| 2297 GenInstrRegister(COP1, D, f0, fs, fd, RECIP_D); |
| 2298 } |
| 2299 |
| 2300 |
| 2301 void Assembler::recip_s(FPURegister fd, FPURegister fs) { |
| 2302 GenInstrRegister(COP1, S, f0, fs, fd, RECIP_S); |
| 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) || IsMipsArchVariant(kMips32r6)); |
2263 GenInstrRegister(COP1, S, f0, fs, fd, CVT_L_S); | 2373 GenInstrRegister(COP1, S, f0, fs, fd, CVT_L_S); |
2264 } | 2374 } |
2265 | 2375 |
2266 | 2376 |
2267 void Assembler::cvt_l_d(FPURegister fd, FPURegister fs) { | 2377 void Assembler::cvt_l_d(FPURegister fd, FPURegister fs) { |
2268 DCHECK(IsMipsArchVariant(kMips32r2)); | 2378 DCHECK(IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)); |
2269 GenInstrRegister(COP1, D, f0, fs, fd, CVT_L_D); | 2379 GenInstrRegister(COP1, D, f0, fs, fd, CVT_L_D); |
2270 } | 2380 } |
2271 | 2381 |
2272 | 2382 |
2273 void Assembler::trunc_l_s(FPURegister fd, FPURegister fs) { | 2383 void Assembler::trunc_l_s(FPURegister fd, FPURegister fs) { |
2274 DCHECK(IsMipsArchVariant(kMips32r2)); | 2384 DCHECK(IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)); |
2275 GenInstrRegister(COP1, S, f0, fs, fd, TRUNC_L_S); | 2385 GenInstrRegister(COP1, S, f0, fs, fd, TRUNC_L_S); |
2276 } | 2386 } |
2277 | 2387 |
2278 | 2388 |
2279 void Assembler::trunc_l_d(FPURegister fd, FPURegister fs) { | 2389 void Assembler::trunc_l_d(FPURegister fd, FPURegister fs) { |
2280 DCHECK(IsMipsArchVariant(kMips32r2)); | 2390 DCHECK(IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)); |
2281 GenInstrRegister(COP1, D, f0, fs, fd, TRUNC_L_D); | 2391 GenInstrRegister(COP1, D, f0, fs, fd, TRUNC_L_D); |
2282 } | 2392 } |
2283 | 2393 |
2284 | 2394 |
2285 void Assembler::round_l_s(FPURegister fd, FPURegister fs) { | 2395 void Assembler::round_l_s(FPURegister fd, FPURegister fs) { |
2286 GenInstrRegister(COP1, S, f0, fs, fd, ROUND_L_S); | 2396 GenInstrRegister(COP1, S, f0, fs, fd, ROUND_L_S); |
2287 } | 2397 } |
2288 | 2398 |
2289 | 2399 |
2290 void Assembler::round_l_d(FPURegister fd, FPURegister fs) { | 2400 void Assembler::round_l_d(FPURegister fd, FPURegister fs) { |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2399 GenInstrRegister(COP1, D, f0, fs, fd, CVT_S_D); | 2509 GenInstrRegister(COP1, D, f0, fs, fd, CVT_S_D); |
2400 } | 2510 } |
2401 | 2511 |
2402 | 2512 |
2403 void Assembler::cvt_d_w(FPURegister fd, FPURegister fs) { | 2513 void Assembler::cvt_d_w(FPURegister fd, FPURegister fs) { |
2404 GenInstrRegister(COP1, W, f0, fs, fd, CVT_D_W); | 2514 GenInstrRegister(COP1, W, f0, fs, fd, CVT_D_W); |
2405 } | 2515 } |
2406 | 2516 |
2407 | 2517 |
2408 void Assembler::cvt_d_l(FPURegister fd, FPURegister fs) { | 2518 void Assembler::cvt_d_l(FPURegister fd, FPURegister fs) { |
2409 DCHECK(IsMipsArchVariant(kMips32r2)); | 2519 DCHECK(IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)); |
2410 GenInstrRegister(COP1, L, f0, fs, fd, CVT_D_L); | 2520 GenInstrRegister(COP1, L, f0, fs, fd, CVT_D_L); |
2411 } | 2521 } |
2412 | 2522 |
2413 | 2523 |
2414 void Assembler::cvt_d_s(FPURegister fd, FPURegister fs) { | 2524 void Assembler::cvt_d_s(FPURegister fd, FPURegister fs) { |
2415 GenInstrRegister(COP1, S, f0, fs, fd, CVT_D_S); | 2525 GenInstrRegister(COP1, S, f0, fs, fd, CVT_D_S); |
2416 } | 2526 } |
2417 | 2527 |
2418 | 2528 |
2419 // Conditions for >= MIPSr6. | 2529 // Conditions for >= MIPSr6. |
(...skipping 463 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 |