summaryrefslogtreecommitdiffstats
path: root/src/arm/codegen-arm.cc
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2011-03-16 11:13:32 +0000
committerBen Murdoch <benm@google.com>2011-03-16 11:13:32 +0000
commitdf5bff59602802b769e994b0dc1d8869a27fa40c (patch)
tree577f26329c35b6a079af4925e862aea242bee6c7 /src/arm/codegen-arm.cc
parent8c569c4a1286b419597940890e04517bc59eefcd (diff)
downloadandroid_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.cc8
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;