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

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

Issue 212163004: Hide some runtime functions. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 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/ia32/builtins-ia32.cc ('k') | src/ia32/full-codegen-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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 namespace internal { 43 namespace internal {
44 44
45 45
46 void FastNewClosureStub::InitializeInterfaceDescriptor( 46 void FastNewClosureStub::InitializeInterfaceDescriptor(
47 Isolate* isolate, 47 Isolate* isolate,
48 CodeStubInterfaceDescriptor* descriptor) { 48 CodeStubInterfaceDescriptor* descriptor) {
49 static Register registers[] = { ebx }; 49 static Register registers[] = { ebx };
50 descriptor->register_param_count_ = 1; 50 descriptor->register_param_count_ = 1;
51 descriptor->register_params_ = registers; 51 descriptor->register_params_ = registers;
52 descriptor->deoptimization_handler_ = 52 descriptor->deoptimization_handler_ =
53 Runtime::FunctionForId(Runtime::kNewClosureFromStubFailure)->entry; 53 Runtime::FunctionForId(Runtime::kHiddenNewClosureFromStubFailure)->entry;
54 } 54 }
55 55
56 56
57 void FastNewContextStub::InitializeInterfaceDescriptor( 57 void FastNewContextStub::InitializeInterfaceDescriptor(
58 Isolate* isolate, 58 Isolate* isolate,
59 CodeStubInterfaceDescriptor* descriptor) { 59 CodeStubInterfaceDescriptor* descriptor) {
60 static Register registers[] = { edi }; 60 static Register registers[] = { edi };
61 descriptor->register_param_count_ = 1; 61 descriptor->register_param_count_ = 1;
62 descriptor->register_params_ = registers; 62 descriptor->register_params_ = registers;
63 descriptor->deoptimization_handler_ = NULL; 63 descriptor->deoptimization_handler_ = NULL;
(...skipping 21 matching lines...) Expand all
85 } 85 }
86 86
87 87
88 void FastCloneShallowArrayStub::InitializeInterfaceDescriptor( 88 void FastCloneShallowArrayStub::InitializeInterfaceDescriptor(
89 Isolate* isolate, 89 Isolate* isolate,
90 CodeStubInterfaceDescriptor* descriptor) { 90 CodeStubInterfaceDescriptor* descriptor) {
91 static Register registers[] = { eax, ebx, ecx }; 91 static Register registers[] = { eax, ebx, ecx };
92 descriptor->register_param_count_ = 3; 92 descriptor->register_param_count_ = 3;
93 descriptor->register_params_ = registers; 93 descriptor->register_params_ = registers;
94 descriptor->deoptimization_handler_ = 94 descriptor->deoptimization_handler_ =
95 Runtime::FunctionForId(Runtime::kCreateArrayLiteralStubBailout)->entry; 95 Runtime::FunctionForId(
96 Runtime::kHiddenCreateArrayLiteralStubBailout)->entry;
96 } 97 }
97 98
98 99
99 void FastCloneShallowObjectStub::InitializeInterfaceDescriptor( 100 void FastCloneShallowObjectStub::InitializeInterfaceDescriptor(
100 Isolate* isolate, 101 Isolate* isolate,
101 CodeStubInterfaceDescriptor* descriptor) { 102 CodeStubInterfaceDescriptor* descriptor) {
102 static Register registers[] = { eax, ebx, ecx, edx }; 103 static Register registers[] = { eax, ebx, ecx, edx };
103 descriptor->register_param_count_ = 4; 104 descriptor->register_param_count_ = 4;
104 descriptor->register_params_ = registers; 105 descriptor->register_params_ = registers;
105 descriptor->deoptimization_handler_ = 106 descriptor->deoptimization_handler_ =
106 Runtime::FunctionForId(Runtime::kCreateObjectLiteral)->entry; 107 Runtime::FunctionForId(Runtime::kHiddenCreateObjectLiteral)->entry;
107 } 108 }
108 109
109 110
110 void CreateAllocationSiteStub::InitializeInterfaceDescriptor( 111 void CreateAllocationSiteStub::InitializeInterfaceDescriptor(
111 Isolate* isolate, 112 Isolate* isolate,
112 CodeStubInterfaceDescriptor* descriptor) { 113 CodeStubInterfaceDescriptor* descriptor) {
113 static Register registers[] = { ebx, edx }; 114 static Register registers[] = { ebx, edx };
114 descriptor->register_param_count_ = 2; 115 descriptor->register_param_count_ = 2;
115 descriptor->register_params_ = registers; 116 descriptor->register_params_ = registers;
116 descriptor->deoptimization_handler_ = NULL; 117 descriptor->deoptimization_handler_ = NULL;
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 // stack param count needs (constructor pointer, and single argument) 231 // stack param count needs (constructor pointer, and single argument)
231 descriptor->handler_arguments_mode_ = PASS_ARGUMENTS; 232 descriptor->handler_arguments_mode_ = PASS_ARGUMENTS;
232 descriptor->stack_parameter_count_ = eax; 233 descriptor->stack_parameter_count_ = eax;
233 descriptor->register_param_count_ = 3; 234 descriptor->register_param_count_ = 3;
234 descriptor->register_params_ = registers_variable_args; 235 descriptor->register_params_ = registers_variable_args;
235 } 236 }
236 237
237 descriptor->hint_stack_parameter_count_ = constant_stack_parameter_count; 238 descriptor->hint_stack_parameter_count_ = constant_stack_parameter_count;
238 descriptor->function_mode_ = JS_FUNCTION_STUB_MODE; 239 descriptor->function_mode_ = JS_FUNCTION_STUB_MODE;
239 descriptor->deoptimization_handler_ = 240 descriptor->deoptimization_handler_ =
240 Runtime::FunctionForId(Runtime::kArrayConstructor)->entry; 241 Runtime::FunctionForId(Runtime::kHiddenArrayConstructor)->entry;
241 } 242 }
242 243
243 244
244 static void InitializeInternalArrayConstructorDescriptor( 245 static void InitializeInternalArrayConstructorDescriptor(
245 Isolate* isolate, 246 Isolate* isolate,
246 CodeStubInterfaceDescriptor* descriptor, 247 CodeStubInterfaceDescriptor* descriptor,
247 int constant_stack_parameter_count) { 248 int constant_stack_parameter_count) {
248 // register state 249 // register state
249 // eax -- number of arguments 250 // eax -- number of arguments
250 // edi -- constructor function 251 // edi -- constructor function
251 static Register registers_variable_args[] = { edi, eax }; 252 static Register registers_variable_args[] = { edi, eax };
252 static Register registers_no_args[] = { edi }; 253 static Register registers_no_args[] = { edi };
253 254
254 if (constant_stack_parameter_count == 0) { 255 if (constant_stack_parameter_count == 0) {
255 descriptor->register_param_count_ = 1; 256 descriptor->register_param_count_ = 1;
256 descriptor->register_params_ = registers_no_args; 257 descriptor->register_params_ = registers_no_args;
257 } else { 258 } else {
258 // stack param count needs (constructor pointer, and single argument) 259 // stack param count needs (constructor pointer, and single argument)
259 descriptor->handler_arguments_mode_ = PASS_ARGUMENTS; 260 descriptor->handler_arguments_mode_ = PASS_ARGUMENTS;
260 descriptor->stack_parameter_count_ = eax; 261 descriptor->stack_parameter_count_ = eax;
261 descriptor->register_param_count_ = 2; 262 descriptor->register_param_count_ = 2;
262 descriptor->register_params_ = registers_variable_args; 263 descriptor->register_params_ = registers_variable_args;
263 } 264 }
264 265
265 descriptor->hint_stack_parameter_count_ = constant_stack_parameter_count; 266 descriptor->hint_stack_parameter_count_ = constant_stack_parameter_count;
266 descriptor->function_mode_ = JS_FUNCTION_STUB_MODE; 267 descriptor->function_mode_ = JS_FUNCTION_STUB_MODE;
267 descriptor->deoptimization_handler_ = 268 descriptor->deoptimization_handler_ =
268 Runtime::FunctionForId(Runtime::kInternalArrayConstructor)->entry; 269 Runtime::FunctionForId(Runtime::kHiddenInternalArrayConstructor)->entry;
269 } 270 }
270 271
271 272
272 void ArrayNoArgumentConstructorStub::InitializeInterfaceDescriptor( 273 void ArrayNoArgumentConstructorStub::InitializeInterfaceDescriptor(
273 Isolate* isolate, 274 Isolate* isolate,
274 CodeStubInterfaceDescriptor* descriptor) { 275 CodeStubInterfaceDescriptor* descriptor) {
275 InitializeArrayConstructorDescriptor(isolate, descriptor, 0); 276 InitializeArrayConstructorDescriptor(isolate, descriptor, 0);
276 } 277 }
277 278
278 279
(...skipping 860 matching lines...) Expand 10 before | Expand all | Expand 10 after
1139 __ j(not_equal, &runtime, Label::kNear); 1140 __ j(not_equal, &runtime, Label::kNear);
1140 1141
1141 // Patch the arguments.length and the parameters pointer. 1142 // Patch the arguments.length and the parameters pointer.
1142 __ mov(ecx, Operand(edx, ArgumentsAdaptorFrameConstants::kLengthOffset)); 1143 __ mov(ecx, Operand(edx, ArgumentsAdaptorFrameConstants::kLengthOffset));
1143 __ mov(Operand(esp, 1 * kPointerSize), ecx); 1144 __ mov(Operand(esp, 1 * kPointerSize), ecx);
1144 __ lea(edx, Operand(edx, ecx, times_2, 1145 __ lea(edx, Operand(edx, ecx, times_2,
1145 StandardFrameConstants::kCallerSPOffset)); 1146 StandardFrameConstants::kCallerSPOffset));
1146 __ mov(Operand(esp, 2 * kPointerSize), edx); 1147 __ mov(Operand(esp, 2 * kPointerSize), edx);
1147 1148
1148 __ bind(&runtime); 1149 __ bind(&runtime);
1149 __ TailCallRuntime(Runtime::kNewArgumentsFast, 3, 1); 1150 __ TailCallRuntime(Runtime::kHiddenNewArgumentsFast, 3, 1);
1150 } 1151 }
1151 1152
1152 1153
1153 void ArgumentsAccessStub::GenerateNewSloppyFast(MacroAssembler* masm) { 1154 void ArgumentsAccessStub::GenerateNewSloppyFast(MacroAssembler* masm) {
1154 Isolate* isolate = masm->isolate(); 1155 Isolate* isolate = masm->isolate();
1155 1156
1156 // esp[0] : return address 1157 // esp[0] : return address
1157 // esp[4] : number of parameters (tagged) 1158 // esp[4] : number of parameters (tagged)
1158 // esp[8] : receiver displacement 1159 // esp[8] : receiver displacement
1159 // esp[12] : function 1160 // esp[12] : function
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
1364 __ pop(eax); // Address of arguments object. 1365 __ pop(eax); // Address of arguments object.
1365 __ pop(ebx); // Parameter count. 1366 __ pop(ebx); // Parameter count.
1366 1367
1367 // Return and remove the on-stack parameters. 1368 // Return and remove the on-stack parameters.
1368 __ ret(3 * kPointerSize); 1369 __ ret(3 * kPointerSize);
1369 1370
1370 // Do the runtime call to allocate the arguments object. 1371 // Do the runtime call to allocate the arguments object.
1371 __ bind(&runtime); 1372 __ bind(&runtime);
1372 __ pop(eax); // Remove saved parameter count. 1373 __ pop(eax); // Remove saved parameter count.
1373 __ mov(Operand(esp, 1 * kPointerSize), ecx); // Patch argument count. 1374 __ mov(Operand(esp, 1 * kPointerSize), ecx); // Patch argument count.
1374 __ TailCallRuntime(Runtime::kNewArgumentsFast, 3, 1); 1375 __ TailCallRuntime(Runtime::kHiddenNewArgumentsFast, 3, 1);
1375 } 1376 }
1376 1377
1377 1378
1378 void ArgumentsAccessStub::GenerateNewStrict(MacroAssembler* masm) { 1379 void ArgumentsAccessStub::GenerateNewStrict(MacroAssembler* masm) {
1379 Isolate* isolate = masm->isolate(); 1380 Isolate* isolate = masm->isolate();
1380 1381
1381 // esp[0] : return address 1382 // esp[0] : return address
1382 // esp[4] : number of parameters 1383 // esp[4] : number of parameters
1383 // esp[8] : receiver displacement 1384 // esp[8] : receiver displacement
1384 // esp[12] : function 1385 // esp[12] : function
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1463 __ sub(edx, Immediate(kPointerSize)); 1464 __ sub(edx, Immediate(kPointerSize));
1464 __ dec(ecx); 1465 __ dec(ecx);
1465 __ j(not_zero, &loop); 1466 __ j(not_zero, &loop);
1466 1467
1467 // Return and remove the on-stack parameters. 1468 // Return and remove the on-stack parameters.
1468 __ bind(&done); 1469 __ bind(&done);
1469 __ ret(3 * kPointerSize); 1470 __ ret(3 * kPointerSize);
1470 1471
1471 // Do the runtime call to allocate the arguments object. 1472 // Do the runtime call to allocate the arguments object.
1472 __ bind(&runtime); 1473 __ bind(&runtime);
1473 __ TailCallRuntime(Runtime::kNewStrictArgumentsFast, 3, 1); 1474 __ TailCallRuntime(Runtime::kHiddenNewStrictArgumentsFast, 3, 1);
1474 } 1475 }
1475 1476
1476 1477
1477 void RegExpExecStub::Generate(MacroAssembler* masm) { 1478 void RegExpExecStub::Generate(MacroAssembler* masm) {
1478 // Just jump directly to runtime if native RegExp is not selected at compile 1479 // Just jump directly to runtime if native RegExp is not selected at compile
1479 // time or if regexp entry in generated code is turned off runtime switch or 1480 // time or if regexp entry in generated code is turned off runtime switch or
1480 // at compilation. 1481 // at compilation.
1481 #ifdef V8_INTERPRETED_REGEXP 1482 #ifdef V8_INTERPRETED_REGEXP
1482 __ TailCallRuntime(Runtime::kHiddenRegExpExec, 4, 1); 1483 __ TailCallRuntime(Runtime::kHiddenRegExpExec, 4, 1);
1483 #else // V8_INTERPRETED_REGEXP 1484 #else // V8_INTERPRETED_REGEXP
(...skipping 1638 matching lines...) Expand 10 before | Expand all | Expand 10 after
3122 index_not_number_, 3123 index_not_number_,
3123 DONT_DO_SMI_CHECK); 3124 DONT_DO_SMI_CHECK);
3124 call_helper.BeforeCall(masm); 3125 call_helper.BeforeCall(masm);
3125 __ push(object_); 3126 __ push(object_);
3126 __ push(index_); // Consumed by runtime conversion function. 3127 __ push(index_); // Consumed by runtime conversion function.
3127 if (index_flags_ == STRING_INDEX_IS_NUMBER) { 3128 if (index_flags_ == STRING_INDEX_IS_NUMBER) {
3128 __ CallRuntime(Runtime::kNumberToIntegerMapMinusZero, 1); 3129 __ CallRuntime(Runtime::kNumberToIntegerMapMinusZero, 1);
3129 } else { 3130 } else {
3130 ASSERT(index_flags_ == STRING_INDEX_IS_ARRAY_INDEX); 3131 ASSERT(index_flags_ == STRING_INDEX_IS_ARRAY_INDEX);
3131 // NumberToSmi discards numbers that are not exact integers. 3132 // NumberToSmi discards numbers that are not exact integers.
3132 __ CallRuntime(Runtime::kNumberToSmi, 1); 3133 __ CallRuntime(Runtime::kHiddenNumberToSmi, 1);
3133 } 3134 }
3134 if (!index_.is(eax)) { 3135 if (!index_.is(eax)) {
3135 // Save the conversion result before the pop instructions below 3136 // Save the conversion result before the pop instructions below
3136 // have a chance to overwrite it. 3137 // have a chance to overwrite it.
3137 __ mov(index_, eax); 3138 __ mov(index_, eax);
3138 } 3139 }
3139 __ pop(object_); 3140 __ pop(object_);
3140 // Reload the instance type. 3141 // Reload the instance type.
3141 __ mov(result_, FieldOperand(object_, HeapObject::kMapOffset)); 3142 __ mov(result_, FieldOperand(object_, HeapObject::kMapOffset));
3142 __ movzx_b(result_, FieldOperand(result_, Map::kInstanceTypeOffset)); 3143 __ movzx_b(result_, FieldOperand(result_, Map::kInstanceTypeOffset));
(...skipping 2212 matching lines...) Expand 10 before | Expand all | Expand 10 after
5355 Operand(ebp, 7 * kPointerSize), 5356 Operand(ebp, 7 * kPointerSize),
5356 NULL); 5357 NULL);
5357 } 5358 }
5358 5359
5359 5360
5360 #undef __ 5361 #undef __
5361 5362
5362 } } // namespace v8::internal 5363 } } // namespace v8::internal
5363 5364
5364 #endif // V8_TARGET_ARCH_IA32 5365 #endif // V8_TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « src/ia32/builtins-ia32.cc ('k') | src/ia32/full-codegen-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698