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

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

Issue 528993002: First step to cleanup the power-of-2 mess. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: clang-format Created 6 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 | Annotate | Revision Log
« no previous file with comments | « src/ia32/lithium-codegen-ia32.cc ('k') | src/ic/ic.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 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_IA32 7 #if V8_TARGET_ARCH_IA32
8 8
9 #include "src/base/bits.h"
9 #include "src/bootstrapper.h" 10 #include "src/bootstrapper.h"
10 #include "src/codegen.h" 11 #include "src/codegen.h"
11 #include "src/cpu-profiler.h" 12 #include "src/cpu-profiler.h"
12 #include "src/debug.h" 13 #include "src/debug.h"
13 #include "src/isolate-inl.h" 14 #include "src/isolate-inl.h"
14 #include "src/runtime.h" 15 #include "src/runtime.h"
15 #include "src/serialize.h" 16 #include "src/serialize.h"
16 17
17 namespace v8 { 18 namespace v8 {
18 namespace internal { 19 namespace internal {
(...skipping 967 matching lines...) Expand 10 before | Expand all | Expand 10 after
986 XMMRegister reg = XMMRegister::from_code(i); 987 XMMRegister reg = XMMRegister::from_code(i);
987 movsd(Operand(ebp, offset - ((i + 1) * kDoubleSize)), reg); 988 movsd(Operand(ebp, offset - ((i + 1) * kDoubleSize)), reg);
988 } 989 }
989 } else { 990 } else {
990 sub(esp, Immediate(argc * kPointerSize)); 991 sub(esp, Immediate(argc * kPointerSize));
991 } 992 }
992 993
993 // Get the required frame alignment for the OS. 994 // Get the required frame alignment for the OS.
994 const int kFrameAlignment = base::OS::ActivationFrameAlignment(); 995 const int kFrameAlignment = base::OS::ActivationFrameAlignment();
995 if (kFrameAlignment > 0) { 996 if (kFrameAlignment > 0) {
996 DCHECK(IsPowerOf2(kFrameAlignment)); 997 DCHECK(base::bits::IsPowerOfTwo32(kFrameAlignment));
997 and_(esp, -kFrameAlignment); 998 and_(esp, -kFrameAlignment);
998 } 999 }
999 1000
1000 // Patch the saved entry sp. 1001 // Patch the saved entry sp.
1001 mov(Operand(ebp, ExitFrameConstants::kSPOffset), esp); 1002 mov(Operand(ebp, ExitFrameConstants::kSPOffset), esp);
1002 } 1003 }
1003 1004
1004 1005
1005 void MacroAssembler::EnterExitFrame(bool save_doubles) { 1006 void MacroAssembler::EnterExitFrame(bool save_doubles) {
1006 EnterExitFramePrologue(); 1007 EnterExitFramePrologue();
(...skipping 920 matching lines...) Expand 10 before | Expand all | Expand 10 after
1927 bind(&entry); 1928 bind(&entry);
1928 cmp(start_offset, end_offset); 1929 cmp(start_offset, end_offset);
1929 j(less, &loop); 1930 j(less, &loop);
1930 } 1931 }
1931 1932
1932 1933
1933 void MacroAssembler::BooleanBitTest(Register object, 1934 void MacroAssembler::BooleanBitTest(Register object,
1934 int field_offset, 1935 int field_offset,
1935 int bit_index) { 1936 int bit_index) {
1936 bit_index += kSmiTagSize + kSmiShiftSize; 1937 bit_index += kSmiTagSize + kSmiShiftSize;
1937 DCHECK(IsPowerOf2(kBitsPerByte)); 1938 DCHECK(base::bits::IsPowerOfTwo32(kBitsPerByte));
1938 int byte_index = bit_index / kBitsPerByte; 1939 int byte_index = bit_index / kBitsPerByte;
1939 int byte_bit_index = bit_index & (kBitsPerByte - 1); 1940 int byte_bit_index = bit_index & (kBitsPerByte - 1);
1940 test_b(FieldOperand(object, field_offset + byte_index), 1941 test_b(FieldOperand(object, field_offset + byte_index),
1941 static_cast<byte>(1 << byte_bit_index)); 1942 static_cast<byte>(1 << byte_bit_index));
1942 } 1943 }
1943 1944
1944 1945
1945 1946
1946 void MacroAssembler::NegativeZeroTest(Register result, 1947 void MacroAssembler::NegativeZeroTest(Register result,
1947 Register op, 1948 Register op,
(...skipping 816 matching lines...) Expand 10 before | Expand all | Expand 10 after
2764 Abort(reason); 2765 Abort(reason);
2765 // will not return here 2766 // will not return here
2766 bind(&L); 2767 bind(&L);
2767 } 2768 }
2768 2769
2769 2770
2770 void MacroAssembler::CheckStackAlignment() { 2771 void MacroAssembler::CheckStackAlignment() {
2771 int frame_alignment = base::OS::ActivationFrameAlignment(); 2772 int frame_alignment = base::OS::ActivationFrameAlignment();
2772 int frame_alignment_mask = frame_alignment - 1; 2773 int frame_alignment_mask = frame_alignment - 1;
2773 if (frame_alignment > kPointerSize) { 2774 if (frame_alignment > kPointerSize) {
2774 DCHECK(IsPowerOf2(frame_alignment)); 2775 DCHECK(base::bits::IsPowerOfTwo32(frame_alignment));
2775 Label alignment_as_expected; 2776 Label alignment_as_expected;
2776 test(esp, Immediate(frame_alignment_mask)); 2777 test(esp, Immediate(frame_alignment_mask));
2777 j(zero, &alignment_as_expected); 2778 j(zero, &alignment_as_expected);
2778 // Abort if stack is not aligned. 2779 // Abort if stack is not aligned.
2779 int3(); 2780 int3();
2780 bind(&alignment_as_expected); 2781 bind(&alignment_as_expected);
2781 } 2782 }
2782 } 2783 }
2783 2784
2784 2785
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
3004 } 3005 }
3005 3006
3006 3007
3007 void MacroAssembler::PrepareCallCFunction(int num_arguments, Register scratch) { 3008 void MacroAssembler::PrepareCallCFunction(int num_arguments, Register scratch) {
3008 int frame_alignment = base::OS::ActivationFrameAlignment(); 3009 int frame_alignment = base::OS::ActivationFrameAlignment();
3009 if (frame_alignment != 0) { 3010 if (frame_alignment != 0) {
3010 // Make stack end at alignment and make room for num_arguments words 3011 // Make stack end at alignment and make room for num_arguments words
3011 // and the original value of esp. 3012 // and the original value of esp.
3012 mov(scratch, esp); 3013 mov(scratch, esp);
3013 sub(esp, Immediate((num_arguments + 1) * kPointerSize)); 3014 sub(esp, Immediate((num_arguments + 1) * kPointerSize));
3014 DCHECK(IsPowerOf2(frame_alignment)); 3015 DCHECK(base::bits::IsPowerOfTwo32(frame_alignment));
3015 and_(esp, -frame_alignment); 3016 and_(esp, -frame_alignment);
3016 mov(Operand(esp, num_arguments * kPointerSize), scratch); 3017 mov(Operand(esp, num_arguments * kPointerSize), scratch);
3017 } else { 3018 } else {
3018 sub(esp, Immediate(num_arguments * kPointerSize)); 3019 sub(esp, Immediate(num_arguments * kPointerSize));
3019 } 3020 }
3020 } 3021 }
3021 3022
3022 3023
3023 void MacroAssembler::CallCFunction(ExternalReference function, 3024 void MacroAssembler::CallCFunction(ExternalReference function,
3024 int num_arguments) { 3025 int num_arguments) {
(...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after
3430 if (ms.shift() > 0) sar(edx, ms.shift()); 3431 if (ms.shift() > 0) sar(edx, ms.shift());
3431 mov(eax, dividend); 3432 mov(eax, dividend);
3432 shr(eax, 31); 3433 shr(eax, 31);
3433 add(edx, eax); 3434 add(edx, eax);
3434 } 3435 }
3435 3436
3436 3437
3437 } } // namespace v8::internal 3438 } } // namespace v8::internal
3438 3439
3439 #endif // V8_TARGET_ARCH_IA32 3440 #endif // V8_TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « src/ia32/lithium-codegen-ia32.cc ('k') | src/ic/ic.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698