Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(26)

Side by Side Diff: src/mips64/assembler-mips64.cc

Issue 1119203003: MIPS: Add float instructions and test coverage, part one (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Bug fix in MIPS10 assembler test Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 2127 matching lines...) Expand 10 before | Expand all | Expand 10 after
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, 2143 void Assembler::sel(SecondaryField fmt, FPURegister fd, FPURegister fs,
2144 FPURegister ft) { 2144 FPURegister ft) {
2145 DCHECK(kArchVariant == kMips64r6); 2145 DCHECK(kArchVariant == kMips64r6);
2146 DCHECK((fmt == D) || (fmt == S)); 2146 DCHECK((fmt == D) || (fmt == S));
2147 2147
2148 Instr instr = COP1 | fmt << kRsShift | ft.code() << kFtShift | 2148 GenInstrRegister(COP1, fmt, ft, fs, fd, SEL);
2149 fs.code() << kFsShift | fd.code() << kFdShift | SEL;
2150 emit(instr);
2151 } 2149 }
2152 2150
2153 2151
2152 void Assembler::sel_s(FPURegister fd, FPURegister fs, FPURegister ft) {
2153 sel(S, fd, fs, ft);
2154 }
2155
2156
2157 void Assembler::sel_d(FPURegister fd, FPURegister fs, FPURegister ft) {
2158 sel(D, fd, fs, ft);
2159 }
2160
2161
2154 void Assembler::max(SecondaryField fmt, FPURegister fd, FPURegister fs, 2162 void Assembler::max(SecondaryField fmt, FPURegister fd, FPURegister fs,
2155 FPURegister ft) { 2163 FPURegister ft) {
2156 DCHECK(kArchVariant == kMips64r6); 2164 DCHECK(kArchVariant == kMips64r6);
2157 DCHECK((fmt == D) || (fmt == S)); 2165 DCHECK((fmt == D) || (fmt == S));
2158 GenInstrRegister(COP1, fmt, ft, fs, fd, MAX); 2166 GenInstrRegister(COP1, fmt, ft, fs, fd, MAX);
2159 } 2167 }
2160 2168
2161 2169
2162 void Assembler::min(SecondaryField fmt, FPURegister fd, FPURegister fs, 2170 void Assembler::min(SecondaryField fmt, FPURegister fd, FPURegister fs,
2163 FPURegister ft) { 2171 FPURegister ft) {
(...skipping 18 matching lines...) Expand all
2182 } 2190 }
2183 2191
2184 2192
2185 // GPR. 2193 // GPR.
2186 void Assembler::selnez(Register rd, Register rs, Register rt) { 2194 void Assembler::selnez(Register rd, Register rs, Register rt) {
2187 DCHECK(kArchVariant == kMips64r6); 2195 DCHECK(kArchVariant == kMips64r6);
2188 GenInstrRegister(SPECIAL, rs, rt, rd, 0, SELNEZ_S); 2196 GenInstrRegister(SPECIAL, rs, rt, rd, 0, SELNEZ_S);
2189 } 2197 }
2190 2198
2191 2199
2200 void Assembler::seleqz_d(FPURegister fd, FPURegister fs, FPURegister ft) {
2201 seleqz(D, fd, fs, ft);
2202 }
2203
2204
2205 void Assembler::seleqz_s(FPURegister fd, FPURegister fs, FPURegister ft) {
2206 seleqz(S, fd, fs, ft);
2207 }
2208
2209
2210 void Assembler::selnez_d(FPURegister fd, FPURegister fs, FPURegister ft) {
2211 selnez(D, fd, fs, ft);
2212 }
2213
2214
2215 void Assembler::selnez_s(FPURegister fd, FPURegister fs, FPURegister ft) {
2216 selnez(S, fd, fs, ft);
2217 }
2218
2219
2220 void Assembler::movz_s(FPURegister fd, FPURegister fs, Register rt) {
2221 DCHECK(kArchVariant == kMips64r2);
2222 GenInstrRegister(COP1, S, rt, fs, fd, MOVZ_C);
2223 }
2224
2225
2226 void Assembler::movz_d(FPURegister fd, FPURegister fs, Register rt) {
2227 DCHECK(kArchVariant == kMips64r2);
2228 GenInstrRegister(COP1, D, rt, fs, fd, MOVZ_C);
2229 }
2230
2231
2232 void Assembler::movt_s(FPURegister fd, FPURegister fs, uint16_t cc) {
2233 DCHECK(kArchVariant == kMips64r2);
2234 FPURegister ft;
2235 ft.code_ = (cc & 0x0007) << 2 | 1;
2236 GenInstrRegister(COP1, S, ft, fs, fd, MOVF);
2237 }
2238
2239
2240 void Assembler::movt_d(FPURegister fd, FPURegister fs, uint16_t cc) {
2241 DCHECK(kArchVariant == kMips64r2);
2242 FPURegister ft;
2243 ft.code_ = (cc & 0x0007) << 2 | 1;
2244 GenInstrRegister(COP1, D, ft, fs, fd, MOVF);
2245 }
2246
2247
2248 void Assembler::movf_s(FPURegister fd, FPURegister fs, uint16_t cc) {
2249 DCHECK(kArchVariant == kMips64r2);
2250 FPURegister ft;
2251 ft.code_ = (cc & 0x0007) << 2 | 0;
2252 GenInstrRegister(COP1, S, ft, fs, fd, MOVF);
2253 }
2254
2255
2256 void Assembler::movf_d(FPURegister fd, FPURegister fs, uint16_t cc) {
2257 DCHECK(kArchVariant == kMips64r2);
2258 FPURegister ft;
2259 ft.code_ = (cc & 0x0007) << 2 | 0;
2260 GenInstrRegister(COP1, D, ft, fs, fd, MOVF);
2261 }
2262
2263
2264 void Assembler::movn_s(FPURegister fd, FPURegister fs, Register rt) {
2265 DCHECK(kArchVariant == kMips64r2);
2266 GenInstrRegister(COP1, S, rt, fs, fd, MOVN_C);
2267 }
2268
2269
2270 void Assembler::movn_d(FPURegister fd, FPURegister fs, Register rt) {
2271 DCHECK(kArchVariant == kMips64r2);
2272 GenInstrRegister(COP1, D, rt, fs, fd, MOVN_C);
2273 }
2274
2275
2192 // FPR. 2276 // FPR.
2193 void Assembler::selnez(SecondaryField fmt, FPURegister fd, FPURegister fs, 2277 void Assembler::selnez(SecondaryField fmt, FPURegister fd, FPURegister fs,
2194 FPURegister ft) { 2278 FPURegister ft) {
2195 DCHECK(kArchVariant == kMips64r6); 2279 DCHECK(kArchVariant == kMips64r6);
2196 DCHECK((fmt == D) || (fmt == S)); 2280 DCHECK((fmt == D) || (fmt == S));
2197 GenInstrRegister(COP1, fmt, ft, fs, fd, SELNEZ_C); 2281 GenInstrRegister(COP1, fmt, ft, fs, fd, SELNEZ_C);
2198 } 2282 }
2199 2283
2200 2284
2201 // Bit twiddling. 2285 // Bit twiddling.
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
2389 void Assembler::abs_d(FPURegister fd, FPURegister fs) { 2473 void Assembler::abs_d(FPURegister fd, FPURegister fs) {
2390 GenInstrRegister(COP1, D, f0, fs, fd, ABS_D); 2474 GenInstrRegister(COP1, D, f0, fs, fd, ABS_D);
2391 } 2475 }
2392 2476
2393 2477
2394 void Assembler::mov_d(FPURegister fd, FPURegister fs) { 2478 void Assembler::mov_d(FPURegister fd, FPURegister fs) {
2395 GenInstrRegister(COP1, D, f0, fs, fd, MOV_D); 2479 GenInstrRegister(COP1, D, f0, fs, fd, MOV_D);
2396 } 2480 }
2397 2481
2398 2482
2483 void Assembler::mov_s(FPURegister fd, FPURegister fs) {
2484 GenInstrRegister(COP1, S, f0, fs, fd, MOV_D);
2485 }
2486
2487
2399 void Assembler::neg_s(FPURegister fd, FPURegister fs) { 2488 void Assembler::neg_s(FPURegister fd, FPURegister fs) {
2400 GenInstrRegister(COP1, S, f0, fs, fd, NEG_D); 2489 GenInstrRegister(COP1, S, f0, fs, fd, NEG_D);
2401 } 2490 }
2402 2491
2403 2492
2404 void Assembler::neg_d(FPURegister fd, FPURegister fs) { 2493 void Assembler::neg_d(FPURegister fd, FPURegister fs) {
2405 GenInstrRegister(COP1, D, f0, fs, fd, NEG_D); 2494 GenInstrRegister(COP1, D, f0, fs, fd, NEG_D);
2406 } 2495 }
2407 2496
2408 2497
2409 void Assembler::sqrt_s(FPURegister fd, FPURegister fs) { 2498 void Assembler::sqrt_s(FPURegister fd, FPURegister fs) {
2410 GenInstrRegister(COP1, S, f0, fs, fd, SQRT_D); 2499 GenInstrRegister(COP1, S, f0, fs, fd, SQRT_D);
2411 } 2500 }
2412 2501
2413 2502
2414 void Assembler::sqrt_d(FPURegister fd, FPURegister fs) { 2503 void Assembler::sqrt_d(FPURegister fd, FPURegister fs) {
2415 GenInstrRegister(COP1, D, f0, fs, fd, SQRT_D); 2504 GenInstrRegister(COP1, D, f0, fs, fd, SQRT_D);
2416 } 2505 }
2417 2506
2418 2507
2508 void Assembler::rsqrt_s(FPURegister fd, FPURegister fs) {
2509 GenInstrRegister(COP1, S, f0, fs, fd, RSQRT_D);
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);
2520 }
2521
2522
2523 void Assembler::recip_s(FPURegister fd, FPURegister fs) {
2524 GenInstrRegister(COP1, S, f0, fs, fd, RECIP);
2525 }
2526
2527
2419 // Conversions. 2528 // Conversions.
2420
2421 void Assembler::cvt_w_s(FPURegister fd, FPURegister fs) { 2529 void Assembler::cvt_w_s(FPURegister fd, FPURegister fs) {
2422 GenInstrRegister(COP1, S, f0, fs, fd, CVT_W_S); 2530 GenInstrRegister(COP1, S, f0, fs, fd, CVT_W_S);
2423 } 2531 }
2424 2532
2425 2533
2426 void Assembler::cvt_w_d(FPURegister fd, FPURegister fs) { 2534 void Assembler::cvt_w_d(FPURegister fd, FPURegister fs) {
2427 GenInstrRegister(COP1, D, f0, fs, fd, CVT_W_D); 2535 GenInstrRegister(COP1, D, f0, fs, fd, CVT_W_D);
2428 } 2536 }
2429 2537
2430 2538
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
2469 2577
2470 2578
2471 void Assembler::rint_s(FPURegister fd, FPURegister fs) { rint(S, fd, fs); } 2579 void Assembler::rint_s(FPURegister fd, FPURegister fs) { rint(S, fd, fs); }
2472 2580
2473 2581
2474 void Assembler::rint_d(FPURegister fd, FPURegister fs) { rint(D, fd, fs); } 2582 void Assembler::rint_d(FPURegister fd, FPURegister fs) { rint(D, fd, fs); }
2475 2583
2476 2584
2477 void Assembler::rint(SecondaryField fmt, FPURegister fd, FPURegister fs) { 2585 void Assembler::rint(SecondaryField fmt, FPURegister fd, FPURegister fs) {
2478 DCHECK(kArchVariant == kMips64r6); 2586 DCHECK(kArchVariant == kMips64r6);
2479 GenInstrRegister(COP1, D, f0, fs, fd, RINT); 2587 GenInstrRegister(COP1, fmt, f0, fs, fd, RINT);
2480 } 2588 }
2481 2589
2482 2590
2483 void Assembler::cvt_l_s(FPURegister fd, FPURegister fs) { 2591 void Assembler::cvt_l_s(FPURegister fd, FPURegister fs) {
2484 DCHECK(kArchVariant == kMips64r2); 2592 DCHECK(kArchVariant == kMips64r2);
2485 GenInstrRegister(COP1, S, f0, fs, fd, CVT_L_S); 2593 GenInstrRegister(COP1, S, f0, fs, fd, CVT_L_S);
2486 } 2594 }
2487 2595
2488 2596
2489 void Assembler::cvt_l_d(FPURegister fd, FPURegister fs) { 2597 void Assembler::cvt_l_d(FPURegister fd, FPURegister fs) {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
2527 void Assembler::ceil_l_s(FPURegister fd, FPURegister fs) { 2635 void Assembler::ceil_l_s(FPURegister fd, FPURegister fs) {
2528 GenInstrRegister(COP1, S, f0, fs, fd, CEIL_L_S); 2636 GenInstrRegister(COP1, S, f0, fs, fd, CEIL_L_S);
2529 } 2637 }
2530 2638
2531 2639
2532 void Assembler::ceil_l_d(FPURegister fd, FPURegister fs) { 2640 void Assembler::ceil_l_d(FPURegister fd, FPURegister fs) {
2533 GenInstrRegister(COP1, D, f0, fs, fd, CEIL_L_D); 2641 GenInstrRegister(COP1, D, f0, fs, fd, CEIL_L_D);
2534 } 2642 }
2535 2643
2536 2644
2537 void Assembler::mina(SecondaryField fmt, FPURegister fd, FPURegister ft, 2645 void Assembler::mina(SecondaryField fmt, FPURegister fd, FPURegister fs,
2538 FPURegister fs) { 2646 FPURegister ft) {
2539 DCHECK(kArchVariant == kMips64r6); 2647 DCHECK(kArchVariant == kMips64r6);
2540 DCHECK((fmt == D) || (fmt == S)); 2648 DCHECK((fmt == D) || (fmt == S));
2541 GenInstrRegister(COP1, fmt, ft, fs, fd, MINA); 2649 GenInstrRegister(COP1, fmt, ft, fs, fd, MINA);
2542 } 2650 }
2543 2651
2544 2652
2545 void Assembler::maxa(SecondaryField fmt, FPURegister fd, FPURegister ft, 2653 void Assembler::maxa(SecondaryField fmt, FPURegister fd, FPURegister fs,
2546 FPURegister fs) { 2654 FPURegister ft) {
2547 DCHECK(kArchVariant == kMips64r6); 2655 DCHECK(kArchVariant == kMips64r6);
2548 DCHECK((fmt == D) || (fmt == S)); 2656 DCHECK((fmt == D) || (fmt == S));
2549 GenInstrRegister(COP1, fmt, ft, fs, fd, MAXA); 2657 GenInstrRegister(COP1, fmt, ft, fs, fd, MAXA);
2550 } 2658 }
2551 2659
2552 2660
2553 void Assembler::cvt_s_w(FPURegister fd, FPURegister fs) { 2661 void Assembler::cvt_s_w(FPURegister fd, FPURegister fs) {
2554 GenInstrRegister(COP1, W, f0, fs, fd, CVT_S_W); 2662 GenInstrRegister(COP1, W, f0, fs, fd, CVT_S_W);
2555 } 2663 }
2556 2664
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after
2971 void Assembler::PopulateConstantPool(ConstantPoolArray* constant_pool) { 3079 void Assembler::PopulateConstantPool(ConstantPoolArray* constant_pool) {
2972 // No out-of-line constant pool support. 3080 // No out-of-line constant pool support.
2973 DCHECK(!FLAG_enable_ool_constant_pool); 3081 DCHECK(!FLAG_enable_ool_constant_pool);
2974 return; 3082 return;
2975 } 3083 }
2976 3084
2977 3085
2978 } } // namespace v8::internal 3086 } } // namespace v8::internal
2979 3087
2980 #endif // V8_TARGET_ARCH_MIPS64 3088 #endif // V8_TARGET_ARCH_MIPS64
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698