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

Side by Side Diff: src/stub-cache-ia32.cc

Issue 7431: Addressed review comment by Kasper:... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 12 years, 2 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/stub-cache-arm.cc ('k') | no next file » | 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-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 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 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 Register receiver, 231 Register receiver,
232 Register scratch1, 232 Register scratch1,
233 Register scratch2, 233 Register scratch2,
234 Label* miss_label) { 234 Label* miss_label) {
235 __ TryGetFunctionPrototype(receiver, scratch1, scratch2, miss_label); 235 __ TryGetFunctionPrototype(receiver, scratch1, scratch2, miss_label);
236 __ mov(eax, Operand(scratch1)); 236 __ mov(eax, Operand(scratch1));
237 __ ret(0); 237 __ ret(0);
238 } 238 }
239 239
240 240
241 // Load a fast property out of a holder object (src). In-object properties
242 // are loaded directly otherwise the property is loaded from the properties
243 // fixed array.
244 void StubCompiler::GenerateFastPropertyLoad(MacroAssembler* masm,
245 Register dst, Register src,
246 JSObject* holder, int index) {
247 // Adjust for the number of properties stored in the holder.
248 index -= holder->map()->inobject_properties();
249 if (index < 0) {
250 // Get the property straight out of the holder.
251 int offset = holder->map()->instance_size() + (index * kPointerSize);
252 __ mov(dst, FieldOperand(src, offset));
253 } else {
254 // Calculate the offset into the properties array.
255 int offset = index * kPointerSize + Array::kHeaderSize;
256 __ mov(dst, FieldOperand(src, JSObject::kPropertiesOffset));
257 __ mov(dst, FieldOperand(dst, offset));
258 }
259 }
260
261
241 void StubCompiler::GenerateLoadField(MacroAssembler* masm, 262 void StubCompiler::GenerateLoadField(MacroAssembler* masm,
242 JSObject* object, 263 JSObject* object,
243 JSObject* holder, 264 JSObject* holder,
244 Register receiver, 265 Register receiver,
245 Register scratch1, 266 Register scratch1,
246 Register scratch2, 267 Register scratch2,
247 int index, 268 int index,
248 Label* miss_label) { 269 Label* miss_label) {
249 // Check that the receiver isn't a smi. 270 // Check that the receiver isn't a smi.
250 __ test(receiver, Immediate(kSmiTagMask)); 271 __ test(receiver, Immediate(kSmiTagMask));
251 __ j(zero, miss_label, not_taken); 272 __ j(zero, miss_label, not_taken);
252 273
253 // Check that the maps haven't changed. 274 // Check that the maps haven't changed.
254 Register reg = 275 Register reg =
255 __ CheckMaps(object, receiver, holder, scratch1, scratch2, miss_label); 276 __ CheckMaps(object, receiver, holder, scratch1, scratch2, miss_label);
256 277
257 // Adjust for the number of properties stored in the holder. 278 // Get the value from the properties.
258 index -= holder->map()->inobject_properties(); 279 GenerateFastPropertyLoad(masm, eax, reg, holder, index);
259 if (index < 0) {
260 // Get the property straight out of the holder.
261 int offset = holder->map()->instance_size() + (index * kPointerSize);
262 __ mov(eax, FieldOperand(reg, offset));
263 } else {
264 // Get the properties array of the holder.
265 __ mov(scratch1, FieldOperand(reg, JSObject::kPropertiesOffset));
266 // Return the value from the properties array.
267 int offset = index * kPointerSize + Array::kHeaderSize;
268 __ mov(eax, FieldOperand(scratch1, offset));
269 }
270 __ ret(0); 280 __ ret(0);
271 } 281 }
272 282
273 283
274 void StubCompiler::GenerateLoadCallback(MacroAssembler* masm, 284 void StubCompiler::GenerateLoadCallback(MacroAssembler* masm,
275 JSObject* object, 285 JSObject* object,
276 JSObject* holder, 286 JSObject* holder,
277 Register receiver, 287 Register receiver,
278 Register name, 288 Register name,
279 Register scratch1, 289 Register scratch1,
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 __ mov(edx, Operand(esp, (argc + 1) * kPointerSize)); 502 __ mov(edx, Operand(esp, (argc + 1) * kPointerSize));
493 503
494 // Check that the receiver isn't a smi. 504 // Check that the receiver isn't a smi.
495 __ test(edx, Immediate(kSmiTagMask)); 505 __ test(edx, Immediate(kSmiTagMask));
496 __ j(zero, &miss, not_taken); 506 __ j(zero, &miss, not_taken);
497 507
498 // Do the right check and compute the holder register. 508 // Do the right check and compute the holder register.
499 Register reg = 509 Register reg =
500 __ CheckMaps(JSObject::cast(object), edx, holder, ebx, ecx, &miss); 510 __ CheckMaps(JSObject::cast(object), edx, holder, ebx, ecx, &miss);
501 511
502 // Adjust for the number of properties stored in the holder. 512 GenerateFastPropertyLoad(masm(), edi, reg, holder, index);
503 index -= holder->map()->inobject_properties();
504 if (index < 0) {
505 // Get the property straight out of the holder.
506 int offset = holder->map()->instance_size() + (index * kPointerSize);
507 __ mov(edi, FieldOperand(reg, offset));
508 } else {
509 // Get the properties array of the holder and get the function from
510 // the field.
511 int offset = index * kPointerSize + Array::kHeaderSize;
512 __ mov(edi, FieldOperand(reg, JSObject::kPropertiesOffset));
513 __ mov(edi, FieldOperand(edi, offset));
514 }
515 513
516 // Check that the function really is a function. 514 // Check that the function really is a function.
517 __ test(edi, Immediate(kSmiTagMask)); 515 __ test(edi, Immediate(kSmiTagMask));
518 __ j(zero, &miss, not_taken); 516 __ j(zero, &miss, not_taken);
519 __ mov(ebx, FieldOperand(edi, HeapObject::kMapOffset)); // get the map 517 __ mov(ebx, FieldOperand(edi, HeapObject::kMapOffset)); // get the map
520 __ movzx_b(ebx, FieldOperand(ebx, Map::kInstanceTypeOffset)); 518 __ movzx_b(ebx, FieldOperand(ebx, Map::kInstanceTypeOffset));
521 __ cmp(ebx, JS_FUNCTION_TYPE); 519 __ cmp(ebx, JS_FUNCTION_TYPE);
522 __ j(not_equal, &miss, not_taken); 520 __ j(not_equal, &miss, not_taken);
523 521
524 // Invoke the function. 522 // Invoke the function.
(...skipping 721 matching lines...) Expand 10 before | Expand all | Expand 10 after
1246 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); 1244 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC);
1247 1245
1248 // Return the generated code. 1246 // Return the generated code.
1249 return GetCode(CALLBACKS); 1247 return GetCode(CALLBACKS);
1250 } 1248 }
1251 1249
1252 1250
1253 #undef __ 1251 #undef __
1254 1252
1255 } } // namespace v8::internal 1253 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/stub-cache-arm.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698