| OLD | NEW |
| 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 1543 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1554 | 1554 |
| 1555 | 1555 |
| 1556 void Assembler::bind(Label* L) { | 1556 void Assembler::bind(Label* L) { |
| 1557 EnsureSpace ensure_space(this); | 1557 EnsureSpace ensure_space(this); |
| 1558 DCHECK(!L->is_bound()); // label can only be bound once | 1558 DCHECK(!L->is_bound()); // label can only be bound once |
| 1559 bind_to(L, pc_offset()); | 1559 bind_to(L, pc_offset()); |
| 1560 } | 1560 } |
| 1561 | 1561 |
| 1562 | 1562 |
| 1563 void Assembler::call(Label* L) { | 1563 void Assembler::call(Label* L) { |
| 1564 positions_recorder()->WriteRecordedPositions(); | |
| 1565 EnsureSpace ensure_space(this); | 1564 EnsureSpace ensure_space(this); |
| 1566 if (L->is_bound()) { | 1565 if (L->is_bound()) { |
| 1567 const int long_size = 5; | 1566 const int long_size = 5; |
| 1568 int offs = L->pos() - pc_offset(); | 1567 int offs = L->pos() - pc_offset(); |
| 1569 DCHECK(offs <= 0); | 1568 DCHECK(offs <= 0); |
| 1570 // 1110 1000 #32-bit disp. | 1569 // 1110 1000 #32-bit disp. |
| 1571 EMIT(0xE8); | 1570 EMIT(0xE8); |
| 1572 emit(offs - long_size); | 1571 emit(offs - long_size); |
| 1573 } else { | 1572 } else { |
| 1574 // 1110 1000 #32-bit disp. | 1573 // 1110 1000 #32-bit disp. |
| 1575 EMIT(0xE8); | 1574 EMIT(0xE8); |
| 1576 emit_disp(L, Displacement::OTHER); | 1575 emit_disp(L, Displacement::OTHER); |
| 1577 } | 1576 } |
| 1578 } | 1577 } |
| 1579 | 1578 |
| 1580 | 1579 |
| 1581 void Assembler::call(byte* entry, RelocInfo::Mode rmode) { | 1580 void Assembler::call(byte* entry, RelocInfo::Mode rmode) { |
| 1582 positions_recorder()->WriteRecordedPositions(); | |
| 1583 EnsureSpace ensure_space(this); | 1581 EnsureSpace ensure_space(this); |
| 1584 DCHECK(!RelocInfo::IsCodeTarget(rmode)); | 1582 DCHECK(!RelocInfo::IsCodeTarget(rmode)); |
| 1585 EMIT(0xE8); | 1583 EMIT(0xE8); |
| 1586 if (RelocInfo::IsRuntimeEntry(rmode)) { | 1584 if (RelocInfo::IsRuntimeEntry(rmode)) { |
| 1587 emit(reinterpret_cast<uint32_t>(entry), rmode); | 1585 emit(reinterpret_cast<uint32_t>(entry), rmode); |
| 1588 } else { | 1586 } else { |
| 1589 emit(entry - (pc_ + sizeof(int32_t)), rmode); | 1587 emit(entry - (pc_ + sizeof(int32_t)), rmode); |
| 1590 } | 1588 } |
| 1591 } | 1589 } |
| 1592 | 1590 |
| 1593 | 1591 |
| 1594 int Assembler::CallSize(const Operand& adr) { | 1592 int Assembler::CallSize(const Operand& adr) { |
| 1595 // Call size is 1 (opcode) + adr.len_ (operand). | 1593 // Call size is 1 (opcode) + adr.len_ (operand). |
| 1596 return 1 + adr.len_; | 1594 return 1 + adr.len_; |
| 1597 } | 1595 } |
| 1598 | 1596 |
| 1599 | 1597 |
| 1600 void Assembler::call(const Operand& adr) { | 1598 void Assembler::call(const Operand& adr) { |
| 1601 positions_recorder()->WriteRecordedPositions(); | |
| 1602 EnsureSpace ensure_space(this); | 1599 EnsureSpace ensure_space(this); |
| 1603 EMIT(0xFF); | 1600 EMIT(0xFF); |
| 1604 emit_operand(edx, adr); | 1601 emit_operand(edx, adr); |
| 1605 } | 1602 } |
| 1606 | 1603 |
| 1607 | 1604 |
| 1608 int Assembler::CallSize(Handle<Code> code, RelocInfo::Mode rmode) { | 1605 int Assembler::CallSize(Handle<Code> code, RelocInfo::Mode rmode) { |
| 1609 return 1 /* EMIT */ + sizeof(uint32_t) /* emit */; | 1606 return 1 /* EMIT */ + sizeof(uint32_t) /* emit */; |
| 1610 } | 1607 } |
| 1611 | 1608 |
| 1612 | 1609 |
| 1613 void Assembler::call(Handle<Code> code, | 1610 void Assembler::call(Handle<Code> code, |
| 1614 RelocInfo::Mode rmode, | 1611 RelocInfo::Mode rmode, |
| 1615 TypeFeedbackId ast_id) { | 1612 TypeFeedbackId ast_id) { |
| 1616 positions_recorder()->WriteRecordedPositions(); | |
| 1617 EnsureSpace ensure_space(this); | 1613 EnsureSpace ensure_space(this); |
| 1618 DCHECK(RelocInfo::IsCodeTarget(rmode) | 1614 DCHECK(RelocInfo::IsCodeTarget(rmode) |
| 1619 || rmode == RelocInfo::CODE_AGE_SEQUENCE); | 1615 || rmode == RelocInfo::CODE_AGE_SEQUENCE); |
| 1620 EMIT(0xE8); | 1616 EMIT(0xE8); |
| 1621 emit(code, rmode, ast_id); | 1617 emit(code, rmode, ast_id); |
| 1622 } | 1618 } |
| 1623 | 1619 |
| 1624 | 1620 |
| 1625 void Assembler::jmp(Label* L, Label::Distance distance) { | 1621 void Assembler::jmp(Label* L, Label::Distance distance) { |
| 1626 EnsureSpace ensure_space(this); | 1622 EnsureSpace ensure_space(this); |
| (...skipping 1479 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3106 fflush(coverage_log); | 3102 fflush(coverage_log); |
| 3107 } | 3103 } |
| 3108 } | 3104 } |
| 3109 | 3105 |
| 3110 #endif | 3106 #endif |
| 3111 | 3107 |
| 3112 } // namespace internal | 3108 } // namespace internal |
| 3113 } // namespace v8 | 3109 } // namespace v8 |
| 3114 | 3110 |
| 3115 #endif // V8_TARGET_ARCH_IA32 | 3111 #endif // V8_TARGET_ARCH_IA32 |
| OLD | NEW |