Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(188)

Side by Side Diff: src/x87/code-stubs-x87.cc

Issue 2612693002: X87: [ic] Use StrictEqual/Equal builtins for CompareIC slow path. (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #if V8_TARGET_ARCH_X87 5 #if V8_TARGET_ARCH_X87
6 6
7 #include "src/code-stubs.h" 7 #include "src/code-stubs.h"
8 #include "src/api-arguments.h" 8 #include "src/api-arguments.h"
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/bootstrapper.h" 10 #include "src/bootstrapper.h"
(...skipping 1029 matching lines...) Expand 10 before | Expand all | Expand 10 after
1040 1040
1041 __ bind(&return_equal); 1041 __ bind(&return_equal);
1042 __ Move(eax, Immediate(EQUAL)); 1042 __ Move(eax, Immediate(EQUAL));
1043 __ ret(0); // eax, edx were pushed 1043 __ ret(0); // eax, edx were pushed
1044 } 1044 }
1045 __ bind(&runtime_call); 1045 __ bind(&runtime_call);
1046 1046
1047 if (cc == equal) { 1047 if (cc == equal) {
1048 { 1048 {
1049 FrameScope scope(masm, StackFrame::INTERNAL); 1049 FrameScope scope(masm, StackFrame::INTERNAL);
1050 __ Push(edx); 1050 __ Push(esi);
1051 __ Push(eax); 1051 __ Call(strict() ? isolate()->builtins()->StrictEqual()
1052 __ CallRuntime(strict() ? Runtime::kStrictEqual : Runtime::kEqual); 1052 : isolate()->builtins()->Equal(),
1053 RelocInfo::CODE_TARGET);
1054 __ Pop(esi);
1053 } 1055 }
1054 // Turn true into 0 and false into some non-zero value. 1056 // Turn true into 0 and false into some non-zero value.
1055 STATIC_ASSERT(EQUAL == 0); 1057 STATIC_ASSERT(EQUAL == 0);
1056 __ sub(eax, Immediate(isolate()->factory()->true_value())); 1058 __ sub(eax, Immediate(isolate()->factory()->true_value()));
1057 __ Ret(); 1059 __ Ret();
1058 } else { 1060 } else {
1059 // Push arguments below the return address. 1061 // Push arguments below the return address.
1060 __ pop(ecx); 1062 __ pop(ecx);
1061 __ push(edx); 1063 __ push(edx);
1062 __ push(eax); 1064 __ push(eax);
(...skipping 2994 matching lines...) Expand 10 before | Expand all | Expand 10 after
4057 kStackUnwindSpace, nullptr, return_value_operand, 4059 kStackUnwindSpace, nullptr, return_value_operand,
4058 NULL); 4060 NULL);
4059 } 4061 }
4060 4062
4061 #undef __ 4063 #undef __
4062 4064
4063 } // namespace internal 4065 } // namespace internal
4064 } // namespace v8 4066 } // namespace v8
4065 4067
4066 #endif // V8_TARGET_ARCH_X87 4068 #endif // V8_TARGET_ARCH_X87
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698