OLD | NEW |
1 // Copyright 2009 the V8 project authors. All rights reserved. | 1 // Copyright 2009 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 755 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
766 | 766 |
767 void Assembler::decq(const Operand& dst) { | 767 void Assembler::decq(const Operand& dst) { |
768 EnsureSpace ensure_space(this); | 768 EnsureSpace ensure_space(this); |
769 last_pc_ = pc_; | 769 last_pc_ = pc_; |
770 emit_rex_64(dst); | 770 emit_rex_64(dst); |
771 emit(0xFF); | 771 emit(0xFF); |
772 emit_operand(1, dst); | 772 emit_operand(1, dst); |
773 } | 773 } |
774 | 774 |
775 | 775 |
| 776 void Assembler::decl(Register dst) { |
| 777 EnsureSpace ensure_space(this); |
| 778 last_pc_ = pc_; |
| 779 emit_optional_rex_32(dst); |
| 780 emit(0xFF); |
| 781 emit_modrm(0x1, dst); |
| 782 } |
| 783 |
| 784 |
776 void Assembler::decl(const Operand& dst) { | 785 void Assembler::decl(const Operand& dst) { |
777 EnsureSpace ensure_space(this); | 786 EnsureSpace ensure_space(this); |
778 last_pc_ = pc_; | 787 last_pc_ = pc_; |
779 emit_optional_rex_32(dst); | 788 emit_optional_rex_32(dst); |
780 emit(0xFF); | 789 emit(0xFF); |
781 emit_operand(1, dst); | 790 emit_operand(1, dst); |
782 } | 791 } |
783 | 792 |
784 | 793 |
785 void Assembler::enter(Immediate size) { | 794 void Assembler::enter(Immediate size) { |
(...skipping 728 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1514 emitq(reinterpret_cast<uintptr_t>(dst), mode); | 1523 emitq(reinterpret_cast<uintptr_t>(dst), mode); |
1515 } | 1524 } |
1516 | 1525 |
1517 | 1526 |
1518 void Assembler::store_rax(ExternalReference ref) { | 1527 void Assembler::store_rax(ExternalReference ref) { |
1519 store_rax(ref.address(), RelocInfo::EXTERNAL_REFERENCE); | 1528 store_rax(ref.address(), RelocInfo::EXTERNAL_REFERENCE); |
1520 } | 1529 } |
1521 | 1530 |
1522 | 1531 |
1523 void Assembler::testb(Register reg, Immediate mask) { | 1532 void Assembler::testb(Register reg, Immediate mask) { |
1524 ASSERT(is_int8(mask.value_)); | 1533 ASSERT(is_int8(mask.value_) || is_uint8(mask.value_)); |
1525 EnsureSpace ensure_space(this); | 1534 EnsureSpace ensure_space(this); |
1526 last_pc_ = pc_; | 1535 last_pc_ = pc_; |
1527 if (reg.is(rax)) { | 1536 if (reg.is(rax)) { |
1528 emit(0xA8); | 1537 emit(0xA8); |
1529 emit(mask.value_); // Low byte emitted. | 1538 emit(mask.value_); // Low byte emitted. |
1530 } else { | 1539 } else { |
1531 if (reg.code() > 3) { | 1540 if (reg.code() > 3) { |
1532 // Register is not one of al, bl, cl, dl. Its encoding needs REX. | 1541 // Register is not one of al, bl, cl, dl. Its encoding needs REX. |
1533 emit_rex_32(reg); | 1542 emit_rex_32(reg); |
1534 } | 1543 } |
1535 emit(0xF6); | 1544 emit(0xF6); |
1536 emit_modrm(0x0, reg); | 1545 emit_modrm(0x0, reg); |
1537 emit(mask.value_); // Low byte emitted. | 1546 emit(mask.value_); // Low byte emitted. |
1538 } | 1547 } |
1539 } | 1548 } |
1540 | 1549 |
1541 | 1550 |
1542 void Assembler::testb(const Operand& op, Immediate mask) { | 1551 void Assembler::testb(const Operand& op, Immediate mask) { |
1543 ASSERT(is_int8(mask.value_)); | 1552 ASSERT(is_int8(mask.value_) || is_uint8(mask.value_)); |
1544 EnsureSpace ensure_space(this); | 1553 EnsureSpace ensure_space(this); |
1545 last_pc_ = pc_; | 1554 last_pc_ = pc_; |
1546 emit_optional_rex_32(rax, op); | 1555 emit_optional_rex_32(rax, op); |
1547 emit(0xF6); | 1556 emit(0xF6); |
1548 emit_operand(rax, op); // Operation code 0 | 1557 emit_operand(rax, op); // Operation code 0 |
1549 emit(mask.value_); // Low byte emitted. | 1558 emit(mask.value_); // Low byte emitted. |
1550 } | 1559 } |
1551 | 1560 |
1552 | 1561 |
1553 void Assembler::testl(Register dst, Register src) { | 1562 void Assembler::testl(Register dst, Register src) { |
(...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2176 RecordRelocInfo(RelocInfo::POSITION, current_position_); | 2185 RecordRelocInfo(RelocInfo::POSITION, current_position_); |
2177 written_position_ = current_position_; | 2186 written_position_ = current_position_; |
2178 } | 2187 } |
2179 } | 2188 } |
2180 | 2189 |
2181 | 2190 |
2182 const int RelocInfo::kApplyMask = 1 << RelocInfo::INTERNAL_REFERENCE; | 2191 const int RelocInfo::kApplyMask = 1 << RelocInfo::INTERNAL_REFERENCE; |
2183 | 2192 |
2184 | 2193 |
2185 } } // namespace v8::internal | 2194 } } // namespace v8::internal |
OLD | NEW |