mini_jit::instructions

mini_jit::instructions::base

constexpr uint32_t mini_jit::instructions::base::add(gpr_t reg_dest, gpr_t reg_src, uint32_t imm12, uint32_t shift)

Generates an ADD (immediate) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – source register.

  • imm12 – 12-bit immediate value.

  • shift – shift value.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::base::add(gpr_t reg_dest, gpr_t reg_src1, gpr_t reg_src2, uint32_t imm6, uint32_t shift)

Generates an ADD (shifted register) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • reg_src2 – second source register.

  • imm6 – 6-bit immediate value.

  • shift – shift value.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::base::cbnz(gpr_t reg, int32_t imm19)

Generates a CBNZ instruction.

Parameters:
  • reg – general-purpose register.

  • imm19 – immediate value (not the offset bytes!).

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::base::ldp(gpr_t reg_dest1, gpr_t reg_dest2, gpr_t reg_src, int32_t imm7)

Generates a base LDP instruction using signed offset encoding.

Parameters:
  • reg_dest1 – first destination register.

  • reg_dest2 – second destination register.

  • reg_src – source register (base address).

  • imm7 – 7-bit immediate value.

constexpr uint32_t mini_jit::instructions::base::ldpPost(gpr_t reg_dest1, gpr_t reg_dest2, gpr_t reg_src, int32_t imm7)

Generates a base LDP instruction using post-index encoding.

Parameters:
  • reg_dest1 – first destination register.

  • reg_dest2 – second destination register.

  • reg_src – source register (base address).

  • imm7 – 7-bit immediate value.

constexpr uint32_t mini_jit::instructions::base::ldpPre(gpr_t reg_dest1, gpr_t reg_dest2, gpr_t reg_src, int32_t imm7)

Generates a base LDP instruction using pre-index encoding.

Parameters:
  • reg_dest1 – first destination register.

  • reg_dest2 – second destination register.

  • reg_src – source register (base address).

  • imm7 – 7-bit immediate value.

constexpr uint32_t mini_jit::instructions::base::ldr(gpr_t reg_dest, gpr_t reg_src, uint32_t imm)

Generates a base LDR (12-bit immediate) instruction using unsigned offset encoding.

Parameters:
  • reg_dest – destination register.

  • reg_src – source register (base address).

  • imm12 – 12-bit immediate value.

constexpr uint32_t mini_jit::instructions::base::lsl(gpr_t reg_dest, gpr_t reg_src, uint32_t imm)

Generates a base LSL (immediate) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src – source register.

  • imm12 – immediate value.

constexpr uint32_t mini_jit::instructions::base::mov(gpr_t reg_dest, gpr_t reg_src)

Generates an MOV (register) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src – source register.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::base::mov(gpr_t reg_dest, uint64_t imm16)

Generates an MOV 16-bit immediate instruction.

Parameters:
  • reg_dest – destination register.

  • imm16 – 16-bit unsigned immediate value.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::base::movSP(gpr_t reg_dest, gpr_t reg_src)

Generates an MOV (from/to SP) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – source register.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::base::movk(gpr_t reg_dest, uint16_t imm16, uint32_t shift)

Generates an MOVK instruction.

Parameters:
  • reg_dest – destination register.

  • imm16 – 16-bit unsigned immediate value.

  • shift – amount by which to left shift the immediate value.

constexpr uint32_t mini_jit::instructions::base::movz(gpr_t reg_dest, uint16_t imm16, uint32_t shift)

Generates an MOVZ instruction.

Parameters:
  • reg_dest – destination register.

  • imm16 – 16-bit unsigned immediate value.

  • shift – amount by which to left shift the immediate value.

constexpr uint32_t mini_jit::instructions::base::mul(gpr_t reg_dest, gpr_t reg_src1, gpr_t reg_src2)

Generates an MUL (register) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • reg_src2 – second source register.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::base::orr(gpr_t reg_dest, gpr_t reg_src1, gpr_t reg_src2, uint32_t shift, uint32_t amount)

