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

Side by Side Diff: src/x64/builtins-x64.cc

Issue 6723014: Avoid TLS access for counters. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fix lint Created 9 years, 9 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/x64/assembler-x64.cc ('k') | src/x64/code-stubs-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 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 // Restore the arguments count and leave the construct frame. 372 // Restore the arguments count and leave the construct frame.
373 __ bind(&exit); 373 __ bind(&exit);
374 __ movq(rbx, Operand(rsp, kPointerSize)); // get arguments count 374 __ movq(rbx, Operand(rsp, kPointerSize)); // get arguments count
375 __ LeaveConstructFrame(); 375 __ LeaveConstructFrame();
376 376
377 // Remove caller arguments from the stack and return. 377 // Remove caller arguments from the stack and return.
378 __ pop(rcx); 378 __ pop(rcx);
379 SmiIndex index = masm->SmiToIndex(rbx, rbx, kPointerSizeLog2); 379 SmiIndex index = masm->SmiToIndex(rbx, rbx, kPointerSizeLog2);
380 __ lea(rsp, Operand(rsp, index.reg, index.scale, 1 * kPointerSize)); 380 __ lea(rsp, Operand(rsp, index.reg, index.scale, 1 * kPointerSize));
381 __ push(rcx); 381 __ push(rcx);
382 __ IncrementCounter(COUNTERS->constructed_objects(), 1); 382 Counters* counters = masm->isolate()->counters();
383 __ IncrementCounter(counters->constructed_objects(), 1);
383 __ ret(0); 384 __ ret(0);
384 } 385 }
385 386
386 387
387 void Builtins::Generate_JSConstructStubCountdown(MacroAssembler* masm) { 388 void Builtins::Generate_JSConstructStubCountdown(MacroAssembler* masm) {
388 Generate_JSConstructStubHelper(masm, false, true); 389 Generate_JSConstructStubHelper(masm, false, true);
389 } 390 }
390 391
391 392
392 void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) { 393 void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) {
(...skipping 738 matching lines...) Expand 10 before | Expand all | Expand 10 after
1131 1132
1132 // Handle construction of an empty array. 1133 // Handle construction of an empty array.
1133 AllocateEmptyJSArray(masm, 1134 AllocateEmptyJSArray(masm,
1134 rdi, 1135 rdi,
1135 rbx, 1136 rbx,
1136 rcx, 1137 rcx,
1137 rdx, 1138 rdx,
1138 r8, 1139 r8,
1139 kPreallocatedArrayElements, 1140 kPreallocatedArrayElements,
1140 call_generic_code); 1141 call_generic_code);
1141 __ IncrementCounter(COUNTERS->array_function_native(), 1); 1142 Counters* counters = masm->isolate()->counters();
1143 __ IncrementCounter(counters->array_function_native(), 1);
1142 __ movq(rax, rbx); 1144 __ movq(rax, rbx);
1143 __ ret(kPointerSize); 1145 __ ret(kPointerSize);
1144 1146
1145 // Check for one argument. Bail out if argument is not smi or if it is 1147 // Check for one argument. Bail out if argument is not smi or if it is
1146 // negative. 1148 // negative.
1147 __ bind(&argc_one_or_more); 1149 __ bind(&argc_one_or_more);
1148 __ cmpq(rax, Immediate(1)); 1150 __ cmpq(rax, Immediate(1));
1149 __ j(not_equal, &argc_two_or_more); 1151 __ j(not_equal, &argc_two_or_more);
1150 __ movq(rdx, Operand(rsp, kPointerSize)); // Get the argument from the stack. 1152 __ movq(rdx, Operand(rsp, kPointerSize)); // Get the argument from the stack.
1151 __ JumpUnlessNonNegativeSmi(rdx, call_generic_code); 1153 __ JumpUnlessNonNegativeSmi(rdx, call_generic_code);
(...skipping 10 matching lines...) Expand all
1162 // esp[8]: argument 1164 // esp[8]: argument
1163 AllocateJSArray(masm, 1165 AllocateJSArray(masm,
1164 rdi, 1166 rdi,
1165 rdx, 1167 rdx,
1166 rbx, 1168 rbx,
1167 rcx, 1169 rcx,
1168 r8, 1170 r8,
1169 r9, 1171 r9,
1170 true, 1172 true,
1171 call_generic_code); 1173 call_generic_code);
1172 __ IncrementCounter(COUNTERS->array_function_native(), 1); 1174 __ IncrementCounter(counters->array_function_native(), 1);
1173 __ movq(rax, rbx); 1175 __ movq(rax, rbx);
1174 __ ret(2 * kPointerSize); 1176 __ ret(2 * kPointerSize);
1175 1177
1176 // Handle construction of an array from a list of arguments. 1178 // Handle construction of an array from a list of arguments.
1177 __ bind(&argc_two_or_more); 1179 __ bind(&argc_two_or_more);
1178 __ movq(rdx, rax); 1180 __ movq(rdx, rax);
1179 __ Integer32ToSmi(rdx, rdx); // Convet argc to a smi. 1181 __ Integer32ToSmi(rdx, rdx); // Convet argc to a smi.
1180 // rax: argc 1182 // rax: argc
1181 // rdx: array_size (smi) 1183 // rdx: array_size (smi)
1182 // rdi: constructor 1184 // rdi: constructor
1183 // esp[0] : return address 1185 // esp[0] : return address
1184 // esp[8] : last argument 1186 // esp[8] : last argument
1185 AllocateJSArray(masm, 1187 AllocateJSArray(masm,
1186 rdi, 1188 rdi,
1187 rdx, 1189 rdx,
1188 rbx, 1190 rbx,
1189 rcx, 1191 rcx,
1190 r8, 1192 r8,
1191 r9, 1193 r9,
1192 false, 1194 false,
1193 call_generic_code); 1195 call_generic_code);
1194 __ IncrementCounter(COUNTERS->array_function_native(), 1); 1196 __ IncrementCounter(counters->array_function_native(), 1);
1195 1197
1196 // rax: argc 1198 // rax: argc
1197 // rbx: JSArray 1199 // rbx: JSArray
1198 // rcx: elements_array 1200 // rcx: elements_array
1199 // r8: elements_array_end (untagged) 1201 // r8: elements_array_end (untagged)
1200 // esp[0]: return address 1202 // esp[0]: return address
1201 // esp[8]: last argument 1203 // esp[8]: last argument
1202 1204
1203 // Location of the last argument 1205 // Location of the last argument
1204 __ lea(r9, Operand(rsp, kPointerSize)); 1206 __ lea(r9, Operand(rsp, kPointerSize));
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
1349 1351
1350 1352
1351 void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) { 1353 void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
1352 // ----------- S t a t e ------------- 1354 // ----------- S t a t e -------------
1353 // -- rax : actual number of arguments 1355 // -- rax : actual number of arguments
1354 // -- rbx : expected number of arguments 1356 // -- rbx : expected number of arguments
1355 // -- rdx : code entry to call 1357 // -- rdx : code entry to call
1356 // ----------------------------------- 1358 // -----------------------------------
1357 1359
1358 Label invoke, dont_adapt_arguments; 1360 Label invoke, dont_adapt_arguments;
1359 __ IncrementCounter(COUNTERS->arguments_adaptors(), 1); 1361 Counters* counters = masm->isolate()->counters();
1362 __ IncrementCounter(counters->arguments_adaptors(), 1);
1360 1363
1361 Label enough, too_few; 1364 Label enough, too_few;
1362 __ cmpq(rax, rbx); 1365 __ cmpq(rax, rbx);
1363 __ j(less, &too_few); 1366 __ j(less, &too_few);
1364 __ cmpq(rbx, Immediate(SharedFunctionInfo::kDontAdaptArgumentsSentinel)); 1367 __ cmpq(rbx, Immediate(SharedFunctionInfo::kDontAdaptArgumentsSentinel));
1365 __ j(equal, &dont_adapt_arguments); 1368 __ j(equal, &dont_adapt_arguments);
1366 1369
1367 { // Enough parameters: Actual >= expected. 1370 { // Enough parameters: Actual >= expected.
1368 __ bind(&enough); 1371 __ bind(&enough);
1369 EnterArgumentsAdaptorFrame(masm); 1372 EnterArgumentsAdaptorFrame(masm);
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
1483 Deoptimizer::EntryGenerator generator(masm, Deoptimizer::OSR); 1486 Deoptimizer::EntryGenerator generator(masm, Deoptimizer::OSR);
1484 generator.Generate(); 1487 generator.Generate();
1485 } 1488 }
1486 1489
1487 1490
1488 #undef __ 1491 #undef __
1489 1492
1490 } } // namespace v8::internal 1493 } } // namespace v8::internal
1491 1494
1492 #endif // V8_TARGET_ARCH_X64 1495 #endif // V8_TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « src/x64/assembler-x64.cc ('k') | src/x64/code-stubs-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698