Reviewers: Vyacheslav Egorov,
Description:
Use static type information on x64 in LikelySmiBinaryOperation
Please review this at http://codereview.chromium.org/2771001/show
SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/
Affected files:
M src/x64/codegen-x64.cc
Index: src/x64/codegen-x64.cc
===================================================================
--- src/x64/codegen-x64.cc (revision 4823)
+++ src/x64/codegen-x64.cc (working copy)
@@ -7142,9 +7142,6 @@
// Copy the type info because left and right may be overwritten.
TypeInfo left_type_info = left->type_info();
TypeInfo right_type_info = right->type_info();
- USE(left_type_info);
- USE(right_type_info);
- // TODO(X64): Use type information in calculations.
Token::Value op = expr->op();
Result answer;
// Special handling of div and mod because they use fixed registers.
@@ -7221,7 +7218,13 @@
left->reg(),
right->reg(),
overwrite_mode);
- __ JumpIfNotBothSmi(left->reg(), right->reg(),
deferred->entry_label());
+ if (!left_type_info.IsSmi() && !right_type_info.IsSmi()) {
+ __ JumpIfNotBothSmi(left->reg(), right->reg(),
deferred->entry_label());
+ } else if (!left_type_info.IsSmi()) {
+ __ JumpIfNotSmi(left->reg(), deferred->entry_label());
+ } else if (!right_type_info.IsSmi()) {
+ __ JumpIfNotSmi(right->reg(), deferred->entry_label());
+ }
if (op == Token::DIV) {
__ SmiDiv(rax, left->reg(), right->reg(), deferred->entry_label());
@@ -7351,7 +7354,13 @@
left->reg(),
right->reg(),
overwrite_mode);
- __ JumpIfNotBothSmi(left->reg(), right->reg(), deferred->entry_label());
+ if (!left_type_info.IsSmi() && !right_type_info.IsSmi()) {
+ __ JumpIfNotBothSmi(left->reg(), right->reg(),
deferred->entry_label());
+ } else if (!left_type_info.IsSmi()) {
+ __ JumpIfNotSmi(left->reg(), deferred->entry_label());
+ } else if (!right_type_info.IsSmi()) {
+ __ JumpIfNotSmi(right->reg(), deferred->entry_label());
+ }
switch (op) {
case Token::ADD:
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev