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

Side by Side Diff: src/ia32/stub-cache-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 | « src/ia32/codegen-ia32.cc ('k') | src/x64/codegen-x64.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 1882 matching lines...) Expand 10 before | Expand all | Expand 10 after
1893 __ mov(edi, Factory::undefined_value()); 1893 __ mov(edi, Factory::undefined_value());
1894 1894
1895 // eax: argc 1895 // eax: argc
1896 // ecx: first argument 1896 // ecx: first argument
1897 // edx: first in-object property of the JSObject 1897 // edx: first in-object property of the JSObject
1898 // edi: undefined 1898 // edi: undefined
1899 // Fill the initialized properties with a constant value or a passed argument 1899 // Fill the initialized properties with a constant value or a passed argument
1900 // depending on the this.x = ...; assignment in the function. 1900 // depending on the this.x = ...; assignment in the function.
1901 for (int i = 0; i < shared->this_property_assignments_count(); i++) { 1901 for (int i = 0; i < shared->this_property_assignments_count(); i++) {
1902 if (shared->IsThisPropertyAssignmentArgument(i)) { 1902 if (shared->IsThisPropertyAssignmentArgument(i)) {
1903 Label not_passed;
1904 // Set the property to undefined.
1905 __ mov(Operand(edx, i * kPointerSize), edi);
1906 // Check if the argument assigned to the property is actually passed. 1903 // Check if the argument assigned to the property is actually passed.
1904 // If argument is not passed the property is set to undefined,
1905 // otherwise find it on the stack.
1907 int arg_number = shared->GetThisPropertyAssignmentArgument(i); 1906 int arg_number = shared->GetThisPropertyAssignmentArgument(i);
1907 __ mov(ebx, edi);
1908 __ cmp(eax, arg_number); 1908 __ cmp(eax, arg_number);
1909 __ j(below_equal, &not_passed); 1909 if (CpuFeatures::IsSupported(CMOV)) {
1910 // Argument passed - find it on the stack. 1910 CpuFeatures::Scope use_cmov(CMOV);
1911 __ mov(ebx, Operand(ecx, arg_number * -kPointerSize)); 1911 __ cmov(above, ebx, Operand(ecx, arg_number * -kPointerSize));
1912 } else {
1913 Label not_passed;
1914 __ j(below_equal, &not_passed);
1915 __ mov(ebx, Operand(ecx, arg_number * -kPointerSize));
1916 __ bind(&not_passed);
1917 }
1918 // Store value in the property.
1912 __ mov(Operand(edx, i * kPointerSize), ebx); 1919 __ mov(Operand(edx, i * kPointerSize), ebx);
1913 __ bind(&not_passed);
1914 } else { 1920 } else {
1915 // Set the property to the constant value. 1921 // Set the property to the constant value.
1916 Handle<Object> constant(shared->GetThisPropertyAssignmentConstant(i)); 1922 Handle<Object> constant(shared->GetThisPropertyAssignmentConstant(i));
1917 __ mov(Operand(edx, i * kPointerSize), Immediate(constant)); 1923 __ mov(Operand(edx, i * kPointerSize), Immediate(constant));
1918 } 1924 }
1919 } 1925 }
1920 1926
1921 // Fill the unused in-object property fields with undefined. 1927 // Fill the unused in-object property fields with undefined.
1922 for (int i = shared->this_property_assignments_count(); 1928 for (int i = shared->this_property_assignments_count();
1923 i < shared->CalculateInObjectProperties(); 1929 i < shared->CalculateInObjectProperties();
(...skipping 22 matching lines...) Expand all
1946 __ jmp(generic_construct_stub, RelocInfo::CODE_TARGET); 1952 __ jmp(generic_construct_stub, RelocInfo::CODE_TARGET);
1947 1953
1948 // Return the generated code. 1954 // Return the generated code.
1949 return GetCode(); 1955 return GetCode();
1950 } 1956 }
1951 1957
1952 1958
1953 #undef __ 1959 #undef __
1954 1960
1955 } } // namespace v8::internal 1961 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/ia32/codegen-ia32.cc ('k') | src/x64/codegen-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698