Index: src/mips/full-codegen-mips.cc |
diff --git a/src/mips/full-codegen-mips.cc b/src/mips/full-codegen-mips.cc |
index 201742efec74a2c7e98d50c030645f794155be42..7adc404b28936d9835a04437905b6b310981cf39 100644 |
--- a/src/mips/full-codegen-mips.cc |
+++ b/src/mips/full-codegen-mips.cc |
@@ -1,4 +1,4 @@ |
-// Copyright 2011 the V8 project authors. All rights reserved. |
+// Copyright 2012 the V8 project authors. All rights reserved. |
// Redistribution and use in source and binary forms, with or without |
// modification, are permitted provided that the following conditions are |
// met: |
@@ -149,6 +149,27 @@ void FullCodeGenerator::Generate(CompilationInfo* info) { |
} |
#endif |
+ // We can optionally optimize based on counters rather than statistical |
+ // sampling. |
+ if (info->ShouldSelfOptimize()) { |
+ if (FLAG_trace_opt) { |
+ PrintF("[adding self-optimization header to %s]\n", |
+ *info->function()->debug_name()->ToCString()); |
+ } |
+ MaybeObject* maybe_cell = isolate()->heap()->AllocateJSGlobalPropertyCell( |
+ Smi::FromInt(Compiler::kCallsUntilPrimitiveOpt)); |
+ JSGlobalPropertyCell* cell; |
+ if (maybe_cell->To(&cell)) { |
+ __ li(a2, Handle<JSGlobalPropertyCell>(cell)); |
+ __ lw(a3, FieldMemOperand(a2, JSGlobalPropertyCell::kValueOffset)); |
+ __ Subu(a3, a3, Operand(Smi::FromInt(1))); |
+ __ sw(a3, FieldMemOperand(a2, JSGlobalPropertyCell::kValueOffset)); |
+ Handle<Code> compile_stub( |
+ isolate()->builtins()->builtin(Builtins::kLazyRecompile)); |
+ __ Jump(compile_stub, RelocInfo::CODE_TARGET, eq, a3, Operand(zero_reg)); |
+ } |
+ } |
+ |
// Strict mode functions and builtins need to replace the receiver |
// with undefined when called as functions (without an explicit |
// receiver object). t1 is zero for method calls and non-zero for |