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

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

Issue 519283005: MIPS: First step to cleanup the power-of-2 mess. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: 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/mips64/lithium-codegen-mips64.cc ('k') | src/mips64/regexp-macro-assembler-mips64.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 <limits.h> // For LONG_MIN, LONG_MAX. 5 #include <limits.h> // For LONG_MIN, LONG_MAX.
6 6
7 #include "src/v8.h" 7 #include "src/v8.h"
8 8
9 #if V8_TARGET_ARCH_MIPS64 9 #if V8_TARGET_ARCH_MIPS64
10 10
(...skipping 4850 matching lines...) Expand 10 before | Expand all | Expand 10 after
4861 sdc1(reg, MemOperand(sp, i * kDoubleSize)); 4861 sdc1(reg, MemOperand(sp, i * kDoubleSize));
4862 } 4862 }
4863 } 4863 }
4864 4864
4865 // Reserve place for the return address, stack space and an optional slot 4865 // Reserve place for the return address, stack space and an optional slot
4866 // (used by the DirectCEntryStub to hold the return value if a struct is 4866 // (used by the DirectCEntryStub to hold the return value if a struct is
4867 // returned) and align the frame preparing for calling the runtime function. 4867 // returned) and align the frame preparing for calling the runtime function.
4868 DCHECK(stack_space >= 0); 4868 DCHECK(stack_space >= 0);
4869 Dsubu(sp, sp, Operand((stack_space + 2) * kPointerSize)); 4869 Dsubu(sp, sp, Operand((stack_space + 2) * kPointerSize));
4870 if (frame_alignment > 0) { 4870 if (frame_alignment > 0) {
4871 DCHECK(IsPowerOf2(frame_alignment)); 4871 DCHECK(base::bits::IsPowerOfTwo32(frame_alignment));
4872 And(sp, sp, Operand(-frame_alignment)); // Align stack. 4872 And(sp, sp, Operand(-frame_alignment)); // Align stack.
4873 } 4873 }
4874 4874
4875 // Set the exit frame sp value to point just before the return address 4875 // Set the exit frame sp value to point just before the return address
4876 // location. 4876 // location.
4877 daddiu(at, sp, kPointerSize); 4877 daddiu(at, sp, kPointerSize);
4878 sd(at, MemOperand(fp, ExitFrameConstants::kSPOffset)); 4878 sd(at, MemOperand(fp, ExitFrameConstants::kSPOffset));
4879 } 4879 }
4880 4880
4881 4881
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
4959 } 4959 }
4960 4960
4961 4961
4962 void MacroAssembler::AssertStackIsAligned() { 4962 void MacroAssembler::AssertStackIsAligned() {
4963 if (emit_debug_code()) { 4963 if (emit_debug_code()) {
4964 const int frame_alignment = ActivationFrameAlignment(); 4964 const int frame_alignment = ActivationFrameAlignment();
4965 const int frame_alignment_mask = frame_alignment - 1; 4965 const int frame_alignment_mask = frame_alignment - 1;
4966 4966
4967 if (frame_alignment > kPointerSize) { 4967 if (frame_alignment > kPointerSize) {
4968 Label alignment_as_expected; 4968 Label alignment_as_expected;
4969 DCHECK(IsPowerOf2(frame_alignment)); 4969 DCHECK(base::bits::IsPowerOfTwo32(frame_alignment));
4970 andi(at, sp, frame_alignment_mask); 4970 andi(at, sp, frame_alignment_mask);
4971 Branch(&alignment_as_expected, eq, at, Operand(zero_reg)); 4971 Branch(&alignment_as_expected, eq, at, Operand(zero_reg));
4972 // Don't use Check here, as it will call Runtime_Abort re-entering here. 4972 // Don't use Check here, as it will call Runtime_Abort re-entering here.
4973 stop("Unexpected stack alignment"); 4973 stop("Unexpected stack alignment");
4974 bind(&alignment_as_expected); 4974 bind(&alignment_as_expected);
4975 } 4975 }
4976 } 4976 }
4977 } 4977 }
4978 4978
4979 4979
(...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after
5423 // Both ABIs: Remaining arguments are pushed on the stack, above (higher 5423 // Both ABIs: Remaining arguments are pushed on the stack, above (higher
5424 // address than) the (O32) argument slots. (arg slot calculation handled by 5424 // address than) the (O32) argument slots. (arg slot calculation handled by
5425 // CalculateStackPassedWords()). 5425 // CalculateStackPassedWords()).
5426 int stack_passed_arguments = CalculateStackPassedWords( 5426 int stack_passed_arguments = CalculateStackPassedWords(
5427 num_reg_arguments, num_double_arguments); 5427 num_reg_arguments, num_double_arguments);
5428 if (frame_alignment > kPointerSize) { 5428 if (frame_alignment > kPointerSize) {
5429 // Make stack end at alignment and make room for num_arguments - 4 words 5429 // Make stack end at alignment and make room for num_arguments - 4 words
5430 // and the original value of sp. 5430 // and the original value of sp.
5431 mov(scratch, sp); 5431 mov(scratch, sp);
5432 Dsubu(sp, sp, Operand((stack_passed_arguments + 1) * kPointerSize)); 5432 Dsubu(sp, sp, Operand((stack_passed_arguments + 1) * kPointerSize));
5433 DCHECK(IsPowerOf2(frame_alignment)); 5433 DCHECK(base::bits::IsPowerOfTwo32(frame_alignment));
5434 And(sp, sp, Operand(-frame_alignment)); 5434 And(sp, sp, Operand(-frame_alignment));
5435 sd(scratch, MemOperand(sp, stack_passed_arguments * kPointerSize)); 5435 sd(scratch, MemOperand(sp, stack_passed_arguments * kPointerSize));
5436 } else { 5436 } else {
5437 Dsubu(sp, sp, Operand(stack_passed_arguments * kPointerSize)); 5437 Dsubu(sp, sp, Operand(stack_passed_arguments * kPointerSize));
5438 } 5438 }
5439 } 5439 }
5440 5440
5441 5441
5442 void MacroAssembler::PrepareCallCFunction(int num_reg_arguments, 5442 void MacroAssembler::PrepareCallCFunction(int num_reg_arguments,
5443 Register scratch) { 5443 Register scratch) {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
5480 // running in the simulator. The simulator has its own alignment check which 5480 // running in the simulator. The simulator has its own alignment check which
5481 // provides more information. 5481 // provides more information.
5482 // The argument stots are presumed to have been set up by 5482 // The argument stots are presumed to have been set up by
5483 // PrepareCallCFunction. The C function must be called via t9, for mips ABI. 5483 // PrepareCallCFunction. The C function must be called via t9, for mips ABI.
5484 5484
5485 #if V8_HOST_ARCH_MIPS || V8_HOST_ARCH_MIPS64 5485 #if V8_HOST_ARCH_MIPS || V8_HOST_ARCH_MIPS64
5486 if (emit_debug_code()) { 5486 if (emit_debug_code()) {
5487 int frame_alignment = base::OS::ActivationFrameAlignment(); 5487 int frame_alignment = base::OS::ActivationFrameAlignment();
5488 int frame_alignment_mask = frame_alignment - 1; 5488 int frame_alignment_mask = frame_alignment - 1;
5489 if (frame_alignment > kPointerSize) { 5489 if (frame_alignment > kPointerSize) {
5490 DCHECK(IsPowerOf2(frame_alignment)); 5490 DCHECK(base::bits::IsPowerOfTwo32(frame_alignment));
5491 Label alignment_as_expected; 5491 Label alignment_as_expected;
5492 And(at, sp, Operand(frame_alignment_mask)); 5492 And(at, sp, Operand(frame_alignment_mask));
5493 Branch(&alignment_as_expected, eq, at, Operand(zero_reg)); 5493 Branch(&alignment_as_expected, eq, at, Operand(zero_reg));
5494 // Don't use Check here, as it will call Runtime_Abort possibly 5494 // Don't use Check here, as it will call Runtime_Abort possibly
5495 // re-entering here. 5495 // re-entering here.
5496 stop("Unexpected alignment in CallCFunction"); 5496 stop("Unexpected alignment in CallCFunction");
5497 bind(&alignment_as_expected); 5497 bind(&alignment_as_expected);
5498 } 5498 }
5499 } 5499 }
5500 #endif // V8_HOST_ARCH_MIPS 5500 #endif // V8_HOST_ARCH_MIPS
(...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after
6101 } 6101 }
6102 if (ms.shift() > 0) sra(result, result, ms.shift()); 6102 if (ms.shift() > 0) sra(result, result, ms.shift());
6103 srl(at, dividend, 31); 6103 srl(at, dividend, 31);
6104 Addu(result, result, Operand(at)); 6104 Addu(result, result, Operand(at));
6105 } 6105 }
6106 6106
6107 6107
6108 } } // namespace v8::internal 6108 } } // namespace v8::internal
6109 6109
6110 #endif // V8_TARGET_ARCH_MIPS64 6110 #endif // V8_TARGET_ARCH_MIPS64
OLDNEW
« no previous file with comments | « src/mips64/lithium-codegen-mips64.cc ('k') | src/mips64/regexp-macro-assembler-mips64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698