Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Unified Diff: src/a64/code-stubs-a64.cc

Issue 136643008: A64: Synchronize with r18256. (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/a64
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/a64/code-stubs-a64.h ('k') | src/a64/codegen-a64.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/a64/code-stubs-a64.cc
diff --git a/src/a64/code-stubs-a64.cc b/src/a64/code-stubs-a64.cc
index 800925691107bc1cf25139c0e375ddc2ab1a05c0..f7604b0df4aaaef665adc74e437556772ca0226b 100644
--- a/src/a64/code-stubs-a64.cc
+++ b/src/a64/code-stubs-a64.cc
@@ -217,7 +217,7 @@ void CompareNilICStub::InitializeInterfaceDescriptor(
}
-void BinaryOpStub::InitializeInterfaceDescriptor(
+void BinaryOpICStub::InitializeInterfaceDescriptor(
Isolate* isolate,
CodeStubInterfaceDescriptor* descriptor) {
// x1: left operand
@@ -1026,9 +1026,9 @@ void StoreBufferOverflowStub::Generate(MacroAssembler* masm) {
void StoreBufferOverflowStub::GenerateFixedRegStubsAheadOfTime(
Isolate* isolate) {
StoreBufferOverflowStub stub1(kDontSaveFPRegs);
- stub1.GetCode(isolate)->set_is_pregenerated(true);
+ stub1.GetCode(isolate);
StoreBufferOverflowStub stub2(kSaveFPRegs);
- stub2.GetCode(isolate)->set_is_pregenerated(true);
+ stub2.GetCode(isolate);
}
@@ -1230,12 +1230,6 @@ ExternalReference TranscendentalCacheStub::CFunction(Isolate* isolate) {
// There's no NULL ExternalReference, so fall into an existing case to
// avoid compiler warnings about not having a return value.
UNIMPLEMENTED();
- case TranscendentalCache::SIN:
- return ExternalReference::math_sin_double_function(isolate);
- case TranscendentalCache::COS:
- return ExternalReference::math_cos_double_function(isolate);
- case TranscendentalCache::TAN:
- return ExternalReference::math_tan_double_function(isolate);
case TranscendentalCache::LOG:
return ExternalReference::math_log_double_function(isolate);
}
@@ -1245,9 +1239,6 @@ ExternalReference TranscendentalCacheStub::CFunction(Isolate* isolate) {
Runtime::FunctionId TranscendentalCacheStub::RuntimeFunction() {
switch (type_) {
// Add more cases when necessary.
- case TranscendentalCache::SIN: return Runtime::kMath_sin;
- case TranscendentalCache::COS: return Runtime::kMath_cos;
- case TranscendentalCache::TAN: return Runtime::kMath_tan;
case TranscendentalCache::LOG: return Runtime::kMath_log;
default:
UNIMPLEMENTED();
@@ -1516,10 +1507,9 @@ void CodeStub::GenerateStubsAheadOfTime(Isolate* isolate) {
CEntryStub::GenerateAheadOfTime(isolate);
StoreBufferOverflowStub::GenerateFixedRegStubsAheadOfTime(isolate);
StubFailureTrampolineStub::GenerateAheadOfTime(isolate);
- RecordWriteStub::GenerateFixedRegStubsAheadOfTime(isolate);
ArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate);
CreateAllocationSiteStub::GenerateAheadOfTime(isolate);
- BinaryOpStub::GenerateAheadOfTime(isolate);
+ BinaryOpICStub::GenerateAheadOfTime(isolate);
}
@@ -1555,17 +1545,11 @@ bool CEntryStub::NeedsImmovableCode() {
}
-bool CEntryStub::IsPregenerated(Isolate* isolate) {
- USE(isolate);
- return result_size_ == 1;
-}
-
-
void CEntryStub::GenerateAheadOfTime(Isolate* isolate) {
CEntryStub stub(1, kDontSaveFPRegs);
- stub.GetCode(isolate)->set_is_pregenerated(true);
+ stub.GetCode(isolate);
CEntryStub stub_fp(1, kSaveFPRegs);
- stub_fp.GetCode(isolate)->set_is_pregenerated(true);
+ stub_fp.GetCode(isolate);
}
@@ -4995,8 +4979,7 @@ void StringAddStub::Generate(MacroAssembler* masm) {
kLRHasNotBeenSaved,
kDontSaveFPRegs,
EMIT_REMEMBERED_SET,
- INLINE_SMI_CHECK,
- EXPECT_PREGENERATED);
+ INLINE_SMI_CHECK);
__ Str(right, FieldMemOperand(result, ConsString::kSecondOffset));
__ RecordWriteField(result,
ConsString::kSecondOffset,
@@ -5005,8 +4988,7 @@ void StringAddStub::Generate(MacroAssembler* masm) {
kLRHasNotBeenSaved,
kDontSaveFPRegs,
EMIT_REMEMBERED_SET,
- INLINE_SMI_CHECK,
- EXPECT_PREGENERATED);
+ INLINE_SMI_CHECK);
__ B(&after_writing);
__ Bind(&skip_write_barrier);
@@ -5180,74 +5162,6 @@ void StringAddStub::GenerateRegisterArgsPop(MacroAssembler* masm) {
__ Pop(x1, x0);
}
-#define MINOR_KEY_FOR(obj, value, addr, action, fp_mode) \
- ((obj) | ((value) << 5) | ((addr) << 10) | ((action) << 15) | \
- ((fp_mode) << 16))
-
-const int RecordWriteStub::kAheadOfTime[] = {
- // Arguments to MinorKeyFor() are object, value and address registers.
-
- // Used in StoreArrayLiteralElementStub::Generate.
- MINOR_KEY_FOR(10, 0, 11, EMIT_REMEMBERED_SET, kDontSaveFPRegs),
-
- // Used in FastNewClosure::Generate.
- MINOR_KEY_FOR(5, 4, 1, EMIT_REMEMBERED_SET, kDontSaveFPRegs),
-
- // Used in KeyedStoreStubCompiler::GenerateStoreFastElement.
- MINOR_KEY_FOR(3, 2, 10, EMIT_REMEMBERED_SET, kDontSaveFPRegs),
-
- // Used in KeyedStoreStubCompiler::GenerateStoreFastDoubleElement.
- MINOR_KEY_FOR(2, 3, 10, EMIT_REMEMBERED_SET, kDontSaveFPRegs),
-
- // Used in ElementsTransitionGenerator::GenerateSmiToDouble.
- MINOR_KEY_FOR(2, 3, 6, OMIT_REMEMBERED_SET, kDontSaveFPRegs),
- MINOR_KEY_FOR(2, 10, 6, EMIT_REMEMBERED_SET, kDontSaveFPRegs),
-
- // Used in ElementsTransitionGenerator::GenerateDoubleToObject.
- MINOR_KEY_FOR(7, 5, 13, EMIT_REMEMBERED_SET, kDontSaveFPRegs),
- MINOR_KEY_FOR(2, 7, 13, EMIT_REMEMBERED_SET, kDontSaveFPRegs),
- MINOR_KEY_FOR(2, 3, 13, OMIT_REMEMBERED_SET, kDontSaveFPRegs),
-
- // Used in KeyedStoreIC::GenerateGeneric helper function.
- MINOR_KEY_FOR(4, 10, 11, EMIT_REMEMBERED_SET, kDontSaveFPRegs),
-
- // Used in RegExpExecStub::Generate.
- MINOR_KEY_FOR(21, 10, 11, EMIT_REMEMBERED_SET, kDontSaveFPRegs),
-
- // Used in StringAddStub::Generate.
- MINOR_KEY_FOR(0, 10, 3, EMIT_REMEMBERED_SET, kDontSaveFPRegs),
- MINOR_KEY_FOR(0, 11, 3, EMIT_REMEMBERED_SET, kDontSaveFPRegs),
-
- // TODO(jbramley): There are many more sites that want a pregenerated
- // instance of this stub, but they are currently unimplemented. Once they are
- // implemented, they should be added to this list.
-
- // Null termination.
- // It is safe to encode this as 0 because the three registers used for
- // RecordWriteStub must not be aliased, and 0 represents (x0, x0, x0).
- 0
-};
-
-
-#undef MINOR_KEY_FOR
-
-
-void RecordWriteStub::GenerateFixedRegStubsAheadOfTime(Isolate* isolate) {
- // Pregenerate all of the stub variants in the kAheadOfTime list.
- for (const int* entry = kAheadOfTime; *entry != 0; entry++) {
- // kAheadOfTime is a list of minor keys, so extract the relevant fields
- // from the minor key.
- Register object = Register::XRegFromCode(ObjectBits::decode(*entry));
- Register value = Register::XRegFromCode(ValueBits::decode(*entry));
- Register address = Register::XRegFromCode(AddressBits::decode(*entry));
- RememberedSetAction action = RememberedSetActionBits::decode(*entry);
- SaveFPRegsMode fp_mode = SaveFPRegsModeBits::decode(*entry);
-
- RecordWriteStub stub(object, value, address, action, fp_mode);
- stub.GetCode(isolate)->set_is_pregenerated(true);
- }
-}
-
bool CodeStub::CanUseFPRegisters() {
// FP registers always available on A64.
@@ -5255,19 +5169,6 @@ bool CodeStub::CanUseFPRegisters() {
}
-bool RecordWriteStub::IsPregenerated(Isolate* isolate) {
- USE(isolate);
- // If the stub exists in the kAheadOfTime list, it is pregenerated.
- for (const int* entry = kAheadOfTime; *entry != 0; entry++) {
- if (*entry == MinorKeyFor(object_, value_, address_,
- remembered_set_action_, save_fp_regs_mode_)) {
- return true;
- }
- }
- return false;
-}
-
-
void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
// We need some extra registers for this stub, they have been allocated
// but we need to save them before using them.
@@ -5489,7 +5390,7 @@ void StoreArrayLiteralElementStub::Generate(MacroAssembler* masm) {
__ Str(value, MemOperand(x11));
// Update the write barrier for the array store.
__ RecordWrite(x10, x11, value, kLRHasNotBeenSaved, kDontSaveFPRegs,
- EMIT_REMEMBERED_SET, OMIT_SMI_CHECK, EXPECT_PREGENERATED);
+ EMIT_REMEMBERED_SET, OMIT_SMI_CHECK);
__ Ret();
// Array literal has ElementsKind of FAST_*_SMI_ELEMENTS or FAST_*_ELEMENTS,
@@ -5548,7 +5449,6 @@ void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) {
// TODO(all): This needs to be reliably consistent with
// kReturnAddressDistanceFromFunctionStart in ::Generate.
Assembler::BlockConstPoolScope no_const_pools(masm);
- AllowStubCallsScope allow_stub_calls(masm, true);
ProfileEntryHookStub stub;
__ Push(lr);
__ CallStub(&stub);
@@ -6014,12 +5914,12 @@ static void ArrayConstructorStubAheadOfTimeHelper(Isolate* isolate) {
for (int i = 0; i <= to_index; ++i) {
ElementsKind kind = GetFastElementsKindFromSequenceIndex(i);
T stub(kind);
- stub.GetCode(isolate)->set_is_pregenerated(true);
+ stub.GetCode(isolate);
if ((AllocationSite::GetMode(kind) != DONT_TRACK_ALLOCATION_SITE) ||
(!FLAG_track_allocation_sites &&
((kind == initial_kind) || (kind == initial_holey_kind)))) {
T stub1(kind, CONTEXT_CHECK_REQUIRED, DISABLE_ALLOCATION_SITES);
- stub1.GetCode(isolate)->set_is_pregenerated(true);
+ stub1.GetCode(isolate);
}
}
}
@@ -6041,11 +5941,11 @@ void InternalArrayConstructorStubBase::GenerateStubsAheadOfTime(
for (int i = 0; i < 2; i++) {
// For internal arrays we only need a few things
InternalArrayNoArgumentConstructorStub stubh1(kinds[i]);
- stubh1.GetCode(isolate)->set_is_pregenerated(true);
+ stubh1.GetCode(isolate);
InternalArraySingleArgumentConstructorStub stubh2(kinds[i]);
- stubh2.GetCode(isolate)->set_is_pregenerated(true);
+ stubh2.GetCode(isolate);
InternalArrayNArgumentsConstructorStub stubh3(kinds[i]);
- stubh3.GetCode(isolate)->set_is_pregenerated(true);
+ stubh3.GetCode(isolate);
}
}
« no previous file with comments | « src/a64/code-stubs-a64.h ('k') | src/a64/codegen-a64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698