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

Side by Side Diff: src/x87/macro-assembler-x87.cc

Issue 358363002: Move platform abstraction to base library (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: updates Created 6 years, 5 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 | Annotate | Revision Log
OLDNEW
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 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #if V8_TARGET_ARCH_X87 7 #if V8_TARGET_ARCH_X87
8 8
9 #include "src/bootstrapper.h" 9 #include "src/bootstrapper.h"
10 #include "src/codegen.h" 10 #include "src/codegen.h"
(...skipping 876 matching lines...) Expand 10 before | Expand all | Expand 10 after
887 ExternalReference context_address(Isolate::kContextAddress, isolate()); 887 ExternalReference context_address(Isolate::kContextAddress, isolate());
888 mov(Operand::StaticVariable(c_entry_fp_address), ebp); 888 mov(Operand::StaticVariable(c_entry_fp_address), ebp);
889 mov(Operand::StaticVariable(context_address), esi); 889 mov(Operand::StaticVariable(context_address), esi);
890 } 890 }
891 891
892 892
893 void MacroAssembler::EnterExitFrameEpilogue(int argc) { 893 void MacroAssembler::EnterExitFrameEpilogue(int argc) {
894 sub(esp, Immediate(argc * kPointerSize)); 894 sub(esp, Immediate(argc * kPointerSize));
895 895
896 // Get the required frame alignment for the OS. 896 // Get the required frame alignment for the OS.
897 const int kFrameAlignment = OS::ActivationFrameAlignment(); 897 const int kFrameAlignment = base::OS::ActivationFrameAlignment();
898 if (kFrameAlignment > 0) { 898 if (kFrameAlignment > 0) {
899 ASSERT(IsPowerOf2(kFrameAlignment)); 899 ASSERT(IsPowerOf2(kFrameAlignment));
900 and_(esp, -kFrameAlignment); 900 and_(esp, -kFrameAlignment);
901 } 901 }
902 902
903 // Patch the saved entry sp. 903 // Patch the saved entry sp.
904 mov(Operand(ebp, ExitFrameConstants::kSPOffset), esp); 904 mov(Operand(ebp, ExitFrameConstants::kSPOffset), esp);
905 } 905 }
906 906
907 907
(...skipping 1744 matching lines...) Expand 10 before | Expand all | Expand 10 after
2652 void MacroAssembler::Check(Condition cc, BailoutReason reason) { 2652 void MacroAssembler::Check(Condition cc, BailoutReason reason) {
2653 Label L; 2653 Label L;
2654 j(cc, &L); 2654 j(cc, &L);
2655 Abort(reason); 2655 Abort(reason);
2656 // will not return here 2656 // will not return here
2657 bind(&L); 2657 bind(&L);
2658 } 2658 }
2659 2659
2660 2660
2661 void MacroAssembler::CheckStackAlignment() { 2661 void MacroAssembler::CheckStackAlignment() {
2662 int frame_alignment = OS::ActivationFrameAlignment(); 2662 int frame_alignment = base::OS::ActivationFrameAlignment();
2663 int frame_alignment_mask = frame_alignment - 1; 2663 int frame_alignment_mask = frame_alignment - 1;
2664 if (frame_alignment > kPointerSize) { 2664 if (frame_alignment > kPointerSize) {
2665 ASSERT(IsPowerOf2(frame_alignment)); 2665 ASSERT(IsPowerOf2(frame_alignment));
2666 Label alignment_as_expected; 2666 Label alignment_as_expected;
2667 test(esp, Immediate(frame_alignment_mask)); 2667 test(esp, Immediate(frame_alignment_mask));
2668 j(zero, &alignment_as_expected); 2668 j(zero, &alignment_as_expected);
2669 // Abort if stack is not aligned. 2669 // Abort if stack is not aligned.
2670 int3(); 2670 int3();
2671 bind(&alignment_as_expected); 2671 bind(&alignment_as_expected);
2672 } 2672 }
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
2879 2879
2880 cmp(index, Immediate(Smi::FromInt(0))); 2880 cmp(index, Immediate(Smi::FromInt(0)));
2881 Check(greater_equal, kIndexIsNegative); 2881 Check(greater_equal, kIndexIsNegative);
2882 2882
2883 // Restore the index 2883 // Restore the index
2884 SmiUntag(index); 2884 SmiUntag(index);
2885 } 2885 }
2886 2886
2887 2887
2888 void MacroAssembler::PrepareCallCFunction(int num_arguments, Register scratch) { 2888 void MacroAssembler::PrepareCallCFunction(int num_arguments, Register scratch) {
2889 int frame_alignment = OS::ActivationFrameAlignment(); 2889 int frame_alignment = base::OS::ActivationFrameAlignment();
2890 if (frame_alignment != 0) { 2890 if (frame_alignment != 0) {
2891 // Make stack end at alignment and make room for num_arguments words 2891 // Make stack end at alignment and make room for num_arguments words
2892 // and the original value of esp. 2892 // and the original value of esp.
2893 mov(scratch, esp); 2893 mov(scratch, esp);
2894 sub(esp, Immediate((num_arguments + 1) * kPointerSize)); 2894 sub(esp, Immediate((num_arguments + 1) * kPointerSize));
2895 ASSERT(IsPowerOf2(frame_alignment)); 2895 ASSERT(IsPowerOf2(frame_alignment));
2896 and_(esp, -frame_alignment); 2896 and_(esp, -frame_alignment);
2897 mov(Operand(esp, num_arguments * kPointerSize), scratch); 2897 mov(Operand(esp, num_arguments * kPointerSize), scratch);
2898 } else { 2898 } else {
2899 sub(esp, Immediate(num_arguments * kPointerSize)); 2899 sub(esp, Immediate(num_arguments * kPointerSize));
(...skipping 11 matching lines...) Expand all
2911 2911
2912 void MacroAssembler::CallCFunction(Register function, 2912 void MacroAssembler::CallCFunction(Register function,
2913 int num_arguments) { 2913 int num_arguments) {
2914 ASSERT(has_frame()); 2914 ASSERT(has_frame());
2915 // Check stack alignment. 2915 // Check stack alignment.
2916 if (emit_debug_code()) { 2916 if (emit_debug_code()) {
2917 CheckStackAlignment(); 2917 CheckStackAlignment();
2918 } 2918 }
2919 2919
2920 call(function); 2920 call(function);
2921 if (OS::ActivationFrameAlignment() != 0) { 2921 if (base::OS::ActivationFrameAlignment() != 0) {
2922 mov(esp, Operand(esp, num_arguments * kPointerSize)); 2922 mov(esp, Operand(esp, num_arguments * kPointerSize));
2923 } else { 2923 } else {
2924 add(esp, Immediate(num_arguments * kPointerSize)); 2924 add(esp, Immediate(num_arguments * kPointerSize));
2925 } 2925 }
2926 } 2926 }
2927 2927
2928 2928
2929 bool AreAliased(Register r1, Register r2, Register r3, Register r4) { 2929 bool AreAliased(Register r1, Register r2, Register r3, Register r4) {
2930 if (r1.is(r2)) return true; 2930 if (r1.is(r2)) return true;
2931 if (r1.is(r3)) return true; 2931 if (r1.is(r3)) return true;
(...skipping 11 matching lines...) Expand all
2943 masm_(NULL, address, size + Assembler::kGap) { 2943 masm_(NULL, address, size + Assembler::kGap) {
2944 // Create a new macro assembler pointing to the address of the code to patch. 2944 // Create a new macro assembler pointing to the address of the code to patch.
2945 // The size is adjusted with kGap on order for the assembler to generate size 2945 // The size is adjusted with kGap on order for the assembler to generate size
2946 // bytes of instructions without failing with buffer size constraints. 2946 // bytes of instructions without failing with buffer size constraints.
2947 ASSERT(masm_.reloc_info_writer.pos() == address_ + size_ + Assembler::kGap); 2947 ASSERT(masm_.reloc_info_writer.pos() == address_ + size_ + Assembler::kGap);
2948 } 2948 }
2949 2949
2950 2950
2951 CodePatcher::~CodePatcher() { 2951 CodePatcher::~CodePatcher() {
2952 // Indicate that code has changed. 2952 // Indicate that code has changed.
2953 CPU::FlushICache(address_, size_); 2953 CpuFeatures::FlushICache(address_, size_);
2954 2954
2955 // Check that the code was patched as expected. 2955 // Check that the code was patched as expected.
2956 ASSERT(masm_.pc_ == address_ + size_); 2956 ASSERT(masm_.pc_ == address_ + size_);
2957 ASSERT(masm_.reloc_info_writer.pos() == address_ + size_ + Assembler::kGap); 2957 ASSERT(masm_.reloc_info_writer.pos() == address_ + size_ + Assembler::kGap);
2958 } 2958 }
2959 2959
2960 2960
2961 void MacroAssembler::CheckPageFlag( 2961 void MacroAssembler::CheckPageFlag(
2962 Register object, 2962 Register object,
2963 Register scratch, 2963 Register scratch,
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after
3292 if (ms.shift() > 0) sar(edx, ms.shift()); 3292 if (ms.shift() > 0) sar(edx, ms.shift());
3293 mov(eax, dividend); 3293 mov(eax, dividend);
3294 shr(eax, 31); 3294 shr(eax, 31);
3295 add(edx, eax); 3295 add(edx, eax);
3296 } 3296 }
3297 3297
3298 3298
3299 } } // namespace v8::internal 3299 } } // namespace v8::internal
3300 3300
3301 #endif // V8_TARGET_ARCH_X87 3301 #endif // V8_TARGET_ARCH_X87
OLDNEW
« src/base/macros.h ('K') | « src/x87/lithium-codegen-x87.h ('k') | src/zone.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698