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

Side by Side Diff: src/ia32/codegen-ia32.cc

Issue 519035: Use cmov instructions to avoid some conditional branches in stub code.... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 10 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | src/ia32/stub-cache-ia32.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 7718 matching lines...) Expand 10 before | Expand all | Expand 10 after
7729 __ InvokeBuiltin(Builtins::BIT_NOT, JUMP_FUNCTION); 7729 __ InvokeBuiltin(Builtins::BIT_NOT, JUMP_FUNCTION);
7730 break; 7730 break;
7731 default: 7731 default:
7732 UNREACHABLE(); 7732 UNREACHABLE();
7733 } 7733 }
7734 } 7734 }
7735 7735
7736 7736
7737 void ArgumentsAccessStub::GenerateReadLength(MacroAssembler* masm) { 7737 void ArgumentsAccessStub::GenerateReadLength(MacroAssembler* masm) {
7738 // Check if the calling frame is an arguments adaptor frame. 7738 // Check if the calling frame is an arguments adaptor frame.
7739 Label adaptor;
7740 __ mov(edx, Operand(ebp, StandardFrameConstants::kCallerFPOffset)); 7739 __ mov(edx, Operand(ebp, StandardFrameConstants::kCallerFPOffset));
7741 __ mov(ecx, Operand(edx, StandardFrameConstants::kContextOffset)); 7740 __ mov(ecx, Operand(edx, StandardFrameConstants::kContextOffset));
7742 __ cmp(Operand(ecx), Immediate(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR))); 7741 __ cmp(Operand(ecx), Immediate(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR)));
7743 __ j(equal, &adaptor);
7744
7745 // Nothing to do: The formal number of parameters has already been
7746 // passed in register eax by calling function. Just return it.
7747 __ ret(0);
7748 7742
7749 // Arguments adaptor case: Read the arguments length from the 7743 // Arguments adaptor case: Read the arguments length from the
7750 // adaptor frame and return it. 7744 // adaptor frame and return it.
7751 __ bind(&adaptor); 7745 // Otherwise nothing to do: The number of formal parameters has already been
7752 __ mov(eax, Operand(edx, ArgumentsAdaptorFrameConstants::kLengthOffset)); 7746 // passed in register eax by calling function. Just return it.
7747 if (CpuFeatures::IsSupported(CMOV)) {
7748 CpuFeatures::Scope use_cmov(CMOV);
7749 __ cmov(equal, eax,
7750 Operand(edx, ArgumentsAdaptorFrameConstants::kLengthOffset));
7751 } else {
7752 Label exit;
7753 __ j(not_equal, &exit);
7754 __ mov(eax, Operand(edx, ArgumentsAdaptorFrameConstants::kLengthOffset));
7755 __ bind(&exit);
7756 }
7753 __ ret(0); 7757 __ ret(0);
7754 } 7758 }
7755 7759
7756 7760
7757 void ArgumentsAccessStub::GenerateReadElement(MacroAssembler* masm) { 7761 void ArgumentsAccessStub::GenerateReadElement(MacroAssembler* masm) {
7758 // The key is in edx and the parameter count is in eax. 7762 // The key is in edx and the parameter count is in eax.
7759 7763
7760 // The displacement is used for skipping the frame pointer on the 7764 // The displacement is used for skipping the frame pointer on the
7761 // stack. It is the offset of the last parameter (if any) relative 7765 // stack. It is the offset of the last parameter (if any) relative
7762 // to the frame pointer. 7766 // to the frame pointer.
(...skipping 1137 matching lines...) Expand 10 before | Expand all | Expand 10 after
8900 __ add(Operand(dest), Immediate(2)); 8904 __ add(Operand(dest), Immediate(2));
8901 } 8905 }
8902 __ sub(Operand(count), Immediate(1)); 8906 __ sub(Operand(count), Immediate(1));
8903 __ j(not_zero, &loop); 8907 __ j(not_zero, &loop);
8904 } 8908 }
8905 8909
8906 8910
8907 #undef __ 8911 #undef __
8908 8912
8909 } } // namespace v8::internal 8913 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « no previous file | src/ia32/stub-cache-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698