Skip to content

Operations

This page tells you which Operations are currently implemented for each architecture.

  • ❌ Means it is not implemented.
  • ✅ Means it is implemented.
  • ❓ Means 'not applicable'.

Needed for Basic Hooking Support

JumpRelative

Architecture Supported Notes
x64 ✅ +-2GiB
x86 ✅ +-2GiB
ARM64 (+- 128MiB) ✅ +-128MiB
ARM64 (+- 4GiB) ✅ Uses 3 instructions. Used if within range.

JumpAbsolute

Architecture Supported Notes
x64 ✅ Uses scratch register for efficiency.
x86 ✅ Uses scratch register for efficiency.
ARM64 ✅ Uses scratch register (required)

JumpAbsoluteIndirect

Architecture Supported Notes
x86 ✅
x86 ✅
ARM64 ❌ Variant 0.
ARM64 ✅ Variant 1. Replaced with JumpAbsolute, for perf reasons.

Needed for Wrapper Generation

Mov

Architecture Register to Register Vector to Vector
x64 ✅ ✅
x86 ✅ ✅
ARM64 ✅ ✅

MovFromStack

Architecture to Register to Vector
x64 ✅ ✅
x86 ✅ ✅
ARM64 ✅ ✅

MovToStack

Architecture to Register to Vector
x64 ✅ ✅
x86 ✅ ✅
ARM64* ❌ ❌

This is not needed for optimal code generation on ARM64, thus was not implemented.

Push

Architecture Register Vector
x64 ✅ ✅
x86 ✅ ✅
ARM64 ✅ ✅

PushStack

Architecture Supported Notes
x64 ✅
x86 ✅
ARM64 ✅ Will use vector registers when available.

PushConstant

Architecture Supported Notes
x64 ✅
x86 ✅
ARM64 ✅ 2-5 instructions, depending on constant length.

StackAlloc

Architecture Supported
x64 ✅
x86 ✅
ARM64 ✅

Pop

Architecture to Register to Vector Notes
x64 ✅ ✅
x86 ✅ ✅
ARM64 ✅ ✅

XChg

Architecture Registers Vectors Notes
x64 ✅ ✅ * *Requires scratch register
x86 ✅ ✅ * *Requires scratch register
ARM64 ✅ * ✅ * *Requires scratch register

CallAbsolute

Architecture Supported Notes
x64 (register) ✅ Uses scratch register for efficiency.
x86 (register) ✅ Uses scratch register for efficiency.
ARM64 (register) ✅ Uses scratch register (required)

CallRelative

Architecture Supported Notes
x64 ✅ +-2GiB
x86 ✅ +-2GiB
ARM64 ✅ +-128MiB

Return

Architecture Supported Notes
x64 ✅
x86 ✅
ARM64 ✅ 2 instructions if offset > 0.

Architecture Specific Operations

CallIpRelative

Architecture Supported Notes
x64 ✅
x86 ❓ Unsupported.
ARM64 (+- 1MiB) ✅ 2 instructions.
ARM64 (+- 4GiB) ✅ 3 instructions.

JumpIpRelative

Architecture Supported Notes
x64 ✅
x86 ❓ Unsupported.
ARM64 (+- 1MiB) ✅ 2 instructions.
ARM64 (+- 4GiB) ✅ 3 instructions.

Optimized Push/Pop Operations

MultiPush

Architecture Supported Notes
x64* ✅
x86* ✅
ARM64 ✅ Might fall back to single pop/push if mixing register sizes.

* Implemented but not used, due to more efficient code generation alternative.

MultiPop

Architecture Supported Notes
x64* ✅
x86* ✅
ARM64 ✅ Might fall back to single pop/push if mixing register sizes.

* Implemented but not used, due to more efficient code generation alternative.