Index: src/ia32/codegen-ia32.cc |
=================================================================== |
--- src/ia32/codegen-ia32.cc (revision 5085) |
+++ src/ia32/codegen-ia32.cc (working copy) |
@@ -6437,6 +6437,27 @@ |
} |
+ void CodeGenerator::GenerateIsSpecObject(ZoneList<Expression*>* args) { |
+ // This generates a fast version of: |
+ // (typeof(arg) === 'object' || %_ClassOf(arg) == 'RegExp' || |
+ // typeof(arg) == function). |
+ // It includes undetectable objects (as opposed to IsObject). |
+ ASSERT(args->length() == 1); |
+ Load(args->at(0)); |
+ Result value = frame_->Pop(); |
+ value.ToRegister(); |
+ ASSERT(value.is_valid()); |
+ __ test(value.reg(), Immediate(kSmiTagMask)); |
+ destination()->false_target()->Branch(equal); |
+ |
+ // Check that this is an object. |
+ frame_->Spill(value.reg()); |
+ __ CmpObjectType(value.reg(), FIRST_JS_OBJECT_TYPE, value.reg()); |
+ value.Unuse(); |
+ destination()->Split(above_equal); |
+} |
+ |
+ |
void CodeGenerator::GenerateIsFunction(ZoneList<Expression*>* args) { |
// This generates a fast version of: |
// (%_ClassOf(arg) === 'Function') |