OLD | NEW |
---|---|
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 6451 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6462 HCompareMap* mapcompare = | 6462 HCompareMap* mapcompare = |
6463 New<HCompareMap>(object, map, this_map, other_map); | 6463 New<HCompareMap>(object, map, this_map, other_map); |
6464 FinishCurrentBlock(mapcompare); | 6464 FinishCurrentBlock(mapcompare); |
6465 | 6465 |
6466 set_current_block(this_map); | 6466 set_current_block(this_map); |
6467 HInstruction* access = NULL; | 6467 HInstruction* access = NULL; |
6468 if (IsDictionaryElementsKind(elements_kind)) { | 6468 if (IsDictionaryElementsKind(elements_kind)) { |
6469 access = AddInstruction(BuildKeyedGeneric(access_type, object, key, val)); | 6469 access = AddInstruction(BuildKeyedGeneric(access_type, object, key, val)); |
6470 } else { | 6470 } else { |
6471 ASSERT(IsFastElementsKind(elements_kind) || | 6471 ASSERT(IsFastElementsKind(elements_kind) || |
6472 IsExternalArrayElementsKind(elements_kind)); | 6472 IsExternalArrayElementsKind(elements_kind) || |
6473 IsFixedTypedArrayElementsKind(elements_kind)); | |
6473 LoadKeyedHoleMode load_mode = BuildKeyedHoleMode(map); | 6474 LoadKeyedHoleMode load_mode = BuildKeyedHoleMode(map); |
6474 // Happily, mapcompare is a checked object. | 6475 // Happily, mapcompare is a checked object. |
6475 access = BuildUncheckedMonomorphicElementAccess( | 6476 access = BuildUncheckedMonomorphicElementAccess( |
6476 mapcompare, key, val, | 6477 mapcompare, key, val, |
6477 map->instance_type() == JS_ARRAY_TYPE, | 6478 map->instance_type() == JS_ARRAY_TYPE, |
6478 elements_kind, access_type, | 6479 elements_kind, access_type, |
6479 load_mode, | 6480 load_mode, |
6480 store_mode); | 6481 store_mode); |
6481 } | 6482 } |
6482 *has_side_effects |= access->HasObservableSideEffects(); | 6483 *has_side_effects |= access->HasObservableSideEffects(); |
(...skipping 1919 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
8402 for (int offset = ViewClass::kSize; | 8403 for (int offset = ViewClass::kSize; |
8403 offset < ViewClass::kSizeWithInternalFields; | 8404 offset < ViewClass::kSizeWithInternalFields; |
8404 offset += kPointerSize) { | 8405 offset += kPointerSize) { |
8405 Add<HStoreNamedField>(obj, | 8406 Add<HStoreNamedField>(obj, |
8406 HObjectAccess::ForObservableJSObjectOffset(offset), | 8407 HObjectAccess::ForObservableJSObjectOffset(offset), |
8407 graph()->GetConstant0()); | 8408 graph()->GetConstant0()); |
8408 } | 8409 } |
8409 | 8410 |
8410 Add<HStoreNamedField>( | 8411 Add<HStoreNamedField>( |
8411 obj, | 8412 obj, |
8412 HObjectAccess::ForJSArrayBufferViewBuffer(), buffer); | |
8413 Add<HStoreNamedField>( | |
8414 obj, | |
8415 HObjectAccess::ForJSArrayBufferViewByteOffset(), | 8413 HObjectAccess::ForJSArrayBufferViewByteOffset(), |
8416 byte_offset); | 8414 byte_offset); |
8417 Add<HStoreNamedField>( | 8415 Add<HStoreNamedField>( |
8418 obj, | 8416 obj, |
8419 HObjectAccess::ForJSArrayBufferViewByteLength(), | 8417 HObjectAccess::ForJSArrayBufferViewByteLength(), |
8420 byte_length); | 8418 byte_length); |
8421 | 8419 |
8422 HObjectAccess weak_first_view_access = | 8420 if (buffer != NULL) { |
8423 HObjectAccess::ForJSArrayBufferWeakFirstView(); | 8421 Add<HStoreNamedField>( |
8424 Add<HStoreNamedField>(obj, | 8422 obj, |
8425 HObjectAccess::ForJSArrayBufferViewWeakNext(), | 8423 HObjectAccess::ForJSArrayBufferViewBuffer(), buffer); |
8426 Add<HLoadNamedField>(buffer, static_cast<HValue*>(NULL), | 8424 HObjectAccess weak_first_view_access = |
8427 weak_first_view_access)); | 8425 HObjectAccess::ForJSArrayBufferWeakFirstView(); |
8428 Add<HStoreNamedField>( | 8426 Add<HStoreNamedField>(obj, |
8429 buffer, weak_first_view_access, obj); | 8427 HObjectAccess::ForJSArrayBufferViewWeakNext(), |
8428 Add<HLoadNamedField>(buffer, | |
8429 static_cast<HValue*>(NULL), | |
8430 weak_first_view_access)); | |
8431 Add<HStoreNamedField>(buffer, weak_first_view_access, obj); | |
8432 } else { | |
8433 Add<HStoreNamedField>( | |
8434 obj, | |
8435 HObjectAccess::ForJSArrayBufferViewBuffer(), | |
8436 Add<HConstant>(static_cast<int32_t>(0))); | |
8437 Add<HStoreNamedField>(obj, | |
8438 HObjectAccess::ForJSArrayBufferViewWeakNext(), | |
8439 graph()->GetConstantUndefined()); | |
8440 } | |
8430 } | 8441 } |
8431 | 8442 |
8432 | 8443 |
8433 void HOptimizedGraphBuilder::VisitDataViewInitialize( | 8444 void HOptimizedGraphBuilder::VisitDataViewInitialize( |
8434 CallRuntime* expr) { | 8445 CallRuntime* expr) { |
8435 ZoneList<Expression*>* arguments = expr->arguments(); | 8446 ZoneList<Expression*>* arguments = expr->arguments(); |
8436 | 8447 |
8437 NoObservableSideEffectsScope scope(this); | 8448 NoObservableSideEffectsScope scope(this); |
8438 ASSERT(arguments->length()== 4); | 8449 ASSERT(arguments->length()== 4); |
8439 CHECK_ALIVE(VisitForValue(arguments->at(0))); | 8450 CHECK_ALIVE(VisitForValue(arguments->at(0))); |
8440 HValue* obj = Pop(); | 8451 HValue* obj = Pop(); |
8441 | 8452 |
8442 CHECK_ALIVE(VisitForValue(arguments->at(1))); | 8453 CHECK_ALIVE(VisitForValue(arguments->at(1))); |
8443 HValue* buffer = Pop(); | 8454 HValue* buffer = Pop(); |
8444 | 8455 |
8445 CHECK_ALIVE(VisitForValue(arguments->at(2))); | 8456 CHECK_ALIVE(VisitForValue(arguments->at(2))); |
8446 HValue* byte_offset = Pop(); | 8457 HValue* byte_offset = Pop(); |
8447 | 8458 |
8448 CHECK_ALIVE(VisitForValue(arguments->at(3))); | 8459 CHECK_ALIVE(VisitForValue(arguments->at(3))); |
8449 HValue* byte_length = Pop(); | 8460 HValue* byte_length = Pop(); |
8450 | 8461 |
8451 BuildArrayBufferViewInitialization<JSDataView>( | 8462 BuildArrayBufferViewInitialization<JSDataView>( |
8452 obj, buffer, byte_offset, byte_length); | 8463 obj, buffer, byte_offset, byte_length); |
8453 } | 8464 } |
8454 | 8465 |
8466 static Handle<Map> TypedArrayMap(Isolate* isolate, | |
mvstanton
2014/03/11 10:43:51
nit: add another space above this method.
Dmitry Lomov (no reviews)
2014/03/24 08:31:22
Done.
| |
8467 ExternalArrayType array_type, | |
8468 ElementsKind target_kind) { | |
8469 Handle<Context> native_context = isolate->native_context(); | |
8470 Handle<JSFunction> fun; | |
8471 switch (array_type) { | |
8472 #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \ | |
8473 case kExternal##Type##Array: \ | |
8474 fun = Handle<JSFunction>(native_context->type##_array_fun()); \ | |
8475 break; | |
8455 | 8476 |
8456 void HOptimizedGraphBuilder::VisitTypedArrayInitialize( | 8477 TYPED_ARRAYS(TYPED_ARRAY_CASE) |
8457 CallRuntime* expr) { | 8478 #undef TYPED_ARRAY_CASE |
8479 } | |
8480 Handle<Map> map(fun->initial_map()); | |
8481 return Map::AsElementsKind(map, target_kind); | |
8482 } | |
8483 | |
8484 | |
8485 void HOptimizedGraphBuilder::VisitTypedArrayInitialize(CallRuntime* expr) { | |
8458 ZoneList<Expression*>* arguments = expr->arguments(); | 8486 ZoneList<Expression*>* arguments = expr->arguments(); |
8459 | 8487 |
8460 NoObservableSideEffectsScope scope(this); | 8488 NoObservableSideEffectsScope scope(this); |
8461 static const int kObjectArg = 0; | 8489 static const int kObjectArg = 0; |
8462 static const int kArrayIdArg = 1; | 8490 static const int kArrayIdArg = 1; |
8463 static const int kBufferArg = 2; | 8491 static const int kBufferArg = 2; |
8464 static const int kByteOffsetArg = 3; | 8492 static const int kByteOffsetArg = 3; |
8465 static const int kByteLengthArg = 4; | 8493 static const int kByteLengthArg = 4; |
8466 static const int kArgsLength = 5; | 8494 static const int kArgsLength = 5; |
8467 ASSERT(arguments->length() == kArgsLength); | 8495 ASSERT(arguments->length() == kArgsLength); |
8468 | 8496 |
8469 | 8497 |
8470 CHECK_ALIVE(VisitForValue(arguments->at(kObjectArg))); | 8498 CHECK_ALIVE(VisitForValue(arguments->at(kObjectArg))); |
8471 HValue* obj = Pop(); | 8499 HValue* obj = Pop(); |
8472 | 8500 |
8473 ASSERT(arguments->at(kArrayIdArg)->node_type() == AstNode::kLiteral); | 8501 ASSERT(arguments->at(kArrayIdArg)->node_type() == AstNode::kLiteral); |
8474 Handle<Object> value = | 8502 Handle<Object> value = |
8475 static_cast<Literal*>(arguments->at(kArrayIdArg))->value(); | 8503 static_cast<Literal*>(arguments->at(kArrayIdArg))->value(); |
8476 ASSERT(value->IsSmi()); | 8504 ASSERT(value->IsSmi()); |
8477 int array_id = Smi::cast(*value)->value(); | 8505 int array_id = Smi::cast(*value)->value(); |
8478 | 8506 |
8479 CHECK_ALIVE(VisitForValue(arguments->at(kBufferArg))); | 8507 HValue* buffer; |
8480 HValue* buffer = Pop(); | 8508 if (!arguments->at(kBufferArg)->IsNullLiteral()) { |
8509 CHECK_ALIVE(VisitForValue(arguments->at(kBufferArg))); | |
8510 buffer = Pop(); | |
8511 } else { | |
8512 buffer = NULL; | |
8513 } | |
8481 | 8514 |
8482 HValue* byte_offset; | 8515 HValue* byte_offset; |
8483 bool is_zero_byte_offset; | 8516 bool is_zero_byte_offset; |
8484 | 8517 |
8485 if (arguments->at(kByteOffsetArg)->node_type() == AstNode::kLiteral | 8518 if (arguments->at(kByteOffsetArg)->node_type() == AstNode::kLiteral |
8486 && Smi::FromInt(0) == | 8519 && Smi::FromInt(0) == |
8487 *static_cast<Literal*>(arguments->at(kByteOffsetArg))->value()) { | 8520 *static_cast<Literal*>(arguments->at(kByteOffsetArg))->value()) { |
8488 byte_offset = Add<HConstant>(static_cast<int32_t>(0)); | 8521 byte_offset = Add<HConstant>(static_cast<int32_t>(0)); |
8489 is_zero_byte_offset = true; | 8522 is_zero_byte_offset = true; |
8490 } else { | 8523 } else { |
8491 CHECK_ALIVE(VisitForValue(arguments->at(kByteOffsetArg))); | 8524 CHECK_ALIVE(VisitForValue(arguments->at(kByteOffsetArg))); |
8492 byte_offset = Pop(); | 8525 byte_offset = Pop(); |
8493 is_zero_byte_offset = false; | 8526 is_zero_byte_offset = false; |
8527 ASSERT(buffer != NULL); | |
8494 } | 8528 } |
8495 | 8529 |
8496 CHECK_ALIVE(VisitForValue(arguments->at(kByteLengthArg))); | 8530 CHECK_ALIVE(VisitForValue(arguments->at(kByteLengthArg))); |
8497 HValue* byte_length = Pop(); | 8531 HValue* byte_length = Pop(); |
8498 | 8532 |
8499 IfBuilder byte_offset_smi(this); | 8533 IfBuilder byte_offset_smi(this); |
8500 | 8534 |
8501 if (!is_zero_byte_offset) { | 8535 if (!is_zero_byte_offset) { |
8502 byte_offset_smi.If<HIsSmiAndBranch>(byte_offset); | 8536 byte_offset_smi.If<HIsSmiAndBranch>(byte_offset); |
8503 byte_offset_smi.Then(); | 8537 byte_offset_smi.Then(); |
8504 } | 8538 } |
8505 | 8539 |
8540 ExternalArrayType array_type = | |
8541 kExternalInt8Array; // Bogus initialization. | |
8542 size_t element_size = 1; // Bogus initialization. | |
8543 ElementsKind external_elements_kind = // Bogus initialization. | |
8544 EXTERNAL_INT8_ELEMENTS; | |
8545 ElementsKind fixed_elements_kind = // Bogus initialization. | |
8546 INT8_ELEMENTS; | |
8547 Runtime::ArrayIdToTypeAndSize(array_id, | |
8548 &array_type, | |
8549 &external_elements_kind, | |
8550 &fixed_elements_kind, | |
8551 &element_size); | |
8552 | |
8553 | |
8506 { // byte_offset is Smi. | 8554 { // byte_offset is Smi. |
8507 BuildArrayBufferViewInitialization<JSTypedArray>( | 8555 BuildArrayBufferViewInitialization<JSTypedArray>( |
8508 obj, buffer, byte_offset, byte_length); | 8556 obj, buffer, byte_offset, byte_length); |
8509 | 8557 |
8510 ExternalArrayType array_type = kExternalInt8Array; // Bogus initialization. | |
8511 size_t element_size = 1; // Bogus initialization. | |
8512 Runtime::ArrayIdToTypeAndSize(array_id, &array_type, &element_size); | |
8513 | 8558 |
8514 HInstruction* length = AddUncasted<HDiv>(byte_length, | 8559 HInstruction* length = AddUncasted<HDiv>(byte_length, |
8515 Add<HConstant>(static_cast<int32_t>(element_size))); | 8560 Add<HConstant>(static_cast<int32_t>(element_size))); |
8516 | 8561 |
8517 Add<HStoreNamedField>(obj, | 8562 Add<HStoreNamedField>(obj, |
8518 HObjectAccess::ForJSTypedArrayLength(), | 8563 HObjectAccess::ForJSTypedArrayLength(), |
8519 length); | 8564 length); |
8520 | 8565 |
8521 Handle<Map> external_array_map( | 8566 HValue* elements; |
8522 isolate()->heap()->MapForExternalArrayType(array_type)); | 8567 if (buffer != NULL) { |
8568 Handle<Map> external_array_map( | |
8569 isolate()->heap()->MapForExternalArrayType(array_type)); | |
8570 elements = | |
8571 Add<HAllocate>( | |
8572 Add<HConstant>(ExternalArray::kAlignedSize), | |
8573 HType::JSArray(), | |
8574 NOT_TENURED, | |
8575 external_array_map->instance_type()); | |
8523 | 8576 |
8524 HValue* elements = | 8577 AddStoreMapConstant(elements, external_array_map); |
8525 Add<HAllocate>( | |
8526 Add<HConstant>(ExternalArray::kAlignedSize), | |
8527 HType::JSArray(), | |
8528 NOT_TENURED, | |
8529 external_array_map->instance_type()); | |
8530 | 8578 |
8531 AddStoreMapConstant(elements, external_array_map); | 8579 HValue* backing_store = Add<HLoadNamedField>( |
8580 buffer, static_cast<HValue*>(NULL), | |
8581 HObjectAccess::ForJSArrayBufferBackingStore()); | |
8532 | 8582 |
8533 HValue* backing_store = Add<HLoadNamedField>( | 8583 HValue* typed_array_start; |
8534 buffer, static_cast<HValue*>(NULL), | 8584 if (is_zero_byte_offset) { |
8535 HObjectAccess::ForJSArrayBufferBackingStore()); | 8585 typed_array_start = backing_store; |
8586 } else { | |
8587 HInstruction* external_pointer = | |
8588 AddUncasted<HAdd>(backing_store, byte_offset); | |
8589 // Arguments are checked prior to call to TypedArrayInitialize, | |
8590 // including byte_offset. | |
8591 external_pointer->ClearFlag(HValue::kCanOverflow); | |
8592 typed_array_start = external_pointer; | |
8593 } | |
8536 | 8594 |
8537 HValue* typed_array_start; | 8595 |
8538 if (is_zero_byte_offset) { | 8596 Add<HStoreNamedField>(elements, |
8539 typed_array_start = backing_store; | 8597 HObjectAccess::ForExternalArrayExternalPointer(), |
8598 typed_array_start); | |
8599 | |
8600 Handle<Map> obj_map = TypedArrayMap( | |
8601 isolate(), array_type, external_elements_kind); | |
8602 AddStoreMapConstant(obj, obj_map); | |
8603 Add<HStoreNamedField>(elements, | |
8604 HObjectAccess::ForFixedArrayLength(), | |
8605 length, INITIALIZING_STORE); | |
8540 } else { | 8606 } else { |
8541 HInstruction* external_pointer = | 8607 ASSERT(is_zero_byte_offset); |
8542 AddUncasted<HAdd>(backing_store, byte_offset); | 8608 |
8543 // Arguments are checked prior to call to TypedArrayInitialize, | 8609 STATIC_ASSERT( |
8544 // including byte_offset. | 8610 (FixedTypedArrayBase::kHeaderSize & kObjectAlignmentMask) == 0); |
8545 external_pointer->ClearFlag(HValue::kCanOverflow); | 8611 HValue* total_size; |
8546 typed_array_start = external_pointer; | 8612 |
mvstanton
2014/03/11 10:43:51
A short comment here to explain what you are doing
Dmitry Lomov (no reviews)
2014/03/24 08:31:22
Done.
| |
8613 if (element_size % kObjectAlignment != 0) { | |
8614 HConstant* header_size = Add<HConstant>(static_cast<int32_t>( | |
8615 FixedTypedArrayBase::kHeaderSize + kObjectAlignmentMask)); | |
8616 HValue* unaligned_size = AddUncasted<HAdd>(byte_length, header_size); | |
8617 unaligned_size->ClearFlag(HValue::kCanOverflow); | |
8618 total_size = AddUncasted<HBitwise>( | |
8619 Token::BIT_AND, unaligned_size, | |
8620 Add<HConstant>(static_cast<int32_t>(~kObjectAlignmentMask))); | |
8621 } else { | |
8622 total_size = AddUncasted<HAdd>(byte_length, | |
8623 Add<HConstant>(FixedTypedArrayBase::kHeaderSize)); | |
8624 total_size->ClearFlag(HValue::kCanOverflow); | |
8625 } | |
8626 | |
8627 Handle<Map> fixed_typed_array_map( | |
8628 isolate()->heap()->MapForFixedTypedArray(array_type)); | |
8629 elements = | |
8630 Add<HAllocate>(total_size, HType::JSArray(), | |
8631 NOT_TENURED, | |
8632 fixed_typed_array_map->instance_type()); | |
8633 AddStoreMapConstant(elements, fixed_typed_array_map); | |
8634 | |
8635 Add<HStoreNamedField>(elements, | |
8636 HObjectAccess::ForFixedArrayLength(), | |
8637 length, INITIALIZING_STORE); | |
8638 HValue* filler = Add<HConstant>(static_cast<int32_t>(0)); | |
8639 | |
8640 { | |
8641 LoopBuilder builder(this, context(), LoopBuilder::kPostIncrement); | |
8642 | |
8643 HValue* key = builder.BeginBody( | |
8644 Add<HConstant>(static_cast<int32_t>(0)), | |
8645 length, Token::LT); | |
8646 Add<HStoreKeyed>(elements, key, filler, fixed_elements_kind); | |
8647 | |
8648 builder.EndBody(); | |
8649 } | |
8547 } | 8650 } |
8548 | 8651 Add<HStoreNamedField>( |
8549 Add<HStoreNamedField>(elements, | 8652 elements, HObjectAccess::ForFixedArrayLength(), length, |
8550 HObjectAccess::ForExternalArrayExternalPointer(), | 8653 INITIALIZING_STORE); |
8551 typed_array_start); | |
8552 Add<HStoreNamedField>(elements, | |
8553 HObjectAccess::ForFixedArrayLength(), | |
8554 length); | |
8555 Add<HStoreNamedField>( | 8654 Add<HStoreNamedField>( |
8556 obj, HObjectAccess::ForElementsPointer(), elements); | 8655 obj, HObjectAccess::ForElementsPointer(), elements); |
8557 } | 8656 } |
8558 | 8657 |
8559 if (!is_zero_byte_offset) { | 8658 if (!is_zero_byte_offset) { |
8560 byte_offset_smi.Else(); | 8659 byte_offset_smi.Else(); |
8561 { // byte_offset is not Smi. | 8660 { // byte_offset is not Smi. |
8562 Push(obj); | 8661 Push(obj); |
8563 CHECK_ALIVE(VisitForValue(arguments->at(kArrayIdArg))); | 8662 CHECK_ALIVE(VisitForValue(arguments->at(kArrayIdArg))); |
8564 Push(buffer); | 8663 Push(buffer); |
(...skipping 25 matching lines...) Expand all Loading... | |
8590 if (function->function_id == Runtime::kTypedArrayInitialize) { | 8689 if (function->function_id == Runtime::kTypedArrayInitialize) { |
8591 return VisitTypedArrayInitialize(expr); | 8690 return VisitTypedArrayInitialize(expr); |
8592 } | 8691 } |
8593 | 8692 |
8594 if (function->function_id == Runtime::kMaxSmi) { | 8693 if (function->function_id == Runtime::kMaxSmi) { |
8595 ASSERT(expr->arguments()->length() == 0); | 8694 ASSERT(expr->arguments()->length() == 0); |
8596 HConstant* max_smi = New<HConstant>(static_cast<int32_t>(Smi::kMaxValue)); | 8695 HConstant* max_smi = New<HConstant>(static_cast<int32_t>(Smi::kMaxValue)); |
8597 return ast_context()->ReturnInstruction(max_smi, expr->id()); | 8696 return ast_context()->ReturnInstruction(max_smi, expr->id()); |
8598 } | 8697 } |
8599 | 8698 |
8699 | |
8700 if (function->function_id == Runtime::kTypedArrayMaxSizeInHeap) { | |
8701 ASSERT(expr->arguments()->length() == 0); | |
8702 HConstant* value = New<HConstant>( | |
8703 static_cast<int32_t>(FLAG_typed_array_max_size_in_heap)); | |
8704 return ast_context()->ReturnInstruction(value, expr->id()); | |
8705 } | |
8706 | |
8600 if (function->intrinsic_type == Runtime::INLINE) { | 8707 if (function->intrinsic_type == Runtime::INLINE) { |
8601 ASSERT(expr->name()->length() > 0); | 8708 ASSERT(expr->name()->length() > 0); |
8602 ASSERT(expr->name()->Get(0) == '_'); | 8709 ASSERT(expr->name()->Get(0) == '_'); |
8603 // Call to an inline function. | 8710 // Call to an inline function. |
8604 int lookup_index = static_cast<int>(function->function_id) - | 8711 int lookup_index = static_cast<int>(function->function_id) - |
8605 static_cast<int>(Runtime::kFirstInlineFunction); | 8712 static_cast<int>(Runtime::kFirstInlineFunction); |
8606 ASSERT(lookup_index >= 0); | 8713 ASSERT(lookup_index >= 0); |
8607 ASSERT(static_cast<size_t>(lookup_index) < | 8714 ASSERT(static_cast<size_t>(lookup_index) < |
8608 ARRAY_SIZE(kInlineFunctionGenerators)); | 8715 ARRAY_SIZE(kInlineFunctionGenerators)); |
8609 InlineFunctionGenerator generator = kInlineFunctionGenerators[lookup_index]; | 8716 InlineFunctionGenerator generator = kInlineFunctionGenerators[lookup_index]; |
(...skipping 2692 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
11302 if (ShouldProduceTraceOutput()) { | 11409 if (ShouldProduceTraceOutput()) { |
11303 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); | 11410 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); |
11304 } | 11411 } |
11305 | 11412 |
11306 #ifdef DEBUG | 11413 #ifdef DEBUG |
11307 graph_->Verify(false); // No full verify. | 11414 graph_->Verify(false); // No full verify. |
11308 #endif | 11415 #endif |
11309 } | 11416 } |
11310 | 11417 |
11311 } } // namespace v8::internal | 11418 } } // namespace v8::internal |
OLD | NEW |