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 4736 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4747 NilValue nil) { | 4747 NilValue nil) { |
4748 Label materialize_true, materialize_false; | 4748 Label materialize_true, materialize_false; |
4749 Label* if_true = NULL; | 4749 Label* if_true = NULL; |
4750 Label* if_false = NULL; | 4750 Label* if_false = NULL; |
4751 Label* fall_through = NULL; | 4751 Label* fall_through = NULL; |
4752 context()->PrepareTest(&materialize_true, &materialize_false, | 4752 context()->PrepareTest(&materialize_true, &materialize_false, |
4753 &if_true, &if_false, &fall_through); | 4753 &if_true, &if_false, &fall_through); |
4754 | 4754 |
4755 VisitForAccumulatorValue(sub_expr); | 4755 VisitForAccumulatorValue(sub_expr); |
4756 PrepareForBailoutBeforeSplit(expr, true, if_true, if_false); | 4756 PrepareForBailoutBeforeSplit(expr, true, if_true, if_false); |
4757 EqualityKind kind = expr->op() == Token::EQ_STRICT | 4757 if (expr->op() == Token::EQ_STRICT) { |
4758 ? kStrictEquality : kNonStrictEquality; | |
4759 if (kind == kStrictEquality) { | |
4760 Heap::RootListIndex nil_value = nil == kNullValue ? | 4758 Heap::RootListIndex nil_value = nil == kNullValue ? |
4761 Heap::kNullValueRootIndex : | 4759 Heap::kNullValueRootIndex : |
4762 Heap::kUndefinedValueRootIndex; | 4760 Heap::kUndefinedValueRootIndex; |
4763 __ CompareRoot(rax, nil_value); | 4761 __ CompareRoot(rax, nil_value); |
4764 Split(equal, if_true, if_false, fall_through); | 4762 Split(equal, if_true, if_false, fall_through); |
4765 } else { | 4763 } else { |
4766 Handle<Code> ic = CompareNilICStub::GetUninitialized(isolate(), | 4764 Handle<Code> ic = CompareNilICStub::GetUninitialized(isolate(), nil); |
4767 kNonStrictEquality, | |
4768 nil); | |
4769 CallIC(ic, RelocInfo::CODE_TARGET, expr->CompareOperationFeedbackId()); | 4765 CallIC(ic, RelocInfo::CODE_TARGET, expr->CompareOperationFeedbackId()); |
4770 __ testq(rax, rax); | 4766 __ testq(rax, rax); |
4771 Split(not_zero, if_true, if_false, fall_through); | 4767 Split(not_zero, if_true, if_false, fall_through); |
4772 } | 4768 } |
4773 context()->Plug(if_true, if_false); | 4769 context()->Plug(if_true, if_false); |
4774 } | 4770 } |
4775 | 4771 |
4776 | 4772 |
4777 void FullCodeGenerator::VisitThisFunction(ThisFunction* expr) { | 4773 void FullCodeGenerator::VisitThisFunction(ThisFunction* expr) { |
4778 __ movq(rax, Operand(rbp, JavaScriptFrameConstants::kFunctionOffset)); | 4774 __ movq(rax, Operand(rbp, JavaScriptFrameConstants::kFunctionOffset)); |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4916 *context_length = 0; | 4912 *context_length = 0; |
4917 return previous_; | 4913 return previous_; |
4918 } | 4914 } |
4919 | 4915 |
4920 | 4916 |
4921 #undef __ | 4917 #undef __ |
4922 | 4918 |
4923 } } // namespace v8::internal | 4919 } } // namespace v8::internal |
4924 | 4920 |
4925 #endif // V8_TARGET_ARCH_X64 | 4921 #endif // V8_TARGET_ARCH_X64 |
OLD | NEW |