OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #if V8_TARGET_ARCH_ARM | 7 #if V8_TARGET_ARCH_ARM |
8 | 8 |
9 #include "src/codegen.h" | 9 #include "src/codegen.h" |
10 #include "src/debug.h" | 10 #include "src/debug.h" |
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
365 // r1: constructor function | 365 // r1: constructor function |
366 // r2: initial map | 366 // r2: initial map |
367 __ CompareInstanceType(r2, r3, JS_FUNCTION_TYPE); | 367 __ CompareInstanceType(r2, r3, JS_FUNCTION_TYPE); |
368 __ b(eq, &rt_call); | 368 __ b(eq, &rt_call); |
369 | 369 |
370 if (!is_api_function) { | 370 if (!is_api_function) { |
371 Label allocate; | 371 Label allocate; |
372 MemOperand bit_field3 = FieldMemOperand(r2, Map::kBitField3Offset); | 372 MemOperand bit_field3 = FieldMemOperand(r2, Map::kBitField3Offset); |
373 // Check if slack tracking is enabled. | 373 // Check if slack tracking is enabled. |
374 __ ldr(r4, bit_field3); | 374 __ ldr(r4, bit_field3); |
375 __ DecodeField<Map::ConstructionCount>(r3, r4); | 375 __ DecodeField<Map::Counter>(r3, r4); |
376 __ cmp(r3, Operand(JSFunction::kNoSlackTracking)); | 376 __ cmp(r3, Operand(Map::kSlackTrackingCounterEnd)); |
377 __ b(eq, &allocate); | 377 __ b(lt, &allocate); |
378 // Decrease generous allocation count. | 378 // Decrease generous allocation count. |
379 __ sub(r4, r4, Operand(1 << Map::ConstructionCount::kShift)); | 379 __ sub(r4, r4, Operand(1 << Map::Counter::kShift)); |
380 __ str(r4, bit_field3); | 380 __ str(r4, bit_field3); |
381 __ cmp(r3, Operand(JSFunction::kFinishSlackTracking)); | 381 __ cmp(r3, Operand(Map::kSlackTrackingCounterEnd)); |
382 __ b(ne, &allocate); | 382 __ b(ne, &allocate); |
383 | 383 |
384 __ push(r1); | 384 __ push(r1); |
385 | 385 |
386 __ Push(r2, r1); // r1 = constructor | 386 __ Push(r2, r1); // r1 = constructor |
387 __ CallRuntime(Runtime::kFinalizeInstanceSize, 1); | 387 __ CallRuntime(Runtime::kFinalizeInstanceSize, 1); |
388 | 388 |
389 __ pop(r2); | 389 __ pop(r2); |
390 __ pop(r1); | 390 __ pop(r1); |
391 | 391 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
424 // r4: JSObject (not tagged) | 424 // r4: JSObject (not tagged) |
425 // r5: First in-object property of JSObject (not tagged) | 425 // r5: First in-object property of JSObject (not tagged) |
426 DCHECK_EQ(3 * kPointerSize, JSObject::kHeaderSize); | 426 DCHECK_EQ(3 * kPointerSize, JSObject::kHeaderSize); |
427 __ LoadRoot(r6, Heap::kUndefinedValueRootIndex); | 427 __ LoadRoot(r6, Heap::kUndefinedValueRootIndex); |
428 | 428 |
429 if (!is_api_function) { | 429 if (!is_api_function) { |
430 Label no_inobject_slack_tracking; | 430 Label no_inobject_slack_tracking; |
431 | 431 |
432 // Check if slack tracking is enabled. | 432 // Check if slack tracking is enabled. |
433 __ ldr(ip, FieldMemOperand(r2, Map::kBitField3Offset)); | 433 __ ldr(ip, FieldMemOperand(r2, Map::kBitField3Offset)); |
434 __ DecodeField<Map::ConstructionCount>(ip); | 434 __ DecodeField<Map::Counter>(ip); |
435 __ cmp(ip, Operand(JSFunction::kNoSlackTracking)); | 435 __ cmp(ip, Operand(Map::kSlackTrackingCounterEnd)); |
436 __ b(eq, &no_inobject_slack_tracking); | 436 __ b(lt, &no_inobject_slack_tracking); |
437 | 437 |
438 // Allocate object with a slack. | 438 // Allocate object with a slack. |
439 __ ldr(r0, FieldMemOperand(r2, Map::kInstanceSizesOffset)); | 439 __ ldr(r0, FieldMemOperand(r2, Map::kInstanceSizesOffset)); |
440 __ Ubfx(r0, r0, Map::kPreAllocatedPropertyFieldsByte * kBitsPerByte, | 440 __ Ubfx(r0, r0, Map::kPreAllocatedPropertyFieldsByte * kBitsPerByte, |
441 kBitsPerByte); | 441 kBitsPerByte); |
442 __ add(r0, r5, Operand(r0, LSL, kPointerSizeLog2)); | 442 __ add(r0, r5, Operand(r0, LSL, kPointerSizeLog2)); |
443 // r0: offset of first field after pre-allocated fields | 443 // r0: offset of first field after pre-allocated fields |
444 if (FLAG_debug_code) { | 444 if (FLAG_debug_code) { |
445 __ add(ip, r4, Operand(r3, LSL, kPointerSizeLog2)); // End of object. | 445 __ add(ip, r4, Operand(r3, LSL, kPointerSizeLog2)); // End of object. |
446 __ cmp(r0, ip); | 446 __ cmp(r0, ip); |
(...skipping 1097 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1544 __ bkpt(0); | 1544 __ bkpt(0); |
1545 } | 1545 } |
1546 } | 1546 } |
1547 | 1547 |
1548 | 1548 |
1549 #undef __ | 1549 #undef __ |
1550 | 1550 |
1551 } } // namespace v8::internal | 1551 } } // namespace v8::internal |
1552 | 1552 |
1553 #endif // V8_TARGET_ARCH_ARM | 1553 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |