Index: src/codegen.h |
=================================================================== |
--- src/codegen.h (revision 4259) |
+++ src/codegen.h (working copy) |
@@ -346,8 +346,13 @@ |
public: |
CompareStub(Condition cc, |
bool strict, |
- NaNInformation nan_info = kBothCouldBeNaN) : |
- cc_(cc), strict_(strict), never_nan_nan_(nan_info == kCantBothBeNaN) { } |
+ NaNInformation nan_info = kBothCouldBeNaN, |
+ bool include_number_compare = true) : |
+ cc_(cc), |
+ strict_(strict), |
+ never_nan_nan_(nan_info == kCantBothBeNaN), |
+ include_number_compare_(include_number_compare), |
+ name_(NULL) { } |
void Generate(MacroAssembler* masm); |
@@ -360,11 +365,16 @@ |
// generating the minor key for other comparisons to avoid creating more |
// stubs. |
bool never_nan_nan_; |
+ // Do generate the number comparison code in the stub. Stubs without number |
+ // comparison code is used when the number comparison has been inlined, and |
+ // the stub will be called if one of the operands is not a number. |
+ bool include_number_compare_; |
// Encoding of the minor key CCCCCCCCCCCCCCNS. |
class StrictField: public BitField<bool, 0, 1> {}; |
class NeverNanNanField: public BitField<bool, 1, 1> {}; |
- class ConditionField: public BitField<int, 2, 14> {}; |
+ class IncludeNumberCompareField: public BitField<bool, 2, 1> {}; |
+ class ConditionField: public BitField<int, 3, 13> {}; |
Major MajorKey() { return Compare; } |
@@ -378,12 +388,16 @@ |
// 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. |
+ char* name_; |
const char* GetName(); |
#ifdef DEBUG |
void Print() { |
- PrintF("CompareStub (cc %d), (strict %s)\n", |
+ PrintF("CompareStub (cc %d), (strict %s), " |
+ "(never_nan_nan %s), (number_compare %s)\n", |
static_cast<int>(cc_), |
- strict_ ? "true" : "false"); |
+ strict_ ? "true" : "false", |
+ never_nan_nan_ ? "true" : "false", |
+ include_number_compare_ ? "included" : "not included"); |
} |
#endif |
}; |