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

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

Issue 212163004: Hide some runtime functions. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 8 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/builtins-x64.cc ('k') | src/x64/full-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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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 28 matching lines...) Expand all
39 namespace internal { 39 namespace internal {
40 40
41 41
42 void FastNewClosureStub::InitializeInterfaceDescriptor( 42 void FastNewClosureStub::InitializeInterfaceDescriptor(
43 Isolate* isolate, 43 Isolate* isolate,
44 CodeStubInterfaceDescriptor* descriptor) { 44 CodeStubInterfaceDescriptor* descriptor) {
45 static Register registers[] = { rbx }; 45 static Register registers[] = { rbx };
46 descriptor->register_param_count_ = 1; 46 descriptor->register_param_count_ = 1;
47 descriptor->register_params_ = registers; 47 descriptor->register_params_ = registers;
48 descriptor->deoptimization_handler_ = 48 descriptor->deoptimization_handler_ =
49 Runtime::FunctionForId(Runtime::kNewClosureFromStubFailure)->entry; 49 Runtime::FunctionForId(Runtime::kHiddenNewClosureFromStubFailure)->entry;
50 } 50 }
51 51
52 52
53 void FastNewContextStub::InitializeInterfaceDescriptor( 53 void FastNewContextStub::InitializeInterfaceDescriptor(
54 Isolate* isolate, 54 Isolate* isolate,
55 CodeStubInterfaceDescriptor* descriptor) { 55 CodeStubInterfaceDescriptor* descriptor) {
56 static Register registers[] = { rdi }; 56 static Register registers[] = { rdi };
57 descriptor->register_param_count_ = 1; 57 descriptor->register_param_count_ = 1;
58 descriptor->register_params_ = registers; 58 descriptor->register_params_ = registers;
59 descriptor->deoptimization_handler_ = NULL; 59 descriptor->deoptimization_handler_ = NULL;
(...skipping 21 matching lines...) Expand all
81 } 81 }
82 82
83 83
84 void FastCloneShallowArrayStub::InitializeInterfaceDescriptor( 84 void FastCloneShallowArrayStub::InitializeInterfaceDescriptor(
85 Isolate* isolate, 85 Isolate* isolate,
86 CodeStubInterfaceDescriptor* descriptor) { 86 CodeStubInterfaceDescriptor* descriptor) {
87 static Register registers[] = { rax, rbx, rcx }; 87 static Register registers[] = { rax, rbx, rcx };
88 descriptor->register_param_count_ = 3; 88 descriptor->register_param_count_ = 3;
89 descriptor->register_params_ = registers; 89 descriptor->register_params_ = registers;
90 descriptor->deoptimization_handler_ = 90 descriptor->deoptimization_handler_ =
91 Runtime::FunctionForId(Runtime::kCreateArrayLiteralStubBailout)->entry; 91 Runtime::FunctionForId(
92 Runtime::kHiddenCreateArrayLiteralStubBailout)->entry;
92 } 93 }
93 94
94 95
95 void FastCloneShallowObjectStub::InitializeInterfaceDescriptor( 96 void FastCloneShallowObjectStub::InitializeInterfaceDescriptor(
96 Isolate* isolate, 97 Isolate* isolate,
97 CodeStubInterfaceDescriptor* descriptor) { 98 CodeStubInterfaceDescriptor* descriptor) {
98 static Register registers[] = { rax, rbx, rcx, rdx }; 99 static Register registers[] = { rax, rbx, rcx, rdx };
99 descriptor->register_param_count_ = 4; 100 descriptor->register_param_count_ = 4;
100 descriptor->register_params_ = registers; 101 descriptor->register_params_ = registers;
101 descriptor->deoptimization_handler_ = 102 descriptor->deoptimization_handler_ =
102 Runtime::FunctionForId(Runtime::kCreateObjectLiteral)->entry; 103 Runtime::FunctionForId(Runtime::kHiddenCreateObjectLiteral)->entry;
103 } 104 }
104 105
105 106
106 void CreateAllocationSiteStub::InitializeInterfaceDescriptor( 107 void CreateAllocationSiteStub::InitializeInterfaceDescriptor(
107 Isolate* isolate, 108 Isolate* isolate,
108 CodeStubInterfaceDescriptor* descriptor) { 109 CodeStubInterfaceDescriptor* descriptor) {
109 static Register registers[] = { rbx, rdx }; 110 static Register registers[] = { rbx, rdx };
110 descriptor->register_param_count_ = 2; 111 descriptor->register_param_count_ = 2;
111 descriptor->register_params_ = registers; 112 descriptor->register_params_ = registers;
112 descriptor->deoptimization_handler_ = NULL; 113 descriptor->deoptimization_handler_ = NULL;
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 // stack param count needs (constructor pointer, and single argument) 227 // stack param count needs (constructor pointer, and single argument)
227 descriptor->handler_arguments_mode_ = PASS_ARGUMENTS; 228 descriptor->handler_arguments_mode_ = PASS_ARGUMENTS;
228 descriptor->stack_parameter_count_ = rax; 229 descriptor->stack_parameter_count_ = rax;
229 descriptor->register_param_count_ = 3; 230 descriptor->register_param_count_ = 3;
230 descriptor->register_params_ = registers_variable_args; 231 descriptor->register_params_ = registers_variable_args;
231 } 232 }
232 233
233 descriptor->hint_stack_parameter_count_ = constant_stack_parameter_count; 234 descriptor->hint_stack_parameter_count_ = constant_stack_parameter_count;
234 descriptor->function_mode_ = JS_FUNCTION_STUB_MODE; 235 descriptor->function_mode_ = JS_FUNCTION_STUB_MODE;
235 descriptor->deoptimization_handler_ = 236 descriptor->deoptimization_handler_ =
236 Runtime::FunctionForId(Runtime::kArrayConstructor)->entry; 237 Runtime::FunctionForId(Runtime::kHiddenArrayConstructor)->entry;
237 } 238 }
238 239
239 240
240 static void InitializeInternalArrayConstructorDescriptor( 241 static void InitializeInternalArrayConstructorDescriptor(
241 Isolate* isolate, 242 Isolate* isolate,
242 CodeStubInterfaceDescriptor* descriptor, 243 CodeStubInterfaceDescriptor* descriptor,
243 int constant_stack_parameter_count) { 244 int constant_stack_parameter_count) {
244 // register state 245 // register state
245 // rax -- number of arguments 246 // rax -- number of arguments
246 // rdi -- constructor function 247 // rdi -- constructor function
247 static Register registers_variable_args[] = { rdi, rax }; 248 static Register registers_variable_args[] = { rdi, rax };
248 static Register registers_no_args[] = { rdi }; 249 static Register registers_no_args[] = { rdi };
249 250
250 if (constant_stack_parameter_count == 0) { 251 if (constant_stack_parameter_count == 0) {
251 descriptor->register_param_count_ = 1; 252 descriptor->register_param_count_ = 1;
252 descriptor->register_params_ = registers_no_args; 253 descriptor->register_params_ = registers_no_args;
253 } else { 254 } else {
254 // stack param count needs (constructor pointer, and single argument) 255 // stack param count needs (constructor pointer, and single argument)
255 descriptor->handler_arguments_mode_ = PASS_ARGUMENTS; 256 descriptor->handler_arguments_mode_ = PASS_ARGUMENTS;
256 descriptor->stack_parameter_count_ = rax; 257 descriptor->stack_parameter_count_ = rax;
257 descriptor->register_param_count_ = 2; 258 descriptor->register_param_count_ = 2;
258 descriptor->register_params_ = registers_variable_args; 259 descriptor->register_params_ = registers_variable_args;
259 } 260 }
260 261
261 descriptor->hint_stack_parameter_count_ = constant_stack_parameter_count; 262 descriptor->hint_stack_parameter_count_ = constant_stack_parameter_count;
262 descriptor->function_mode_ = JS_FUNCTION_STUB_MODE; 263 descriptor->function_mode_ = JS_FUNCTION_STUB_MODE;
263 descriptor->deoptimization_handler_ = 264 descriptor->deoptimization_handler_ =
264 Runtime::FunctionForId(Runtime::kInternalArrayConstructor)->entry; 265 Runtime::FunctionForId(Runtime::kHiddenInternalArrayConstructor)->entry;
265 } 266 }
266 267
267 268
268 void ArrayNoArgumentConstructorStub::InitializeInterfaceDescriptor( 269 void ArrayNoArgumentConstructorStub::InitializeInterfaceDescriptor(
269 Isolate* isolate, 270 Isolate* isolate,
270 CodeStubInterfaceDescriptor* descriptor) { 271 CodeStubInterfaceDescriptor* descriptor) {
271 InitializeArrayConstructorDescriptor(isolate, descriptor, 0); 272 InitializeArrayConstructorDescriptor(isolate, descriptor, 0);
272 } 273 }
273 274
274 275
(...skipping 921 matching lines...) Expand 10 before | Expand all | Expand 10 after
1196 __ j(less, &arguments_loop, Label::kNear); 1197 __ j(less, &arguments_loop, Label::kNear);
1197 1198
1198 // Return and remove the on-stack parameters. 1199 // Return and remove the on-stack parameters.
1199 __ ret(3 * kPointerSize); 1200 __ ret(3 * kPointerSize);
1200 1201
1201 // Do the runtime call to allocate the arguments object. 1202 // Do the runtime call to allocate the arguments object.
1202 // rcx = argument count (untagged) 1203 // rcx = argument count (untagged)
1203 __ bind(&runtime); 1204 __ bind(&runtime);
1204 __ Integer32ToSmi(rcx, rcx); 1205 __ Integer32ToSmi(rcx, rcx);
1205 __ movp(args.GetArgumentOperand(2), rcx); // Patch argument count. 1206 __ movp(args.GetArgumentOperand(2), rcx); // Patch argument count.
1206 __ TailCallRuntime(Runtime::kNewArgumentsFast, 3, 1); 1207 __ TailCallRuntime(Runtime::kHiddenNewArgumentsFast, 3, 1);
1207 } 1208 }
1208 1209
1209 1210
1210 void ArgumentsAccessStub::GenerateNewSloppySlow(MacroAssembler* masm) { 1211 void ArgumentsAccessStub::GenerateNewSloppySlow(MacroAssembler* masm) {
1211 // rsp[0] : return address 1212 // rsp[0] : return address
1212 // rsp[8] : number of parameters 1213 // rsp[8] : number of parameters
1213 // rsp[16] : receiver displacement 1214 // rsp[16] : receiver displacement
1214 // rsp[24] : function 1215 // rsp[24] : function
1215 1216
1216 // Check if the calling frame is an arguments adaptor frame. 1217 // Check if the calling frame is an arguments adaptor frame.
1217 Label runtime; 1218 Label runtime;
1218 __ movp(rdx, Operand(rbp, StandardFrameConstants::kCallerFPOffset)); 1219 __ movp(rdx, Operand(rbp, StandardFrameConstants::kCallerFPOffset));
1219 __ movp(rcx, Operand(rdx, StandardFrameConstants::kContextOffset)); 1220 __ movp(rcx, Operand(rdx, StandardFrameConstants::kContextOffset));
1220 __ Cmp(rcx, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR)); 1221 __ Cmp(rcx, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR));
1221 __ j(not_equal, &runtime); 1222 __ j(not_equal, &runtime);
1222 1223
1223 // Patch the arguments.length and the parameters pointer. 1224 // Patch the arguments.length and the parameters pointer.
1224 StackArgumentsAccessor args(rsp, 3, ARGUMENTS_DONT_CONTAIN_RECEIVER); 1225 StackArgumentsAccessor args(rsp, 3, ARGUMENTS_DONT_CONTAIN_RECEIVER);
1225 __ movp(rcx, Operand(rdx, ArgumentsAdaptorFrameConstants::kLengthOffset)); 1226 __ movp(rcx, Operand(rdx, ArgumentsAdaptorFrameConstants::kLengthOffset));
1226 __ movp(args.GetArgumentOperand(2), rcx); 1227 __ movp(args.GetArgumentOperand(2), rcx);
1227 __ SmiToInteger64(rcx, rcx); 1228 __ SmiToInteger64(rcx, rcx);
1228 __ lea(rdx, Operand(rdx, rcx, times_pointer_size, 1229 __ lea(rdx, Operand(rdx, rcx, times_pointer_size,
1229 StandardFrameConstants::kCallerSPOffset)); 1230 StandardFrameConstants::kCallerSPOffset));
1230 __ movp(args.GetArgumentOperand(1), rdx); 1231 __ movp(args.GetArgumentOperand(1), rdx);
1231 1232
1232 __ bind(&runtime); 1233 __ bind(&runtime);
1233 __ TailCallRuntime(Runtime::kNewArgumentsFast, 3, 1); 1234 __ TailCallRuntime(Runtime::kHiddenNewArgumentsFast, 3, 1);
1234 } 1235 }
1235 1236
1236 1237
1237 void ArgumentsAccessStub::GenerateNewStrict(MacroAssembler* masm) { 1238 void ArgumentsAccessStub::GenerateNewStrict(MacroAssembler* masm) {
1238 // rsp[0] : return address 1239 // rsp[0] : return address
1239 // rsp[8] : number of parameters 1240 // rsp[8] : number of parameters
1240 // rsp[16] : receiver displacement 1241 // rsp[16] : receiver displacement
1241 // rsp[24] : function 1242 // rsp[24] : function
1242 1243
1243 // Check if the calling frame is an arguments adaptor frame. 1244 // Check if the calling frame is an arguments adaptor frame.
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
1324 __ subp(rdx, Immediate(kPointerSize)); 1325 __ subp(rdx, Immediate(kPointerSize));
1325 __ decp(rcx); 1326 __ decp(rcx);
1326 __ j(not_zero, &loop); 1327 __ j(not_zero, &loop);
1327 1328
1328 // Return and remove the on-stack parameters. 1329 // Return and remove the on-stack parameters.
1329 __ bind(&done); 1330 __ bind(&done);
1330 __ ret(3 * kPointerSize); 1331 __ ret(3 * kPointerSize);
1331 1332
1332 // Do the runtime call to allocate the arguments object. 1333 // Do the runtime call to allocate the arguments object.
1333 __ bind(&runtime); 1334 __ bind(&runtime);
1334 __ TailCallRuntime(Runtime::kNewStrictArgumentsFast, 3, 1); 1335 __ TailCallRuntime(Runtime::kHiddenNewStrictArgumentsFast, 3, 1);
1335 } 1336 }
1336 1337
1337 1338
1338 void RegExpExecStub::Generate(MacroAssembler* masm) { 1339 void RegExpExecStub::Generate(MacroAssembler* masm) {
1339 // Just jump directly to runtime if native RegExp is not selected at compile 1340 // Just jump directly to runtime if native RegExp is not selected at compile
1340 // time or if regexp entry in generated code is turned off runtime switch or 1341 // time or if regexp entry in generated code is turned off runtime switch or
1341 // at compilation. 1342 // at compilation.
1342 #ifdef V8_INTERPRETED_REGEXP 1343 #ifdef V8_INTERPRETED_REGEXP
1343 __ TailCallRuntime(Runtime::kHiddenRegExpExec, 4, 1); 1344 __ TailCallRuntime(Runtime::kHiddenRegExpExec, 4, 1);
1344 #else // V8_INTERPRETED_REGEXP 1345 #else // V8_INTERPRETED_REGEXP
(...skipping 1657 matching lines...) Expand 10 before | Expand all | Expand 10 after
3002 index_not_number_, 3003 index_not_number_,
3003 DONT_DO_SMI_CHECK); 3004 DONT_DO_SMI_CHECK);
3004 call_helper.BeforeCall(masm); 3005 call_helper.BeforeCall(masm);
3005 __ Push(object_); 3006 __ Push(object_);
3006 __ Push(index_); // Consumed by runtime conversion function. 3007 __ Push(index_); // Consumed by runtime conversion function.
3007 if (index_flags_ == STRING_INDEX_IS_NUMBER) { 3008 if (index_flags_ == STRING_INDEX_IS_NUMBER) {
3008 __ CallRuntime(Runtime::kNumberToIntegerMapMinusZero, 1); 3009 __ CallRuntime(Runtime::kNumberToIntegerMapMinusZero, 1);
3009 } else { 3010 } else {
3010 ASSERT(index_flags_ == STRING_INDEX_IS_ARRAY_INDEX); 3011 ASSERT(index_flags_ == STRING_INDEX_IS_ARRAY_INDEX);
3011 // NumberToSmi discards numbers that are not exact integers. 3012 // NumberToSmi discards numbers that are not exact integers.
3012 __ CallRuntime(Runtime::kNumberToSmi, 1); 3013 __ CallRuntime(Runtime::kHiddenNumberToSmi, 1);
3013 } 3014 }
3014 if (!index_.is(rax)) { 3015 if (!index_.is(rax)) {
3015 // Save the conversion result before the pop instructions below 3016 // Save the conversion result before the pop instructions below
3016 // have a chance to overwrite it. 3017 // have a chance to overwrite it.
3017 __ movp(index_, rax); 3018 __ movp(index_, rax);
3018 } 3019 }
3019 __ Pop(object_); 3020 __ Pop(object_);
3020 // Reload the instance type. 3021 // Reload the instance type.
3021 __ movp(result_, FieldOperand(object_, HeapObject::kMapOffset)); 3022 __ movp(result_, FieldOperand(object_, HeapObject::kMapOffset));
3022 __ movzxbl(result_, FieldOperand(result_, Map::kInstanceTypeOffset)); 3023 __ movzxbl(result_, FieldOperand(result_, Map::kInstanceTypeOffset));
(...skipping 2191 matching lines...) Expand 10 before | Expand all | Expand 10 after
5214 return_value_operand, 5215 return_value_operand,
5215 NULL); 5216 NULL);
5216 } 5217 }
5217 5218
5218 5219
5219 #undef __ 5220 #undef __
5220 5221
5221 } } // namespace v8::internal 5222 } } // namespace v8::internal
5222 5223
5223 #endif // V8_TARGET_ARCH_X64 5224 #endif // V8_TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « src/x64/builtins-x64.cc ('k') | src/x64/full-codegen-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698