dynasm/encoder

Search:
Group by:

x64/x86 instruction encoder (common subset). Covers integer moves, ALU, stack, jumps/calls, enough for hello-world/bf-jit.

Procs

proc encAluMemImm(a: var auto; mn: string; mem: MemOp; imm: int64; size: OpSize;
                  isX64: bool)
proc encAluMemReg(a: var auto; mn: string; mem: MemOp; src: Register;
                  size: OpSize; isX64: bool)
proc encAluRegImm(a: var auto; mn: string; dst: Register; imm: int64;
                  size: OpSize)
proc encAluRegMem(a: var auto; mn: string; dst: Register; mem: MemOp;
                  size: OpSize; isX64: bool)
proc encAluRegReg(a: var auto; mn: string; dst, src: Register; size: OpSize)
proc encCallMem(a: var auto; mem: MemOp; isX64: bool)
proc encCallReg(a: var auto; reg: Register)
proc encCallRel(a: var auto; lr: LabelRef)
proc encCqo(a: var auto; size: OpSize)
proc encDivMem(a: var auto; mn: string; mem: MemOp; size: OpSize; isX64: bool)
proc encDivReg(a: var auto; mn: string; reg: Register; size: OpSize)
proc encImulRegImm(a: var auto; dst, src: Register; imm: int64; size: OpSize)
3-operand imul dst, src, imm8/32: 6B /r ib or 69 /r id
proc encImulRegMem(a: var auto; dst: Register; mem: MemOp; size: OpSize;
                   isX64: bool)
proc encImulRegReg(a: var auto; dst, src: Register; size: OpSize)
proc encIncDec(a: var auto; mn: string; reg: Register; size: OpSize)
proc encIncDecMem(a: var auto; mn: string; mem: MemOp; size: OpSize; isX64: bool)
proc encInt3(a: var auto)
proc encJcc(a: var auto; mn: string; lr: LabelRef)
proc encJccShort(a: var auto; mn: string; lr: LabelRef)
proc encJmpMem(a: var auto; mem: MemOp; isX64: bool)
proc encJmpReg(a: var auto; reg: Register)
proc encJmpRel(a: var auto; lr: LabelRef)
proc encJmpShort(a: var auto; lr: LabelRef)
proc encLeaSized(a: var auto; dst: Register; dstSize: OpSize; mem: MemOp;
                 isX64: bool)
proc encMovMemImm(a: var auto; mem: MemOp; imm: int64; size: OpSize; isX64: bool)
proc encMovMemReg(a: var auto; mem: MemOp; src: Register; size: OpSize;
                  isX64: bool)
proc encMovRegImm(a: var auto; dst: Register; imm: int64; size: OpSize)
proc encMovRegMem(a: var auto; dst: Register; mem: MemOp; size: OpSize;
                  isX64: bool)
proc encMovRegReg(a: var auto; dst, src: Register; size: OpSize)
proc encMovzxRegMem(a: var auto; dst: Register; mem: MemOp; srcSize: OpSize;
                    dstSize: OpSize; isX64: bool)
proc encMovzxRegReg(a: var auto; dst, src: Register; srcSize: OpSize;
                    dstSize: OpSize)
proc encNop(a: var auto)
proc encPopReg(a: var auto; reg: Register; isX64: bool)
proc encPushReg(a: var auto; reg: Register; isX64: bool)
proc encRet(a: var auto)
proc encShiftMemImm(a: var auto; mn: string; mem: MemOp; count: int64;
                    size: OpSize; isX64: bool)
proc encShiftRegCl(a: var auto; mn: string; reg: Register; size: OpSize)
proc encShiftRegImm(a: var auto; mn: string; reg: Register; count: int64;
                    size: OpSize)
proc encTestRegReg(a: var auto; lhs, rhs: Register; size: OpSize)

Templates

template emitRexIfNeeded(a: untyped; w, r, x, b: bool; extraForce: bool = false)