}
+void Assembler::emitp(void* x, RelocInfo::Mode rmode) {
+ uintptr_t value = reinterpret_cast<uintptr_t>(x);
+ Memory::uintptr_at(pc_) = value;
+ if (!RelocInfo::IsNone(rmode)) {
+ RecordRelocInfo(rmode, value);
+ }
+ pc_ += sizeof(uintptr_t);
+}
+
+
void Assembler::emitq(uint64_t x, RelocInfo::Mode rmode) {
Memory::uint64_at(pc_) = x;
if (!RelocInfo::IsNone(rmode)) {
EnsureSpace ensure_space(this);
emit(0x48); // REX.W
emit(0xA1);
- emitq(reinterpret_cast<uintptr_t>(value), mode);
+ emitp(value, mode);
}
EnsureSpace ensure_space(this);
emit_rex_64(dst);
emit(0xB8 | dst.low_bits());
- emitq(reinterpret_cast<uintptr_t>(value), rmode);
+ emitp(value, rmode);
}
ASSERT(!HEAP->InNewSpace(*value));
emit_rex_64(dst);
emit(0xB8 | dst.low_bits());
- emitq(reinterpret_cast<uintptr_t>(value.location()), mode);
+ emitp(value.location(), mode);
}
}
EnsureSpace ensure_space(this);
emit(0x48); // REX.W
emit(0xA3);
- emitq(reinterpret_cast<uintptr_t>(dst), mode);
+ emitp(dst, mode);
}
void emit(byte x) { *pc_++ = x; }
inline void emitl(uint32_t x);
+ inline void emitp(void* x, RelocInfo::Mode rmode);
inline void emitq(uint64_t x, RelocInfo::Mode rmode);
inline void emitw(uint16_t x);
inline void emit_code_target(Handle<Code> target,