Index: src/ia32/codegen-ia32.cc |
diff --git a/src/ia32/codegen-ia32.cc b/src/ia32/codegen-ia32.cc |
index 0739cb0c6f3b2e54b87764a03b3f45439c0bbd48..c66f5bd6129b4f81df03dc611fb9db55d649b72e 100644 |
--- a/src/ia32/codegen-ia32.cc |
+++ b/src/ia32/codegen-ia32.cc |
@@ -1050,37 +1050,26 @@ void MathExpGenerator::EmitMathExp(MacroAssembler* masm, |
#undef __ |
-static byte* GetNoCodeAgeSequence(uint32_t* length) { |
- static bool initialized = false; |
- static byte sequence[kNoCodeAgeSequenceLength]; |
- *length = kNoCodeAgeSequenceLength; |
- if (!initialized) { |
- // The sequence of instructions that is patched out for aging code is the |
- // following boilerplate stack-building prologue that is found both in |
- // FUNCTION and OPTIMIZED_FUNCTION code: |
- CodePatcher patcher(sequence, kNoCodeAgeSequenceLength); |
- patcher.masm()->push(ebp); |
- patcher.masm()->mov(ebp, esp); |
- patcher.masm()->push(esi); |
- patcher.masm()->push(edi); |
- initialized = true; |
- } |
- return sequence; |
+NoCodeAgeSequence::NoCodeAgeSequence() { |
+ ASSERT(sequence_.length() == kNoCodeAgeSequenceLength); |
+ CodePatcher patcher(sequence_.start(), sequence_.length()); |
+ patcher.masm()->push(ebp); |
+ patcher.masm()->mov(ebp, esp); |
+ patcher.masm()->push(esi); |
+ patcher.masm()->push(edi); |
} |
-bool Code::IsYoungSequence(byte* sequence) { |
- uint32_t young_length; |
- byte* young_sequence = GetNoCodeAgeSequence(&young_length); |
- bool result = (!memcmp(sequence, young_sequence, young_length)); |
+bool Code::IsYoungSequence(Isolate* isolate, byte* sequence) { |
+ bool result = isolate->no_code_age_sequence()->Match(sequence); |
ASSERT(result || *sequence == kCallOpcode); |
return result; |
} |
-void Code::GetCodeAgeAndParity(byte* sequence, Age* age, |
+void Code::GetCodeAgeAndParity(Isolate* isolate, byte* sequence, Age* age, |
MarkingParity* parity) { |
- if (IsYoungSequence(sequence)) { |
+ if (IsYoungSequence(isolate, sequence)) { |
*age = kNoAgeCodeAge; |
*parity = NO_MARKING_PARITY; |
} else { |
@@ -1097,10 +1086,9 @@ void Code::PatchPlatformCodeAge(Isolate* isolate, |
byte* sequence, |
Code::Age age, |
MarkingParity parity) { |
- uint32_t young_length; |
- byte* young_sequence = GetNoCodeAgeSequence(&young_length); |
+ uint32_t young_length = isolate->no_code_age_sequence()->length(); |
if (age == kNoAgeCodeAge) { |
- CopyBytes(sequence, young_sequence, young_length); |
+ isolate->no_code_age_sequence()->CopyTo(sequence); |
CPU::FlushICache(sequence, young_length); |
} else { |
Code* stub = GetCodeAgeStub(isolate, age, parity); |