Generates an ORR (shifted register) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • reg_src2 – second source register.

  • shift – shift value.

  • amount – amount to shift.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::base::ret()

Generates a RET instruction.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::base::stp(gpr_t reg_data1, gpr_t reg_data2, gpr_t reg_address, int32_t imm7)

Generates an STP instruction using signed offset encoding.

Parameters:
  • reg_data1 – first register holding the data to be transferred.

  • reg_data2 – second register holding the data to be transferred.

  • reg_address – register holding the memory address.

  • imm7 – 7-bit immediate value.

constexpr uint32_t mini_jit::instructions::base::stpPost(gpr_t reg_data1, gpr_t reg_data2, gpr_t reg_address, int32_t imm7)

Generates an STP instruction using post-index encoding.

Parameters:
  • reg_data1 – first register holding the data to be transferred.

  • reg_data2 – second register holding the data to be transferred.

  • reg_address – register holding the memory address.

  • imm7 – 7-bit immediate value.

constexpr uint32_t mini_jit::instructions::base::stpPre(gpr_t reg_data1, gpr_t reg_data2, gpr_t reg_address, int32_t imm7)

Generates an STP instruction using pre-index encoding.

Parameters:
  • reg_data1 – first register holding the data to be transferred.

  • reg_data2 – second register holding the data to be transferred.

  • reg_address – register holding the memory address.

  • imm7 – 7-bit immediate value.

constexpr uint32_t mini_jit::instructions::base::str(gpr_t reg_data, gpr_t reg_address, uint32_t imm12)

Generates an STR (12-bit immediate) instruction using unsigned offset encoding.

Parameters:
  • reg_data – register holding the data to be transferred.

  • reg_address – register holding the memory address.

  • imm12 – 12-bit immediate value.

constexpr uint32_t mini_jit::instructions::base::strPost(gpr_t reg_data, gpr_t reg_address, uint32_t imm9)

Generates an STR (9-bit immediate) instruction using post-index encoding.

Parameters:
  • reg_data – register holding the data to be transferred.

  • reg_address – register holding the memory address.

  • imm9 – signed 9-bit immediate value.

constexpr uint32_t mini_jit::instructions::base::sub(gpr_t reg_dest, gpr_t reg_src, uint32_t imm12, uint32_t shift)

Generates an SUB (immediate) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • imm12 – 12-bit immediate value.

  • shift – shift value.

Returns:

instruction.

mini_jit::instructions::simd_fp

constexpr uint32_t mini_jit::instructions::simd_fp::eor(simd_fp_t reg_dest, simd_fp_t reg_src1, simd_fp_t reg_src2, arr_spec_t arr_spec)

Generates an EOR (vector) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • reg_src2 – second source register.

  • arr_spec – arrangement specifier (8B or 16B).

constexpr uint32_t mini_jit::instructions::simd_fp::fabsVec(simd_fp_t reg_dest, simd_fp_t reg_src, arr_spec_t arr_spec)

Generates an FABS (vector) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src – source register.

  • arr_spec – arrangement specifier.

constexpr uint32_t mini_jit::instructions::simd_fp::fabsScalar(simd_fp_t reg_dest, simd_fp_t reg_src, neon_size_spec_t size_spec)

Generates an FABS (scalar) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src – source register.

  • size_spec – size specifier.

constexpr uint32_t mini_jit::instructions::simd_fp::faddVec(simd_fp_t reg_dest, simd_fp_t reg_src1, simd_fp_t reg_src2, arr_spec_t arr_spec)

Generates an FADD (vector) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • reg_src2 – second source register.

  • arr_spec – arrangement specifier.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::faddScalar(simd_fp_t reg_dest, simd_fp_t reg_src1, simd_fp_t reg_src2, neon_size_spec_t size_spec)

Generates an FADD (scalar) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • reg_src2 – second source register.

  • size_spec – size specifier.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::fcmp(simd_fp_t reg_src1, simd_fp_t reg_src2, neon_size_spec_t size_spec, bool zero)

Generates an FCMP (scalar) instruction.

