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 2122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2133 void Assembler::maxa_s(FPURegister fd, FPURegister fs, FPURegister ft) { | 2133 void Assembler::maxa_s(FPURegister fd, FPURegister fs, FPURegister ft) { |
2134 maxa(S, fd, fs, ft); | 2134 maxa(S, fd, fs, ft); |
2135 } | 2135 } |
2136 | 2136 |
2137 | 2137 |
2138 void Assembler::maxa_d(FPURegister fd, FPURegister fs, FPURegister ft) { | 2138 void Assembler::maxa_d(FPURegister fd, FPURegister fs, FPURegister ft) { |
2139 maxa(D, fd, fs, ft); | 2139 maxa(D, fd, fs, ft); |
2140 } | 2140 } |
2141 | 2141 |
2142 | 2142 |
| 2143 void Assembler::sel(SecondaryField fmt, FPURegister fd, FPURegister fs, |
| 2144 FPURegister ft) { |
| 2145 DCHECK(kArchVariant == kMips64r6); |
| 2146 DCHECK((fmt == D) || (fmt == S)); |
| 2147 |
| 2148 Instr instr = COP1 | fmt << kRsShift | ft.code() << kFtShift | |
| 2149 fs.code() << kFsShift | fd.code() << kFdShift | SEL; |
| 2150 emit(instr); |
| 2151 } |
| 2152 |
| 2153 |
| 2154 void Assembler::max(SecondaryField fmt, FPURegister fd, FPURegister fs, |
| 2155 FPURegister ft) { |
| 2156 DCHECK(kArchVariant == kMips64r6); |
| 2157 DCHECK((fmt == D) || (fmt == S)); |
| 2158 GenInstrRegister(COP1, fmt, ft, fs, fd, MAX); |
| 2159 } |
| 2160 |
| 2161 |
| 2162 void Assembler::min(SecondaryField fmt, FPURegister fd, FPURegister fs, |
| 2163 FPURegister ft) { |
| 2164 DCHECK(kArchVariant == kMips64r6); |
| 2165 DCHECK((fmt == D) || (fmt == S)); |
| 2166 GenInstrRegister(COP1, fmt, ft, fs, fd, MIN); |
| 2167 } |
| 2168 |
| 2169 |
2143 // GPR. | 2170 // GPR. |
2144 void Assembler::seleqz(Register rd, Register rs, Register rt) { | 2171 void Assembler::seleqz(Register rd, Register rs, Register rt) { |
2145 DCHECK(kArchVariant == kMips64r6); | 2172 DCHECK(kArchVariant == kMips64r6); |
2146 GenInstrRegister(SPECIAL, rs, rt, rd, 0, SELEQZ_S); | 2173 GenInstrRegister(SPECIAL, rs, rt, rd, 0, SELEQZ_S); |
2147 } | 2174 } |
2148 | 2175 |
2149 | 2176 |
| 2177 // FPR. |
| 2178 void Assembler::seleqz(SecondaryField fmt, FPURegister fd, FPURegister fs, |
| 2179 FPURegister ft) { |
| 2180 DCHECK((fmt == D) || (fmt == S)); |
| 2181 GenInstrRegister(COP1, fmt, ft, fs, fd, SELEQZ_C); |
| 2182 } |
| 2183 |
| 2184 |
2150 // GPR. | 2185 // GPR. |
2151 void Assembler::selnez(Register rd, Register rs, Register rt) { | 2186 void Assembler::selnez(Register rd, Register rs, Register rt) { |
2152 DCHECK(kArchVariant == kMips64r6); | 2187 DCHECK(kArchVariant == kMips64r6); |
2153 GenInstrRegister(SPECIAL, rs, rt, rd, 0, SELNEZ_S); | 2188 GenInstrRegister(SPECIAL, rs, rt, rd, 0, SELNEZ_S); |
2154 } | 2189 } |
2155 | 2190 |
2156 | 2191 |
| 2192 // FPR. |
| 2193 void Assembler::selnez(SecondaryField fmt, FPURegister fd, FPURegister fs, |
| 2194 FPURegister ft) { |
| 2195 DCHECK(kArchVariant == kMips64r6); |
| 2196 DCHECK((fmt == D) || (fmt == S)); |
| 2197 GenInstrRegister(COP1, fmt, ft, fs, fd, SELNEZ_C); |
| 2198 } |
| 2199 |
| 2200 |
2157 // Bit twiddling. | 2201 // Bit twiddling. |
2158 void Assembler::clz(Register rd, Register rs) { | 2202 void Assembler::clz(Register rd, Register rs) { |
2159 if (kArchVariant != kMips64r6) { | 2203 if (kArchVariant != kMips64r6) { |
2160 // Clz instr requires same GPR number in 'rd' and 'rt' fields. | 2204 // Clz instr requires same GPR number in 'rd' and 'rt' fields. |
2161 GenInstrRegister(SPECIAL2, rs, rd, rd, 0, CLZ); | 2205 GenInstrRegister(SPECIAL2, rs, rd, rd, 0, CLZ); |
2162 } else { | 2206 } else { |
2163 GenInstrRegister(SPECIAL, rs, zero_reg, rd, 1, CLZ_R6); | 2207 GenInstrRegister(SPECIAL, rs, zero_reg, rd, 1, CLZ_R6); |
2164 } | 2208 } |
2165 } | 2209 } |
2166 | 2210 |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2282 | 2326 |
2283 void Assembler::DoubleAsTwoUInt32(double d, uint32_t* lo, uint32_t* hi) { | 2327 void Assembler::DoubleAsTwoUInt32(double d, uint32_t* lo, uint32_t* hi) { |
2284 uint64_t i; | 2328 uint64_t i; |
2285 memcpy(&i, &d, 8); | 2329 memcpy(&i, &d, 8); |
2286 | 2330 |
2287 *lo = i & 0xffffffff; | 2331 *lo = i & 0xffffffff; |
2288 *hi = i >> 32; | 2332 *hi = i >> 32; |
2289 } | 2333 } |
2290 | 2334 |
2291 | 2335 |
2292 void Assembler::sel(SecondaryField fmt, FPURegister fd, FPURegister fs, | |
2293 FPURegister ft) { | |
2294 DCHECK(kArchVariant == kMips64r6); | |
2295 DCHECK((fmt == D) || (fmt == S)); | |
2296 | |
2297 GenInstrRegister(COP1, fmt, ft, fs, fd, SEL); | |
2298 } | |
2299 | |
2300 | |
2301 void Assembler::sel_s(FPURegister fd, FPURegister fs, FPURegister ft) { | |
2302 sel(S, fd, fs, ft); | |
2303 } | |
2304 | |
2305 | |
2306 void Assembler::sel_d(FPURegister fd, FPURegister fs, FPURegister ft) { | |
2307 sel(D, fd, fs, ft); | |
2308 } | |
2309 | |
2310 | |
2311 void Assembler::max(SecondaryField fmt, FPURegister fd, FPURegister fs, | |
2312 FPURegister ft) { | |
2313 DCHECK(kArchVariant == kMips64r6); | |
2314 DCHECK((fmt == D) || (fmt == S)); | |
2315 GenInstrRegister(COP1, fmt, ft, fs, fd, MAX); | |
2316 } | |
2317 | |
2318 | |
2319 void Assembler::min(SecondaryField fmt, FPURegister fd, FPURegister fs, | |
2320 FPURegister ft) { | |
2321 DCHECK(kArchVariant == kMips64r6); | |
2322 DCHECK((fmt == D) || (fmt == S)); | |
2323 GenInstrRegister(COP1, fmt, ft, fs, fd, MIN); | |
2324 } | |
2325 | |
2326 | |
2327 // FPR. | |
2328 void Assembler::seleqz(SecondaryField fmt, FPURegister fd, FPURegister fs, | |
2329 FPURegister ft) { | |
2330 DCHECK((fmt == D) || (fmt == S)); | |
2331 GenInstrRegister(COP1, fmt, ft, fs, fd, SELEQZ_C); | |
2332 } | |
2333 | |
2334 | |
2335 void Assembler::seleqz_d(FPURegister fd, FPURegister fs, FPURegister ft) { | |
2336 seleqz(D, fd, fs, ft); | |
2337 } | |
2338 | |
2339 | |
2340 void Assembler::seleqz_s(FPURegister fd, FPURegister fs, FPURegister ft) { | |
2341 seleqz(S, fd, fs, ft); | |
2342 } | |
2343 | |
2344 | |
2345 void Assembler::selnez_d(FPURegister fd, FPURegister fs, FPURegister ft) { | |
2346 selnez(D, fd, fs, ft); | |
2347 } | |
2348 | |
2349 | |
2350 void Assembler::selnez_s(FPURegister fd, FPURegister fs, FPURegister ft) { | |
2351 selnez(S, fd, fs, ft); | |
2352 } | |
2353 | |
2354 | |
2355 void Assembler::movz_s(FPURegister fd, FPURegister fs, Register rt) { | |
2356 DCHECK(kArchVariant == kMips64r2); | |
2357 GenInstrRegister(COP1, S, rt, fs, fd, MOVZ_C); | |
2358 } | |
2359 | |
2360 | |
2361 void Assembler::movz_d(FPURegister fd, FPURegister fs, Register rt) { | |
2362 DCHECK(kArchVariant == kMips64r2); | |
2363 GenInstrRegister(COP1, D, rt, fs, fd, MOVZ_C); | |
2364 } | |
2365 | |
2366 | |
2367 void Assembler::movt_s(FPURegister fd, FPURegister fs, uint16_t cc) { | |
2368 DCHECK(kArchVariant == kMips64r2); | |
2369 FPURegister ft; | |
2370 ft.code_ = (cc & 0x0007) << 2 | 1; | |
2371 GenInstrRegister(COP1, S, ft, fs, fd, MOVF); | |
2372 } | |
2373 | |
2374 | |
2375 void Assembler::movt_d(FPURegister fd, FPURegister fs, uint16_t cc) { | |
2376 DCHECK(kArchVariant == kMips64r2); | |
2377 FPURegister ft; | |
2378 ft.code_ = (cc & 0x0007) << 2 | 1; | |
2379 GenInstrRegister(COP1, D, ft, fs, fd, MOVF); | |
2380 } | |
2381 | |
2382 | |
2383 void Assembler::movf_s(FPURegister fd, FPURegister fs, uint16_t cc) { | |
2384 DCHECK(kArchVariant == kMips64r2); | |
2385 FPURegister ft; | |
2386 ft.code_ = (cc & 0x0007) << 2 | 0; | |
2387 GenInstrRegister(COP1, S, ft, fs, fd, MOVF); | |
2388 } | |
2389 | |
2390 | |
2391 void Assembler::movf_d(FPURegister fd, FPURegister fs, uint16_t cc) { | |
2392 DCHECK(kArchVariant == kMips64r2); | |
2393 FPURegister ft; | |
2394 ft.code_ = (cc & 0x0007) << 2 | 0; | |
2395 GenInstrRegister(COP1, D, ft, fs, fd, MOVF); | |
2396 } | |
2397 | |
2398 | |
2399 void Assembler::movn_s(FPURegister fd, FPURegister fs, Register rt) { | |
2400 DCHECK(kArchVariant == kMips64r2); | |
2401 GenInstrRegister(COP1, S, rt, fs, fd, MOVN_C); | |
2402 } | |
2403 | |
2404 | |
2405 void Assembler::movn_d(FPURegister fd, FPURegister fs, Register rt) { | |
2406 DCHECK(kArchVariant == kMips64r2); | |
2407 GenInstrRegister(COP1, D, rt, fs, fd, MOVN_C); | |
2408 } | |
2409 | |
2410 | |
2411 // FPR. | |
2412 void Assembler::selnez(SecondaryField fmt, FPURegister fd, FPURegister fs, | |
2413 FPURegister ft) { | |
2414 DCHECK(kArchVariant == kMips64r6); | |
2415 DCHECK((fmt == D) || (fmt == S)); | |
2416 GenInstrRegister(COP1, fmt, ft, fs, fd, SELNEZ_C); | |
2417 } | |
2418 | |
2419 | |
2420 // Arithmetic. | 2336 // Arithmetic. |
2421 | 2337 |
2422 void Assembler::add_s(FPURegister fd, FPURegister fs, FPURegister ft) { | 2338 void Assembler::add_s(FPURegister fd, FPURegister fs, FPURegister ft) { |
2423 GenInstrRegister(COP1, S, ft, fs, fd, ADD_D); | 2339 GenInstrRegister(COP1, S, ft, fs, fd, ADD_D); |
2424 } | 2340 } |
2425 | 2341 |
2426 | 2342 |
2427 void Assembler::add_d(FPURegister fd, FPURegister fs, FPURegister ft) { | 2343 void Assembler::add_d(FPURegister fd, FPURegister fs, FPURegister ft) { |
2428 GenInstrRegister(COP1, D, ft, fs, fd, ADD_D); | 2344 GenInstrRegister(COP1, D, ft, fs, fd, ADD_D); |
2429 } | 2345 } |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2473 void Assembler::abs_d(FPURegister fd, FPURegister fs) { | 2389 void Assembler::abs_d(FPURegister fd, FPURegister fs) { |
2474 GenInstrRegister(COP1, D, f0, fs, fd, ABS_D); | 2390 GenInstrRegister(COP1, D, f0, fs, fd, ABS_D); |
2475 } | 2391 } |
2476 | 2392 |
2477 | 2393 |
2478 void Assembler::mov_d(FPURegister fd, FPURegister fs) { | 2394 void Assembler::mov_d(FPURegister fd, FPURegister fs) { |
2479 GenInstrRegister(COP1, D, f0, fs, fd, MOV_D); | 2395 GenInstrRegister(COP1, D, f0, fs, fd, MOV_D); |
2480 } | 2396 } |
2481 | 2397 |
2482 | 2398 |
2483 void Assembler::mov_s(FPURegister fd, FPURegister fs) { | |
2484 GenInstrRegister(COP1, S, f0, fs, fd, MOV_D); | |
2485 } | |
2486 | |
2487 | |
2488 void Assembler::neg_s(FPURegister fd, FPURegister fs) { | 2399 void Assembler::neg_s(FPURegister fd, FPURegister fs) { |
2489 GenInstrRegister(COP1, S, f0, fs, fd, NEG_D); | 2400 GenInstrRegister(COP1, S, f0, fs, fd, NEG_D); |
2490 } | 2401 } |
2491 | 2402 |
2492 | 2403 |
2493 void Assembler::neg_d(FPURegister fd, FPURegister fs) { | 2404 void Assembler::neg_d(FPURegister fd, FPURegister fs) { |
2494 GenInstrRegister(COP1, D, f0, fs, fd, NEG_D); | 2405 GenInstrRegister(COP1, D, f0, fs, fd, NEG_D); |
2495 } | 2406 } |
2496 | 2407 |
2497 | 2408 |
2498 void Assembler::sqrt_s(FPURegister fd, FPURegister fs) { | 2409 void Assembler::sqrt_s(FPURegister fd, FPURegister fs) { |
2499 GenInstrRegister(COP1, S, f0, fs, fd, SQRT_D); | 2410 GenInstrRegister(COP1, S, f0, fs, fd, SQRT_D); |
2500 } | 2411 } |
2501 | 2412 |
2502 | 2413 |
2503 void Assembler::sqrt_d(FPURegister fd, FPURegister fs) { | 2414 void Assembler::sqrt_d(FPURegister fd, FPURegister fs) { |
2504 GenInstrRegister(COP1, D, f0, fs, fd, SQRT_D); | 2415 GenInstrRegister(COP1, D, f0, fs, fd, SQRT_D); |
2505 } | 2416 } |
2506 | 2417 |
2507 | 2418 |
2508 void Assembler::rsqrt_s(FPURegister fd, FPURegister fs) { | |
2509 GenInstrRegister(COP1, S, f0, fs, fd, RSQRT_S); | |
2510 } | |
2511 | |
2512 | |
2513 void Assembler::rsqrt_d(FPURegister fd, FPURegister fs) { | |
2514 GenInstrRegister(COP1, D, f0, fs, fd, RSQRT_D); | |
2515 } | |
2516 | |
2517 | |
2518 void Assembler::recip_d(FPURegister fd, FPURegister fs) { | |
2519 GenInstrRegister(COP1, D, f0, fs, fd, RECIP_D); | |
2520 } | |
2521 | |
2522 | |
2523 void Assembler::recip_s(FPURegister fd, FPURegister fs) { | |
2524 GenInstrRegister(COP1, S, f0, fs, fd, RECIP_S); | |
2525 } | |
2526 | |
2527 | |
2528 // Conversions. | 2419 // Conversions. |
| 2420 |
2529 void Assembler::cvt_w_s(FPURegister fd, FPURegister fs) { | 2421 void Assembler::cvt_w_s(FPURegister fd, FPURegister fs) { |
2530 GenInstrRegister(COP1, S, f0, fs, fd, CVT_W_S); | 2422 GenInstrRegister(COP1, S, f0, fs, fd, CVT_W_S); |
2531 } | 2423 } |
2532 | 2424 |
2533 | 2425 |
2534 void Assembler::cvt_w_d(FPURegister fd, FPURegister fs) { | 2426 void Assembler::cvt_w_d(FPURegister fd, FPURegister fs) { |
2535 GenInstrRegister(COP1, D, f0, fs, fd, CVT_W_D); | 2427 GenInstrRegister(COP1, D, f0, fs, fd, CVT_W_D); |
2536 } | 2428 } |
2537 | 2429 |
2538 | 2430 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2577 | 2469 |
2578 | 2470 |
2579 void Assembler::rint_s(FPURegister fd, FPURegister fs) { rint(S, fd, fs); } | 2471 void Assembler::rint_s(FPURegister fd, FPURegister fs) { rint(S, fd, fs); } |
2580 | 2472 |
2581 | 2473 |
2582 void Assembler::rint_d(FPURegister fd, FPURegister fs) { rint(D, fd, fs); } | 2474 void Assembler::rint_d(FPURegister fd, FPURegister fs) { rint(D, fd, fs); } |
2583 | 2475 |
2584 | 2476 |
2585 void Assembler::rint(SecondaryField fmt, FPURegister fd, FPURegister fs) { | 2477 void Assembler::rint(SecondaryField fmt, FPURegister fd, FPURegister fs) { |
2586 DCHECK(kArchVariant == kMips64r6); | 2478 DCHECK(kArchVariant == kMips64r6); |
2587 GenInstrRegister(COP1, fmt, f0, fs, fd, RINT); | 2479 GenInstrRegister(COP1, D, f0, fs, fd, RINT); |
2588 } | 2480 } |
2589 | 2481 |
2590 | 2482 |
2591 void Assembler::cvt_l_s(FPURegister fd, FPURegister fs) { | 2483 void Assembler::cvt_l_s(FPURegister fd, FPURegister fs) { |
2592 DCHECK(kArchVariant == kMips64r2 || kArchVariant == kMips64r6); | 2484 DCHECK(kArchVariant == kMips64r2); |
2593 GenInstrRegister(COP1, S, f0, fs, fd, CVT_L_S); | 2485 GenInstrRegister(COP1, S, f0, fs, fd, CVT_L_S); |
2594 } | 2486 } |
2595 | 2487 |
2596 | 2488 |
2597 void Assembler::cvt_l_d(FPURegister fd, FPURegister fs) { | 2489 void Assembler::cvt_l_d(FPURegister fd, FPURegister fs) { |
2598 DCHECK(kArchVariant == kMips64r2 || kArchVariant == kMips64r6); | 2490 DCHECK(kArchVariant == kMips64r2); |
2599 GenInstrRegister(COP1, D, f0, fs, fd, CVT_L_D); | 2491 GenInstrRegister(COP1, D, f0, fs, fd, CVT_L_D); |
2600 } | 2492 } |
2601 | 2493 |
2602 | 2494 |
2603 void Assembler::trunc_l_s(FPURegister fd, FPURegister fs) { | 2495 void Assembler::trunc_l_s(FPURegister fd, FPURegister fs) { |
2604 DCHECK(kArchVariant == kMips64r2); | 2496 DCHECK(kArchVariant == kMips64r2); |
2605 GenInstrRegister(COP1, S, f0, fs, fd, TRUNC_L_S); | 2497 GenInstrRegister(COP1, S, f0, fs, fd, TRUNC_L_S); |
2606 } | 2498 } |
2607 | 2499 |
2608 | 2500 |
(...skipping 26 matching lines...) Expand all Loading... |
2635 void Assembler::ceil_l_s(FPURegister fd, FPURegister fs) { | 2527 void Assembler::ceil_l_s(FPURegister fd, FPURegister fs) { |
2636 GenInstrRegister(COP1, S, f0, fs, fd, CEIL_L_S); | 2528 GenInstrRegister(COP1, S, f0, fs, fd, CEIL_L_S); |
2637 } | 2529 } |
2638 | 2530 |
2639 | 2531 |
2640 void Assembler::ceil_l_d(FPURegister fd, FPURegister fs) { | 2532 void Assembler::ceil_l_d(FPURegister fd, FPURegister fs) { |
2641 GenInstrRegister(COP1, D, f0, fs, fd, CEIL_L_D); | 2533 GenInstrRegister(COP1, D, f0, fs, fd, CEIL_L_D); |
2642 } | 2534 } |
2643 | 2535 |
2644 | 2536 |
2645 void Assembler::mina(SecondaryField fmt, FPURegister fd, FPURegister fs, | 2537 void Assembler::mina(SecondaryField fmt, FPURegister fd, FPURegister ft, |
2646 FPURegister ft) { | 2538 FPURegister fs) { |
2647 DCHECK(kArchVariant == kMips64r6); | 2539 DCHECK(kArchVariant == kMips64r6); |
2648 DCHECK((fmt == D) || (fmt == S)); | 2540 DCHECK((fmt == D) || (fmt == S)); |
2649 GenInstrRegister(COP1, fmt, ft, fs, fd, MINA); | 2541 GenInstrRegister(COP1, fmt, ft, fs, fd, MINA); |
2650 } | 2542 } |
2651 | 2543 |
2652 | 2544 |
2653 void Assembler::maxa(SecondaryField fmt, FPURegister fd, FPURegister fs, | 2545 void Assembler::maxa(SecondaryField fmt, FPURegister fd, FPURegister ft, |
2654 FPURegister ft) { | 2546 FPURegister fs) { |
2655 DCHECK(kArchVariant == kMips64r6); | 2547 DCHECK(kArchVariant == kMips64r6); |
2656 DCHECK((fmt == D) || (fmt == S)); | 2548 DCHECK((fmt == D) || (fmt == S)); |
2657 GenInstrRegister(COP1, fmt, ft, fs, fd, MAXA); | 2549 GenInstrRegister(COP1, fmt, ft, fs, fd, MAXA); |
2658 } | 2550 } |
2659 | 2551 |
2660 | 2552 |
2661 void Assembler::cvt_s_w(FPURegister fd, FPURegister fs) { | 2553 void Assembler::cvt_s_w(FPURegister fd, FPURegister fs) { |
2662 GenInstrRegister(COP1, W, f0, fs, fd, CVT_S_W); | 2554 GenInstrRegister(COP1, W, f0, fs, fd, CVT_S_W); |
2663 } | 2555 } |
2664 | 2556 |
2665 | 2557 |
2666 void Assembler::cvt_s_l(FPURegister fd, FPURegister fs) { | 2558 void Assembler::cvt_s_l(FPURegister fd, FPURegister fs) { |
2667 DCHECK(kArchVariant == kMips64r2 || kArchVariant == kMips64r6); | 2559 DCHECK(kArchVariant == kMips64r2); |
2668 GenInstrRegister(COP1, L, f0, fs, fd, CVT_S_L); | 2560 GenInstrRegister(COP1, L, f0, fs, fd, CVT_S_L); |
2669 } | 2561 } |
2670 | 2562 |
2671 | 2563 |
2672 void Assembler::cvt_s_d(FPURegister fd, FPURegister fs) { | 2564 void Assembler::cvt_s_d(FPURegister fd, FPURegister fs) { |
2673 GenInstrRegister(COP1, D, f0, fs, fd, CVT_S_D); | 2565 GenInstrRegister(COP1, D, f0, fs, fd, CVT_S_D); |
2674 } | 2566 } |
2675 | 2567 |
2676 | 2568 |
2677 void Assembler::cvt_d_w(FPURegister fd, FPURegister fs) { | 2569 void Assembler::cvt_d_w(FPURegister fd, FPURegister fs) { |
2678 GenInstrRegister(COP1, W, f0, fs, fd, CVT_D_W); | 2570 GenInstrRegister(COP1, W, f0, fs, fd, CVT_D_W); |
2679 } | 2571 } |
2680 | 2572 |
2681 | 2573 |
2682 void Assembler::cvt_d_l(FPURegister fd, FPURegister fs) { | 2574 void Assembler::cvt_d_l(FPURegister fd, FPURegister fs) { |
2683 DCHECK(kArchVariant == kMips64r2 || kArchVariant == kMips64r6); | 2575 DCHECK(kArchVariant == kMips64r2); |
2684 GenInstrRegister(COP1, L, f0, fs, fd, CVT_D_L); | 2576 GenInstrRegister(COP1, L, f0, fs, fd, CVT_D_L); |
2685 } | 2577 } |
2686 | 2578 |
2687 | 2579 |
2688 void Assembler::cvt_d_s(FPURegister fd, FPURegister fs) { | 2580 void Assembler::cvt_d_s(FPURegister fd, FPURegister fs) { |
2689 GenInstrRegister(COP1, S, f0, fs, fd, CVT_D_S); | 2581 GenInstrRegister(COP1, S, f0, fs, fd, CVT_D_S); |
2690 } | 2582 } |
2691 | 2583 |
2692 | 2584 |
2693 // Conditions for >= MIPSr6. | 2585 // Conditions for >= MIPSr6. |
(...skipping 19 matching lines...) Expand all Loading... |
2713 Instr instr = COP1 | BC1NEZ | ft.code() << kFtShift | (offset & kImm16Mask); | 2605 Instr instr = COP1 | BC1NEZ | ft.code() << kFtShift | (offset & kImm16Mask); |
2714 emit(instr); | 2606 emit(instr); |
2715 } | 2607 } |
2716 | 2608 |
2717 | 2609 |
2718 // Conditions for < MIPSr6. | 2610 // Conditions for < MIPSr6. |
2719 void Assembler::c(FPUCondition cond, SecondaryField fmt, | 2611 void Assembler::c(FPUCondition cond, SecondaryField fmt, |
2720 FPURegister fs, FPURegister ft, uint16_t cc) { | 2612 FPURegister fs, FPURegister ft, uint16_t cc) { |
2721 DCHECK(kArchVariant != kMips64r6); | 2613 DCHECK(kArchVariant != kMips64r6); |
2722 DCHECK(is_uint3(cc)); | 2614 DCHECK(is_uint3(cc)); |
2723 DCHECK(fmt == S || fmt == D); | |
2724 DCHECK((fmt & ~(31 << kRsShift)) == 0); | 2615 DCHECK((fmt & ~(31 << kRsShift)) == 0); |
2725 Instr instr = COP1 | fmt | ft.code() << kFtShift | fs.code() << kFsShift | 2616 Instr instr = COP1 | fmt | ft.code() << kFtShift | fs.code() << kFsShift |
2726 | cc << 8 | 3 << 4 | cond; | 2617 | cc << 8 | 3 << 4 | cond; |
2727 emit(instr); | 2618 emit(instr); |
2728 } | 2619 } |
2729 | 2620 |
2730 | 2621 |
2731 void Assembler::fcmp(FPURegister src1, const double src2, | 2622 void Assembler::fcmp(FPURegister src1, const double src2, |
2732 FPUCondition cond) { | 2623 FPUCondition cond) { |
2733 DCHECK(src2 == 0.0); | 2624 DCHECK(src2 == 0.0); |
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3080 void Assembler::PopulateConstantPool(ConstantPoolArray* constant_pool) { | 2971 void Assembler::PopulateConstantPool(ConstantPoolArray* constant_pool) { |
3081 // No out-of-line constant pool support. | 2972 // No out-of-line constant pool support. |
3082 DCHECK(!FLAG_enable_ool_constant_pool); | 2973 DCHECK(!FLAG_enable_ool_constant_pool); |
3083 return; | 2974 return; |
3084 } | 2975 } |
3085 | 2976 |
3086 | 2977 |
3087 } } // namespace v8::internal | 2978 } } // namespace v8::internal |
3088 | 2979 |
3089 #endif // V8_TARGET_ARCH_MIPS64 | 2980 #endif // V8_TARGET_ARCH_MIPS64 |
OLD | NEW |