[builtins] move builtin files to src/builtins/.

R=bmeurer@chromium.org
BUG=v8:5197

Review-Url: https://codereview.chromium.org/2145023002
Cr-Commit-Position: refs/heads/master@{#37740}
This commit is contained in:
yangguo 2016-07-13 23:26:03 -07:00 committed by Commit bot
parent d23c8a17d6
commit c8a0c0bdad
29 changed files with 258 additions and 765 deletions

View File

@ -835,8 +835,8 @@ v8_source_set("v8_base") {
"src/bit-vector.h", "src/bit-vector.h",
"src/bootstrapper.cc", "src/bootstrapper.cc",
"src/bootstrapper.h", "src/bootstrapper.h",
"src/builtins.cc", "src/builtins/builtins.cc",
"src/builtins.h", "src/builtins/builtins.h",
"src/cached-powers.cc", "src/cached-powers.cc",
"src/cached-powers.h", "src/cached-powers.h",
"src/cancelable-task.cc", "src/cancelable-task.cc",
@ -1571,6 +1571,7 @@ v8_source_set("v8_base") {
if (v8_target_cpu == "x86") { if (v8_target_cpu == "x86") {
sources += [ sources += [
"src/builtins/ia32/builtins-ia32.cc",
"src/compiler/ia32/code-generator-ia32.cc", "src/compiler/ia32/code-generator-ia32.cc",
"src/compiler/ia32/instruction-codes-ia32.h", "src/compiler/ia32/instruction-codes-ia32.h",
"src/compiler/ia32/instruction-scheduler-ia32.cc", "src/compiler/ia32/instruction-scheduler-ia32.cc",
@ -1586,7 +1587,6 @@ v8_source_set("v8_base") {
"src/ia32/assembler-ia32-inl.h", "src/ia32/assembler-ia32-inl.h",
"src/ia32/assembler-ia32.cc", "src/ia32/assembler-ia32.cc",
"src/ia32/assembler-ia32.h", "src/ia32/assembler-ia32.h",
"src/ia32/builtins-ia32.cc",
"src/ia32/code-stubs-ia32.cc", "src/ia32/code-stubs-ia32.cc",
"src/ia32/code-stubs-ia32.h", "src/ia32/code-stubs-ia32.h",
"src/ia32/codegen-ia32.cc", "src/ia32/codegen-ia32.cc",
@ -1609,6 +1609,7 @@ v8_source_set("v8_base") {
] ]
} else if (v8_target_cpu == "x64") { } else if (v8_target_cpu == "x64") {
sources += [ sources += [
"src/builtins/x64/builtins-x64.cc",
"src/compiler/x64/code-generator-x64.cc", "src/compiler/x64/code-generator-x64.cc",
"src/compiler/x64/instruction-codes-x64.h", "src/compiler/x64/instruction-codes-x64.h",
"src/compiler/x64/instruction-scheduler-x64.cc", "src/compiler/x64/instruction-scheduler-x64.cc",
@ -1631,7 +1632,6 @@ v8_source_set("v8_base") {
"src/x64/assembler-x64-inl.h", "src/x64/assembler-x64-inl.h",
"src/x64/assembler-x64.cc", "src/x64/assembler-x64.cc",
"src/x64/assembler-x64.h", "src/x64/assembler-x64.h",
"src/x64/builtins-x64.cc",
"src/x64/code-stubs-x64.cc", "src/x64/code-stubs-x64.cc",
"src/x64/code-stubs-x64.h", "src/x64/code-stubs-x64.h",
"src/x64/codegen-x64.cc", "src/x64/codegen-x64.cc",
@ -1650,7 +1650,6 @@ v8_source_set("v8_base") {
"src/arm/assembler-arm-inl.h", "src/arm/assembler-arm-inl.h",
"src/arm/assembler-arm.cc", "src/arm/assembler-arm.cc",
"src/arm/assembler-arm.h", "src/arm/assembler-arm.h",
"src/arm/builtins-arm.cc",
"src/arm/code-stubs-arm.cc", "src/arm/code-stubs-arm.cc",
"src/arm/code-stubs-arm.h", "src/arm/code-stubs-arm.h",
"src/arm/codegen-arm.cc", "src/arm/codegen-arm.cc",
@ -1668,6 +1667,7 @@ v8_source_set("v8_base") {
"src/arm/macro-assembler-arm.h", "src/arm/macro-assembler-arm.h",
"src/arm/simulator-arm.cc", "src/arm/simulator-arm.cc",
"src/arm/simulator-arm.h", "src/arm/simulator-arm.h",
"src/builtins/arm/builtins-arm.cc",
"src/compiler/arm/code-generator-arm.cc", "src/compiler/arm/code-generator-arm.cc",
"src/compiler/arm/instruction-codes-arm.h", "src/compiler/arm/instruction-codes-arm.h",
"src/compiler/arm/instruction-scheduler-arm.cc", "src/compiler/arm/instruction-scheduler-arm.cc",
@ -1693,7 +1693,6 @@ v8_source_set("v8_base") {
"src/arm64/assembler-arm64-inl.h", "src/arm64/assembler-arm64-inl.h",
"src/arm64/assembler-arm64.cc", "src/arm64/assembler-arm64.cc",
"src/arm64/assembler-arm64.h", "src/arm64/assembler-arm64.h",
"src/arm64/builtins-arm64.cc",
"src/arm64/code-stubs-arm64.cc", "src/arm64/code-stubs-arm64.cc",
"src/arm64/code-stubs-arm64.h", "src/arm64/code-stubs-arm64.h",
"src/arm64/codegen-arm64.cc", "src/arm64/codegen-arm64.cc",
@ -1721,6 +1720,7 @@ v8_source_set("v8_base") {
"src/arm64/simulator-arm64.h", "src/arm64/simulator-arm64.h",
"src/arm64/utils-arm64.cc", "src/arm64/utils-arm64.cc",
"src/arm64/utils-arm64.h", "src/arm64/utils-arm64.h",
"src/builtins/arm64/builtins-arm64.cc",
"src/compiler/arm64/code-generator-arm64.cc", "src/compiler/arm64/code-generator-arm64.cc",
"src/compiler/arm64/instruction-codes-arm64.h", "src/compiler/arm64/instruction-codes-arm64.h",
"src/compiler/arm64/instruction-scheduler-arm64.cc", "src/compiler/arm64/instruction-scheduler-arm64.cc",
@ -1746,6 +1746,7 @@ v8_source_set("v8_base") {
] ]
} else if (v8_target_cpu == "mipsel") { } else if (v8_target_cpu == "mipsel") {
sources += [ sources += [
"src/builtins/mips/builtins-mips.cc",
"src/compiler/mips/code-generator-mips.cc", "src/compiler/mips/code-generator-mips.cc",
"src/compiler/mips/instruction-codes-mips.h", "src/compiler/mips/instruction-codes-mips.h",
"src/compiler/mips/instruction-scheduler-mips.cc", "src/compiler/mips/instruction-scheduler-mips.cc",
@ -1766,7 +1767,6 @@ v8_source_set("v8_base") {
"src/mips/assembler-mips-inl.h", "src/mips/assembler-mips-inl.h",
"src/mips/assembler-mips.cc", "src/mips/assembler-mips.cc",
"src/mips/assembler-mips.h", "src/mips/assembler-mips.h",
"src/mips/builtins-mips.cc",
"src/mips/code-stubs-mips.cc", "src/mips/code-stubs-mips.cc",
"src/mips/code-stubs-mips.h", "src/mips/code-stubs-mips.h",
"src/mips/codegen-mips.cc", "src/mips/codegen-mips.cc",
@ -1788,6 +1788,7 @@ v8_source_set("v8_base") {
] ]
} else if (v8_target_cpu == "mips64el") { } else if (v8_target_cpu == "mips64el") {
sources += [ sources += [
"src/builtins/mips64/builtins-mips64.cc",
"src/compiler/mips64/code-generator-mips64.cc", "src/compiler/mips64/code-generator-mips64.cc",
"src/compiler/mips64/instruction-codes-mips64.h", "src/compiler/mips64/instruction-codes-mips64.h",
"src/compiler/mips64/instruction-scheduler-mips64.cc", "src/compiler/mips64/instruction-scheduler-mips64.cc",
@ -1808,7 +1809,6 @@ v8_source_set("v8_base") {
"src/mips64/assembler-mips64-inl.h", "src/mips64/assembler-mips64-inl.h",
"src/mips64/assembler-mips64.cc", "src/mips64/assembler-mips64.cc",
"src/mips64/assembler-mips64.h", "src/mips64/assembler-mips64.h",
"src/mips64/builtins-mips64.cc",
"src/mips64/code-stubs-mips64.cc", "src/mips64/code-stubs-mips64.cc",
"src/mips64/code-stubs-mips64.h", "src/mips64/code-stubs-mips64.h",
"src/mips64/codegen-mips64.cc", "src/mips64/codegen-mips64.cc",
@ -1830,6 +1830,7 @@ v8_source_set("v8_base") {
] ]
} else if (v8_target_cpu == "s390" || v8_target_cpu == "s390x") { } else if (v8_target_cpu == "s390" || v8_target_cpu == "s390x") {
sources += [ sources += [
"src/builtins/s390/builtins-s390.cc",
"src/compiler/s390/code-generator-s390.cc", "src/compiler/s390/code-generator-s390.cc",
"src/compiler/s390/instruction-codes-s390.h", "src/compiler/s390/instruction-codes-s390.h",
"src/compiler/s390/instruction-scheduler-s390.cc", "src/compiler/s390/instruction-scheduler-s390.cc",
@ -1852,7 +1853,6 @@ v8_source_set("v8_base") {
"src/s390/assembler-s390-inl.h", "src/s390/assembler-s390-inl.h",
"src/s390/assembler-s390.cc", "src/s390/assembler-s390.cc",
"src/s390/assembler-s390.h", "src/s390/assembler-s390.h",
"src/s390/builtins-s390.cc",
"src/s390/code-stubs-s390.cc", "src/s390/code-stubs-s390.cc",
"src/s390/code-stubs-s390.h", "src/s390/code-stubs-s390.h",
"src/s390/codegen-s390.cc", "src/s390/codegen-s390.cc",

View File

@ -43,7 +43,6 @@
#include "src/base/lazy-instance.h" #include "src/base/lazy-instance.h"
#include "src/base/platform/platform.h" #include "src/base/platform/platform.h"
#include "src/base/utils/random-number-generator.h" #include "src/base/utils/random-number-generator.h"
#include "src/builtins.h"
#include "src/codegen.h" #include "src/codegen.h"
#include "src/counters.h" #include "src/counters.h"
#include "src/debug/debug.h" #include "src/debug/debug.h"

View File

@ -36,7 +36,7 @@
#define V8_ASSEMBLER_H_ #define V8_ASSEMBLER_H_
#include "src/allocation.h" #include "src/allocation.h"
#include "src/builtins.h" #include "src/builtins/builtins.h"
#include "src/isolate.h" #include "src/isolate.h"
#include "src/log.h" #include "src/log.h"
#include "src/register-configuration.h" #include "src/register-configuration.h"

View File

@ -9,7 +9,7 @@
#include "src/ast/prettyprinter.h" #include "src/ast/prettyprinter.h"
#include "src/ast/scopes.h" #include "src/ast/scopes.h"
#include "src/base/hashmap.h" #include "src/base/hashmap.h"
#include "src/builtins.h" #include "src/builtins/builtins.h"
#include "src/code-stubs.h" #include "src/code-stubs.h"
#include "src/contexts.h" #include "src/contexts.h"
#include "src/conversions.h" #include "src/conversions.h"

View File

@ -13,7 +13,6 @@
namespace v8 { namespace v8 {
namespace internal { namespace internal {
#define __ ACCESS_MASM(masm) #define __ ACCESS_MASM(masm)
void Builtins::Generate_Adaptor(MacroAssembler* masm, CFunctionId id, void Builtins::Generate_Adaptor(MacroAssembler* masm, CFunctionId id,
@ -49,7 +48,6 @@ void Builtins::Generate_Adaptor(MacroAssembler* masm, CFunctionId id,
exit_frame_type == BUILTIN_EXIT); exit_frame_type == BUILTIN_EXIT);
} }
// Load the built-in InternalArray function from the current context. // Load the built-in InternalArray function from the current context.
static void GenerateLoadInternalArrayFunction(MacroAssembler* masm, static void GenerateLoadInternalArrayFunction(MacroAssembler* masm,
Register result) { Register result) {
@ -57,14 +55,12 @@ static void GenerateLoadInternalArrayFunction(MacroAssembler* masm,
__ LoadNativeContextSlot(Context::INTERNAL_ARRAY_FUNCTION_INDEX, result); __ LoadNativeContextSlot(Context::INTERNAL_ARRAY_FUNCTION_INDEX, result);
} }
// Load the built-in Array function from the current context. // Load the built-in Array function from the current context.
static void GenerateLoadArrayFunction(MacroAssembler* masm, Register result) { static void GenerateLoadArrayFunction(MacroAssembler* masm, Register result) {
// Load the Array function from the current native context. // Load the Array function from the current native context.
__ LoadNativeContextSlot(Context::ARRAY_FUNCTION_INDEX, result); __ LoadNativeContextSlot(Context::ARRAY_FUNCTION_INDEX, result);
} }
void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) { void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- r0 : number of arguments // -- r0 : number of arguments
@ -92,7 +88,6 @@ void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
__ TailCallStub(&stub); __ TailCallStub(&stub);
} }
void Builtins::Generate_ArrayCode(MacroAssembler* masm) { void Builtins::Generate_ArrayCode(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- r0 : number of arguments // -- r0 : number of arguments
@ -121,7 +116,6 @@ void Builtins::Generate_ArrayCode(MacroAssembler* masm) {
__ TailCallStub(&stub); __ TailCallStub(&stub);
} }
// static // static
void Builtins::Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind) { void Builtins::Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -270,7 +264,6 @@ void Builtins::Generate_NumberConstructor(MacroAssembler* masm) {
__ Ret(1); __ Ret(1);
} }
// static // static
void Builtins::Generate_NumberConstructor_ConstructStub(MacroAssembler* masm) { void Builtins::Generate_NumberConstructor_ConstructStub(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -351,7 +344,6 @@ void Builtins::Generate_NumberConstructor_ConstructStub(MacroAssembler* masm) {
} }
} }
// static // static
void Builtins::Generate_StringConstructor(MacroAssembler* masm) { void Builtins::Generate_StringConstructor(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -420,7 +412,6 @@ void Builtins::Generate_StringConstructor(MacroAssembler* masm) {
} }
} }
// static // static
void Builtins::Generate_StringConstructor_ConstructStub(MacroAssembler* masm) { void Builtins::Generate_StringConstructor_ConstructStub(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -503,7 +494,6 @@ void Builtins::Generate_StringConstructor_ConstructStub(MacroAssembler* masm) {
} }
} }
static void GenerateTailCallToSharedCode(MacroAssembler* masm) { static void GenerateTailCallToSharedCode(MacroAssembler* masm) {
__ ldr(r2, FieldMemOperand(r1, JSFunction::kSharedFunctionInfoOffset)); __ ldr(r2, FieldMemOperand(r1, JSFunction::kSharedFunctionInfoOffset));
__ ldr(r2, FieldMemOperand(r2, SharedFunctionInfo::kCodeOffset)); __ ldr(r2, FieldMemOperand(r2, SharedFunctionInfo::kCodeOffset));
@ -542,7 +532,6 @@ static void GenerateTailCallToReturnedCode(MacroAssembler* masm,
__ Jump(r2); __ Jump(r2);
} }
void Builtins::Generate_InOptimizationQueue(MacroAssembler* masm) { void Builtins::Generate_InOptimizationQueue(MacroAssembler* masm) {
// Checking whether the queued function is ready for install is optional, // Checking whether the queued function is ready for install is optional,
// since we come across interrupts and stack checks elsewhere. However, // since we come across interrupts and stack checks elsewhere. However,
@ -560,7 +549,6 @@ void Builtins::Generate_InOptimizationQueue(MacroAssembler* masm) {
GenerateTailCallToSharedCode(masm); GenerateTailCallToSharedCode(masm);
} }
static void Generate_JSConstructStubHelper(MacroAssembler* masm, static void Generate_JSConstructStubHelper(MacroAssembler* masm,
bool is_api_function, bool is_api_function,
bool create_implicit_receiver, bool create_implicit_receiver,
@ -715,22 +703,18 @@ static void Generate_JSConstructStubHelper(MacroAssembler* masm,
__ Jump(lr); __ Jump(lr);
} }
void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) { void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, false, true, false); Generate_JSConstructStubHelper(masm, false, true, false);
} }
void Builtins::Generate_JSConstructStubApi(MacroAssembler* masm) { void Builtins::Generate_JSConstructStubApi(MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, true, false, false); Generate_JSConstructStubHelper(masm, true, false, false);
} }
void Builtins::Generate_JSBuiltinsConstructStub(MacroAssembler* masm) { void Builtins::Generate_JSBuiltinsConstructStub(MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, false, false, false); Generate_JSConstructStubHelper(masm, false, false, false);
} }
void Builtins::Generate_JSBuiltinsConstructStubForDerived( void Builtins::Generate_JSBuiltinsConstructStubForDerived(
MacroAssembler* masm) { MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, false, false, true); Generate_JSConstructStubHelper(masm, false, false, true);
@ -818,8 +802,8 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) {
// New-style (ignition/turbofan) generator object // New-style (ignition/turbofan) generator object
{ {
__ ldr(r0, FieldMemOperand(r4, JSFunction::kSharedFunctionInfoOffset)); __ ldr(r0, FieldMemOperand(r4, JSFunction::kSharedFunctionInfoOffset));
__ ldr(r0, __ ldr(r0, FieldMemOperand(
FieldMemOperand(r0, SharedFunctionInfo::kFormalParameterCountOffset)); r0, SharedFunctionInfo::kFormalParameterCountOffset));
__ SmiUntag(r0); __ SmiUntag(r0);
// We abuse new.target both to indicate that this is a resume call and to // We abuse new.target both to indicate that this is a resume call and to
// pass in the generator object. In ordinary calls, new.target is always // pass in the generator object. In ordinary calls, new.target is always
@ -900,10 +884,8 @@ void Builtins::Generate_ConstructedNonConstructable(MacroAssembler* masm) {
__ CallRuntime(Runtime::kThrowConstructedNonConstructable); __ CallRuntime(Runtime::kThrowConstructedNonConstructable);
} }
enum IsTagged { kArgcIsSmiTagged, kArgcIsUntaggedInt }; enum IsTagged { kArgcIsSmiTagged, kArgcIsUntaggedInt };
// Clobbers r2; preserves all other registers. // Clobbers r2; preserves all other registers.
static void Generate_CheckStackOverflow(MacroAssembler* masm, Register argc, static void Generate_CheckStackOverflow(MacroAssembler* masm, Register argc,
IsTagged argc_is_tagged) { IsTagged argc_is_tagged) {
@ -930,7 +912,6 @@ static void Generate_CheckStackOverflow(MacroAssembler* masm, Register argc,
__ bind(&okay); __ bind(&okay);
} }
static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm, static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
bool is_construct) { bool is_construct) {
// Called from Generate_JS_Entry // Called from Generate_JS_Entry
@ -974,8 +955,8 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
__ b(&entry); __ b(&entry);
__ bind(&loop); __ bind(&loop);
__ ldr(r0, MemOperand(r4, kPointerSize, PostIndex)); // read next parameter __ ldr(r0, MemOperand(r4, kPointerSize, PostIndex)); // read next parameter
__ ldr(r0, MemOperand(r0)); // dereference handle __ ldr(r0, MemOperand(r0)); // dereference handle
__ push(r0); // push parameter __ push(r0); // push parameter
__ bind(&entry); __ bind(&entry);
__ cmp(r4, r2); __ cmp(r4, r2);
__ b(ne, &loop); __ b(ne, &loop);
@ -1011,12 +992,10 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
// r0: result // r0: result
} }
void Builtins::Generate_JSEntryTrampoline(MacroAssembler* masm) { void Builtins::Generate_JSEntryTrampoline(MacroAssembler* masm) {
Generate_JSEntryTrampolineHelper(masm, false); Generate_JSEntryTrampolineHelper(masm, false);
} }
void Builtins::Generate_JSConstructEntryTrampoline(MacroAssembler* masm) { void Builtins::Generate_JSConstructEntryTrampoline(MacroAssembler* masm) {
Generate_JSEntryTrampolineHelper(masm, true); Generate_JSEntryTrampolineHelper(masm, true);
} }
@ -1473,7 +1452,6 @@ void Builtins::Generate_CompileOptimized(MacroAssembler* masm) {
Runtime::kCompileOptimized_NotConcurrent); Runtime::kCompileOptimized_NotConcurrent);
} }
void Builtins::Generate_CompileOptimizedConcurrent(MacroAssembler* masm) { void Builtins::Generate_CompileOptimizedConcurrent(MacroAssembler* masm) {
GenerateTailCallToReturnedCode(masm, Runtime::kCompileOptimized_Concurrent); GenerateTailCallToReturnedCode(masm, Runtime::kCompileOptimized_Concurrent);
} }
@ -1543,19 +1521,18 @@ static void GenerateMakeCodeYoungAgainCommon(MacroAssembler* masm) {
__ mov(pc, r0); __ mov(pc, r0);
} }
#define DEFINE_CODE_AGE_BUILTIN_GENERATOR(C) \ #define DEFINE_CODE_AGE_BUILTIN_GENERATOR(C) \
void Builtins::Generate_Make##C##CodeYoungAgainEvenMarking( \ void Builtins::Generate_Make##C##CodeYoungAgainEvenMarking( \
MacroAssembler* masm) { \ MacroAssembler* masm) { \
GenerateMakeCodeYoungAgainCommon(masm); \ GenerateMakeCodeYoungAgainCommon(masm); \
} \ } \
void Builtins::Generate_Make##C##CodeYoungAgainOddMarking( \ void Builtins::Generate_Make##C##CodeYoungAgainOddMarking( \
MacroAssembler* masm) { \ MacroAssembler* masm) { \
GenerateMakeCodeYoungAgainCommon(masm); \ GenerateMakeCodeYoungAgainCommon(masm); \
} }
CODE_AGE_LIST(DEFINE_CODE_AGE_BUILTIN_GENERATOR) CODE_AGE_LIST(DEFINE_CODE_AGE_BUILTIN_GENERATOR)
#undef DEFINE_CODE_AGE_BUILTIN_GENERATOR #undef DEFINE_CODE_AGE_BUILTIN_GENERATOR
void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) { void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) {
// For now, as in GenerateMakeCodeYoungAgainCommon, we are relying on the fact // For now, as in GenerateMakeCodeYoungAgainCommon, we are relying on the fact
// that make_code_young doesn't do any garbage collection which allows us to // that make_code_young doesn't do any garbage collection which allows us to
@ -1571,8 +1548,9 @@ void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) {
__ stm(db_w, sp, r0.bit() | r1.bit() | r3.bit() | fp.bit() | lr.bit()); __ stm(db_w, sp, r0.bit() | r1.bit() | r3.bit() | fp.bit() | lr.bit());
__ PrepareCallCFunction(2, 0, r2); __ PrepareCallCFunction(2, 0, r2);
__ mov(r1, Operand(ExternalReference::isolate_address(masm->isolate()))); __ mov(r1, Operand(ExternalReference::isolate_address(masm->isolate())));
__ CallCFunction(ExternalReference::get_mark_code_as_executed_function( __ CallCFunction(
masm->isolate()), 2); ExternalReference::get_mark_code_as_executed_function(masm->isolate()),
2);
__ ldm(ia_w, sp, r0.bit() | r1.bit() | r3.bit() | fp.bit() | lr.bit()); __ ldm(ia_w, sp, r0.bit() | r1.bit() | r3.bit() | fp.bit() | lr.bit());
// Perform prologue operations usually performed by the young code stub. // Perform prologue operations usually performed by the young code stub.
@ -1583,17 +1561,14 @@ void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) {
__ mov(pc, r0); __ mov(pc, r0);
} }
void Builtins::Generate_MarkCodeAsExecutedTwice(MacroAssembler* masm) { void Builtins::Generate_MarkCodeAsExecutedTwice(MacroAssembler* masm) {
GenerateMakeCodeYoungAgainCommon(masm); GenerateMakeCodeYoungAgainCommon(masm);
} }
void Builtins::Generate_MarkCodeAsToBeExecutedOnce(MacroAssembler* masm) { void Builtins::Generate_MarkCodeAsToBeExecutedOnce(MacroAssembler* masm) {
Generate_MarkCodeAsExecutedOnce(masm); Generate_MarkCodeAsExecutedOnce(masm);
} }
static void Generate_NotifyStubFailureHelper(MacroAssembler* masm, static void Generate_NotifyStubFailureHelper(MacroAssembler* masm,
SaveFPRegsMode save_doubles) { SaveFPRegsMode save_doubles) {
{ {
@ -1609,20 +1584,17 @@ static void Generate_NotifyStubFailureHelper(MacroAssembler* masm,
} }
__ add(sp, sp, Operand(kPointerSize)); // Ignore state __ add(sp, sp, Operand(kPointerSize)); // Ignore state
__ mov(pc, lr); // Jump to miss handler __ mov(pc, lr); // Jump to miss handler
} }
void Builtins::Generate_NotifyStubFailure(MacroAssembler* masm) { void Builtins::Generate_NotifyStubFailure(MacroAssembler* masm) {
Generate_NotifyStubFailureHelper(masm, kDontSaveFPRegs); Generate_NotifyStubFailureHelper(masm, kDontSaveFPRegs);
} }
void Builtins::Generate_NotifyStubFailureSaveDoubles(MacroAssembler* masm) { void Builtins::Generate_NotifyStubFailureSaveDoubles(MacroAssembler* masm) {
Generate_NotifyStubFailureHelper(masm, kSaveFPRegs); Generate_NotifyStubFailureHelper(masm, kSaveFPRegs);
} }
static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm, static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm,
Deoptimizer::BailoutType type) { Deoptimizer::BailoutType type) {
{ {
@ -1657,22 +1629,18 @@ static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm,
__ stop("no cases left"); __ stop("no cases left");
} }
void Builtins::Generate_NotifyDeoptimized(MacroAssembler* masm) { void Builtins::Generate_NotifyDeoptimized(MacroAssembler* masm) {
Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::EAGER); Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::EAGER);
} }
void Builtins::Generate_NotifySoftDeoptimized(MacroAssembler* masm) { void Builtins::Generate_NotifySoftDeoptimized(MacroAssembler* masm) {
Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::SOFT); Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::SOFT);
} }
void Builtins::Generate_NotifyLazyDeoptimized(MacroAssembler* masm) { void Builtins::Generate_NotifyLazyDeoptimized(MacroAssembler* masm) {
Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::LAZY); Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::LAZY);
} }
static void CompatibleReceiverCheck(MacroAssembler* masm, Register receiver, static void CompatibleReceiverCheck(MacroAssembler* masm, Register receiver,
Register function_template_info, Register function_template_info,
Register scratch0, Register scratch1, Register scratch0, Register scratch1,
@ -1736,7 +1704,6 @@ static void CompatibleReceiverCheck(MacroAssembler* masm, Register receiver,
__ bind(&receiver_check_passed); __ bind(&receiver_check_passed);
} }
void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) { void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- r0 : number of arguments excluding receiver // -- r0 : number of arguments excluding receiver
@ -1772,7 +1739,6 @@ void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) {
__ TailCallRuntime(Runtime::kThrowIllegalInvocation); __ TailCallRuntime(Runtime::kThrowIllegalInvocation);
} }
void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) { void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
// Lookup the function in the JavaScript frame. // Lookup the function in the JavaScript frame.
__ ldr(r0, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); __ ldr(r0, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
@ -1795,7 +1761,8 @@ void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
// <deopt_data> = <code>[#deoptimization_data_offset] // <deopt_data> = <code>[#deoptimization_data_offset]
__ ldr(r1, FieldMemOperand(r0, Code::kDeoptimizationDataOffset)); __ ldr(r1, FieldMemOperand(r0, Code::kDeoptimizationDataOffset));
{ ConstantPoolUnavailableScope constant_pool_unavailable(masm); {
ConstantPoolUnavailableScope constant_pool_unavailable(masm);
__ add(r0, r0, Operand(Code::kHeaderSize - kHeapObjectTag)); // Code start __ add(r0, r0, Operand(Code::kHeaderSize - kHeapObjectTag)); // Code start
if (FLAG_enable_embedded_constant_pool) { if (FLAG_enable_embedded_constant_pool) {
@ -1804,8 +1771,9 @@ void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
// Load the OSR entrypoint offset from the deoptimization data. // Load the OSR entrypoint offset from the deoptimization data.
// <osr_offset> = <deopt_data>[#header_size + #osr_pc_offset] // <osr_offset> = <deopt_data>[#header_size + #osr_pc_offset]
__ ldr(r1, FieldMemOperand(r1, FixedArray::OffsetOfElementAt( __ ldr(r1, FieldMemOperand(
DeoptimizationInputData::kOsrPcOffsetIndex))); r1, FixedArray::OffsetOfElementAt(
DeoptimizationInputData::kOsrPcOffsetIndex)));
// Compute the target address = code start + osr_offset // Compute the target address = code start + osr_offset
__ add(lr, r0, Operand::SmiUntag(r1)); __ add(lr, r0, Operand::SmiUntag(r1));
@ -1815,7 +1783,6 @@ void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
} }
} }
// static // static
void Builtins::Generate_DatePrototype_GetField(MacroAssembler* masm, void Builtins::Generate_DatePrototype_GetField(MacroAssembler* masm,
int field_index) { int field_index) {
@ -1936,7 +1903,6 @@ void Builtins::Generate_FunctionPrototypeApply(MacroAssembler* masm) {
} }
} }
// static // static
void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) { void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) {
// 1. Make sure we have at least one argument. // 1. Make sure we have at least one argument.
@ -1980,7 +1946,6 @@ void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) {
__ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET);
} }
void Builtins::Generate_ReflectApply(MacroAssembler* masm) { void Builtins::Generate_ReflectApply(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- r0 : argc // -- r0 : argc
@ -2035,7 +2000,6 @@ void Builtins::Generate_ReflectApply(MacroAssembler* masm) {
} }
} }
void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) { void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- r0 : argc // -- r0 : argc
@ -2105,7 +2069,6 @@ void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) {
} }
} }
static void ArgumentAdaptorStackCheck(MacroAssembler* masm, static void ArgumentAdaptorStackCheck(MacroAssembler* masm,
Label* stack_overflow) { Label* stack_overflow) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2126,7 +2089,6 @@ static void ArgumentAdaptorStackCheck(MacroAssembler* masm,
__ b(le, stack_overflow); // Signed comparison. __ b(le, stack_overflow); // Signed comparison.
} }
static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) { static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) {
__ SmiTag(r0); __ SmiTag(r0);
__ mov(r4, Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR))); __ mov(r4, Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR)));
@ -2137,7 +2099,6 @@ static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) {
Operand(StandardFrameConstants::kFixedFrameSizeFromFp + kPointerSize)); Operand(StandardFrameConstants::kFixedFrameSizeFromFp + kPointerSize));
} }
static void LeaveArgumentsAdaptorFrame(MacroAssembler* masm) { static void LeaveArgumentsAdaptorFrame(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- r0 : result being passed through // -- r0 : result being passed through
@ -2152,7 +2113,6 @@ static void LeaveArgumentsAdaptorFrame(MacroAssembler* masm) {
__ add(sp, sp, Operand(kPointerSize)); // adjust for receiver __ add(sp, sp, Operand(kPointerSize)); // adjust for receiver
} }
// static // static
void Builtins::Generate_Apply(MacroAssembler* masm) { void Builtins::Generate_Apply(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2476,7 +2436,6 @@ void Builtins::Generate_CallFunction(MacroAssembler* masm,
} }
} }
namespace { namespace {
void Generate_PushBoundArguments(MacroAssembler* masm) { void Generate_PushBoundArguments(MacroAssembler* masm) {
@ -2555,7 +2514,6 @@ void Generate_PushBoundArguments(MacroAssembler* masm) {
} // namespace } // namespace
// static // static
void Builtins::Generate_CallBoundFunctionImpl(MacroAssembler* masm, void Builtins::Generate_CallBoundFunctionImpl(MacroAssembler* masm,
TailCallMode tail_call_mode) { TailCallMode tail_call_mode) {
@ -2584,7 +2542,6 @@ void Builtins::Generate_CallBoundFunctionImpl(MacroAssembler* masm,
__ add(pc, ip, Operand(Code::kHeaderSize - kHeapObjectTag)); __ add(pc, ip, Operand(Code::kHeaderSize - kHeapObjectTag));
} }
// static // static
void Builtins::Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode, void Builtins::Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode,
TailCallMode tail_call_mode) { TailCallMode tail_call_mode) {
@ -2645,7 +2602,6 @@ void Builtins::Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode,
} }
} }
// static // static
void Builtins::Generate_ConstructFunction(MacroAssembler* masm) { void Builtins::Generate_ConstructFunction(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2666,7 +2622,6 @@ void Builtins::Generate_ConstructFunction(MacroAssembler* masm) {
__ add(pc, r4, Operand(Code::kHeaderSize - kHeapObjectTag)); __ add(pc, r4, Operand(Code::kHeaderSize - kHeapObjectTag));
} }
// static // static
void Builtins::Generate_ConstructBoundFunction(MacroAssembler* masm) { void Builtins::Generate_ConstructBoundFunction(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2691,7 +2646,6 @@ void Builtins::Generate_ConstructBoundFunction(MacroAssembler* masm) {
__ add(pc, ip, Operand(Code::kHeaderSize - kHeapObjectTag)); __ add(pc, ip, Operand(Code::kHeaderSize - kHeapObjectTag));
} }
// static // static
void Builtins::Generate_ConstructProxy(MacroAssembler* masm) { void Builtins::Generate_ConstructProxy(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2711,7 +2665,6 @@ void Builtins::Generate_ConstructProxy(MacroAssembler* masm) {
ExternalReference(Runtime::kJSProxyConstruct, masm->isolate())); ExternalReference(Runtime::kJSProxyConstruct, masm->isolate()));
} }
// static // static
void Builtins::Generate_Construct(MacroAssembler* masm) { void Builtins::Generate_Construct(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2963,7 +2916,6 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
LeaveArgumentsAdaptorFrame(masm); LeaveArgumentsAdaptorFrame(masm);
__ Jump(lr); __ Jump(lr);
// ------------------------------------------- // -------------------------------------------
// Dont adapt arguments. // Dont adapt arguments.
// ------------------------------------------- // -------------------------------------------
@ -2979,7 +2931,6 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
} }
} }
#undef __ #undef __
} // namespace internal } // namespace internal

