diff options
author | Ben Murdoch <benm@google.com> | 2011-03-16 11:13:32 +0000 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2011-03-16 11:13:32 +0000 |
commit | df5bff59602802b769e994b0dc1d8869a27fa40c (patch) | |
tree | 577f26329c35b6a079af4925e862aea242bee6c7 /src/arm/codegen-arm.cc | |
parent | 8c569c4a1286b419597940890e04517bc59eefcd (diff) | |
download | android_external_v8-df5bff59602802b769e994b0dc1d8869a27fa40c.tar.gz android_external_v8-df5bff59602802b769e994b0dc1d8869a27fa40c.tar.bz2 android_external_v8-df5bff59602802b769e994b0dc1d8869a27fa40c.zip |
Merge V8 at 2.5.9.20
Pull in the latest V8 for various stability fixes.
Note that this deviates from the Chromium 9.0.597.x branch.
Bug: 3483676
Change-Id: Ic5178f532775218e1c87a71c54995c2820604cb3
Diffstat (limited to 'src/arm/codegen-arm.cc')
-rw-r--r-- | src/arm/codegen-arm.cc | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/arm/codegen-arm.cc b/src/arm/codegen-arm.cc index 79e577bd..469d41f5 100644 --- a/src/arm/codegen-arm.cc +++ b/src/arm/codegen-arm.cc @@ -1150,7 +1150,7 @@ void DeferredInlineSmiOperation::GenerateNonSmiInput() { } // Check that the *signed* result fits in a smi. Not necessary for AND, SAR // if the shift if more than 0 or SHR if the shit is more than 1. - if (!( (op_ == Token::AND) || + if (!( (op_ == Token::AND && value_ >= 0) || ((op_ == Token::SAR) && (shift_value > 0)) || ((op_ == Token::SHR) && (shift_value > 1)))) { __ add(r3, int32, Operand(0x40000000), SetCC); @@ -1411,8 +1411,10 @@ void CodeGenerator::SmiOperation(Token::Value op, default: UNREACHABLE(); } deferred->BindExit(); - TypeInfo result_type = - (op == Token::BIT_AND) ? TypeInfo::Smi() : TypeInfo::Integer32(); + TypeInfo result_type = TypeInfo::Integer32(); + if (op == Token::BIT_AND && int_value >= 0) { + result_type = TypeInfo::Smi(); + } frame_->EmitPush(tos, result_type); } break; |