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

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

Issue 1758003: Changed inlined property load detection on ARM... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 10 years, 8 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/arm/assembler-arm.h ('k') | src/arm/codegen-arm.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 (c) 1994-2006 Sun Microsystems Inc. 1 // Copyright (c) 1994-2006 Sun Microsystems Inc.
2 // All Rights Reserved. 2 // All Rights Reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions 5 // modification, are permitted provided that the following conditions
6 // are met: 6 // are met:
7 // 7 //
8 // - Redistributions of source code must retain the above copyright notice, 8 // - Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer. 9 // this list of conditions and the following disclaimer.
10 // 10 //
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 last_const_pool_end_ = 0; 311 last_const_pool_end_ = 0;
312 last_bound_pos_ = 0; 312 last_bound_pos_ = 0;
313 current_statement_position_ = RelocInfo::kNoPosition; 313 current_statement_position_ = RelocInfo::kNoPosition;
314 current_position_ = RelocInfo::kNoPosition; 314 current_position_ = RelocInfo::kNoPosition;
315 written_statement_position_ = current_statement_position_; 315 written_statement_position_ = current_statement_position_;
316 written_position_ = current_position_; 316 written_position_ = current_position_;
317 } 317 }
318 318
319 319
320 Assembler::~Assembler() { 320 Assembler::~Assembler() {
321 ASSERT(const_pool_blocked_nesting_ == 0);
321 if (own_buffer_) { 322 if (own_buffer_) {
322 if (spare_buffer_ == NULL && buffer_size_ == kMinimalBufferSize) { 323 if (spare_buffer_ == NULL && buffer_size_ == kMinimalBufferSize) {
323 spare_buffer_ = buffer_; 324 spare_buffer_ = buffer_;
324 } else { 325 } else {
325 DeleteArray(buffer_); 326 DeleteArray(buffer_);
326 } 327 }
327 } 328 }
328 } 329 }
329 330
330 331
(...skipping 11 matching lines...) Expand all
342 343
343 344
344 void Assembler::Align(int m) { 345 void Assembler::Align(int m) {
345 ASSERT(m >= 4 && IsPowerOf2(m)); 346 ASSERT(m >= 4 && IsPowerOf2(m));
346 while ((pc_offset() & (m - 1)) != 0) { 347 while ((pc_offset() & (m - 1)) != 0) {
347 nop(); 348 nop();
348 } 349 }
349 } 350 }
350 351
351 352
352 bool Assembler::IsB(Instr instr) { 353 bool Assembler::IsNop(Instr instr, int type) {
354 // Check for mov rx, rx.
355 ASSERT(0 <= type && type <= 14); // mov pc, pc is not a nop.
356 return instr == (al | 13*B21 | type*B12 | type);
357 }
358
359
360 bool Assembler::IsBranch(Instr instr) {
353 return (instr & (B27 | B25)) == (B27 | B25); 361 return (instr & (B27 | B25)) == (B27 | B25);
354 } 362 }
355 363
356 364
357 int Assembler::GetBOffset(Instr instr) { 365 int Assembler::GetBranchOffset(Instr instr) {
358 ASSERT(IsB(instr)); 366 ASSERT(IsBranch(instr));
359 // Take the jump offset in the lower 24 bits, sign extend it and multiply it 367 // Take the jump offset in the lower 24 bits, sign extend it and multiply it
360 // with 4 to get the offset in bytes. 368 // with 4 to get the offset in bytes.
361 return ((instr & Imm24Mask) << 8) >> 6; 369 return ((instr & Imm24Mask) << 8) >> 6;
362 } 370 }
363 371
364 372
365 bool Assembler::IsLdrRegisterImmediate(Instr instr) { 373 bool Assembler::IsLdrRegisterImmediate(Instr instr) {
366 return (instr & (B27 | B26 | B25 | B22 | B20)) == (B26 | B20); 374 return (instr & (B27 | B26 | B25 | B22 | B20)) == (B26 | B20);
367 } 375 }
368 376
(...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after
934 void Assembler::orr(Register dst, Register src1, const Operand& src2, 942 void Assembler::orr(Register dst, Register src1, const Operand& src2,
935 SBit s, Condition cond) { 943 SBit s, Condition cond) {
936 addrmod1(cond | 12*B21 | s, src1, dst, src2); 944 addrmod1(cond | 12*B21 | s, src1, dst, src2);
937 } 945 }
938 946
939 947
940 void Assembler::mov(Register dst, const Operand& src, SBit s, Condition cond) { 948 void Assembler::mov(Register dst, const Operand& src, SBit s, Condition cond) {
941 if (dst.is(pc)) { 949 if (dst.is(pc)) {
942 WriteRecordedPositions(); 950 WriteRecordedPositions();
943 } 951 }
952 // Don't allow nop instructions in the form mov rn, rn to be generated using
953 // the mov instruction. They must be generated using nop(int)
954 // pseudo instructions.
955 ASSERT(!(src.is_reg() && src.rm().is(dst) && s == LeaveCC && cond == al));
944 addrmod1(cond | 13*B21 | s, r0, dst, src); 956 addrmod1(cond | 13*B21 | s, r0, dst, src);
945 } 957 }
946 958
947 959
948 void Assembler::bic(Register dst, Register src1, const Operand& src2, 960 void Assembler::bic(Register dst, Register src1, const Operand& src2,
949 SBit s, Condition cond) { 961 SBit s, Condition cond) {
950 addrmod1(cond | 14*B21 | s, src1, dst, src2); 962 addrmod1(cond | 14*B21 | s, src1, dst, src2);
951 } 963 }
952 964
953 965
(...skipping 769 matching lines...) Expand 10 before | Expand all | Expand 10 after
1723 // Instruction details available in ARM DDI 0406A, A8-652. 1735 // Instruction details available in ARM DDI 0406A, A8-652.
1724 // cond(31-28) | 1110 (27-24) | 1111(23-20)| 0001 (19-16) | 1736 // cond(31-28) | 1110 (27-24) | 1111(23-20)| 0001 (19-16) |
1725 // Rt(15-12) | 1010 (11-8) | 0(7) | 00 (6-5) | 1(4) | 0000(3-0) 1737 // Rt(15-12) | 1010 (11-8) | 0(7) | 00 (6-5) | 1(4) | 0000(3-0)
1726 ASSERT(CpuFeatures::IsEnabled(VFP3)); 1738 ASSERT(CpuFeatures::IsEnabled(VFP3));
1727 emit(cond | 0xE*B24 | 0xF*B20 | B16 | 1739 emit(cond | 0xE*B24 | 0xF*B20 | B16 |
1728 dst.code()*B12 | 0xA*B8 | B4); 1740 dst.code()*B12 | 0xA*B8 | B4);
1729 } 1741 }
1730 1742
1731 1743
1732 // Pseudo instructions. 1744 // Pseudo instructions.
1745 void Assembler::nop(int type) {
1746 // This is mov rx, rx.
1747 ASSERT(0 <= type && type <= 14); // mov pc, pc is not a nop.
1748 emit(al | 13*B21 | type*B12 | type);
1749 }
1750
1751
1733 void Assembler::lea(Register dst, 1752 void Assembler::lea(Register dst,
1734 const MemOperand& x, 1753 const MemOperand& x,
1735 SBit s, 1754 SBit s,
1736 Condition cond) { 1755 Condition cond) {
1737 int am = x.am_; 1756 int am = x.am_;
1738 if (!x.rm_.is_valid()) { 1757 if (!x.rm_.is_valid()) {
1739 // Immediate offset. 1758 // Immediate offset.
1740 if ((am & P) == 0) // post indexing 1759 if ((am & P) == 0) // post indexing
1741 mov(dst, Operand(x.rn_), s, cond); 1760 mov(dst, Operand(x.rn_), s, cond);
1742 else if ((am & U) == 0) // negative indexing 1761 else if ((am & U) == 0) // negative indexing
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
2001 bind(&after_pool); 2020 bind(&after_pool);
2002 } 2021 }
2003 2022
2004 // Since a constant pool was just emitted, move the check offset forward by 2023 // Since a constant pool was just emitted, move the check offset forward by
2005 // the standard interval. 2024 // the standard interval.
2006 next_buffer_check_ = pc_offset() + kCheckConstInterval; 2025 next_buffer_check_ = pc_offset() + kCheckConstInterval;
2007 } 2026 }
2008 2027
2009 2028
2010 } } // namespace v8::internal 2029 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/arm/assembler-arm.h ('k') | src/arm/codegen-arm.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698