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

Side by Side Diff: src/mips/simulator-mips.cc

Issue 1046953004: MIPS: [turbofan] Add backend support for float32 operations. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 8 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
« no previous file with comments | « src/mips/macro-assembler-mips.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <limits.h> 5 #include <limits.h>
6 #include <stdarg.h> 6 #include <stdarg.h>
7 #include <stdlib.h> 7 #include <stdlib.h>
8 #include <cmath> 8 #include <cmath>
9 9
10 #include "src/v8.h" 10 #include "src/v8.h"
(...skipping 2311 matching lines...) Expand 10 before | Expand all | Expand 10 after
2322 default: // Mips64r6 CMP.S instructions unimplemented. 2322 default: // Mips64r6 CMP.S instructions unimplemented.
2323 UNREACHABLE(); 2323 UNREACHABLE();
2324 } 2324 }
2325 } 2325 }
2326 2326
2327 2327
2328 void Simulator::DecodeTypeRegisterSRsType(Instruction* instr, 2328 void Simulator::DecodeTypeRegisterSRsType(Instruction* instr,
2329 const int32_t& ft_reg, 2329 const int32_t& ft_reg,
2330 const int32_t& fs_reg, 2330 const int32_t& fs_reg,
2331 const int32_t& fd_reg) { 2331 const int32_t& fd_reg) {
2332 float f; 2332 float fs, ft;
2333 double ft = get_fpu_register_double(ft_reg); 2333 fs = get_fpu_register_float(fs_reg);
2334 int64_t ft_int = static_cast<int64_t>(ft); 2334 ft = get_fpu_register_float(ft_reg);
2335 int64_t ft_int = static_cast<int64_t>(get_fpu_register_double(ft_reg));
2336 uint32_t cc, fcsr_cc;
2337 cc = instr->FCccValue();
2338 fcsr_cc = get_fcsr_condition_bit(cc);
2335 switch (instr->FunctionFieldRaw()) { 2339 switch (instr->FunctionFieldRaw()) {
2340 case ADD_D:
2341 set_fpu_register_float(fd_reg, fs + ft);
2342 break;
2343 case SUB_D:
2344 set_fpu_register_float(fd_reg, fs - ft);
2345 break;
2346 case MUL_D:
2347 set_fpu_register_float(fd_reg, fs * ft);
2348 break;
2349 case DIV_D:
2350 set_fpu_register_float(fd_reg, fs / ft);
2351 break;
2352 case ABS_D:
2353 set_fpu_register_float(fd_reg, fabs(fs));
2354 break;
2355 case MOV_D:
2356 set_fpu_register_float(fd_reg, fs);
2357 break;
2358 case NEG_D:
2359 set_fpu_register_float(fd_reg, -fs);
2360 break;
2361 case SQRT_D:
2362 set_fpu_register_float(fd_reg, fast_sqrt(fs));
2363 break;
2364 case C_UN_D:
2365 set_fcsr_bit(fcsr_cc, std::isnan(fs) || std::isnan(ft));
2366 break;
2367 case C_EQ_D:
2368 set_fcsr_bit(fcsr_cc, (fs == ft));
2369 break;
2370 case C_UEQ_D:
2371 set_fcsr_bit(fcsr_cc, (fs == ft) || (std::isnan(fs) || std::isnan(ft)));
2372 break;
2373 case C_OLT_D:
2374 set_fcsr_bit(fcsr_cc, (fs < ft));
2375 break;
2376 case C_ULT_D:
2377 set_fcsr_bit(fcsr_cc, (fs < ft) || (std::isnan(fs) || std::isnan(ft)));
2378 break;
2379 case C_OLE_D:
2380 set_fcsr_bit(fcsr_cc, (fs <= ft));
2381 break;
2382 case C_ULE_D:
2383 set_fcsr_bit(fcsr_cc, (fs <= ft) || (std::isnan(fs) || std::isnan(ft)));
2384 break;
2336 case CVT_D_S: 2385 case CVT_D_S:
2337 f = get_fpu_register_float(fs_reg); 2386 set_fpu_register_double(fd_reg, static_cast<double>(fs));
2338 set_fpu_register_double(fd_reg, static_cast<double>(f));
2339 break; 2387 break;
2340 case SELEQZ_C: 2388 case SELEQZ_C:
2341 DCHECK(IsMipsArchVariant(kMips32r6)); 2389 DCHECK(IsMipsArchVariant(kMips32r6));
2342 set_fpu_register_double( 2390 set_fpu_register_double(
2343 fd_reg, (ft_int & 0x1) == 0 ? get_fpu_register_double(fs_reg) : 0.0); 2391 fd_reg, (ft_int & 0x1) == 0 ? get_fpu_register_double(fs_reg) : 0.0);
2344 break; 2392 break;
2345 case SELNEZ_C: 2393 case SELNEZ_C:
2346 DCHECK(IsMipsArchVariant(kMips32r6)); 2394 DCHECK(IsMipsArchVariant(kMips32r6));
2347 set_fpu_register_double( 2395 set_fpu_register_double(
2348 fd_reg, (ft_int & 0x1) != 0 ? get_fpu_register_double(fs_reg) : 0.0); 2396 fd_reg, (ft_int & 0x1) != 0 ? get_fpu_register_double(fs_reg) : 0.0);
(...skipping 1013 matching lines...) Expand 10 before | Expand all | Expand 10 after
3362 } 3410 }
3363 3411
3364 3412
3365 #undef UNSUPPORTED 3413 #undef UNSUPPORTED
3366 3414
3367 } } // namespace v8::internal 3415 } } // namespace v8::internal
3368 3416
3369 #endif // USE_SIMULATOR 3417 #endif // USE_SIMULATOR
3370 3418
3371 #endif // V8_TARGET_ARCH_MIPS 3419 #endif // V8_TARGET_ARCH_MIPS
OLDNEW
« no previous file with comments | « src/mips/macro-assembler-mips.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698