From a86e0b77085c81f16aa6e3d389c7e71a185bb58e Mon Sep 17 00:00:00 2001 From: "danno@chromium.org" Date: Mon, 23 May 2011 11:40:36 +0000 Subject: [PATCH] Add missing SMI checks to fix reliability bots R=ager@chromium.org BUG=none TEST=none Review URL: http://codereview.chromium.org/6974008 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@7989 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/arm/stub-cache-arm.cc | 8 ++++++++ src/ia32/stub-cache-ia32.cc | 8 ++++++++ src/x64/stub-cache-x64.cc | 8 ++++++++ 3 files changed, 24 insertions(+) diff --git a/src/arm/stub-cache-arm.cc b/src/arm/stub-cache-arm.cc index db681936b..fea4fa5aa 100644 --- a/src/arm/stub-cache-arm.cc +++ b/src/arm/stub-cache-arm.cc @@ -3098,6 +3098,9 @@ MaybeObject* KeyedLoadStubCompiler::CompileLoadFastElement(Map* receiver_map) { // -- r0 : key // -- r1 : receiver // ----------------------------------- + Label miss; + __ JumpIfSmi(r1, &miss); + MaybeObject* maybe_stub = KeyedLoadFastElementStub().TryGetCode(); Code* stub; if (!maybe_stub->To(&stub)) return maybe_stub; @@ -3107,6 +3110,7 @@ MaybeObject* KeyedLoadStubCompiler::CompileLoadFastElement(Map* receiver_map) { Handle(stub), DO_SMI_CHECK); + __ bind(&miss); Handle ic = isolate()->builtins()->KeyedLoadIC_Miss(); __ Jump(ic, RelocInfo::CODE_TARGET); @@ -3192,6 +3196,9 @@ MaybeObject* KeyedStoreStubCompiler::CompileStoreFastElement( // -- lr : return address // -- r3 : scratch // ----------------------------------- + Label miss; + __ JumpIfSmi(r1, &miss); + bool is_js_array = receiver_map->instance_type() == JS_ARRAY_TYPE; MaybeObject* maybe_stub = KeyedStoreFastElementStub(is_js_array).TryGetCode(); @@ -3203,6 +3210,7 @@ MaybeObject* KeyedStoreStubCompiler::CompileStoreFastElement( Handle(stub), DO_SMI_CHECK); + __ bind(&miss); Handle ic = isolate()->builtins()->KeyedStoreIC_Miss(); __ Jump(ic, RelocInfo::CODE_TARGET); diff --git a/src/ia32/stub-cache-ia32.cc b/src/ia32/stub-cache-ia32.cc index c9c22d200..d5c432af8 100644 --- a/src/ia32/stub-cache-ia32.cc +++ b/src/ia32/stub-cache-ia32.cc @@ -2671,6 +2671,9 @@ MaybeObject* KeyedStoreStubCompiler::CompileStoreFastElement( // -- edx : receiver // -- esp[0] : return address // ----------------------------------- + Label miss; + __ JumpIfSmi(edx, &miss); + bool is_js_array = receiver_map->instance_type() == JS_ARRAY_TYPE; MaybeObject* maybe_stub = KeyedStoreFastElementStub(is_js_array).TryGetCode(); @@ -2681,6 +2684,7 @@ MaybeObject* KeyedStoreStubCompiler::CompileStoreFastElement( Handle(stub), DO_SMI_CHECK); + __ bind(&miss); Handle ic = isolate()->builtins()->KeyedStoreIC_Miss(); __ jmp(ic, RelocInfo::CODE_TARGET); @@ -3133,6 +3137,9 @@ MaybeObject* KeyedLoadStubCompiler::CompileLoadFastElement(Map* receiver_map) { // -- edx : receiver // -- esp[0] : return address // ----------------------------------- + Label miss; + __ JumpIfSmi(edx, &miss); + MaybeObject* maybe_stub = KeyedLoadFastElementStub().TryGetCode(); Code* stub; if (!maybe_stub->To(&stub)) return maybe_stub; @@ -3141,6 +3148,7 @@ MaybeObject* KeyedLoadStubCompiler::CompileLoadFastElement(Map* receiver_map) { Handle(stub), DO_SMI_CHECK); + __ bind(&miss); GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); // Return the generated code. diff --git a/src/x64/stub-cache-x64.cc b/src/x64/stub-cache-x64.cc index 143d8d869..71ea4ee34 100644 --- a/src/x64/stub-cache-x64.cc +++ b/src/x64/stub-cache-x64.cc @@ -2501,6 +2501,9 @@ MaybeObject* KeyedStoreStubCompiler::CompileStoreFastElement( // -- rdx : receiver // -- rsp[0] : return address // ----------------------------------- + Label miss; + __ JumpIfSmi(rdx, &miss); + bool is_js_array = receiver_map->instance_type() == JS_ARRAY_TYPE; MaybeObject* maybe_stub = KeyedStoreFastElementStub(is_js_array).TryGetCode(); @@ -2511,6 +2514,7 @@ MaybeObject* KeyedStoreStubCompiler::CompileStoreFastElement( Handle(stub), DO_SMI_CHECK); + __ bind(&miss); Handle ic = isolate()->builtins()->KeyedStoreIC_Miss(); __ jmp(ic, RelocInfo::CODE_TARGET); @@ -2959,6 +2963,9 @@ MaybeObject* KeyedLoadStubCompiler::CompileLoadFastElement(Map* receiver_map) { // -- rdx : receiver // -- rsp[0] : return address // ----------------------------------- + Label miss; + __ JumpIfSmi(rdx, &miss); + MaybeObject* maybe_stub = KeyedLoadFastElementStub().TryGetCode(); Code* stub; if (!maybe_stub->To(&stub)) return maybe_stub; @@ -2967,6 +2974,7 @@ MaybeObject* KeyedLoadStubCompiler::CompileLoadFastElement(Map* receiver_map) { Handle(stub), DO_SMI_CHECK); + __ bind(&miss); Handle ic = isolate()->builtins()->KeyedLoadIC_Miss(); __ jmp(ic, RelocInfo::CODE_TARGET); -- 2.34.1