| 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 1407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1418 emit_disp(L, Displacement::OTHER); | 1418 emit_disp(L, Displacement::OTHER); |
| 1419 } | 1419 } |
| 1420 } | 1420 } |
| 1421 | 1421 |
| 1422 | 1422 |
| 1423 void Assembler::call(byte* entry, RelocInfo::Mode rmode) { | 1423 void Assembler::call(byte* entry, RelocInfo::Mode rmode) { |
| 1424 positions_recorder()->WriteRecordedPositions(); | 1424 positions_recorder()->WriteRecordedPositions(); |
| 1425 EnsureSpace ensure_space(this); | 1425 EnsureSpace ensure_space(this); |
| 1426 ASSERT(!RelocInfo::IsCodeTarget(rmode)); | 1426 ASSERT(!RelocInfo::IsCodeTarget(rmode)); |
| 1427 EMIT(0xE8); | 1427 EMIT(0xE8); |
| 1428 if (RelocInfo::IsRuntimeEntry(rmode)) { | 1428 emit(entry - (pc_ + sizeof(int32_t)), rmode); |
| 1429 emit(reinterpret_cast<uint32_t>(entry), rmode); | |
| 1430 } else { | |
| 1431 emit(entry - (pc_ + sizeof(int32_t)), rmode); | |
| 1432 } | |
| 1433 } | 1429 } |
| 1434 | 1430 |
| 1435 | 1431 |
| 1436 int Assembler::CallSize(const Operand& adr) { | 1432 int Assembler::CallSize(const Operand& adr) { |
| 1437 // Call size is 1 (opcode) + adr.len_ (operand). | 1433 // Call size is 1 (opcode) + adr.len_ (operand). |
| 1438 return 1 + adr.len_; | 1434 return 1 + adr.len_; |
| 1439 } | 1435 } |
| 1440 | 1436 |
| 1441 | 1437 |
| 1442 void Assembler::call(const Operand& adr) { | 1438 void Assembler::call(const Operand& adr) { |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1487 EMIT(0xE9); | 1483 EMIT(0xE9); |
| 1488 emit_disp(L, Displacement::UNCONDITIONAL_JUMP); | 1484 emit_disp(L, Displacement::UNCONDITIONAL_JUMP); |
| 1489 } | 1485 } |
| 1490 } | 1486 } |
| 1491 | 1487 |
| 1492 | 1488 |
| 1493 void Assembler::jmp(byte* entry, RelocInfo::Mode rmode) { | 1489 void Assembler::jmp(byte* entry, RelocInfo::Mode rmode) { |
| 1494 EnsureSpace ensure_space(this); | 1490 EnsureSpace ensure_space(this); |
| 1495 ASSERT(!RelocInfo::IsCodeTarget(rmode)); | 1491 ASSERT(!RelocInfo::IsCodeTarget(rmode)); |
| 1496 EMIT(0xE9); | 1492 EMIT(0xE9); |
| 1497 if (RelocInfo::IsRuntimeEntry(rmode)) { | 1493 emit(entry - (pc_ + sizeof(int32_t)), rmode); |
| 1498 emit(reinterpret_cast<uint32_t>(entry), rmode); | |
| 1499 } else { | |
| 1500 emit(entry - (pc_ + sizeof(int32_t)), rmode); | |
| 1501 } | |
| 1502 } | 1494 } |
| 1503 | 1495 |
| 1504 | 1496 |
| 1505 void Assembler::jmp(const Operand& adr) { | 1497 void Assembler::jmp(const Operand& adr) { |
| 1506 EnsureSpace ensure_space(this); | 1498 EnsureSpace ensure_space(this); |
| 1507 EMIT(0xFF); | 1499 EMIT(0xFF); |
| 1508 emit_operand(esp, adr); | 1500 emit_operand(esp, adr); |
| 1509 } | 1501 } |
| 1510 | 1502 |
| 1511 | 1503 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1548 } | 1540 } |
| 1549 } | 1541 } |
| 1550 | 1542 |
| 1551 | 1543 |
| 1552 void Assembler::j(Condition cc, byte* entry, RelocInfo::Mode rmode) { | 1544 void Assembler::j(Condition cc, byte* entry, RelocInfo::Mode rmode) { |
| 1553 EnsureSpace ensure_space(this); | 1545 EnsureSpace ensure_space(this); |
| 1554 ASSERT((0 <= cc) && (static_cast<int>(cc) < 16)); | 1546 ASSERT((0 <= cc) && (static_cast<int>(cc) < 16)); |
| 1555 // 0000 1111 1000 tttn #32-bit disp. | 1547 // 0000 1111 1000 tttn #32-bit disp. |
| 1556 EMIT(0x0F); | 1548 EMIT(0x0F); |
| 1557 EMIT(0x80 | cc); | 1549 EMIT(0x80 | cc); |
| 1558 if (RelocInfo::IsRuntimeEntry(rmode)) { | 1550 emit(entry - (pc_ + sizeof(int32_t)), rmode); |
| 1559 emit(reinterpret_cast<uint32_t>(entry), rmode); | |
| 1560 } else { | |
| 1561 emit(entry - (pc_ + sizeof(int32_t)), rmode); | |
| 1562 } | |
| 1563 } | 1551 } |
| 1564 | 1552 |
| 1565 | 1553 |
| 1566 void Assembler::j(Condition cc, Handle<Code> code) { | 1554 void Assembler::j(Condition cc, Handle<Code> code) { |
| 1567 EnsureSpace ensure_space(this); | 1555 EnsureSpace ensure_space(this); |
| 1568 // 0000 1111 1000 tttn #32-bit disp | 1556 // 0000 1111 1000 tttn #32-bit disp |
| 1569 EMIT(0x0F); | 1557 EMIT(0x0F); |
| 1570 EMIT(0x80 | cc); | 1558 EMIT(0x80 | cc); |
| 1571 emit(reinterpret_cast<intptr_t>(code.location()), RelocInfo::CODE_TARGET); | 1559 emit(reinterpret_cast<intptr_t>(code.location()), RelocInfo::CODE_TARGET); |
| 1572 } | 1560 } |
| (...skipping 996 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2569 } | 2557 } |
| 2570 buffer_ = desc.buffer; | 2558 buffer_ = desc.buffer; |
| 2571 buffer_size_ = desc.buffer_size; | 2559 buffer_size_ = desc.buffer_size; |
| 2572 pc_ += pc_delta; | 2560 pc_ += pc_delta; |
| 2573 reloc_info_writer.Reposition(reloc_info_writer.pos() + rc_delta, | 2561 reloc_info_writer.Reposition(reloc_info_writer.pos() + rc_delta, |
| 2574 reloc_info_writer.last_pc() + pc_delta); | 2562 reloc_info_writer.last_pc() + pc_delta); |
| 2575 | 2563 |
| 2576 // Relocate runtime entries. | 2564 // Relocate runtime entries. |
| 2577 for (RelocIterator it(desc); !it.done(); it.next()) { | 2565 for (RelocIterator it(desc); !it.done(); it.next()) { |
| 2578 RelocInfo::Mode rmode = it.rinfo()->rmode(); | 2566 RelocInfo::Mode rmode = it.rinfo()->rmode(); |
| 2579 if (rmode == RelocInfo::INTERNAL_REFERENCE) { | 2567 if (rmode == RelocInfo::RUNTIME_ENTRY) { |
| 2568 int32_t* p = reinterpret_cast<int32_t*>(it.rinfo()->pc()); |
| 2569 *p -= pc_delta; // relocate entry |
| 2570 } else if (rmode == RelocInfo::INTERNAL_REFERENCE) { |
| 2580 int32_t* p = reinterpret_cast<int32_t*>(it.rinfo()->pc()); | 2571 int32_t* p = reinterpret_cast<int32_t*>(it.rinfo()->pc()); |
| 2581 if (*p != 0) { // 0 means uninitialized. | 2572 if (*p != 0) { // 0 means uninitialized. |
| 2582 *p += pc_delta; | 2573 *p += pc_delta; |
| 2583 } | 2574 } |
| 2584 } | 2575 } |
| 2585 } | 2576 } |
| 2586 | 2577 |
| 2587 ASSERT(!overflow()); | 2578 ASSERT(!overflow()); |
| 2588 } | 2579 } |
| 2589 | 2580 |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2695 fprintf(coverage_log, "%s\n", file_line); | 2686 fprintf(coverage_log, "%s\n", file_line); |
| 2696 fflush(coverage_log); | 2687 fflush(coverage_log); |
| 2697 } | 2688 } |
| 2698 } | 2689 } |
| 2699 | 2690 |
| 2700 #endif | 2691 #endif |
| 2701 | 2692 |
| 2702 } } // namespace v8::internal | 2693 } } // namespace v8::internal |
| 2703 | 2694 |
| 2704 #endif // V8_TARGET_ARCH_IA32 | 2695 #endif // V8_TARGET_ARCH_IA32 |
| OLD | NEW |