OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3296 break; | 3312 break; |
3297 case L: | 3313 case L: |
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() { |
balazs.kilvady
2016/09/05 12:54:00
Since fr, fs and ft is used in all switch cases, p
Ilija.Pavlovic1
2016/09/07 08:44:29
These variables are declared as "float" and in MAD
balazs.kilvady
2016/09/07 09:46:52
Acknowledged.
| |
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 Loading... | |
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 |
OLD | NEW |