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

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

Issue 8041035: Tighten up assertions checking GC-safety of stub calls. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 9 years, 3 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
Index: src/ia32/code-stubs-ia32.cc
diff --git a/src/ia32/code-stubs-ia32.cc b/src/ia32/code-stubs-ia32.cc
index c74d3ecef4bcd794f338c17dc7edc29a9ca1400d..d328aa82abc7432b7933e820fd1667a6fcb792a3 100644
--- a/src/ia32/code-stubs-ia32.cc
+++ b/src/ia32/code-stubs-ia32.cc
@@ -986,6 +986,9 @@ void BinaryOpStub::GenerateTypeTransitionWithSavedArgs(MacroAssembler* masm) {
void BinaryOpStub::Generate(MacroAssembler* masm) {
+ // Explicitly allow generation of nested stubs. It is safe here.
+ AllowStubCallsScope allow_stub_calls(masm, true);
+
switch (operands_type_) {
case BinaryOpIC::UNINITIALIZED:
GenerateTypeTransition(masm);
@@ -4333,13 +4336,16 @@ bool CEntryStub::NeedsImmovableCode() {
}
-bool CEntryStub::CompilingCallsToThisStubIsGCSafe() {
+bool CEntryStub::IsPregenerated() {
return (!save_doubles_ || ISOLATE->fp_stubs_generated()) &&
result_size_ == 1;
}
void CodeStub::GenerateStubsAheadOfTime() {
+ StoreBufferOverflowStub::GenerateFixedRegStubsAheadOfTime();
+ // It is important that the store buffer overflow stubs are generated first.
+ RecordWriteStub::GenerateFixedRegStubsAheadOfTime();
}
@@ -6589,6 +6595,7 @@ struct AheadOfTimeWriteBarrierStubList kAheadOfTime[] = {
{ ebx, eax, edi, EMIT_REMEMBERED_SET },
// Used in CompileArrayPushCall.
{ ebx, ecx, edx, EMIT_REMEMBERED_SET },
+ // { ebx, edi, edx, EMIT_REMEMBERED_SET },
Erik Corry 2011/09/26 22:47:26 Commented code
// Used in CompileStoreGlobal.
{ ebx, ecx, edx, OMIT_REMEMBERED_SET },
// Used in StoreStubCompiler::CompileStoreField and
@@ -6608,7 +6615,7 @@ struct AheadOfTimeWriteBarrierStubList kAheadOfTime[] = {
};
-bool RecordWriteStub::CompilingCallsToThisStubIsGCSafe() {
+bool RecordWriteStub::IsPregenerated() {
for (AheadOfTimeWriteBarrierStubList* entry = kAheadOfTime;
!entry->object.is(no_reg);
entry++) {
@@ -6627,8 +6634,12 @@ bool RecordWriteStub::CompilingCallsToThisStubIsGCSafe() {
void StoreBufferOverflowStub::GenerateFixedRegStubsAheadOfTime() {
StoreBufferOverflowStub stub1(kDontSaveFPRegs);
stub1.GetCode();
- StoreBufferOverflowStub stub2(kSaveFPRegs);
- stub2.GetCode();
+
+ CpuFeatures::TryForceFeatureScope scope(SSE2);
+ if (CpuFeatures::IsSupported(SSE2)) {
+ StoreBufferOverflowStub stub2(kSaveFPRegs);
+ stub2.GetCode();
+ }
}

Powered by Google App Engine
This is Rietveld 408576698