Parameters:
  • reg_src1 – first source register.

  • reg_src2 – second source register.

  • size_spec – size specifier.

  • zero – specifies the opcode.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::fcvtmsVec(simd_fp_t reg_dest, simd_fp_t reg_src1, arr_spec_t arr_spec)

Generates an FCVTMS (vector) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – source register.

  • arr_spec – arrangement specifier.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::fcvtmsScalar(simd_fp_t reg_dest, simd_fp_t reg_src1, neon_size_spec_t size_spec)

Generates an FCVTMS (scalar SIMD&FP) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • size_spec – size specifier.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::fdivVec(simd_fp_t reg_dest, simd_fp_t reg_src1, simd_fp_t reg_src2, arr_spec_t arr_spec)

Generates an FDIV (vector) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • reg_src2 – second source register.

  • arr_spec – arrangement specifier.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::fdivScalar(simd_fp_t reg_dest, simd_fp_t reg_src1, simd_fp_t reg_src2, neon_size_spec_t size_spec)

Generates an FDIV (scalar) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • reg_src2 – second source register.

  • size_spec – size specifier.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::fmadd(simd_fp_t reg_dest, simd_fp_t reg_src1, simd_fp_t reg_src2, simd_fp_t reg_src3, neon_size_spec_t size_spec)

Generates an FMADD instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register (multiplicand).

  • reg_src2 – second source register (multiplier).

  • reg_src3 – third source register (addend).

  • size_spec – size specifier (s or d).

constexpr uint32_t mini_jit::instructions::simd_fp::fmaxScalar(simd_fp_t reg_dest, simd_fp_t reg_src1, simd_fp_t reg_src2, neon_size_spec_t size_spec)

Generates an FMAX (scalar) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • reg_src2 – second source register.

  • size_spec – size specifier (s or d).

constexpr uint32_t mini_jit::instructions::simd_fp::fmaxVec(simd_fp_t reg_dest, simd_fp_t reg_src1, simd_fp_t reg_src2, arr_spec_t arr_spec)

Generates an FMAX (vector) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • reg_src2 – second source register.

  • arr_spec_t – arrangement specifier.

constexpr uint32_t mini_jit::instructions::simd_fp::fminScalar(simd_fp_t reg_dest, simd_fp_t reg_src1, simd_fp_t reg_src2, neon_size_spec_t size_spec)

Generates an FMIN (scalar) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • reg_src2 – second source register.

  • size_spec – size specifier (s or d).

constexpr uint32_t mini_jit::instructions::simd_fp::fminVec(simd_fp_t reg_dest, simd_fp_t reg_src1, simd_fp_t reg_src2, arr_spec_t arr_spec)

Generates an FMIN (vector) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • reg_src2 – second source register.

  • arr_spec_t – arrangement specifier.

constexpr uint32_t mini_jit::instructions::simd_fp::fmlaVec(simd_fp_t reg_dest, simd_fp_t reg_src1, simd_fp_t reg_src2, arr_spec_t arr_spec)

Generates an FMLA (vector) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • reg_src2 – second source register.

  • arr_spec – arrangement specifier.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::fmlaElem(simd_fp_t reg_dest, simd_fp_t reg_src1, simd_fp_t reg_src2, arr_spec_t arr_spec)

Generates an FMLA (by element) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • reg_src2 – second source register.

  • arr_spec – arrangement specifier.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::fmovVec(simd_fp_t reg_dest, int32_t imm8, arr_spec_t arr_spec)

Generates an FMOV (vector, immediate) instruction.

Parameters:
  • reg_dest – destination register.

  • imm8 – 8-bit immediate (sign bit, 3-bit exponent, 4-bit precision).

  • arr_spec – arrangement specifier.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::fmovScalar(simd_fp_t reg_dest, int32_t imm8, neon_size_spec_t size_spec)

Generates an FMOV (scalar, immediate) instruction.

Parameters:
  • reg_dest – destination register.

  • imm8 – 8-bit immediate (sign bit, 3-bit exponent, 4-bit precision).

  • size_spec – size specifier.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::fmovIntVec(simd_fp_t reg_dest, int32_t imm8, arr_spec_t arr_spec)

