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

Side by Side Diff: src/arm/macro-assembler-arm.cc

Issue 260003006: Added a Isolate* parameter to Serializer::enabled(). (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 7 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
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 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 blx(target, cond); 93 blx(target, cond);
94 ASSERT_EQ(CallSize(target, cond), SizeOfCodeGeneratedSince(&start)); 94 ASSERT_EQ(CallSize(target, cond), SizeOfCodeGeneratedSince(&start));
95 } 95 }
96 96
97 97
98 int MacroAssembler::CallSize( 98 int MacroAssembler::CallSize(
99 Address target, RelocInfo::Mode rmode, Condition cond) { 99 Address target, RelocInfo::Mode rmode, Condition cond) {
100 int size = 2 * kInstrSize; 100 int size = 2 * kInstrSize;
101 Instr mov_instr = cond | MOV | LeaveCC; 101 Instr mov_instr = cond | MOV | LeaveCC;
102 intptr_t immediate = reinterpret_cast<intptr_t>(target); 102 intptr_t immediate = reinterpret_cast<intptr_t>(target);
103 if (!Operand(immediate, rmode).is_single_instruction(this, mov_instr)) { 103 if (!Operand(immediate, rmode).is_single_instruction(isolate(),
104 this,
105 mov_instr)) {
104 size += kInstrSize; 106 size += kInstrSize;
105 } 107 }
106 return size; 108 return size;
107 } 109 }
108 110
109 111
110 int MacroAssembler::CallStubSize( 112 int MacroAssembler::CallStubSize(
111 CodeStub* stub, TypeFeedbackId ast_id, Condition cond) { 113 CodeStub* stub, TypeFeedbackId ast_id, Condition cond) {
112 return CallSize(stub->GetCode(), RelocInfo::CODE_TARGET, ast_id, cond); 114 return CallSize(stub->GetCode(), RelocInfo::CODE_TARGET, ast_id, cond);
113 } 115 }
114 116
115 117
116 int MacroAssembler::CallSizeNotPredictableCodeSize( 118 int MacroAssembler::CallSizeNotPredictableCodeSize(Isolate* isolate,
117 Address target, RelocInfo::Mode rmode, Condition cond) { 119 Address target,
120 RelocInfo::Mode rmode,
121 Condition cond) {
118 int size = 2 * kInstrSize; 122 int size = 2 * kInstrSize;
119 Instr mov_instr = cond | MOV | LeaveCC; 123 Instr mov_instr = cond | MOV | LeaveCC;
120 intptr_t immediate = reinterpret_cast<intptr_t>(target); 124 intptr_t immediate = reinterpret_cast<intptr_t>(target);
121 if (!Operand(immediate, rmode).is_single_instruction(NULL, mov_instr)) { 125 if (!Operand(immediate, rmode).is_single_instruction(isolate,
126 NULL,
127 mov_instr)) {
122 size += kInstrSize; 128 size += kInstrSize;
123 } 129 }
124 return size; 130 return size;
125 } 131 }
126 132
127 133
128 void MacroAssembler::Call(Address target, 134 void MacroAssembler::Call(Address target,
129 RelocInfo::Mode rmode, 135 RelocInfo::Mode rmode,
130 Condition cond, 136 Condition cond,
131 TargetAddressStorageMode mode) { 137 TargetAddressStorageMode mode) {
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 void MacroAssembler::Move(DwVfpRegister dst, DwVfpRegister src) { 277 void MacroAssembler::Move(DwVfpRegister dst, DwVfpRegister src) {
272 if (!dst.is(src)) { 278 if (!dst.is(src)) {
273 vmov(dst, src); 279 vmov(dst, src);
274 } 280 }
275 } 281 }
276 282
277 283
278 void MacroAssembler::And(Register dst, Register src1, const Operand& src2, 284 void MacroAssembler::And(Register dst, Register src1, const Operand& src2,
279 Condition cond) { 285 Condition cond) {
280 if (!src2.is_reg() && 286 if (!src2.is_reg() &&
281 !src2.must_output_reloc_info(this) && 287 !src2.must_output_reloc_info(isolate(), this) &&
282 src2.immediate() == 0) { 288 src2.immediate() == 0) {
283 mov(dst, Operand::Zero(), LeaveCC, cond); 289 mov(dst, Operand::Zero(), LeaveCC, cond);
284 } else if (!src2.is_single_instruction(this) && 290 } else if (!src2.is_single_instruction(isolate(), this) &&
285 !src2.must_output_reloc_info(this) && 291 !src2.must_output_reloc_info(isolate(), this) &&
286 CpuFeatures::IsSupported(ARMv7) && 292 CpuFeatures::IsSupported(ARMv7) &&
287 IsPowerOf2(src2.immediate() + 1)) { 293 IsPowerOf2(src2.immediate() + 1)) {
288 ubfx(dst, src1, 0, 294 ubfx(dst, src1, 0,
289 WhichPowerOf2(static_cast<uint32_t>(src2.immediate()) + 1), cond); 295 WhichPowerOf2(static_cast<uint32_t>(src2.immediate()) + 1), cond);
290 } else { 296 } else {
291 and_(dst, src1, src2, LeaveCC, cond); 297 and_(dst, src1, src2, LeaveCC, cond);
292 } 298 }
293 } 299 }
294 300
295 301
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after
650 656
651 void MacroAssembler::PopSafepointRegisters() { 657 void MacroAssembler::PopSafepointRegisters() {
652 const int num_unsaved = kNumSafepointRegisters - kNumSafepointSavedRegisters; 658 const int num_unsaved = kNumSafepointRegisters - kNumSafepointSavedRegisters;
653 ldm(ia_w, sp, kSafepointSavedRegisters); 659 ldm(ia_w, sp, kSafepointSavedRegisters);
654 add(sp, sp, Operand(num_unsaved * kPointerSize)); 660 add(sp, sp, Operand(num_unsaved * kPointerSize));
655 } 661 }
656 662
657 663
658 void MacroAssembler::PushSafepointRegistersAndDoubles() { 664 void MacroAssembler::PushSafepointRegistersAndDoubles() {
659 // Number of d-regs not known at snapshot time. 665 // Number of d-regs not known at snapshot time.
660 ASSERT(!Serializer::enabled()); 666 ASSERT(!Serializer::enabled(isolate()));
661 PushSafepointRegisters(); 667 PushSafepointRegisters();
662 // Only save allocatable registers. 668 // Only save allocatable registers.
663 ASSERT(kScratchDoubleReg.is(d15) && kDoubleRegZero.is(d14)); 669 ASSERT(kScratchDoubleReg.is(d15) && kDoubleRegZero.is(d14));
664 ASSERT(DwVfpRegister::NumReservedRegisters() == 2); 670 ASSERT(DwVfpRegister::NumReservedRegisters() == 2);
665 if (CpuFeatures::IsSupported(VFP32DREGS)) { 671 if (CpuFeatures::IsSupported(VFP32DREGS)) {
666 vstm(db_w, sp, d16, d31); 672 vstm(db_w, sp, d16, d31);
667 } 673 }
668 vstm(db_w, sp, d0, d13); 674 vstm(db_w, sp, d0, d13);
669 } 675 }
670 676
671 677
672 void MacroAssembler::PopSafepointRegistersAndDoubles() { 678 void MacroAssembler::PopSafepointRegistersAndDoubles() {
673 // Number of d-regs not known at snapshot time. 679 // Number of d-regs not known at snapshot time.
674 ASSERT(!Serializer::enabled()); 680 ASSERT(!Serializer::enabled(isolate()));
675 // Only save allocatable registers. 681 // Only save allocatable registers.
676 ASSERT(kScratchDoubleReg.is(d15) && kDoubleRegZero.is(d14)); 682 ASSERT(kScratchDoubleReg.is(d15) && kDoubleRegZero.is(d14));
677 ASSERT(DwVfpRegister::NumReservedRegisters() == 2); 683 ASSERT(DwVfpRegister::NumReservedRegisters() == 2);
678 vldm(ia_w, sp, d0, d13); 684 vldm(ia_w, sp, d0, d13);
679 if (CpuFeatures::IsSupported(VFP32DREGS)) { 685 if (CpuFeatures::IsSupported(VFP32DREGS)) {
680 vldm(ia_w, sp, d16, d31); 686 vldm(ia_w, sp, d16, d31);
681 } 687 }
682 PopSafepointRegisters(); 688 PopSafepointRegisters();
683 } 689 }
684 690
(...skipping 21 matching lines...) Expand all
706 } 712 }
707 713
708 714
709 MemOperand MacroAssembler::SafepointRegisterSlot(Register reg) { 715 MemOperand MacroAssembler::SafepointRegisterSlot(Register reg) {
710 return MemOperand(sp, SafepointRegisterStackIndex(reg.code()) * kPointerSize); 716 return MemOperand(sp, SafepointRegisterStackIndex(reg.code()) * kPointerSize);
711 } 717 }
712 718
713 719
714 MemOperand MacroAssembler::SafepointRegistersAndDoublesSlot(Register reg) { 720 MemOperand MacroAssembler::SafepointRegistersAndDoublesSlot(Register reg) {
715 // Number of d-regs not known at snapshot time. 721 // Number of d-regs not known at snapshot time.
716 ASSERT(!Serializer::enabled()); 722 ASSERT(!Serializer::enabled(isolate()));
717 // General purpose registers are pushed last on the stack. 723 // General purpose registers are pushed last on the stack.
718 int doubles_size = DwVfpRegister::NumAllocatableRegisters() * kDoubleSize; 724 int doubles_size = DwVfpRegister::NumAllocatableRegisters() * kDoubleSize;
719 int register_offset = SafepointRegisterStackIndex(reg.code()) * kPointerSize; 725 int register_offset = SafepointRegisterStackIndex(reg.code()) * kPointerSize;
720 return MemOperand(sp, doubles_size + register_offset); 726 return MemOperand(sp, doubles_size + register_offset);
721 } 727 }
722 728
723 729
724 void MacroAssembler::Ldrd(Register dst1, Register dst2, 730 void MacroAssembler::Ldrd(Register dst1, Register dst2,
725 const MemOperand& src, Condition cond) { 731 const MemOperand& src, Condition cond) {
726 ASSERT(src.rm().is(no_reg)); 732 ASSERT(src.rm().is(no_reg));
(...skipping 1033 matching lines...) Expand 10 before | Expand all | Expand 10 after
1760 Condition cond = al; 1766 Condition cond = al;
1761 int shift = 0; 1767 int shift = 0;
1762 while (object_size != 0) { 1768 while (object_size != 0) {
1763 if (((object_size >> shift) & 0x03) == 0) { 1769 if (((object_size >> shift) & 0x03) == 0) {
1764 shift += 2; 1770 shift += 2;
1765 } else { 1771 } else {
1766 int bits = object_size & (0xff << shift); 1772 int bits = object_size & (0xff << shift);
1767 object_size -= bits; 1773 object_size -= bits;
1768 shift += 8; 1774 shift += 8;
1769 Operand bits_operand(bits); 1775 Operand bits_operand(bits);
1770 ASSERT(bits_operand.is_single_instruction(this)); 1776 ASSERT(bits_operand.is_single_instruction(isolate(), this));
1771 add(scratch2, source, bits_operand, SetCC, cond); 1777 add(scratch2, source, bits_operand, SetCC, cond);
1772 source = scratch2; 1778 source = scratch2;
1773 cond = cc; 1779 cond = cc;
1774 } 1780 }
1775 } 1781 }
1776 b(cs, gc_required); 1782 b(cs, gc_required);
1777 cmp(scratch2, Operand(ip)); 1783 cmp(scratch2, Operand(ip));
1778 b(hi, gc_required); 1784 b(hi, gc_required);
1779 str(scratch2, MemOperand(topaddr)); 1785 str(scratch2, MemOperand(topaddr));
1780 1786
(...skipping 2304 matching lines...) Expand 10 before | Expand all | Expand 10 after
4085 sub(result, result, Operand(dividend)); 4091 sub(result, result, Operand(dividend));
4086 } 4092 }
4087 if (ms.shift() > 0) mov(result, Operand(result, ASR, ms.shift())); 4093 if (ms.shift() > 0) mov(result, Operand(result, ASR, ms.shift()));
4088 add(result, result, Operand(dividend, LSR, 31)); 4094 add(result, result, Operand(dividend, LSR, 31));
4089 } 4095 }
4090 4096
4091 4097
4092 } } // namespace v8::internal 4098 } } // namespace v8::internal
4093 4099
4094 #endif // V8_TARGET_ARCH_ARM 4100 #endif // V8_TARGET_ARCH_ARM
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698