25 #ifndef _JIT_COMPILER2_AARCH64_INSTRUCTIONS
26 #define _JIT_COMPILER2_AARCH64_INSTRUCTIONS
113 ABORT_MSG(
"aarch64: regFromOpSize unsupported op_size",
177 ABORT_MSG(
"MemoryInst::reg_base", op <<
" not supported");
196 ABORT_MSG(
"Memory::offset", op <<
" not supported");
202 return operands[0].op->is_Register() &&
222 ABORT_MSG(
"aarch64: regFromOpSize unsupported type",
252 ABORT_MSG(
"MemoryInst::reg_base", op <<
" not supported");
258 if (
get(0).
op->is_StackSlot()) {
261 }
else if (
get(0).
op->is_ManagedStackSlot()) {
271 ABORT_MSG(
"Memory::offset", op <<
" not supported");
279 ||
operands[0].op->is_ManagedStackSlot());
296 ABORT_MSG(
"aarch64: regFromOpSize unsupported type",
310 data_index(data_index) {}
550 cond(cond),
jump(else_target) {
574 framesize(framesize) {}
602 virtual bool is_end()
const {
return true; }
649 Type::IntTypeID, 1) {
661 Type::IntTypeID, 1) {
684 Type::IntTypeID, 1) {
737 Type::ReferenceTypeID, 1), trap(trap) {
741 virtual bool is_end()
const {
return true; }
753 Type::ReferenceTypeID, 1), trap(trap), cond(cond) {
757 virtual bool is_end()
const {
return true; }
virtual void emit(Emitter &em) const
virtual void emit(Emitter &em) const
IntegerToShortInst(const DstOp &dst, const SrcOp &src, Type::TypeID type)
virtual void emit(CodeMemory *cm) const
emit machine code
void emitLConst(Emitter &em) const
virtual bool is_move() const
AddInst(const DstOp &dst, const SrcOp &src1, const SrcOp &src2, Type::TypeID type, Shift::SHIFT shift=Shift::LSL, u1 amount=0)
virtual void emit(CodeMemory *cm) const
emit machine code
Reg fromOp(MachineOperand *op, Type::TypeID type) const
MachineBasicBlock * get_then() const
FMulInst(const DstOp &dst, const SrcOp &src1, const SrcOp &src2, Type::TypeID type)
virtual bool is_jump() const
virtual void emit(Emitter &em) const
virtual void emit(Emitter &em) const
virtual void emit(Emitter &em) const
void emit(CodeMemory *cm)
virtual void emit(Emitter &em) const
MachineBasicBlock * get_else() const
virtual ManagedStackSlot * to_ManagedStackSlot()
virtual Reg regFromType(u1 reg, Type::TypeID type) const
virtual void link(CodeFragment &cf) const
link machine code
virtual void emit(CodeMemory *cm) const
emit machine code
Reg reg_op(std::size_t idx) const
virtual void emit(Emitter &em) const
virtual bool is_end() const
MovInst(const DstOp &dst, const SrcOp &src, Type::TypeID type)
s4 trap
A trap number as defined in aarch64/md-trap.hpp.
A basic block of (scheduled) machine instructions.
virtual bool is_end() const
virtual void emit(CodeMemory *cm) const
emit machine code
bool is_StackSlot() const
DstOp(MachineOperand *op)
MachineOperandDesc result
RetInst(const SrcOp &src)
Non-void return.
virtual Reg regFromType(u1 reg, Type::TypeID type) const
virtual void link(CodeFragment &cf) const
link machine code
virtual void emit(Emitter &em) const
MachineBasicBlock * successor_back() const
IntegerToByteInst(const DstOp &dst, const SrcOp &src, Type::TypeID type)
virtual void link(CodeFragment &CF) const
link machine code
DsegAddrInst(const DstOp &dst, DataSegment::IdxTy &data_index, Type::TypeID type)
CondTrapInst(Cond::COND cond, s4 trap, const SrcOp &index)
virtual void emit(Emitter &em) const
JNIEnv jclass jobject const char * name
MovImmInst(const DstOp &dst, const SrcOp &src, Type::TypeID type)
virtual void emit(Emitter &em) const
IntToCharInst(const DstOp &dst, const SrcOp &src)
MulSubInst(const DstOp &dst, const SrcOp &src1, const SrcOp &src2, const SrcOp &src3, Type::TypeID type)
StoreInst(const SrcOp &src, const BaseOp &base, const IdxOp &offset, Type::TypeID type)
successor_list successors
virtual void emit(Emitter &em) const
FcvtInst(const DstOp &dst, const SrcOp &src, Type::TypeID toType, Type::TypeID fromType)
CmpInst(const SrcOp &src1, const SrcOp &src2, Type::TypeID type)
virtual Reg regFromType(u1 reg, Type::TypeID type) const
MachineBasicBlock * successor_front() const
virtual void emit(Emitter &em) const
virtual void emit(Emitter &em) const
Aarch64Register * cast_to< Aarch64Register >(MachineOperand *op)
IntToLongInst(const DstOp &dst, const SrcOp &src)
FCmpInst(const SrcOp &src1, const SrcOp &src2, Type::TypeID type)
virtual void emit(Emitter &em) const
virtual void emit(Emitter &em) const
AndInst(const DstOp &dst, const SrcOp &src1, const SrcOp &src2, Type::TypeID type, Shift::SHIFT shift=Shift::LSL, u1 amount=0)
Type::TypeID resultT() const
AArch64Instruction(const char *name, MachineOperand *result, Type::TypeID type, std::size_t num_operands)
LoadInst(const DstOp &dst, const BaseOp &base, const IdxOp &offset, Type::TypeID type)
Immediate * cast_to< Immediate >(MachineOperand *op)
virtual void emit(Emitter &em) const
TrapInst(s4 trap, const SrcOp &index)
virtual bool is_end() const
IdxOp(MachineOperand *op)
A "virtual" slot that will eventually be mapped to a machine-level slot.
virtual bool is_move() const
virtual void emit(CodeMemory *cm) const
emit machine code
virtual bool is_jump() const
FSubInst(const DstOp &dst, const SrcOp &src1, const SrcOp &src2, Type::TypeID type)
virtual void emit(Emitter &em) const
FMovInst(const DstOp &dst, const SrcOp &src, Type::TypeID type)
BaseOp(MachineOperand *op)
PatchInst(Patcher *patcher)
virtual void emit(Emitter &em) const
FNegInst(const DstOp &dst, const SrcOp &src, Type::TypeID type)
virtual void emit(Emitter &em) const
IntToFpInst(const DstOp &dst, const SrcOp &src, Type::TypeID toType, Type::TypeID fromType)
LoadInst(const DstOp &dst, const SrcOp &src, Type::TypeID type)
void set_target(MachineBasicBlock *target)
virtual void emit(Emitter &em) const
virtual void emit(Emitter &em) const
virtual void emit(CodeMemory *cm) const
emit machine code
void emitIConst(Emitter &em) const
virtual void link(CodeFragment &cf) const
link machine code
virtual void emit(Emitter &em) const
virtual void emit(CodeMemory *cm) const
emit machine code
virtual void emit(Emitter &em) const
Proxy to encode explicit and implicit successors.
CallInst(const SrcOp &src, const DstOp &dst, std::size_t argc)
DataSegment::IdxTy data_index
virtual void emit(Emitter &em) const
virtual void emit(Emitter &em) const
virtual void emit(Emitter &em) const
FDivInst(const DstOp &dst, const SrcOp &src1, const SrcOp &src2, Type::TypeID type)
JumpInst(MachineBasicBlock *target)
StoreInst(const SrcOp &src, const DstOp &dst, Type::TypeID type)
Operands that can be directly used by the machine (register, memory, stackslot)
s4 trap
A trap number as defined in aarch64/md-trap.hpp.
virtual void emit(Emitter &em) const
virtual void emit(Emitter &em) const
virtual bool is_move() const
SrcOp(MachineOperand *op)
CSelInst(const DstOp &dst, const SrcOp &src1, const SrcOp &src2, Type::TypeID type, Cond::COND cond)
bool is_ManagedStackSlot() const
DivInst(const DstOp &dst, const SrcOp &src1, const SrcOp &src2, Type::TypeID type)
MulInst(const DstOp &dst, const SrcOp &src1, const SrcOp &src2, Type::TypeID type)
virtual void emit(Emitter &em) const
virtual StackSlot * to_StackSlot()
virtual void emit(Emitter &em) const
virtual void emit(CodeMemory *cm) const
emit machine code
#define ABORT_MSG(EXPR_SHORT, EXPR_LONG)
FAddInst(const DstOp &dst, const SrcOp &src1, const SrcOp &src2, Type::TypeID type)
NegInst(const DstOp &dst, const SrcOp &src, Type::TypeID type)
SubInst(const DstOp &dst, const SrcOp &src1, const SrcOp &src2, Type::TypeID type)
bool is_Immediate() const
virtual bool is_call() const
CondJumpInst(Cond::COND cond, MachineBasicBlock *then_target, MachineBasicBlock *else_target)
LongToIntInst(const DstOp &dst, const SrcOp &src)
virtual void emit(Emitter &em) const
virtual bool is_move() const