Generates an FMOV (vector, immediate) instruction.

Parameters:
  • reg_dest – destination register.

  • imm8 – 8-bit integer value to move.

  • arr_spec – arrangement specifier.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::fmovIntScalar(simd_fp_t reg_dest, int32_t imm8, neon_size_spec_t size_spec)

Generates an FMOV (scalar, immediate) instruction.

Parameters:
  • reg_dest – destination register.

  • imm8 – 8-bit integer value to move.

  • size_spec – size specifier.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::fmulVec(simd_fp_t reg_dest, simd_fp_t reg_src1, simd_fp_t reg_src2, arr_spec_t arr_spec)

Generates an FMUL (vector) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • reg_src2 – second source register.

  • arr_spec – arrangement specifier.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::fmulScalar(simd_fp_t reg_dest, simd_fp_t reg_src1, simd_fp_t reg_src2, neon_size_spec_t size_spec)

Generates an FMUL (scalar) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • reg_src2 – second source register.

  • size_spec – size specifier.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::frecpeVec(simd_fp_t reg_dest, simd_fp_t reg_src, arr_spec_t arr_spec)

Generates a vector FRECPE (Floating-point reciprocal estimate) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src – source register.

  • arr_spec – arrangement specifier (2s, 4s or 2d).

constexpr uint32_t mini_jit::instructions::simd_fp::frecpeScalar(simd_fp_t reg_dest, simd_fp_t reg_src, size_spec_t size_spec)

Generates a scalar FRECPE (Floating-point reciprocal estimate) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src – source register.

  • size_spec – size specifier (s, d).

constexpr uint32_t mini_jit::instructions::simd_fp::frecpsVec(simd_fp_t reg_dest, simd_fp_t reg_src1, simd_fp_t reg_src2, arr_spec_t arr_spec)

Generates a vector FRECPS (Floating-point reciprocal step) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • reg_src2 – second source register.

  • arr_spec – arrangement specifier (2s, 4s or 2d).

constexpr uint32_t mini_jit::instructions::simd_fp::frecpsScalar(simd_fp_t reg_dest, simd_fp_t reg_src1, simd_fp_t reg_src2, size_spec_t size_spec)

Generates a scalar FRECPS (Floating-point reciprocal step) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • reg_src2 – second source register.

  • size_spec – size specifier (s, d).

constexpr uint32_t mini_jit::instructions::simd_fp::frintmVec(simd_fp_t reg_dest, simd_fp_t reg_src, arr_spec_t arr_spec)

Generates an FRINTM (vector) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src – source register.

  • arr_spec – arrangement specifier.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::frintmScalar(simd_fp_t reg_dest, simd_fp_t reg_src, neon_size_spec_t size_spec)

Generates an FRINTM (scalar) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src – source register.

  • size_spec – size specifier.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::frintnVec(simd_fp_t reg_dest, simd_fp_t reg_src, arr_spec_t arr_spec)

Generates an FRINTN (vector) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src – source register.

  • arr_spec – arrangement specifier.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::frintnScalar(simd_fp_t reg_dest, simd_fp_t reg_src, neon_size_spec_t size_spec)

Generates an FRINTN (scalar) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src – source register.

  • size_spec – size specifier.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::fsubVec(simd_fp_t reg_dest, simd_fp_t reg_src1, simd_fp_t reg_src2, arr_spec_t arr_spec)

Generates an FSUB (vector) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • reg_src2 – second source register.

  • arr_spec – arrangement specifier.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::fsubScalar(simd_fp_t reg_dest, simd_fp_t reg_src1, simd_fp_t reg_src2, neon_size_spec_t size_spec)

Generates an FSUB (scalar) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • reg_src2 – second source register.

  • size_spec – size specifier.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::ins(simd_fp_t reg_dest, simd_fp_t reg_src, uint32_t imm5, uint32_t imm4, neon_size_spec_t size_spec)

