IndexUJITasmjit::ujit::UniCompiler

asmjit::ujit::UniCompiler Class Reference [¶]

Pipeline compiler.

Classes

Public Types

Constants

Member Functions

Construction & Destruction
Allocators
CPU Architecture, Features and Optimization Options
CPU SIMD Width and SIMD Width Utilities
Function
Miscellaneous Helpers
Utilities
Virtual Registers & Memory (Target Independent)
Compiler Utilities
Constants (X86|X86_64)
Emit - General Purpose Instructions
Emit - Vector Instructions
Memory Loads & Stores
Memory Loads & Stores with Parameterized Size

ScalarOpBehavior ujit::UniCompiler::scalar_op_behavior() constnoexcept[¶]

Returns the behavior of scalar operations (mostly floating point).

FMinFMaxOpBehavior ujit::UniCompiler::fmin_fmax_op_hehavior() constnoexcept[¶]

Returns the behavior of floating point min/max operations.

FMAddOpBehavior ujit::UniCompiler::fmadd_op_behavior() constnoexcept[¶]

Returns the behavior of floating point mul+add (madd) operations.

bool ujit::UniCompiler::is_scalar_op_zeroing() constnoexcept[¶]

Tests whether a scalar operation is zeroing the rest of the destination register (AArch64).

bool ujit::UniCompiler::is_scalar_op_preserving_vec128() constnoexcept[¶]

Tests whether a scalar operation is preserving the low 128-bit part of the destination register (X86|X86_64).

bool ujit::UniCompiler::is_fmin_fmax_finite() constnoexcept[¶]

Tests whether a floating point min/max operation selects a finite value if one of the values is NaN (AArch64).

bool ujit::UniCompiler::is_fmin_fmax_ternary() constnoexcept[¶]

Tests whether a floating point min/max operation works as a ternary if - if a <|> b ? a : b (X86|X86_64).

bool ujit::UniCompiler::is_fmadd_fused() constnoexcept[¶]

Tests whether a floating point mul+add operation is fused (uses FMA).

bool ujit::UniCompiler::is_fma_storing_to_any_register() constnoexcept[¶]

Tests whether a FMA operation is available and that it can store the result to any register (true of X86).

bool ujit::UniCompiler::is_fma_storing_to_any_accumulator() constnoexcept[¶]

Tests whether a FMA operation is available and that it only stores the result to accumulator register.

OperandSignature ujit::UniCompiler::gp_signature() constnoexcept[¶]

Returns a native register signature, either 32-bit or 64-bit depending on the target architecture).

Gp ujit::UniCompiler::gpz(
const Gp& reg
) constnoexcept[¶]

Clones the given reg register into a native register (either 32-bit or 64-bit depending on the target architecture).

VecWidth ujit::UniCompiler::vec_width() constnoexcept[¶]

Returns the current SIMD width (in bytes) that this compiler and all its parts must use.

Note

The returned width is in bytes and it's calculated from the maximum supported widths of all pipeline parts. This means that SIMD width returned could be actually lower than a SIMD width supported by the target CPU.

bool ujit::UniCompiler::use_256bit_simd() constnoexcept[¶]

Returns whether the compiler and all parts use 256-bit SIMD.

bool ujit::UniCompiler::use_512bit_simd() constnoexcept[¶]

Returns whether the compiler and all parts use 512-bit SIMD.

uint32_t ujit::UniCompiler::vec_multiplier() constnoexcept[¶]

Returns a constant that can be used to multiply a baseline SIMD width to get the value returned by vec_width().

Note

A baseline SIMD width would be 16 bytes on most platforms.

BackendCompiler* ujit::UniCompiler::cc = nullptr[¶]

AsmJit compiler.

ScalarOpBehavior ujit::UniCompiler::_scalar_op_behavior {}[¶]

The behavior of scalar operations (mostly floating point).

FMinFMaxOpBehavior ujit::UniCompiler::_fmin_fmax_op_hehavior {}[¶]

The behavior of floating point min/max operation.

FMAddOpBehavior ujit::UniCompiler::_fmadd_op_behavior {}[¶]

The behavior of floating point madd operation.

CpuFeatures ujit::UniCompiler::_features {}[¶]

Target CPU features.

UniOptFlags ujit::UniCompiler::_opt_flags = UniOptFlags::kNone[¶]

Optimization flags.

uint32_t ujit::UniCompiler::_vec_reg_count = 0[¶]

Number of available vector registers.

VecWidth ujit::UniCompiler::_vec_width = VecWidth::k128[¶]

SIMD width.

uint8_t ujit::UniCompiler::_vec_multiplier = 0[¶]

SIMD multiplier, derived from _vec_width (1, 2, 4).

RegType ujit::UniCompiler::_vec_reg_type = RegType::kNone[¶]

SIMD register type (AsmJit).

TypeId ujit::UniCompiler::_vec_type_id = TypeId::kVoid[¶]

SIMD type id (AsmJit).

FuncNode* ujit::UniCompiler::_func_node = nullptr[¶]

Function node.

BaseNode* ujit::UniCompiler::_func_init = nullptr[¶]

Function initialization hook.

BaseNode* ujit::UniCompiler::_func_end = nullptr[¶]

Function end hook (to add 'unlikely' branches).

Gp ujit::UniCompiler::_gp_none[¶]

Invalid GP register.

Mem ujit::UniCompiler::_tmp_stack[size_t(StackId::kMaxValue) +1][¶]

Temporary stack used to transfer SIMD regs to GP/MM.

int32_t ujit::UniCompiler::_common_table_offset = 0[¶]

Offset to the first constant to the commonTable global.

Gp ujit::UniCompiler::_common_table_ptr[¶]

Pointer to the commonTable constant pool (only used in 64-bit mode).