Index: src/arm/codegen-arm.cc |
=================================================================== |
--- src/arm/codegen-arm.cc (revision 4220) |
+++ src/arm/codegen-arm.cc (working copy) |
@@ -7114,44 +7114,47 @@ |
} |
+// Unfortunately you have to run without snapshots to see most of these |
+// names in the profile since most compare stubs end up in the snapshot. |
const char* CompareStub::GetName() { |
+ if (name_ != NULL) return name_; |
+ const int kMaxNameLength = 100; |
+ name_ = Bootstrapper::AllocateAutoDeletedArray(kMaxNameLength); |
+ if (name_ == NULL) return "OOM"; |
+ |
+ const char* cc_name; |
switch (cc_) { |
- case lt: return "CompareStub_LT"; |
- case gt: return "CompareStub_GT"; |
- case le: return "CompareStub_LE"; |
- case ge: return "CompareStub_GE"; |
- case ne: { |
- if (strict_) { |
- if (never_nan_nan_) { |
- return "CompareStub_NE_STRICT_NO_NAN"; |
- } else { |
- return "CompareStub_NE_STRICT"; |
- } |
- } else { |
- if (never_nan_nan_) { |
- return "CompareStub_NE_NO_NAN"; |
- } else { |
- return "CompareStub_NE"; |
- } |
- } |
- } |
- case eq: { |
- if (strict_) { |
- if (never_nan_nan_) { |
- return "CompareStub_EQ_STRICT_NO_NAN"; |
- } else { |
- return "CompareStub_EQ_STRICT"; |
- } |
- } else { |
- if (never_nan_nan_) { |
- return "CompareStub_EQ_NO_NAN"; |
- } else { |
- return "CompareStub_EQ"; |
- } |
- } |
- } |
- default: return "CompareStub"; |
+ case lt: cc_name = "LT"; break; |
+ case gt: cc_name = "GT"; break; |
+ case le: cc_name = "LE"; break; |
+ case ge: cc_name = "GE"; break; |
+ case eq: cc_name = "EQ"; break; |
+ case ne: cc_name = "NE"; break; |
+ default: cc_name = "UnknownCondition"; break; |
} |
+ |
+ const char* strict_name = ""; |
+ if (strict_ && (cc_ == eq || cc_ == ne)) { |
+ strict_name = "_STRICT"; |
+ } |
+ |
+ const char* never_nan_nan_name = ""; |
+ if (never_nan_nan_ && (cc_ == eq || cc_ == ne)) { |
+ never_nan_nan_name = "_NO_NAN"; |
+ } |
+ |
+ const char* include_number_compare_name = ""; |
+ if (!include_number_compare_) { |
+ include_number_compare_name = "_NO_NUMBER"; |
+ } |
+ |
+ OS::SNPrintF(Vector<char>(name_, kMaxNameLength), |
+ "CompareStub_%s%s%s%s", |
+ cc_name, |
+ strict_name, |
+ never_nan_nan_name, |
+ include_number_compare_name); |
+ return name_; |
} |