Generates an INS (element) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src2 – source register.

  • imm5 – 5-bit immediate (destination index).

  • imm4 – 4-bit immediate (source index).

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::ld1(simd_fp_t reg_dst, gpr_t reg_src, uint32_t index, neon_size_spec_t size)

Generates an LD1 instruction (single structure) with a lane index, e.g. LD1 {V0.S}[0], [X0].

!

Parameters:
  • reg_dst – Destination SIMD register.

  • reg_src – Source general-purpose register containing the address.

  • index – Index of the lane to load to.

  • size – Size of the SIMD register (s or d).

constexpr uint32_t mini_jit::instructions::simd_fp::ld1(simd_fp_t reg_dst, gpr_t reg_src, uint32_t index, neon_size_spec_t size, gpr_t reg_post_index)

Generates an LD1 instruction (single structure) with a lane index and a register post-index, e.g. LD1 {V0.S}[0], [X0], X1.

!

Parameters:
  • reg_dst – Destination SIMD register.

  • reg_src – Source general-purpose register containing the address.

  • index – Index of the lane to load to.

  • size – Size of the SIMD register (s or d).

  • post_index – Post-index register to add to the address in reg_src.

constexpr uint32_t mini_jit::instructions::simd_fp::ld1(simd_fp_t reg_dst, gpr_t reg_src, uint32_t index, neon_size_spec_t size, uint32_t post_index)

Generates an LD1 instruction (single structure) with a lane index and a post-index immediate, e.g. LD1 {V0.S}[0], [X0], #4.

!

Parameters:
  • reg_dst – Destination SIMD register.

  • reg_src – Source general-purpose register containing the address.

  • index – Index of the lane to load to.

  • size – Size of the SIMD register (s or d).

  • post_index – Post-index immediate to add to the address in reg_src.

constexpr uint32_t mini_jit::instructions::simd_fp::ldp(simd_fp_t reg_dest1, simd_fp_t reg_dest2, gpr_t reg_src, int32_t imm7, neon_size_spec_t size_spec)

Generates an LDP instruction using signed offset encoding.

Parameters:
  • reg_dest1 – first destination register.

  • reg_dest2 – second destination register.

  • reg_src – source register (base address).

  • imm7 – 7-bit immediate value.

  • size_spec – size specifier (s, d, q).

constexpr uint32_t mini_jit::instructions::simd_fp::ldpPost(simd_fp_t reg_dest1, simd_fp_t reg_dest2, gpr_t reg_src, int32_t imm7, neon_size_spec_t size_spec)

Generates an LDP instruction using post-index encoding.

Parameters:
  • reg_dest1 – first destination register.

  • reg_dest2 – second destination register.

  • reg_src – source register (base address).

  • imm7 – 7-bit immediate value.

  • size_spec – size specifier (s, d, q).

constexpr uint32_t mini_jit::instructions::simd_fp::ldpPre(simd_fp_t reg_dest1, simd_fp_t reg_dest2, gpr_t reg_src, int32_t imm7, neon_size_spec_t size_spec)

Generates an LDP instruction using pre-index encoding.

Parameters:
  • reg_dest1 – first destination register.

  • reg_dest2 – second destination register.

  • reg_src – source register (base address).

  • imm7 – 7-bit immediate value.

  • size_spec – size specifier (s, d, q).

constexpr uint32_t mini_jit::instructions::simd_fp::ldr(simd_fp_t reg_dest, gpr_t reg_src, uint32_t imm12, neon_size_spec_t size_spec)

Generates an LDR (12-bit immediate) instruction using unsigned offset encoding.

Parameters:
  • reg_dest – destination register.

  • reg_src – source register (base address).

  • imm12 – 12-bit immediate value.

  • size_spec – size specifier (s, d, q).

constexpr uint32_t mini_jit::instructions::simd_fp::ldrPost(simd_fp_t reg_dest, gpr_t reg_src, uint32_t imm9, neon_size_spec_t size_spec)

Generates an LDR (9-bit immediate) instruction using post-index encoding.

