OLD | NEW |
1 // Copyright 2006-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2009 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 800 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
811 | 811 |
812 | 812 |
813 void DeferredInlineBinaryOperation::Generate() { | 813 void DeferredInlineBinaryOperation::Generate() { |
814 GenericBinaryOpStub stub(op_, mode_, NO_SMI_CODE_IN_STUB); | 814 GenericBinaryOpStub stub(op_, mode_, NO_SMI_CODE_IN_STUB); |
815 stub.GenerateCall(masm_, left_, right_); | 815 stub.GenerateCall(masm_, left_, right_); |
816 if (!dst_.is(eax)) __ mov(dst_, eax); | 816 if (!dst_.is(eax)) __ mov(dst_, eax); |
817 } | 817 } |
818 | 818 |
819 | 819 |
820 void CodeGenerator::GenericBinaryOperation(Token::Value op, | 820 void CodeGenerator::GenericBinaryOperation(Token::Value op, |
821 SmiAnalysis* type, | 821 StaticType* type, |
822 OverwriteMode overwrite_mode) { | 822 OverwriteMode overwrite_mode) { |
823 Comment cmnt(masm_, "[ BinaryOperation"); | 823 Comment cmnt(masm_, "[ BinaryOperation"); |
824 Comment cmnt_token(masm_, Token::String(op)); | 824 Comment cmnt_token(masm_, Token::String(op)); |
825 | 825 |
826 if (op == Token::COMMA) { | 826 if (op == Token::COMMA) { |
827 // Simply discard left value. | 827 // Simply discard left value. |
828 frame_->Nip(1); | 828 frame_->Nip(1); |
829 return; | 829 return; |
830 } | 830 } |
831 | 831 |
(...skipping 660 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1492 __ add(Operand(dst_), Immediate(value_)); | 1492 __ add(Operand(dst_), Immediate(value_)); |
1493 GenericBinaryOpStub igostub(Token::SUB, overwrite_mode_, NO_SMI_CODE_IN_STUB); | 1493 GenericBinaryOpStub igostub(Token::SUB, overwrite_mode_, NO_SMI_CODE_IN_STUB); |
1494 igostub.GenerateCall(masm_, dst_, value_); | 1494 igostub.GenerateCall(masm_, dst_, value_); |
1495 if (!dst_.is(eax)) __ mov(dst_, eax); | 1495 if (!dst_.is(eax)) __ mov(dst_, eax); |
1496 } | 1496 } |
1497 | 1497 |
1498 | 1498 |
1499 void CodeGenerator::ConstantSmiBinaryOperation(Token::Value op, | 1499 void CodeGenerator::ConstantSmiBinaryOperation(Token::Value op, |
1500 Result* operand, | 1500 Result* operand, |
1501 Handle<Object> value, | 1501 Handle<Object> value, |
1502 SmiAnalysis* type, | 1502 StaticType* type, |
1503 bool reversed, | 1503 bool reversed, |
1504 OverwriteMode overwrite_mode) { | 1504 OverwriteMode overwrite_mode) { |
1505 // NOTE: This is an attempt to inline (a bit) more of the code for | 1505 // NOTE: This is an attempt to inline (a bit) more of the code for |
1506 // some possible smi operations (like + and -) when (at least) one | 1506 // some possible smi operations (like + and -) when (at least) one |
1507 // of the operands is a constant smi. | 1507 // of the operands is a constant smi. |
1508 // Consumes the argument "operand". | 1508 // Consumes the argument "operand". |
1509 | 1509 |
1510 // TODO(199): Optimize some special cases of operations involving a | 1510 // TODO(199): Optimize some special cases of operations involving a |
1511 // smi literal (multiply by 2, shift by 0, etc.). | 1511 // smi literal (multiply by 2, shift by 0, etc.). |
1512 if (IsUnsafeSmi(value)) { | 1512 if (IsUnsafeSmi(value)) { |
(...skipping 4926 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6439 break; | 6439 break; |
6440 } | 6440 } |
6441 | 6441 |
6442 case KEYED: { | 6442 case KEYED: { |
6443 Comment cmnt(masm, "[ Store to keyed Property"); | 6443 Comment cmnt(masm, "[ Store to keyed Property"); |
6444 | 6444 |
6445 // Generate inlined version of the keyed store if the code is in | 6445 // Generate inlined version of the keyed store if the code is in |
6446 // a loop and the key is likely to be a smi. | 6446 // a loop and the key is likely to be a smi. |
6447 Property* property = expression()->AsProperty(); | 6447 Property* property = expression()->AsProperty(); |
6448 ASSERT(property != NULL); | 6448 ASSERT(property != NULL); |
6449 SmiAnalysis* key_smi_analysis = property->key()->type(); | 6449 StaticType* key_smi_analysis = property->key()->type(); |
6450 | 6450 |
6451 if (cgen_->loop_nesting() > 0 && key_smi_analysis->IsLikelySmi()) { | 6451 if (cgen_->loop_nesting() > 0 && key_smi_analysis->IsLikelySmi()) { |
6452 Comment cmnt(masm, "[ Inlined store to keyed Property"); | 6452 Comment cmnt(masm, "[ Inlined store to keyed Property"); |
6453 | 6453 |
6454 // Get the receiver, key and value into registers. | 6454 // Get the receiver, key and value into registers. |
6455 Result value = cgen_->frame()->Pop(); | 6455 Result value = cgen_->frame()->Pop(); |
6456 Result key = cgen_->frame()->Pop(); | 6456 Result key = cgen_->frame()->Pop(); |
6457 Result receiver = cgen_->frame()->Pop(); | 6457 Result receiver = cgen_->frame()->Pop(); |
6458 | 6458 |
6459 Result tmp = cgen_->allocator_->Allocate(); | 6459 Result tmp = cgen_->allocator_->Allocate(); |
(...skipping 2051 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8511 __ add(Operand(dest), Immediate(2)); | 8511 __ add(Operand(dest), Immediate(2)); |
8512 } | 8512 } |
8513 __ sub(Operand(count), Immediate(1)); | 8513 __ sub(Operand(count), Immediate(1)); |
8514 __ j(not_zero, &loop); | 8514 __ j(not_zero, &loop); |
8515 } | 8515 } |
8516 | 8516 |
8517 | 8517 |
8518 #undef __ | 8518 #undef __ |
8519 | 8519 |
8520 } } // namespace v8::internal | 8520 } } // namespace v8::internal |
OLD | NEW |