OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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 <stdarg.h> | 5 #include <stdarg.h> |
6 #include <stdlib.h> | 6 #include <stdlib.h> |
7 #include <cmath> | 7 #include <cmath> |
8 | 8 |
9 #if V8_TARGET_ARCH_S390 | 9 #if V8_TARGET_ARCH_S390 |
10 | 10 |
(...skipping 2702 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2713 int32_t low_bits = product & 0x00000000FFFFFFFF; | 2713 int32_t low_bits = product & 0x00000000FFFFFFFF; |
2714 set_low_register(r1, high_bits); | 2714 set_low_register(r1, high_bits); |
2715 set_low_register(r1 + 1, low_bits); | 2715 set_low_register(r1 + 1, low_bits); |
2716 break; | 2716 break; |
2717 } | 2717 } |
2718 case DLGR: { | 2718 case DLGR: { |
2719 #ifdef V8_TARGET_ARCH_S390X | 2719 #ifdef V8_TARGET_ARCH_S390X |
2720 RREInstruction* rreinst = reinterpret_cast<RREInstruction*>(instr); | 2720 RREInstruction* rreinst = reinterpret_cast<RREInstruction*>(instr); |
2721 int r1 = rreinst->R1Value(); | 2721 int r1 = rreinst->R1Value(); |
2722 int r2 = rreinst->R2Value(); | 2722 int r2 = rreinst->R2Value(); |
2723 uint64_t r1_val = static_cast<uint64_t>(r1); | 2723 uint64_t r1_val = get_register(r1); |
2724 uint64_t r2_val = static_cast<uint64_t>(r2); | 2724 uint64_t r2_val = get_register(r2); |
2725 DCHECK(r1 % 2 == 0); | 2725 DCHECK(r1 % 2 == 0); |
2726 unsigned __int128 dividend = static_cast<unsigned __int128>(r1_val) << 64; | 2726 unsigned __int128 dividend = static_cast<unsigned __int128>(r1_val) << 64; |
2727 dividend += static_cast<uint64_t>(r1 + 1); | 2727 dividend += get_register(r1 + 1); |
2728 uint64_t remainder = dividend % r2_val; | 2728 uint64_t remainder = dividend % r2_val; |
2729 uint64_t quotient = dividend / r2_val; | 2729 uint64_t quotient = dividend / r2_val; |
2730 r1_val = remainder; | 2730 r1_val = remainder; |
2731 set_register(r1, remainder); | 2731 set_register(r1, remainder); |
2732 set_register(r1 + 1, quotient); | 2732 set_register(r1 + 1, quotient); |
2733 #else | 2733 #else |
2734 UNREACHABLE(); | 2734 UNREACHABLE(); |
2735 #endif | 2735 #endif |
2736 break; | 2736 break; |
2737 } | 2737 } |
(...skipping 2301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5039 uintptr_t address = *stack_slot; | 5039 uintptr_t address = *stack_slot; |
5040 set_register(sp, current_sp + sizeof(uintptr_t)); | 5040 set_register(sp, current_sp + sizeof(uintptr_t)); |
5041 return address; | 5041 return address; |
5042 } | 5042 } |
5043 | 5043 |
5044 } // namespace internal | 5044 } // namespace internal |
5045 } // namespace v8 | 5045 } // namespace v8 |
5046 | 5046 |
5047 #endif // USE_SIMULATOR | 5047 #endif // USE_SIMULATOR |
5048 #endif // V8_TARGET_ARCH_S390 | 5048 #endif // V8_TARGET_ARCH_S390 |
OLD | NEW |