Parameters:
  • reg_dest – destination register.

  • reg_src – source register (base address).

  • imm9 – 9-bit immediate value.

  • size_spec – size specifier (s, d, q).

constexpr uint32_t mini_jit::instructions::simd_fp::ldrReg(simd_fp_t reg_dest, gpr_t reg_src1, gpr_t reg_src2, uint32_t option, neon_size_spec_t size_spec)

Generates an LDR (register, SIMD&FP) instruction using register offset.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • reg_src2 – second source register.

  • option – option (0:uxtw, 1:sxtw, 2:lsl, 3:sxtx).

  • size_spec – size specifier (s, d, q).

constexpr uint32_t mini_jit::instructions::simd_fp::mov(simd_fp_t reg_dest, gpr_t reg_src, uint32_t index, neon_size_spec_t size_spec)

Generates an MOV instruction from a general-purpose register to a vector element. This instruction can insert data into individual elements within a SIMD&FP register without clearing the remaining bits to zero.

Parameters:
  • reg_dest – destination SIMD&FP register.

  • reg_src – source general-purpose register.

  • index – index of the simd vector element to be replaced.

  • size_spec – size specifier for the SIMD&FP register.

constexpr uint32_t mini_jit::instructions::simd_fp::scvtfVec(simd_fp_t reg_dest, simd_fp_t reg_src1, arr_spec_t arr_spec)

Generates an SCVTF (vector) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – source register.

  • arr_spec – arrangement specifier.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::scvtfBaseScalar(simd_fp_t reg_dest, gpr_t reg_src1, neon_size_spec_t size_spec)

Generates an SCVTF (scalar, fixed point) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • size_spec – size specifier.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::scvtfScalar(simd_fp_t reg_dest, simd_fp_t reg_src1, neon_size_spec_t size_spec)

Generates an SCVTF (scalar SIMD&FP) instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • size_spec – size specifier.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::st1(simd_fp_t reg_dst, gpr_t reg_src, uint32_t index, neon_size_spec_t size)

Generates an st1 instruction (single structure) with a lane index, e.g. st1 {V0.S}[0], [X0].

!

Parameters:
  • reg_dst – Destination SIMD register.

  • reg_src – Source general-purpose register containing the address.

  • index – Index of the lane to store from.

  • size – Size of the SIMD register (s or d).

constexpr uint32_t mini_jit::instructions::simd_fp::st1(simd_fp_t reg_dst, gpr_t reg_src, uint32_t index, neon_size_spec_t size, gpr_t reg_post_index)

Generates an st1 instruction (single structure) with a lane index and a register post-index, e.g. st1 {V0.S}[0], [X0], X1.

!

Parameters:
  • reg_dst – Destination SIMD register.

  • reg_src – Source general-purpose register containing the address.

  • index – Index of the lane to store from.

  • size – Size of the SIMD register (s or d).

  • post_index – Post-index register to add to the address in reg_src.

constexpr uint32_t mini_jit::instructions::simd_fp::st1(simd_fp_t reg_dst, gpr_t reg_src, uint32_t index, neon_size_spec_t size, uint32_t post_index)

Generates an st1 instruction (single structure) with a lane index and a post-index immediate, e.g. st1 {V0.S}[0], [X0], #4.

!

Parameters:
  • reg_dst – Destination SIMD register.

  • reg_src – Source general-purpose register containing the address.

  • index – Index of the lane to store from.

  • size – Size of the SIMD register (s or d).

  • post_index – Post-index immediate to add to the address in reg_src.

constexpr uint32_t mini_jit::instructions::simd_fp::stp(simd_fp_t reg_data1, simd_fp_t reg_data2, gpr_t reg_address, int32_t imm7, neon_size_spec_t size_spec)

Generates an STP instruction using signed offset encoding.

Parameters:
  • reg_data1 – first register holding the data to be transferred.

  • reg_data2 – second register holding the data to be transferred.

  • reg_address – register holding the memory address.

  • imm7 – 7-bit immediate value.

  • size_spec – size specifier (s, d, q).

