[stubs] General stub cleanup (includes & platform-independent code)
Bug: v8:6666 Change-Id: Ibb5b8b2012041e908ac7f109abf0a724b12c0e72 Reviewed-on: https://chromium-review.googlesource.com/1073447 Reviewed-by: Igor Sheludko <ishell@chromium.org> Commit-Queue: Jakob Gruber <jgruber@chromium.org> Cr-Commit-Position: refs/heads/master@{#53364}
This commit is contained in:
parent
a55d8632f7
commit
c52b7af57d
@ -30,11 +30,6 @@ namespace internal {
|
||||
|
||||
#define __ ACCESS_MASM(masm)
|
||||
|
||||
void CodeStub::GenerateStubsAheadOfTime(Isolate* isolate) {
|
||||
CommonArrayConstructorStub::GenerateStubsAheadOfTime(isolate);
|
||||
StoreFastElementStub::GenerateAheadOfTime(isolate);
|
||||
}
|
||||
|
||||
void JSEntryStub::Generate(MacroAssembler* masm) {
|
||||
// r0: code entry
|
||||
// r1: function
|
||||
@ -318,36 +313,6 @@ void ProfileEntryHookStub::Generate(MacroAssembler* masm) {
|
||||
__ ldm(ia_w, sp, kSavedRegs | pc.bit());
|
||||
}
|
||||
|
||||
template<class T>
|
||||
static void ArrayConstructorStubAheadOfTimeHelper(Isolate* isolate) {
|
||||
int to_index =
|
||||
GetSequenceIndexFromFastElementsKind(TERMINAL_FAST_ELEMENTS_KIND);
|
||||
for (int i = 0; i <= to_index; ++i) {
|
||||
ElementsKind kind = GetFastElementsKindFromSequenceIndex(i);
|
||||
T stub(isolate, kind);
|
||||
stub.GetCode();
|
||||
if (AllocationSite::ShouldTrack(kind)) {
|
||||
T stub1(isolate, kind, DISABLE_ALLOCATION_SITES);
|
||||
stub1.GetCode();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CommonArrayConstructorStub::GenerateStubsAheadOfTime(Isolate* isolate) {
|
||||
ArrayConstructorStubAheadOfTimeHelper<ArrayNoArgumentConstructorStub>(
|
||||
isolate);
|
||||
ArrayConstructorStubAheadOfTimeHelper<ArraySingleArgumentConstructorStub>(
|
||||
isolate);
|
||||
ElementsKind kinds[2] = {PACKED_ELEMENTS, HOLEY_ELEMENTS};
|
||||
for (int i = 0; i < 2; i++) {
|
||||
// For internal arrays we only need a few things
|
||||
InternalArrayNoArgumentConstructorStub stubh1(isolate, kinds[i]);
|
||||
stubh1.GetCode();
|
||||
InternalArraySingleArgumentConstructorStub stubh2(isolate, kinds[i]);
|
||||
stubh2.GetCode();
|
||||
}
|
||||
}
|
||||
|
||||
static int AddressOffset(ExternalReference ref0, ExternalReference ref1) {
|
||||
return ref0.address() - ref1.address();
|
||||
}
|
||||
|
@ -29,13 +29,6 @@ namespace internal {
|
||||
|
||||
#define __ ACCESS_MASM(masm)
|
||||
|
||||
void CodeStub::GenerateStubsAheadOfTime(Isolate* isolate) {
|
||||
// It is important that the following stubs are generated in this order
|
||||
// because pregenerated stubs can only call other pregenerated stubs.
|
||||
CommonArrayConstructorStub::GenerateStubsAheadOfTime(isolate);
|
||||
StoreFastElementStub::GenerateAheadOfTime(isolate);
|
||||
}
|
||||
|
||||
// This is the entry point from C++. 5 arguments are provided in x0-x4.
|
||||
// See use of the JSEntryFunction for example in src/execution.cc.
|
||||
// Input:
|
||||
@ -316,36 +309,6 @@ void DirectCEntryStub::GenerateCall(MacroAssembler* masm,
|
||||
__ Call(GetCode(), RelocInfo::CODE_TARGET);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
static void ArrayConstructorStubAheadOfTimeHelper(Isolate* isolate) {
|
||||
int to_index =
|
||||
GetSequenceIndexFromFastElementsKind(TERMINAL_FAST_ELEMENTS_KIND);
|
||||
for (int i = 0; i <= to_index; ++i) {
|
||||
ElementsKind kind = GetFastElementsKindFromSequenceIndex(i);
|
||||
T stub(isolate, kind);
|
||||
stub.GetCode();
|
||||
if (AllocationSite::ShouldTrack(kind)) {
|
||||
T stub1(isolate, kind, DISABLE_ALLOCATION_SITES);
|
||||
stub1.GetCode();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CommonArrayConstructorStub::GenerateStubsAheadOfTime(Isolate* isolate) {
|
||||
ArrayConstructorStubAheadOfTimeHelper<ArrayNoArgumentConstructorStub>(
|
||||
isolate);
|
||||
ArrayConstructorStubAheadOfTimeHelper<ArraySingleArgumentConstructorStub>(
|
||||
isolate);
|
||||
ElementsKind kinds[2] = {PACKED_ELEMENTS, HOLEY_ELEMENTS};
|
||||
for (int i = 0; i < 2; i++) {
|
||||
// For internal arrays we only need a few things
|
||||
InternalArrayNoArgumentConstructorStub stubh1(isolate, kinds[i]);
|
||||
stubh1.GetCode();
|
||||
InternalArraySingleArgumentConstructorStub stubh2(isolate, kinds[i]);
|
||||
stubh2.GetCode();
|
||||
}
|
||||
}
|
||||
|
||||
// The number of register that CallApiFunctionAndReturn will need to save on
|
||||
// the stack. The space for these registers need to be allocated in the
|
||||
// ExitFrame before calling CallApiFunctionAndReturn.
|
||||
|
@ -458,6 +458,46 @@ void ProfileEntryHookStub::EntryHookTrampoline(intptr_t function,
|
||||
entry_hook(function, stack_pointer);
|
||||
}
|
||||
|
||||
void CodeStub::GenerateStubsAheadOfTime(Isolate* isolate) {
|
||||
CommonArrayConstructorStub::GenerateStubsAheadOfTime(isolate);
|
||||
StoreFastElementStub::GenerateAheadOfTime(isolate);
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
template <class T>
|
||||
void ArrayConstructorStubAheadOfTimeHelper(Isolate* isolate) {
|
||||
int to_index =
|
||||
GetSequenceIndexFromFastElementsKind(TERMINAL_FAST_ELEMENTS_KIND);
|
||||
for (int i = 0; i <= to_index; ++i) {
|
||||
ElementsKind kind = GetFastElementsKindFromSequenceIndex(i);
|
||||
T stub(isolate, kind);
|
||||
stub.GetCode();
|
||||
if (AllocationSite::ShouldTrack(kind)) {
|
||||
T stub1(isolate, kind, DISABLE_ALLOCATION_SITES);
|
||||
stub1.GetCode();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
void CommonArrayConstructorStub::GenerateStubsAheadOfTime(Isolate* isolate) {
|
||||
ArrayConstructorStubAheadOfTimeHelper<ArrayNoArgumentConstructorStub>(
|
||||
isolate);
|
||||
ArrayConstructorStubAheadOfTimeHelper<ArraySingleArgumentConstructorStub>(
|
||||
isolate);
|
||||
|
||||
ElementsKind kinds[2] = {PACKED_ELEMENTS, HOLEY_ELEMENTS};
|
||||
for (int i = 0; i < 2; i++) {
|
||||
// For internal arrays we only need a few things
|
||||
InternalArrayNoArgumentConstructorStub stubh1(isolate, kinds[i]);
|
||||
stubh1.GetCode();
|
||||
InternalArraySingleArgumentConstructorStub stubh2(isolate, kinds[i]);
|
||||
stubh2.GetCode();
|
||||
}
|
||||
}
|
||||
|
||||
TF_STUB(ArrayNoArgumentConstructorStub, CodeStubAssembler) {
|
||||
ElementsKind elements_kind = stub->elements_kind();
|
||||
Node* native_context = LoadObjectField(Parameter(Descriptor::kFunction),
|
||||
|
@ -5,24 +5,16 @@
|
||||
#ifndef V8_CODE_STUBS_H_
|
||||
#define V8_CODE_STUBS_H_
|
||||
|
||||
#include "src/allocation.h"
|
||||
#include "src/assembler.h"
|
||||
#include "src/globals.h"
|
||||
#include "src/heap/factory.h"
|
||||
#include "src/interface-descriptors.h"
|
||||
#include "src/macro-assembler.h"
|
||||
#include "src/ostreams.h"
|
||||
#include "src/type-hints.h"
|
||||
|
||||
namespace v8 {
|
||||
namespace internal {
|
||||
|
||||
// Forward declarations.
|
||||
class CodeStubAssembler;
|
||||
class Isolate;
|
||||
namespace compiler {
|
||||
class CodeAssemblerLabel;
|
||||
class CodeAssemblerState;
|
||||
class Node;
|
||||
}
|
||||
|
||||
// List of code stubs used on all platforms.
|
||||
|
@ -25,12 +25,6 @@ namespace internal {
|
||||
|
||||
#define __ ACCESS_MASM(masm)
|
||||
|
||||
void CodeStub::GenerateStubsAheadOfTime(Isolate* isolate) {
|
||||
// It is important that the store buffer overflow stubs are generated first.
|
||||
CommonArrayConstructorStub::GenerateStubsAheadOfTime(isolate);
|
||||
StoreFastElementStub::GenerateAheadOfTime(isolate);
|
||||
}
|
||||
|
||||
void JSEntryStub::Generate(MacroAssembler* masm) {
|
||||
Label invoke, handler_entry, exit;
|
||||
Label not_outermost_js, not_outermost_js_2;
|
||||
@ -163,37 +157,6 @@ void ProfileEntryHookStub::Generate(MacroAssembler* masm) {
|
||||
__ ret(0);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
static void ArrayConstructorStubAheadOfTimeHelper(Isolate* isolate) {
|
||||
int to_index =
|
||||
GetSequenceIndexFromFastElementsKind(TERMINAL_FAST_ELEMENTS_KIND);
|
||||
for (int i = 0; i <= to_index; ++i) {
|
||||
ElementsKind kind = GetFastElementsKindFromSequenceIndex(i);
|
||||
T stub(isolate, kind);
|
||||
stub.GetCode();
|
||||
if (AllocationSite::ShouldTrack(kind)) {
|
||||
T stub1(isolate, kind, DISABLE_ALLOCATION_SITES);
|
||||
stub1.GetCode();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CommonArrayConstructorStub::GenerateStubsAheadOfTime(Isolate* isolate) {
|
||||
ArrayConstructorStubAheadOfTimeHelper<ArrayNoArgumentConstructorStub>(
|
||||
isolate);
|
||||
ArrayConstructorStubAheadOfTimeHelper<ArraySingleArgumentConstructorStub>(
|
||||
isolate);
|
||||
|
||||
ElementsKind kinds[2] = {PACKED_ELEMENTS, HOLEY_ELEMENTS};
|
||||
for (int i = 0; i < 2; i++) {
|
||||
// For internal arrays we only need a few things
|
||||
InternalArrayNoArgumentConstructorStub stubh1(isolate, kinds[i]);
|
||||
stubh1.GetCode();
|
||||
InternalArraySingleArgumentConstructorStub stubh2(isolate, kinds[i]);
|
||||
stubh2.GetCode();
|
||||
}
|
||||
}
|
||||
|
||||
// Generates an Operand for saving parameters after PrepareCallApiFunction.
|
||||
static Operand ApiParameterOperand(int index) {
|
||||
return Operand(esp, index * kPointerSize);
|
||||
|
@ -26,11 +26,6 @@ namespace internal {
|
||||
|
||||
#define __ ACCESS_MASM(masm)
|
||||
|
||||
void CodeStub::GenerateStubsAheadOfTime(Isolate* isolate) {
|
||||
CommonArrayConstructorStub::GenerateStubsAheadOfTime(isolate);
|
||||
StoreFastElementStub::GenerateAheadOfTime(isolate);
|
||||
}
|
||||
|
||||
void JSEntryStub::Generate(MacroAssembler* masm) {
|
||||
Label invoke, handler_entry, exit;
|
||||
Isolate* isolate = masm->isolate();
|
||||
@ -312,36 +307,6 @@ void ProfileEntryHookStub::Generate(MacroAssembler* masm) {
|
||||
__ Ret();
|
||||
}
|
||||
|
||||
template<class T>
|
||||
static void ArrayConstructorStubAheadOfTimeHelper(Isolate* isolate) {
|
||||
int to_index =
|
||||
GetSequenceIndexFromFastElementsKind(TERMINAL_FAST_ELEMENTS_KIND);
|
||||
for (int i = 0; i <= to_index; ++i) {
|
||||
ElementsKind kind = GetFastElementsKindFromSequenceIndex(i);
|
||||
T stub(isolate, kind);
|
||||
stub.GetCode();
|
||||
if (AllocationSite::ShouldTrack(kind)) {
|
||||
T stub1(isolate, kind, DISABLE_ALLOCATION_SITES);
|
||||
stub1.GetCode();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CommonArrayConstructorStub::GenerateStubsAheadOfTime(Isolate* isolate) {
|
||||
ArrayConstructorStubAheadOfTimeHelper<ArrayNoArgumentConstructorStub>(
|
||||
isolate);
|
||||
ArrayConstructorStubAheadOfTimeHelper<ArraySingleArgumentConstructorStub>(
|
||||
isolate);
|
||||
ElementsKind kinds[2] = {PACKED_ELEMENTS, HOLEY_ELEMENTS};
|
||||
for (int i = 0; i < 2; i++) {
|
||||
// For internal arrays we only need a few things.
|
||||
InternalArrayNoArgumentConstructorStub stubh1(isolate, kinds[i]);
|
||||
stubh1.GetCode();
|
||||
InternalArraySingleArgumentConstructorStub stubh2(isolate, kinds[i]);
|
||||
stubh2.GetCode();
|
||||
}
|
||||
}
|
||||
|
||||
static int AddressOffset(ExternalReference ref0, ExternalReference ref1) {
|
||||
return ref0.address() - ref1.address();
|
||||
}
|
||||
|
@ -25,11 +25,6 @@ namespace internal {
|
||||
|
||||
#define __ ACCESS_MASM(masm)
|
||||
|
||||
void CodeStub::GenerateStubsAheadOfTime(Isolate* isolate) {
|
||||
CommonArrayConstructorStub::GenerateStubsAheadOfTime(isolate);
|
||||
StoreFastElementStub::GenerateAheadOfTime(isolate);
|
||||
}
|
||||
|
||||
void JSEntryStub::Generate(MacroAssembler* masm) {
|
||||
Label invoke, handler_entry, exit;
|
||||
Isolate* isolate = masm->isolate();
|
||||
@ -314,36 +309,6 @@ void ProfileEntryHookStub::Generate(MacroAssembler* masm) {
|
||||
__ Ret();
|
||||
}
|
||||
|
||||
template<class T>
|
||||
static void ArrayConstructorStubAheadOfTimeHelper(Isolate* isolate) {
|
||||
int to_index =
|
||||
GetSequenceIndexFromFastElementsKind(TERMINAL_FAST_ELEMENTS_KIND);
|
||||
for (int i = 0; i <= to_index; ++i) {
|
||||
ElementsKind kind = GetFastElementsKindFromSequenceIndex(i);
|
||||
T stub(isolate, kind);
|
||||
stub.GetCode();
|
||||
if (AllocationSite::ShouldTrack(kind)) {
|
||||
T stub1(isolate, kind, DISABLE_ALLOCATION_SITES);
|
||||
stub1.GetCode();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CommonArrayConstructorStub::GenerateStubsAheadOfTime(Isolate* isolate) {
|
||||
ArrayConstructorStubAheadOfTimeHelper<ArrayNoArgumentConstructorStub>(
|
||||
isolate);
|
||||
ArrayConstructorStubAheadOfTimeHelper<ArraySingleArgumentConstructorStub>(
|
||||
isolate);
|
||||
ElementsKind kinds[2] = {PACKED_ELEMENTS, HOLEY_ELEMENTS};
|
||||
for (int i = 0; i < 2; i++) {
|
||||
// For internal arrays we only need a few things.
|
||||
InternalArrayNoArgumentConstructorStub stubh1(isolate, kinds[i]);
|
||||
stubh1.GetCode();
|
||||
InternalArraySingleArgumentConstructorStub stubh2(isolate, kinds[i]);
|
||||
stubh2.GetCode();
|
||||
}
|
||||
}
|
||||
|
||||
static int AddressOffset(ExternalReference ref0, ExternalReference ref1) {
|
||||
int64_t offset = (ref0.address() - ref1.address());
|
||||
DCHECK(static_cast<int>(offset) == offset);
|
||||
|
@ -27,12 +27,6 @@ namespace internal {
|
||||
|
||||
#define __ ACCESS_MASM(masm)
|
||||
|
||||
void CodeStub::GenerateStubsAheadOfTime(Isolate* isolate) {
|
||||
// It is important that the store buffer overflow stubs are generated first.
|
||||
CommonArrayConstructorStub::GenerateStubsAheadOfTime(isolate);
|
||||
StoreFastElementStub::GenerateAheadOfTime(isolate);
|
||||
}
|
||||
|
||||
void JSEntryStub::Generate(MacroAssembler* masm) {
|
||||
Label invoke, handler_entry, exit;
|
||||
Label not_outermost_js, not_outermost_js_2;
|
||||
@ -229,38 +223,6 @@ void ProfileEntryHookStub::Generate(MacroAssembler* masm) {
|
||||
__ Ret();
|
||||
}
|
||||
|
||||
|
||||
template<class T>
|
||||
static void ArrayConstructorStubAheadOfTimeHelper(Isolate* isolate) {
|
||||
int to_index =
|
||||
GetSequenceIndexFromFastElementsKind(TERMINAL_FAST_ELEMENTS_KIND);
|
||||
for (int i = 0; i <= to_index; ++i) {
|
||||
ElementsKind kind = GetFastElementsKindFromSequenceIndex(i);
|
||||
T stub(isolate, kind);
|
||||
stub.GetCode();
|
||||
if (AllocationSite::ShouldTrack(kind)) {
|
||||
T stub1(isolate, kind, DISABLE_ALLOCATION_SITES);
|
||||
stub1.GetCode();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CommonArrayConstructorStub::GenerateStubsAheadOfTime(Isolate* isolate) {
|
||||
ArrayConstructorStubAheadOfTimeHelper<ArrayNoArgumentConstructorStub>(
|
||||
isolate);
|
||||
ArrayConstructorStubAheadOfTimeHelper<ArraySingleArgumentConstructorStub>(
|
||||
isolate);
|
||||
|
||||
ElementsKind kinds[2] = {PACKED_ELEMENTS, HOLEY_ELEMENTS};
|
||||
for (int i = 0; i < 2; i++) {
|
||||
// For internal arrays we only need a few things
|
||||
InternalArrayNoArgumentConstructorStub stubh1(isolate, kinds[i]);
|
||||
stubh1.GetCode();
|
||||
InternalArraySingleArgumentConstructorStub stubh2(isolate, kinds[i]);
|
||||
stubh2.GetCode();
|
||||
}
|
||||
}
|
||||
|
||||
static int Offset(ExternalReference ref0, ExternalReference ref1) {
|
||||
int64_t offset = (ref0.address() - ref1.address());
|
||||
// Check that fits into int.
|
||||
|
Loading…
Reference in New Issue
Block a user