58 #if V8_TARGET_ARCH_IA32
60 #elif V8_TARGET_ARCH_X64
62 #elif V8_TARGET_ARCH_ARM
64 #elif V8_TARGET_ARCH_MIPS
67 #error "Unknown architecture."
71 #ifndef V8_INTERPRETED_REGEXP
72 #if V8_TARGET_ARCH_IA32
74 #elif V8_TARGET_ARCH_X64
76 #elif V8_TARGET_ARCH_ARM
78 #elif V8_TARGET_ARCH_MIPS
80 #else // Unknown architecture.
81 #error "Unknown architecture."
82 #endif // Target architecture.
83 #endif // V8_INTERPRETED_REGEXP
102 static DoubleConstant double_constants;
104 const char*
const RelocInfo::kFillerCommentString =
"DEOPTIMIZATION PADDING";
112 if (FLAG_mask_constants_with_cookie && isolate !=
NULL) {
121 int Label::pos()
const {
122 if (pos_ < 0)
return -pos_ - 1;
123 if (pos_ > 0)
return pos_ - 1;
237 uint32_t RelocInfoWriter::WriteVariableLengthPCJump(uint32_t pc_delta) {
246 for (; pc_jump > 0; pc_jump = pc_jump >>
kChunkBits) {
257 void RelocInfoWriter::WriteTaggedPC(uint32_t pc_delta,
int tag) {
259 pc_delta = WriteVariableLengthPCJump(pc_delta);
260 *--pos_ = pc_delta <<
kTagBits | tag;
264 void RelocInfoWriter::WriteTaggedData(intptr_t data_delta,
int tag) {
269 void RelocInfoWriter::WriteExtraTag(
int extra_tag,
int top_tag) {
276 void RelocInfoWriter::WriteExtraTaggedPC(uint32_t pc_delta,
int extra_tag) {
278 pc_delta = WriteVariableLengthPCJump(pc_delta);
279 WriteExtraTag(extra_tag, 0);
284 void RelocInfoWriter::WriteExtraTaggedIntData(
int data_delta,
int top_tag) {
286 for (
int i = 0; i <
kIntSize; i++) {
287 *--pos_ =
static_cast<byte>(data_delta);
293 void RelocInfoWriter::WriteExtraTaggedConstPoolData(
int data) {
295 for (
int i = 0; i <
kIntSize; i++) {
296 *--pos_ =
static_cast<byte>(data);
302 void RelocInfoWriter::WriteExtraTaggedData(intptr_t data_delta,
int top_tag) {
305 *--pos_ =
static_cast<byte>(data_delta);
312 void RelocInfoWriter::Write(
const RelocInfo* rinfo) {
314 byte* begin_pos = pos_;
316 ASSERT(rinfo->pc() - last_pc_ >= 0);
317 ASSERT(RelocInfo::LAST_STANDARD_NONCOMPACT_ENUM - RelocInfo::LAST_COMPACT_ENUM
320 uint32_t pc_delta =
static_cast<uint32_t
>(rinfo->pc() - last_pc_);
321 RelocInfo::Mode rmode = rinfo->rmode();
324 if (rmode == RelocInfo::EMBEDDED_OBJECT) {
326 }
else if (rmode == RelocInfo::CODE_TARGET) {
328 ASSERT(begin_pos - pos_ <= RelocInfo::kMaxCallSize);
329 }
else if (rmode == RelocInfo::CODE_TARGET_WITH_ID) {
331 ASSERT(static_cast<int>(rinfo->data()) == rinfo->data());
332 int id_delta =
static_cast<int>(rinfo->data()) - last_id_;
342 last_id_ =
static_cast<int>(rinfo->data());
343 }
else if (RelocInfo::IsPosition(rmode)) {
345 ASSERT(static_cast<int>(rinfo->data()) == rinfo->data());
346 int pos_delta =
static_cast<int>(rinfo->data()) - last_position_;
352 WriteTaggedData(pos_delta, pos_type_tag);
356 WriteExtraTaggedIntData(pos_delta, pos_type_tag);
358 last_position_ =
static_cast<int>(rinfo->data());
359 }
else if (RelocInfo::IsComment(rmode)) {
363 ASSERT(begin_pos - pos_ >= RelocInfo::kMinRelocCommentSize);
364 }
else if (RelocInfo::IsConstPool(rmode)) {
366 WriteExtraTaggedConstPoolData(static_cast<int>(rinfo->data()));
368 ASSERT(rmode > RelocInfo::LAST_COMPACT_ENUM);
369 int saved_mode = rmode - RelocInfo::LAST_COMPACT_ENUM;
373 WriteExtraTaggedPC(pc_delta, saved_mode);
375 last_pc_ = rinfo->pc();
377 ASSERT(begin_pos - pos_ <= kMaxSize);
382 inline int RelocIterator::AdvanceGetTag() {
387 inline int RelocIterator::GetExtraTag() {
392 inline int RelocIterator::GetTopTag() {
397 inline void RelocIterator::ReadTaggedPC() {
402 inline void RelocIterator::AdvanceReadPC() {
403 rinfo_.pc_ += *--pos_;
407 void RelocIterator::AdvanceReadId() {
409 for (
int i = 0; i <
kIntSize; i++) {
413 rinfo_.data_ = last_id_;
417 void RelocIterator::AdvanceReadConstPoolData() {
419 for (
int i = 0; i <
kIntSize; i++) {
426 void RelocIterator::AdvanceReadPosition() {
428 for (
int i = 0; i <
kIntSize; i++) {
432 rinfo_.data_ = last_position_;
436 void RelocIterator::AdvanceReadData() {
439 x |=
static_cast<intptr_t
>(*--pos_) << i *
kBitsPerByte;
445 void RelocIterator::AdvanceReadVariableLengthPCJump() {
449 uint32_t pc_jump = 0;
450 for (
int i = 0; i <
kIntSize; i++) {
451 byte pc_jump_part = *--pos_;
461 inline int RelocIterator::GetLocatableTypeTag() {
466 inline void RelocIterator::ReadTaggedId() {
467 int8_t signed_b = *pos_;
470 rinfo_.data_ = last_id_;
474 inline void RelocIterator::ReadTaggedPosition() {
475 int8_t signed_b = *pos_;
478 rinfo_.data_ = last_position_;
482 static inline RelocInfo::Mode GetPositionModeFromTag(
int tag) {
486 RelocInfo::POSITION :
487 RelocInfo::STATEMENT_POSITION;
498 while (pos_ > end_) {
499 int tag = AdvanceGetTag();
502 if (SetMode(RelocInfo::EMBEDDED_OBJECT))
return;
505 if (SetMode(RelocInfo::CODE_TARGET))
return;
509 int locatable_tag = GetLocatableTypeTag();
511 if (SetMode(RelocInfo::CODE_TARGET_WITH_ID)) {
520 if (mode_mask_ & RelocInfo::kPositionMask) {
521 ReadTaggedPosition();
522 if (SetMode(GetPositionModeFromTag(locatable_tag)))
return;
527 int extra_tag = GetExtraTag();
530 AdvanceReadVariableLengthPCJump();
535 int locatable_tag = GetTopTag();
537 if (SetMode(RelocInfo::CODE_TARGET_WITH_ID)) {
545 if (mode_mask_ & RelocInfo::kPositionMask) {
546 AdvanceReadPosition();
547 if (SetMode(GetPositionModeFromTag(locatable_tag)))
return;
553 if (SetMode(RelocInfo::COMMENT)) {
561 if (SetMode(RelocInfo::CONST_POOL)) {
562 AdvanceReadConstPoolData();
568 int rmode = extra_tag + RelocInfo::LAST_COMPACT_ENUM;
569 if (SetMode(static_cast<RelocInfo::Mode>(rmode)))
return;
585 mode_mask_ = mode_mask;
588 if (mode_mask_ == 0) pos_ = end_;
600 mode_mask_ = mode_mask;
603 if (mode_mask_ == 0) pos_ = end_;
612 #ifdef ENABLE_DISASSEMBLER
613 const char* RelocInfo::RelocModeName(RelocInfo::Mode rmode) {
617 case RelocInfo::EMBEDDED_OBJECT:
618 return "embedded object";
619 case RelocInfo::CONSTRUCT_CALL:
620 return "code target (js construct call)";
621 case RelocInfo::CODE_TARGET_CONTEXT:
622 return "code target (context)";
624 #ifndef ENABLE_DEBUGGER_SUPPORT
627 return "debug break";
628 case RelocInfo::CODE_TARGET:
629 return "code target";
630 case RelocInfo::CODE_TARGET_WITH_ID:
631 return "code target with id";
632 case RelocInfo::GLOBAL_PROPERTY_CELL:
633 return "global property cell";
635 return "runtime entry";
636 case RelocInfo::JS_RETURN:
638 case RelocInfo::COMMENT:
640 case RelocInfo::POSITION:
642 case RelocInfo::STATEMENT_POSITION:
643 return "statement position";
644 case RelocInfo::EXTERNAL_REFERENCE:
645 return "external reference";
646 case RelocInfo::INTERNAL_REFERENCE:
647 return "internal reference";
648 case RelocInfo::CONST_POOL:
649 return "constant pool";
650 case RelocInfo::DEBUG_BREAK_SLOT:
651 #ifndef ENABLE_DEBUGGER_SUPPORT
654 return "debug break slot";
655 case RelocInfo::NUMBER_OF_MODES:
657 return "number_of_modes";
659 return "unknown relocation type";
664 PrintF(out,
"%p %s", pc_, RelocModeName(rmode_));
665 if (IsComment(rmode_)) {
666 PrintF(out,
" (%s)", reinterpret_cast<char*>(data_));
667 }
else if (rmode_ == EMBEDDED_OBJECT) {
669 target_object()->ShortPrint(out);
671 }
else if (rmode_ == EXTERNAL_REFERENCE) {
672 ExternalReferenceEncoder ref_encoder;
674 ref_encoder.NameOfAddress(*target_reference_address()),
675 *target_reference_address());
676 }
else if (IsCodeTarget(rmode_)) {
678 PrintF(out,
" (%s) (%p)", Code::Kind2String(code->kind()),
680 if (rmode_ == CODE_TARGET_WITH_ID) {
681 PrintF(
" (id=%d)", static_cast<int>(data_));
683 }
else if (IsPosition(rmode_)) {
686 Isolate::Current()->deoptimizer_data() !=
NULL) {
691 PrintF(out,
" (deoptimization bailout %d)",
id);
697 #endif // ENABLE_DISASSEMBLER
701 void RelocInfo::Verify() {
703 case EMBEDDED_OBJECT:
704 Object::VerifyPointer(target_object());
706 case GLOBAL_PROPERTY_CELL:
707 Object::VerifyPointer(target_cell());
710 #ifndef ENABLE_DEBUGGER_SUPPORT
715 case CODE_TARGET_CONTEXT:
716 case CODE_TARGET_WITH_ID:
719 Address addr = target_address();
724 CHECK(found->IsCode());
732 case STATEMENT_POSITION:
733 case EXTERNAL_REFERENCE:
734 case INTERNAL_REFERENCE:
736 case DEBUG_BREAK_SLOT:
739 case NUMBER_OF_MODES:
744 #endif // VERIFY_HEAP
750 void ExternalReference::SetUp() {
751 double_constants.min_int =
kMinInt;
752 double_constants.one_half = 0.5;
753 double_constants.minus_zero = -0.0;
754 double_constants.uint8_max_value = 255;
755 double_constants.zero = 0.0;
757 double_constants.the_hole_nan = BitCast<double>(
kHoleNanInt64);
763 : address_(Redirect(isolate, Builtins::c_function_address(id))) {}
766 ExternalReference::ExternalReference(
768 Type type = ExternalReference::BUILTIN_CALL,
769 Isolate* isolate =
NULL)
770 : address_(Redirect(isolate, fun->address(), type)) {}
773 ExternalReference::ExternalReference(
Builtins::Name name, Isolate* isolate)
774 : address_(isolate->builtins()->builtin_address(name)) {}
779 : address_(Redirect(isolate, Runtime::FunctionForId(id)->entry)) {}
782 ExternalReference::ExternalReference(
const Runtime::Function* f,
784 : address_(Redirect(isolate, f->entry)) {}
787 ExternalReference ExternalReference::isolate_address() {
788 return ExternalReference(Isolate::Current());
792 ExternalReference::ExternalReference(
const IC_Utility& ic_utility,
794 : address_(Redirect(isolate, ic_utility.address())) {}
796 #ifdef ENABLE_DEBUGGER_SUPPORT
797 ExternalReference::ExternalReference(
const Debug_Address& debug_address,
799 : address_(debug_address.address(isolate)) {}
802 ExternalReference::ExternalReference(StatsCounter* counter)
803 : address_(reinterpret_cast<
Address>(counter->GetInternalPointer())) {}
807 : address_(isolate->get_address_from_id(id)) {}
810 ExternalReference::ExternalReference(
const SCTableReference& table_ref)
811 : address_(table_ref.address()) {}
814 ExternalReference ExternalReference::
815 incremental_marking_record_write_function(Isolate* isolate) {
816 return ExternalReference(Redirect(
822 ExternalReference ExternalReference::
823 incremental_evacuation_record_write_function(Isolate* isolate) {
824 return ExternalReference(Redirect(
830 ExternalReference ExternalReference::
831 store_buffer_overflow_function(Isolate* isolate) {
832 return ExternalReference(Redirect(
838 ExternalReference ExternalReference::flush_icache_function(Isolate* isolate) {
843 ExternalReference ExternalReference::perform_gc_function(Isolate* isolate) {
849 ExternalReference ExternalReference::fill_heap_number_with_random_function(
851 return ExternalReference(Redirect(
857 ExternalReference ExternalReference::delete_handle_scope_extensions(
859 return ExternalReference(Redirect(
865 ExternalReference ExternalReference::random_uint32_function(
871 ExternalReference ExternalReference::get_date_field_function(
877 ExternalReference ExternalReference::date_cache_stamp(Isolate* isolate) {
878 return ExternalReference(isolate->date_cache()->stamp_address());
882 ExternalReference ExternalReference::transcendental_cache_array_address(
884 return ExternalReference(
885 isolate->transcendental_cache()->cache_array_address());
889 ExternalReference ExternalReference::new_deoptimizer_function(
891 return ExternalReference(
896 ExternalReference ExternalReference::compute_output_frames_function(
898 return ExternalReference(
903 ExternalReference ExternalReference::keyed_lookup_cache_keys(Isolate* isolate) {
904 return ExternalReference(isolate->keyed_lookup_cache()->keys_address());
908 ExternalReference ExternalReference::keyed_lookup_cache_field_offsets(
910 return ExternalReference(
911 isolate->keyed_lookup_cache()->field_offsets_address());
915 ExternalReference ExternalReference::roots_array_start(Isolate* isolate) {
916 return ExternalReference(isolate->heap()->roots_array_start());
920 ExternalReference ExternalReference::address_of_stack_limit(Isolate* isolate) {
921 return ExternalReference(isolate->stack_guard()->address_of_jslimit());
925 ExternalReference ExternalReference::address_of_real_stack_limit(
927 return ExternalReference(isolate->stack_guard()->address_of_real_jslimit());
931 ExternalReference ExternalReference::address_of_regexp_stack_limit(
933 return ExternalReference(isolate->regexp_stack()->limit_address());
937 ExternalReference ExternalReference::new_space_start(Isolate* isolate) {
938 return ExternalReference(isolate->heap()->NewSpaceStart());
942 ExternalReference ExternalReference::store_buffer_top(Isolate* isolate) {
943 return ExternalReference(isolate->heap()->store_buffer()->TopAddress());
947 ExternalReference ExternalReference::new_space_mask(Isolate* isolate) {
948 return ExternalReference(reinterpret_cast<Address>(
949 isolate->heap()->NewSpaceMask()));
953 ExternalReference ExternalReference::new_space_allocation_top_address(
955 return ExternalReference(isolate->heap()->NewSpaceAllocationTopAddress());
959 ExternalReference ExternalReference::heap_always_allocate_scope_depth(
961 Heap* heap = isolate->heap();
962 return ExternalReference(heap->always_allocate_scope_depth_address());
966 ExternalReference ExternalReference::new_space_allocation_limit_address(
968 return ExternalReference(isolate->heap()->NewSpaceAllocationLimitAddress());
972 ExternalReference ExternalReference::handle_scope_level_address() {
977 ExternalReference ExternalReference::handle_scope_next_address() {
982 ExternalReference ExternalReference::handle_scope_limit_address() {
987 ExternalReference ExternalReference::scheduled_exception_address(
989 return ExternalReference(isolate->scheduled_exception_address());
993 ExternalReference ExternalReference::address_of_pending_message_obj(
995 return ExternalReference(isolate->pending_message_obj_address());
999 ExternalReference ExternalReference::address_of_has_pending_message(
1001 return ExternalReference(isolate->has_pending_message_address());
1005 ExternalReference ExternalReference::address_of_pending_message_script(
1007 return ExternalReference(isolate->pending_message_script_address());
1011 ExternalReference ExternalReference::address_of_min_int() {
1012 return ExternalReference(reinterpret_cast<void*>(&double_constants.min_int));
1016 ExternalReference ExternalReference::address_of_one_half() {
1017 return ExternalReference(reinterpret_cast<void*>(&double_constants.one_half));
1021 ExternalReference ExternalReference::address_of_minus_zero() {
1022 return ExternalReference(
1023 reinterpret_cast<void*>(&double_constants.minus_zero));
1027 ExternalReference ExternalReference::address_of_zero() {
1028 return ExternalReference(reinterpret_cast<void*>(&double_constants.zero));
1032 ExternalReference ExternalReference::address_of_uint8_max_value() {
1033 return ExternalReference(
1034 reinterpret_cast<void*>(&double_constants.uint8_max_value));
1038 ExternalReference ExternalReference::address_of_negative_infinity() {
1039 return ExternalReference(
1040 reinterpret_cast<void*>(&double_constants.negative_infinity));
1044 ExternalReference ExternalReference::address_of_canonical_non_hole_nan() {
1045 return ExternalReference(
1046 reinterpret_cast<void*>(&double_constants.canonical_non_hole_nan));
1050 ExternalReference ExternalReference::address_of_the_hole_nan() {
1051 return ExternalReference(
1052 reinterpret_cast<void*>(&double_constants.the_hole_nan));
1056 #ifndef V8_INTERPRETED_REGEXP
1058 ExternalReference ExternalReference::re_check_stack_guard_state(
1061 #ifdef V8_TARGET_ARCH_X64
1063 #elif V8_TARGET_ARCH_IA32
1065 #elif V8_TARGET_ARCH_ARM
1067 #elif V8_TARGET_ARCH_MIPS
1072 return ExternalReference(Redirect(isolate,
function));
1075 ExternalReference ExternalReference::re_grow_stack(Isolate* isolate) {
1076 return ExternalReference(
1080 ExternalReference ExternalReference::re_case_insensitive_compare_uc16(
1082 return ExternalReference(Redirect(
1087 ExternalReference ExternalReference::re_word_character_map() {
1088 return ExternalReference(
1092 ExternalReference ExternalReference::address_of_static_offsets_vector(
1094 return ExternalReference(
1095 reinterpret_cast<Address>(isolate->jsregexp_static_offsets_vector()));
1098 ExternalReference ExternalReference::address_of_regexp_stack_memory_address(
1100 return ExternalReference(
1101 isolate->regexp_stack()->memory_address());
1104 ExternalReference ExternalReference::address_of_regexp_stack_memory_size(
1106 return ExternalReference(isolate->regexp_stack()->memory_size_address());
1109 #endif // V8_INTERPRETED_REGEXP
1112 static double add_two_doubles(
double x,
double y) {
1117 static double sub_two_doubles(
double x,
double y) {
1122 static double mul_two_doubles(
double x,
double y) {
1127 static double div_two_doubles(
double x,
double y) {
1132 static double mod_two_doubles(
double x,
double y) {
1137 static double math_sin_double(
double x) {
1142 static double math_cos_double(
double x) {
1147 static double math_tan_double(
double x) {
1152 static double math_log_double(
double x) {
1157 ExternalReference ExternalReference::math_sin_double_function(
1159 return ExternalReference(Redirect(isolate,
1165 ExternalReference ExternalReference::math_cos_double_function(
1167 return ExternalReference(Redirect(isolate,
1173 ExternalReference ExternalReference::math_tan_double_function(
1175 return ExternalReference(Redirect(isolate,
1181 ExternalReference ExternalReference::math_log_double_function(
1183 return ExternalReference(Redirect(isolate,
1189 ExternalReference ExternalReference::page_flags(Page* page) {
1190 return ExternalReference(reinterpret_cast<Address>(page) +
1200 double m = (y < 0) ? 1 / x : x;
1201 unsigned n = (y < 0) ? -y : y;
1204 if ((n & 1) != 0) p *= m;
1206 if ((n & 2) != 0) p *= m;
1215 #ifdef __MINGW64_VERSION_MAJOR
1220 if (modf(y, &f) != 0.0)
return ((x == 0.0) ^ (y > 0)) ?
V8_INFINITY : 0;
1224 int y_int =
static_cast<int>(y);
1225 if (y == y_int)
return ldexp(1.0, y_int);
1236 ExternalReference ExternalReference::power_double_double_function(
1238 return ExternalReference(Redirect(isolate,
1240 BUILTIN_FP_FP_CALL));
1244 ExternalReference ExternalReference::power_double_int_function(
1246 return ExternalReference(Redirect(isolate,
1248 BUILTIN_FP_INT_CALL));
1252 static int native_compare_doubles(
double y,
double x) {
1253 if (x == y)
return EQUAL;
1262 case Token::EQ_STRICT:
return (op1 == op2);
1263 case Token::NE:
return (op1 != op2);
1264 case Token::LT:
return (op1 < op2);
1265 case Token::GT:
return (op1 > op2);
1266 case Token::LTE:
return (op1 <= op2);
1267 case Token::GTE:
return (op1 >= op2);
1275 ExternalReference ExternalReference::double_fp_operation(
1277 typedef double BinaryFPOperation(
double x,
double y);
1278 BinaryFPOperation*
function =
NULL;
1279 switch (operation) {
1281 function = &add_two_doubles;
1284 function = &sub_two_doubles;
1287 function = &mul_two_doubles;
1290 function = &div_two_doubles;
1293 function = &mod_two_doubles;
1298 return ExternalReference(Redirect(isolate,
1300 BUILTIN_FP_FP_CALL));
1304 ExternalReference ExternalReference::compare_doubles(Isolate* isolate) {
1305 return ExternalReference(Redirect(isolate,
1307 BUILTIN_COMPARE_CALL));
1311 #ifdef ENABLE_DEBUGGER_SUPPORT
1312 ExternalReference ExternalReference::debug_break(Isolate* isolate) {
1313 return ExternalReference(Redirect(isolate,
FUNCTION_ADDR(Debug_Break)));
1317 ExternalReference ExternalReference::debug_step_in_fp_address(
1319 return ExternalReference(isolate->debug()->step_in_fp_addr());
1324 void PositionsRecorder::RecordPosition(
int pos) {
1325 ASSERT(pos != RelocInfo::kNoPosition);
1327 state_.current_position = pos;
1328 #ifdef ENABLE_GDB_JIT_INTERFACE
1329 if (gdbjit_lineinfo_ !=
NULL) {
1330 gdbjit_lineinfo_->SetPosition(assembler_->pc_offset(), pos,
false);
1336 void PositionsRecorder::RecordStatementPosition(
int pos) {
1337 ASSERT(pos != RelocInfo::kNoPosition);
1339 state_.current_statement_position = pos;
1340 #ifdef ENABLE_GDB_JIT_INTERFACE
1341 if (gdbjit_lineinfo_ !=
NULL) {
1342 gdbjit_lineinfo_->SetPosition(assembler_->pc_offset(), pos,
true);
1348 bool PositionsRecorder::WriteRecordedPositions() {
1349 bool written =
false;
1353 if (state_.current_statement_position != state_.written_statement_position) {
1354 EnsureSpace ensure_space(assembler_);
1355 assembler_->RecordRelocInfo(RelocInfo::STATEMENT_POSITION,
1356 state_.current_statement_position);
1357 state_.written_statement_position = state_.current_statement_position;
1363 if (state_.current_position != state_.written_position &&
1364 state_.current_position != state_.written_statement_position) {
1365 EnsureSpace ensure_space(assembler_);
1366 assembler_->RecordRelocInfo(RelocInfo::POSITION, state_.current_position);
1367 state_.written_position = state_.current_position;
const int kConstPoolExtraTag
RelocIterator(Code *code, int mode_mask=-1)
const int kPCJumpExtraTag
static Address current_level_address()
const int kLastChunkTagBits
bool is_intn(int x, int n)
void PrintF(const char *format,...)
const int kNonstatementPositionTag
static void PerformGC(Object *result)
static void ComputeOutputFrames(Deoptimizer *deoptimizer)
static HeapObject * cast(Object *obj)
static bool IsCompareOp(Value op)
static Object * FillHeapNumberWithRandom(Object *heap_number, Context *context)
static void RecordWriteForEvacuationFromCode(HeapObject *obj, Object **slot, Isolate *isolate)
static Address current_next_address()
#define ASSERT(condition)
v8::Handle< v8::Value > Print(const v8::Arguments &args)
static void StoreBufferOverflow(Isolate *isolate)
static const int kFlagsOffset
static void RecordWriteFromCode(HeapObject *obj, Object *value, Isolate *isolate)
const int kLocatableTypeTagBits
static Address current_limit_address()
const int kStatementPositionTag
const uint64_t kHoleNanInt64
static int CheckStackGuardState(Address *return_address, Code *re_code, Address re_frame)
const int kSmallPCDeltaBits
byte * instruction_start()
static int CaseInsensitiveCompareUC16(Address byte_offset1, Address byte_offset2, size_t byte_length, Isolate *isolate)
double power_double_double(double x, double y)
double modulo(double x, double y)
static Code * GetCodeFromTargetAddress(Address address)
double power_double_int(double x, int y)
byte * relocation_start()
double canonical_non_hole_nan
static Object * GetField(Object *date, Smi *index)
const int kMaxStandardNonCompactModes
static int CheckStackGuardState(Address *return_address, Code *re_code, Address re_frame)
static Address word_character_map_address()
AssemblerBase(Isolate *isolate)
const int kDataJumpExtraTag
static int CheckStackGuardState(Address *return_address, Code *re_code, Address re_frame)
static double nan_value()
const int kSmallPCDeltaMask
static uint32_t RandomPrivate(Isolate *isolate)
static const int kNotDeoptimizationEntry
static Address GrowStack(Address stack_pointer, Address *stack_top, Isolate *isolate)
const int kLastChunkTagMask
activate correct semantics for inheriting readonliness enable harmony semantics for typeof enable harmony enable harmony proxies enable all harmony harmony_scoping harmony_proxies harmony_scoping tracks arrays with only smi values automatically unbox arrays of doubles use crankshaft use hydrogen range analysis use hydrogen global value numbering use function inlining maximum number of AST nodes considered for a single inlining loop invariant code motion print statistics for hydrogen trace generated IR for specified phases trace register allocator trace range analysis trace representation types environment for every instruction put a break point before deoptimizing polymorphic inlining perform array bounds checks elimination use dead code elimination trace on stack replacement optimize closures cache optimized code for closures functions with arguments object loop weight for representation inference allow uint32 values on optimize frames if they are used only in safe operations track parallel recompilation enable all profiler experiments number of stack frames inspected by the profiler call recompile stub directly when self optimizing trigger profiler ticks based on counting instead of timing weight back edges by jump distance for interrupt triggering percentage of ICs that must have type info to allow optimization watch_ic_patching retry_self_opt interrupt_at_exit extra verbose compilation tracing generate extra emit comments in code disassembly enable use of SSE3 instructions if available enable use of CMOV instruction if available enable use of SAHF instruction if enable use of VFP3 instructions if available this implies enabling ARMv7 and VFP2 enable use of VFP2 instructions if available enable use of SDIV and UDIV instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of MIPS FPU instructions if NULL
#define RUNTIME_ENTRY(name, nargs, ressize)
activate correct semantics for inheriting readonliness enable harmony semantics for typeof enable harmony enable harmony proxies enable all harmony harmony_scoping harmony_proxies harmony_scoping tracks arrays with only smi values automatically unbox arrays of doubles use crankshaft use hydrogen range analysis use hydrogen global value numbering use function inlining maximum number of AST nodes considered for a single inlining loop invariant code motion print statistics for hydrogen trace generated IR for specified phases trace register allocator trace range analysis trace representation types environment for every instruction put a break point before deoptimizing polymorphic inlining perform array bounds checks elimination use dead code elimination trace on stack replacement optimize closures cache optimized code for closures functions with arguments object loop weight for representation inference allow uint32 values on optimize frames if they are used only in safe operations track parallel recompilation enable all profiler experiments number of stack frames inspected by the profiler call recompile stub directly when self optimizing trigger profiler ticks based on counting instead of timing weight back edges by jump distance for interrupt triggering percentage of ICs that must have type info to allow optimization watch_ic_patching retry_self_opt interrupt_at_exit extra verbose compilation tracing generate extra code(assertions) for debugging") DEFINE_bool(code_comments
static void FlushICache(void *start, size_t size)
static int GetDeoptimizationId(Address addr, BailoutType type)
static int CheckStackGuardState(Address *return_address, Code *re_code, Address re_frame)
bool EvalComparison(Token::Value op, double op1, double op2)
bool is_uintn(int x, int n)
static void DeleteExtensions(Isolate *isolate)
static Deoptimizer * New(JSFunction *function, BailoutType type, unsigned bailout_id, Address from, int fp_to_sp_delta, Isolate *isolate)
const int kEmbeddedObjectTag
const int kVariableLengthPCJumpTopTag
static uint32_t Random(Context *context)