constexpr uint32_t mini_jit::instructions::simd_fp::stpPost(simd_fp_t reg_data1, simd_fp_t reg_data2, gpr_t reg_address, int32_t imm7, neon_size_spec_t size_spec)

Generates an STP instruction using post-index encoding.

Parameters:
  • reg_data1 – first register holding the data to be transferred.

  • reg_data2 – second register holding the data to be transferred.

  • reg_address – register holding the memory address.

  • imm7 – 7-bit immediate value.

  • size_spec – size specifier (s, d, q).

constexpr uint32_t mini_jit::instructions::simd_fp::stpPre(simd_fp_t reg_data1, simd_fp_t reg_data2, gpr_t reg_address, int32_t imm7, neon_size_spec_t size_spec)

Generates an STP instruction using pre-index encoding.

Parameters:
  • reg_data1 – first register holding the data to be transferred.

  • reg_data2 – second register holding the data to be transferred.

  • reg_address – register holding the memory address.

  • imm7 – 7-bit immediate value.

  • size_spec – size specifier (s, d, q).

constexpr uint32_t mini_jit::instructions::simd_fp::str(simd_fp_t reg_data, gpr_t reg_address, uint32_t imm12, neon_size_spec_t size_spec)

Generates an STR (12-bit immediate) instruction using unsigned offset encoding.

Parameters:
  • reg_data – register holding the data to be transferred.

  • reg_address – register holding the memory address.

  • imm12 – 12-bit immediate value.

  • size_spec – size specifier (s, d, q).

constexpr uint32_t mini_jit::instructions::simd_fp::strPost(simd_fp_t reg_data, gpr_t reg_address, uint32_t imm9, neon_size_spec_t size_spec)

Generates an STR (9-bit immediate) instruction using post-index encoding.

Parameters:
  • reg_data – register holding the data to be transferred.

  • reg_address – register holding the memory address.

  • imm9 – 9-bit immediate value.

  • size_spec – size specifier (s, d, q).

constexpr uint32_t mini_jit::instructions::simd_fp::trn1(simd_fp_t reg_dest, simd_fp_t reg_src1, simd_fp_t reg_src2, arr_spec_t arr_spec)

Generates an TRN1 instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • reg_src2 – second source register (base address).

  • arr_spec – arrangement specifier.

constexpr uint32_t mini_jit::instructions::simd_fp::trn2(simd_fp_t reg_dest, simd_fp_t reg_src1, simd_fp_t reg_src2, arr_spec_t arr_spec)

Generates an TRN2 instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • reg_src2 – second source register (base address).

  • arr_spec – arrangement specifier.

constexpr uint32_t mini_jit::instructions::simd_fp::umov(gpr_t reg_dest, simd_fp_t reg_src, uint32_t imm5, neon_size_spec_t size_spec)

Generates an UMOV instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src – source register.

  • imm5 – index in range 0-3.

  • size_spec – size specifier.

Returns:

instruction.

constexpr uint32_t mini_jit::instructions::simd_fp::zero(simd_fp_t reg, arr_spec_t arr_spec)

Generates an EOR instruction that zeros out the given register. 8B zeroes out the lower half (64 bit) of the register, while 16B zeroes out the whole register (128 bit).

Parameters:
  • reg – register to zero out.

  • arr_spec – arrangement specifier (8B or 16B).

constexpr uint32_t mini_jit::instructions::simd_fp::zip1(simd_fp_t reg_dest, simd_fp_t reg_src1, simd_fp_t reg_src2, arr_spec_t arr_spec)

Generates an ZIP1 instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • reg_src2 – second source register (base address).

  • arr_spec – arrangement specifier.

constexpr uint32_t mini_jit::instructions::simd_fp::zip2(simd_fp_t reg_dest, simd_fp_t reg_src1, simd_fp_t reg_src2, arr_spec_t arr_spec)

Generates an ZIP2 instruction.

Parameters:
  • reg_dest – destination register.

  • reg_src1 – first source register.

  • reg_src2 – second source register (base address).

  • arr_spec – arrangement specifier.