View File

@ -14,17 +14,14 @@
namespace v8 { namespace v8 {
namespace internal { namespace internal {
#define __ ACCESS_MASM(masm) #define __ ACCESS_MASM(masm)
// Load the built-in Array function from the current context. // Load the built-in Array function from the current context.
static void GenerateLoadArrayFunction(MacroAssembler* masm, Register result) { static void GenerateLoadArrayFunction(MacroAssembler* masm, Register result) {
// Load the InternalArray function from the native context. // Load the InternalArray function from the native context.
__ LoadNativeContextSlot(Context::ARRAY_FUNCTION_INDEX, result); __ LoadNativeContextSlot(Context::ARRAY_FUNCTION_INDEX, result);
} }
// Load the built-in InternalArray function from the current context. // Load the built-in InternalArray function from the current context.
static void GenerateLoadInternalArrayFunction(MacroAssembler* masm, static void GenerateLoadInternalArrayFunction(MacroAssembler* masm,
Register result) { Register result) {
@ -65,7 +62,6 @@ void Builtins::Generate_Adaptor(MacroAssembler* masm, CFunctionId id,
exit_frame_type == BUILTIN_EXIT); exit_frame_type == BUILTIN_EXIT);
} }
void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) { void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- x0 : number of arguments // -- x0 : number of arguments
@ -93,7 +89,6 @@ void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
__ TailCallStub(&stub); __ TailCallStub(&stub);
} }
void Builtins::Generate_ArrayCode(MacroAssembler* masm) { void Builtins::Generate_ArrayCode(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- x0 : number of arguments // -- x0 : number of arguments
@ -122,7 +117,6 @@ void Builtins::Generate_ArrayCode(MacroAssembler* masm) {
__ TailCallStub(&stub); __ TailCallStub(&stub);
} }
// static // static
void Builtins::Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind) { void Builtins::Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -259,7 +253,6 @@ void Builtins::Generate_NumberConstructor(MacroAssembler* masm) {
__ Ret(); __ Ret();
} }
// static // static
void Builtins::Generate_NumberConstructor_ConstructStub(MacroAssembler* masm) { void Builtins::Generate_NumberConstructor_ConstructStub(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -341,7 +334,6 @@ void Builtins::Generate_NumberConstructor_ConstructStub(MacroAssembler* masm) {
} }
} }
// static // static
void Builtins::Generate_StringConstructor(MacroAssembler* masm) { void Builtins::Generate_StringConstructor(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -413,7 +405,6 @@ void Builtins::Generate_StringConstructor(MacroAssembler* masm) {
} }
} }
// static // static
void Builtins::Generate_StringConstructor_ConstructStub(MacroAssembler* masm) { void Builtins::Generate_StringConstructor_ConstructStub(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -530,7 +521,6 @@ static void GenerateTailCallToReturnedCode(MacroAssembler* masm,
__ Br(x2); __ Br(x2);
} }
void Builtins::Generate_InOptimizationQueue(MacroAssembler* masm) { void Builtins::Generate_InOptimizationQueue(MacroAssembler* masm) {
// Checking whether the queued function is ready for install is optional, // Checking whether the queued function is ready for install is optional,
// since we come across interrupts and stack checks elsewhere. However, not // since we come across interrupts and stack checks elsewhere. However, not
@ -547,7 +537,6 @@ void Builtins::Generate_InOptimizationQueue(MacroAssembler* masm) {
GenerateTailCallToSharedCode(masm); GenerateTailCallToSharedCode(masm);
} }
static void Generate_JSConstructStubHelper(MacroAssembler* masm, static void Generate_JSConstructStubHelper(MacroAssembler* masm,
bool is_api_function, bool is_api_function,
bool create_implicit_receiver, bool create_implicit_receiver,
@ -716,28 +705,23 @@ static void Generate_JSConstructStubHelper(MacroAssembler* masm,
__ Ret(); __ Ret();
} }
void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) { void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, false, true, false); Generate_JSConstructStubHelper(masm, false, true, false);
} }
void Builtins::Generate_JSConstructStubApi(MacroAssembler* masm) { void Builtins::Generate_JSConstructStubApi(MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, true, false, false); Generate_JSConstructStubHelper(masm, true, false, false);
} }
void Builtins::Generate_JSBuiltinsConstructStub(MacroAssembler* masm) { void Builtins::Generate_JSBuiltinsConstructStub(MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, false, false, false); Generate_JSConstructStubHelper(masm, false, false, false);
} }
void Builtins::Generate_JSBuiltinsConstructStubForDerived( void Builtins::Generate_JSBuiltinsConstructStubForDerived(
MacroAssembler* masm) { MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, false, false, true); Generate_JSConstructStubHelper(masm, false, false, true);
} }
void Builtins::Generate_ConstructedNonConstructable(MacroAssembler* masm) { void Builtins::Generate_ConstructedNonConstructable(MacroAssembler* masm) {
FrameScope scope(masm, StackFrame::INTERNAL); FrameScope scope(masm, StackFrame::INTERNAL);
__ Push(x1); __ Push(x1);
@ -818,8 +802,8 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) {
// New-style (ignition/turbofan) generator object // New-style (ignition/turbofan) generator object
{ {
__ Ldr(x0, FieldMemOperand(x4, JSFunction::kSharedFunctionInfoOffset)); __ Ldr(x0, FieldMemOperand(x4, JSFunction::kSharedFunctionInfoOffset));
__ Ldr(w0, __ Ldr(w0, FieldMemOperand(
FieldMemOperand(x0, SharedFunctionInfo::kFormalParameterCountOffset)); x0, SharedFunctionInfo::kFormalParameterCountOffset));
// We abuse new.target both to indicate that this is a resume call and to // We abuse new.target both to indicate that this is a resume call and to
// pass in the generator object. In ordinary calls, new.target is always // pass in the generator object. In ordinary calls, new.target is always
// undefined because generator functions are non-constructable. // undefined because generator functions are non-constructable.
@ -863,8 +847,8 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) {
__ Ldr(x10, FieldMemOperand(x4, JSFunction::kSharedFunctionInfoOffset)); __ Ldr(x10, FieldMemOperand(x4, JSFunction::kSharedFunctionInfoOffset));
__ Ldr(x10, FieldMemOperand(x10, SharedFunctionInfo::kCodeOffset)); __ Ldr(x10, FieldMemOperand(x10, SharedFunctionInfo::kCodeOffset));
__ Add(x10, x10, Code::kHeaderSize - kHeapObjectTag); __ Add(x10, x10, Code::kHeaderSize - kHeapObjectTag);
__ Ldrsw(x11, __ Ldrsw(x11, UntagSmiFieldMemOperand(
UntagSmiFieldMemOperand(x1, JSGeneratorObject::kContinuationOffset)); x1, JSGeneratorObject::kContinuationOffset));
__ Add(x10, x10, x11); __ Add(x10, x10, x11);
__ Mov(x12, Smi::FromInt(JSGeneratorObject::kGeneratorExecuting)); __ Mov(x12, Smi::FromInt(JSGeneratorObject::kGeneratorExecuting));
__ Str(x12, FieldMemOperand(x1, JSGeneratorObject::kContinuationOffset)); __ Str(x12, FieldMemOperand(x1, JSGeneratorObject::kContinuationOffset));
@ -895,7 +879,6 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) {
enum IsTagged { kArgcIsSmiTagged, kArgcIsUntaggedInt }; enum IsTagged { kArgcIsSmiTagged, kArgcIsUntaggedInt };
// Clobbers x10, x15; preserves all other registers. // Clobbers x10, x15; preserves all other registers.
static void Generate_CheckStackOverflow(MacroAssembler* masm, Register argc, static void Generate_CheckStackOverflow(MacroAssembler* masm, Register argc,
IsTagged argc_is_tagged) { IsTagged argc_is_tagged) {
@ -925,7 +908,6 @@ static void Generate_CheckStackOverflow(MacroAssembler* masm, Register argc,
__ Bind(&enough_stack_space); __ Bind(&enough_stack_space);
} }
// Input: // Input:
// x0: new.target. // x0: new.target.
// x1: function. // x1: function.
@ -975,7 +957,7 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
__ Bind(&loop); __ Bind(&loop);
__ Ldr(x11, MemOperand(argv, kPointerSize, PostIndex)); __ Ldr(x11, MemOperand(argv, kPointerSize, PostIndex));
__ Ldr(x12, MemOperand(x11)); // Dereference the handle. __ Ldr(x12, MemOperand(x11)); // Dereference the handle.
__ Push(x12); // Push the argument. __ Push(x12); // Push the argument.
__ Bind(&entry); __ Bind(&entry);
__ Cmp(scratch, argv); __ Cmp(scratch, argv);
__ B(ne, &loop); __ B(ne, &loop);
@ -1015,12 +997,10 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
__ Ret(); __ Ret();
} }
void Builtins::Generate_JSEntryTrampoline(MacroAssembler* masm) { void Builtins::Generate_JSEntryTrampoline(MacroAssembler* masm) {
Generate_JSEntryTrampolineHelper(masm, false); Generate_JSEntryTrampolineHelper(masm, false);
} }
void Builtins::Generate_JSConstructEntryTrampoline(MacroAssembler* masm) { void Builtins::Generate_JSConstructEntryTrampoline(MacroAssembler* masm) {
Generate_JSEntryTrampolineHelper(masm, true); Generate_JSEntryTrampolineHelper(masm, true);
} }
@ -1471,7 +1451,6 @@ void Builtins::Generate_CompileOptimized(MacroAssembler* masm) {
Runtime::kCompileOptimized_NotConcurrent); Runtime::kCompileOptimized_NotConcurrent);
} }
void Builtins::Generate_CompileOptimizedConcurrent(MacroAssembler* masm) { void Builtins::Generate_CompileOptimizedConcurrent(MacroAssembler* masm) {
GenerateTailCallToReturnedCode(masm, Runtime::kCompileOptimized_Concurrent); GenerateTailCallToReturnedCode(masm, Runtime::kCompileOptimized_Concurrent);
} }
@ -1542,19 +1521,18 @@ static void GenerateMakeCodeYoungAgainCommon(MacroAssembler* masm) {
__ Br(x0); __ Br(x0);
} }
#define DEFINE_CODE_AGE_BUILTIN_GENERATOR(C) \ #define DEFINE_CODE_AGE_BUILTIN_GENERATOR(C) \
void Builtins::Generate_Make##C##CodeYoungAgainEvenMarking( \ void Builtins::Generate_Make##C##CodeYoungAgainEvenMarking( \
MacroAssembler* masm) { \ MacroAssembler* masm) { \
GenerateMakeCodeYoungAgainCommon(masm); \ GenerateMakeCodeYoungAgainCommon(masm); \
} \ } \
void Builtins::Generate_Make##C##CodeYoungAgainOddMarking( \ void Builtins::Generate_Make##C##CodeYoungAgainOddMarking( \
MacroAssembler* masm) { \ MacroAssembler* masm) { \
GenerateMakeCodeYoungAgainCommon(masm); \ GenerateMakeCodeYoungAgainCommon(masm); \
} }
CODE_AGE_LIST(DEFINE_CODE_AGE_BUILTIN_GENERATOR) CODE_AGE_LIST(DEFINE_CODE_AGE_BUILTIN_GENERATOR)
#undef DEFINE_CODE_AGE_BUILTIN_GENERATOR #undef DEFINE_CODE_AGE_BUILTIN_GENERATOR
void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) { void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) {
// For now, as in GenerateMakeCodeYoungAgainCommon, we are relying on the fact // For now, as in GenerateMakeCodeYoungAgainCommon, we are relying on the fact
// that make_code_young doesn't do any garbage collection which allows us to // that make_code_young doesn't do any garbage collection which allows us to
@ -1574,8 +1552,8 @@ void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) {
__ Push(x0, x1, x3, fp, lr); __ Push(x0, x1, x3, fp, lr);
__ Mov(x1, ExternalReference::isolate_address(masm->isolate())); __ Mov(x1, ExternalReference::isolate_address(masm->isolate()));
__ CallCFunction( __ CallCFunction(
ExternalReference::get_mark_code_as_executed_function( ExternalReference::get_mark_code_as_executed_function(masm->isolate()),
masm->isolate()), 2); 2);
__ Pop(lr, fp, x3, x1, x0); __ Pop(lr, fp, x3, x1, x0);
// Perform prologue operations usually performed by the young code stub. // Perform prologue operations usually performed by the young code stub.
@ -1587,17 +1565,14 @@ void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) {
__ Br(x0); __ Br(x0);
} }
void Builtins::Generate_MarkCodeAsExecutedTwice(MacroAssembler* masm) { void Builtins::Generate_MarkCodeAsExecutedTwice(MacroAssembler* masm) {
GenerateMakeCodeYoungAgainCommon(masm); GenerateMakeCodeYoungAgainCommon(masm);
} }
void Builtins::Generate_MarkCodeAsToBeExecutedOnce(MacroAssembler* masm) { void Builtins::Generate_MarkCodeAsToBeExecutedOnce(MacroAssembler* masm) {
Generate_MarkCodeAsExecutedOnce(masm); Generate_MarkCodeAsExecutedOnce(masm);
} }
static void Generate_NotifyStubFailureHelper(MacroAssembler* masm, static void Generate_NotifyStubFailureHelper(MacroAssembler* masm,
SaveFPRegsMode save_doubles) { SaveFPRegsMode save_doubles) {
{ {
@ -1623,17 +1598,14 @@ static void Generate_NotifyStubFailureHelper(MacroAssembler* masm,
__ Br(lr); __ Br(lr);
} }
void Builtins::Generate_NotifyStubFailure(MacroAssembler* masm) { void Builtins::Generate_NotifyStubFailure(MacroAssembler* masm) {
Generate_NotifyStubFailureHelper(masm, kDontSaveFPRegs); Generate_NotifyStubFailureHelper(masm, kDontSaveFPRegs);
} }
void Builtins::Generate_NotifyStubFailureSaveDoubles(MacroAssembler* masm) { void Builtins::Generate_NotifyStubFailureSaveDoubles(MacroAssembler* masm) {
Generate_NotifyStubFailureHelper(masm, kSaveFPRegs); Generate_NotifyStubFailureHelper(masm, kSaveFPRegs);
} }
static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm, static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm,
Deoptimizer::BailoutType type) { Deoptimizer::BailoutType type) {
{ {
@ -1671,22 +1643,18 @@ static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm,
__ Abort(kInvalidFullCodegenState); __ Abort(kInvalidFullCodegenState);
} }
void Builtins::Generate_NotifyDeoptimized(MacroAssembler* masm) { void Builtins::Generate_NotifyDeoptimized(MacroAssembler* masm) {
Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::EAGER); Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::EAGER);
} }
void Builtins::Generate_NotifyLazyDeoptimized(MacroAssembler* masm) { void Builtins::Generate_NotifyLazyDeoptimized(MacroAssembler* masm) {
Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::LAZY); Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::LAZY);
} }
void Builtins::Generate_NotifySoftDeoptimized(MacroAssembler* masm) { void Builtins::Generate_NotifySoftDeoptimized(MacroAssembler* masm) {
Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::SOFT); Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::SOFT);
} }
static void CompatibleReceiverCheck(MacroAssembler* masm, Register receiver, static void CompatibleReceiverCheck(MacroAssembler* masm, Register receiver,
Register function_template_info, Register function_template_info,
Register scratch0, Register scratch1, Register scratch0, Register scratch1,
@ -1750,7 +1718,6 @@ static void CompatibleReceiverCheck(MacroAssembler* masm, Register receiver,
__ Bind(&receiver_check_passed); __ Bind(&receiver_check_passed);
} }
void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) { void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- x0 : number of arguments excluding receiver // -- x0 : number of arguments excluding receiver
@ -1786,7 +1753,6 @@ void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) {
__ TailCallRuntime(Runtime::kThrowIllegalInvocation); __ TailCallRuntime(Runtime::kThrowIllegalInvocation);
} }
void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) { void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
// Lookup the function in the JavaScript frame. // Lookup the function in the JavaScript frame.
__ Ldr(x0, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); __ Ldr(x0, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
@ -1810,8 +1776,9 @@ void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
// Load the OSR entrypoint offset from the deoptimization data. // Load the OSR entrypoint offset from the deoptimization data.
// <osr_offset> = <deopt_data>[#header_size + #osr_pc_offset] // <osr_offset> = <deopt_data>[#header_size + #osr_pc_offset]
__ Ldrsw(w1, UntagSmiFieldMemOperand(x1, FixedArray::OffsetOfElementAt( __ Ldrsw(w1, UntagSmiFieldMemOperand(
DeoptimizationInputData::kOsrPcOffsetIndex))); x1, FixedArray::OffsetOfElementAt(
DeoptimizationInputData::kOsrPcOffsetIndex)));
// Compute the target address = code_obj + header_size + osr_offset // Compute the target address = code_obj + header_size + osr_offset
// <entry_addr> = <code_obj> + #header_size + <osr_offset> // <entry_addr> = <code_obj> + #header_size + <osr_offset>
@ -1822,7 +1789,6 @@ void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
__ Ret(); __ Ret();
} }
// static // static
void Builtins::Generate_DatePrototype_GetField(MacroAssembler* masm, void Builtins::Generate_DatePrototype_GetField(MacroAssembler* masm,
int field_index) { int field_index) {
@ -1964,7 +1930,6 @@ void Builtins::Generate_FunctionPrototypeApply(MacroAssembler* masm) {
} }
} }
// static // static
void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) { void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) {
Register argc = x0; Register argc = x0;
@ -2011,7 +1976,6 @@ void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) {
__ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET);
} }
void Builtins::Generate_ReflectApply(MacroAssembler* masm) { void Builtins::Generate_ReflectApply(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- x0 : argc // -- x0 : argc
@ -2082,7 +2046,6 @@ void Builtins::Generate_ReflectApply(MacroAssembler* masm) {
} }
} }
void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) { void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- x0 : argc // -- x0 : argc
@ -2169,7 +2132,6 @@ void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) {
} }
} }
static void ArgumentAdaptorStackCheck(MacroAssembler* masm, static void ArgumentAdaptorStackCheck(MacroAssembler* masm,
Label* stack_overflow) { Label* stack_overflow) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2191,7 +2153,6 @@ static void ArgumentAdaptorStackCheck(MacroAssembler* masm,
__ B(le, stack_overflow); __ B(le, stack_overflow);
} }
static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) { static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) {
__ SmiTag(x10, x0); __ SmiTag(x10, x0);
__ Mov(x11, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR)); __ Mov(x11, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR));
@ -2201,7 +2162,6 @@ static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) {
StandardFrameConstants::kFixedFrameSizeFromFp + kPointerSize); StandardFrameConstants::kFixedFrameSizeFromFp + kPointerSize);
} }
static void LeaveArgumentsAdaptorFrame(MacroAssembler* masm) { static void LeaveArgumentsAdaptorFrame(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- x0 : result being passed through // -- x0 : result being passed through
@ -2216,7 +2176,6 @@ static void LeaveArgumentsAdaptorFrame(MacroAssembler* masm) {
__ Drop(1); __ Drop(1);
} }
// static // static
void Builtins::Generate_Apply(MacroAssembler* masm) { void Builtins::Generate_Apply(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2557,7 +2516,6 @@ void Builtins::Generate_CallFunction(MacroAssembler* masm,
} }
} }
namespace { namespace {
void Generate_PushBoundArguments(MacroAssembler* masm) { void Generate_PushBoundArguments(MacroAssembler* masm) {
@ -2635,7 +2593,6 @@ void Generate_PushBoundArguments(MacroAssembler* masm) {
} // namespace } // namespace
// static // static
void Builtins::Generate_CallBoundFunctionImpl(MacroAssembler* masm, void Builtins::Generate_CallBoundFunctionImpl(MacroAssembler* masm,
TailCallMode tail_call_mode) { TailCallMode tail_call_mode) {
@ -2665,7 +2622,6 @@ void Builtins::Generate_CallBoundFunctionImpl(MacroAssembler* masm,
__ Br(x12); __ Br(x12);
} }
// static // static
void Builtins::Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode, void Builtins::Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode,
TailCallMode tail_call_mode) { TailCallMode tail_call_mode) {
@ -2725,7 +2681,6 @@ void Builtins::Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode,
} }
} }
// static // static
void Builtins::Generate_ConstructFunction(MacroAssembler* masm) { void Builtins::Generate_ConstructFunction(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2747,7 +2702,6 @@ void Builtins::Generate_ConstructFunction(MacroAssembler* masm) {
__ Br(x4); __ Br(x4);
} }
// static // static
void Builtins::Generate_ConstructBoundFunction(MacroAssembler* masm) { void Builtins::Generate_ConstructBoundFunction(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2778,7 +2732,6 @@ void Builtins::Generate_ConstructBoundFunction(MacroAssembler* masm) {
__ Br(x12); __ Br(x12);
} }
// static // static
void Builtins::Generate_ConstructProxy(MacroAssembler* masm) { void Builtins::Generate_ConstructProxy(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2798,7 +2751,6 @@ void Builtins::Generate_ConstructProxy(MacroAssembler* masm) {
ExternalReference(Runtime::kJSProxyConstruct, masm->isolate())); ExternalReference(Runtime::kJSProxyConstruct, masm->isolate()));
} }
// static // static
void Builtins::Generate_Construct(MacroAssembler* masm) { void Builtins::Generate_Construct(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2961,7 +2913,7 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
// -- x3 : new target (passed through to callee) // -- x3 : new target (passed through to callee)
// ----------------------------------- // -----------------------------------
Register argc_actual = x0; // Excluding the receiver. Register argc_actual = x0; // Excluding the receiver.
Register argc_expected = x2; // Excluding the receiver. Register argc_expected = x2; // Excluding the receiver.
Register function = x1; Register function = x1;
Register code_entry = x10; Register code_entry = x10;
@ -3002,9 +2954,9 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
Label copy_2_by_2; Label copy_2_by_2;
__ Bind(&copy_2_by_2); __ Bind(&copy_2_by_2);
__ Ldp(scratch1, scratch2, __ Ldp(scratch1, scratch2,
MemOperand(copy_start, - 2 * kPointerSize, PreIndex)); MemOperand(copy_start, -2 * kPointerSize, PreIndex));
__ Stp(scratch1, scratch2, __ Stp(scratch1, scratch2,
MemOperand(copy_to, - 2 * kPointerSize, PreIndex)); MemOperand(copy_to, -2 * kPointerSize, PreIndex));
__ Cmp(copy_start, copy_end); __ Cmp(copy_start, copy_end);
__ B(hi, &copy_2_by_2); __ B(hi, &copy_2_by_2);
@ -3032,7 +2984,7 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
__ Add(copy_from, fp, 3 * kPointerSize); __ Add(copy_from, fp, 3 * kPointerSize);
__ Add(copy_from, copy_from, argc_actual); __ Add(copy_from, copy_from, argc_actual);
__ Mov(copy_to, jssp); __ Mov(copy_to, jssp);
__ Sub(copy_end, copy_to, 1 * kPointerSize); // Adjust for the receiver. __ Sub(copy_end, copy_to, 1 * kPointerSize); // Adjust for the receiver.
__ Sub(copy_end, copy_end, argc_actual); __ Sub(copy_end, copy_end, argc_actual);
// Claim space for the arguments, the receiver, and one extra slot. // Claim space for the arguments, the receiver, and one extra slot.
@ -3045,9 +2997,9 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
Label copy_2_by_2; Label copy_2_by_2;
__ Bind(&copy_2_by_2); __ Bind(&copy_2_by_2);
__ Ldp(scratch1, scratch2, __ Ldp(scratch1, scratch2,
MemOperand(copy_from, - 2 * kPointerSize, PreIndex)); MemOperand(copy_from, -2 * kPointerSize, PreIndex));
__ Stp(scratch1, scratch2, __ Stp(scratch1, scratch2,
MemOperand(copy_to, - 2 * kPointerSize, PreIndex)); MemOperand(copy_to, -2 * kPointerSize, PreIndex));
__ Cmp(copy_to, copy_end); __ Cmp(copy_to, copy_end);
__ B(hi, &copy_2_by_2); __ B(hi, &copy_2_by_2);
@ -3060,7 +3012,7 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
Label fill; Label fill;
__ Bind(&fill); __ Bind(&fill);
__ Stp(scratch1, scratch1, __ Stp(scratch1, scratch1,
MemOperand(copy_to, - 2 * kPointerSize, PreIndex)); MemOperand(copy_to, -2 * kPointerSize, PreIndex));
__ Cmp(copy_to, copy_end); __ Cmp(copy_to, copy_end);
__ B(hi, &fill); __ B(hi, &fill);
@ -3097,7 +3049,6 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
} }
} }
#undef __ #undef __
} // namespace internal } // namespace internal

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "src/builtins.h" #include "src/builtins/builtins.h"
#include "src/api-arguments.h" #include "src/api-arguments.h"
#include "src/api-natives.h" #include "src/api-natives.h"
@ -43,12 +43,13 @@ class BuiltinArguments : public Arguments {
DCHECK_LE(1, this->length()); DCHECK_LE(1, this->length());
} }
Object*& operator[] (int index) { Object*& operator[](int index) {
DCHECK_LT(index, length()); DCHECK_LT(index, length());
return Arguments::operator[](index); return Arguments::operator[](index);
} }
template <class S> Handle<S> at(int index) { template <class S>
Handle<S> at(int index) {
DCHECK_LT(index, length()); DCHECK_LT(index, length());
return Arguments::at<S>(index); return Arguments::at<S>(index);
} }
@ -60,9 +61,7 @@ class BuiltinArguments : public Arguments {
return at<Object>(index); return at<Object>(index);
} }
Handle<Object> receiver() { Handle<Object> receiver() { return Arguments::at<Object>(0); }
return Arguments::at<Object>(0);
}
static const int kNewTargetOffset = 0; static const int kNewTargetOffset = 0;
static const int kTargetOffset = 1; static const int kTargetOffset = 1;
@ -84,7 +83,6 @@ class BuiltinArguments : public Arguments {
int length() const { return Arguments::length() - kNumExtraArgs; } int length() const { return Arguments::length() - kNumExtraArgs; }
}; };
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Support macro for defining builtins in C++. // Support macro for defining builtins in C++.
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@ -179,7 +177,6 @@ inline bool ClampedToInteger(Isolate* isolate, Object* object, int* out) {
return false; return false;
} }
inline bool GetSloppyArgumentsLength(Isolate* isolate, Handle<JSObject> object, inline bool GetSloppyArgumentsLength(Isolate* isolate, Handle<JSObject> object,
int* out) { int* out) {
Context* context = *isolate->native_context(); Context* context = *isolate->native_context();
@ -294,7 +291,7 @@ MUST_USE_RESULT static Object* CallJsIntrinsic(Isolate* isolate,
BuiltinArguments args) { BuiltinArguments args) {
HandleScope handleScope(isolate); HandleScope handleScope(isolate);
int argc = args.length() - 1; int argc = args.length() - 1;
ScopedVector<Handle<Object> > argv(argc); ScopedVector<Handle<Object>> argv(argc);
for (int i = 0; i < argc; ++i) { for (int i = 0; i < argc; ++i) {
argv[i] = args.at<Object>(i + 1); argv[i] = args.at<Object>(i + 1);
} }
@ -303,16 +300,13 @@ MUST_USE_RESULT static Object* CallJsIntrinsic(Isolate* isolate,
Execution::Call(isolate, function, args.receiver(), argc, argv.start())); Execution::Call(isolate, function, args.receiver(), argc, argv.start()));
} }
} // namespace } // namespace
BUILTIN(Illegal) { BUILTIN(Illegal) {
UNREACHABLE(); UNREACHABLE();
return isolate->heap()->undefined_value(); // Make compiler happy. return isolate->heap()->undefined_value(); // Make compiler happy.
} }
BUILTIN(EmptyFunction) { return isolate->heap()->undefined_value(); } BUILTIN(EmptyFunction) { return isolate->heap()->undefined_value(); }
void Builtins::Generate_ArrayIsArray(CodeStubAssembler* assembler) { void Builtins::Generate_ArrayIsArray(CodeStubAssembler* assembler) {
@ -465,7 +459,6 @@ BUILTIN(ArrayPop) {
return *result; return *result;
} }
BUILTIN(ArrayShift) { BUILTIN(ArrayShift) {
HandleScope scope(isolate); HandleScope scope(isolate);
Heap* heap = isolate->heap(); Heap* heap = isolate->heap();
@ -487,7 +480,6 @@ BUILTIN(ArrayShift) {
return *first; return *first;
} }
BUILTIN(ArrayUnshift) { BUILTIN(ArrayUnshift) {
HandleScope scope(isolate); HandleScope scope(isolate);
Handle<Object> receiver = args.receiver(); Handle<Object> receiver = args.receiver();
@ -510,7 +502,6 @@ BUILTIN(ArrayUnshift) {
return Smi::FromInt(new_length); return Smi::FromInt(new_length);
} }
BUILTIN(ArraySlice) { BUILTIN(ArraySlice) {
HandleScope scope(isolate); HandleScope scope(isolate);
Handle<Object> receiver = args.receiver(); Handle<Object> receiver = args.receiver();
@ -580,7 +571,6 @@ BUILTIN(ArraySlice) {
return *accessor->Slice(object, actual_start, actual_end); return *accessor->Slice(object, actual_start, actual_end);
} }
BUILTIN(ArraySplice) { BUILTIN(ArraySplice) {
HandleScope scope(isolate); HandleScope scope(isolate);
Handle<Object> receiver = args.receiver(); Handle<Object> receiver = args.receiver();
@ -641,7 +631,6 @@ BUILTIN(ArraySplice) {
return *result_array; return *result_array;
} }
// Array Concat ------------------------------------------------------------- // Array Concat -------------------------------------------------------------
namespace { namespace {
@ -817,7 +806,6 @@ class ArrayConcatVisitor {
uint32_t bit_field_; uint32_t bit_field_;
}; };
uint32_t EstimateElementCount(Handle<JSArray> array) { uint32_t EstimateElementCount(Handle<JSArray> array) {
DisallowHeapAllocation no_gc; DisallowHeapAllocation no_gc;
uint32_t length = static_cast<uint32_t>(array->length()->Number()); uint32_t length = static_cast<uint32_t>(array->length()->Number());
@ -887,7 +875,6 @@ uint32_t EstimateElementCount(Handle<JSArray> array) {
return element_count; return element_count;
} }
// Used for sorting indices in a List<uint32_t>. // Used for sorting indices in a List<uint32_t>.
int compareUInt32(const uint32_t* ap, const uint32_t* bp) { int compareUInt32(const uint32_t* ap, const uint32_t* bp) {
uint32_t a = *ap; uint32_t a = *ap;
@ -895,7 +882,6 @@ int compareUInt32(const uint32_t* ap, const uint32_t* bp) {
return (a == b) ? 0 : (a < b) ? -1 : 1; return (a == b) ? 0 : (a < b) ? -1 : 1;
} }
void CollectElementIndices(Handle<JSObject> object, uint32_t range, void CollectElementIndices(Handle<JSObject> object, uint32_t range,
List<uint32_t>* indices) { List<uint32_t>* indices) {
Isolate* isolate = object->GetIsolate(); Isolate* isolate = object->GetIsolate();
@ -1011,7 +997,6 @@ void CollectElementIndices(Handle<JSObject> object, uint32_t range,
} }
} }
bool IterateElementsSlow(Isolate* isolate, Handle<JSReceiver> receiver, bool IterateElementsSlow(Isolate* isolate, Handle<JSReceiver> receiver,
uint32_t length, ArrayConcatVisitor* visitor) { uint32_t length, ArrayConcatVisitor* visitor) {
FOR_WITH_HANDLE_SCOPE(isolate, uint32_t, i = 0, i, i < length, ++i, { FOR_WITH_HANDLE_SCOPE(isolate, uint32_t, i = 0, i, i < length, ++i, {
@ -1029,7 +1014,6 @@ bool IterateElementsSlow(Isolate* isolate, Handle<JSReceiver> receiver,
return true; return true;
} }
/** /**
* A helper function that visits "array" elements of a JSReceiver in numerical * A helper function that visits "array" elements of a JSReceiver in numerical
* order. * order.
@ -1442,7 +1426,6 @@ MaybeHandle<JSArray> Fast_ArrayConcat(Isolate* isolate,
} // namespace } // namespace
// ES6 22.1.3.1 Array.prototype.concat // ES6 22.1.3.1 Array.prototype.concat
BUILTIN(ArrayConcat) { BUILTIN(ArrayConcat) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -1484,7 +1467,6 @@ BUILTIN(ArrayConcat) {
return Slow_ArrayConcat(&args, species, isolate); return Slow_ArrayConcat(&args, species, isolate);
} }
namespace { namespace {
MUST_USE_RESULT Maybe<bool> FastAssign(Handle<JSReceiver> to, MUST_USE_RESULT Maybe<bool> FastAssign(Handle<JSReceiver> to,
@ -1624,7 +1606,6 @@ BUILTIN(ObjectAssign) {
return *to; return *to;
} }
// ES6 section 19.1.2.2 Object.create ( O [ , Properties ] ) // ES6 section 19.1.2.2 Object.create ( O [ , Properties ] )
// TODO(verwaest): Support the common cases with precached map directly in // TODO(verwaest): Support the common cases with precached map directly in
// an Object.create stub. // an Object.create stub.
@ -1841,21 +1822,19 @@ BUILTIN(ObjectFreeze) {
return *object; return *object;
} }
// ES section 19.1.2.9 Object.getPrototypeOf ( O ) // ES section 19.1.2.9 Object.getPrototypeOf ( O )
BUILTIN(ObjectGetPrototypeOf) { BUILTIN(ObjectGetPrototypeOf) {
HandleScope scope(isolate); HandleScope scope(isolate);
Handle<Object> object = args.atOrUndefined(isolate, 1); Handle<Object> object = args.atOrUndefined(isolate, 1);
Handle<JSReceiver> receiver; Handle<JSReceiver> receiver;
ASSIGN_RETURN_FAILURE_ON_EXCEPTION( ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, receiver,
isolate, receiver, Object::ToObject(isolate, object)); Object::ToObject(isolate, object));
RETURN_RESULT_OR_FAILURE(isolate, RETURN_RESULT_OR_FAILURE(isolate,
JSReceiver::GetPrototype(isolate, receiver)); JSReceiver::GetPrototype(isolate, receiver));
} }
// ES6 section 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P ) // ES6 section 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
BUILTIN(ObjectGetOwnPropertyDescriptor) { BUILTIN(ObjectGetOwnPropertyDescriptor) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -1879,7 +1858,6 @@ BUILTIN(ObjectGetOwnPropertyDescriptor) {
return *desc.ToObject(isolate); return *desc.ToObject(isolate);
} }
namespace { namespace {
Object* GetOwnPropertyKeys(Isolate* isolate, BuiltinArguments args, Object* GetOwnPropertyKeys(Isolate* isolate, BuiltinArguments args,
@ -1899,19 +1877,16 @@ Object* GetOwnPropertyKeys(Isolate* isolate, BuiltinArguments args,
} // namespace } // namespace
// ES6 section 19.1.2.7 Object.getOwnPropertyNames ( O ) // ES6 section 19.1.2.7 Object.getOwnPropertyNames ( O )
BUILTIN(ObjectGetOwnPropertyNames) { BUILTIN(ObjectGetOwnPropertyNames) {
return GetOwnPropertyKeys(isolate, args, SKIP_SYMBOLS); return GetOwnPropertyKeys(isolate, args, SKIP_SYMBOLS);
} }
// ES6 section 19.1.2.8 Object.getOwnPropertySymbols ( O ) // ES6 section 19.1.2.8 Object.getOwnPropertySymbols ( O )
BUILTIN(ObjectGetOwnPropertySymbols) { BUILTIN(ObjectGetOwnPropertySymbols) {
return GetOwnPropertyKeys(isolate, args, SKIP_STRINGS); return GetOwnPropertyKeys(isolate, args, SKIP_STRINGS);
} }
// ES#sec-object.is Object.is ( value1, value2 ) // ES#sec-object.is Object.is ( value1, value2 )
BUILTIN(ObjectIs) { BUILTIN(ObjectIs) {
SealHandleScope shs(isolate); SealHandleScope shs(isolate);
@ -1921,7 +1896,6 @@ BUILTIN(ObjectIs) {
return isolate->heap()->ToBoolean(value1->SameValue(*value2)); return isolate->heap()->ToBoolean(value1->SameValue(*value2));
} }
// ES6 section 19.1.2.11 Object.isExtensible ( O ) // ES6 section 19.1.2.11 Object.isExtensible ( O )
BUILTIN(ObjectIsExtensible) { BUILTIN(ObjectIsExtensible) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -1934,7 +1908,6 @@ BUILTIN(ObjectIsExtensible) {
return isolate->heap()->ToBoolean(result.FromJust()); return isolate->heap()->ToBoolean(result.FromJust());
} }
// ES6 section 19.1.2.12 Object.isFrozen ( O ) // ES6 section 19.1.2.12 Object.isFrozen ( O )
BUILTIN(ObjectIsFrozen) { BUILTIN(ObjectIsFrozen) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -1947,7 +1920,6 @@ BUILTIN(ObjectIsFrozen) {
return isolate->heap()->ToBoolean(result.FromJust()); return isolate->heap()->ToBoolean(result.FromJust());
} }
// ES6 section 19.1.2.13 Object.isSealed ( O ) // ES6 section 19.1.2.13 Object.isSealed ( O )
BUILTIN(ObjectIsSealed) { BUILTIN(ObjectIsSealed) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -1960,7 +1932,6 @@ BUILTIN(ObjectIsSealed) {
return isolate->heap()->ToBoolean(result.FromJust()); return isolate->heap()->ToBoolean(result.FromJust());
} }
// ES6 section 19.1.2.14 Object.keys ( O ) // ES6 section 19.1.2.14 Object.keys ( O )
BUILTIN(ObjectKeys) { BUILTIN(ObjectKeys) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -2008,7 +1979,6 @@ BUILTIN(ObjectValues) {
return *isolate->factory()->NewJSArrayWithElements(values); return *isolate->factory()->NewJSArrayWithElements(values);
} }
BUILTIN(ObjectEntries) { BUILTIN(ObjectEntries) {
HandleScope scope(isolate); HandleScope scope(isolate);
Handle<Object> object = args.atOrUndefined(isolate, 1); Handle<Object> object = args.atOrUndefined(isolate, 1);
@ -2071,7 +2041,6 @@ BUILTIN(ObjectPreventExtensions) {
return *object; return *object;
} }
// ES6 section 19.1.2.17 Object.seal ( O ) // ES6 section 19.1.2.17 Object.seal ( O )
BUILTIN(ObjectSeal) { BUILTIN(ObjectSeal) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -2169,7 +2138,6 @@ bool CodeGenerationFromStringsAllowed(Isolate* isolate,
} }
} }
MaybeHandle<JSFunction> CompileString(Handle<Context> context, MaybeHandle<JSFunction> CompileString(Handle<Context> context,
Handle<String> source, Handle<String> source,
ParseRestriction restriction) { ParseRestriction restriction) {
@ -2198,7 +2166,6 @@ MaybeHandle<JSFunction> CompileString(Handle<Context> context,
} // namespace } // namespace
// ES6 section 18.2.1 eval (x) // ES6 section 18.2.1 eval (x)
BUILTIN(GlobalEval) { BUILTIN(GlobalEval) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -3033,8 +3000,8 @@ void Generate_GeneratorPrototypeResume(
Node* receiver = assembler->Parameter(0); Node* receiver = assembler->Parameter(0);
Node* value = assembler->Parameter(1); Node* value = assembler->Parameter(1);
Node* context = assembler->Parameter(4); Node* context = assembler->Parameter(4);
Node* closed = assembler->SmiConstant( Node* closed =
Smi::FromInt(JSGeneratorObject::kGeneratorClosed)); assembler->SmiConstant(Smi::FromInt(JSGeneratorObject::kGeneratorClosed));
// Check if the {receiver} is actually a JSGeneratorObject. // Check if the {receiver} is actually a JSGeneratorObject.
Label if_receiverisincompatible(assembler, Label::kDeferred); Label if_receiverisincompatible(assembler, Label::kDeferred);
@ -3158,7 +3125,6 @@ BUILTIN(ReflectDefineProperty) {
return *isolate->factory()->ToBoolean(result.FromJust()); return *isolate->factory()->ToBoolean(result.FromJust());
} }
// ES6 section 26.1.4 Reflect.deleteProperty // ES6 section 26.1.4 Reflect.deleteProperty
BUILTIN(ReflectDeleteProperty) { BUILTIN(ReflectDeleteProperty) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -3183,7 +3149,6 @@ BUILTIN(ReflectDeleteProperty) {
return *isolate->factory()->ToBoolean(result.FromJust()); return *isolate->factory()->ToBoolean(result.FromJust());
} }
// ES6 section 26.1.6 Reflect.get // ES6 section 26.1.6 Reflect.get
BUILTIN(ReflectGet) { BUILTIN(ReflectGet) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -3207,7 +3172,6 @@ BUILTIN(ReflectGet) {
Handle<JSReceiver>::cast(target))); Handle<JSReceiver>::cast(target)));
} }
// ES6 section 26.1.7 Reflect.getOwnPropertyDescriptor // ES6 section 26.1.7 Reflect.getOwnPropertyDescriptor
BUILTIN(ReflectGetOwnPropertyDescriptor) { BUILTIN(ReflectGetOwnPropertyDescriptor) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -3234,7 +3198,6 @@ BUILTIN(ReflectGetOwnPropertyDescriptor) {
return *desc.ToObject(isolate); return *desc.ToObject(isolate);
} }
// ES6 section 26.1.8 Reflect.getPrototypeOf // ES6 section 26.1.8 Reflect.getPrototypeOf
BUILTIN(ReflectGetPrototypeOf) { BUILTIN(ReflectGetPrototypeOf) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -3252,7 +3215,6 @@ BUILTIN(ReflectGetPrototypeOf) {
JSReceiver::GetPrototype(isolate, receiver)); JSReceiver::GetPrototype(isolate, receiver));
} }
// ES6 section 26.1.9 Reflect.has // ES6 section 26.1.9 Reflect.has
BUILTIN(ReflectHas) { BUILTIN(ReflectHas) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -3277,7 +3239,6 @@ BUILTIN(ReflectHas) {
: isolate->heap()->exception(); : isolate->heap()->exception();
} }
// ES6 section 26.1.10 Reflect.isExtensible // ES6 section 26.1.10 Reflect.isExtensible
BUILTIN(ReflectIsExtensible) { BUILTIN(ReflectIsExtensible) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -3297,7 +3258,6 @@ BUILTIN(ReflectIsExtensible) {
return *isolate->factory()->ToBoolean(result.FromJust()); return *isolate->factory()->ToBoolean(result.FromJust());
} }
// ES6 section 26.1.11 Reflect.ownKeys // ES6 section 26.1.11 Reflect.ownKeys
BUILTIN(ReflectOwnKeys) { BUILTIN(ReflectOwnKeys) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -3320,7 +3280,6 @@ BUILTIN(ReflectOwnKeys) {
return *isolate->factory()->NewJSArrayWithElements(keys); return *isolate->factory()->NewJSArrayWithElements(keys);
} }
// ES6 section 26.1.12 Reflect.preventExtensions // ES6 section 26.1.12 Reflect.preventExtensions
BUILTIN(ReflectPreventExtensions) { BUILTIN(ReflectPreventExtensions) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -3340,7 +3299,6 @@ BUILTIN(ReflectPreventExtensions) {
return *isolate->factory()->ToBoolean(result.FromJust()); return *isolate->factory()->ToBoolean(result.FromJust());
} }
// ES6 section 26.1.13 Reflect.set // ES6 section 26.1.13 Reflect.set
BUILTIN(ReflectSet) { BUILTIN(ReflectSet) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -3368,7 +3326,6 @@ BUILTIN(ReflectSet) {
return *isolate->factory()->ToBoolean(result.FromJust()); return *isolate->factory()->ToBoolean(result.FromJust());
} }
// ES6 section 26.1.14 Reflect.setPrototypeOf // ES6 section 26.1.14 Reflect.setPrototypeOf
BUILTIN(ReflectSetPrototypeOf) { BUILTIN(ReflectSetPrototypeOf) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -3394,11 +3351,9 @@ BUILTIN(ReflectSetPrototypeOf) {
return *isolate->factory()->ToBoolean(result.FromJust()); return *isolate->factory()->ToBoolean(result.FromJust());
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// ES6 section 19.3 Boolean Objects // ES6 section 19.3 Boolean Objects
// ES6 section 19.3.1.1 Boolean ( value ) for the [[Call]] case. // ES6 section 19.3.1.1 Boolean ( value ) for the [[Call]] case.
BUILTIN(BooleanConstructor) { BUILTIN(BooleanConstructor) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -3406,7 +3361,6 @@ BUILTIN(BooleanConstructor) {
return isolate->heap()->ToBoolean(value->BooleanValue()); return isolate->heap()->ToBoolean(value->BooleanValue());
} }
// ES6 section 19.3.1.1 Boolean ( value ) for the [[Construct]] case. // ES6 section 19.3.1.1 Boolean ( value ) for the [[Construct]] case.
BUILTIN(BooleanConstructor_ConstructStub) { BUILTIN(BooleanConstructor_ConstructStub) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -3422,7 +3376,6 @@ BUILTIN(BooleanConstructor_ConstructStub) {
return *result; return *result;
} }
// ES6 section 19.3.3.2 Boolean.prototype.toString ( ) // ES6 section 19.3.3.2 Boolean.prototype.toString ( )
void Builtins::Generate_BooleanPrototypeToString(CodeStubAssembler* assembler) { void Builtins::Generate_BooleanPrototypeToString(CodeStubAssembler* assembler) {
typedef compiler::Node Node; typedef compiler::Node Node;
@ -3451,7 +3404,6 @@ void Builtins::Generate_BooleanPrototypeValueOf(CodeStubAssembler* assembler) {
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// ES6 section 24.2 DataView Objects // ES6 section 24.2 DataView Objects
// ES6 section 24.2.2 The DataView Constructor for the [[Call]] case. // ES6 section 24.2.2 The DataView Constructor for the [[Call]] case.
BUILTIN(DataViewConstructor) { BUILTIN(DataViewConstructor) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -3461,7 +3413,6 @@ BUILTIN(DataViewConstructor) {
isolate->factory()->NewStringFromAsciiChecked("DataView"))); isolate->factory()->NewStringFromAsciiChecked("DataView")));
} }
// ES6 section 24.2.2 The DataView Constructor for the [[Construct]] case. // ES6 section 24.2.2 The DataView Constructor for the [[Construct]] case.
BUILTIN(DataViewConstructor_ConstructStub) { BUILTIN(DataViewConstructor_ConstructStub) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -3527,8 +3478,8 @@ BUILTIN(DataViewConstructor_ConstructStub) {
// a. Let viewByteLength be ? ToLength(byteLength). // a. Let viewByteLength be ? ToLength(byteLength).
// b. If offset+viewByteLength > bufferByteLength, throw a RangeError // b. If offset+viewByteLength > bufferByteLength, throw a RangeError
// exception // exception
ASSIGN_RETURN_FAILURE_ON_EXCEPTION( ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, view_byte_length,
isolate, view_byte_length, Object::ToLength(isolate, byte_length)); Object::ToLength(isolate, byte_length));
if (offset->Number() + view_byte_length->Number() > buffer_byte_length) { if (offset->Number() + view_byte_length->Number() > buffer_byte_length) {
THROW_NEW_ERROR_RETURN_FAILURE( THROW_NEW_ERROR_RETURN_FAILURE(
isolate, NewRangeError(MessageTemplate::kInvalidDataViewLength)); isolate, NewRangeError(MessageTemplate::kInvalidDataViewLength));
@ -3676,7 +3627,6 @@ void Builtins::Generate_TypedArrayPrototypeLength(
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// ES6 section 20.3 Date Objects // ES6 section 20.3 Date Objects
namespace { namespace {
// ES6 section 20.3.1.1 Time Values and Time Range // ES6 section 20.3.1.1 Time Values and Time Range
@ -3685,17 +3635,14 @@ const double kMaxYear = -kMinYear;
const double kMinMonth = -10000000.0; const double kMinMonth = -10000000.0;
const double kMaxMonth = -kMinMonth; const double kMaxMonth = -kMinMonth;
// 20.3.1.2 Day Number and Time within Day // 20.3.1.2 Day Number and Time within Day
const double kMsPerDay = 86400000.0; const double kMsPerDay = 86400000.0;
// ES6 section 20.3.1.11 Hours, Minutes, Second, and Milliseconds // ES6 section 20.3.1.11 Hours, Minutes, Second, and Milliseconds
const double kMsPerSecond = 1000.0; const double kMsPerSecond = 1000.0;
const double kMsPerMinute = 60000.0; const double kMsPerMinute = 60000.0;
const double kMsPerHour = 3600000.0; const double kMsPerHour = 3600000.0;
// ES6 section 20.3.1.14 MakeDate (day, time) // ES6 section 20.3.1.14 MakeDate (day, time)
double MakeDate(double day, double time) { double MakeDate(double day, double time) {
if (std::isfinite(day) && std::isfinite(time)) { if (std::isfinite(day) && std::isfinite(time)) {
@ -3704,7 +3651,6 @@ double MakeDate(double day, double time) {
return std::numeric_limits<double>::quiet_NaN(); return std::numeric_limits<double>::quiet_NaN();
} }
// ES6 section 20.3.1.13 MakeDay (year, month, date) // ES6 section 20.3.1.13 MakeDay (year, month, date)
double MakeDay(double year, double month, double date) { double MakeDay(double year, double month, double date) {
if ((kMinYear <= year && year <= kMaxYear) && if ((kMinYear <= year && year <= kMaxYear) &&
@ -3749,7 +3695,6 @@ double MakeDay(double year, double month, double date) {
return std::numeric_limits<double>::quiet_NaN(); return std::numeric_limits<double>::quiet_NaN();
} }
// ES6 section 20.3.1.12 MakeTime (hour, min, sec, ms) // ES6 section 20.3.1.12 MakeTime (hour, min, sec, ms)
double MakeTime(double hour, double min, double sec, double ms) { double MakeTime(double hour, double min, double sec, double ms) {
if (std::isfinite(hour) && std::isfinite(min) && std::isfinite(sec) && if (std::isfinite(hour) && std::isfinite(min) && std::isfinite(sec) &&
@ -3763,7 +3708,6 @@ double MakeTime(double hour, double min, double sec, double ms) {
return std::numeric_limits<double>::quiet_NaN(); return std::numeric_limits<double>::quiet_NaN();
} }
// ES6 section 20.3.1.15 TimeClip (time) // ES6 section 20.3.1.15 TimeClip (time)
double TimeClip(double time) { double TimeClip(double time) {
if (-DateCache::kMaxTimeInMs <= time && time <= DateCache::kMaxTimeInMs) { if (-DateCache::kMaxTimeInMs <= time && time <= DateCache::kMaxTimeInMs) {
@ -3772,13 +3716,11 @@ double TimeClip(double time) {
return std::numeric_limits<double>::quiet_NaN(); return std::numeric_limits<double>::quiet_NaN();
} }
const char* kShortWeekDays[] = {"Sun", "Mon", "Tue", "Wed", const char* kShortWeekDays[] = {"Sun", "Mon", "Tue", "Wed",
"Thu", "Fri", "Sat"}; "Thu", "Fri", "Sat"};
const char* kShortMonths[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", const char* kShortMonths[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
// ES6 section 20.3.1.16 Date Time String Format // ES6 section 20.3.1.16 Date Time String Format
double ParseDateTimeString(Handle<String> str) { double ParseDateTimeString(Handle<String> str) {
Isolate* const isolate = str->GetIsolate(); Isolate* const isolate = str->GetIsolate();
@ -3810,10 +3752,8 @@ double ParseDateTimeString(Handle<String> str) {
return date; return date;
} }
enum ToDateStringMode { kDateOnly, kTimeOnly, kDateAndTime }; enum ToDateStringMode { kDateOnly, kTimeOnly, kDateAndTime };
// ES6 section 20.3.4.41.1 ToDateString(tv) // ES6 section 20.3.4.41.1 ToDateString(tv)
void ToDateString(double time_val, Vector<char> str, DateCache* date_cache, void ToDateString(double time_val, Vector<char> str, DateCache* date_cache,
ToDateStringMode mode = kDateAndTime) { ToDateStringMode mode = kDateAndTime) {
@ -3850,7 +3790,6 @@ void ToDateString(double time_val, Vector<char> str, DateCache* date_cache,
UNREACHABLE(); UNREACHABLE();
} }
Object* SetLocalDateValue(Handle<JSDate> date, double time_val) { Object* SetLocalDateValue(Handle<JSDate> date, double time_val) {
if (time_val >= -DateCache::kMaxTimeBeforeUTCInMs && if (time_val >= -DateCache::kMaxTimeBeforeUTCInMs &&
time_val <= DateCache::kMaxTimeBeforeUTCInMs) { time_val <= DateCache::kMaxTimeBeforeUTCInMs) {
@ -3864,7 +3803,6 @@ Object* SetLocalDateValue(Handle<JSDate> date, double time_val) {
} // namespace } // namespace
// ES6 section 20.3.2 The Date Constructor for the [[Call]] case. // ES6 section 20.3.2 The Date Constructor for the [[Call]] case.
BUILTIN(DateConstructor) { BUILTIN(DateConstructor) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -3875,7 +3813,6 @@ BUILTIN(DateConstructor) {
isolate, isolate->factory()->NewStringFromUtf8(CStrVector(buffer))); isolate, isolate->factory()->NewStringFromUtf8(CStrVector(buffer)));
} }
// ES6 section 20.3.2 The Date Constructor for the [[Construct]] case. // ES6 section 20.3.2 The Date Constructor for the [[Construct]] case.
BUILTIN(DateConstructor_ConstructStub) { BUILTIN(DateConstructor_ConstructStub) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -3957,14 +3894,12 @@ BUILTIN(DateConstructor_ConstructStub) {
RETURN_RESULT_OR_FAILURE(isolate, JSDate::New(target, new_target, time_val)); RETURN_RESULT_OR_FAILURE(isolate, JSDate::New(target, new_target, time_val));
} }
// ES6 section 20.3.3.1 Date.now ( ) // ES6 section 20.3.3.1 Date.now ( )
BUILTIN(DateNow) { BUILTIN(DateNow) {
HandleScope scope(isolate); HandleScope scope(isolate);
return *isolate->factory()->NewNumber(JSDate::CurrentTimeValue(isolate)); return *isolate->factory()->NewNumber(JSDate::CurrentTimeValue(isolate));
} }
// ES6 section 20.3.3.2 Date.parse ( string ) // ES6 section 20.3.3.2 Date.parse ( string )
BUILTIN(DateParse) { BUILTIN(DateParse) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -3975,7 +3910,6 @@ BUILTIN(DateParse) {
return *isolate->factory()->NewNumber(ParseDateTimeString(string)); return *isolate->factory()->NewNumber(ParseDateTimeString(string));
} }
// ES6 section 20.3.3.4 Date.UTC (year,month,date,hours,minutes,seconds,ms) // ES6 section 20.3.3.4 Date.UTC (year,month,date,hours,minutes,seconds,ms)
BUILTIN(DateUTC) { BUILTIN(DateUTC) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4035,7 +3969,6 @@ BUILTIN(DateUTC) {
return *isolate->factory()->NewNumber(TimeClip(MakeDate(day, time))); return *isolate->factory()->NewNumber(TimeClip(MakeDate(day, time)));
} }
// ES6 section 20.3.4.20 Date.prototype.setDate ( date ) // ES6 section 20.3.4.20 Date.prototype.setDate ( date )
BUILTIN(DatePrototypeSetDate) { BUILTIN(DatePrototypeSetDate) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4055,7 +3988,6 @@ BUILTIN(DatePrototypeSetDate) {
return SetLocalDateValue(date, time_val); return SetLocalDateValue(date, time_val);
} }
// ES6 section 20.3.4.21 Date.prototype.setFullYear (year, month, date) // ES6 section 20.3.4.21 Date.prototype.setFullYear (year, month, date)
BUILTIN(DatePrototypeSetFullYear) { BUILTIN(DatePrototypeSetFullYear) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4089,7 +4021,6 @@ BUILTIN(DatePrototypeSetFullYear) {
return SetLocalDateValue(date, time_val); return SetLocalDateValue(date, time_val);
} }
// ES6 section 20.3.4.22 Date.prototype.setHours(hour, min, sec, ms) // ES6 section 20.3.4.22 Date.prototype.setHours(hour, min, sec, ms)
BUILTIN(DatePrototypeSetHours) { BUILTIN(DatePrototypeSetHours) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4127,7 +4058,6 @@ BUILTIN(DatePrototypeSetHours) {
return SetLocalDateValue(date, time_val); return SetLocalDateValue(date, time_val);
} }
// ES6 section 20.3.4.23 Date.prototype.setMilliseconds(ms) // ES6 section 20.3.4.23 Date.prototype.setMilliseconds(ms)
BUILTIN(DatePrototypeSetMilliseconds) { BUILTIN(DatePrototypeSetMilliseconds) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4148,7 +4078,6 @@ BUILTIN(DatePrototypeSetMilliseconds) {
return SetLocalDateValue(date, time_val); return SetLocalDateValue(date, time_val);
} }
// ES6 section 20.3.4.24 Date.prototype.setMinutes ( min, sec, ms ) // ES6 section 20.3.4.24 Date.prototype.setMinutes ( min, sec, ms )
BUILTIN(DatePrototypeSetMinutes) { BUILTIN(DatePrototypeSetMinutes) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4181,7 +4110,6 @@ BUILTIN(DatePrototypeSetMinutes) {
return SetLocalDateValue(date, time_val); return SetLocalDateValue(date, time_val);
} }
// ES6 section 20.3.4.25 Date.prototype.setMonth ( month, date ) // ES6 section 20.3.4.25 Date.prototype.setMonth ( month, date )
BUILTIN(DatePrototypeSetMonth) { BUILTIN(DatePrototypeSetMonth) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4209,7 +4137,6 @@ BUILTIN(DatePrototypeSetMonth) {
return SetLocalDateValue(date, time_val); return SetLocalDateValue(date, time_val);
} }
// ES6 section 20.3.4.26 Date.prototype.setSeconds ( sec, ms ) // ES6 section 20.3.4.26 Date.prototype.setSeconds ( sec, ms )
BUILTIN(DatePrototypeSetSeconds) { BUILTIN(DatePrototypeSetSeconds) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4237,7 +4164,6 @@ BUILTIN(DatePrototypeSetSeconds) {
return SetLocalDateValue(date, time_val); return SetLocalDateValue(date, time_val);
} }
// ES6 section 20.3.4.27 Date.prototype.setTime ( time ) // ES6 section 20.3.4.27 Date.prototype.setTime ( time )
BUILTIN(DatePrototypeSetTime) { BUILTIN(DatePrototypeSetTime) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4247,7 +4173,6 @@ BUILTIN(DatePrototypeSetTime) {
return *JSDate::SetValue(date, TimeClip(value->Number())); return *JSDate::SetValue(date, TimeClip(value->Number()));
} }
// ES6 section 20.3.4.28 Date.prototype.setUTCDate ( date ) // ES6 section 20.3.4.28 Date.prototype.setUTCDate ( date )
BUILTIN(DatePrototypeSetUTCDate) { BUILTIN(DatePrototypeSetUTCDate) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4265,7 +4190,6 @@ BUILTIN(DatePrototypeSetUTCDate) {
return *JSDate::SetValue(date, TimeClip(time_val)); return *JSDate::SetValue(date, TimeClip(time_val));
} }
// ES6 section 20.3.4.29 Date.prototype.setUTCFullYear (year, month, date) // ES6 section 20.3.4.29 Date.prototype.setUTCFullYear (year, month, date)
BUILTIN(DatePrototypeSetUTCFullYear) { BUILTIN(DatePrototypeSetUTCFullYear) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4298,7 +4222,6 @@ BUILTIN(DatePrototypeSetUTCFullYear) {
return *JSDate::SetValue(date, TimeClip(time_val)); return *JSDate::SetValue(date, TimeClip(time_val));
} }
// ES6 section 20.3.4.30 Date.prototype.setUTCHours(hour, min, sec, ms) // ES6 section 20.3.4.30 Date.prototype.setUTCHours(hour, min, sec, ms)
BUILTIN(DatePrototypeSetUTCHours) { BUILTIN(DatePrototypeSetUTCHours) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4335,7 +4258,6 @@ BUILTIN(DatePrototypeSetUTCHours) {
return *JSDate::SetValue(date, TimeClip(time_val)); return *JSDate::SetValue(date, TimeClip(time_val));
} }
// ES6 section 20.3.4.31 Date.prototype.setUTCMilliseconds(ms) // ES6 section 20.3.4.31 Date.prototype.setUTCMilliseconds(ms)
BUILTIN(DatePrototypeSetUTCMilliseconds) { BUILTIN(DatePrototypeSetUTCMilliseconds) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4355,7 +4277,6 @@ BUILTIN(DatePrototypeSetUTCMilliseconds) {
return *JSDate::SetValue(date, TimeClip(time_val)); return *JSDate::SetValue(date, TimeClip(time_val));
} }
// ES6 section 20.3.4.32 Date.prototype.setUTCMinutes ( min, sec, ms ) // ES6 section 20.3.4.32 Date.prototype.setUTCMinutes ( min, sec, ms )
BUILTIN(DatePrototypeSetUTCMinutes) { BUILTIN(DatePrototypeSetUTCMinutes) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4387,7 +4308,6 @@ BUILTIN(DatePrototypeSetUTCMinutes) {
return *JSDate::SetValue(date, TimeClip(time_val)); return *JSDate::SetValue(date, TimeClip(time_val));
} }
// ES6 section 20.3.4.31 Date.prototype.setUTCMonth ( month, date ) // ES6 section 20.3.4.31 Date.prototype.setUTCMonth ( month, date )
BUILTIN(DatePrototypeSetUTCMonth) { BUILTIN(DatePrototypeSetUTCMonth) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4414,7 +4334,6 @@ BUILTIN(DatePrototypeSetUTCMonth) {
return *JSDate::SetValue(date, TimeClip(time_val)); return *JSDate::SetValue(date, TimeClip(time_val));
} }
// ES6 section 20.3.4.34 Date.prototype.setUTCSeconds ( sec, ms ) // ES6 section 20.3.4.34 Date.prototype.setUTCSeconds ( sec, ms )
BUILTIN(DatePrototypeSetUTCSeconds) { BUILTIN(DatePrototypeSetUTCSeconds) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4441,7 +4360,6 @@ BUILTIN(DatePrototypeSetUTCSeconds) {
return *JSDate::SetValue(date, TimeClip(time_val)); return *JSDate::SetValue(date, TimeClip(time_val));
} }
// ES6 section 20.3.4.35 Date.prototype.toDateString ( ) // ES6 section 20.3.4.35 Date.prototype.toDateString ( )
BUILTIN(DatePrototypeToDateString) { BUILTIN(DatePrototypeToDateString) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4453,7 +4371,6 @@ BUILTIN(DatePrototypeToDateString) {
isolate, isolate->factory()->NewStringFromUtf8(CStrVector(buffer))); isolate, isolate->factory()->NewStringFromUtf8(CStrVector(buffer)));
} }
// ES6 section 20.3.4.36 Date.prototype.toISOString ( ) // ES6 section 20.3.4.36 Date.prototype.toISOString ( )
BUILTIN(DatePrototypeToISOString) { BUILTIN(DatePrototypeToISOString) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4481,7 +4398,6 @@ BUILTIN(DatePrototypeToISOString) {
return *isolate->factory()->NewStringFromAsciiChecked(buffer); return *isolate->factory()->NewStringFromAsciiChecked(buffer);
} }
// ES6 section 20.3.4.41 Date.prototype.toString ( ) // ES6 section 20.3.4.41 Date.prototype.toString ( )
BUILTIN(DatePrototypeToString) { BUILTIN(DatePrototypeToString) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4493,7 +4409,6 @@ BUILTIN(DatePrototypeToString) {
isolate, isolate->factory()->NewStringFromUtf8(CStrVector(buffer))); isolate, isolate->factory()->NewStringFromUtf8(CStrVector(buffer)));
} }
// ES6 section 20.3.4.42 Date.prototype.toTimeString ( ) // ES6 section 20.3.4.42 Date.prototype.toTimeString ( )
BUILTIN(DatePrototypeToTimeString) { BUILTIN(DatePrototypeToTimeString) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4505,7 +4420,6 @@ BUILTIN(DatePrototypeToTimeString) {
isolate, isolate->factory()->NewStringFromUtf8(CStrVector(buffer))); isolate, isolate->factory()->NewStringFromUtf8(CStrVector(buffer)));
} }
// ES6 section 20.3.4.43 Date.prototype.toUTCString ( ) // ES6 section 20.3.4.43 Date.prototype.toUTCString ( )
BUILTIN(DatePrototypeToUTCString) { BUILTIN(DatePrototypeToUTCString) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4525,7 +4439,6 @@ BUILTIN(DatePrototypeToUTCString) {
return *isolate->factory()->NewStringFromAsciiChecked(buffer); return *isolate->factory()->NewStringFromAsciiChecked(buffer);
} }
// ES6 section 20.3.4.44 Date.prototype.valueOf ( ) // ES6 section 20.3.4.44 Date.prototype.valueOf ( )
BUILTIN(DatePrototypeValueOf) { BUILTIN(DatePrototypeValueOf) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4533,7 +4446,6 @@ BUILTIN(DatePrototypeValueOf) {
return date->value(); return date->value();
} }
// ES6 section 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint ) // ES6 section 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
BUILTIN(DatePrototypeToPrimitive) { BUILTIN(DatePrototypeToPrimitive) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4543,7 +4455,6 @@ BUILTIN(DatePrototypeToPrimitive) {
RETURN_RESULT_OR_FAILURE(isolate, JSDate::ToPrimitive(receiver, hint)); RETURN_RESULT_OR_FAILURE(isolate, JSDate::ToPrimitive(receiver, hint));
} }
// ES6 section B.2.4.1 Date.prototype.getYear ( ) // ES6 section B.2.4.1 Date.prototype.getYear ( )
BUILTIN(DatePrototypeGetYear) { BUILTIN(DatePrototypeGetYear) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4558,7 +4469,6 @@ BUILTIN(DatePrototypeGetYear) {
return Smi::FromInt(year - 1900); return Smi::FromInt(year - 1900);
} }
// ES6 section B.2.4.2 Date.prototype.setYear ( year ) // ES6 section B.2.4.2 Date.prototype.setYear ( year )
BUILTIN(DatePrototypeSetYear) { BUILTIN(DatePrototypeSetYear) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4617,109 +4527,91 @@ void Builtins::Generate_DatePrototypeGetDate(MacroAssembler* masm) {
Generate_DatePrototype_GetField(masm, JSDate::kDay); Generate_DatePrototype_GetField(masm, JSDate::kDay);
} }
// static // static
void Builtins::Generate_DatePrototypeGetDay(MacroAssembler* masm) { void Builtins::Generate_DatePrototypeGetDay(MacroAssembler* masm) {
Generate_DatePrototype_GetField(masm, JSDate::kWeekday); Generate_DatePrototype_GetField(masm, JSDate::kWeekday);
} }
// static // static
void Builtins::Generate_DatePrototypeGetFullYear(MacroAssembler* masm) { void Builtins::Generate_DatePrototypeGetFullYear(MacroAssembler* masm) {
Generate_DatePrototype_GetField(masm, JSDate::kYear); Generate_DatePrototype_GetField(masm, JSDate::kYear);
} }
// static // static
void Builtins::Generate_DatePrototypeGetHours(MacroAssembler* masm) { void Builtins::Generate_DatePrototypeGetHours(MacroAssembler* masm) {
Generate_DatePrototype_GetField(masm, JSDate::kHour); Generate_DatePrototype_GetField(masm, JSDate::kHour);
} }
// static // static
void Builtins::Generate_DatePrototypeGetMilliseconds(MacroAssembler* masm) { void Builtins::Generate_DatePrototypeGetMilliseconds(MacroAssembler* masm) {
Generate_DatePrototype_GetField(masm, JSDate::kMillisecond); Generate_DatePrototype_GetField(masm, JSDate::kMillisecond);
} }
// static // static
void Builtins::Generate_DatePrototypeGetMinutes(MacroAssembler* masm) { void Builtins::Generate_DatePrototypeGetMinutes(MacroAssembler* masm) {
Generate_DatePrototype_GetField(masm, JSDate::kMinute); Generate_DatePrototype_GetField(masm, JSDate::kMinute);
} }
// static // static
void Builtins::Generate_DatePrototypeGetMonth(MacroAssembler* masm) { void Builtins::Generate_DatePrototypeGetMonth(MacroAssembler* masm) {
Generate_DatePrototype_GetField(masm, JSDate::kMonth); Generate_DatePrototype_GetField(masm, JSDate::kMonth);
} }
// static // static
void Builtins::Generate_DatePrototypeGetSeconds(MacroAssembler* masm) { void Builtins::Generate_DatePrototypeGetSeconds(MacroAssembler* masm) {
Generate_DatePrototype_GetField(masm, JSDate::kSecond); Generate_DatePrototype_GetField(masm, JSDate::kSecond);
} }
// static // static
void Builtins::Generate_DatePrototypeGetTime(MacroAssembler* masm) { void Builtins::Generate_DatePrototypeGetTime(MacroAssembler* masm) {
Generate_DatePrototype_GetField(masm, JSDate::kDateValue); Generate_DatePrototype_GetField(masm, JSDate::kDateValue);
} }
// static // static
void Builtins::Generate_DatePrototypeGetTimezoneOffset(MacroAssembler* masm) { void Builtins::Generate_DatePrototypeGetTimezoneOffset(MacroAssembler* masm) {
Generate_DatePrototype_GetField(masm, JSDate::kTimezoneOffset); Generate_DatePrototype_GetField(masm, JSDate::kTimezoneOffset);
} }
// static // static
void Builtins::Generate_DatePrototypeGetUTCDate(MacroAssembler* masm) { void Builtins::Generate_DatePrototypeGetUTCDate(MacroAssembler* masm) {
Generate_DatePrototype_GetField(masm, JSDate::kDayUTC); Generate_DatePrototype_GetField(masm, JSDate::kDayUTC);
} }
// static // static
void Builtins::Generate_DatePrototypeGetUTCDay(MacroAssembler* masm) { void Builtins::Generate_DatePrototypeGetUTCDay(MacroAssembler* masm) {
Generate_DatePrototype_GetField(masm, JSDate::kWeekdayUTC); Generate_DatePrototype_GetField(masm, JSDate::kWeekdayUTC);
} }
// static // static
void Builtins::Generate_DatePrototypeGetUTCFullYear(MacroAssembler* masm) { void Builtins::Generate_DatePrototypeGetUTCFullYear(MacroAssembler* masm) {
Generate_DatePrototype_GetField(masm, JSDate::kYearUTC); Generate_DatePrototype_GetField(masm, JSDate::kYearUTC);
} }
// static // static
void Builtins::Generate_DatePrototypeGetUTCHours(MacroAssembler* masm) { void Builtins::Generate_DatePrototypeGetUTCHours(MacroAssembler* masm) {
Generate_DatePrototype_GetField(masm, JSDate::kHourUTC); Generate_DatePrototype_GetField(masm, JSDate::kHourUTC);
} }
// static // static
void Builtins::Generate_DatePrototypeGetUTCMilliseconds(MacroAssembler* masm) { void Builtins::Generate_DatePrototypeGetUTCMilliseconds(MacroAssembler* masm) {
Generate_DatePrototype_GetField(masm, JSDate::kMillisecondUTC); Generate_DatePrototype_GetField(masm, JSDate::kMillisecondUTC);
} }
// static // static
void Builtins::Generate_DatePrototypeGetUTCMinutes(MacroAssembler* masm) { void Builtins::Generate_DatePrototypeGetUTCMinutes(MacroAssembler* masm) {
Generate_DatePrototype_GetField(masm, JSDate::kMinuteUTC); Generate_DatePrototype_GetField(masm, JSDate::kMinuteUTC);
} }
// static // static
void Builtins::Generate_DatePrototypeGetUTCMonth(MacroAssembler* masm) { void Builtins::Generate_DatePrototypeGetUTCMonth(MacroAssembler* masm) {
Generate_DatePrototype_GetField(masm, JSDate::kMonthUTC); Generate_DatePrototype_GetField(masm, JSDate::kMonthUTC);
} }
// static // static
void Builtins::Generate_DatePrototypeGetUTCSeconds(MacroAssembler* masm) { void Builtins::Generate_DatePrototypeGetUTCSeconds(MacroAssembler* masm) {
Generate_DatePrototype_GetField(masm, JSDate::kSecondUTC); Generate_DatePrototype_GetField(masm, JSDate::kSecondUTC);
} }
namespace { namespace {
// ES6 section 19.2.1.1.1 CreateDynamicFunction // ES6 section 19.2.1.1.1 CreateDynamicFunction
@ -4833,7 +4725,6 @@ MaybeHandle<JSFunction> CreateDynamicFunction(Isolate* isolate,
} // namespace } // namespace
// ES6 section 19.2.1.1 Function ( p1, p2, ... , pn, body ) // ES6 section 19.2.1.1 Function ( p1, p2, ... , pn, body )
BUILTIN(FunctionConstructor) { BUILTIN(FunctionConstructor) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -4960,7 +4851,6 @@ BUILTIN(FunctionPrototypeToString) {
"Function.prototype.toString"))); "Function.prototype.toString")));
} }
// ES6 section 25.2.1.1 GeneratorFunction (p1, p2, ... , pn, body) // ES6 section 25.2.1.1 GeneratorFunction (p1, p2, ... , pn, body)
BUILTIN(GeneratorFunctionConstructor) { BUILTIN(GeneratorFunctionConstructor) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -5026,7 +4916,6 @@ BUILTIN(SymbolConstructor) {
return *result; return *result;
} }
// ES6 section 19.4.1.1 Symbol ( [ description ] ) for the [[Construct]] case. // ES6 section 19.4.1.1 Symbol ( [ description ] ) for the [[Construct]] case.
BUILTIN(SymbolConstructor_ConstructStub) { BUILTIN(SymbolConstructor_ConstructStub) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -5604,7 +5493,6 @@ BUILTIN(ArrayBufferConstructor) {
handle(target->shared()->name(), isolate))); handle(target->shared()->name(), isolate)));
} }
// ES6 section 24.1.2.1 ArrayBuffer ( length ) for the [[Construct]] case. // ES6 section 24.1.2.1 ArrayBuffer ( length ) for the [[Construct]] case.
BUILTIN(ArrayBufferConstructor_ConstructStub) { BUILTIN(ArrayBufferConstructor_ConstructStub) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -5691,7 +5579,6 @@ BUILTIN(ProxyConstructor) {
isolate->factory()->NewStringFromAsciiChecked("Proxy"))); isolate->factory()->NewStringFromAsciiChecked("Proxy")));
} }
// ES6 section 26.2.1.1 Proxy ( target, handler ) for the [[Construct]] case. // ES6 section 26.2.1.1 Proxy ( target, handler ) for the [[Construct]] case.
BUILTIN(ProxyConstructor_ConstructStub) { BUILTIN(ProxyConstructor_ConstructStub) {
HandleScope scope(isolate); HandleScope scope(isolate);
@ -5701,30 +5588,25 @@ BUILTIN(ProxyConstructor_ConstructStub) {
RETURN_RESULT_OR_FAILURE(isolate, JSProxy::New(isolate, target, handler)); RETURN_RESULT_OR_FAILURE(isolate, JSProxy::New(isolate, target, handler));
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// Throwers for restricted function properties and strict arguments object // Throwers for restricted function properties and strict arguments object
// properties // properties
BUILTIN(RestrictedFunctionPropertiesThrower) { BUILTIN(RestrictedFunctionPropertiesThrower) {
HandleScope scope(isolate); HandleScope scope(isolate);
THROW_NEW_ERROR_RETURN_FAILURE( THROW_NEW_ERROR_RETURN_FAILURE(
isolate, NewTypeError(MessageTemplate::kRestrictedFunctionProperties)); isolate, NewTypeError(MessageTemplate::kRestrictedFunctionProperties));
} }
BUILTIN(RestrictedStrictArgumentsPropertiesThrower) { BUILTIN(RestrictedStrictArgumentsPropertiesThrower) {
HandleScope scope(isolate); HandleScope scope(isolate);
THROW_NEW_ERROR_RETURN_FAILURE( THROW_NEW_ERROR_RETURN_FAILURE(
isolate, NewTypeError(MessageTemplate::kStrictPoisonPill)); isolate, NewTypeError(MessageTemplate::kStrictPoisonPill));
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// //
namespace { namespace {
// Returns the holder JSObject if the function can legally be called with this // Returns the holder JSObject if the function can legally be called with this
@ -5834,7 +5716,6 @@ MUST_USE_RESULT MaybeHandle<Object> HandleApiCallHelper(
} // namespace } // namespace
BUILTIN(HandleApiCall) { BUILTIN(HandleApiCall) {
HandleScope scope(isolate); HandleScope scope(isolate);
Handle<JSFunction> function = args.target<JSFunction>(); Handle<JSFunction> function = args.target<JSFunction>();
@ -5853,7 +5734,6 @@ BUILTIN(HandleApiCall) {
} }
} }
Handle<Code> Builtins::CallFunction(ConvertReceiverMode mode, Handle<Code> Builtins::CallFunction(ConvertReceiverMode mode,
TailCallMode tail_call_mode) { TailCallMode tail_call_mode) {
switch (tail_call_mode) { switch (tail_call_mode) {
@ -6014,7 +5894,6 @@ MaybeHandle<Object> Builtins::InvokeApiFunction(Isolate* isolate,
return result; return result;
} }
// Helper function to handle calls to non-function objects created through the // Helper function to handle calls to non-function objects created through the
// API. The object can be called as either a constructor (using new) or just as // API. The object can be called as either a constructor (using new) or just as
// a function (without new). // a function (without new).
@ -6074,14 +5953,12 @@ MUST_USE_RESULT static Object* HandleApiCallAsFunctionOrConstructor(
return result; return result;
} }
// Handle calls to non-function objects created through the API. This delegate // Handle calls to non-function objects created through the API. This delegate
// function is used when the call is a normal function call. // function is used when the call is a normal function call.
BUILTIN(HandleApiCallAsFunction) { BUILTIN(HandleApiCallAsFunction) {
return HandleApiCallAsFunctionOrConstructor(isolate, false, args); return HandleApiCallAsFunctionOrConstructor(isolate, false, args);
} }
// Handle calls to non-function objects created through the API. This delegate // Handle calls to non-function objects created through the API. This delegate
// function is used when the call is a construct call. // function is used when the call is a construct call.
BUILTIN(HandleApiCallAsConstructor) { BUILTIN(HandleApiCallAsConstructor) {
@ -6251,17 +6128,13 @@ Builtins::Builtins() : initialized_(false) {
memset(names_, 0, sizeof(names_[0]) * builtin_count); memset(names_, 0, sizeof(names_[0]) * builtin_count);
} }
Builtins::~Builtins() {}
Builtins::~Builtins() {
}
#define DEF_ENUM_C(name, ignore) FUNCTION_ADDR(Builtin_##name), #define DEF_ENUM_C(name, ignore) FUNCTION_ADDR(Builtin_##name),
Address const Builtins::c_functions_[cfunction_count] = { Address const Builtins::c_functions_[cfunction_count] = {
BUILTIN_LIST_C(DEF_ENUM_C) BUILTIN_LIST_C(DEF_ENUM_C)};
};
#undef DEF_ENUM_C #undef DEF_ENUM_C
struct BuiltinDesc { struct BuiltinDesc {
Handle<Code> (*builder)(Isolate*, struct BuiltinDesc const*); Handle<Code> (*builder)(Isolate*, struct BuiltinDesc const*);
byte* generator; byte* generator;
@ -6273,7 +6146,10 @@ struct BuiltinDesc {
int argc; int argc;
}; };
#define BUILTIN_FUNCTION_TABLE_INIT { V8_ONCE_INIT, {} } #define BUILTIN_FUNCTION_TABLE_INIT \
{ \
V8_ONCE_INIT, {} \
}
class BuiltinFunctionTable { class BuiltinFunctionTable {
public: public:
@ -6446,7 +6322,6 @@ void Builtins::InitBuiltinFunctionTable() {
#undef DEF_FUNCTION_PTR_H #undef DEF_FUNCTION_PTR_H
} }
void Builtins::SetUp(Isolate* isolate, bool create_heap_objects) { void Builtins::SetUp(Isolate* isolate, bool create_heap_objects) {
DCHECK(!initialized_); DCHECK(!initialized_);
@ -6491,17 +6366,12 @@ void Builtins::SetUp(Isolate* isolate, bool create_heap_objects) {
initialized_ = true; initialized_ = true;
} }
void Builtins::TearDown() { initialized_ = false; }
void Builtins::TearDown() {
initialized_ = false;
}
void Builtins::IterateBuiltins(ObjectVisitor* v) { void Builtins::IterateBuiltins(ObjectVisitor* v) {
v->VisitPointers(&builtins_[0], &builtins_[0] + builtin_count); v->VisitPointers(&builtins_[0], &builtins_[0] + builtin_count);
} }
const char* Builtins::Lookup(byte* pc) { const char* Builtins::Lookup(byte* pc) {
// may be called during initialization (disassembler!) // may be called during initialization (disassembler!)
if (initialized_) { if (initialized_) {
@ -6515,12 +6385,10 @@ const char* Builtins::Lookup(byte* pc) {
return NULL; return NULL;
} }
void Builtins::Generate_InterruptCheck(MacroAssembler* masm) { void Builtins::Generate_InterruptCheck(MacroAssembler* masm) {
masm->TailCallRuntime(Runtime::kInterrupt); masm->TailCallRuntime(Runtime::kInterrupt);
} }
void Builtins::Generate_StackCheck(MacroAssembler* masm) { void Builtins::Generate_StackCheck(MacroAssembler* masm) {
masm->TailCallRuntime(Runtime::kStackGuard); masm->TailCallRuntime(Runtime::kStackGuard);
} }
@ -6782,12 +6650,11 @@ void Builtins::Generate_AtomicsStore(CodeStubAssembler* a) {
Code** code_address = reinterpret_cast<Code**>(builtin_address(k##name)); \ Code** code_address = reinterpret_cast<Code**>(builtin_address(k##name)); \
return Handle<Code>(code_address); \ return Handle<Code>(code_address); \
} }
#define DEFINE_BUILTIN_ACCESSOR_H(name, kind) \ #define DEFINE_BUILTIN_ACCESSOR_H(name, kind) \
Handle<Code> Builtins::name() { \ Handle<Code> Builtins::name() { \
Code** code_address = \ Code** code_address = reinterpret_cast<Code**>(builtin_address(k##name)); \
reinterpret_cast<Code**>(builtin_address(k##name)); \ return Handle<Code>(code_address); \
return Handle<Code>(code_address); \ }
}
BUILTIN_LIST_C(DEFINE_BUILTIN_ACCESSOR_C) BUILTIN_LIST_C(DEFINE_BUILTIN_ACCESSOR_C)
BUILTIN_LIST_A(DEFINE_BUILTIN_ACCESSOR_A) BUILTIN_LIST_A(DEFINE_BUILTIN_ACCESSOR_A)
BUILTIN_LIST_T(DEFINE_BUILTIN_ACCESSOR_T) BUILTIN_LIST_T(DEFINE_BUILTIN_ACCESSOR_T)

View File

@ -1,10 +1,9 @@
// Copyright 2011 the V8 project authors. All rights reserved. // Copyright 2011 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef V8_BUILTINS_H_ #ifndef V8_BUILTINS_BUILTINS_H_
#define V8_BUILTINS_H_ #define V8_BUILTINS_BUILTINS_H_
#include "src/base/flags.h" #include "src/base/flags.h"
#include "src/handles.h" #include "src/handles.h"
@ -15,23 +14,22 @@ namespace internal {
// Forward declarations. // Forward declarations.
class CodeStubAssembler; class CodeStubAssembler;
#define CODE_AGE_LIST_WITH_ARG(V, A) \ #define CODE_AGE_LIST_WITH_ARG(V, A) \
V(Quadragenarian, A) \ V(Quadragenarian, A) \
V(Quinquagenarian, A) \ V(Quinquagenarian, A) \
V(Sexagenarian, A) \ V(Sexagenarian, A) \
V(Septuagenarian, A) \ V(Septuagenarian, A) \
V(Octogenarian, A) V(Octogenarian, A)
#define CODE_AGE_LIST_IGNORE_ARG(X, V) V(X) #define CODE_AGE_LIST_IGNORE_ARG(X, V) V(X)
#define CODE_AGE_LIST(V) \ #define CODE_AGE_LIST(V) CODE_AGE_LIST_WITH_ARG(CODE_AGE_LIST_IGNORE_ARG, V)
CODE_AGE_LIST_WITH_ARG(CODE_AGE_LIST_IGNORE_ARG, V)
#define CODE_AGE_LIST_COMPLETE(V) \ #define CODE_AGE_LIST_COMPLETE(V) \
V(ToBeExecutedOnce) \ V(ToBeExecutedOnce) \
V(NotExecuted) \ V(NotExecuted) \
V(ExecutedOnce) \ V(ExecutedOnce) \
V(NoAge) \ V(NoAge) \
CODE_AGE_LIST_WITH_ARG(CODE_AGE_LIST_IGNORE_ARG, V) CODE_AGE_LIST_WITH_ARG(CODE_AGE_LIST_IGNORE_ARG, V)
#define DECLARE_CODE_AGE_BUILTIN(C, V) \ #define DECLARE_CODE_AGE_BUILTIN(C, V) \
@ -392,7 +390,6 @@ class CodeStubAssembler;
class BuiltinFunctionTable; class BuiltinFunctionTable;
class ObjectVisitor; class ObjectVisitor;
class Builtins { class Builtins {
public: public:
~Builtins(); ~Builtins();
@ -414,15 +411,18 @@ class Builtins {
#define DEF_ENUM_T(name, argc) k##name, #define DEF_ENUM_T(name, argc) k##name,
#define DEF_ENUM_S(name, kind, extra, interface_descriptor) k##name, #define DEF_ENUM_S(name, kind, extra, interface_descriptor) k##name,
#define DEF_ENUM_H(name, kind) k##name, #define DEF_ENUM_H(name, kind) k##name,
BUILTIN_LIST_C(DEF_ENUM_C) BUILTIN_LIST_A(DEF_ENUM_A) BUILTIN_LIST_C(DEF_ENUM_C)
BUILTIN_LIST_T(DEF_ENUM_T) BUILTIN_LIST_S(DEF_ENUM_S) BUILTIN_LIST_A(DEF_ENUM_A)
BUILTIN_LIST_H(DEF_ENUM_H) BUILTIN_LIST_DEBUG_A(DEF_ENUM_A) BUILTIN_LIST_T(DEF_ENUM_T)
BUILTIN_LIST_S(DEF_ENUM_S)
BUILTIN_LIST_H(DEF_ENUM_H)
BUILTIN_LIST_DEBUG_A(DEF_ENUM_A)
#undef DEF_ENUM_C #undef DEF_ENUM_C
#undef DEF_ENUM_A #undef DEF_ENUM_A
#undef DEF_ENUM_T #undef DEF_ENUM_T
#undef DEF_ENUM_S #undef DEF_ENUM_S
#undef DEF_ENUM_H #undef DEF_ENUM_H
builtin_count builtin_count
}; };
enum CFunctionId { enum CFunctionId {
@ -471,9 +471,7 @@ class Builtins {
return reinterpret_cast<Address>(&builtins_[name]); return reinterpret_cast<Address>(&builtins_[name]);
} }
static Address c_function_address(CFunctionId id) { static Address c_function_address(CFunctionId id) { return c_functions_[id]; }
return c_functions_[id];
}
const char* name(int index) { const char* name(int index) {
DCHECK(index >= 0); DCHECK(index >= 0);
@ -821,11 +819,10 @@ class Builtins {
CallableType function_type); CallableType function_type);
static void Generate_InterpreterPushArgsAndConstruct(MacroAssembler* masm); static void Generate_InterpreterPushArgsAndConstruct(MacroAssembler* masm);
#define DECLARE_CODE_AGE_BUILTIN_GENERATOR(C) \ #define DECLARE_CODE_AGE_BUILTIN_GENERATOR(C) \
static void Generate_Make##C##CodeYoungAgainEvenMarking( \ static void Generate_Make##C##CodeYoungAgainEvenMarking( \
MacroAssembler* masm); \ MacroAssembler* masm); \
static void Generate_Make##C##CodeYoungAgainOddMarking( \ static void Generate_Make##C##CodeYoungAgainOddMarking(MacroAssembler* masm);
MacroAssembler* masm);
CODE_AGE_LIST(DECLARE_CODE_AGE_BUILTIN_GENERATOR) CODE_AGE_LIST(DECLARE_CODE_AGE_BUILTIN_GENERATOR)
#undef DECLARE_CODE_AGE_BUILTIN_GENERATOR #undef DECLARE_CODE_AGE_BUILTIN_GENERATOR
@ -849,4 +846,4 @@ class Builtins {
} // namespace internal } // namespace internal
} // namespace v8 } // namespace v8
#endif // V8_BUILTINS_H_ #endif // V8_BUILTINS_BUILTINS_H_

View File

@ -13,7 +13,6 @@
namespace v8 { namespace v8 {
namespace internal { namespace internal {
#define __ ACCESS_MASM(masm) #define __ ACCESS_MASM(masm)
void Builtins::Generate_Adaptor(MacroAssembler* masm, CFunctionId id, void Builtins::Generate_Adaptor(MacroAssembler* masm, CFunctionId id,
@ -245,38 +244,31 @@ static void Generate_JSConstructStubHelper(MacroAssembler* masm,
__ ret(0); __ ret(0);
} }
void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) { void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, false, true, false); Generate_JSConstructStubHelper(masm, false, true, false);
} }
void Builtins::Generate_JSConstructStubApi(MacroAssembler* masm) { void Builtins::Generate_JSConstructStubApi(MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, true, false, false); Generate_JSConstructStubHelper(masm, true, false, false);
} }
void Builtins::Generate_JSBuiltinsConstructStub(MacroAssembler* masm) { void Builtins::Generate_JSBuiltinsConstructStub(MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, false, false, false); Generate_JSConstructStubHelper(masm, false, false, false);
} }
void Builtins::Generate_JSBuiltinsConstructStubForDerived( void Builtins::Generate_JSBuiltinsConstructStubForDerived(
MacroAssembler* masm) { MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, false, false, true); Generate_JSConstructStubHelper(masm, false, false, true);
} }
void Builtins::Generate_ConstructedNonConstructable(MacroAssembler* masm) { void Builtins::Generate_ConstructedNonConstructable(MacroAssembler* masm) {
FrameScope scope(masm, StackFrame::INTERNAL); FrameScope scope(masm, StackFrame::INTERNAL);
__ push(edi); __ push(edi);
__ CallRuntime(Runtime::kThrowConstructedNonConstructable); __ CallRuntime(Runtime::kThrowConstructedNonConstructable);
} }
enum IsTagged { kEaxIsSmiTagged, kEaxIsUntaggedInt }; enum IsTagged { kEaxIsSmiTagged, kEaxIsUntaggedInt };
// Clobbers ecx, edx, edi; preserves all other registers. // Clobbers ecx, edx, edi; preserves all other registers.
static void Generate_CheckStackOverflow(MacroAssembler* masm, static void Generate_CheckStackOverflow(MacroAssembler* masm,
IsTagged eax_is_tagged) { IsTagged eax_is_tagged) {
@ -308,7 +300,6 @@ static void Generate_CheckStackOverflow(MacroAssembler* masm,
__ bind(&okay); __ bind(&okay);
} }
static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm, static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
bool is_construct) { bool is_construct) {
ProfileEntryHookStub::MaybeCallEntryHook(masm); ProfileEntryHookStub::MaybeCallEntryHook(masm);
@ -342,7 +333,7 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
__ jmp(&entry, Label::kNear); __ jmp(&entry, Label::kNear);
__ bind(&loop); __ bind(&loop);
__ mov(edx, Operand(ebx, ecx, times_4, 0)); // push parameter from argv __ mov(edx, Operand(ebx, ecx, times_4, 0)); // push parameter from argv
__ push(Operand(edx, 0)); // dereference handle __ push(Operand(edx, 0)); // dereference handle
__ inc(ecx); __ inc(ecx);
__ bind(&entry); __ bind(&entry);
__ cmp(ecx, eax); __ cmp(ecx, eax);
@ -368,12 +359,10 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
__ ret(kPointerSize); // Remove receiver. __ ret(kPointerSize); // Remove receiver.
} }
void Builtins::Generate_JSEntryTrampoline(MacroAssembler* masm) { void Builtins::Generate_JSEntryTrampoline(MacroAssembler* masm) {
Generate_JSEntryTrampolineHelper(masm, false); Generate_JSEntryTrampolineHelper(masm, false);
} }
void Builtins::Generate_JSConstructEntryTrampoline(MacroAssembler* masm) { void Builtins::Generate_JSConstructEntryTrampoline(MacroAssembler* masm) {
Generate_JSEntryTrampolineHelper(masm, true); Generate_JSEntryTrampolineHelper(masm, true);
} }
@ -460,7 +449,7 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) {
__ PushReturnAddressFrom(eax); __ PushReturnAddressFrom(eax);
__ mov(eax, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); __ mov(eax, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset));
__ mov(eax, __ mov(eax,
FieldOperand(ecx, SharedFunctionInfo::kFormalParameterCountOffset)); FieldOperand(ecx, SharedFunctionInfo::kFormalParameterCountOffset));
// We abuse new.target both to indicate that this is a resume call and to // We abuse new.target both to indicate that this is a resume call and to
// pass in the generator object. In ordinary calls, new.target is always // pass in the generator object. In ordinary calls, new.target is always
// undefined because generator functions are non-constructable. // undefined because generator functions are non-constructable.
@ -768,7 +757,6 @@ void Builtins::Generate_InterpreterPushArgsAndCallImpl(
} }
} }
// static // static
void Builtins::Generate_InterpreterPushArgsAndConstruct(MacroAssembler* masm) { void Builtins::Generate_InterpreterPushArgsAndConstruct(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -1026,7 +1014,6 @@ void Builtins::Generate_CompileOptimized(MacroAssembler* masm) {
Runtime::kCompileOptimized_NotConcurrent); Runtime::kCompileOptimized_NotConcurrent);
} }
void Builtins::Generate_CompileOptimizedConcurrent(MacroAssembler* masm) { void Builtins::Generate_CompileOptimizedConcurrent(MacroAssembler* masm) {
GenerateTailCallToReturnedCode(masm, Runtime::kCompileOptimized_Concurrent); GenerateTailCallToReturnedCode(masm, Runtime::kCompileOptimized_Concurrent);
} }
@ -1097,19 +1084,18 @@ static void GenerateMakeCodeYoungAgainCommon(MacroAssembler* masm) {
__ ret(0); __ ret(0);
} }
#define DEFINE_CODE_AGE_BUILTIN_GENERATOR(C) \ #define DEFINE_CODE_AGE_BUILTIN_GENERATOR(C) \
void Builtins::Generate_Make##C##CodeYoungAgainEvenMarking( \ void Builtins::Generate_Make##C##CodeYoungAgainEvenMarking( \
MacroAssembler* masm) { \ MacroAssembler* masm) { \
GenerateMakeCodeYoungAgainCommon(masm); \ GenerateMakeCodeYoungAgainCommon(masm); \
} \ } \
void Builtins::Generate_Make##C##CodeYoungAgainOddMarking( \ void Builtins::Generate_Make##C##CodeYoungAgainOddMarking( \
MacroAssembler* masm) { \ MacroAssembler* masm) { \
GenerateMakeCodeYoungAgainCommon(masm); \ GenerateMakeCodeYoungAgainCommon(masm); \
} }
CODE_AGE_LIST(DEFINE_CODE_AGE_BUILTIN_GENERATOR) CODE_AGE_LIST(DEFINE_CODE_AGE_BUILTIN_GENERATOR)
#undef DEFINE_CODE_AGE_BUILTIN_GENERATOR #undef DEFINE_CODE_AGE_BUILTIN_GENERATOR
void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) { void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) {
// For now, as in GenerateMakeCodeYoungAgainCommon, we are relying on the fact // For now, as in GenerateMakeCodeYoungAgainCommon, we are relying on the fact
// that make_code_young doesn't do any garbage collection which allows us to // that make_code_young doesn't do any garbage collection which allows us to
@ -1142,17 +1128,14 @@ void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) {
__ ret(0); __ ret(0);
} }
void Builtins::Generate_MarkCodeAsExecutedTwice(MacroAssembler* masm) { void Builtins::Generate_MarkCodeAsExecutedTwice(MacroAssembler* masm) {
GenerateMakeCodeYoungAgainCommon(masm); GenerateMakeCodeYoungAgainCommon(masm);
} }
void Builtins::Generate_MarkCodeAsToBeExecutedOnce(MacroAssembler* masm) { void Builtins::Generate_MarkCodeAsToBeExecutedOnce(MacroAssembler* masm) {
Generate_MarkCodeAsExecutedOnce(masm); Generate_MarkCodeAsExecutedOnce(masm);
} }
static void Generate_NotifyStubFailureHelper(MacroAssembler* masm, static void Generate_NotifyStubFailureHelper(MacroAssembler* masm,
SaveFPRegsMode save_doubles) { SaveFPRegsMode save_doubles) {
// Enter an internal frame. // Enter an internal frame.
@ -1172,17 +1155,14 @@ static void Generate_NotifyStubFailureHelper(MacroAssembler* masm,
__ ret(0); // Return to IC Miss stub, continuation still on stack. __ ret(0); // Return to IC Miss stub, continuation still on stack.
} }
void Builtins::Generate_NotifyStubFailure(MacroAssembler* masm) { void Builtins::Generate_NotifyStubFailure(MacroAssembler* masm) {
Generate_NotifyStubFailureHelper(masm, kDontSaveFPRegs); Generate_NotifyStubFailureHelper(masm, kDontSaveFPRegs);
} }
void Builtins::Generate_NotifyStubFailureSaveDoubles(MacroAssembler* masm) { void Builtins::Generate_NotifyStubFailureSaveDoubles(MacroAssembler* masm) {
Generate_NotifyStubFailureHelper(masm, kSaveFPRegs); Generate_NotifyStubFailureHelper(masm, kSaveFPRegs);
} }
static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm, static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm,
Deoptimizer::BailoutType type) { Deoptimizer::BailoutType type) {
{ {
@ -1216,22 +1196,18 @@ static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm,
__ Abort(kNoCasesLeft); __ Abort(kNoCasesLeft);
} }
void Builtins::Generate_NotifyDeoptimized(MacroAssembler* masm) { void Builtins::Generate_NotifyDeoptimized(MacroAssembler* masm) {
Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::EAGER); Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::EAGER);
} }
void Builtins::Generate_NotifySoftDeoptimized(MacroAssembler* masm) { void Builtins::Generate_NotifySoftDeoptimized(MacroAssembler* masm) {
Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::SOFT); Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::SOFT);
} }
void Builtins::Generate_NotifyLazyDeoptimized(MacroAssembler* masm) { void Builtins::Generate_NotifyLazyDeoptimized(MacroAssembler* masm) {
Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::LAZY); Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::LAZY);
} }
// static // static
void Builtins::Generate_DatePrototype_GetField(MacroAssembler* masm, void Builtins::Generate_DatePrototype_GetField(MacroAssembler* masm,
int field_index) { int field_index) {
@ -1364,7 +1340,6 @@ void Builtins::Generate_FunctionPrototypeApply(MacroAssembler* masm) {
} }
} }
// static // static
void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) { void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) {
// Stack Layout: // Stack Layout:
@ -1411,7 +1386,6 @@ void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) {
__ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET);
} }
void Builtins::Generate_ReflectApply(MacroAssembler* masm) { void Builtins::Generate_ReflectApply(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- eax : argc // -- eax : argc
@ -1552,7 +1526,6 @@ void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) {
} }
} }
void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) { void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- eax : argc // -- eax : argc
@ -1581,7 +1554,6 @@ void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
__ TailCallStub(&stub); __ TailCallStub(&stub);
} }
void Builtins::Generate_ArrayCode(MacroAssembler* masm) { void Builtins::Generate_ArrayCode(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- eax : argc // -- eax : argc
@ -1611,7 +1583,6 @@ void Builtins::Generate_ArrayCode(MacroAssembler* masm) {
__ TailCallStub(&stub); __ TailCallStub(&stub);
} }
// static // static
void Builtins::Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind) { void Builtins::Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -1774,7 +1745,6 @@ void Builtins::Generate_NumberConstructor(MacroAssembler* masm) {
__ ret(1 * kPointerSize); __ ret(1 * kPointerSize);
} }
// static // static
void Builtins::Generate_NumberConstructor_ConstructStub(MacroAssembler* masm) { void Builtins::Generate_NumberConstructor_ConstructStub(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -1861,7 +1831,6 @@ void Builtins::Generate_NumberConstructor_ConstructStub(MacroAssembler* masm) {
} }
} }
// static // static
void Builtins::Generate_StringConstructor(MacroAssembler* masm) { void Builtins::Generate_StringConstructor(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -1934,7 +1903,6 @@ void Builtins::Generate_StringConstructor(MacroAssembler* masm) {
} }
} }
// static // static
void Builtins::Generate_StringConstructor_ConstructStub(MacroAssembler* masm) { void Builtins::Generate_StringConstructor_ConstructStub(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2028,7 +1996,6 @@ void Builtins::Generate_StringConstructor_ConstructStub(MacroAssembler* masm) {
} }
} }
static void ArgumentsAdaptorStackCheck(MacroAssembler* masm, static void ArgumentsAdaptorStackCheck(MacroAssembler* masm,
Label* stack_overflow) { Label* stack_overflow) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2055,7 +2022,6 @@ static void ArgumentsAdaptorStackCheck(MacroAssembler* masm,
__ j(less_equal, stack_overflow); // Signed comparison. __ j(less_equal, stack_overflow); // Signed comparison.
} }
static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) { static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) {
__ push(ebp); __ push(ebp);
__ mov(ebp, esp); __ mov(ebp, esp);
@ -2074,7 +2040,6 @@ static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) {
__ push(edi); __ push(edi);
} }
static void LeaveArgumentsAdaptorFrame(MacroAssembler* masm) { static void LeaveArgumentsAdaptorFrame(MacroAssembler* masm) {
// Retrieve the number of arguments from the stack. // Retrieve the number of arguments from the stack.
__ mov(ebx, Operand(ebp, ArgumentsAdaptorFrameConstants::kLengthOffset)); __ mov(ebx, Operand(ebp, ArgumentsAdaptorFrameConstants::kLengthOffset));
@ -2089,7 +2054,6 @@ static void LeaveArgumentsAdaptorFrame(MacroAssembler* masm) {
__ push(ecx); __ push(ecx);
} }
// static // static
void Builtins::Generate_Apply(MacroAssembler* masm) { void Builtins::Generate_Apply(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2424,7 +2388,6 @@ void Builtins::Generate_CallFunction(MacroAssembler* masm,
} }
} }
namespace { namespace {
void Generate_PushBoundArguments(MacroAssembler* masm) { void Generate_PushBoundArguments(MacroAssembler* masm) {
@ -2511,7 +2474,6 @@ void Generate_PushBoundArguments(MacroAssembler* masm) {
} // namespace } // namespace
// static // static
void Builtins::Generate_CallBoundFunctionImpl(MacroAssembler* masm, void Builtins::Generate_CallBoundFunctionImpl(MacroAssembler* masm,
TailCallMode tail_call_mode) { TailCallMode tail_call_mode) {
@ -2540,7 +2502,6 @@ void Builtins::Generate_CallBoundFunctionImpl(MacroAssembler* masm,
__ jmp(ecx); __ jmp(ecx);
} }
// static // static
void Builtins::Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode, void Builtins::Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode,
TailCallMode tail_call_mode) { TailCallMode tail_call_mode) {
@ -2603,7 +2564,6 @@ void Builtins::Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode,
} }
} }
// static // static
void Builtins::Generate_ConstructFunction(MacroAssembler* masm) { void Builtins::Generate_ConstructFunction(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2625,7 +2585,6 @@ void Builtins::Generate_ConstructFunction(MacroAssembler* masm) {
__ jmp(ecx); __ jmp(ecx);
} }
// static // static
void Builtins::Generate_ConstructBoundFunction(MacroAssembler* masm) { void Builtins::Generate_ConstructBoundFunction(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2655,7 +2614,6 @@ void Builtins::Generate_ConstructBoundFunction(MacroAssembler* masm) {
__ jmp(ecx); __ jmp(ecx);
} }
// static // static
void Builtins::Generate_ConstructProxy(MacroAssembler* masm) { void Builtins::Generate_ConstructProxy(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2677,7 +2635,6 @@ void Builtins::Generate_ConstructProxy(MacroAssembler* masm) {
ExternalReference(Runtime::kJSProxyConstruct, masm->isolate())); ExternalReference(Runtime::kJSProxyConstruct, masm->isolate()));
} }
// static // static
void Builtins::Generate_Construct(MacroAssembler* masm) { void Builtins::Generate_Construct(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2940,7 +2897,6 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
} }
} }
static void CompatibleReceiverCheck(MacroAssembler* masm, Register receiver, static void CompatibleReceiverCheck(MacroAssembler* masm, Register receiver,
Register function_template_info, Register function_template_info,
Register scratch0, Register scratch1, Register scratch0, Register scratch1,
@ -3004,7 +2960,6 @@ static void CompatibleReceiverCheck(MacroAssembler* masm, Register receiver,
__ bind(&receiver_check_passed); __ bind(&receiver_check_passed);
} }
void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) { void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- eax : number of arguments (not including the receiver) // -- eax : number of arguments (not including the receiver)
@ -3048,7 +3003,6 @@ void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) {
} }
} }
void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) { void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
// Lookup the function in the JavaScript frame. // Lookup the function in the JavaScript frame.
__ mov(eax, Operand(ebp, JavaScriptFrameConstants::kFunctionOffset)); __ mov(eax, Operand(ebp, JavaScriptFrameConstants::kFunctionOffset));
@ -3072,7 +3026,8 @@ void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
// Load the OSR entrypoint offset from the deoptimization data. // Load the OSR entrypoint offset from the deoptimization data.
__ mov(ebx, Operand(ebx, FixedArray::OffsetOfElementAt( __ mov(ebx, Operand(ebx, FixedArray::OffsetOfElementAt(
DeoptimizationInputData::kOsrPcOffsetIndex) - kHeapObjectTag)); DeoptimizationInputData::kOsrPcOffsetIndex) -
kHeapObjectTag));
__ SmiUntag(ebx); __ SmiUntag(ebx);
// Compute the target address = code_obj + header_size + osr_offset // Compute the target address = code_obj + header_size + osr_offset
@ -3085,7 +3040,6 @@ void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
__ ret(0); __ ret(0);
} }
#undef __ #undef __
} // namespace internal } // namespace internal
} // namespace v8 } // namespace v8

6
src/builtins/mips/OWNERS Normal file
View File

@ -0,0 +1,6 @@
paul.lind@imgtec.com
gergely.kis@imgtec.com
akos.palfi@imgtec.com
balazs.kilvady@imgtec.com
dusan.milosavljevic@imgtec.com
ivica.bogosavljevic@imgtec.com

View File

@ -10,11 +10,9 @@
#include "src/full-codegen/full-codegen.h" #include "src/full-codegen/full-codegen.h"
#include "src/runtime/runtime.h" #include "src/runtime/runtime.h"
namespace v8 { namespace v8 {
namespace internal { namespace internal {
#define __ ACCESS_MASM(masm) #define __ ACCESS_MASM(masm)
void Builtins::Generate_Adaptor(MacroAssembler* masm, CFunctionId id, void Builtins::Generate_Adaptor(MacroAssembler* masm, CFunctionId id,
@ -50,7 +48,6 @@ void Builtins::Generate_Adaptor(MacroAssembler* masm, CFunctionId id,
exit_frame_type == BUILTIN_EXIT); exit_frame_type == BUILTIN_EXIT);
} }
// Load the built-in InternalArray function from the current context. // Load the built-in InternalArray function from the current context.
static void GenerateLoadInternalArrayFunction(MacroAssembler* masm, static void GenerateLoadInternalArrayFunction(MacroAssembler* masm,
Register result) { Register result) {
@ -58,14 +55,12 @@ static void GenerateLoadInternalArrayFunction(MacroAssembler* masm,
__ LoadNativeContextSlot(Context::INTERNAL_ARRAY_FUNCTION_INDEX, result); __ LoadNativeContextSlot(Context::INTERNAL_ARRAY_FUNCTION_INDEX, result);
} }
// Load the built-in Array function from the current context. // Load the built-in Array function from the current context.
static void GenerateLoadArrayFunction(MacroAssembler* masm, Register result) { static void GenerateLoadArrayFunction(MacroAssembler* masm, Register result) {
// Load the Array function from the native context. // Load the Array function from the native context.
__ LoadNativeContextSlot(Context::ARRAY_FUNCTION_INDEX, result); __ LoadNativeContextSlot(Context::ARRAY_FUNCTION_INDEX, result);
} }
void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) { void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- a0 : number of arguments // -- a0 : number of arguments
@ -81,11 +76,11 @@ void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
// Initial map for the builtin InternalArray functions should be maps. // Initial map for the builtin InternalArray functions should be maps.
__ lw(a2, FieldMemOperand(a1, JSFunction::kPrototypeOrInitialMapOffset)); __ lw(a2, FieldMemOperand(a1, JSFunction::kPrototypeOrInitialMapOffset));
__ SmiTst(a2, t0); __ SmiTst(a2, t0);
__ Assert(ne, kUnexpectedInitialMapForInternalArrayFunction, __ Assert(ne, kUnexpectedInitialMapForInternalArrayFunction, t0,
t0, Operand(zero_reg)); Operand(zero_reg));
__ GetObjectType(a2, a3, t0); __ GetObjectType(a2, a3, t0);
__ Assert(eq, kUnexpectedInitialMapForInternalArrayFunction, __ Assert(eq, kUnexpectedInitialMapForInternalArrayFunction, t0,
t0, Operand(MAP_TYPE)); Operand(MAP_TYPE));
} }
// Run the native code for the InternalArray function called as a normal // Run the native code for the InternalArray function called as a normal
@ -95,7 +90,6 @@ void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
__ TailCallStub(&stub); __ TailCallStub(&stub);
} }
void Builtins::Generate_ArrayCode(MacroAssembler* masm) { void Builtins::Generate_ArrayCode(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- a0 : number of arguments // -- a0 : number of arguments
@ -111,11 +105,11 @@ void Builtins::Generate_ArrayCode(MacroAssembler* masm) {
// Initial map for the builtin Array functions should be maps. // Initial map for the builtin Array functions should be maps.
__ lw(a2, FieldMemOperand(a1, JSFunction::kPrototypeOrInitialMapOffset)); __ lw(a2, FieldMemOperand(a1, JSFunction::kPrototypeOrInitialMapOffset));
__ SmiTst(a2, t0); __ SmiTst(a2, t0);
__ Assert(ne, kUnexpectedInitialMapForArrayFunction1, __ Assert(ne, kUnexpectedInitialMapForArrayFunction1, t0,
t0, Operand(zero_reg)); Operand(zero_reg));
__ GetObjectType(a2, a3, t0); __ GetObjectType(a2, a3, t0);
__ Assert(eq, kUnexpectedInitialMapForArrayFunction2, __ Assert(eq, kUnexpectedInitialMapForArrayFunction2, t0,
t0, Operand(MAP_TYPE)); Operand(MAP_TYPE));
} }
// Run the native code for the Array function called as a normal function. // Run the native code for the Array function called as a normal function.
@ -126,7 +120,6 @@ void Builtins::Generate_ArrayCode(MacroAssembler* masm) {
__ TailCallStub(&stub); __ TailCallStub(&stub);
} }
// static // static
void Builtins::Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind) { void Builtins::Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -277,7 +270,6 @@ void Builtins::Generate_NumberConstructor(MacroAssembler* masm) {
__ DropAndRet(1); __ DropAndRet(1);
} }
// static // static
void Builtins::Generate_NumberConstructor_ConstructStub(MacroAssembler* masm) { void Builtins::Generate_NumberConstructor_ConstructStub(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -357,7 +349,6 @@ void Builtins::Generate_NumberConstructor_ConstructStub(MacroAssembler* masm) {
} }
} }
// static // static
void Builtins::Generate_StringConstructor(MacroAssembler* masm) { void Builtins::Generate_StringConstructor(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -429,7 +420,6 @@ void Builtins::Generate_StringConstructor(MacroAssembler* masm) {
} }
} }
// static // static
void Builtins::Generate_StringConstructor_ConstructStub(MacroAssembler* masm) { void Builtins::Generate_StringConstructor_ConstructStub(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -544,7 +534,6 @@ static void GenerateTailCallToReturnedCode(MacroAssembler* masm,
__ Jump(at); __ Jump(at);
} }
void Builtins::Generate_InOptimizationQueue(MacroAssembler* masm) { void Builtins::Generate_InOptimizationQueue(MacroAssembler* masm) {
// Checking whether the queued function is ready for install is optional, // Checking whether the queued function is ready for install is optional,
// since we come across interrupts and stack checks elsewhere. However, // since we come across interrupts and stack checks elsewhere. However,
@ -561,7 +550,6 @@ void Builtins::Generate_InOptimizationQueue(MacroAssembler* masm) {
GenerateTailCallToSharedCode(masm); GenerateTailCallToSharedCode(masm);
} }
static void Generate_JSConstructStubHelper(MacroAssembler* masm, static void Generate_JSConstructStubHelper(MacroAssembler* masm,
bool is_api_function, bool is_api_function,
bool create_implicit_receiver, bool create_implicit_receiver,
@ -712,38 +700,31 @@ static void Generate_JSConstructStubHelper(MacroAssembler* masm,
__ Ret(); __ Ret();
} }
void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) { void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, false, true, false); Generate_JSConstructStubHelper(masm, false, true, false);
} }
void Builtins::Generate_JSConstructStubApi(MacroAssembler* masm) { void Builtins::Generate_JSConstructStubApi(MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, true, false, false); Generate_JSConstructStubHelper(masm, true, false, false);
} }
void Builtins::Generate_JSBuiltinsConstructStub(MacroAssembler* masm) { void Builtins::Generate_JSBuiltinsConstructStub(MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, false, false, false); Generate_JSConstructStubHelper(masm, false, false, false);
} }
void Builtins::Generate_JSBuiltinsConstructStubForDerived( void Builtins::Generate_JSBuiltinsConstructStubForDerived(
MacroAssembler* masm) { MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, false, false, true); Generate_JSConstructStubHelper(masm, false, false, true);
} }
void Builtins::Generate_ConstructedNonConstructable(MacroAssembler* masm) { void Builtins::Generate_ConstructedNonConstructable(MacroAssembler* masm) {
FrameScope scope(masm, StackFrame::INTERNAL); FrameScope scope(masm, StackFrame::INTERNAL);
__ Push(a1); __ Push(a1);
__ CallRuntime(Runtime::kThrowConstructedNonConstructable); __ CallRuntime(Runtime::kThrowConstructedNonConstructable);
} }
enum IsTagged { kArgcIsSmiTagged, kArgcIsUntaggedInt }; enum IsTagged { kArgcIsSmiTagged, kArgcIsUntaggedInt };
// Clobbers a2; preserves all other registers. // Clobbers a2; preserves all other registers.
static void Generate_CheckStackOverflow(MacroAssembler* masm, Register argc, static void Generate_CheckStackOverflow(MacroAssembler* masm, Register argc,
IsTagged argc_is_tagged) { IsTagged argc_is_tagged) {
@ -771,7 +752,6 @@ static void Generate_CheckStackOverflow(MacroAssembler* masm, Register argc,
__ bind(&okay); __ bind(&okay);
} }
static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm, static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
bool is_construct) { bool is_construct) {
// Called from JSEntryStub::GenerateBody // Called from JSEntryStub::GenerateBody
@ -811,13 +791,13 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
Label loop, entry; Label loop, entry;
__ Lsa(t2, s0, a3, kPointerSizeLog2); __ Lsa(t2, s0, a3, kPointerSizeLog2);
__ b(&entry); __ b(&entry);
__ nop(); // Branch delay slot nop. __ nop(); // Branch delay slot nop.
// t2 points past last arg. // t2 points past last arg.
__ bind(&loop); __ bind(&loop);
__ lw(t0, MemOperand(s0)); // Read next parameter. __ lw(t0, MemOperand(s0)); // Read next parameter.
__ addiu(s0, s0, kPointerSize); __ addiu(s0, s0, kPointerSize);
__ lw(t0, MemOperand(t0)); // Dereference handle. __ lw(t0, MemOperand(t0)); // Dereference handle.
__ push(t0); // Push parameter. __ push(t0); // Push parameter.
__ bind(&entry); __ bind(&entry);
__ Branch(&loop, ne, s0, Operand(t2)); __ Branch(&loop, ne, s0, Operand(t2));
@ -848,12 +828,10 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
__ Jump(ra); __ Jump(ra);
} }
void Builtins::Generate_JSEntryTrampoline(MacroAssembler* masm) { void Builtins::Generate_JSEntryTrampoline(MacroAssembler* masm) {
Generate_JSEntryTrampolineHelper(masm, false); Generate_JSEntryTrampolineHelper(masm, false);
} }
void Builtins::Generate_JSConstructEntryTrampoline(MacroAssembler* masm) { void Builtins::Generate_JSConstructEntryTrampoline(MacroAssembler* masm) {
Generate_JSEntryTrampolineHelper(masm, true); Generate_JSEntryTrampolineHelper(masm, true);
} }
@ -939,7 +917,7 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) {
{ {
__ lw(a0, FieldMemOperand(t0, JSFunction::kSharedFunctionInfoOffset)); __ lw(a0, FieldMemOperand(t0, JSFunction::kSharedFunctionInfoOffset));
__ lw(a0, __ lw(a0,
FieldMemOperand(a0, SharedFunctionInfo::kFormalParameterCountOffset)); FieldMemOperand(a0, SharedFunctionInfo::kFormalParameterCountOffset));
__ SmiUntag(a0); __ SmiUntag(a0);
// We abuse new.target both to indicate that this is a resume call and to // We abuse new.target both to indicate that this is a resume call and to
// pass in the generator object. In ordinary calls, new.target is always // pass in the generator object. In ordinary calls, new.target is always
@ -1468,7 +1446,6 @@ void Builtins::Generate_CompileOptimized(MacroAssembler* masm) {
Runtime::kCompileOptimized_NotConcurrent); Runtime::kCompileOptimized_NotConcurrent);
} }
void Builtins::Generate_CompileOptimizedConcurrent(MacroAssembler* masm) { void Builtins::Generate_CompileOptimizedConcurrent(MacroAssembler* masm) {
GenerateTailCallToReturnedCode(masm, Runtime::kCompileOptimized_Concurrent); GenerateTailCallToReturnedCode(masm, Runtime::kCompileOptimized_Concurrent);
} }
@ -1518,8 +1495,7 @@ static void GenerateMakeCodeYoungAgainCommon(MacroAssembler* masm) {
// crawls in MakeCodeYoung. This seems a bit fragile. // crawls in MakeCodeYoung. This seems a bit fragile.
// Set a0 to point to the head of the PlatformCodeAge sequence. // Set a0 to point to the head of the PlatformCodeAge sequence.
__ Subu(a0, a0, __ Subu(a0, a0, Operand(kNoCodeAgeSequenceLength - Assembler::kInstrSize));
Operand(kNoCodeAgeSequenceLength - Assembler::kInstrSize));
// The following registers must be saved and restored when calling through to // The following registers must be saved and restored when calling through to
// the runtime: // the runtime:
@ -1538,19 +1514,18 @@ static void GenerateMakeCodeYoungAgainCommon(MacroAssembler* masm) {
__ Jump(a0); __ Jump(a0);
} }
#define DEFINE_CODE_AGE_BUILTIN_GENERATOR(C) \ #define DEFINE_CODE_AGE_BUILTIN_GENERATOR(C) \
void Builtins::Generate_Make##C##CodeYoungAgainEvenMarking( \ void Builtins::Generate_Make##C##CodeYoungAgainEvenMarking( \
MacroAssembler* masm) { \ MacroAssembler* masm) { \
GenerateMakeCodeYoungAgainCommon(masm); \ GenerateMakeCodeYoungAgainCommon(masm); \
} \ } \
void Builtins::Generate_Make##C##CodeYoungAgainOddMarking( \ void Builtins::Generate_Make##C##CodeYoungAgainOddMarking( \
MacroAssembler* masm) { \ MacroAssembler* masm) { \
GenerateMakeCodeYoungAgainCommon(masm); \ GenerateMakeCodeYoungAgainCommon(masm); \
} }
CODE_AGE_LIST(DEFINE_CODE_AGE_BUILTIN_GENERATOR) CODE_AGE_LIST(DEFINE_CODE_AGE_BUILTIN_GENERATOR)
#undef DEFINE_CODE_AGE_BUILTIN_GENERATOR #undef DEFINE_CODE_AGE_BUILTIN_GENERATOR
void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) { void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) {
// For now, as in GenerateMakeCodeYoungAgainCommon, we are relying on the fact // For now, as in GenerateMakeCodeYoungAgainCommon, we are relying on the fact
// that make_code_young doesn't do any garbage collection which allows us to // that make_code_young doesn't do any garbage collection which allows us to
@ -1558,8 +1533,7 @@ void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) {
// pointers. // pointers.
// Set a0 to point to the head of the PlatformCodeAge sequence. // Set a0 to point to the head of the PlatformCodeAge sequence.
__ Subu(a0, a0, __ Subu(a0, a0, Operand(kNoCodeAgeSequenceLength - Assembler::kInstrSize));
Operand(kNoCodeAgeSequenceLength - Assembler::kInstrSize));
// The following registers must be saved and restored when calling through to // The following registers must be saved and restored when calling through to
// the runtime: // the runtime:
@ -1585,17 +1559,14 @@ void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) {
__ Jump(a0); __ Jump(a0);
} }
void Builtins::Generate_MarkCodeAsExecutedTwice(MacroAssembler* masm) { void Builtins::Generate_MarkCodeAsExecutedTwice(MacroAssembler* masm) {
GenerateMakeCodeYoungAgainCommon(masm); GenerateMakeCodeYoungAgainCommon(masm);
} }
void Builtins::Generate_MarkCodeAsToBeExecutedOnce(MacroAssembler* masm) { void Builtins::Generate_MarkCodeAsToBeExecutedOnce(MacroAssembler* masm) {
Generate_MarkCodeAsExecutedOnce(masm); Generate_MarkCodeAsExecutedOnce(masm);
} }
static void Generate_NotifyStubFailureHelper(MacroAssembler* masm, static void Generate_NotifyStubFailureHelper(MacroAssembler* masm,
SaveFPRegsMode save_doubles) { SaveFPRegsMode save_doubles) {
{ {
@ -1611,20 +1582,17 @@ static void Generate_NotifyStubFailureHelper(MacroAssembler* masm,
} }
__ Addu(sp, sp, Operand(kPointerSize)); // Ignore state __ Addu(sp, sp, Operand(kPointerSize)); // Ignore state
__ Jump(ra); // Jump to miss handler __ Jump(ra); // Jump to miss handler
} }
void Builtins::Generate_NotifyStubFailure(MacroAssembler* masm) { void Builtins::Generate_NotifyStubFailure(MacroAssembler* masm) {
Generate_NotifyStubFailureHelper(masm, kDontSaveFPRegs); Generate_NotifyStubFailureHelper(masm, kDontSaveFPRegs);
} }
void Builtins::Generate_NotifyStubFailureSaveDoubles(MacroAssembler* masm) { void Builtins::Generate_NotifyStubFailureSaveDoubles(MacroAssembler* masm) {
Generate_NotifyStubFailureHelper(masm, kSaveFPRegs); Generate_NotifyStubFailureHelper(masm, kSaveFPRegs);
} }
static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm, static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm,
Deoptimizer::BailoutType type) { Deoptimizer::BailoutType type) {
{ {
@ -1660,22 +1628,18 @@ static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm,
__ stop("no cases left"); __ stop("no cases left");
} }
void Builtins::Generate_NotifyDeoptimized(MacroAssembler* masm) { void Builtins::Generate_NotifyDeoptimized(MacroAssembler* masm) {
Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::EAGER); Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::EAGER);
} }
void Builtins::Generate_NotifySoftDeoptimized(MacroAssembler* masm) { void Builtins::Generate_NotifySoftDeoptimized(MacroAssembler* masm) {
Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::SOFT); Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::SOFT);
} }
void Builtins::Generate_NotifyLazyDeoptimized(MacroAssembler* masm) { void Builtins::Generate_NotifyLazyDeoptimized(MacroAssembler* masm) {
Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::LAZY); Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::LAZY);
} }
// Clobbers {t2, t3, t4, t5}. // Clobbers {t2, t3, t4, t5}.
static void CompatibleReceiverCheck(MacroAssembler* masm, Register receiver, static void CompatibleReceiverCheck(MacroAssembler* masm, Register receiver,
Register function_template_info, Register function_template_info,
@ -1738,7 +1702,6 @@ static void CompatibleReceiverCheck(MacroAssembler* masm, Register receiver,
__ bind(&receiver_check_passed); __ bind(&receiver_check_passed);
} }
void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) { void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- a0 : number of arguments excluding receiver // -- a0 : number of arguments excluding receiver
@ -1775,7 +1738,6 @@ void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) {
__ TailCallRuntime(Runtime::kThrowIllegalInvocation); __ TailCallRuntime(Runtime::kThrowIllegalInvocation);
} }
void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) { void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
// Lookup the function in the JavaScript frame. // Lookup the function in the JavaScript frame.
__ lw(a0, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); __ lw(a0, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
@ -1796,7 +1758,8 @@ void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
// Load the OSR entrypoint offset from the deoptimization data. // Load the OSR entrypoint offset from the deoptimization data.
// <osr_offset> = <deopt_data>[#header_size + #osr_pc_offset] // <osr_offset> = <deopt_data>[#header_size + #osr_pc_offset]
__ lw(a1, MemOperand(a1, FixedArray::OffsetOfElementAt( __ lw(a1, MemOperand(a1, FixedArray::OffsetOfElementAt(
DeoptimizationInputData::kOsrPcOffsetIndex) - kHeapObjectTag)); DeoptimizationInputData::kOsrPcOffsetIndex) -
kHeapObjectTag));
__ SmiUntag(a1); __ SmiUntag(a1);
// Compute the target address = code_obj + header_size + osr_offset // Compute the target address = code_obj + header_size + osr_offset
@ -1808,7 +1771,6 @@ void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
__ Ret(); __ Ret();
} }
// static // static
void Builtins::Generate_DatePrototype_GetField(MacroAssembler* masm, void Builtins::Generate_DatePrototype_GetField(MacroAssembler* masm,
int field_index) { int field_index) {
@ -1937,7 +1899,6 @@ void Builtins::Generate_FunctionPrototypeApply(MacroAssembler* masm) {
} }
} }
// static // static
void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) { void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) {
// 1. Make sure we have at least one argument. // 1. Make sure we have at least one argument.
@ -1980,7 +1941,6 @@ void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) {
__ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET);
} }
void Builtins::Generate_ReflectApply(MacroAssembler* masm) { void Builtins::Generate_ReflectApply(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- a0 : argc // -- a0 : argc
@ -2044,7 +2004,6 @@ void Builtins::Generate_ReflectApply(MacroAssembler* masm) {
} }
} }
void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) { void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- a0 : argc // -- a0 : argc
@ -2123,7 +2082,6 @@ void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) {
} }
} }
static void ArgumentAdaptorStackCheck(MacroAssembler* masm, static void ArgumentAdaptorStackCheck(MacroAssembler* masm,
Label* stack_overflow) { Label* stack_overflow) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2145,16 +2103,14 @@ static void ArgumentAdaptorStackCheck(MacroAssembler* masm,
__ Branch(stack_overflow, le, t1, Operand(at)); __ Branch(stack_overflow, le, t1, Operand(at));
} }
static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) { static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) {
__ sll(a0, a0, kSmiTagSize); __ sll(a0, a0, kSmiTagSize);
__ li(t0, Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR))); __ li(t0, Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR)));
__ MultiPush(a0.bit() | a1.bit() | t0.bit() | fp.bit() | ra.bit()); __ MultiPush(a0.bit() | a1.bit() | t0.bit() | fp.bit() | ra.bit());
__ Addu(fp, sp, __ Addu(fp, sp, Operand(StandardFrameConstants::kFixedFrameSizeFromFp +
Operand(StandardFrameConstants::kFixedFrameSizeFromFp + kPointerSize)); kPointerSize));
} }
static void LeaveArgumentsAdaptorFrame(MacroAssembler* masm) { static void LeaveArgumentsAdaptorFrame(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- v0 : result being passed through // -- v0 : result being passed through
@ -2170,7 +2126,6 @@ static void LeaveArgumentsAdaptorFrame(MacroAssembler* masm) {
__ Addu(sp, sp, Operand(kPointerSize)); __ Addu(sp, sp, Operand(kPointerSize));
} }
// static // static
void Builtins::Generate_Apply(MacroAssembler* masm) { void Builtins::Generate_Apply(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2494,7 +2449,6 @@ void Builtins::Generate_CallFunction(MacroAssembler* masm,
} }
} }
// static // static
void Builtins::Generate_CallBoundFunctionImpl(MacroAssembler* masm, void Builtins::Generate_CallBoundFunctionImpl(MacroAssembler* masm,
TailCallMode tail_call_mode) { TailCallMode tail_call_mode) {
@ -2589,7 +2543,6 @@ void Builtins::Generate_CallBoundFunctionImpl(MacroAssembler* masm,
__ Jump(at); __ Jump(at);
} }
// static // static
void Builtins::Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode, void Builtins::Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode,
TailCallMode tail_call_mode) { TailCallMode tail_call_mode) {
@ -2649,7 +2602,6 @@ void Builtins::Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode,
} }
} }
// static // static
void Builtins::Generate_ConstructFunction(MacroAssembler* masm) { void Builtins::Generate_ConstructFunction(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2671,7 +2623,6 @@ void Builtins::Generate_ConstructFunction(MacroAssembler* masm) {
__ Jump(at); __ Jump(at);
} }
// static // static
void Builtins::Generate_ConstructBoundFunction(MacroAssembler* masm) { void Builtins::Generate_ConstructBoundFunction(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2763,7 +2714,6 @@ void Builtins::Generate_ConstructBoundFunction(MacroAssembler* masm) {
__ Jump(at); __ Jump(at);
} }
// static // static
void Builtins::Generate_ConstructProxy(MacroAssembler* masm) { void Builtins::Generate_ConstructProxy(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2782,7 +2732,6 @@ void Builtins::Generate_ConstructProxy(MacroAssembler* masm) {
ExternalReference(Runtime::kJSProxyConstruct, masm->isolate())); ExternalReference(Runtime::kJSProxyConstruct, masm->isolate()));
} }
// static // static
void Builtins::Generate_Construct(MacroAssembler* masm) { void Builtins::Generate_Construct(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2948,8 +2897,8 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
Label invoke, dont_adapt_arguments, stack_overflow; Label invoke, dont_adapt_arguments, stack_overflow;
Label enough, too_few; Label enough, too_few;
__ Branch(&dont_adapt_arguments, eq, __ Branch(&dont_adapt_arguments, eq, a2,
a2, Operand(SharedFunctionInfo::kDontAdaptArgumentsSentinel)); Operand(SharedFunctionInfo::kDontAdaptArgumentsSentinel));
// We use Uless as the number of argument should always be greater than 0. // We use Uless as the number of argument should always be greater than 0.
__ Branch(&too_few, Uless, a0, Operand(a2)); __ Branch(&too_few, Uless, a0, Operand(a2));
@ -3051,7 +3000,6 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
LeaveArgumentsAdaptorFrame(masm); LeaveArgumentsAdaptorFrame(masm);
__ Ret(); __ Ret();
// ------------------------------------------- // -------------------------------------------
// Don't adapt arguments. // Don't adapt arguments.
// ------------------------------------------- // -------------------------------------------
@ -3067,7 +3015,6 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
} }
} }
#undef __ #undef __
} // namespace internal } // namespace internal

View File

@ -0,0 +1,6 @@
paul.lind@imgtec.com
gergely.kis@imgtec.com
akos.palfi@imgtec.com
balazs.kilvady@imgtec.com
dusan.milosavljevic@imgtec.com
ivica.bogosavljevic@imgtec.com

View File

@ -13,7 +13,6 @@
namespace v8 { namespace v8 {
namespace internal { namespace internal {
#define __ ACCESS_MASM(masm) #define __ ACCESS_MASM(masm)
void Builtins::Generate_Adaptor(MacroAssembler* masm, CFunctionId id, void Builtins::Generate_Adaptor(MacroAssembler* masm, CFunctionId id,
@ -49,7 +48,6 @@ void Builtins::Generate_Adaptor(MacroAssembler* masm, CFunctionId id,
exit_frame_type == BUILTIN_EXIT); exit_frame_type == BUILTIN_EXIT);
} }
// Load the built-in InternalArray function from the current context. // Load the built-in InternalArray function from the current context.
static void GenerateLoadInternalArrayFunction(MacroAssembler* masm, static void GenerateLoadInternalArrayFunction(MacroAssembler* masm,
Register result) { Register result) {
@ -57,14 +55,12 @@ static void GenerateLoadInternalArrayFunction(MacroAssembler* masm,
__ LoadNativeContextSlot(Context::INTERNAL_ARRAY_FUNCTION_INDEX, result); __ LoadNativeContextSlot(Context::INTERNAL_ARRAY_FUNCTION_INDEX, result);
} }
// Load the built-in Array function from the current context. // Load the built-in Array function from the current context.
static void GenerateLoadArrayFunction(MacroAssembler* masm, Register result) { static void GenerateLoadArrayFunction(MacroAssembler* masm, Register result) {
// Load the Array function from the native context. // Load the Array function from the native context.
__ LoadNativeContextSlot(Context::ARRAY_FUNCTION_INDEX, result); __ LoadNativeContextSlot(Context::ARRAY_FUNCTION_INDEX, result);
} }
void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) { void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- a0 : number of arguments // -- a0 : number of arguments
@ -80,11 +76,11 @@ void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
// Initial map for the builtin InternalArray functions should be maps. // Initial map for the builtin InternalArray functions should be maps.
__ ld(a2, FieldMemOperand(a1, JSFunction::kPrototypeOrInitialMapOffset)); __ ld(a2, FieldMemOperand(a1, JSFunction::kPrototypeOrInitialMapOffset));
__ SmiTst(a2, a4); __ SmiTst(a2, a4);
__ Assert(ne, kUnexpectedInitialMapForInternalArrayFunction, __ Assert(ne, kUnexpectedInitialMapForInternalArrayFunction, a4,
a4, Operand(zero_reg)); Operand(zero_reg));
__ GetObjectType(a2, a3, a4); __ GetObjectType(a2, a3, a4);
__ Assert(eq, kUnexpectedInitialMapForInternalArrayFunction, __ Assert(eq, kUnexpectedInitialMapForInternalArrayFunction, a4,
a4, Operand(MAP_TYPE)); Operand(MAP_TYPE));
} }
// Run the native code for the InternalArray function called as a normal // Run the native code for the InternalArray function called as a normal
@ -94,7 +90,6 @@ void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
__ TailCallStub(&stub); __ TailCallStub(&stub);
} }
void Builtins::Generate_ArrayCode(MacroAssembler* masm) { void Builtins::Generate_ArrayCode(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- a0 : number of arguments // -- a0 : number of arguments
@ -110,11 +105,11 @@ void Builtins::Generate_ArrayCode(MacroAssembler* masm) {
// Initial map for the builtin Array functions should be maps. // Initial map for the builtin Array functions should be maps.
__ ld(a2, FieldMemOperand(a1, JSFunction::kPrototypeOrInitialMapOffset)); __ ld(a2, FieldMemOperand(a1, JSFunction::kPrototypeOrInitialMapOffset));
__ SmiTst(a2, a4); __ SmiTst(a2, a4);
__ Assert(ne, kUnexpectedInitialMapForArrayFunction1, __ Assert(ne, kUnexpectedInitialMapForArrayFunction1, a4,
a4, Operand(zero_reg)); Operand(zero_reg));
__ GetObjectType(a2, a3, a4); __ GetObjectType(a2, a3, a4);
__ Assert(eq, kUnexpectedInitialMapForArrayFunction2, __ Assert(eq, kUnexpectedInitialMapForArrayFunction2, a4,
a4, Operand(MAP_TYPE)); Operand(MAP_TYPE));
} }
// Run the native code for the Array function called as a normal function. // Run the native code for the Array function called as a normal function.
@ -125,7 +120,6 @@ void Builtins::Generate_ArrayCode(MacroAssembler* masm) {
__ TailCallStub(&stub); __ TailCallStub(&stub);
} }
// static // static
void Builtins::Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind) { void Builtins::Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -274,7 +268,6 @@ void Builtins::Generate_NumberConstructor(MacroAssembler* masm) {
__ DropAndRet(1); __ DropAndRet(1);
} }
void Builtins::Generate_NumberConstructor_ConstructStub(MacroAssembler* masm) { void Builtins::Generate_NumberConstructor_ConstructStub(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- a0 : number of arguments // -- a0 : number of arguments
@ -354,7 +347,6 @@ void Builtins::Generate_NumberConstructor_ConstructStub(MacroAssembler* masm) {
} }
} }
// static // static
void Builtins::Generate_StringConstructor(MacroAssembler* masm) { void Builtins::Generate_StringConstructor(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -427,7 +419,6 @@ void Builtins::Generate_StringConstructor(MacroAssembler* masm) {
} }
} }
void Builtins::Generate_StringConstructor_ConstructStub(MacroAssembler* masm) { void Builtins::Generate_StringConstructor_ConstructStub(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- a0 : number of arguments // -- a0 : number of arguments
@ -541,7 +532,6 @@ static void GenerateTailCallToReturnedCode(MacroAssembler* masm,
__ Jump(at); __ Jump(at);
} }
void Builtins::Generate_InOptimizationQueue(MacroAssembler* masm) { void Builtins::Generate_InOptimizationQueue(MacroAssembler* masm) {
// Checking whether the queued function is ready for install is optional, // Checking whether the queued function is ready for install is optional,
// since we come across interrupts and stack checks elsewhere. However, // since we come across interrupts and stack checks elsewhere. However,
@ -558,7 +548,6 @@ void Builtins::Generate_InOptimizationQueue(MacroAssembler* masm) {
GenerateTailCallToSharedCode(masm); GenerateTailCallToSharedCode(masm);
} }
static void Generate_JSConstructStubHelper(MacroAssembler* masm, static void Generate_JSConstructStubHelper(MacroAssembler* masm,
bool is_api_function, bool is_api_function,
bool create_implicit_receiver, bool create_implicit_receiver,
@ -706,22 +695,18 @@ static void Generate_JSConstructStubHelper(MacroAssembler* masm,
__ Ret(); __ Ret();
} }
void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) { void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, false, true, false); Generate_JSConstructStubHelper(masm, false, true, false);
} }
void Builtins::Generate_JSConstructStubApi(MacroAssembler* masm) { void Builtins::Generate_JSConstructStubApi(MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, true, false, false); Generate_JSConstructStubHelper(masm, true, false, false);
} }
void Builtins::Generate_JSBuiltinsConstructStub(MacroAssembler* masm) { void Builtins::Generate_JSBuiltinsConstructStub(MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, false, false, false); Generate_JSConstructStubHelper(masm, false, false, false);
} }
void Builtins::Generate_JSBuiltinsConstructStubForDerived( void Builtins::Generate_JSBuiltinsConstructStubForDerived(
MacroAssembler* masm) { MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, false, false, true); Generate_JSConstructStubHelper(masm, false, false, true);
@ -808,7 +793,7 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) {
{ {
__ ld(a0, FieldMemOperand(a4, JSFunction::kSharedFunctionInfoOffset)); __ ld(a0, FieldMemOperand(a4, JSFunction::kSharedFunctionInfoOffset));
__ lw(a0, __ lw(a0,
FieldMemOperand(a0, SharedFunctionInfo::kFormalParameterCountOffset)); FieldMemOperand(a0, SharedFunctionInfo::kFormalParameterCountOffset));
// We abuse new.target both to indicate that this is a resume call and to // We abuse new.target both to indicate that this is a resume call and to
// pass in the generator object. In ordinary calls, new.target is always // pass in the generator object. In ordinary calls, new.target is always
// undefined because generator functions are non-constructable. // undefined because generator functions are non-constructable.
@ -889,10 +874,8 @@ void Builtins::Generate_ConstructedNonConstructable(MacroAssembler* masm) {
__ CallRuntime(Runtime::kThrowConstructedNonConstructable); __ CallRuntime(Runtime::kThrowConstructedNonConstructable);
} }
enum IsTagged { kArgcIsSmiTagged, kArgcIsUntaggedInt }; enum IsTagged { kArgcIsSmiTagged, kArgcIsUntaggedInt };
// Clobbers a2; preserves all other registers. // Clobbers a2; preserves all other registers.
static void Generate_CheckStackOverflow(MacroAssembler* masm, Register argc, static void Generate_CheckStackOverflow(MacroAssembler* masm, Register argc,
IsTagged argc_is_tagged) { IsTagged argc_is_tagged) {
@ -919,7 +902,6 @@ static void Generate_CheckStackOverflow(MacroAssembler* masm, Register argc,
__ bind(&okay); __ bind(&okay);
} }
static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm, static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
bool is_construct) { bool is_construct) {
// Called from JSEntryStub::GenerateBody // Called from JSEntryStub::GenerateBody
@ -959,13 +941,13 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
Label loop, entry; Label loop, entry;
__ Dlsa(a6, s0, a3, kPointerSizeLog2); __ Dlsa(a6, s0, a3, kPointerSizeLog2);
__ b(&entry); __ b(&entry);
__ nop(); // Branch delay slot nop. __ nop(); // Branch delay slot nop.
// a6 points past last arg. // a6 points past last arg.
__ bind(&loop); __ bind(&loop);
__ ld(a4, MemOperand(s0)); // Read next parameter. __ ld(a4, MemOperand(s0)); // Read next parameter.
__ daddiu(s0, s0, kPointerSize); __ daddiu(s0, s0, kPointerSize);
__ ld(a4, MemOperand(a4)); // Dereference handle. __ ld(a4, MemOperand(a4)); // Dereference handle.
__ push(a4); // Push parameter. __ push(a4); // Push parameter.
__ bind(&entry); __ bind(&entry);
__ Branch(&loop, ne, s0, Operand(a6)); __ Branch(&loop, ne, s0, Operand(a6));
@ -995,12 +977,10 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
__ Jump(ra); __ Jump(ra);
} }
void Builtins::Generate_JSEntryTrampoline(MacroAssembler* masm) { void Builtins::Generate_JSEntryTrampoline(MacroAssembler* masm) {
Generate_JSEntryTrampolineHelper(masm, false); Generate_JSEntryTrampolineHelper(masm, false);
} }
void Builtins::Generate_JSConstructEntryTrampoline(MacroAssembler* masm) { void Builtins::Generate_JSConstructEntryTrampoline(MacroAssembler* masm) {
Generate_JSEntryTrampolineHelper(masm, true); Generate_JSEntryTrampolineHelper(masm, true);
} }
@ -1506,8 +1486,7 @@ static void GenerateMakeCodeYoungAgainCommon(MacroAssembler* masm) {
// crawls in MakeCodeYoung. This seems a bit fragile. // crawls in MakeCodeYoung. This seems a bit fragile.
// Set a0 to point to the head of the PlatformCodeAge sequence. // Set a0 to point to the head of the PlatformCodeAge sequence.
__ Dsubu(a0, a0, __ Dsubu(a0, a0, Operand(kNoCodeAgeSequenceLength - Assembler::kInstrSize));
Operand(kNoCodeAgeSequenceLength - Assembler::kInstrSize));
// The following registers must be saved and restored when calling through to // The following registers must be saved and restored when calling through to
// the runtime: // the runtime:
@ -1526,19 +1505,18 @@ static void GenerateMakeCodeYoungAgainCommon(MacroAssembler* masm) {
__ Jump(a0); __ Jump(a0);
} }
#define DEFINE_CODE_AGE_BUILTIN_GENERATOR(C) \ #define DEFINE_CODE_AGE_BUILTIN_GENERATOR(C) \
void Builtins::Generate_Make##C##CodeYoungAgainEvenMarking( \ void Builtins::Generate_Make##C##CodeYoungAgainEvenMarking( \
MacroAssembler* masm) { \ MacroAssembler* masm) { \
GenerateMakeCodeYoungAgainCommon(masm); \ GenerateMakeCodeYoungAgainCommon(masm); \
} \ } \
void Builtins::Generate_Make##C##CodeYoungAgainOddMarking( \ void Builtins::Generate_Make##C##CodeYoungAgainOddMarking( \
MacroAssembler* masm) { \ MacroAssembler* masm) { \
GenerateMakeCodeYoungAgainCommon(masm); \ GenerateMakeCodeYoungAgainCommon(masm); \
} }
CODE_AGE_LIST(DEFINE_CODE_AGE_BUILTIN_GENERATOR) CODE_AGE_LIST(DEFINE_CODE_AGE_BUILTIN_GENERATOR)
#undef DEFINE_CODE_AGE_BUILTIN_GENERATOR #undef DEFINE_CODE_AGE_BUILTIN_GENERATOR
void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) { void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) {
// For now, as in GenerateMakeCodeYoungAgainCommon, we are relying on the fact // For now, as in GenerateMakeCodeYoungAgainCommon, we are relying on the fact
// that make_code_young doesn't do any garbage collection which allows us to // that make_code_young doesn't do any garbage collection which allows us to
@ -1546,8 +1524,7 @@ void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) {
// pointers. // pointers.
// Set a0 to point to the head of the PlatformCodeAge sequence. // Set a0 to point to the head of the PlatformCodeAge sequence.
__ Dsubu(a0, a0, __ Dsubu(a0, a0, Operand(kNoCodeAgeSequenceLength - Assembler::kInstrSize));
Operand(kNoCodeAgeSequenceLength - Assembler::kInstrSize));
// The following registers must be saved and restored when calling through to // The following registers must be saved and restored when calling through to
// the runtime: // the runtime:
@ -1573,17 +1550,14 @@ void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) {
__ Jump(a0); __ Jump(a0);
} }
void Builtins::Generate_MarkCodeAsExecutedTwice(MacroAssembler* masm) { void Builtins::Generate_MarkCodeAsExecutedTwice(MacroAssembler* masm) {
GenerateMakeCodeYoungAgainCommon(masm); GenerateMakeCodeYoungAgainCommon(masm);
} }
void Builtins::Generate_MarkCodeAsToBeExecutedOnce(MacroAssembler* masm) { void Builtins::Generate_MarkCodeAsToBeExecutedOnce(MacroAssembler* masm) {
Generate_MarkCodeAsExecutedOnce(masm); Generate_MarkCodeAsExecutedOnce(masm);
} }
static void Generate_NotifyStubFailureHelper(MacroAssembler* masm, static void Generate_NotifyStubFailureHelper(MacroAssembler* masm,
SaveFPRegsMode save_doubles) { SaveFPRegsMode save_doubles) {
{ {
@ -1599,20 +1573,17 @@ static void Generate_NotifyStubFailureHelper(MacroAssembler* masm,
} }
__ Daddu(sp, sp, Operand(kPointerSize)); // Ignore state __ Daddu(sp, sp, Operand(kPointerSize)); // Ignore state
__ Jump(ra); // Jump to miss handler __ Jump(ra); // Jump to miss handler
} }
void Builtins::Generate_NotifyStubFailure(MacroAssembler* masm) { void Builtins::Generate_NotifyStubFailure(MacroAssembler* masm) {
Generate_NotifyStubFailureHelper(masm, kDontSaveFPRegs); Generate_NotifyStubFailureHelper(masm, kDontSaveFPRegs);
} }
void Builtins::Generate_NotifyStubFailureSaveDoubles(MacroAssembler* masm) { void Builtins::Generate_NotifyStubFailureSaveDoubles(MacroAssembler* masm) {
Generate_NotifyStubFailureHelper(masm, kSaveFPRegs); Generate_NotifyStubFailureHelper(masm, kSaveFPRegs);
} }
static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm, static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm,
Deoptimizer::BailoutType type) { Deoptimizer::BailoutType type) {
{ {
@ -1650,22 +1621,18 @@ static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm,
__ stop("no cases left"); __ stop("no cases left");
} }
void Builtins::Generate_NotifyDeoptimized(MacroAssembler* masm) { void Builtins::Generate_NotifyDeoptimized(MacroAssembler* masm) {
Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::EAGER); Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::EAGER);
} }
void Builtins::Generate_NotifySoftDeoptimized(MacroAssembler* masm) { void Builtins::Generate_NotifySoftDeoptimized(MacroAssembler* masm) {
Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::SOFT); Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::SOFT);
} }
void Builtins::Generate_NotifyLazyDeoptimized(MacroAssembler* masm) { void Builtins::Generate_NotifyLazyDeoptimized(MacroAssembler* masm) {
Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::LAZY); Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::LAZY);
} }
// Clobbers {t2, t3, a4, a5}. // Clobbers {t2, t3, a4, a5}.
static void CompatibleReceiverCheck(MacroAssembler* masm, Register receiver, static void CompatibleReceiverCheck(MacroAssembler* masm, Register receiver,
Register function_template_info, Register function_template_info,
@ -1729,7 +1696,6 @@ static void CompatibleReceiverCheck(MacroAssembler* masm, Register receiver,
__ bind(&receiver_check_passed); __ bind(&receiver_check_passed);
} }
void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) { void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- a0 : number of arguments excluding receiver // -- a0 : number of arguments excluding receiver
@ -1766,7 +1732,6 @@ void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) {
__ TailCallRuntime(Runtime::kThrowIllegalInvocation); __ TailCallRuntime(Runtime::kThrowIllegalInvocation);
} }
void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) { void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
// Lookup the function in the JavaScript frame. // Lookup the function in the JavaScript frame.
__ ld(a0, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); __ ld(a0, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
@ -1787,7 +1752,8 @@ void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
// Load the OSR entrypoint offset from the deoptimization data. // Load the OSR entrypoint offset from the deoptimization data.
// <osr_offset> = <deopt_data>[#header_size + #osr_pc_offset] // <osr_offset> = <deopt_data>[#header_size + #osr_pc_offset]
__ ld(a1, MemOperand(a1, FixedArray::OffsetOfElementAt( __ ld(a1, MemOperand(a1, FixedArray::OffsetOfElementAt(
DeoptimizationInputData::kOsrPcOffsetIndex) - kHeapObjectTag)); DeoptimizationInputData::kOsrPcOffsetIndex) -
kHeapObjectTag));
__ SmiUntag(a1); __ SmiUntag(a1);
// Compute the target address = code_obj + header_size + osr_offset // Compute the target address = code_obj + header_size + osr_offset
@ -1799,7 +1765,6 @@ void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
__ Ret(); __ Ret();
} }
// static // static
void Builtins::Generate_DatePrototype_GetField(MacroAssembler* masm, void Builtins::Generate_DatePrototype_GetField(MacroAssembler* masm,
int field_index) { int field_index) {
@ -1928,7 +1893,6 @@ void Builtins::Generate_FunctionPrototypeApply(MacroAssembler* masm) {
} }
} }
// static // static
void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) { void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) {
// 1. Make sure we have at least one argument. // 1. Make sure we have at least one argument.
@ -1971,7 +1935,6 @@ void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) {
__ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET);
} }
void Builtins::Generate_ReflectApply(MacroAssembler* masm) { void Builtins::Generate_ReflectApply(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- a0 : argc // -- a0 : argc
@ -2035,7 +1998,6 @@ void Builtins::Generate_ReflectApply(MacroAssembler* masm) {
} }
} }
void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) { void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- a0 : argc // -- a0 : argc
@ -2114,7 +2076,6 @@ void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) {
} }
} }
static void ArgumentAdaptorStackCheck(MacroAssembler* masm, static void ArgumentAdaptorStackCheck(MacroAssembler* masm,
Label* stack_overflow) { Label* stack_overflow) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2136,17 +2097,15 @@ static void ArgumentAdaptorStackCheck(MacroAssembler* masm,
__ Branch(stack_overflow, le, a5, Operand(at)); __ Branch(stack_overflow, le, a5, Operand(at));
} }
static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) { static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) {
// __ sll(a0, a0, kSmiTagSize); // __ sll(a0, a0, kSmiTagSize);
__ dsll32(a0, a0, 0); __ dsll32(a0, a0, 0);
__ li(a4, Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR))); __ li(a4, Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR)));
__ MultiPush(a0.bit() | a1.bit() | a4.bit() | fp.bit() | ra.bit()); __ MultiPush(a0.bit() | a1.bit() | a4.bit() | fp.bit() | ra.bit());
__ Daddu(fp, sp, __ Daddu(fp, sp, Operand(StandardFrameConstants::kFixedFrameSizeFromFp +
Operand(StandardFrameConstants::kFixedFrameSizeFromFp + kPointerSize)); kPointerSize));
} }
static void LeaveArgumentsAdaptorFrame(MacroAssembler* masm) { static void LeaveArgumentsAdaptorFrame(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- v0 : result being passed through // -- v0 : result being passed through
@ -2163,7 +2122,6 @@ static void LeaveArgumentsAdaptorFrame(MacroAssembler* masm) {
__ Daddu(sp, sp, Operand(kPointerSize)); __ Daddu(sp, sp, Operand(kPointerSize));
} }
// static // static
void Builtins::Generate_Apply(MacroAssembler* masm) { void Builtins::Generate_Apply(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2485,7 +2443,6 @@ void Builtins::Generate_CallFunction(MacroAssembler* masm,
} }
} }
// static // static
void Builtins::Generate_CallBoundFunctionImpl(MacroAssembler* masm, void Builtins::Generate_CallBoundFunctionImpl(MacroAssembler* masm,
TailCallMode tail_call_mode) { TailCallMode tail_call_mode) {
@ -2580,7 +2537,6 @@ void Builtins::Generate_CallBoundFunctionImpl(MacroAssembler* masm,
__ Jump(at); __ Jump(at);
} }
// static // static
void Builtins::Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode, void Builtins::Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode,
TailCallMode tail_call_mode) { TailCallMode tail_call_mode) {
@ -2640,7 +2596,6 @@ void Builtins::Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode,
} }
} }
void Builtins::Generate_ConstructFunction(MacroAssembler* masm) { void Builtins::Generate_ConstructFunction(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- a0 : the number of arguments (not including the receiver) // -- a0 : the number of arguments (not including the receiver)
@ -2661,7 +2616,6 @@ void Builtins::Generate_ConstructFunction(MacroAssembler* masm) {
__ Jump(at); __ Jump(at);
} }
// static // static
void Builtins::Generate_ConstructBoundFunction(MacroAssembler* masm) { void Builtins::Generate_ConstructBoundFunction(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2753,7 +2707,6 @@ void Builtins::Generate_ConstructBoundFunction(MacroAssembler* masm) {
__ Jump(at); __ Jump(at);
} }
// static // static
void Builtins::Generate_ConstructProxy(MacroAssembler* masm) { void Builtins::Generate_ConstructProxy(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2772,7 +2725,6 @@ void Builtins::Generate_ConstructProxy(MacroAssembler* masm) {
ExternalReference(Runtime::kJSProxyConstruct, masm->isolate())); ExternalReference(Runtime::kJSProxyConstruct, masm->isolate()));
} }
// static // static
void Builtins::Generate_Construct(MacroAssembler* masm) { void Builtins::Generate_Construct(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2938,8 +2890,8 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
Label invoke, dont_adapt_arguments, stack_overflow; Label invoke, dont_adapt_arguments, stack_overflow;
Label enough, too_few; Label enough, too_few;
__ Branch(&dont_adapt_arguments, eq, __ Branch(&dont_adapt_arguments, eq, a2,
a2, Operand(SharedFunctionInfo::kDontAdaptArgumentsSentinel)); Operand(SharedFunctionInfo::kDontAdaptArgumentsSentinel));
// We use Uless as the number of argument should always be greater than 0. // We use Uless as the number of argument should always be greater than 0.
__ Branch(&too_few, Uless, a0, Operand(a2)); __ Branch(&too_few, Uless, a0, Operand(a2));
@ -3043,7 +2995,6 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
LeaveArgumentsAdaptorFrame(masm); LeaveArgumentsAdaptorFrame(masm);
__ Ret(); __ Ret();
// ------------------------------------------- // -------------------------------------------
// Don't adapt arguments. // Don't adapt arguments.
// ------------------------------------------- // -------------------------------------------
@ -3059,7 +3010,6 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
} }
} }
#undef __ #undef __
} // namespace internal } // namespace internal

6
src/builtins/ppc/OWNERS Normal file
View File

@ -0,0 +1,6 @@
jyan@ca.ibm.com
dstence@us.ibm.com
joransiu@ca.ibm.com
mbrandy@us.ibm.com
michael_dawson@ca.ibm.com
bjaideep@ca.ibm.com

View File

@ -13,10 +13,8 @@
namespace v8 { namespace v8 {
namespace internal { namespace internal {
#define __ ACCESS_MASM(masm) #define __ ACCESS_MASM(masm)
void Builtins::Generate_Adaptor(MacroAssembler* masm, CFunctionId id, void Builtins::Generate_Adaptor(MacroAssembler* masm, CFunctionId id,
ExitFrameType exit_frame_type) { ExitFrameType exit_frame_type) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -50,7 +48,6 @@ void Builtins::Generate_Adaptor(MacroAssembler* masm, CFunctionId id,
exit_frame_type == BUILTIN_EXIT); exit_frame_type == BUILTIN_EXIT);
} }
// Load the built-in InternalArray function from the current context. // Load the built-in InternalArray function from the current context.
static void GenerateLoadInternalArrayFunction(MacroAssembler* masm, static void GenerateLoadInternalArrayFunction(MacroAssembler* masm,
Register result) { Register result) {
@ -58,14 +55,12 @@ static void GenerateLoadInternalArrayFunction(MacroAssembler* masm,
__ LoadNativeContextSlot(Context::INTERNAL_ARRAY_FUNCTION_INDEX, result); __ LoadNativeContextSlot(Context::INTERNAL_ARRAY_FUNCTION_INDEX, result);
} }
// Load the built-in Array function from the current context. // Load the built-in Array function from the current context.
static void GenerateLoadArrayFunction(MacroAssembler* masm, Register result) { static void GenerateLoadArrayFunction(MacroAssembler* masm, Register result) {
// Load the Array function from the current native context. // Load the Array function from the current native context.
__ LoadNativeContextSlot(Context::ARRAY_FUNCTION_INDEX, result); __ LoadNativeContextSlot(Context::ARRAY_FUNCTION_INDEX, result);
} }
void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) { void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- r3 : number of arguments // -- r3 : number of arguments
@ -93,7 +88,6 @@ void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
__ TailCallStub(&stub); __ TailCallStub(&stub);
} }
void Builtins::Generate_ArrayCode(MacroAssembler* masm) { void Builtins::Generate_ArrayCode(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- r3 : number of arguments // -- r3 : number of arguments
@ -122,7 +116,6 @@ void Builtins::Generate_ArrayCode(MacroAssembler* masm) {
__ TailCallStub(&stub); __ TailCallStub(&stub);
} }
// static // static
void Builtins::Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind) { void Builtins::Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -278,7 +271,6 @@ void Builtins::Generate_NumberConstructor(MacroAssembler* masm) {
__ Ret(1); __ Ret(1);
} }
// static // static
void Builtins::Generate_NumberConstructor_ConstructStub(MacroAssembler* masm) { void Builtins::Generate_NumberConstructor_ConstructStub(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -361,7 +353,6 @@ void Builtins::Generate_NumberConstructor_ConstructStub(MacroAssembler* masm) {
} }
} }
// static // static
void Builtins::Generate_StringConstructor(MacroAssembler* masm) { void Builtins::Generate_StringConstructor(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -516,7 +507,6 @@ void Builtins::Generate_StringConstructor_ConstructStub(MacroAssembler* masm) {
} }
} }
static void GenerateTailCallToSharedCode(MacroAssembler* masm) { static void GenerateTailCallToSharedCode(MacroAssembler* masm) {
__ LoadP(ip, FieldMemOperand(r4, JSFunction::kSharedFunctionInfoOffset)); __ LoadP(ip, FieldMemOperand(r4, JSFunction::kSharedFunctionInfoOffset));
__ LoadP(ip, FieldMemOperand(ip, SharedFunctionInfo::kCodeOffset)); __ LoadP(ip, FieldMemOperand(ip, SharedFunctionInfo::kCodeOffset));
@ -550,7 +540,6 @@ static void GenerateTailCallToReturnedCode(MacroAssembler* masm,
__ JumpToJSEntry(ip); __ JumpToJSEntry(ip);
} }
void Builtins::Generate_InOptimizationQueue(MacroAssembler* masm) { void Builtins::Generate_InOptimizationQueue(MacroAssembler* masm) {
// Checking whether the queued function is ready for install is optional, // Checking whether the queued function is ready for install is optional,
// since we come across interrupts and stack checks elsewhere. However, // since we come across interrupts and stack checks elsewhere. However,
@ -568,7 +557,6 @@ void Builtins::Generate_InOptimizationQueue(MacroAssembler* masm) {
GenerateTailCallToSharedCode(masm); GenerateTailCallToSharedCode(masm);
} }
static void Generate_JSConstructStubHelper(MacroAssembler* masm, static void Generate_JSConstructStubHelper(MacroAssembler* masm,
bool is_api_function, bool is_api_function,
bool create_implicit_receiver, bool create_implicit_receiver,
@ -725,22 +713,18 @@ static void Generate_JSConstructStubHelper(MacroAssembler* masm,
__ blr(); __ blr();
} }
void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) { void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, false, true, false); Generate_JSConstructStubHelper(masm, false, true, false);
} }
void Builtins::Generate_JSConstructStubApi(MacroAssembler* masm) { void Builtins::Generate_JSConstructStubApi(MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, true, false, false); Generate_JSConstructStubHelper(masm, true, false, false);
} }
void Builtins::Generate_JSBuiltinsConstructStub(MacroAssembler* masm) { void Builtins::Generate_JSBuiltinsConstructStub(MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, false, false, false); Generate_JSConstructStubHelper(masm, false, false, false);
} }
void Builtins::Generate_JSBuiltinsConstructStubForDerived( void Builtins::Generate_JSBuiltinsConstructStubForDerived(
MacroAssembler* masm) { MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, false, false, true); Generate_JSConstructStubHelper(masm, false, false, true);
@ -924,10 +908,8 @@ void Builtins::Generate_ConstructedNonConstructable(MacroAssembler* masm) {
__ CallRuntime(Runtime::kThrowConstructedNonConstructable); __ CallRuntime(Runtime::kThrowConstructedNonConstructable);
} }
enum IsTagged { kArgcIsSmiTagged, kArgcIsUntaggedInt }; enum IsTagged { kArgcIsSmiTagged, kArgcIsUntaggedInt };
// Clobbers r5; preserves all other registers. // Clobbers r5; preserves all other registers.
static void Generate_CheckStackOverflow(MacroAssembler* masm, Register argc, static void Generate_CheckStackOverflow(MacroAssembler* masm, Register argc,
IsTagged argc_is_tagged) { IsTagged argc_is_tagged) {
@ -955,7 +937,6 @@ static void Generate_CheckStackOverflow(MacroAssembler* masm, Register argc,
__ bind(&okay); __ bind(&okay);
} }
static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm, static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
bool is_construct) { bool is_construct) {
// Called from Generate_JS_Entry // Called from Generate_JS_Entry
@ -1031,12 +1012,10 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
// r3: result // r3: result
} }
void Builtins::Generate_JSEntryTrampoline(MacroAssembler* masm) { void Builtins::Generate_JSEntryTrampoline(MacroAssembler* masm) {
Generate_JSEntryTrampolineHelper(masm, false); Generate_JSEntryTrampolineHelper(masm, false);
} }
void Builtins::Generate_JSConstructEntryTrampoline(MacroAssembler* masm) { void Builtins::Generate_JSConstructEntryTrampoline(MacroAssembler* masm) {
Generate_JSEntryTrampolineHelper(masm, true); Generate_JSEntryTrampolineHelper(masm, true);
} }
@ -1289,7 +1268,7 @@ void Builtins::Generate_InterpreterEnterBytecodeDispatch(MacroAssembler* masm) {
// Get the bytecode array pointer from the frame. // Get the bytecode array pointer from the frame.
__ LoadP(kInterpreterBytecodeArrayRegister, __ LoadP(kInterpreterBytecodeArrayRegister,
MemOperand(fp, InterpreterFrameConstants::kBytecodeArrayFromFp)); MemOperand(fp, InterpreterFrameConstants::kBytecodeArrayFromFp));
if (FLAG_debug_code) { if (FLAG_debug_code) {
// Check function data field is actually a BytecodeArray object. // Check function data field is actually a BytecodeArray object.
@ -1302,7 +1281,7 @@ void Builtins::Generate_InterpreterEnterBytecodeDispatch(MacroAssembler* masm) {
// Get the target bytecode offset from the frame. // Get the target bytecode offset from the frame.
__ LoadP(kInterpreterBytecodeOffsetRegister, __ LoadP(kInterpreterBytecodeOffsetRegister,
MemOperand(fp, InterpreterFrameConstants::kBytecodeOffsetFromFp)); MemOperand(fp, InterpreterFrameConstants::kBytecodeOffsetFromFp));
__ SmiUntag(kInterpreterBytecodeOffsetRegister); __ SmiUntag(kInterpreterBytecodeOffsetRegister);
// Dispatch to the target bytecode. // Dispatch to the target bytecode.
@ -1313,7 +1292,6 @@ void Builtins::Generate_InterpreterEnterBytecodeDispatch(MacroAssembler* masm) {
__ Jump(ip); __ Jump(ip);
} }
void Builtins::Generate_CompileLazy(MacroAssembler* masm) { void Builtins::Generate_CompileLazy(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- r3 : argument count (preserved for callee) // -- r3 : argument count (preserved for callee)
@ -1467,7 +1445,6 @@ void Builtins::Generate_CompileOptimized(MacroAssembler* masm) {
Runtime::kCompileOptimized_NotConcurrent); Runtime::kCompileOptimized_NotConcurrent);
} }
void Builtins::Generate_CompileOptimizedConcurrent(MacroAssembler* masm) { void Builtins::Generate_CompileOptimizedConcurrent(MacroAssembler* masm) {
GenerateTailCallToReturnedCode(masm, Runtime::kCompileOptimized_Concurrent); GenerateTailCallToReturnedCode(masm, Runtime::kCompileOptimized_Concurrent);
} }
@ -1550,7 +1527,6 @@ static void GenerateMakeCodeYoungAgainCommon(MacroAssembler* masm) {
CODE_AGE_LIST(DEFINE_CODE_AGE_BUILTIN_GENERATOR) CODE_AGE_LIST(DEFINE_CODE_AGE_BUILTIN_GENERATOR)
#undef DEFINE_CODE_AGE_BUILTIN_GENERATOR #undef DEFINE_CODE_AGE_BUILTIN_GENERATOR
void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) { void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) {
// For now, we are relying on the fact that make_code_young doesn't do any // For now, we are relying on the fact that make_code_young doesn't do any
// garbage collection which allows us to save/restore the registers without // garbage collection which allows us to save/restore the registers without
@ -1587,17 +1563,14 @@ void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) {
__ Jump(r3); __ Jump(r3);
} }
void Builtins::Generate_MarkCodeAsExecutedTwice(MacroAssembler* masm) { void Builtins::Generate_MarkCodeAsExecutedTwice(MacroAssembler* masm) {
GenerateMakeCodeYoungAgainCommon(masm); GenerateMakeCodeYoungAgainCommon(masm);
} }
void Builtins::Generate_MarkCodeAsToBeExecutedOnce(MacroAssembler* masm) { void Builtins::Generate_MarkCodeAsToBeExecutedOnce(MacroAssembler* masm) {
Generate_MarkCodeAsExecutedOnce(masm); Generate_MarkCodeAsExecutedOnce(masm);
} }
static void Generate_NotifyStubFailureHelper(MacroAssembler* masm, static void Generate_NotifyStubFailureHelper(MacroAssembler* masm,
SaveFPRegsMode save_doubles) { SaveFPRegsMode save_doubles) {
{ {
@ -1616,17 +1589,14 @@ static void Generate_NotifyStubFailureHelper(MacroAssembler* masm,
__ blr(); // Jump to miss handler __ blr(); // Jump to miss handler
} }
void Builtins::Generate_NotifyStubFailure(MacroAssembler* masm) { void Builtins::Generate_NotifyStubFailure(MacroAssembler* masm) {
Generate_NotifyStubFailureHelper(masm, kDontSaveFPRegs); Generate_NotifyStubFailureHelper(masm, kDontSaveFPRegs);
} }
void Builtins::Generate_NotifyStubFailureSaveDoubles(MacroAssembler* masm) { void Builtins::Generate_NotifyStubFailureSaveDoubles(MacroAssembler* masm) {
Generate_NotifyStubFailureHelper(masm, kSaveFPRegs); Generate_NotifyStubFailureHelper(masm, kSaveFPRegs);
} }
static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm, static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm,
Deoptimizer::BailoutType type) { Deoptimizer::BailoutType type) {
{ {
@ -1663,22 +1633,18 @@ static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm,
__ stop("no cases left"); __ stop("no cases left");
} }
void Builtins::Generate_NotifyDeoptimized(MacroAssembler* masm) { void Builtins::Generate_NotifyDeoptimized(MacroAssembler* masm) {
Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::EAGER); Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::EAGER);
} }
void Builtins::Generate_NotifySoftDeoptimized(MacroAssembler* masm) { void Builtins::Generate_NotifySoftDeoptimized(MacroAssembler* masm) {
Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::SOFT); Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::SOFT);
} }
void Builtins::Generate_NotifyLazyDeoptimized(MacroAssembler* masm) { void Builtins::Generate_NotifyLazyDeoptimized(MacroAssembler* masm) {
Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::LAZY); Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::LAZY);
} }
// Clobbers registers {r7, r8, r9, r10}. // Clobbers registers {r7, r8, r9, r10}.
void CompatibleReceiverCheck(MacroAssembler* masm, Register receiver, void CompatibleReceiverCheck(MacroAssembler* masm, Register receiver,
Register function_template_info, Register function_template_info,
@ -1744,7 +1710,6 @@ void CompatibleReceiverCheck(MacroAssembler* masm, Register receiver,
__ bind(&receiver_check_passed); __ bind(&receiver_check_passed);
} }
void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) { void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- r3 : number of arguments excluding receiver // -- r3 : number of arguments excluding receiver
@ -1756,7 +1721,6 @@ void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) {
// -- sp[4 * argc] : receiver // -- sp[4 * argc] : receiver
// ----------------------------------- // -----------------------------------
// Load the FunctionTemplateInfo. // Load the FunctionTemplateInfo.
__ LoadP(r6, FieldMemOperand(r4, JSFunction::kSharedFunctionInfoOffset)); __ LoadP(r6, FieldMemOperand(r4, JSFunction::kSharedFunctionInfoOffset));
__ LoadP(r6, FieldMemOperand(r6, SharedFunctionInfo::kFunctionDataOffset)); __ LoadP(r6, FieldMemOperand(r6, SharedFunctionInfo::kFunctionDataOffset));
@ -1782,7 +1746,6 @@ void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) {
__ TailCallRuntime(Runtime::kThrowIllegalInvocation); __ TailCallRuntime(Runtime::kThrowIllegalInvocation);
} }
void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) { void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
// Lookup the function in the JavaScript frame. // Lookup the function in the JavaScript frame.
__ LoadP(r3, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); __ LoadP(r3, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
@ -1829,7 +1792,6 @@ void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
} }
} }
// static // static
void Builtins::Generate_DatePrototype_GetField(MacroAssembler* masm, void Builtins::Generate_DatePrototype_GetField(MacroAssembler* masm,
int field_index) { int field_index) {
@ -1957,7 +1919,6 @@ void Builtins::Generate_FunctionPrototypeApply(MacroAssembler* masm) {
} }
} }
// static // static
void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) { void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) {
// 1. Make sure we have at least one argument. // 1. Make sure we have at least one argument.
@ -1986,7 +1947,6 @@ void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) {
// Calculate the copy start address (destination). Copy end address is sp. // Calculate the copy start address (destination). Copy end address is sp.
__ add(r5, sp, r5); __ add(r5, sp, r5);
__ mtctr(r3); __ mtctr(r3);
__ bind(&loop); __ bind(&loop);
__ LoadP(ip, MemOperand(r5, -kPointerSize)); __ LoadP(ip, MemOperand(r5, -kPointerSize));
@ -2003,7 +1963,6 @@ void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) {
__ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET);
} }
void Builtins::Generate_ReflectApply(MacroAssembler* masm) { void Builtins::Generate_ReflectApply(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- r3 : argc // -- r3 : argc
@ -2066,7 +2025,6 @@ void Builtins::Generate_ReflectApply(MacroAssembler* masm) {
} }
} }
void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) { void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- r3 : argc // -- r3 : argc
@ -2144,7 +2102,6 @@ void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) {
} }
} }
static void ArgumentAdaptorStackCheck(MacroAssembler* masm, static void ArgumentAdaptorStackCheck(MacroAssembler* masm,
Label* stack_overflow) { Label* stack_overflow) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2166,7 +2123,6 @@ static void ArgumentAdaptorStackCheck(MacroAssembler* masm,
__ ble(stack_overflow); // Signed comparison. __ ble(stack_overflow); // Signed comparison.
} }
static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) { static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) {
__ SmiTag(r3); __ SmiTag(r3);
__ LoadSmiLiteral(r7, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR)); __ LoadSmiLiteral(r7, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR));
@ -2181,7 +2137,6 @@ static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) {
kPointerSize)); kPointerSize));
} }
static void LeaveArgumentsAdaptorFrame(MacroAssembler* masm) { static void LeaveArgumentsAdaptorFrame(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- r3 : result being passed through // -- r3 : result being passed through
@ -2196,7 +2151,6 @@ static void LeaveArgumentsAdaptorFrame(MacroAssembler* masm) {
__ add(sp, sp, r0); __ add(sp, sp, r0);
} }
// static // static
void Builtins::Generate_Apply(MacroAssembler* masm) { void Builtins::Generate_Apply(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2526,7 +2480,6 @@ void Builtins::Generate_CallFunction(MacroAssembler* masm,
} }
} }
namespace { namespace {
void Generate_PushBoundArguments(MacroAssembler* masm) { void Generate_PushBoundArguments(MacroAssembler* masm) {
@ -2609,7 +2562,6 @@ void Generate_PushBoundArguments(MacroAssembler* masm) {
} // namespace } // namespace
// static // static
void Builtins::Generate_CallBoundFunctionImpl(MacroAssembler* masm, void Builtins::Generate_CallBoundFunctionImpl(MacroAssembler* masm,
TailCallMode tail_call_mode) { TailCallMode tail_call_mode) {
@ -2641,7 +2593,6 @@ void Builtins::Generate_CallBoundFunctionImpl(MacroAssembler* masm,
__ JumpToJSEntry(ip); __ JumpToJSEntry(ip);
} }
// static // static
void Builtins::Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode, void Builtins::Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode,
TailCallMode tail_call_mode) { TailCallMode tail_call_mode) {
@ -2703,7 +2654,6 @@ void Builtins::Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode,
} }
} }
// static // static
void Builtins::Generate_ConstructFunction(MacroAssembler* masm) { void Builtins::Generate_ConstructFunction(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2725,7 +2675,6 @@ void Builtins::Generate_ConstructFunction(MacroAssembler* masm) {
__ JumpToJSEntry(ip); __ JumpToJSEntry(ip);
} }
// static // static
void Builtins::Generate_ConstructBoundFunction(MacroAssembler* masm) { void Builtins::Generate_ConstructBoundFunction(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2755,7 +2704,6 @@ void Builtins::Generate_ConstructBoundFunction(MacroAssembler* masm) {
__ JumpToJSEntry(ip); __ JumpToJSEntry(ip);
} }
// static // static
void Builtins::Generate_ConstructProxy(MacroAssembler* masm) { void Builtins::Generate_ConstructProxy(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2774,7 +2722,6 @@ void Builtins::Generate_ConstructProxy(MacroAssembler* masm) {
ExternalReference(Runtime::kJSProxyConstruct, masm->isolate())); ExternalReference(Runtime::kJSProxyConstruct, masm->isolate()));
} }
// static // static
void Builtins::Generate_Construct(MacroAssembler* masm) { void Builtins::Generate_Construct(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -3040,7 +2987,6 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
LeaveArgumentsAdaptorFrame(masm); LeaveArgumentsAdaptorFrame(masm);
__ blr(); __ blr();
// ------------------------------------------- // -------------------------------------------
// Dont adapt arguments. // Dont adapt arguments.
// ------------------------------------------- // -------------------------------------------
@ -3055,7 +3001,6 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
} }
} }
#undef __ #undef __
} // namespace internal } // namespace internal
} // namespace v8 } // namespace v8

6
src/builtins/s390/OWNERS Normal file
View File

@ -0,0 +1,6 @@
jyan@ca.ibm.com
dstence@us.ibm.com
joransiu@ca.ibm.com
mbrandy@us.ibm.com
michael_dawson@ca.ibm.com
bjaideep@ca.ibm.com

View File

@ -12,7 +12,6 @@
namespace v8 { namespace v8 {
namespace internal { namespace internal {
#define __ ACCESS_MASM(masm) #define __ ACCESS_MASM(masm)
void Builtins::Generate_Adaptor(MacroAssembler* masm, CFunctionId id, void Builtins::Generate_Adaptor(MacroAssembler* masm, CFunctionId id,
@ -54,7 +53,6 @@ void Builtins::Generate_Adaptor(MacroAssembler* masm, CFunctionId id,
exit_frame_type == BUILTIN_EXIT); exit_frame_type == BUILTIN_EXIT);
} }
static void GenerateTailCallToSharedCode(MacroAssembler* masm) { static void GenerateTailCallToSharedCode(MacroAssembler* masm) {
__ movp(kScratchRegister, __ movp(kScratchRegister,
FieldOperand(rdi, JSFunction::kSharedFunctionInfoOffset)); FieldOperand(rdi, JSFunction::kSharedFunctionInfoOffset));
@ -111,7 +109,6 @@ void Builtins::Generate_InOptimizationQueue(MacroAssembler* masm) {
GenerateTailCallToSharedCode(masm); GenerateTailCallToSharedCode(masm);
} }
static void Generate_JSConstructStubHelper(MacroAssembler* masm, static void Generate_JSConstructStubHelper(MacroAssembler* masm,
bool is_api_function, bool is_api_function,
bool create_implicit_receiver, bool create_implicit_receiver,
@ -246,38 +243,31 @@ static void Generate_JSConstructStubHelper(MacroAssembler* masm,
__ ret(0); __ ret(0);
} }
void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) { void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, false, true, false); Generate_JSConstructStubHelper(masm, false, true, false);
} }
void Builtins::Generate_JSConstructStubApi(MacroAssembler* masm) { void Builtins::Generate_JSConstructStubApi(MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, true, false, false); Generate_JSConstructStubHelper(masm, true, false, false);
} }
void Builtins::Generate_JSBuiltinsConstructStub(MacroAssembler* masm) { void Builtins::Generate_JSBuiltinsConstructStub(MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, false, false, false); Generate_JSConstructStubHelper(masm, false, false, false);
} }
void Builtins::Generate_JSBuiltinsConstructStubForDerived( void Builtins::Generate_JSBuiltinsConstructStubForDerived(
MacroAssembler* masm) { MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, false, false, true); Generate_JSConstructStubHelper(masm, false, false, true);
} }
void Builtins::Generate_ConstructedNonConstructable(MacroAssembler* masm) { void Builtins::Generate_ConstructedNonConstructable(MacroAssembler* masm) {
FrameScope scope(masm, StackFrame::INTERNAL); FrameScope scope(masm, StackFrame::INTERNAL);
__ Push(rdi); __ Push(rdi);
__ CallRuntime(Runtime::kThrowConstructedNonConstructable); __ CallRuntime(Runtime::kThrowConstructedNonConstructable);
} }
enum IsTagged { kRaxIsSmiTagged, kRaxIsUntaggedInt }; enum IsTagged { kRaxIsSmiTagged, kRaxIsUntaggedInt };
// Clobbers rcx, r11, kScratchRegister; preserves all other registers. // Clobbers rcx, r11, kScratchRegister; preserves all other registers.
static void Generate_CheckStackOverflow(MacroAssembler* masm, static void Generate_CheckStackOverflow(MacroAssembler* masm,
IsTagged rax_is_tagged) { IsTagged rax_is_tagged) {
@ -311,7 +301,6 @@ static void Generate_CheckStackOverflow(MacroAssembler* masm,
__ bind(&okay); __ bind(&okay);
} }
static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm, static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
bool is_construct) { bool is_construct) {
ProfileEntryHookStub::MaybeCallEntryHook(masm); ProfileEntryHookStub::MaybeCallEntryHook(masm);
@ -326,11 +315,11 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
// Open a C++ scope for the FrameScope. // Open a C++ scope for the FrameScope.
{ {
// Platform specific argument handling. After this, the stack contains // Platform specific argument handling. After this, the stack contains
// an internal frame and the pushed function and receiver, and // an internal frame and the pushed function and receiver, and
// register rax and rbx holds the argument count and argument array, // register rax and rbx holds the argument count and argument array,
// while rdi holds the function pointer, rsi the context, and rdx the // while rdi holds the function pointer, rsi the context, and rdx the
// new.target. // new.target.
#ifdef _WIN64 #ifdef _WIN64
// MSVC parameters in: // MSVC parameters in:
@ -361,7 +350,7 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
__ movp(rdi, rdx); __ movp(rdi, rdx);
// Load the new.target into rdx. // Load the new.target into rdx.
__ movp(rdx, rcx); __ movp(rdx, rcx);
#else // _WIN64 #else // _WIN64
// GCC parameters in: // GCC parameters in:
// rdi : new_target // rdi : new_target
// rsi : function // rsi : function
@ -441,12 +430,10 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
__ ret(1 * kPointerSize); // Remove receiver. __ ret(1 * kPointerSize); // Remove receiver.
} }
void Builtins::Generate_JSEntryTrampoline(MacroAssembler* masm) { void Builtins::Generate_JSEntryTrampoline(MacroAssembler* masm) {
Generate_JSEntryTrampolineHelper(masm, false); Generate_JSEntryTrampolineHelper(masm, false);
} }
void Builtins::Generate_JSConstructEntryTrampoline(MacroAssembler* masm) { void Builtins::Generate_JSConstructEntryTrampoline(MacroAssembler* masm) {
Generate_JSEntryTrampolineHelper(masm, true); Generate_JSEntryTrampolineHelper(masm, true);
} }
@ -1079,7 +1066,6 @@ void Builtins::Generate_CompileOptimized(MacroAssembler* masm) {
Runtime::kCompileOptimized_NotConcurrent); Runtime::kCompileOptimized_NotConcurrent);
} }
void Builtins::Generate_CompileOptimizedConcurrent(MacroAssembler* masm) { void Builtins::Generate_CompileOptimizedConcurrent(MacroAssembler* masm) {
GenerateTailCallToReturnedCode(masm, Runtime::kCompileOptimized_Concurrent); GenerateTailCallToReturnedCode(masm, Runtime::kCompileOptimized_Concurrent);
} }
@ -1148,20 +1134,18 @@ static void GenerateMakeCodeYoungAgainCommon(MacroAssembler* masm) {
__ ret(0); __ ret(0);
} }
#define DEFINE_CODE_AGE_BUILTIN_GENERATOR(C) \
#define DEFINE_CODE_AGE_BUILTIN_GENERATOR(C) \ void Builtins::Generate_Make##C##CodeYoungAgainEvenMarking( \
void Builtins::Generate_Make##C##CodeYoungAgainEvenMarking( \ MacroAssembler* masm) { \
MacroAssembler* masm) { \ GenerateMakeCodeYoungAgainCommon(masm); \
GenerateMakeCodeYoungAgainCommon(masm); \ } \
} \ void Builtins::Generate_Make##C##CodeYoungAgainOddMarking( \
void Builtins::Generate_Make##C##CodeYoungAgainOddMarking( \ MacroAssembler* masm) { \
MacroAssembler* masm) { \ GenerateMakeCodeYoungAgainCommon(masm); \
GenerateMakeCodeYoungAgainCommon(masm); \ }
}
CODE_AGE_LIST(DEFINE_CODE_AGE_BUILTIN_GENERATOR) CODE_AGE_LIST(DEFINE_CODE_AGE_BUILTIN_GENERATOR)
#undef DEFINE_CODE_AGE_BUILTIN_GENERATOR #undef DEFINE_CODE_AGE_BUILTIN_GENERATOR
void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) { void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) {
// For now, as in GenerateMakeCodeYoungAgainCommon, we are relying on the fact // For now, as in GenerateMakeCodeYoungAgainCommon, we are relying on the fact
// that make_code_young doesn't do any garbage collection which allows us to // that make_code_young doesn't do any garbage collection which allows us to
@ -1192,17 +1176,14 @@ void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) {
__ ret(0); __ ret(0);
} }
void Builtins::Generate_MarkCodeAsExecutedTwice(MacroAssembler* masm) { void Builtins::Generate_MarkCodeAsExecutedTwice(MacroAssembler* masm) {
GenerateMakeCodeYoungAgainCommon(masm); GenerateMakeCodeYoungAgainCommon(masm);
} }
void Builtins::Generate_MarkCodeAsToBeExecutedOnce(MacroAssembler* masm) { void Builtins::Generate_MarkCodeAsToBeExecutedOnce(MacroAssembler* masm) {
Generate_MarkCodeAsExecutedOnce(masm); Generate_MarkCodeAsExecutedOnce(masm);
} }
static void Generate_NotifyStubFailureHelper(MacroAssembler* masm, static void Generate_NotifyStubFailureHelper(MacroAssembler* masm,
SaveFPRegsMode save_doubles) { SaveFPRegsMode save_doubles) {
// Enter an internal frame. // Enter an internal frame.
@ -1222,17 +1203,14 @@ static void Generate_NotifyStubFailureHelper(MacroAssembler* masm,
__ ret(0); // Return to IC Miss stub, continuation still on stack. __ ret(0); // Return to IC Miss stub, continuation still on stack.
} }
void Builtins::Generate_NotifyStubFailure(MacroAssembler* masm) { void Builtins::Generate_NotifyStubFailure(MacroAssembler* masm) {
Generate_NotifyStubFailureHelper(masm, kDontSaveFPRegs); Generate_NotifyStubFailureHelper(masm, kDontSaveFPRegs);
} }
void Builtins::Generate_NotifyStubFailureSaveDoubles(MacroAssembler* masm) { void Builtins::Generate_NotifyStubFailureSaveDoubles(MacroAssembler* masm) {
Generate_NotifyStubFailureHelper(masm, kSaveFPRegs); Generate_NotifyStubFailureHelper(masm, kSaveFPRegs);
} }
static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm, static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm,
Deoptimizer::BailoutType type) { Deoptimizer::BailoutType type) {
// Enter an internal frame. // Enter an internal frame.
@ -1268,22 +1246,18 @@ static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm,
__ Abort(kNoCasesLeft); __ Abort(kNoCasesLeft);
} }
void Builtins::Generate_NotifyDeoptimized(MacroAssembler* masm) { void Builtins::Generate_NotifyDeoptimized(MacroAssembler* masm) {
Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::EAGER); Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::EAGER);
} }
void Builtins::Generate_NotifySoftDeoptimized(MacroAssembler* masm) { void Builtins::Generate_NotifySoftDeoptimized(MacroAssembler* masm) {
Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::SOFT); Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::SOFT);
} }
void Builtins::Generate_NotifyLazyDeoptimized(MacroAssembler* masm) { void Builtins::Generate_NotifyLazyDeoptimized(MacroAssembler* masm) {
Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::LAZY); Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::LAZY);
} }
// static // static
void Builtins::Generate_DatePrototype_GetField(MacroAssembler* masm, void Builtins::Generate_DatePrototype_GetField(MacroAssembler* masm,
int field_index) { int field_index) {
@ -1418,7 +1392,6 @@ void Builtins::Generate_FunctionPrototypeApply(MacroAssembler* masm) {
} }
} }
// static // static
void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) { void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) {
// Stack Layout: // Stack Layout:
@ -1471,7 +1444,6 @@ void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) {
__ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET);
} }
void Builtins::Generate_ReflectApply(MacroAssembler* masm) { void Builtins::Generate_ReflectApply(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- rax : argc // -- rax : argc
@ -1536,7 +1508,6 @@ void Builtins::Generate_ReflectApply(MacroAssembler* masm) {
} }
} }
void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) { void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- rax : argc // -- rax : argc
@ -1618,7 +1589,6 @@ void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) {
} }
} }
void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) { void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- rax : argc // -- rax : argc
@ -1648,7 +1618,6 @@ void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
__ TailCallStub(&stub); __ TailCallStub(&stub);
} }
void Builtins::Generate_ArrayCode(MacroAssembler* masm) { void Builtins::Generate_ArrayCode(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- rax : argc // -- rax : argc
@ -1836,7 +1805,6 @@ void Builtins::Generate_NumberConstructor(MacroAssembler* masm) {
__ ret(1 * kPointerSize); __ ret(1 * kPointerSize);
} }
// static // static
void Builtins::Generate_NumberConstructor_ConstructStub(MacroAssembler* masm) { void Builtins::Generate_NumberConstructor_ConstructStub(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -1920,7 +1888,6 @@ void Builtins::Generate_NumberConstructor_ConstructStub(MacroAssembler* masm) {
} }
} }
// static // static
void Builtins::Generate_StringConstructor(MacroAssembler* masm) { void Builtins::Generate_StringConstructor(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -1994,7 +1961,6 @@ void Builtins::Generate_StringConstructor(MacroAssembler* masm) {
} }
} }
// static // static
void Builtins::Generate_StringConstructor_ConstructStub(MacroAssembler* masm) { void Builtins::Generate_StringConstructor_ConstructStub(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2079,7 +2045,6 @@ void Builtins::Generate_StringConstructor_ConstructStub(MacroAssembler* masm) {
} }
} }
static void ArgumentsAdaptorStackCheck(MacroAssembler* masm, static void ArgumentsAdaptorStackCheck(MacroAssembler* masm,
Label* stack_overflow) { Label* stack_overflow) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2106,7 +2071,6 @@ static void ArgumentsAdaptorStackCheck(MacroAssembler* masm,
__ j(less_equal, stack_overflow); // Signed comparison. __ j(less_equal, stack_overflow); // Signed comparison.
} }
static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) { static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) {
__ pushq(rbp); __ pushq(rbp);
__ movp(rbp, rsp); __ movp(rbp, rsp);
@ -2124,7 +2088,6 @@ static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) {
__ Push(r8); __ Push(r8);
} }
static void LeaveArgumentsAdaptorFrame(MacroAssembler* masm) { static void LeaveArgumentsAdaptorFrame(MacroAssembler* masm) {
// Retrieve the number of arguments from the stack. Number is a Smi. // Retrieve the number of arguments from the stack. Number is a Smi.
__ movp(rbx, Operand(rbp, ArgumentsAdaptorFrameConstants::kLengthOffset)); __ movp(rbx, Operand(rbp, ArgumentsAdaptorFrameConstants::kLengthOffset));
@ -2345,7 +2308,6 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
} }
} }
// static // static
void Builtins::Generate_Apply(MacroAssembler* masm) { void Builtins::Generate_Apply(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2678,7 +2640,6 @@ void Builtins::Generate_CallFunction(MacroAssembler* masm,
} }
} }
namespace { namespace {
void Generate_PushBoundArguments(MacroAssembler* masm) { void Generate_PushBoundArguments(MacroAssembler* masm) {
@ -2763,7 +2724,6 @@ void Generate_PushBoundArguments(MacroAssembler* masm) {
} // namespace } // namespace
// static // static
void Builtins::Generate_CallBoundFunctionImpl(MacroAssembler* masm, void Builtins::Generate_CallBoundFunctionImpl(MacroAssembler* masm,
TailCallMode tail_call_mode) { TailCallMode tail_call_mode) {
@ -2793,7 +2753,6 @@ void Builtins::Generate_CallBoundFunctionImpl(MacroAssembler* masm,
__ jmp(rcx); __ jmp(rcx);
} }
// static // static
void Builtins::Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode, void Builtins::Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode,
TailCallMode tail_call_mode) { TailCallMode tail_call_mode) {
@ -2857,7 +2816,6 @@ void Builtins::Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode,
} }
} }
// static // static
void Builtins::Generate_ConstructFunction(MacroAssembler* masm) { void Builtins::Generate_ConstructFunction(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2879,7 +2837,6 @@ void Builtins::Generate_ConstructFunction(MacroAssembler* masm) {
__ jmp(rcx); __ jmp(rcx);
} }
// static // static
void Builtins::Generate_ConstructBoundFunction(MacroAssembler* masm) { void Builtins::Generate_ConstructBoundFunction(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2909,7 +2866,6 @@ void Builtins::Generate_ConstructBoundFunction(MacroAssembler* masm) {
__ jmp(rcx); __ jmp(rcx);
} }
// static // static
void Builtins::Generate_ConstructProxy(MacroAssembler* masm) { void Builtins::Generate_ConstructProxy(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2930,7 +2886,6 @@ void Builtins::Generate_ConstructProxy(MacroAssembler* masm) {
ExternalReference(Runtime::kJSProxyConstruct, masm->isolate())); ExternalReference(Runtime::kJSProxyConstruct, masm->isolate()));
} }
// static // static
void Builtins::Generate_Construct(MacroAssembler* masm) { void Builtins::Generate_Construct(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2983,7 +2938,6 @@ void Builtins::Generate_Construct(MacroAssembler* masm) {
RelocInfo::CODE_TARGET); RelocInfo::CODE_TARGET);
} }
static void CompatibleReceiverCheck(MacroAssembler* masm, Register receiver, static void CompatibleReceiverCheck(MacroAssembler* masm, Register receiver,
Register function_template_info, Register function_template_info,
Register scratch0, Register scratch1, Register scratch0, Register scratch1,
@ -3049,7 +3003,6 @@ static void CompatibleReceiverCheck(MacroAssembler* masm, Register receiver,
__ bind(&receiver_check_passed); __ bind(&receiver_check_passed);
} }
void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) { void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- rax : number of arguments (not including the receiver) // -- rax : number of arguments (not including the receiver)
@ -3093,7 +3046,6 @@ void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) {
} }
} }
void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) { void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
// Lookup the function in the JavaScript frame. // Lookup the function in the JavaScript frame.
__ movp(rax, Operand(rbp, JavaScriptFrameConstants::kFunctionOffset)); __ movp(rax, Operand(rbp, JavaScriptFrameConstants::kFunctionOffset));
@ -3116,8 +3068,10 @@ void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
__ movp(rbx, Operand(rax, Code::kDeoptimizationDataOffset - kHeapObjectTag)); __ movp(rbx, Operand(rax, Code::kDeoptimizationDataOffset - kHeapObjectTag));
// Load the OSR entrypoint offset from the deoptimization data. // Load the OSR entrypoint offset from the deoptimization data.
__ SmiToInteger32(rbx, Operand(rbx, FixedArray::OffsetOfElementAt( __ SmiToInteger32(
DeoptimizationInputData::kOsrPcOffsetIndex) - kHeapObjectTag)); rbx, Operand(rbx, FixedArray::OffsetOfElementAt(
DeoptimizationInputData::kOsrPcOffsetIndex) -
kHeapObjectTag));
// Compute the target address = code_obj + header_size + osr_offset // Compute the target address = code_obj + header_size + osr_offset
__ leap(rax, Operand(rax, rbx, times_1, Code::kHeaderSize - kHeapObjectTag)); __ leap(rax, Operand(rax, rbx, times_1, Code::kHeaderSize - kHeapObjectTag));
@ -3129,7 +3083,6 @@ void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
__ ret(0); __ ret(0);
} }
#undef __ #undef __
} // namespace internal } // namespace internal

1
src/builtins/x87/OWNERS Normal file
View File

@ -0,0 +1 @@
weiliang.lin@intel.com

View File

@ -13,7 +13,6 @@
namespace v8 { namespace v8 {
namespace internal { namespace internal {
#define __ ACCESS_MASM(masm) #define __ ACCESS_MASM(masm)
void Builtins::Generate_Adaptor(MacroAssembler* masm, CFunctionId id, void Builtins::Generate_Adaptor(MacroAssembler* masm, CFunctionId id,
@ -246,38 +245,31 @@ static void Generate_JSConstructStubHelper(MacroAssembler* masm,
__ ret(0); __ ret(0);
} }
void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) { void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, false, true, false); Generate_JSConstructStubHelper(masm, false, true, false);
} }
void Builtins::Generate_JSConstructStubApi(MacroAssembler* masm) { void Builtins::Generate_JSConstructStubApi(MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, true, false, false); Generate_JSConstructStubHelper(masm, true, false, false);
} }
void Builtins::Generate_JSBuiltinsConstructStub(MacroAssembler* masm) { void Builtins::Generate_JSBuiltinsConstructStub(MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, false, false, false); Generate_JSConstructStubHelper(masm, false, false, false);
} }
void Builtins::Generate_JSBuiltinsConstructStubForDerived( void Builtins::Generate_JSBuiltinsConstructStubForDerived(
MacroAssembler* masm) { MacroAssembler* masm) {
Generate_JSConstructStubHelper(masm, false, false, true); Generate_JSConstructStubHelper(masm, false, false, true);
} }
void Builtins::Generate_ConstructedNonConstructable(MacroAssembler* masm) { void Builtins::Generate_ConstructedNonConstructable(MacroAssembler* masm) {
FrameScope scope(masm, StackFrame::INTERNAL); FrameScope scope(masm, StackFrame::INTERNAL);
__ push(edi); __ push(edi);
__ CallRuntime(Runtime::kThrowConstructedNonConstructable); __ CallRuntime(Runtime::kThrowConstructedNonConstructable);
} }
enum IsTagged { kEaxIsSmiTagged, kEaxIsUntaggedInt }; enum IsTagged { kEaxIsSmiTagged, kEaxIsUntaggedInt };
// Clobbers ecx, edx, edi; preserves all other registers. // Clobbers ecx, edx, edi; preserves all other registers.
static void Generate_CheckStackOverflow(MacroAssembler* masm, static void Generate_CheckStackOverflow(MacroAssembler* masm,
IsTagged eax_is_tagged) { IsTagged eax_is_tagged) {
@ -309,7 +301,6 @@ static void Generate_CheckStackOverflow(MacroAssembler* masm,
__ bind(&okay); __ bind(&okay);
} }
static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm, static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
bool is_construct) { bool is_construct) {
ProfileEntryHookStub::MaybeCallEntryHook(masm); ProfileEntryHookStub::MaybeCallEntryHook(masm);
@ -343,7 +334,7 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
__ jmp(&entry, Label::kNear); __ jmp(&entry, Label::kNear);
__ bind(&loop); __ bind(&loop);
__ mov(edx, Operand(ebx, ecx, times_4, 0)); // push parameter from argv __ mov(edx, Operand(ebx, ecx, times_4, 0)); // push parameter from argv
__ push(Operand(edx, 0)); // dereference handle __ push(Operand(edx, 0)); // dereference handle
__ inc(ecx); __ inc(ecx);
__ bind(&entry); __ bind(&entry);
__ cmp(ecx, eax); __ cmp(ecx, eax);
@ -369,12 +360,10 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
__ ret(kPointerSize); // Remove receiver. __ ret(kPointerSize); // Remove receiver.
} }
void Builtins::Generate_JSEntryTrampoline(MacroAssembler* masm) { void Builtins::Generate_JSEntryTrampoline(MacroAssembler* masm) {
Generate_JSEntryTrampolineHelper(masm, false); Generate_JSEntryTrampolineHelper(masm, false);
} }
void Builtins::Generate_JSConstructEntryTrampoline(MacroAssembler* masm) { void Builtins::Generate_JSConstructEntryTrampoline(MacroAssembler* masm) {
Generate_JSEntryTrampolineHelper(masm, true); Generate_JSEntryTrampolineHelper(masm, true);
} }
@ -769,7 +758,6 @@ void Builtins::Generate_InterpreterPushArgsAndCallImpl(
} }
} }
// static // static
void Builtins::Generate_InterpreterPushArgsAndConstruct(MacroAssembler* masm) { void Builtins::Generate_InterpreterPushArgsAndConstruct(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -1027,7 +1015,6 @@ void Builtins::Generate_CompileOptimized(MacroAssembler* masm) {
Runtime::kCompileOptimized_NotConcurrent); Runtime::kCompileOptimized_NotConcurrent);
} }
void Builtins::Generate_CompileOptimizedConcurrent(MacroAssembler* masm) { void Builtins::Generate_CompileOptimizedConcurrent(MacroAssembler* masm) {
GenerateTailCallToReturnedCode(masm, Runtime::kCompileOptimized_Concurrent); GenerateTailCallToReturnedCode(masm, Runtime::kCompileOptimized_Concurrent);
} }
@ -1098,19 +1085,18 @@ static void GenerateMakeCodeYoungAgainCommon(MacroAssembler* masm) {
__ ret(0); __ ret(0);
} }
#define DEFINE_CODE_AGE_BUILTIN_GENERATOR(C) \ #define DEFINE_CODE_AGE_BUILTIN_GENERATOR(C) \
void Builtins::Generate_Make##C##CodeYoungAgainEvenMarking( \ void Builtins::Generate_Make##C##CodeYoungAgainEvenMarking( \
MacroAssembler* masm) { \ MacroAssembler* masm) { \
GenerateMakeCodeYoungAgainCommon(masm); \ GenerateMakeCodeYoungAgainCommon(masm); \
} \ } \
void Builtins::Generate_Make##C##CodeYoungAgainOddMarking( \ void Builtins::Generate_Make##C##CodeYoungAgainOddMarking( \
MacroAssembler* masm) { \ MacroAssembler* masm) { \
GenerateMakeCodeYoungAgainCommon(masm); \ GenerateMakeCodeYoungAgainCommon(masm); \
} }
CODE_AGE_LIST(DEFINE_CODE_AGE_BUILTIN_GENERATOR) CODE_AGE_LIST(DEFINE_CODE_AGE_BUILTIN_GENERATOR)
#undef DEFINE_CODE_AGE_BUILTIN_GENERATOR #undef DEFINE_CODE_AGE_BUILTIN_GENERATOR
void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) { void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) {
// For now, as in GenerateMakeCodeYoungAgainCommon, we are relying on the fact // For now, as in GenerateMakeCodeYoungAgainCommon, we are relying on the fact
// that make_code_young doesn't do any garbage collection which allows us to // that make_code_young doesn't do any garbage collection which allows us to
@ -1143,17 +1129,14 @@ void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) {
__ ret(0); __ ret(0);
} }
void Builtins::Generate_MarkCodeAsExecutedTwice(MacroAssembler* masm) { void Builtins::Generate_MarkCodeAsExecutedTwice(MacroAssembler* masm) {
GenerateMakeCodeYoungAgainCommon(masm); GenerateMakeCodeYoungAgainCommon(masm);
} }
void Builtins::Generate_MarkCodeAsToBeExecutedOnce(MacroAssembler* masm) { void Builtins::Generate_MarkCodeAsToBeExecutedOnce(MacroAssembler* masm) {
Generate_MarkCodeAsExecutedOnce(masm); Generate_MarkCodeAsExecutedOnce(masm);
} }
static void Generate_NotifyStubFailureHelper(MacroAssembler* masm, static void Generate_NotifyStubFailureHelper(MacroAssembler* masm,
SaveFPRegsMode save_doubles) { SaveFPRegsMode save_doubles) {
// Enter an internal frame. // Enter an internal frame.
@ -1173,17 +1156,14 @@ static void Generate_NotifyStubFailureHelper(MacroAssembler* masm,
__ ret(0); // Return to IC Miss stub, continuation still on stack. __ ret(0); // Return to IC Miss stub, continuation still on stack.
} }
void Builtins::Generate_NotifyStubFailure(MacroAssembler* masm) { void Builtins::Generate_NotifyStubFailure(MacroAssembler* masm) {
Generate_NotifyStubFailureHelper(masm, kDontSaveFPRegs); Generate_NotifyStubFailureHelper(masm, kDontSaveFPRegs);
} }
void Builtins::Generate_NotifyStubFailureSaveDoubles(MacroAssembler* masm) { void Builtins::Generate_NotifyStubFailureSaveDoubles(MacroAssembler* masm) {
Generate_NotifyStubFailureHelper(masm, kSaveFPRegs); Generate_NotifyStubFailureHelper(masm, kSaveFPRegs);
} }
static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm, static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm,
Deoptimizer::BailoutType type) { Deoptimizer::BailoutType type) {
{ {
@ -1217,22 +1197,18 @@ static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm,
__ Abort(kNoCasesLeft); __ Abort(kNoCasesLeft);
} }
void Builtins::Generate_NotifyDeoptimized(MacroAssembler* masm) { void Builtins::Generate_NotifyDeoptimized(MacroAssembler* masm) {
Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::EAGER); Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::EAGER);
} }
void Builtins::Generate_NotifySoftDeoptimized(MacroAssembler* masm) { void Builtins::Generate_NotifySoftDeoptimized(MacroAssembler* masm) {
Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::SOFT); Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::SOFT);
} }
void Builtins::Generate_NotifyLazyDeoptimized(MacroAssembler* masm) { void Builtins::Generate_NotifyLazyDeoptimized(MacroAssembler* masm) {
Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::LAZY); Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::LAZY);
} }
// static // static
void Builtins::Generate_DatePrototype_GetField(MacroAssembler* masm, void Builtins::Generate_DatePrototype_GetField(MacroAssembler* masm,
int field_index) { int field_index) {
@ -1365,7 +1341,6 @@ void Builtins::Generate_FunctionPrototypeApply(MacroAssembler* masm) {
} }
} }
// static // static
void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) { void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) {
// Stack Layout: // Stack Layout:
@ -1412,7 +1387,6 @@ void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) {
__ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET);
} }
void Builtins::Generate_ReflectApply(MacroAssembler* masm) { void Builtins::Generate_ReflectApply(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- eax : argc // -- eax : argc
@ -1553,7 +1527,6 @@ void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) {
} }
} }
void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) { void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- eax : argc // -- eax : argc
@ -1582,7 +1555,6 @@ void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
__ TailCallStub(&stub); __ TailCallStub(&stub);
} }
void Builtins::Generate_ArrayCode(MacroAssembler* masm) { void Builtins::Generate_ArrayCode(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- eax : argc // -- eax : argc
@ -1612,7 +1584,6 @@ void Builtins::Generate_ArrayCode(MacroAssembler* masm) {
__ TailCallStub(&stub); __ TailCallStub(&stub);
} }
// static // static
void Builtins::Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind) { void Builtins::Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -1791,7 +1762,6 @@ void Builtins::Generate_NumberConstructor(MacroAssembler* masm) {
__ ret(1 * kPointerSize); __ ret(1 * kPointerSize);
} }
// static // static
void Builtins::Generate_NumberConstructor_ConstructStub(MacroAssembler* masm) { void Builtins::Generate_NumberConstructor_ConstructStub(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -1878,7 +1848,6 @@ void Builtins::Generate_NumberConstructor_ConstructStub(MacroAssembler* masm) {
} }
} }
// static // static
void Builtins::Generate_StringConstructor(MacroAssembler* masm) { void Builtins::Generate_StringConstructor(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -1951,7 +1920,6 @@ void Builtins::Generate_StringConstructor(MacroAssembler* masm) {
} }
} }
// static // static
void Builtins::Generate_StringConstructor_ConstructStub(MacroAssembler* masm) { void Builtins::Generate_StringConstructor_ConstructStub(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2045,7 +2013,6 @@ void Builtins::Generate_StringConstructor_ConstructStub(MacroAssembler* masm) {
} }
} }
static void ArgumentsAdaptorStackCheck(MacroAssembler* masm, static void ArgumentsAdaptorStackCheck(MacroAssembler* masm,
Label* stack_overflow) { Label* stack_overflow) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2072,7 +2039,6 @@ static void ArgumentsAdaptorStackCheck(MacroAssembler* masm,
__ j(less_equal, stack_overflow); // Signed comparison. __ j(less_equal, stack_overflow); // Signed comparison.
} }
static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) { static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) {
__ push(ebp); __ push(ebp);
__ mov(ebp, esp); __ mov(ebp, esp);
@ -2091,7 +2057,6 @@ static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) {
__ push(edi); __ push(edi);
} }
static void LeaveArgumentsAdaptorFrame(MacroAssembler* masm) { static void LeaveArgumentsAdaptorFrame(MacroAssembler* masm) {
// Retrieve the number of arguments from the stack. // Retrieve the number of arguments from the stack.
__ mov(ebx, Operand(ebp, ArgumentsAdaptorFrameConstants::kLengthOffset)); __ mov(ebx, Operand(ebp, ArgumentsAdaptorFrameConstants::kLengthOffset));
@ -2106,7 +2071,6 @@ static void LeaveArgumentsAdaptorFrame(MacroAssembler* masm) {
__ push(ecx); __ push(ecx);
} }
// static // static
void Builtins::Generate_Apply(MacroAssembler* masm) { void Builtins::Generate_Apply(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2448,7 +2412,6 @@ void Builtins::Generate_CallFunction(MacroAssembler* masm,
} }
} }
namespace { namespace {
void Generate_PushBoundArguments(MacroAssembler* masm) { void Generate_PushBoundArguments(MacroAssembler* masm) {
@ -2535,7 +2498,6 @@ void Generate_PushBoundArguments(MacroAssembler* masm) {
} // namespace } // namespace
// static // static
void Builtins::Generate_CallBoundFunctionImpl(MacroAssembler* masm, void Builtins::Generate_CallBoundFunctionImpl(MacroAssembler* masm,
TailCallMode tail_call_mode) { TailCallMode tail_call_mode) {
@ -2564,7 +2526,6 @@ void Builtins::Generate_CallBoundFunctionImpl(MacroAssembler* masm,
__ jmp(ecx); __ jmp(ecx);
} }
// static // static
void Builtins::Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode, void Builtins::Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode,
TailCallMode tail_call_mode) { TailCallMode tail_call_mode) {
@ -2627,7 +2588,6 @@ void Builtins::Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode,
} }
} }
// static // static
void Builtins::Generate_ConstructFunction(MacroAssembler* masm) { void Builtins::Generate_ConstructFunction(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2649,7 +2609,6 @@ void Builtins::Generate_ConstructFunction(MacroAssembler* masm) {
__ jmp(ecx); __ jmp(ecx);
} }
// static // static
void Builtins::Generate_ConstructBoundFunction(MacroAssembler* masm) { void Builtins::Generate_ConstructBoundFunction(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2679,7 +2638,6 @@ void Builtins::Generate_ConstructBoundFunction(MacroAssembler* masm) {
__ jmp(ecx); __ jmp(ecx);
} }
// static // static
void Builtins::Generate_ConstructProxy(MacroAssembler* masm) { void Builtins::Generate_ConstructProxy(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2701,7 +2659,6 @@ void Builtins::Generate_ConstructProxy(MacroAssembler* masm) {
ExternalReference(Runtime::kJSProxyConstruct, masm->isolate())); ExternalReference(Runtime::kJSProxyConstruct, masm->isolate()));
} }
// static // static
void Builtins::Generate_Construct(MacroAssembler* masm) { void Builtins::Generate_Construct(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
@ -2965,7 +2922,6 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
} }
} }
static void CompatibleReceiverCheck(MacroAssembler* masm, Register receiver, static void CompatibleReceiverCheck(MacroAssembler* masm, Register receiver,
Register function_template_info, Register function_template_info,
Register scratch0, Register scratch1, Register scratch0, Register scratch1,
@ -3029,7 +2985,6 @@ static void CompatibleReceiverCheck(MacroAssembler* masm, Register receiver,
__ bind(&receiver_check_passed); __ bind(&receiver_check_passed);
} }
void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) { void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) {
// ----------- S t a t e ------------- // ----------- S t a t e -------------
// -- eax : number of arguments (not including the receiver) // -- eax : number of arguments (not including the receiver)
@ -3073,7 +3028,6 @@ void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) {
} }
} }
void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) { void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
// Lookup the function in the JavaScript frame. // Lookup the function in the JavaScript frame.
__ mov(eax, Operand(ebp, JavaScriptFrameConstants::kFunctionOffset)); __ mov(eax, Operand(ebp, JavaScriptFrameConstants::kFunctionOffset));
@ -3097,7 +3051,8 @@ void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
// Load the OSR entrypoint offset from the deoptimization data. // Load the OSR entrypoint offset from the deoptimization data.
__ mov(ebx, Operand(ebx, FixedArray::OffsetOfElementAt( __ mov(ebx, Operand(ebx, FixedArray::OffsetOfElementAt(
DeoptimizationInputData::kOsrPcOffsetIndex) - kHeapObjectTag)); DeoptimizationInputData::kOsrPcOffsetIndex) -
kHeapObjectTag));
__ SmiUntag(ebx); __ SmiUntag(ebx);
// Compute the target address = code_obj + header_size + osr_offset // Compute the target address = code_obj + header_size + osr_offset
@ -3110,7 +3065,6 @@ void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
__ ret(0); __ ret(0);
} }
#undef __ #undef __
} // namespace internal } // namespace internal
} // namespace v8 } // namespace v8

View File

@ -10,7 +10,7 @@
// Clients of this interface shouldn't depend on lots of compiler internals. // Clients of this interface shouldn't depend on lots of compiler internals.
// Do not include anything from src/compiler here! // Do not include anything from src/compiler here!
#include "src/allocation.h" #include "src/allocation.h"
#include "src/builtins.h" #include "src/builtins/builtins.h"
#include "src/heap/heap.h" #include "src/heap/heap.h"
#include "src/machine-type.h" #include "src/machine-type.h"
#include "src/runtime/runtime.h" #include "src/runtime/runtime.h"

View File

@ -9,7 +9,7 @@
#include "src/allocation.h" #include "src/allocation.h"
#include "src/base/platform/elapsed-timer.h" #include "src/base/platform/elapsed-timer.h"
#include "src/base/platform/time.h" #include "src/base/platform/time.h"
#include "src/builtins.h" #include "src/builtins/builtins.h"
#include "src/globals.h" #include "src/globals.h"
#include "src/objects.h" #include "src/objects.h"
#include "src/runtime/runtime.h" #include "src/runtime/runtime.h"

View File

@ -7,7 +7,7 @@
#include "src/allocation.h" #include "src/allocation.h"
#include "src/base/smart-pointers.h" #include "src/base/smart-pointers.h"
#include "src/builtins.h" #include "src/builtins/builtins.h"
#include "src/code-stub-assembler.h" #include "src/code-stub-assembler.h"
#include "src/frames.h" #include "src/frames.h"
#include "src/interpreter/bytecode-register.h" #include "src/interpreter/bytecode-register.h"

View File

@ -7,7 +7,7 @@
#include "src/allocation.h" #include "src/allocation.h"
#include "src/base/smart-pointers.h" #include "src/base/smart-pointers.h"
#include "src/builtins.h" #include "src/builtins/builtins.h"
#include "src/frames.h" #include "src/frames.h"
#include "src/interpreter/bytecodes.h" #include "src/interpreter/bytecodes.h"
#include "src/interpreter/interpreter-assembler.h" #include "src/interpreter/interpreter-assembler.h"

View File

@ -9,7 +9,7 @@
// Do not include anything from src/interpreter other than // Do not include anything from src/interpreter other than
// src/interpreter/bytecodes.h here! // src/interpreter/bytecodes.h here!
#include "src/base/macros.h" #include "src/base/macros.h"
#include "src/builtins.h" #include "src/builtins/builtins.h"
#include "src/interpreter/bytecodes.h" #include "src/interpreter/bytecodes.h"
#include "src/parsing/token.h" #include "src/parsing/token.h"
#include "src/runtime/runtime.h" #include "src/runtime/runtime.h"

View File

@ -15,7 +15,7 @@
#include "src/base/accounting-allocator.h" #include "src/base/accounting-allocator.h"
#include "src/base/atomicops.h" #include "src/base/atomicops.h"
#include "src/base/hashmap.h" #include "src/base/hashmap.h"
#include "src/builtins.h" #include "src/builtins/builtins.h"
#include "src/cancelable-task.h" #include "src/cancelable-task.h"
#include "src/contexts.h" #include "src/contexts.h"
#include "src/date.h" #include "src/date.h"

View File

@ -14,7 +14,7 @@
#include "src/base/atomicops.h" #include "src/base/atomicops.h"
#include "src/base/bits.h" #include "src/base/bits.h"
#include "src/builtins.h" #include "src/builtins/builtins.h"
#include "src/contexts-inl.h" #include "src/contexts-inl.h"
#include "src/conversions-inl.h" #include "src/conversions-inl.h"
#include "src/factory.h" #include "src/factory.h"

View File

@ -12,15 +12,15 @@
#include "src/base/bits.h" #include "src/base/bits.h"
#include "src/base/flags.h" #include "src/base/flags.h"
#include "src/base/smart-pointers.h" #include "src/base/smart-pointers.h"
#include "src/builtins.h" #include "src/builtins/builtins.h"
#include "src/checks.h" #include "src/checks.h"
#include "src/elements-kind.h" #include "src/elements-kind.h"
#include "src/field-index.h" #include "src/field-index.h"
#include "src/flags.h" #include "src/flags.h"
#include "src/list.h" #include "src/list.h"
#include "src/property-details.h" #include "src/property-details.h"
#include "src/unicode.h"
#include "src/unicode-decoder.h" #include "src/unicode-decoder.h"
#include "src/unicode.h"
#include "src/zone.h" #include "src/zone.h"
#if V8_TARGET_ARCH_ARM #if V8_TARGET_ARCH_ARM

View File

@ -467,8 +467,8 @@
'bit-vector.h', 'bit-vector.h',
'bootstrapper.cc', 'bootstrapper.cc',
'bootstrapper.h', 'bootstrapper.h',
'builtins.cc', 'builtins/builtins.cc',
'builtins.h', 'builtins/builtins.h',
'cached-powers.cc', 'cached-powers.cc',
'cached-powers.h', 'cached-powers.h',
'cancelable-task.cc', 'cancelable-task.cc',
@ -1217,7 +1217,6 @@
'arm/assembler-arm-inl.h', 'arm/assembler-arm-inl.h',
'arm/assembler-arm.cc', 'arm/assembler-arm.cc',
'arm/assembler-arm.h', 'arm/assembler-arm.h',
'arm/builtins-arm.cc',
'arm/code-stubs-arm.cc', 'arm/code-stubs-arm.cc',
'arm/code-stubs-arm.h', 'arm/code-stubs-arm.h',
'arm/codegen-arm.cc', 'arm/codegen-arm.cc',
@ -1235,6 +1234,7 @@
'arm/macro-assembler-arm.h', 'arm/macro-assembler-arm.h',
'arm/simulator-arm.cc', 'arm/simulator-arm.cc',
'arm/simulator-arm.h', 'arm/simulator-arm.h',
'builtins/arm/builtins-arm.cc',
'compiler/arm/code-generator-arm.cc', 'compiler/arm/code-generator-arm.cc',
'compiler/arm/instruction-codes-arm.h', 'compiler/arm/instruction-codes-arm.h',
'compiler/arm/instruction-scheduler-arm.cc', 'compiler/arm/instruction-scheduler-arm.cc',
@ -1261,7 +1261,6 @@
'arm64/assembler-arm64.cc', 'arm64/assembler-arm64.cc',
'arm64/assembler-arm64.h', 'arm64/assembler-arm64.h',
'arm64/assembler-arm64-inl.h', 'arm64/assembler-arm64-inl.h',
'arm64/builtins-arm64.cc',
'arm64/codegen-arm64.cc', 'arm64/codegen-arm64.cc',
'arm64/codegen-arm64.h', 'arm64/codegen-arm64.h',
'arm64/code-stubs-arm64.cc', 'arm64/code-stubs-arm64.cc',
@ -1289,6 +1288,7 @@
'arm64/simulator-arm64.h', 'arm64/simulator-arm64.h',
'arm64/utils-arm64.cc', 'arm64/utils-arm64.cc',
'arm64/utils-arm64.h', 'arm64/utils-arm64.h',
'builtins/arm64/builtins-arm64.cc',
'compiler/arm64/code-generator-arm64.cc', 'compiler/arm64/code-generator-arm64.cc',
'compiler/arm64/instruction-codes-arm64.h', 'compiler/arm64/instruction-codes-arm64.h',
'compiler/arm64/instruction-scheduler-arm64.cc', 'compiler/arm64/instruction-scheduler-arm64.cc',
@ -1318,7 +1318,6 @@
'ia32/assembler-ia32-inl.h', 'ia32/assembler-ia32-inl.h',
'ia32/assembler-ia32.cc', 'ia32/assembler-ia32.cc',
'ia32/assembler-ia32.h', 'ia32/assembler-ia32.h',
'ia32/builtins-ia32.cc',
'ia32/code-stubs-ia32.cc', 'ia32/code-stubs-ia32.cc',
'ia32/code-stubs-ia32.h', 'ia32/code-stubs-ia32.h',
'ia32/codegen-ia32.cc', 'ia32/codegen-ia32.cc',
@ -1331,6 +1330,7 @@
'ia32/interface-descriptors-ia32.cc', 'ia32/interface-descriptors-ia32.cc',
'ia32/macro-assembler-ia32.cc', 'ia32/macro-assembler-ia32.cc',
'ia32/macro-assembler-ia32.h', 'ia32/macro-assembler-ia32.h',
'builtins/ia32/builtins-ia32.cc',
'compiler/ia32/code-generator-ia32.cc', 'compiler/ia32/code-generator-ia32.cc',
'compiler/ia32/instruction-codes-ia32.h', 'compiler/ia32/instruction-codes-ia32.h',
'compiler/ia32/instruction-scheduler-ia32.cc', 'compiler/ia32/instruction-scheduler-ia32.cc',
@ -1357,7 +1357,6 @@
'x87/assembler-x87-inl.h', 'x87/assembler-x87-inl.h',
'x87/assembler-x87.cc', 'x87/assembler-x87.cc',
'x87/assembler-x87.h', 'x87/assembler-x87.h',
'x87/builtins-x87.cc',
'x87/code-stubs-x87.cc', 'x87/code-stubs-x87.cc',
'x87/code-stubs-x87.h', 'x87/code-stubs-x87.h',
'x87/codegen-x87.cc', 'x87/codegen-x87.cc',
@ -1370,6 +1369,7 @@
'x87/interface-descriptors-x87.cc', 'x87/interface-descriptors-x87.cc',
'x87/macro-assembler-x87.cc', 'x87/macro-assembler-x87.cc',
'x87/macro-assembler-x87.h', 'x87/macro-assembler-x87.h',
'builtins/x87/builtins-x87.cc',
'compiler/x87/code-generator-x87.cc', 'compiler/x87/code-generator-x87.cc',
'compiler/x87/instruction-codes-x87.h', 'compiler/x87/instruction-codes-x87.h',
'compiler/x87/instruction-scheduler-x87.cc', 'compiler/x87/instruction-scheduler-x87.cc',
@ -1396,7 +1396,6 @@
'mips/assembler-mips.cc', 'mips/assembler-mips.cc',
'mips/assembler-mips.h', 'mips/assembler-mips.h',
'mips/assembler-mips-inl.h', 'mips/assembler-mips-inl.h',
'mips/builtins-mips.cc',
'mips/codegen-mips.cc', 'mips/codegen-mips.cc',
'mips/codegen-mips.h', 'mips/codegen-mips.h',
'mips/code-stubs-mips.cc', 'mips/code-stubs-mips.cc',
@ -1413,6 +1412,7 @@
'mips/macro-assembler-mips.h', 'mips/macro-assembler-mips.h',
'mips/simulator-mips.cc', 'mips/simulator-mips.cc',
'mips/simulator-mips.h', 'mips/simulator-mips.h',
'builtins/mips/builtins-mips.cc',
'compiler/mips/code-generator-mips.cc', 'compiler/mips/code-generator-mips.cc',
'compiler/mips/instruction-codes-mips.h', 'compiler/mips/instruction-codes-mips.h',
'compiler/mips/instruction-scheduler-mips.cc', 'compiler/mips/instruction-scheduler-mips.cc',
@ -1439,7 +1439,6 @@
'mips64/assembler-mips64.cc', 'mips64/assembler-mips64.cc',
'mips64/assembler-mips64.h', 'mips64/assembler-mips64.h',
'mips64/assembler-mips64-inl.h', 'mips64/assembler-mips64-inl.h',
'mips64/builtins-mips64.cc',
'mips64/codegen-mips64.cc', 'mips64/codegen-mips64.cc',
'mips64/codegen-mips64.h', 'mips64/codegen-mips64.h',
'mips64/code-stubs-mips64.cc', 'mips64/code-stubs-mips64.cc',
@ -1456,6 +1455,7 @@
'mips64/macro-assembler-mips64.h', 'mips64/macro-assembler-mips64.h',
'mips64/simulator-mips64.cc', 'mips64/simulator-mips64.cc',
'mips64/simulator-mips64.h', 'mips64/simulator-mips64.h',
'builtins/mips64/builtins-mips64.cc',
'compiler/mips64/code-generator-mips64.cc', 'compiler/mips64/code-generator-mips64.cc',
'compiler/mips64/instruction-codes-mips64.h', 'compiler/mips64/instruction-codes-mips64.h',
'compiler/mips64/instruction-scheduler-mips64.cc', 'compiler/mips64/instruction-scheduler-mips64.cc',
@ -1479,6 +1479,7 @@
}], }],
['v8_target_arch=="x64" or v8_target_arch=="x32"', { ['v8_target_arch=="x64" or v8_target_arch=="x32"', {
'sources': [ ### gcmole(arch:x64) ### 'sources': [ ### gcmole(arch:x64) ###
'builtins/x64/builtins-x64.cc',
'crankshaft/x64/lithium-codegen-x64.cc', 'crankshaft/x64/lithium-codegen-x64.cc',
'crankshaft/x64/lithium-codegen-x64.h', 'crankshaft/x64/lithium-codegen-x64.h',
'crankshaft/x64/lithium-gap-resolver-x64.cc', 'crankshaft/x64/lithium-gap-resolver-x64.cc',
@ -1488,7 +1489,6 @@
'x64/assembler-x64-inl.h', 'x64/assembler-x64-inl.h',
'x64/assembler-x64.cc', 'x64/assembler-x64.cc',
'x64/assembler-x64.h', 'x64/assembler-x64.h',
'x64/builtins-x64.cc',
'x64/code-stubs-x64.cc', 'x64/code-stubs-x64.cc',
'x64/code-stubs-x64.h', 'x64/code-stubs-x64.h',
'x64/codegen-x64.cc', 'x64/codegen-x64.cc',
@ -1522,6 +1522,7 @@
}], }],
['v8_target_arch=="ppc" or v8_target_arch=="ppc64"', { ['v8_target_arch=="ppc" or v8_target_arch=="ppc64"', {
'sources': [ ### gcmole(arch:ppc) ### 'sources': [ ### gcmole(arch:ppc) ###
'builtins/ppc/builtins-ppc.cc',
'compiler/ppc/code-generator-ppc.cc', 'compiler/ppc/code-generator-ppc.cc',
'compiler/ppc/instruction-codes-ppc.h', 'compiler/ppc/instruction-codes-ppc.h',
'compiler/ppc/instruction-scheduler-ppc.cc', 'compiler/ppc/instruction-scheduler-ppc.cc',
@ -1542,7 +1543,6 @@
'ppc/assembler-ppc-inl.h', 'ppc/assembler-ppc-inl.h',
'ppc/assembler-ppc.cc', 'ppc/assembler-ppc.cc',
'ppc/assembler-ppc.h', 'ppc/assembler-ppc.h',
'ppc/builtins-ppc.cc',
'ppc/code-stubs-ppc.cc', 'ppc/code-stubs-ppc.cc',
'ppc/code-stubs-ppc.h', 'ppc/code-stubs-ppc.h',
'ppc/codegen-ppc.cc', 'ppc/codegen-ppc.cc',
@ -1565,6 +1565,7 @@
}], }],
['v8_target_arch=="s390" or v8_target_arch=="s390x"', { ['v8_target_arch=="s390" or v8_target_arch=="s390x"', {
'sources': [ ### gcmole(arch:s390) ### 'sources': [ ### gcmole(arch:s390) ###
'builtins/s390/builtins-s390.cc',
'compiler/s390/code-generator-s390.cc', 'compiler/s390/code-generator-s390.cc',
'compiler/s390/instruction-codes-s390.h', 'compiler/s390/instruction-codes-s390.h',
'compiler/s390/instruction-scheduler-s390.cc', 'compiler/s390/instruction-scheduler-s390.cc',
@ -1587,7 +1588,6 @@
's390/assembler-s390.cc', 's390/assembler-s390.cc',
's390/assembler-s390.h', 's390/assembler-s390.h',
's390/assembler-s390-inl.h', 's390/assembler-s390-inl.h',
's390/builtins-s390.cc',
's390/codegen-s390.cc', 's390/codegen-s390.cc',
's390/codegen-s390.h', 's390/codegen-s390.h',
's390/code-stubs-s390.cc', 's390/code-stubs-s390.cc',