| Index: src/arm/codegen-arm.cc
|
| ===================================================================
|
| --- src/arm/codegen-arm.cc (revision 5120)
|
| +++ src/arm/codegen-arm.cc (working copy)
|
| @@ -815,7 +815,7 @@
|
| // Check they are both small and positive.
|
| __ tst(scratch, Operand(kSmiTagMask | 0xc0000000));
|
| ASSERT(rhs.is(r0) || lhs.is(r0)); // r0 is free now.
|
| - ASSERT_EQ(0, kSmiTag);
|
| + STATIC_ASSERT(kSmiTag == 0);
|
| if (op == Token::ADD) {
|
| __ add(r0, lhs, Operand(rhs), LeaveCC, eq);
|
| } else {
|
| @@ -863,7 +863,7 @@
|
| __ and_(r0, lhs, Operand(rhs), LeaveCC, cond);
|
| } else {
|
| ASSERT(op == Token::BIT_XOR);
|
| - ASSERT_EQ(0, kSmiTag);
|
| + STATIC_ASSERT(kSmiTag == 0);
|
| __ eor(r0, lhs, Operand(rhs), LeaveCC, cond);
|
| }
|
| if (cond != al) {
|
| @@ -1520,8 +1520,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);
|
| __ CompareObjectType(receiver_reg, r2, r3, FIRST_JS_OBJECT_TYPE);
|
| __ b(lt, &build_args);
|
|
|
| @@ -2610,7 +2610,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);
|
| frame_->EmitPop(r1);
|
| __ mov(r3, Operand(handler_address));
|
| __ str(r1, MemOperand(r3));
|
| @@ -2636,7 +2636,7 @@
|
| __ ldr(sp, MemOperand(r3));
|
| frame_->Forget(frame_->height() - handler_height);
|
|
|
| - ASSERT(StackHandlerConstants::kNextOffset == 0);
|
| + STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0);
|
| frame_->EmitPop(r1);
|
| __ str(r1, MemOperand(r3));
|
| frame_->Drop(StackHandlerConstants::kSize / kPointerSize - 1);
|
| @@ -2723,7 +2723,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);
|
| frame_->EmitPop(r1);
|
| __ mov(r3, Operand(handler_address));
|
| __ str(r1, MemOperand(r3));
|
| @@ -2762,7 +2762,7 @@
|
|
|
| // Unlink this handler and drop it from the frame. The next
|
| // handler address is currently on top of the frame.
|
| - ASSERT(StackHandlerConstants::kNextOffset == 0);
|
| + STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0);
|
| frame_->EmitPop(r1);
|
| __ str(r1, MemOperand(r3));
|
| frame_->Drop(StackHandlerConstants::kSize / kPointerSize - 1);
|
| @@ -4181,8 +4181,8 @@
|
| // As long as JS_FUNCTION_TYPE is the last instance type and it is
|
| // right after LAST_JS_OBJECT_TYPE, we can avoid checking for
|
| // LAST_JS_OBJECT_TYPE.
|
| - 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);
|
| __ cmp(r1, Operand(JS_FUNCTION_TYPE));
|
| function.Branch(eq);
|
|
|
| @@ -5128,7 +5128,7 @@
|
|
|
| const int kFingerOffset =
|
| FixedArray::OffsetOfElementAt(JSFunctionResultCache::kFingerIndex);
|
| - ASSERT(kSmiTag == 0 && kSmiTagSize == 1);
|
| + STATIC_ASSERT(kSmiTag == 0 && kSmiTagSize == 1);
|
| __ ldr(r0, FieldMemOperand(r1, kFingerOffset));
|
| // r0 now holds finger offset as a smi.
|
| __ add(r3, r1, Operand(FixedArray::kHeaderSize - kHeapObjectTag));
|
| @@ -6940,7 +6940,7 @@
|
| // Move sign bit from source to destination. This works because the sign bit
|
| // in the exponent word of the double has the same position and polarity as
|
| // the 2's complement sign bit in a Smi.
|
| - ASSERT(HeapNumber::kSignMask == 0x80000000u);
|
| + STATIC_ASSERT(HeapNumber::kSignMask == 0x80000000u);
|
| __ and_(exponent, source_, Operand(HeapNumber::kSignMask), SetCC);
|
| // Subtract from 0 if source was negative.
|
| __ rsb(source_, source_, Operand(0), LeaveCC, ne);
|
| @@ -6993,7 +6993,7 @@
|
| // the_int_ has the answer which is a signed int32 but not a Smi.
|
| // We test for the special value that has a different exponent. This test
|
| // has the neat side effect of setting the flags according to the sign.
|
| - ASSERT(HeapNumber::kSignMask == 0x80000000u);
|
| + STATIC_ASSERT(HeapNumber::kSignMask == 0x80000000u);
|
| __ cmp(the_int_, Operand(0x80000000u));
|
| __ b(eq, &max_negative_int);
|
| // Set up the correct exponent in scratch_. All non-Smi int32s have the same.
|
| @@ -7338,7 +7338,7 @@
|
| // If either operand is a JSObject or an oddball value, then they are
|
| // not equal since their pointers are different.
|
| // There is no test for undetectability in strict equality.
|
| - ASSERT(LAST_TYPE == JS_FUNCTION_TYPE);
|
| + STATIC_ASSERT(LAST_TYPE == JS_FUNCTION_TYPE);
|
| Label first_non_object;
|
| // Get the type of the first operand into r2 and compare it with
|
| // FIRST_JS_OBJECT_TYPE.
|
| @@ -7364,8 +7364,8 @@
|
|
|
| // Now that we have the types we might as well check for symbol-symbol.
|
| // 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);
|
| __ and_(r2, r2, Operand(r3));
|
| __ tst(r2, Operand(kIsSymbolMask));
|
| __ b(ne, &return_not_equal);
|
| @@ -7416,7 +7416,7 @@
|
| // r2 is object type of rhs.
|
| // Ensure that no non-strings have the symbol bit set.
|
| Label object_test;
|
| - ASSERT(kSymbolTag != 0);
|
| + STATIC_ASSERT(kSymbolTag != 0);
|
| __ tst(r2, Operand(kIsNotStringMask));
|
| __ b(ne, &object_test);
|
| __ tst(r2, Operand(kIsSymbolMask));
|
| @@ -7487,7 +7487,7 @@
|
| not_found,
|
| true);
|
|
|
| - ASSERT_EQ(8, kDoubleSize);
|
| + STATIC_ASSERT(8 == kDoubleSize);
|
| __ add(scratch1,
|
| object,
|
| Operand(HeapNumber::kValueOffset - kHeapObjectTag));
|
| @@ -7586,7 +7586,7 @@
|
|
|
| // If either is a Smi (we know that not both are), then they can only
|
| // be strictly equal if the other is a HeapNumber.
|
| - ASSERT_EQ(0, kSmiTag);
|
| + STATIC_ASSERT(kSmiTag == 0);
|
| ASSERT_EQ(0, Smi::FromInt(0));
|
| __ and_(r2, lhs_, Operand(rhs_));
|
| __ tst(r2, Operand(kSmiTagMask));
|
| @@ -8589,7 +8589,7 @@
|
| Label not_smi;
|
| // Fast path.
|
| if (ShouldGenerateSmiCode()) {
|
| - ASSERT(kSmiTag == 0); // Adjust code below.
|
| + STATIC_ASSERT(kSmiTag == 0); // Adjust code below.
|
| __ tst(smi_test_reg, Operand(kSmiTagMask));
|
| __ b(ne, ¬_smi);
|
| __ add(r0, r1, Operand(r0), SetCC); // Add y optimistically.
|
| @@ -8605,7 +8605,7 @@
|
| Label not_smi;
|
| // Fast path.
|
| if (ShouldGenerateSmiCode()) {
|
| - ASSERT(kSmiTag == 0); // Adjust code below.
|
| + STATIC_ASSERT(kSmiTag == 0); // Adjust code below.
|
| __ tst(smi_test_reg, Operand(kSmiTagMask));
|
| __ b(ne, ¬_smi);
|
| if (lhs.is(r1)) {
|
| @@ -8627,7 +8627,7 @@
|
| case Token::MUL: {
|
| Label not_smi, slow;
|
| if (ShouldGenerateSmiCode()) {
|
| - ASSERT(kSmiTag == 0); // adjust code below
|
| + STATIC_ASSERT(kSmiTag == 0); // adjust code below
|
| __ tst(smi_test_reg, Operand(kSmiTagMask));
|
| Register scratch2 = smi_test_reg;
|
| smi_test_reg = no_reg;
|
| @@ -8763,7 +8763,7 @@
|
| Label slow;
|
| Label not_power_of_2;
|
| ASSERT(!ShouldGenerateSmiCode());
|
| - ASSERT(kSmiTag == 0); // Adjust code below.
|
| + STATIC_ASSERT(kSmiTag == 0); // Adjust code below.
|
| // Check for two positive smis.
|
| __ orr(smi_test_reg, lhs, Operand(rhs));
|
| __ tst(smi_test_reg, Operand(0x80000000u | kSmiTagMask));
|
| @@ -8823,7 +8823,7 @@
|
| case Token::SHR:
|
| case Token::SHL: {
|
| Label slow;
|
| - ASSERT(kSmiTag == 0); // adjust code below
|
| + STATIC_ASSERT(kSmiTag == 0); // adjust code below
|
| __ tst(smi_test_reg, Operand(kSmiTagMask));
|
| __ b(ne, &slow);
|
| Register scratch2 = smi_test_reg;
|
| @@ -9137,17 +9137,17 @@
|
| // r0 holds the exception.
|
|
|
| // Adjust this code if not the case.
|
| - ASSERT(StackHandlerConstants::kSize == 4 * kPointerSize);
|
| + STATIC_ASSERT(StackHandlerConstants::kSize == 4 * kPointerSize);
|
|
|
| // Drop the sp to the top of the handler.
|
| __ mov(r3, Operand(ExternalReference(Top::k_handler_address)));
|
| __ ldr(sp, MemOperand(r3));
|
|
|
| // Restore the next handler and frame pointer, discard handler state.
|
| - ASSERT(StackHandlerConstants::kNextOffset == 0);
|
| + STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0);
|
| __ pop(r2);
|
| __ str(r2, MemOperand(r3));
|
| - ASSERT(StackHandlerConstants::kFPOffset == 2 * kPointerSize);
|
| + STATIC_ASSERT(StackHandlerConstants::kFPOffset == 2 * kPointerSize);
|
| __ ldm(ia_w, sp, r3.bit() | fp.bit()); // r3: discarded state.
|
|
|
| // Before returning we restore the context from the frame pointer if
|
| @@ -9163,7 +9163,7 @@
|
| __ mov(lr, Operand(pc));
|
| }
|
| #endif
|
| - ASSERT(StackHandlerConstants::kPCOffset == 3 * kPointerSize);
|
| + STATIC_ASSERT(StackHandlerConstants::kPCOffset == 3 * kPointerSize);
|
| __ pop(pc);
|
| }
|
|
|
| @@ -9171,7 +9171,7 @@
|
| void CEntryStub::GenerateThrowUncatchable(MacroAssembler* masm,
|
| UncatchableExceptionType type) {
|
| // Adjust this code if not the case.
|
| - ASSERT(StackHandlerConstants::kSize == 4 * kPointerSize);
|
| + STATIC_ASSERT(StackHandlerConstants::kSize == 4 * kPointerSize);
|
|
|
| // Drop sp to the top stack handler.
|
| __ mov(r3, Operand(ExternalReference(Top::k_handler_address)));
|
| @@ -9192,7 +9192,7 @@
|
| __ bind(&done);
|
|
|
| // Set the top handler address to next handler past the current ENTRY handler.
|
| - ASSERT(StackHandlerConstants::kNextOffset == 0);
|
| + STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0);
|
| __ pop(r2);
|
| __ str(r2, MemOperand(r3));
|
|
|
| @@ -9216,7 +9216,7 @@
|
| // lr
|
|
|
| // Discard handler state (r2 is not used) and restore frame pointer.
|
| - ASSERT(StackHandlerConstants::kFPOffset == 2 * kPointerSize);
|
| + STATIC_ASSERT(StackHandlerConstants::kFPOffset == 2 * kPointerSize);
|
| __ ldm(ia_w, sp, r2.bit() | fp.bit()); // r2: discarded state.
|
| // Before returning we restore the context from the frame pointer if
|
| // not NULL. The frame pointer is NULL in the exception handler of a
|
| @@ -9231,7 +9231,7 @@
|
| __ mov(lr, Operand(pc));
|
| }
|
| #endif
|
| - ASSERT(StackHandlerConstants::kPCOffset == 3 * kPointerSize);
|
| + STATIC_ASSERT(StackHandlerConstants::kPCOffset == 3 * kPointerSize);
|
| __ pop(pc);
|
| }
|
|
|
| @@ -9326,7 +9326,7 @@
|
|
|
| // check for failure result
|
| Label failure_returned;
|
| - ASSERT(((kFailureTag + 1) & kFailureTagMask) == 0);
|
| + STATIC_ASSERT(((kFailureTag + 1) & kFailureTagMask) == 0);
|
| // Lower 2 bits of r2 are 0 iff r0 has failure tag.
|
| __ add(r2, r0, Operand(1));
|
| __ tst(r2, Operand(kFailureTagMask));
|
| @@ -9341,7 +9341,7 @@
|
| // check if we should retry or throw exception
|
| Label retry;
|
| __ bind(&failure_returned);
|
| - ASSERT(Failure::RETRY_AFTER_GC == 0);
|
| + STATIC_ASSERT(Failure::RETRY_AFTER_GC == 0);
|
| __ tst(r0, Operand(((1 << kFailureTypeTagSize) - 1) << kFailureTagSize));
|
| __ b(eq, &retry);
|
|
|
| @@ -9744,12 +9744,12 @@
|
| }
|
|
|
| // Setup the callee in-object property.
|
| - ASSERT(Heap::arguments_callee_index == 0);
|
| + STATIC_ASSERT(Heap::arguments_callee_index == 0);
|
| __ ldr(r3, MemOperand(sp, 2 * kPointerSize));
|
| __ str(r3, FieldMemOperand(r0, JSObject::kHeaderSize));
|
|
|
| // Get the length (smi tagged) and set that as an in-object property too.
|
| - ASSERT(Heap::arguments_length_index == 1);
|
| + STATIC_ASSERT(Heap::arguments_length_index == 1);
|
| __ ldr(r1, MemOperand(sp, 0 * kPointerSize));
|
| __ str(r1, FieldMemOperand(r0, JSObject::kHeaderSize + kPointerSize));
|
|
|
| @@ -9841,7 +9841,7 @@
|
|
|
| // Check that the first argument is a JSRegExp object.
|
| __ ldr(r0, MemOperand(sp, kJSRegExpOffset));
|
| - ASSERT_EQ(0, kSmiTag);
|
| + STATIC_ASSERT(kSmiTag == 0);
|
| __ tst(r0, Operand(kSmiTagMask));
|
| __ b(eq, &runtime);
|
| __ CompareObjectType(r0, r1, r1, JS_REGEXP_TYPE);
|
| @@ -9868,8 +9868,8 @@
|
| FieldMemOperand(regexp_data, JSRegExp::kIrregexpCaptureCountOffset));
|
| // Calculate number of capture registers (number_of_captures + 1) * 2. This
|
| // uses the asumption that smis are 2 * their untagged value.
|
| - ASSERT_EQ(0, kSmiTag);
|
| - ASSERT_EQ(1, kSmiTagSize + kSmiShiftSize);
|
| + STATIC_ASSERT(kSmiTag == 0);
|
| + STATIC_ASSERT(kSmiTagSize + kSmiShiftSize == 1);
|
| __ add(r2, r2, Operand(2)); // r2 was a smi.
|
| // Check that the static offsets vector buffer is large enough.
|
| __ cmp(r2, Operand(OffsetsVector::kStaticOffsetsVectorSize));
|
| @@ -9930,7 +9930,7 @@
|
| __ ldrb(r0, FieldMemOperand(r0, Map::kInstanceTypeOffset));
|
| // First check for flat string.
|
| __ tst(r0, Operand(kIsNotStringMask | kStringRepresentationMask));
|
| - ASSERT_EQ(0, kStringTag | kSeqStringTag);
|
| + STATIC_ASSERT((kStringTag | kSeqStringTag) == 0);
|
| __ b(eq, &seq_string);
|
|
|
| // subject: Subject string
|
| @@ -9940,8 +9940,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);
|
| __ tst(r0, Operand(kIsNotStringMask | kExternalStringTag));
|
| __ b(ne, &runtime);
|
| __ ldr(r0, FieldMemOperand(subject, ConsString::kSecondOffset));
|
| @@ -9952,7 +9952,7 @@
|
| __ ldr(r0, FieldMemOperand(subject, HeapObject::kMapOffset));
|
| __ ldrb(r0, FieldMemOperand(r0, Map::kInstanceTypeOffset));
|
| // Is first part a flat string?
|
| - ASSERT_EQ(0, kSeqStringTag);
|
| + STATIC_ASSERT(kSeqStringTag == 0);
|
| __ tst(r0, Operand(kStringRepresentationMask));
|
| __ b(nz, &runtime);
|
|
|
| @@ -9960,8 +9960,8 @@
|
| // subject: Subject string
|
| // regexp_data: RegExp data (FixedArray)
|
| // r0: Instance type of subject string
|
| - ASSERT_EQ(4, kAsciiStringTag);
|
| - ASSERT_EQ(0, kTwoByteStringTag);
|
| + STATIC_ASSERT(4 == kAsciiStringTag);
|
| + STATIC_ASSERT(kTwoByteStringTag == 0);
|
| // Find the code object based on the assumptions above.
|
| __ and_(r0, r0, Operand(kStringEncodingMask));
|
| __ mov(r3, Operand(r0, ASR, 2), SetCC);
|
| @@ -10015,7 +10015,7 @@
|
| // calculate the shift of the index (0 for ASCII and 1 for two byte).
|
| __ ldr(r0, FieldMemOperand(subject, String::kLengthOffset));
|
| __ mov(r0, Operand(r0, ASR, kSmiTagSize));
|
| - ASSERT_EQ(SeqAsciiString::kHeaderSize, SeqTwoByteString::kHeaderSize);
|
| + STATIC_ASSERT(SeqAsciiString::kHeaderSize == SeqTwoByteString::kHeaderSize);
|
| __ add(r9, subject, Operand(SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
| __ eor(r3, r3, Operand(1));
|
| // Argument 4 (r3): End of string data
|
| @@ -10070,8 +10070,8 @@
|
| __ ldr(r1,
|
| FieldMemOperand(regexp_data, JSRegExp::kIrregexpCaptureCountOffset));
|
| // Calculate number of capture registers (number_of_captures + 1) * 2.
|
| - ASSERT_EQ(0, kSmiTag);
|
| - ASSERT_EQ(1, kSmiTagSize + kSmiShiftSize);
|
| + STATIC_ASSERT(kSmiTag == 0);
|
| + STATIC_ASSERT(kSmiTagSize + kSmiShiftSize == 1);
|
| __ add(r1, r1, Operand(2)); // r1 was a smi.
|
|
|
| // r1: number of capture registers
|
| @@ -10283,7 +10283,7 @@
|
| __ b(ls, index_out_of_range_);
|
|
|
| // We need special handling for non-flat strings.
|
| - ASSERT(kSeqStringTag == 0);
|
| + STATIC_ASSERT(kSeqStringTag == 0);
|
| __ tst(result_, Operand(kStringRepresentationMask));
|
| __ b(eq, &flat_string);
|
|
|
| @@ -10305,13 +10305,13 @@
|
| __ ldr(result_, FieldMemOperand(object_, HeapObject::kMapOffset));
|
| __ ldrb(result_, FieldMemOperand(result_, Map::kInstanceTypeOffset));
|
| // If the first cons component is also non-flat, then go to runtime.
|
| - ASSERT(kSeqStringTag == 0);
|
| + STATIC_ASSERT(kSeqStringTag == 0);
|
| __ tst(result_, Operand(kStringRepresentationMask));
|
| __ b(nz, &call_runtime_);
|
|
|
| // Check for 1-byte or 2-byte string.
|
| __ bind(&flat_string);
|
| - ASSERT(kAsciiStringTag != 0);
|
| + STATIC_ASSERT(kAsciiStringTag != 0);
|
| __ tst(result_, Operand(kStringEncodingMask));
|
| __ b(nz, &ascii_string);
|
|
|
| @@ -10319,7 +10319,7 @@
|
| // Load the 2-byte character code into the result register. We can
|
| // add without shifting since the smi tag size is the log2 of the
|
| // number of bytes in a two-byte character.
|
| - ASSERT(kSmiTag == 0 && kSmiTagSize == 1 && kSmiShiftSize == 0);
|
| + STATIC_ASSERT(kSmiTag == 0 && kSmiTagSize == 1 && kSmiShiftSize == 0);
|
| __ add(scratch_, object_, Operand(scratch_));
|
| __ ldrh(result_, FieldMemOperand(scratch_, SeqTwoByteString::kHeaderSize));
|
| __ jmp(&got_char_code);
|
| @@ -10396,8 +10396,8 @@
|
|
|
| void StringCharFromCodeGenerator::GenerateFast(MacroAssembler* masm) {
|
| // Fast case of Heap::LookupSingleCharacterStringFromCode.
|
| - ASSERT(kSmiTag == 0);
|
| - ASSERT(kSmiShiftSize == 0);
|
| + STATIC_ASSERT(kSmiTag == 0);
|
| + STATIC_ASSERT(kSmiShiftSize == 0);
|
| ASSERT(IsPowerOf2(String::kMaxAsciiCharCode + 1));
|
| __ tst(code_,
|
| Operand(kSmiTagMask |
|
| @@ -10406,7 +10406,7 @@
|
|
|
| __ LoadRoot(result_, Heap::kSingleCharacterStringCacheRootIndex);
|
| // At this point code register contains smi tagged ascii char code.
|
| - ASSERT(kSmiTag == 0);
|
| + STATIC_ASSERT(kSmiTag == 0);
|
| __ add(result_, result_, Operand(code_, LSL, kPointerSizeLog2 - kSmiTagSize));
|
| __ ldr(result_, FieldMemOperand(result_, FixedArray::kHeaderSize));
|
| __ LoadRoot(ip, Heap::kUndefinedValueRootIndex);
|
| @@ -10511,7 +10511,7 @@
|
| // Ensure that reading an entire aligned word containing the last character
|
| // of a string will not read outside the allocated area (because we pad up
|
| // to kObjectAlignment).
|
| - ASSERT(kObjectAlignment >= kReadAlignment);
|
| + STATIC_ASSERT(kObjectAlignment >= kReadAlignment);
|
| // Assumes word reads and writes are little endian.
|
| // Nothing to do for zero characters.
|
| Label done;
|
| @@ -10715,7 +10715,7 @@
|
| __ and_(candidate, candidate, Operand(mask));
|
|
|
| // Load the entry from the symble table.
|
| - ASSERT_EQ(1, SymbolTable::kEntrySize);
|
| + STATIC_ASSERT(SymbolTable::kEntrySize == 1);
|
| __ ldr(candidate,
|
| MemOperand(first_symbol_table_element,
|
| candidate,
|
| @@ -10815,8 +10815,8 @@
|
| // Check bounds and smi-ness.
|
| __ ldr(r7, MemOperand(sp, kToOffset));
|
| __ ldr(r6, MemOperand(sp, kFromOffset));
|
| - ASSERT_EQ(0, kSmiTag);
|
| - ASSERT_EQ(1, kSmiTagSize + kSmiShiftSize);
|
| + STATIC_ASSERT(kSmiTag == 0);
|
| + STATIC_ASSERT(kSmiTagSize + kSmiShiftSize == 1);
|
| // I.e., arithmetic shift right by one un-smi-tags.
|
| __ mov(r2, Operand(r7, ASR, 1), SetCC);
|
| __ mov(r3, Operand(r6, ASR, 1), SetCC, cc);
|
| @@ -10839,7 +10839,7 @@
|
|
|
| // Make sure first argument is a sequential (or flat) string.
|
| __ ldr(r5, MemOperand(sp, kStringOffset));
|
| - ASSERT_EQ(0, kSmiTag);
|
| + STATIC_ASSERT(kSmiTag == 0);
|
| __ tst(r5, Operand(kSmiTagMask));
|
| __ b(eq, &runtime);
|
| Condition is_string = masm->IsObjectStringType(r5, r1);
|
| @@ -10853,8 +10853,8 @@
|
| // r7: to (smi)
|
| Label seq_string;
|
| __ and_(r4, r1, Operand(kStringRepresentationMask));
|
| - ASSERT(kSeqStringTag < kConsStringTag);
|
| - ASSERT(kExternalStringTag > kConsStringTag);
|
| + STATIC_ASSERT(kSeqStringTag < kConsStringTag);
|
| + STATIC_ASSERT(kConsStringTag < kExternalStringTag);
|
| __ cmp(r4, Operand(kConsStringTag));
|
| __ b(gt, &runtime); // External strings go to runtime.
|
| __ b(lt, &seq_string); // Sequential strings are handled directly.
|
| @@ -10866,7 +10866,7 @@
|
| __ ldr(r4, FieldMemOperand(r5, HeapObject::kMapOffset));
|
| __ ldrb(r1, FieldMemOperand(r4, Map::kInstanceTypeOffset));
|
| __ tst(r1, Operand(kStringRepresentationMask));
|
| - ASSERT_EQ(0, kSeqStringTag);
|
| + STATIC_ASSERT(kSeqStringTag == 0);
|
| __ b(ne, &runtime); // Cons and External strings go to runtime.
|
|
|
| // Definitly a sequential string.
|
| @@ -10890,7 +10890,7 @@
|
| // Check for flat ascii string.
|
| Label non_ascii_flat;
|
| __ tst(r1, Operand(kStringEncodingMask));
|
| - ASSERT_EQ(0, kTwoByteStringTag);
|
| + STATIC_ASSERT(kTwoByteStringTag == 0);
|
| __ b(eq, &non_ascii_flat);
|
|
|
| Label result_longer_than_two;
|
| @@ -10939,7 +10939,7 @@
|
| // r1: first character of result string.
|
| // r2: result string length.
|
| // r5: first character of sub string to copy.
|
| - ASSERT_EQ(0, SeqAsciiString::kHeaderSize & kObjectAlignmentMask);
|
| + STATIC_ASSERT((SeqAsciiString::kHeaderSize & kObjectAlignmentMask) == 0);
|
| StringHelper::GenerateCopyCharactersLong(masm, r1, r5, r2, r3, r4, r6, r7, r9,
|
| COPY_ASCII | DEST_ALWAYS_ALIGNED);
|
| __ IncrementCounter(&Counters::sub_string_native, 1, r3, r4);
|
| @@ -10970,7 +10970,7 @@
|
| // r1: first character of result.
|
| // r2: result length.
|
| // r5: first character of string to copy.
|
| - ASSERT_EQ(0, SeqTwoByteString::kHeaderSize & kObjectAlignmentMask);
|
| + STATIC_ASSERT((SeqTwoByteString::kHeaderSize & kObjectAlignmentMask) == 0);
|
| StringHelper::GenerateCopyCharactersLong(masm, r1, r5, r2, r3, r4, r6, r7, r9,
|
| DEST_ALWAYS_ALIGNED);
|
| __ IncrementCounter(&Counters::sub_string_native, 1, r3, r4);
|
| @@ -10998,7 +10998,7 @@
|
| Register length_delta = scratch3;
|
| __ mov(scratch1, scratch2, LeaveCC, gt);
|
| Register min_length = scratch1;
|
| - ASSERT(kSmiTag == 0);
|
| + STATIC_ASSERT(kSmiTag == 0);
|
| __ tst(min_length, Operand(min_length));
|
| __ b(eq, &compare_lengths);
|
|
|
| @@ -11054,8 +11054,8 @@
|
| Label not_same;
|
| __ cmp(r0, r1);
|
| __ b(ne, ¬_same);
|
| - ASSERT_EQ(0, EQUAL);
|
| - ASSERT_EQ(0, kSmiTag);
|
| + STATIC_ASSERT(EQUAL == 0);
|
| + STATIC_ASSERT(kSmiTag == 0);
|
| __ mov(r0, Operand(Smi::FromInt(EQUAL)));
|
| __ IncrementCounter(&Counters::string_compare_native, 1, r1, r2);
|
| __ add(sp, sp, Operand(2 * kPointerSize));
|
| @@ -11090,14 +11090,14 @@
|
|
|
| // Make sure that both arguments are strings if not known in advance.
|
| if (string_check_) {
|
| - ASSERT_EQ(0, kSmiTag);
|
| + STATIC_ASSERT(kSmiTag == 0);
|
| __ JumpIfEitherSmi(r0, r1, &string_add_runtime);
|
| // Load instance types.
|
| __ ldr(r4, FieldMemOperand(r0, HeapObject::kMapOffset));
|
| __ ldr(r5, FieldMemOperand(r1, HeapObject::kMapOffset));
|
| __ ldrb(r4, FieldMemOperand(r4, Map::kInstanceTypeOffset));
|
| __ ldrb(r5, FieldMemOperand(r5, Map::kInstanceTypeOffset));
|
| - ASSERT_EQ(0, kStringTag);
|
| + STATIC_ASSERT(kStringTag == 0);
|
| // If either is not a string, go to runtime.
|
| __ tst(r4, Operand(kIsNotStringMask));
|
| __ tst(r5, Operand(kIsNotStringMask), eq);
|
| @@ -11114,10 +11114,10 @@
|
| // Check if either of the strings are empty. In that case return the other.
|
| __ ldr(r2, FieldMemOperand(r0, String::kLengthOffset));
|
| __ ldr(r3, FieldMemOperand(r1, String::kLengthOffset));
|
| - ASSERT(kSmiTag == 0);
|
| + STATIC_ASSERT(kSmiTag == 0);
|
| __ cmp(r2, Operand(Smi::FromInt(0))); // Test if first string is empty.
|
| __ mov(r0, Operand(r1), LeaveCC, eq); // If first is empty, return second.
|
| - ASSERT(kSmiTag == 0);
|
| + STATIC_ASSERT(kSmiTag == 0);
|
| // Else test if second string is empty.
|
| __ cmp(r3, Operand(Smi::FromInt(0)), ne);
|
| __ b(ne, &strings_not_empty); // If either string was empty, return r0.
|
| @@ -11141,7 +11141,7 @@
|
| // Look at the length of the result of adding the two strings.
|
| Label string_add_flat_result, longer_than_two;
|
| // Adding two lengths can't overflow.
|
| - ASSERT(String::kMaxLength * 2 > String::kMaxLength);
|
| + STATIC_ASSERT(String::kMaxLength < String::kMaxLength * 2);
|
| __ add(r6, r2, Operand(r3));
|
| // Use the runtime system when adding two one character strings, as it
|
| // contains optimizations for this specific case using the symbol table.
|
| @@ -11189,7 +11189,7 @@
|
| __ cmp(r6, Operand(String::kMinNonFlatLength));
|
| __ b(lt, &string_add_flat_result);
|
| // Handle exceptionally long strings in the runtime system.
|
| - ASSERT((String::kMaxLength & 0x80000000) == 0);
|
| + STATIC_ASSERT((String::kMaxLength & 0x80000000) == 0);
|
| ASSERT(IsPowerOf2(String::kMaxLength + 1));
|
| // kMaxLength + 1 is representable as shifted literal, kMaxLength is not.
|
| __ cmp(r6, Operand(String::kMaxLength + 1));
|
| @@ -11204,7 +11204,7 @@
|
| __ ldrb(r5, FieldMemOperand(r5, Map::kInstanceTypeOffset));
|
| }
|
| Label non_ascii, allocated, ascii_data;
|
| - ASSERT_EQ(0, kTwoByteStringTag);
|
| + STATIC_ASSERT(kTwoByteStringTag == 0);
|
| __ tst(r4, Operand(kStringEncodingMask));
|
| __ tst(r5, Operand(kStringEncodingMask), ne);
|
| __ b(eq, &non_ascii);
|
| @@ -11230,7 +11230,7 @@
|
| __ tst(r5, Operand(kAsciiDataHintMask), ne);
|
| __ b(ne, &ascii_data);
|
| __ eor(r4, r4, Operand(r5));
|
| - ASSERT(kAsciiStringTag != 0 && kAsciiDataHintTag != 0);
|
| + STATIC_ASSERT(kAsciiStringTag != 0 && kAsciiDataHintTag != 0);
|
| __ and_(r4, r4, Operand(kAsciiStringTag | kAsciiDataHintTag));
|
| __ cmp(r4, Operand(kAsciiStringTag | kAsciiDataHintTag));
|
| __ b(eq, &ascii_data);
|
| @@ -11256,7 +11256,7 @@
|
| __ ldrb(r5, FieldMemOperand(r5, Map::kInstanceTypeOffset));
|
| }
|
| // Check that both strings are sequential.
|
| - ASSERT_EQ(0, kSeqStringTag);
|
| + STATIC_ASSERT(kSeqStringTag == 0);
|
| __ tst(r4, Operand(kStringRepresentationMask));
|
| __ tst(r5, Operand(kStringRepresentationMask), eq);
|
| __ b(ne, &string_add_runtime);
|
|
|