summaryrefslogtreecommitdiff
path: root/deps/v8/src/builtins/setup-builtins-internal.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/builtins/setup-builtins-internal.cc')
-rw-r--r--deps/v8/src/builtins/setup-builtins-internal.cc87
1 files changed, 35 insertions, 52 deletions
diff --git a/deps/v8/src/builtins/setup-builtins-internal.cc b/deps/v8/src/builtins/setup-builtins-internal.cc
index ab3a84fb01..b21e3f5b99 100644
--- a/deps/v8/src/builtins/setup-builtins-internal.cc
+++ b/deps/v8/src/builtins/setup-builtins-internal.cc
@@ -4,11 +4,15 @@
#include "src/setup-isolate.h"
+#include "src/assembler-inl.h"
#include "src/builtins/builtins.h"
#include "src/code-events.h"
#include "src/compiler/code-assembler.h"
+#include "src/handles-inl.h"
#include "src/interface-descriptors.h"
#include "src/isolate.h"
+#include "src/objects-inl.h"
+#include "src/objects/shared-function-info.h"
namespace v8 {
namespace internal {
@@ -17,6 +21,7 @@ namespace internal {
#define FORWARD_DECLARE(Name) \
Object* Builtin_##Name(int argc, Object** args, Isolate* isolate);
BUILTIN_LIST_C(FORWARD_DECLARE)
+#undef FORWARD_DECLARE
namespace {
void PostBuildProfileAndTracing(Isolate* isolate, Code* code,
@@ -37,8 +42,6 @@ void PostBuildProfileAndTracing(Isolate* isolate, Code* code,
typedef void (*MacroAssemblerGenerator)(MacroAssembler*);
typedef void (*CodeAssemblerGenerator)(compiler::CodeAssemblerState*);
-static const ExtraICState kPlaceholderState = 1;
-
Handle<Code> BuildPlaceholder(Isolate* isolate) {
HandleScope scope(isolate);
const size_t buffer_size = 1 * KB;
@@ -51,16 +54,14 @@ Handle<Code> BuildPlaceholder(Isolate* isolate) {
}
CodeDesc desc;
masm.GetCode(isolate, &desc);
- const Code::Flags kPlaceholderFlags =
- Code::ComputeFlags(Code::BUILTIN, kPlaceholderState);
Handle<Code> code =
- isolate->factory()->NewCode(desc, kPlaceholderFlags, masm.CodeObject());
+ isolate->factory()->NewCode(desc, Code::BUILTIN, masm.CodeObject());
return scope.CloseAndEscape(code);
}
Code* BuildWithMacroAssembler(Isolate* isolate,
MacroAssemblerGenerator generator,
- Code::Flags flags, const char* s_name) {
+ const char* s_name) {
HandleScope scope(isolate);
// Canonicalize handles, so that we can share constant pool entries pointing
// to code targets without dereferencing their handles.
@@ -73,14 +74,13 @@ Code* BuildWithMacroAssembler(Isolate* isolate,
CodeDesc desc;
masm.GetCode(isolate, &desc);
Handle<Code> code =
- isolate->factory()->NewCode(desc, flags, masm.CodeObject());
+ isolate->factory()->NewCode(desc, Code::BUILTIN, masm.CodeObject());
PostBuildProfileAndTracing(isolate, *code, s_name);
return *code;
}
Code* BuildAdaptor(Isolate* isolate, Address builtin_address,
- Builtins::ExitFrameType exit_frame_type, Code::Flags flags,
- const char* name) {
+ Builtins::ExitFrameType exit_frame_type, const char* name) {
HandleScope scope(isolate);
// Canonicalize handles, so that we can share constant pool entries pointing
// to code targets without dereferencing their handles.
@@ -93,7 +93,7 @@ Code* BuildAdaptor(Isolate* isolate, Address builtin_address,
CodeDesc desc;
masm.GetCode(isolate, &desc);
Handle<Code> code =
- isolate->factory()->NewCode(desc, flags, masm.CodeObject());
+ isolate->factory()->NewCode(desc, Code::BUILTIN, masm.CodeObject());
PostBuildProfileAndTracing(isolate, *code, name);
return *code;
}
@@ -101,7 +101,7 @@ Code* BuildAdaptor(Isolate* isolate, Address builtin_address,
// Builder for builtins implemented in TurboFan with JS linkage.
Code* BuildWithCodeStubAssemblerJS(Isolate* isolate,
CodeAssemblerGenerator generator, int argc,
- Code::Flags flags, const char* name) {
+ const char* name) {
HandleScope scope(isolate);
// Canonicalize handles, so that we can share constant pool entries pointing
// to code targets without dereferencing their handles.
@@ -109,8 +109,8 @@ Code* BuildWithCodeStubAssemblerJS(Isolate* isolate,
Zone zone(isolate->allocator(), ZONE_NAME);
const int argc_with_recv =
(argc == SharedFunctionInfo::kDontAdaptArgumentsSentinel) ? 0 : argc + 1;
- compiler::CodeAssemblerState state(isolate, &zone, argc_with_recv, flags,
- name);
+ compiler::CodeAssemblerState state(isolate, &zone, argc_with_recv,
+ Code::BUILTIN, name);
generator(&state);
Handle<Code> code = compiler::CodeAssembler::GenerateCode(&state);
PostBuildProfileAndTracing(isolate, *code, name);
@@ -121,8 +121,7 @@ Code* BuildWithCodeStubAssemblerJS(Isolate* isolate,
Code* BuildWithCodeStubAssemblerCS(Isolate* isolate,
CodeAssemblerGenerator generator,
CallDescriptors::Key interface_descriptor,
- Code::Flags flags, const char* name,
- int result_size) {
+ const char* name, int result_size) {
HandleScope scope(isolate);
// Canonicalize handles, so that we can share constant pool entries pointing
// to code targets without dereferencing their handles.
@@ -133,8 +132,8 @@ Code* BuildWithCodeStubAssemblerCS(Isolate* isolate,
CallInterfaceDescriptor descriptor(isolate, interface_descriptor);
// Ensure descriptor is already initialized.
DCHECK_LE(0, descriptor.GetRegisterParameterCount());
- compiler::CodeAssemblerState state(isolate, &zone, descriptor, flags, name,
- result_size);
+ compiler::CodeAssemblerState state(isolate, &zone, descriptor, Code::BUILTIN,
+ name, result_size);
generator(&state);
Handle<Code> code = compiler::CodeAssembler::GenerateCode(&state);
PostBuildProfileAndTracing(isolate, *code, name);
@@ -167,8 +166,6 @@ void SetupIsolateDelegate::ReplacePlaceholders(Isolate* isolate) {
DisallowHeapAllocation no_gc;
static const int kRelocMask = RelocInfo::ModeMask(RelocInfo::CODE_TARGET) |
RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT);
- const Code::Flags kPlaceholderFlags =
- Code::ComputeFlags(Code::BUILTIN, kPlaceholderState);
HeapIterator iterator(isolate->heap());
while (HeapObject* obj = iterator.next()) {
if (!obj->IsCode()) continue;
@@ -178,7 +175,7 @@ void SetupIsolateDelegate::ReplacePlaceholders(Isolate* isolate) {
RelocInfo* rinfo = it.rinfo();
if (RelocInfo::IsCodeTarget(rinfo->rmode())) {
Code* target = Code::GetCodeFromTargetAddress(rinfo->target_address());
- if (target->flags() != kPlaceholderFlags) continue;
+ if (!target->is_builtin()) continue;
Code* new_target =
Code::cast(builtins->builtins_[target->builtin_index()]);
rinfo->set_target_address(isolate, new_target->instruction_start(),
@@ -188,7 +185,7 @@ void SetupIsolateDelegate::ReplacePlaceholders(Isolate* isolate) {
Object* object = rinfo->target_object();
if (!object->IsCode()) continue;
Code* target = Code::cast(object);
- if (target->flags() != kPlaceholderFlags) continue;
+ if (!target->is_builtin()) continue;
Code* new_target =
Code::cast(builtins->builtins_[target->builtin_index()]);
rinfo->set_target_object(new_target, UPDATE_WRITE_BARRIER,
@@ -201,16 +198,6 @@ void SetupIsolateDelegate::ReplacePlaceholders(Isolate* isolate) {
code->instruction_size());
}
}
-#ifdef DEBUG
- // Verify that references to all placeholder builtins have been replaced.
- // Skip this check for non-snapshot builds.
- if (isolate->serializer_enabled()) {
- HeapIterator iterator(isolate->heap(), HeapIterator::kFilterUnreachable);
- while (HeapObject* obj = iterator.next()) {
- if (obj->IsCode()) CHECK_NE(kPlaceholderFlags, Code::cast(obj)->flags());
- }
- }
-#endif
}
void SetupIsolateDelegate::SetupBuiltinsInternal(Isolate* isolate) {
@@ -223,43 +210,39 @@ void SetupIsolateDelegate::SetupBuiltinsInternal(Isolate* isolate) {
HandleScope scope(isolate);
int index = 0;
- const Code::Flags kBuiltinFlags = Code::ComputeFlags(Code::BUILTIN);
Code* code;
-#define BUILD_CPP(Name) \
- code = BuildAdaptor(isolate, FUNCTION_ADDR(Builtin_##Name), \
- Builtins::BUILTIN_EXIT, kBuiltinFlags, #Name); \
+#define BUILD_CPP(Name) \
+ code = BuildAdaptor(isolate, FUNCTION_ADDR(Builtin_##Name), \
+ Builtins::BUILTIN_EXIT, #Name); \
AddBuiltin(builtins, index++, code);
#define BUILD_API(Name) \
code = BuildAdaptor(isolate, FUNCTION_ADDR(Builtin_##Name), Builtins::EXIT, \
- kBuiltinFlags, #Name); \
+ #Name); \
AddBuiltin(builtins, index++, code);
#define BUILD_TFJ(Name, Argc, ...) \
code = BuildWithCodeStubAssemblerJS(isolate, &Builtins::Generate_##Name, \
- Argc, kBuiltinFlags, #Name); \
+ Argc, #Name); \
AddBuiltin(builtins, index++, code);
#define BUILD_TFC(Name, InterfaceDescriptor, result_size) \
{ InterfaceDescriptor##Descriptor descriptor(isolate); } \
code = BuildWithCodeStubAssemblerCS(isolate, &Builtins::Generate_##Name, \
CallDescriptors::InterfaceDescriptor, \
- kBuiltinFlags, #Name, result_size); \
+ #Name, result_size); \
AddBuiltin(builtins, index++, code);
-#define BUILD_TFS(Name, ...) \
- /* Return size for generic TF builtins (stub linkage) is always 1. */ \
+#define BUILD_TFS(Name, ...) \
+ /* Return size for generic TF builtins (stub linkage) is always 1. */ \
+ code = BuildWithCodeStubAssemblerCS(isolate, &Builtins::Generate_##Name, \
+ CallDescriptors::Name, #Name, 1); \
+ AddBuiltin(builtins, index++, code);
+#define BUILD_TFH(Name, InterfaceDescriptor) \
+ { InterfaceDescriptor##Descriptor descriptor(isolate); } \
+ /* Return size for IC builtins/handlers is always 1. */ \
code = BuildWithCodeStubAssemblerCS(isolate, &Builtins::Generate_##Name, \
- CallDescriptors::Name, kBuiltinFlags, \
+ CallDescriptors::InterfaceDescriptor, \
#Name, 1); \
AddBuiltin(builtins, index++, code);
-#define BUILD_TFH(Name, Kind, Extra, InterfaceDescriptor) \
- { InterfaceDescriptor##Descriptor descriptor(isolate); } \
- /* Return size for IC builtins/handlers is always 1. */ \
- code = BuildWithCodeStubAssemblerCS(isolate, &Builtins::Generate_##Name, \
- CallDescriptors::InterfaceDescriptor, \
- Code::ComputeFlags(Code::Kind, Extra), \
- #Name, 1); \
- AddBuiltin(builtins, index++, code);
-#define BUILD_ASM(Name) \
- code = BuildWithMacroAssembler(isolate, Builtins::Generate_##Name, \
- kBuiltinFlags, #Name); \
+#define BUILD_ASM(Name) \
+ code = BuildWithMacroAssembler(isolate, Builtins::Generate_##Name, #Name); \
AddBuiltin(builtins, index++, code);
BUILTIN_LIST(BUILD_CPP, BUILD_API, BUILD_TFJ, BUILD_TFC, BUILD_TFS, BUILD_TFH,