OLD | NEW |
---|---|
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 5293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5304 ast_context()->ReturnInstruction(result, expr->id()); | 5304 ast_context()->ReturnInstruction(result, expr->id()); |
5305 return true; | 5305 return true; |
5306 } | 5306 } |
5307 break; | 5307 break; |
5308 case kMathMax: | 5308 case kMathMax: |
5309 case kMathMin: | 5309 case kMathMin: |
5310 if (argument_count == 3 && check_type == RECEIVER_MAP_CHECK) { | 5310 if (argument_count == 3 && check_type == RECEIVER_MAP_CHECK) { |
5311 AddCheckConstantFunction(expr, receiver, receiver_map, true); | 5311 AddCheckConstantFunction(expr, receiver, receiver_map, true); |
5312 HValue* right = Pop(); | 5312 HValue* right = Pop(); |
5313 HValue* left = Pop(); | 5313 HValue* left = Pop(); |
5314 // Do not inline if the return representation is not certain. | 5314 Pop(); // Pop receiver. |
5315 if (!left->representation().Equals(right->representation())) { | 5315 |
5316 Push(left); | 5316 HValue* left_operand = left; |
5317 Push(right); | 5317 HValue* right_operand = right; |
5318 return false; | 5318 |
5319 // If we do not have two integers, we convert to double for comparison. | |
5320 if (!left->representation().IsInteger32() || | |
5321 !right->representation().IsInteger32()) { | |
5322 if (!left->representation().IsDouble()) { | |
5323 HChange* left_convert = new(zone()) HChange( | |
5324 left, Representation::Double(), false, true); | |
fschneider
2012/02/20 12:18:39
Please break like this and comment the boolean par
Yang
2012/02/20 13:14:11
Done.
| |
5325 left_convert->SetFlag(HValue::kBailoutOnMinusZero); | |
5326 left_operand = AddInstruction(left_convert); | |
5327 } | |
5328 if (!right->representation().IsDouble()) { | |
5329 HChange* right_convert = new(zone()) HChange( | |
5330 right, Representation::Double(), false, true); | |
fschneider
2012/02/20 12:18:39
Also here: Short same-line comment for the boolean
Yang
2012/02/20 13:14:11
Done.
| |
5331 right_convert->SetFlag(HValue::kBailoutOnMinusZero); | |
5332 right_operand = AddInstruction(right_convert); | |
5333 } | |
5319 } | 5334 } |
5320 | 5335 |
5321 Pop(); // Pop receiver. | 5336 ASSERT(left_operand->representation().Equals( |
5337 right_operand->representation())); | |
5338 ASSERT(!left_operand->representation().IsTagged()); | |
5339 | |
5322 Token::Value op = (id == kMathMin) ? Token::LT : Token::GT; | 5340 Token::Value op = (id == kMathMin) ? Token::LT : Token::GT; |
5323 HCompareIDAndBranch* compare = NULL; | |
5324 | 5341 |
5325 if (left->representation().IsTagged()) { | 5342 HCompareIDAndBranch* compare = |
5326 HChange* left_cvt = | 5343 new(zone()) HCompareIDAndBranch(left_operand, right_operand, op); |
5327 new(zone()) HChange(left, Representation::Double(), false, true); | 5344 compare->SetInputRepresentation(left_operand->representation()); |
5328 left_cvt->SetFlag(HValue::kBailoutOnMinusZero); | |
5329 AddInstruction(left_cvt); | |
5330 HChange* right_cvt = | |
5331 new(zone()) HChange(right, Representation::Double(), false, true); | |
5332 right_cvt->SetFlag(HValue::kBailoutOnMinusZero); | |
5333 AddInstruction(right_cvt); | |
5334 compare = new(zone()) HCompareIDAndBranch(left_cvt, right_cvt, op); | |
5335 compare->SetInputRepresentation(Representation::Double()); | |
5336 } else { | |
5337 compare = new(zone()) HCompareIDAndBranch(left, right, op); | |
5338 compare->SetInputRepresentation(left->representation()); | |
5339 } | |
5340 | 5345 |
5341 HBasicBlock* return_left = graph()->CreateBasicBlock(); | 5346 HBasicBlock* return_left = graph()->CreateBasicBlock(); |
5342 HBasicBlock* return_right = graph()->CreateBasicBlock(); | 5347 HBasicBlock* return_right = graph()->CreateBasicBlock(); |
5343 | 5348 |
5344 compare->SetSuccessorAt(0, return_left); | 5349 compare->SetSuccessorAt(0, return_left); |
5345 compare->SetSuccessorAt(1, return_right); | 5350 compare->SetSuccessorAt(1, return_right); |
5346 current_block()->Finish(compare); | 5351 current_block()->Finish(compare); |
5347 | 5352 |
5348 set_current_block(return_left); | 5353 set_current_block(return_left); |
5349 Push(left); | 5354 Push(left); |
(...skipping 2278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
7628 } | 7633 } |
7629 } | 7634 } |
7630 | 7635 |
7631 #ifdef DEBUG | 7636 #ifdef DEBUG |
7632 if (graph_ != NULL) graph_->Verify(false); // No full verify. | 7637 if (graph_ != NULL) graph_->Verify(false); // No full verify. |
7633 if (allocator_ != NULL) allocator_->Verify(); | 7638 if (allocator_ != NULL) allocator_->Verify(); |
7634 #endif | 7639 #endif |
7635 } | 7640 } |
7636 | 7641 |
7637 } } // namespace v8::internal | 7642 } } // namespace v8::internal |
OLD | NEW |