tern.experimental.assembly

Provides interface to MSABI/SystemV ABI as well as generic register shenanigans.

Members

Aliases

ARRAY
alias ARRAY = void[]

Alias type to act as an array (void[])

FLOAT
alias FLOAT = float

Alias type to act as a floating point (float)

NATIVE
alias NATIVE = size_t

Alias type to act as a native (size_t)

isFloat
alias isFloat(T) = Alias!(__traits(isFloating, T))

True if T is a floating point to the ABI, otherwise, false.

isFloat
alias isFloat(T) = Alias!(__traits(isFloating, T) || isSomeString!T)

True if T is a floating point to the ABI, otherwise, false.

isNative
alias isNative(T) = Alias!(__traits(isScalar, T) || ((is(T == struct) || is(T == union) || is(T == enum)) && (T.sizeof == 1 || T.sizeof == 2 || T.sizeof == 4 || T.sizeof == 8)))

True if T is a native structure to the ABI, otherwise, false.

isNative
alias isNative(T) = Alias!(__traits(isScalar, T) || ((is(T == struct) || is(T == union) || is(T == enum)) && (T.sizeof <= 8)))

True if T is a native structure to the ABI, otherwise, false.

isOverflow
alias isOverflow(T) = Alias!false

True if T would spill into the stack after pairing, otherwise, false.

isOverflow
alias isOverflow(T) = Alias!(!isFloat!T && T.sizeof > 16 && T.sizeof <= 32)

True if T would spill into the stack after pairing, otherwise, false.

isPair
alias isPair(T) = Alias!false

True if T would be paired into multiple registers, otherwise, false.

isPair
alias isPair(T) = Alias!(!isFloat!T && is(T == struct) && T.sizeof > 8 && T.sizeof <= 32)

True if T would be paired into multiple registers, otherwise, false.

isSplit
alias isSplit(T) = Alias!(isFloat!T && T.sizeof > 8)

True if T would be split into several XMM registers, otherwise, false.

isSplit
alias isSplit(T) = Alias!(isFloat!T && T.sizeof > 8)

True if T would be split into several XMM registers, otherwise, false.

Static functions

prep
string prep()

Creates a mixin for preparing the stack for COUNT arguments.

rest
string rest()

Creates a mixin for restoring the stack after a call with COUNT arguments.

Static variables

a0
uint a0;
Undocumented in source.
a0
uint a0;
Undocumented in source.
a1
uint a1;
Undocumented in source.
a1
uint a1;
Undocumented in source.
a10
uint a10;
Undocumented in source.
a11
uint a11;
Undocumented in source.
a12
uint a12;
Undocumented in source.
a13
uint a13;
Undocumented in source.
a14
uint a14;
Undocumented in source.
a15
uint a15;
Undocumented in source.
a16
uint a16;
Undocumented in source.
a17
uint a17;
Undocumented in source.
a18
uint a18;
Undocumented in source.
a19
uint a19;
Undocumented in source.
a2
uint a2;
Undocumented in source.
a2
uint a2;
Undocumented in source.
a3
uint a3;
Undocumented in source.
a3
uint a3;
Undocumented in source.
a4
uint a4;
Undocumented in source.
a4
uint a4;
Undocumented in source.
a5
uint a5;
Undocumented in source.
a5
uint a5;
Undocumented in source.
a6
uint a6;
Undocumented in source.
a7
uint a7;
Undocumented in source.
a8
uint a8;
Undocumented in source.
a9
uint a9;
Undocumented in source.
eax
uint eax;
Undocumented in source.
ebp
uint ebp;
Undocumented in source.
ebx
uint ebx;
Undocumented in source.
ecx
uint ecx;
Undocumented in source.
edi
uint edi;
Undocumented in source.
edx
uint edx;
Undocumented in source.
esi
uint esi;
Undocumented in source.
esp
uint esp;
Undocumented in source.
movBuff
ubyte[8] movBuff;
Undocumented in source.
r10
uint r10;
Undocumented in source.
r11
uint r11;
Undocumented in source.
r12
uint r12;
Undocumented in source.
r13
uint r13;
Undocumented in source.
r14
uint r14;
Undocumented in source.
r15
uint r15;
Undocumented in source.
r8
uint r8;
Undocumented in source.
r9
uint r9;
Undocumented in source.
rax
uint rax;
Undocumented in source.
rbx
uint rbx;
Undocumented in source.
rcx
uint rcx;
Undocumented in source.
rdi
uint rdi;
Undocumented in source.
rdx
uint rdx;
Undocumented in source.
rsi
uint rsi;
Undocumented in source.
xmm0
uint xmm0;
Undocumented in source.
xmm1
uint xmm1;
Undocumented in source.
xmm10
uint xmm10;
Undocumented in source.
xmm11
uint xmm11;
Undocumented in source.
xmm12
uint xmm12;
Undocumented in source.
xmm13
uint xmm13;
Undocumented in source.
xmm14
uint xmm14;
Undocumented in source.
xmm15
uint xmm15;
Undocumented in source.
xmm2
uint xmm2;
Undocumented in source.
xmm3
uint xmm3;
Undocumented in source.
xmm4
uint xmm4;
Undocumented in source.
xmm5
uint xmm5;
Undocumented in source.
xmm6
uint xmm6;
Undocumented in source.
xmm7
uint xmm7;
Undocumented in source.
xmm8
uint xmm8;
Undocumented in source.
xmm9
uint xmm9;
Undocumented in source.

Structs

INOUT
struct INOUT

Struct to act as an inout, reference with special treatment by mov.

REFERENCE
struct REFERENCE

Struct to act as a reference (ubyte[33])

Templates

mov
template mov(uint ID, alias VAR, AS = void, uint _LINE = __LINE__)
template mov(uint ID, T, T val, AS = void, uint _LINE = __LINE__)

All chained uses of mov must be enclosed in a scope using {..} Failure to do this will result in registers being overwritten by other movs, as this template uses scope (exit) for inline asm!

Meta