5 #ifndef V8_X64_LITHIUM_CODEGEN_X64_H_
6 #define V8_X64_LITHIUM_CODEGEN_X64_H_
23 class SafepointGenerator;
45 return chunk()->LookupDestination(block_id);
54 info()->is_non_deferred_calling() ||
56 info()->requires_frame();
116 #define DECLARE_DO(type) void Do##type(L##type* node);
123 LPlatformChunk*
chunk()
const {
return chunk_; }
199 int formal_parameter_count,
208 Safepoint::DeoptMode
mode);
214 return FLAG_deopt_every_n_times != 0 && !info()->IsStub();
218 Translation* translation,
222 int* object_index_pointer,
223 int* dematerialized_index_pointer);
247 Safepoint::Kind kind,
249 Safepoint::DeoptMode
mode);
254 Safepoint::DeoptMode
mode);
261 template<
class InstrType>
263 template<
class InstrType>
277 Label* is_not_object,
285 Label* is_not_string,
320 void MakeSureStackPagesMapped(
int offset);
345 : codegen_(codegen) {
346 DCHECK(codegen_->info()->is_calling());
347 DCHECK(codegen_->expected_safepoint_kind_ == Safepoint::kSimple);
348 codegen_->masm_->PushSafepointRegisters();
349 codegen_->expected_safepoint_kind_ = Safepoint::kWithRegisters;
353 DCHECK(codegen_->expected_safepoint_kind_ == Safepoint::kWithRegisters);
354 codegen_->masm_->PopSafepointRegisters();
355 codegen_->expected_safepoint_kind_ = Safepoint::kSimple;
Source to read snapshot and builtins files from.
~PushSafepointRegistersScope()
PushSafepointRegistersScope(LCodeGen *codegen)
bool IsNextEmittedBlock(int block_id) const
Condition EmitTypeofIs(LTypeofIsAndBranch *instr, Register input)
Register ToRegister(int index) const
void RestoreCallerDoubles()
void DoStoreKeyedFixedArray(LStoreKeyed *instr)
void AddDeferredCode(LDeferredCode *code)
void RecordSafepointWithRegisters(LPointerMap *pointers, int arguments, Safepoint::DeoptMode mode)
@ RECORD_SIMPLE_SAFEPOINT
@ RECORD_SAFEPOINT_WITH_REGISTERS
void EmitDeepCopy(Handle< JSObject > object, Register result, Register source, int *offset, AllocationSiteMode mode)
int inlined_function_count_
friend class SafepointGenerator
void EmitBranch(InstrType instr, Condition cc)
TranslationBuffer translations_
bool IsSmiConstant(LConstantOperand *op) const
Condition EmitIsString(Register input, Register temp1, Label *is_not_string, SmiCheck check_needed)
void EmitFalseBranch(InstrType instr, Condition cc)
Operand BuildSeqStringOperand(Register string, LOperand *index, String::Encoding encoding)
void DoDeferredStackCheck(LStackCheck *instr)
void DeoptimizeIf(Condition cc, LInstruction *instr, const char *detail)
SafepointTableBuilder safepoints_
void EmitVectorLoadICRegisters(T *instr)
ZoneList< Handle< Object > > deoptimization_literals_
void RecordSafepoint(Safepoint::DeoptMode mode)
void PopulateDeoptimizationLiteralsWithInlinedFunctions()
void AddToTranslation(LEnvironment *environment, Translation *translation, LOperand *op, bool is_tagged, bool is_uint32, int *object_index_pointer, int *dematerialized_index_pointer)
ZoneList< LEnvironment * > deoptimizations_
DISALLOW_COPY_AND_ASSIGN(LCodeGen)
void EmitIntegerMathAbs(LMathAbs *instr)
int32_t ToRepresentation(LConstantOperand *op, const Representation &r) const
void CallRuntimeFromDeferred(Runtime::FunctionId id, int argc, LInstruction *instr, LOperand *context)
void EmitPushTaggedOperand(LOperand *operand)
int32_t ToInteger32(LConstantOperand *op) const
LPlatformChunk * chunk() const
friend class LGapResolver
void FinishCode(Handle< Code > code)
Handle< Object > ToHandle(LConstantOperand *op) const
ExternalReference ToExternalReference(LConstantOperand *op) const
int LookupDestination(int block_id) const
void DoDeferredAllocate(LAllocate *instr)
void RecordSafepoint(LPointerMap *pointers, Safepoint::Kind kind, int arguments, Safepoint::DeoptMode mode)
void DoDeferredLoadMutableDouble(LLoadFieldByIndex *instr, Register object, Register index)
void DeoptimizeIf(Condition cc, LInstruction *instr, const char *detail, Deoptimizer::BailoutType bailout_type)
XMMRegister ToDoubleRegister(LOperand *op) const
void CallKnownFunction(Handle< JSFunction > function, int formal_parameter_count, int arity, LInstruction *instr, RDIState rdi_state)
void DoDeferredStringCharCodeAt(LStringCharCodeAt *instr)
Safepoint::Kind expected_safepoint_kind_
ZoneList< LDeferredCode * > deferred_
void EmitNumberUntagD(LNumberUntagD *instr, Register input, XMMRegister result, NumberUntagDMode mode)
void CallCodeGeneric(Handle< Code > code, RelocInfo::Mode mode, LInstruction *instr, SafepointMode safepoint_mode, int argc)
bool GenerateDeferredCode()
void RecordSafepoint(LPointerMap *pointers, Safepoint::DeoptMode mode)
void DoDeferredNumberTagIU(LInstruction *instr, LOperand *value, LOperand *temp1, LOperand *temp2, IntegerSignedness signedness)
bool NeedsEagerFrame() const
StrictMode strict_mode() const
void GenerateBodyInstructionPost(LInstruction *instr) OVERRIDE
void RegisterEnvironmentForDeoptimization(LEnvironment *environment, Safepoint::DeoptMode mode)
void LoadContextFromDeferred(LOperand *context)
void GenerateOsrPrologue()
bool IsDehoistedKeyConstant(LConstantOperand *op) const
Operand BuildFastArrayOperand(LOperand *elements_pointer, LOperand *key, Representation key_representation, ElementsKind elements_kind, uint32_t base_offset)
bool NeedsDeferredFrame() const
void DoDeferredInstanceMigration(LCheckMaps *instr, Register object)
int DefineDeoptimizationLiteral(Handle< Object > literal)
void EmitIsConstructCall(Register temp)
int GetStackSlotCount() const
void EmitClassOfTest(Label *if_true, Label *if_false, Handle< String > class_name, Register input, Register temporary, Register scratch)
void WriteTranslation(LEnvironment *environment, Translation *translation)
void DoDeferredMathAbsTaggedHeapNumber(LMathAbs *instr)
void DoLoadKeyedFixedDoubleArray(LLoadKeyed *instr)
bool GenerateSafepointTable()
void DoDeferredTaggedToI(LTaggedToI *instr, Label *done)
void RecordSafepointWithLazyDeopt(LInstruction *instr, SafepointMode safepoint_mode, int argc)
static Condition TokenToCondition(Token::Value op, bool is_unsigned)
void DoLoadKeyedExternalArray(LLoadKeyed *instr)
double ToDouble(LConstantOperand *op) const
Register ToRegister(LOperand *op) const
void CallRuntime(Runtime::FunctionId id, int num_arguments, LInstruction *instr)
void DoStoreKeyedExternalArray(LStoreKeyed *instr)
void RecordAndWritePosition(int position) OVERRIDE
void PopulateDeoptimizationData(Handle< Code > code)
void DoParallelMove(LParallelMove *move)
Condition EmitIsObject(Register input, Label *is_not_object, Label *is_object)
void CallRuntime(const Runtime::Function *function, int num_arguments, LInstruction *instr, SaveFPRegsMode save_doubles=kDontSaveFPRegs)
Operand ToOperand(LOperand *op) const
void CallCode(Handle< Code > code, RelocInfo::Mode mode, LInstruction *instr)
bool IsInteger32Constant(LConstantOperand *op) const
void DoDeferredStringCharFromCode(LStringCharFromCode *instr)
ZoneList< Deoptimizer::JumpTableEntry > jump_table_
void EnsureSpaceForLazyDeopt(int space_needed) OVERRIDE
XMMRegister double_scratch0() const
void GenerateBodyInstructionPre(LInstruction *instr) OVERRIDE
void DoDeferredInstanceOfKnownGlobal(LInstanceOfKnownGlobal *instr, Label *map_check)
void DoLoadKeyedFixedArray(LLoadKeyed *instr)
Smi * ToSmi(LConstantOperand *op) const
LCodeGen(LChunk *chunk, MacroAssembler *assembler, CompilationInfo *info)
void DoDeferredNumberTagD(LNumberTagD *instr)
void DoStoreKeyedFixedDoubleArray(LStoreKeyed *instr)
friend class LEnvironment
XMMRegister ToDoubleRegister(int index) const
void EmitSmiMathAbs(LMathAbs *instr)
MacroAssembler * masm() const
virtual void Generate()=0
LDeferredCode(LCodeGen *codegen)
LCodeGen * codegen() const
int instruction_index() const
void SetExit(Label *exit)
virtual LInstruction * instr()=0
static const Function * FunctionForId(FunctionId id)
enable harmony numeric enable harmony object literal extensions Optimize object Array DOM strings and string trace pretenuring decisions of HAllocate instructions Enables optimizations which favor memory size over execution speed maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining trace the tracking of allocation sites deoptimize every n garbage collections perform array bounds checks elimination analyze liveness of environment slots and zap dead values flushes the cache of optimized code for closures on every GC allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes enable context specialization in TurboFan execution budget before interrupt is triggered max percentage of megamorphic generic ICs to allow optimization enable use of SAHF instruction if enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable use of MLS instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of d16 d31 registers on ARM this requires VFP3 force all emitted branches to be in long mode(MIPS only)") DEFINE_BOOL(enable_always_align_csp
enable harmony numeric enable harmony object literal extensions Optimize object Array DOM strings and string trace pretenuring decisions of HAllocate instructions Enables optimizations which favor memory size over execution speed maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining trace the tracking of allocation sites deoptimize every n garbage collections perform array bounds checks elimination analyze liveness of environment slots and zap dead values flushes the cache of optimized code for closures on every GC allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes enable context specialization in TurboFan execution budget before interrupt is triggered max percentage of megamorphic generic ICs to allow optimization enable use of SAHF instruction if enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable use of MLS instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of d16 d31 registers on ARM this requires VFP3 force all emitted branches to be in long enable alignment of csp to bytes on platforms which prefer the register to always be NULL
#define LITHIUM_CONCRETE_INSTRUCTION_LIST(V)
#define DCHECK(condition)
Debugger support for the V8 JavaScript engine.
#define T(name, string, precedence)