.lcomm symbol , length[, alignment]
Reserve length (an absolute expression) bytes for a local common
denoted by symbol. The section and value of symbol are
those of the new local common. The addresses are allocated in the bss
section, so that at run-time the bytes start off zeroed. Since
symbol is not declared global, it is normally not visible to
ld
. The optional third parameter, alignment,
specifies the desired alignment of the symbol in the bss section.
This directive is only available for COFF based x86 targets.
.largecomm symbol , length[, alignment]
This directive behaves in the same way as the comm
directive
except that the data is placed into the .lbss section instead of
the .bss section .comm symbol , length
.
The directive is intended to be used for data which requires a large amount of space, and it is only available for ELF based x86_64 targets.
.value expression [, expression]
This directive behaves in the same way as the .short
directive,
taking a series of comma separated expressions and storing them as
two-byte wide values into the current section.
.insn [prefix[,...]] [encoding] major-opcode[+r
|/extension
] [,operand[,...]]
This directive allows composing instructions which as
may not know about yet, or which it has no way of expressing (which
can be the case for certain alternative encodings). It assumes certain
basic structure in how operands are encoded, and it also only
recognizes - with a few extensions as per below - operands otherwise
valid for instructions. Therefore there is no guarantee that
everything can be expressed (e.g. the original Intel Xeon Phi’s MVEX
encodings cannot be expressed).
VEX
[.len
][.prefix
][.space
][.w
]
EVEX
[.len
][.prefix
][.space
][.w
]
XOP
space[.len
][.prefix
][.w
]
Here
LIG
, 128
, 256
, or (EVEX
only) 512
as well as L0
/ L1
for VEX / XOP and
L0
...L3
for EVEX
NP
, 66
, F3
, or F2
0f
, 0f38
, 0f3a
, or M0
...M31
for VEX
08
...1f
for XOP
0f
, 0f38
, 0f3a
, or M0
...M15
for EVEX
WIG
, W0
, or W1
Defaults:
LIG
otherwise. (Obviously
len has to be omitted when there’s EVEX rounding control
specified later in the operands.)
NP
.
WIG
otherwise.
+r
can be suffixed to the major opcode
expression to specify register-only encoding forms not using a ModR/M
byte. /extension
can alternatively be suffixed to the
major opcode expression to specify an extension opcode, encoded in bits
3-5 of the ModR/M byte.
Encoding of operands: While for a memory operand (of which there can be only one) it is clear how to encode it in the resulting ModR/M byte, register operands are encoded strictly in this order (operand counts do not include immediate ones in the enumeration below, and if there was an extension opcode specified it counts as a register operand; VEX.vvvv is meant to cover XOP and EVEX as well):
obviously with the ModR/M.rm slot skipped when there is a memory
operand, and obviously with the ModR/M.reg slot skipped when there is
an extension opcode. For Intel syntax of course the opposite order
applies. With +r
(and hence no ModR/M) there can only be a
single register operand for legacy encodings. VEX and alike can have
two register operands, where the second (first in Intel syntax) would
go into VEX.vvvv.
Immediate operands (including immediate-like displacements, i.e. when
not part of ModR/M addressing) are emitted in the order specified,
regardless of AT&T or Intel syntax. Since it may not be possible to
infer the size of such immediates, they can be suffixed by
{:sn}
or {:un}
, representing signed /
unsigned immediates of the given number of bits respectively. When
emitting such operands, the number of bits will be rounded up to the
smallest suitable of 8, 16, 32, or 64. Immediates wider than 32 bits
are permitted in 64-bit code only.
For EVEX encoding memory operands with a displacement need to know
Disp8 scaling size in order to use an 8-bit displacement. For many
instructions this can be inferred from the types of other operands
specified. In Intel syntax ‘DWORD PTR’ and alike can be used to
specify the respective size. In AT&T syntax the memory operands can
be suffixed by {:dn}
to specify the size (in bytes).
This can be combined with an embedded broadcast specifier:
‘8(%eax){1to8:d8}’.
.noopt
Disable instruction size optimization.