OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 #if V8_TARGET_ARCH_X87 | 5 #if V8_TARGET_ARCH_X87 |
6 | 6 |
7 #include "src/base/bits.h" | 7 #include "src/base/bits.h" |
8 #include "src/base/division-by-constant.h" | 8 #include "src/base/division-by-constant.h" |
9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
(...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
590 } | 590 } |
591 | 591 |
592 void MacroAssembler::DebugBreak() { | 592 void MacroAssembler::DebugBreak() { |
593 Move(eax, Immediate(0)); | 593 Move(eax, Immediate(0)); |
594 mov(ebx, Immediate(ExternalReference(Runtime::kHandleDebuggerStatement, | 594 mov(ebx, Immediate(ExternalReference(Runtime::kHandleDebuggerStatement, |
595 isolate()))); | 595 isolate()))); |
596 CEntryStub ces(isolate(), 1); | 596 CEntryStub ces(isolate(), 1); |
597 call(ces.GetCode(), RelocInfo::DEBUGGER_STATEMENT); | 597 call(ces.GetCode(), RelocInfo::DEBUGGER_STATEMENT); |
598 } | 598 } |
599 | 599 |
| 600 void MacroAssembler::PairShl(Register high, Register low, uint8_t shift) { |
| 601 if (shift >= 32) { |
| 602 mov(high, low); |
| 603 shl(high, shift - 32); |
| 604 xor_(low, low); |
| 605 } else { |
| 606 shld(high, low, shift); |
| 607 shl(low, shift); |
| 608 } |
| 609 } |
| 610 |
| 611 void MacroAssembler::PairShl_cl(Register high, Register low) { |
| 612 shld_cl(high, low); |
| 613 shl_cl(low); |
| 614 Label done; |
| 615 test(ecx, Immediate(0x20)); |
| 616 j(equal, &done, Label::kNear); |
| 617 mov(high, low); |
| 618 xor_(low, low); |
| 619 bind(&done); |
| 620 } |
600 | 621 |
601 bool MacroAssembler::IsUnsafeImmediate(const Immediate& x) { | 622 bool MacroAssembler::IsUnsafeImmediate(const Immediate& x) { |
602 static const int kMaxImmediateBits = 17; | 623 static const int kMaxImmediateBits = 17; |
603 if (!RelocInfo::IsNone(x.rmode_)) return false; | 624 if (!RelocInfo::IsNone(x.rmode_)) return false; |
604 return !is_intn(x.x_, kMaxImmediateBits); | 625 return !is_intn(x.x_, kMaxImmediateBits); |
605 } | 626 } |
606 | 627 |
607 | 628 |
608 void MacroAssembler::SafeMove(Register dst, const Immediate& x) { | 629 void MacroAssembler::SafeMove(Register dst, const Immediate& x) { |
609 if (IsUnsafeImmediate(x) && jit_cookie() != 0) { | 630 if (IsUnsafeImmediate(x) && jit_cookie() != 0) { |
(...skipping 2465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3075 mov(eax, dividend); | 3096 mov(eax, dividend); |
3076 shr(eax, 31); | 3097 shr(eax, 31); |
3077 add(edx, eax); | 3098 add(edx, eax); |
3078 } | 3099 } |
3079 | 3100 |
3080 | 3101 |
3081 } // namespace internal | 3102 } // namespace internal |
3082 } // namespace v8 | 3103 } // namespace v8 |
3083 | 3104 |
3084 #endif // V8_TARGET_ARCH_X87 | 3105 #endif // V8_TARGET_ARCH_X87 |
OLD | NEW |