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 |