Index: src/x64/codegen-x64.cc |
=================================================================== |
--- src/x64/codegen-x64.cc (revision 5120) |
+++ src/x64/codegen-x64.cc (working copy) |
@@ -2100,9 +2100,9 @@ |
// side (which is always a symbol). |
if (cc == equal) { |
Label not_a_symbol; |
- ASSERT(kSymbolTag != 0); |
+ STATIC_ASSERT(kSymbolTag != 0); |
// Ensure that no non-strings have the symbol bit set. |
- ASSERT(kNotStringTag + kIsSymbolMask > LAST_TYPE); |
+ STATIC_ASSERT(LAST_TYPE < kNotStringTag + kIsSymbolMask); |
__ testb(temp.reg(), Immediate(kIsSymbolMask)); // Test the symbol bit. |
__ j(zero, ¬_a_symbol); |
// They are symbols, so do identity compare. |
@@ -2567,8 +2567,8 @@ |
// JS_FUNCTION_TYPE is the last instance type and it is right |
// after LAST_JS_OBJECT_TYPE, we do not have to check the upper |
// bound. |
- ASSERT(LAST_TYPE == JS_FUNCTION_TYPE); |
- ASSERT(JS_FUNCTION_TYPE == LAST_JS_OBJECT_TYPE + 1); |
+ STATIC_ASSERT(LAST_TYPE == JS_FUNCTION_TYPE); |
+ STATIC_ASSERT(JS_FUNCTION_TYPE == LAST_JS_OBJECT_TYPE + 1); |
__ CmpObjectType(rax, FIRST_JS_OBJECT_TYPE, rcx); |
__ j(below, &build_args); |
@@ -4011,7 +4011,7 @@ |
// The next handler address is on top of the frame. Unlink from |
// the handler list and drop the rest of this handler from the |
// frame. |
- ASSERT(StackHandlerConstants::kNextOffset == 0); |
+ STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0); |
__ movq(kScratchRegister, handler_address); |
frame_->EmitPop(Operand(kScratchRegister, 0)); |
frame_->Drop(StackHandlerConstants::kSize / kPointerSize - 1); |
@@ -4044,7 +4044,7 @@ |
__ movq(rsp, Operand(kScratchRegister, 0)); |
frame_->Forget(frame_->height() - handler_height); |
- ASSERT(StackHandlerConstants::kNextOffset == 0); |
+ STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0); |
__ movq(kScratchRegister, handler_address); |
frame_->EmitPop(Operand(kScratchRegister, 0)); |
frame_->Drop(StackHandlerConstants::kSize / kPointerSize - 1); |
@@ -4131,7 +4131,7 @@ |
// chain and set the state on the frame to FALLING. |
if (has_valid_frame()) { |
// The next handler address is on top of the frame. |
- ASSERT(StackHandlerConstants::kNextOffset == 0); |
+ STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0); |
__ movq(kScratchRegister, handler_address); |
frame_->EmitPop(Operand(kScratchRegister, 0)); |
frame_->Drop(StackHandlerConstants::kSize / kPointerSize - 1); |
@@ -4172,7 +4172,7 @@ |
frame_->Forget(frame_->height() - handler_height); |
// Unlink this handler and drop it from the frame. |
- ASSERT(StackHandlerConstants::kNextOffset == 0); |
+ STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0); |
__ movq(kScratchRegister, handler_address); |
frame_->EmitPop(Operand(kScratchRegister, 0)); |
frame_->Drop(StackHandlerConstants::kSize / kPointerSize - 1); |
@@ -6192,7 +6192,7 @@ |
ASSERT(args->length() == 0); |
// RBP value is aligned, so it should be tagged as a smi (without necesarily |
// being padded as a smi, so it should not be treated as a smi.). |
- ASSERT(kSmiTag == 0 && kSmiTagSize == 1); |
+ STATIC_ASSERT(kSmiTag == 0 && kSmiTagSize == 1); |
Result rbp_as_smi = allocator_->Allocate(); |
ASSERT(rbp_as_smi.is_valid()); |
__ movq(rbp_as_smi.reg(), rbp); |
@@ -10111,7 +10111,7 @@ |
__ j(not_equal, &runtime); |
// Check that the last match info has space for the capture registers and the |
// additional information. Ensure no overflow in add. |
- ASSERT(FixedArray::kMaxLength < kMaxInt - FixedArray::kLengthOffset); |
+ STATIC_ASSERT(FixedArray::kMaxLength < kMaxInt - FixedArray::kLengthOffset); |
__ SmiToInteger32(rax, FieldOperand(rbx, FixedArray::kLengthOffset)); |
__ addl(rdx, Immediate(RegExpImpl::kLastMatchOverhead)); |
__ cmpl(rdx, rax); |
@@ -10126,7 +10126,7 @@ |
// First check for flat two byte string. |
__ andb(rbx, Immediate( |
kIsNotStringMask | kStringRepresentationMask | kStringEncodingMask)); |
- ASSERT_EQ(0, kStringTag | kSeqStringTag | kTwoByteStringTag); |
+ STATIC_ASSERT((kStringTag | kSeqStringTag | kTwoByteStringTag) == 0); |
__ j(zero, &seq_two_byte_string); |
// Any other flat string must be a flat ascii string. |
__ testb(rbx, Immediate(kIsNotStringMask | kStringRepresentationMask)); |
@@ -10137,8 +10137,8 @@ |
// string. In that case the subject string is just the first part of the cons |
// string. Also in this case the first part of the cons string is known to be |
// a sequential string or an external string. |
- ASSERT(kExternalStringTag !=0); |
- ASSERT_EQ(0, kConsStringTag & kExternalStringTag); |
+ STATIC_ASSERT(kExternalStringTag !=0); |
+ STATIC_ASSERT((kConsStringTag & kExternalStringTag) == 0); |
__ testb(rbx, Immediate(kIsNotStringMask | kExternalStringTag)); |
__ j(not_zero, &runtime); |
// String is a cons string. |
@@ -10153,7 +10153,7 @@ |
// Is first part a flat two byte string? |
__ testb(FieldOperand(rbx, Map::kInstanceTypeOffset), |
Immediate(kStringRepresentationMask | kStringEncodingMask)); |
- ASSERT_EQ(0, kSeqStringTag | kTwoByteStringTag); |
+ STATIC_ASSERT((kSeqStringTag | kTwoByteStringTag) == 0); |
__ j(zero, &seq_two_byte_string); |
// Any other flat string must be ascii. |
__ testb(FieldOperand(rbx, Map::kInstanceTypeOffset), |
@@ -10390,7 +10390,7 @@ |
__ JumpIfSmi(object, &is_smi); |
__ CheckMap(object, Factory::heap_number_map(), not_found, true); |
- ASSERT_EQ(8, kDoubleSize); |
+ STATIC_ASSERT(8 == kDoubleSize); |
__ movl(scratch, FieldOperand(object, HeapNumber::kValueOffset + 4)); |
__ xor_(scratch, FieldOperand(object, HeapNumber::kValueOffset)); |
GenerateConvertHashCodeToIndex(masm, scratch, mask); |
@@ -10571,13 +10571,13 @@ |
// There is no test for undetectability in strict equality. |
// If the first object is a JS object, we have done pointer comparison. |
- ASSERT(LAST_TYPE == JS_FUNCTION_TYPE); |
+ STATIC_ASSERT(LAST_TYPE == JS_FUNCTION_TYPE); |
Label first_non_object; |
__ CmpObjectType(rax, FIRST_JS_OBJECT_TYPE, rcx); |
__ j(below, &first_non_object); |
// Return non-zero (eax (not rax) is not zero) |
Label return_not_equal; |
- ASSERT(kHeapObjectTag != 0); |
+ STATIC_ASSERT(kHeapObjectTag != 0); |
__ bind(&return_not_equal); |
__ ret(0); |
@@ -10669,8 +10669,8 @@ |
// At most one is a smi, so we can test for smi by adding the two. |
// A smi plus a heap object has the low bit set, a heap object plus |
// a heap object has the low bit clear. |
- ASSERT_EQ(0, kSmiTag); |
- ASSERT_EQ(static_cast<int64_t>(1), kSmiTagMask); |
+ STATIC_ASSERT(kSmiTag == 0); |
+ STATIC_ASSERT(kSmiTagMask == 1); |
__ lea(rcx, Operand(rax, rdx, times_1, 0)); |
__ testb(rcx, Immediate(kSmiTagMask)); |
__ j(not_zero, ¬_both_objects); |
@@ -10726,8 +10726,8 @@ |
__ movzxbq(scratch, |
FieldOperand(scratch, Map::kInstanceTypeOffset)); |
// Ensure that no non-strings have the symbol bit set. |
- ASSERT(kNotStringTag + kIsSymbolMask > LAST_TYPE); |
- ASSERT(kSymbolTag != 0); |
+ STATIC_ASSERT(LAST_TYPE < kNotStringTag + kIsSymbolMask); |
+ STATIC_ASSERT(kSymbolTag != 0); |
__ testb(scratch, Immediate(kIsSymbolMask)); |
__ j(zero, label); |
} |
@@ -10806,9 +10806,9 @@ |
void CEntryStub::GenerateThrowTOS(MacroAssembler* masm) { |
// Check that stack should contain next handler, frame pointer, state and |
// return address in that order. |
- ASSERT_EQ(StackHandlerConstants::kFPOffset + kPointerSize, |
+ STATIC_ASSERT(StackHandlerConstants::kFPOffset + kPointerSize == |
StackHandlerConstants::kStateOffset); |
- ASSERT_EQ(StackHandlerConstants::kStateOffset + kPointerSize, |
+ STATIC_ASSERT(StackHandlerConstants::kStateOffset + kPointerSize == |
StackHandlerConstants::kPCOffset); |
ExternalReference handler_address(Top::k_handler_address); |
@@ -10918,7 +10918,7 @@ |
// Check for failure result. |
Label failure_returned; |
- ASSERT(((kFailureTag + 1) & kFailureTagMask) == 0); |
+ STATIC_ASSERT(((kFailureTag + 1) & kFailureTagMask) == 0); |
#ifdef _WIN64 |
// If return value is on the stack, pop it to registers. |
if (result_size_ > 1) { |
@@ -10944,7 +10944,7 @@ |
Label retry; |
// If the returned exception is RETRY_AFTER_GC continue at retry label |
- ASSERT(Failure::RETRY_AFTER_GC == 0); |
+ STATIC_ASSERT(Failure::RETRY_AFTER_GC == 0); |
__ testl(rax, Immediate(((1 << kFailureTypeTagSize) - 1) << kFailureTagSize)); |
__ j(zero, &retry); |
@@ -11014,14 +11014,14 @@ |
__ xor_(rsi, rsi); |
// Restore registers from handler. |
- ASSERT_EQ(StackHandlerConstants::kNextOffset + kPointerSize, |
+ STATIC_ASSERT(StackHandlerConstants::kNextOffset + kPointerSize == |
StackHandlerConstants::kFPOffset); |
__ pop(rbp); // FP |
- ASSERT_EQ(StackHandlerConstants::kFPOffset + kPointerSize, |
+ STATIC_ASSERT(StackHandlerConstants::kFPOffset + kPointerSize == |
StackHandlerConstants::kStateOffset); |
__ pop(rdx); // State |
- ASSERT_EQ(StackHandlerConstants::kStateOffset + kPointerSize, |
+ STATIC_ASSERT(StackHandlerConstants::kStateOffset + kPointerSize == |
StackHandlerConstants::kPCOffset); |
__ ret(0); |
} |
@@ -11296,7 +11296,7 @@ |
__ bind(&is_instance); |
__ xorl(rax, rax); |
// Store bitwise zero in the cache. This is a Smi in GC terms. |
- ASSERT_EQ(0, kSmiTag); |
+ STATIC_ASSERT(kSmiTag == 0); |
__ StoreRoot(rax, Heap::kInstanceofCacheAnswerRootIndex); |
__ ret(2 * kPointerSize); |
@@ -11401,7 +11401,7 @@ |
__ j(above_equal, index_out_of_range_); |
// We need special handling for non-flat strings. |
- ASSERT(kSeqStringTag == 0); |
+ STATIC_ASSERT(kSeqStringTag == 0); |
__ testb(result_, Immediate(kStringRepresentationMask)); |
__ j(zero, &flat_string); |
@@ -11422,13 +11422,13 @@ |
__ movq(result_, FieldOperand(object_, HeapObject::kMapOffset)); |
__ movzxbl(result_, FieldOperand(result_, Map::kInstanceTypeOffset)); |
// If the first cons component is also non-flat, then go to runtime. |
- ASSERT(kSeqStringTag == 0); |
+ STATIC_ASSERT(kSeqStringTag == 0); |
__ testb(result_, Immediate(kStringRepresentationMask)); |
__ j(not_zero, &call_runtime_); |
// Check for 1-byte or 2-byte string. |
__ bind(&flat_string); |
- ASSERT(kAsciiStringTag != 0); |
+ STATIC_ASSERT(kAsciiStringTag != 0); |
__ testb(result_, Immediate(kStringEncodingMask)); |
__ j(not_zero, &ascii_string); |
@@ -11622,7 +11622,7 @@ |
__ movzxbl(r9, FieldOperand(r9, Map::kInstanceTypeOffset)); |
// Look at the length of the result of adding the two strings. |
- ASSERT(String::kMaxLength <= Smi::kMaxValue / 2); |
+ STATIC_ASSERT(String::kMaxLength <= Smi::kMaxValue / 2); |
__ SmiAdd(rbx, rbx, rcx, NULL); |
// Use the runtime system when adding two one character strings, as it |
// contains optimizations for this specific case using the symbol table. |
@@ -11654,7 +11654,7 @@ |
__ SmiCompare(rbx, Smi::FromInt(String::kMinNonFlatLength)); |
__ j(below, &string_add_flat_result); |
// Handle exceptionally long strings in the runtime system. |
- ASSERT((String::kMaxLength & 0x80000000) == 0); |
+ STATIC_ASSERT((String::kMaxLength & 0x80000000) == 0); |
__ SmiCompare(rbx, Smi::FromInt(String::kMaxLength)); |
__ j(above, &string_add_runtime); |
@@ -11668,7 +11668,7 @@ |
Label non_ascii, allocated, ascii_data; |
__ movl(rcx, r8); |
__ and_(rcx, r9); |
- ASSERT(kStringEncodingMask == kAsciiStringTag); |
+ STATIC_ASSERT(kStringEncodingMask == kAsciiStringTag); |
__ testl(rcx, Immediate(kAsciiStringTag)); |
__ j(zero, &non_ascii); |
__ bind(&ascii_data); |
@@ -11693,7 +11693,7 @@ |
__ testb(rcx, Immediate(kAsciiDataHintMask)); |
__ j(not_zero, &ascii_data); |
__ xor_(r8, r9); |
- ASSERT(kAsciiStringTag != 0 && kAsciiDataHintTag != 0); |
+ STATIC_ASSERT(kAsciiStringTag != 0 && kAsciiDataHintTag != 0); |
__ andb(r8, Immediate(kAsciiStringTag | kAsciiDataHintTag)); |
__ cmpb(r8, Immediate(kAsciiStringTag | kAsciiDataHintTag)); |
__ j(equal, &ascii_data); |
@@ -11725,7 +11725,7 @@ |
// r8: instance type of first string |
// r9: instance type of second string |
Label non_ascii_string_add_flat_result; |
- ASSERT(kStringEncodingMask == kAsciiStringTag); |
+ STATIC_ASSERT(kStringEncodingMask == kAsciiStringTag); |
__ testl(r8, Immediate(kAsciiStringTag)); |
__ j(zero, &non_ascii_string_add_flat_result); |
__ testl(r9, Immediate(kAsciiStringTag)); |
@@ -11847,7 +11847,7 @@ |
// Make count the number of bytes to copy. |
if (!ascii) { |
- ASSERT_EQ(2, static_cast<int>(sizeof(uc16))); // NOLINT |
+ STATIC_ASSERT(2 == sizeof(uc16)); |
__ addl(count, count); |
} |
@@ -11954,7 +11954,7 @@ |
// Load the entry from the symble table. |
Register candidate = scratch; // Scratch register contains candidate. |
- ASSERT_EQ(1, SymbolTable::kEntrySize); |
+ STATIC_ASSERT(SymbolTable::kEntrySize == 1); |
__ movq(candidate, |
FieldOperand(symbol_table, |
scratch, |
@@ -12069,7 +12069,7 @@ |
// Make sure first argument is a string. |
__ movq(rax, Operand(rsp, kStringOffset)); |
- ASSERT_EQ(0, kSmiTag); |
+ STATIC_ASSERT(kSmiTag == 0); |
__ testl(rax, Immediate(kSmiTagMask)); |
__ j(zero, &runtime); |
Condition is_string = masm->IsObjectStringType(rax, rbx, rbx); |
@@ -12209,7 +12209,7 @@ |
Register scratch4) { |
// Ensure that you can always subtract a string length from a non-negative |
// number (e.g. another length). |
- ASSERT(String::kMaxLength < 0x7fffffff); |
+ STATIC_ASSERT(String::kMaxLength < 0x7fffffff); |
// Find minimum length and length difference. |
__ movq(scratch1, FieldOperand(left, String::kLengthOffset)); |