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

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

Issue 2313623002: MIPS: Implement MADD.S, MSUB, MADDF and MSUBF. (Closed)
Patch Set: Added blocks and unreachable sections. Created 4 years, 3 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/mips64/disasm-mips64.cc ('k') | test/cctest/test-assembler-mips.cc » ('j') | 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 #if V8_TARGET_ARCH_MIPS64 10 #if V8_TARGET_ARCH_MIPS64
(...skipping 2403 matching lines...) Expand 10 before | Expand all | Expand 10 after
2414 set_fcsr_bit(kFCSRInexactFlagBit, true); 2414 set_fcsr_bit(kFCSRInexactFlagBit, true);
2415 } 2415 }
2416 break; 2416 break;
2417 } 2417 }
2418 case ADD_S: 2418 case ADD_S:
2419 set_fpu_register_float(fd_reg(), fs + ft); 2419 set_fpu_register_float(fd_reg(), fs + ft);
2420 break; 2420 break;
2421 case SUB_S: 2421 case SUB_S:
2422 set_fpu_register_float(fd_reg(), fs - ft); 2422 set_fpu_register_float(fd_reg(), fs - ft);
2423 break; 2423 break;
2424 case MADDF_S:
2425 DCHECK(kArchVariant == kMips64r6);
2426 set_fpu_register_float(fd_reg(), fd + (fs * ft));
2427 break;
2428 case MSUBF_S:
2429 DCHECK(kArchVariant == kMips64r6);
2430 set_fpu_register_float(fd_reg(), fd - (fs * ft));
2431 break;
2424 case MUL_S: 2432 case MUL_S:
2425 set_fpu_register_float(fd_reg(), fs * ft); 2433 set_fpu_register_float(fd_reg(), fs * ft);
2426 break; 2434 break;
2427 case DIV_S: 2435 case DIV_S:
2428 set_fpu_register_float(fd_reg(), fs / ft); 2436 set_fpu_register_float(fd_reg(), fs / ft);
2429 break; 2437 break;
2430 case ABS_S: 2438 case ABS_S:
2431 set_fpu_register_float(fd_reg(), fabs(fs)); 2439 set_fpu_register_float(fd_reg(), fabs(fs));
2432 break; 2440 break;
2433 case MOV_S: 2441 case MOV_S:
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
2817 case MAX: 2825 case MAX:
2818 DCHECK(kArchVariant == kMips64r6); 2826 DCHECK(kArchVariant == kMips64r6);
2819 set_fpu_register_double(fd_reg(), FPUMax(ft, fs)); 2827 set_fpu_register_double(fd_reg(), FPUMax(ft, fs));
2820 break; 2828 break;
2821 case ADD_D: 2829 case ADD_D:
2822 set_fpu_register_double(fd_reg(), fs + ft); 2830 set_fpu_register_double(fd_reg(), fs + ft);
2823 break; 2831 break;
2824 case SUB_D: 2832 case SUB_D:
2825 set_fpu_register_double(fd_reg(), fs - ft); 2833 set_fpu_register_double(fd_reg(), fs - ft);
2826 break; 2834 break;
2835 case MADDF_D:
2836 DCHECK(kArchVariant == kMips64r6);
2837 set_fpu_register_double(fd_reg(), fd + (fs * ft));
2838 break;
2839 case MSUBF_D:
2840 DCHECK(kArchVariant == kMips64r6);
2841 set_fpu_register_double(fd_reg(), fd - (fs * ft));
2842 break;
2827 case MUL_D: 2843 case MUL_D:
2828 set_fpu_register_double(fd_reg(), fs * ft); 2844 set_fpu_register_double(fd_reg(), fs * ft);
2829 break; 2845 break;
2830 case DIV_D: 2846 case DIV_D:
2831 set_fpu_register_double(fd_reg(), fs / ft); 2847 set_fpu_register_double(fd_reg(), fs / ft);
2832 break; 2848 break;
2833 case ABS_D: 2849 case ABS_D:
2834 set_fpu_register_double(fd_reg(), fabs(fs)); 2850 set_fpu_register_double(fd_reg(), fabs(fs));
2835 break; 2851 break;
2836 case MOV_D: 2852 case MOV_D:
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after
3298 DecodeTypeRegisterLRsType(); 3314 DecodeTypeRegisterLRsType();
3299 break; 3315 break;
3300 default: 3316 default:
3301 UNREACHABLE(); 3317 UNREACHABLE();
3302 } 3318 }
3303 } 3319 }
3304 3320
3305 3321
3306 void Simulator::DecodeTypeRegisterCOP1X() { 3322 void Simulator::DecodeTypeRegisterCOP1X() {
3307 switch (get_instr()->FunctionFieldRaw()) { 3323 switch (get_instr()->FunctionFieldRaw()) {
3308 case MADD_D: 3324 case MADD_S: {
3325 DCHECK(kArchVariant == kMips64r2);
3326 float fr, ft, fs;
3327 fr = get_fpu_register_float(fr_reg());
3328 fs = get_fpu_register_float(fs_reg());
3329 ft = get_fpu_register_float(ft_reg());
3330 set_fpu_register_float(fd_reg(), fs * ft + fr);
3331 break;
3332 }
3333 case MSUB_S: {
3334 DCHECK(kArchVariant == kMips64r2);
3335 float fr, ft, fs;
3336 fr = get_fpu_register_float(fr_reg());
3337 fs = get_fpu_register_float(fs_reg());
3338 ft = get_fpu_register_float(ft_reg());
3339 set_fpu_register_float(fd_reg(), fs * ft - fr);
3340 break;
3341 }
3342 case MADD_D: {
3343 DCHECK(kArchVariant == kMips64r2);
3309 double fr, ft, fs; 3344 double fr, ft, fs;
3310 fr = get_fpu_register_double(fr_reg()); 3345 fr = get_fpu_register_double(fr_reg());
3311 fs = get_fpu_register_double(fs_reg()); 3346 fs = get_fpu_register_double(fs_reg());
3312 ft = get_fpu_register_double(ft_reg()); 3347 ft = get_fpu_register_double(ft_reg());
3313 set_fpu_register_double(fd_reg(), fs * ft + fr); 3348 set_fpu_register_double(fd_reg(), fs * ft + fr);
3314 break; 3349 break;
3350 }
3351 case MSUB_D: {
3352 DCHECK(kArchVariant == kMips64r2);
3353 double fr, ft, fs;
3354 fr = get_fpu_register_double(fr_reg());
3355 fs = get_fpu_register_double(fs_reg());
3356 ft = get_fpu_register_double(ft_reg());
3357 set_fpu_register_double(fd_reg(), fs * ft - fr);
3358 break;
3359 }
3315 default: 3360 default:
3316 UNREACHABLE(); 3361 UNREACHABLE();
3317 } 3362 }
3318 } 3363 }
3319 3364
3320 3365
3321 void Simulator::DecodeTypeRegisterSPECIAL() { 3366 void Simulator::DecodeTypeRegisterSPECIAL() {
3322 int64_t i64hilo; 3367 int64_t i64hilo;
3323 uint64_t u64hilo; 3368 uint64_t u64hilo;
3324 int64_t alu_out; 3369 int64_t alu_out;
(...skipping 1608 matching lines...) Expand 10 before | Expand all | Expand 10 after
4933 } 4978 }
4934 4979
4935 4980
4936 #undef UNSUPPORTED 4981 #undef UNSUPPORTED
4937 } // namespace internal 4982 } // namespace internal
4938 } // namespace v8 4983 } // namespace v8
4939 4984
4940 #endif // USE_SIMULATOR 4985 #endif // USE_SIMULATOR
4941 4986
4942 #endif // V8_TARGET_ARCH_MIPS64 4987 #endif // V8_TARGET_ARCH_MIPS64
OLDNEW
« no previous file with comments | « src/mips64/disasm-mips64.cc ('k') | test/cctest/test-assembler-mips.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698