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

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

Issue 96083005: Remove Reloc::Mode CODE_TARGET_CONTEXT (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: REBASE Created 7 years 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/ic-ia32.cc ('k') | src/ic.h » ('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 3152 matching lines...) Expand 10 before | Expand all | Expand 10 after
3163 } 3163 }
3164 } 3164 }
3165 3165
3166 3166
3167 void LCodeGen::DoLoadGlobalGeneric(LLoadGlobalGeneric* instr) { 3167 void LCodeGen::DoLoadGlobalGeneric(LLoadGlobalGeneric* instr) {
3168 ASSERT(ToRegister(instr->context()).is(esi)); 3168 ASSERT(ToRegister(instr->context()).is(esi));
3169 ASSERT(ToRegister(instr->global_object()).is(edx)); 3169 ASSERT(ToRegister(instr->global_object()).is(edx));
3170 ASSERT(ToRegister(instr->result()).is(eax)); 3170 ASSERT(ToRegister(instr->result()).is(eax));
3171 3171
3172 __ mov(ecx, instr->name()); 3172 __ mov(ecx, instr->name());
3173 RelocInfo::Mode mode = instr->for_typeof() ? RelocInfo::CODE_TARGET : 3173 ContextualMode mode = instr->for_typeof() ? NOT_CONTEXTUAL : CONTEXTUAL;
3174 RelocInfo::CODE_TARGET_CONTEXT; 3174 Handle<Code> ic = LoadIC::initialize_stub(isolate(), mode);
3175 Handle<Code> ic = isolate()->builtins()->LoadIC_Initialize(); 3175 CallCode(ic, RelocInfo::CODE_TARGET, instr);
3176 CallCode(ic, mode, instr);
3177 } 3176 }
3178 3177
3179 3178
3180 void LCodeGen::DoStoreGlobalCell(LStoreGlobalCell* instr) { 3179 void LCodeGen::DoStoreGlobalCell(LStoreGlobalCell* instr) {
3181 Register value = ToRegister(instr->value()); 3180 Register value = ToRegister(instr->value());
3182 Handle<PropertyCell> cell_handle = instr->hydrogen()->cell().handle(); 3181 Handle<PropertyCell> cell_handle = instr->hydrogen()->cell().handle();
3183 3182
3184 // If the cell we are storing to contains the hole it could have 3183 // If the cell we are storing to contains the hole it could have
3185 // been deleted from the property dictionary. In that case, we need 3184 // been deleted from the property dictionary. In that case, we need
3186 // to update the property details in the property dictionary to mark 3185 // to update the property details in the property dictionary to mark
3187 // it as no longer deleted. We deoptimize in that case. 3186 // it as no longer deleted. We deoptimize in that case.
3188 if (instr->hydrogen()->RequiresHoleCheck()) { 3187 if (instr->hydrogen()->RequiresHoleCheck()) {
3189 __ cmp(Operand::ForCell(cell_handle), factory()->the_hole_value()); 3188 __ cmp(Operand::ForCell(cell_handle), factory()->the_hole_value());
3190 DeoptimizeIf(equal, instr->environment()); 3189 DeoptimizeIf(equal, instr->environment());
3191 } 3190 }
3192 3191
3193 // Store the value. 3192 // Store the value.
3194 __ mov(Operand::ForCell(cell_handle), value); 3193 __ mov(Operand::ForCell(cell_handle), value);
3195 // Cells are always rescanned, so no write barrier here. 3194 // Cells are always rescanned, so no write barrier here.
3196 } 3195 }
3197 3196
3198 3197
3199 void LCodeGen::DoStoreGlobalGeneric(LStoreGlobalGeneric* instr) { 3198 void LCodeGen::DoStoreGlobalGeneric(LStoreGlobalGeneric* instr) {
3200 ASSERT(ToRegister(instr->context()).is(esi)); 3199 ASSERT(ToRegister(instr->context()).is(esi));
3201 ASSERT(ToRegister(instr->global_object()).is(edx)); 3200 ASSERT(ToRegister(instr->global_object()).is(edx));
3202 ASSERT(ToRegister(instr->value()).is(eax)); 3201 ASSERT(ToRegister(instr->value()).is(eax));
3203 3202
3204 __ mov(ecx, instr->name()); 3203 __ mov(ecx, instr->name());
3205 Handle<Code> ic = (instr->strict_mode_flag() == kStrictMode) 3204 Handle<Code> ic = StoreIC::initialize_stub(isolate(),
3206 ? isolate()->builtins()->StoreIC_Initialize_Strict() 3205 instr->strict_mode_flag(),
3207 : isolate()->builtins()->StoreIC_Initialize(); 3206 CONTEXTUAL);
3208 CallCode(ic, RelocInfo::CODE_TARGET_CONTEXT, instr); 3207 CallCode(ic, RelocInfo::CODE_TARGET, instr);
3209 } 3208 }
3210 3209
3211 3210
3212 void LCodeGen::DoLoadContextSlot(LLoadContextSlot* instr) { 3211 void LCodeGen::DoLoadContextSlot(LLoadContextSlot* instr) {
3213 Register context = ToRegister(instr->context()); 3212 Register context = ToRegister(instr->context());
3214 Register result = ToRegister(instr->result()); 3213 Register result = ToRegister(instr->result());
3215 __ mov(result, ContextOperand(context, instr->slot_index())); 3214 __ mov(result, ContextOperand(context, instr->slot_index()));
3216 3215
3217 if (instr->hydrogen()->RequiresHoleCheck()) { 3216 if (instr->hydrogen()->RequiresHoleCheck()) {
3218 __ cmp(result, factory()->the_hole_value()); 3217 __ cmp(result, factory()->the_hole_value());
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
3317 } 3316 }
3318 } 3317 }
3319 3318
3320 3319
3321 void LCodeGen::DoLoadNamedGeneric(LLoadNamedGeneric* instr) { 3320 void LCodeGen::DoLoadNamedGeneric(LLoadNamedGeneric* instr) {
3322 ASSERT(ToRegister(instr->context()).is(esi)); 3321 ASSERT(ToRegister(instr->context()).is(esi));
3323 ASSERT(ToRegister(instr->object()).is(edx)); 3322 ASSERT(ToRegister(instr->object()).is(edx));
3324 ASSERT(ToRegister(instr->result()).is(eax)); 3323 ASSERT(ToRegister(instr->result()).is(eax));
3325 3324
3326 __ mov(ecx, instr->name()); 3325 __ mov(ecx, instr->name());
3327 Handle<Code> ic = isolate()->builtins()->LoadIC_Initialize(); 3326 Handle<Code> ic = LoadIC::initialize_stub(isolate(), NOT_CONTEXTUAL);
3328 CallCode(ic, RelocInfo::CODE_TARGET, instr); 3327 CallCode(ic, RelocInfo::CODE_TARGET, instr);
3329 } 3328 }
3330 3329
3331 3330
3332 void LCodeGen::DoLoadFunctionPrototype(LLoadFunctionPrototype* instr) { 3331 void LCodeGen::DoLoadFunctionPrototype(LLoadFunctionPrototype* instr) {
3333 Register function = ToRegister(instr->function()); 3332 Register function = ToRegister(instr->function());
3334 Register temp = ToRegister(instr->temp()); 3333 Register temp = ToRegister(instr->temp());
3335 Register result = ToRegister(instr->result()); 3334 Register result = ToRegister(instr->result());
3336 3335
3337 // Check that the function really is a function. 3336 // Check that the function really is a function.
(...skipping 892 matching lines...) Expand 10 before | Expand all | Expand 10 after
4230 isolate()->stub_cache()->ComputeKeyedCallInitialize(arity); 4229 isolate()->stub_cache()->ComputeKeyedCallInitialize(arity);
4231 CallCode(ic, RelocInfo::CODE_TARGET, instr); 4230 CallCode(ic, RelocInfo::CODE_TARGET, instr);
4232 } 4231 }
4233 4232
4234 4233
4235 void LCodeGen::DoCallNamed(LCallNamed* instr) { 4234 void LCodeGen::DoCallNamed(LCallNamed* instr) {
4236 ASSERT(ToRegister(instr->context()).is(esi)); 4235 ASSERT(ToRegister(instr->context()).is(esi));
4237 ASSERT(ToRegister(instr->result()).is(eax)); 4236 ASSERT(ToRegister(instr->result()).is(eax));
4238 4237
4239 int arity = instr->arity(); 4238 int arity = instr->arity();
4240 RelocInfo::Mode mode = RelocInfo::CODE_TARGET;
4241 Handle<Code> ic = 4239 Handle<Code> ic =
4242 isolate()->stub_cache()->ComputeCallInitialize(arity, mode); 4240 isolate()->stub_cache()->ComputeCallInitialize(arity, NOT_CONTEXTUAL);
4243 __ mov(ecx, instr->name()); 4241 __ mov(ecx, instr->name());
4244 CallCode(ic, mode, instr); 4242 CallCode(ic, RelocInfo::CODE_TARGET, instr);
4245 } 4243 }
4246 4244
4247 4245
4248 void LCodeGen::DoCallFunction(LCallFunction* instr) { 4246 void LCodeGen::DoCallFunction(LCallFunction* instr) {
4249 ASSERT(ToRegister(instr->context()).is(esi)); 4247 ASSERT(ToRegister(instr->context()).is(esi));
4250 ASSERT(ToRegister(instr->function()).is(edi)); 4248 ASSERT(ToRegister(instr->function()).is(edi));
4251 ASSERT(ToRegister(instr->result()).is(eax)); 4249 ASSERT(ToRegister(instr->result()).is(eax));
4252 4250
4253 int arity = instr->arity(); 4251 int arity = instr->arity();
4254 CallFunctionStub stub(arity, NO_CALL_FUNCTION_FLAGS); 4252 CallFunctionStub stub(arity, NO_CALL_FUNCTION_FLAGS);
4255 if (instr->hydrogen()->IsTailCall()) { 4253 if (instr->hydrogen()->IsTailCall()) {
4256 if (NeedsEagerFrame()) __ leave(); 4254 if (NeedsEagerFrame()) __ leave();
4257 __ jmp(stub.GetCode(isolate()), RelocInfo::CODE_TARGET); 4255 __ jmp(stub.GetCode(isolate()), RelocInfo::CODE_TARGET);
4258 } else { 4256 } else {
4259 CallCode(stub.GetCode(isolate()), RelocInfo::CODE_TARGET, instr); 4257 CallCode(stub.GetCode(isolate()), RelocInfo::CODE_TARGET, instr);
4260 } 4258 }
4261 } 4259 }
4262 4260
4263 4261
4264 void LCodeGen::DoCallGlobal(LCallGlobal* instr) { 4262 void LCodeGen::DoCallGlobal(LCallGlobal* instr) {
4265 ASSERT(ToRegister(instr->context()).is(esi)); 4263 ASSERT(ToRegister(instr->context()).is(esi));
4266 ASSERT(ToRegister(instr->result()).is(eax)); 4264 ASSERT(ToRegister(instr->result()).is(eax));
4267 4265
4268 int arity = instr->arity(); 4266 int arity = instr->arity();
4269 RelocInfo::Mode mode = RelocInfo::CODE_TARGET_CONTEXT;
4270 Handle<Code> ic = 4267 Handle<Code> ic =
4271 isolate()->stub_cache()->ComputeCallInitialize(arity, mode); 4268 isolate()->stub_cache()->ComputeCallInitialize(arity, CONTEXTUAL);
4272 __ mov(ecx, instr->name()); 4269 __ mov(ecx, instr->name());
4273 CallCode(ic, mode, instr); 4270 CallCode(ic, RelocInfo::CODE_TARGET, instr);
4274 } 4271 }
4275 4272
4276 4273
4277 void LCodeGen::DoCallKnownGlobal(LCallKnownGlobal* instr) { 4274 void LCodeGen::DoCallKnownGlobal(LCallKnownGlobal* instr) {
4278 ASSERT(ToRegister(instr->result()).is(eax)); 4275 ASSERT(ToRegister(instr->result()).is(eax));
4279 CallKnownFunction(instr->hydrogen()->target(), 4276 CallKnownFunction(instr->hydrogen()->target(),
4280 instr->hydrogen()->formal_parameter_count(), 4277 instr->hydrogen()->formal_parameter_count(),
4281 instr->arity(), 4278 instr->arity(),
4282 instr, 4279 instr,
4283 CALL_AS_FUNCTION, 4280 CALL_AS_FUNCTION,
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
4495 } 4492 }
4496 } 4493 }
4497 4494
4498 4495
4499 void LCodeGen::DoStoreNamedGeneric(LStoreNamedGeneric* instr) { 4496 void LCodeGen::DoStoreNamedGeneric(LStoreNamedGeneric* instr) {
4500 ASSERT(ToRegister(instr->context()).is(esi)); 4497 ASSERT(ToRegister(instr->context()).is(esi));
4501 ASSERT(ToRegister(instr->object()).is(edx)); 4498 ASSERT(ToRegister(instr->object()).is(edx));
4502 ASSERT(ToRegister(instr->value()).is(eax)); 4499 ASSERT(ToRegister(instr->value()).is(eax));
4503 4500
4504 __ mov(ecx, instr->name()); 4501 __ mov(ecx, instr->name());
4505 Handle<Code> ic = (instr->strict_mode_flag() == kStrictMode) 4502 Handle<Code> ic = StoreIC::initialize_stub(isolate(),
4506 ? isolate()->builtins()->StoreIC_Initialize_Strict() 4503 instr->strict_mode_flag(),
4507 : isolate()->builtins()->StoreIC_Initialize(); 4504 NOT_CONTEXTUAL);
4508 CallCode(ic, RelocInfo::CODE_TARGET, instr); 4505 CallCode(ic, RelocInfo::CODE_TARGET, instr);
4509 } 4506 }
4510 4507
4511 4508
4512 void LCodeGen::ApplyCheckIf(Condition cc, LBoundsCheck* check) { 4509 void LCodeGen::ApplyCheckIf(Condition cc, LBoundsCheck* check) {
4513 if (FLAG_debug_code && check->hydrogen()->skip_check()) { 4510 if (FLAG_debug_code && check->hydrogen()->skip_check()) {
4514 Label done; 4511 Label done;
4515 __ j(NegateCondition(cc), &done, Label::kNear); 4512 __ j(NegateCondition(cc), &done, Label::kNear);
4516 __ int3(); 4513 __ int3();
4517 __ bind(&done); 4514 __ bind(&done);
(...skipping 1851 matching lines...) Expand 10 before | Expand all | Expand 10 after
6369 FixedArray::kHeaderSize - kPointerSize)); 6366 FixedArray::kHeaderSize - kPointerSize));
6370 __ bind(&done); 6367 __ bind(&done);
6371 } 6368 }
6372 6369
6373 6370
6374 #undef __ 6371 #undef __
6375 6372
6376 } } // namespace v8::internal 6373 } } // namespace v8::internal
6377 6374
6378 #endif // V8_TARGET_ARCH_IA32 6375 #endif // V8_TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « src/ia32/ic-ia32.cc ('k') | src/ic.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698