as: TILE-Gx Modifiers
9.46.2.3 Symbolic Operand Modifiers
...................................
The assembler supports several modifiers when using symbol addresses in
TILE-Gx instruction operands. The general syntax is the following:
modifier(symbol)
The following modifiers are supported:
'hw0'
This modifier is used to load bits 0-15 of the symbol's address.
'hw1'
This modifier is used to load bits 16-31 of the symbol's address.
'hw2'
This modifier is used to load bits 32-47 of the symbol's address.
'hw3'
This modifier is used to load bits 48-63 of the symbol's address.
'hw0_last'
This modifier yields the same value as 'hw0', but it also checks
that the value does not overflow.
'hw1_last'
This modifier yields the same value as 'hw1', but it also checks
that the value does not overflow.
'hw2_last'
This modifier yields the same value as 'hw2', but it also checks
that the value does not overflow.
A 48-bit symbolic value is constructed by using the following
idiom:
moveli r0, hw2_last(sym)
shl16insli r0, r0, hw1(sym)
shl16insli r0, r0, hw0(sym)
'hw0_got'
This modifier is used to load bits 0-15 of the symbol's offset in
the GOT entry corresponding to the symbol.
'hw0_last_got'
This modifier yields the same value as 'hw0_got', but it also
checks that the value does not overflow.
'hw1_last_got'
This modifier is used to load bits 16-31 of the symbol's offset in
the GOT entry corresponding to the symbol, and it also checks that
the value does not overflow.
'plt'
This modifier is used for function symbols. It causes a _procedure
linkage table_, an array of code stubs, to be created at the time
the shared object is created or linked against, together with a
global offset table entry. The value is a pc-relative offset to
the corresponding stub code in the procedure linkage table. This
arrangement causes the run-time symbol resolver to be called to
look up and set the value of the symbol the first time the function
is called (at latest; depending environment variables). It is only
safe to leave the symbol unresolved this way if all references are
function calls.
'hw0_plt'
This modifier is used to load bits 0-15 of the pc-relative address
of a plt entry.
'hw1_plt'
This modifier is used to load bits 16-31 of the pc-relative address
of a plt entry.
'hw1_last_plt'
This modifier yields the same value as 'hw1_plt', but it also
checks that the value does not overflow.
'hw2_last_plt'
This modifier is used to load bits 32-47 of the pc-relative address
of a plt entry, and it also checks that the value does not
overflow.
'hw0_tls_gd'
This modifier is used to load bits 0-15 of the offset of the GOT
entry of the symbol's TLS descriptor, to be used for
general-dynamic TLS accesses.
'hw0_last_tls_gd'
This modifier yields the same value as 'hw0_tls_gd', but it also
checks that the value does not overflow.
'hw1_last_tls_gd'
This modifier is used to load bits 16-31 of the offset of the GOT
entry of the symbol's TLS descriptor, to be used for
general-dynamic TLS accesses. It also checks that the value does
not overflow.
'hw0_tls_ie'
This modifier is used to load bits 0-15 of the offset of the GOT
entry containing the offset of the symbol's address from the TCB,
to be used for initial-exec TLS accesses.
'hw0_last_tls_ie'
This modifier yields the same value as 'hw0_tls_ie', but it also
checks that the value does not overflow.
'hw1_last_tls_ie'
This modifier is used to load bits 16-31 of the offset of the GOT
entry containing the offset of the symbol's address from the TCB,
to be used for initial-exec TLS accesses. It also checks that the
value does not overflow.
'hw0_tls_le'
This modifier is used to load bits 0-15 of the offset of the
symbol's address from the TCB, to be used for local-exec TLS
accesses.
'hw0_last_tls_le'
This modifier yields the same value as 'hw0_tls_le', but it also
checks that the value does not overflow.
'hw1_last_tls_le'
This modifier is used to load bits 16-31 of the offset of the
symbol's address from the TCB, to be used for local-exec TLS
accesses. It also checks that the value does not overflow.
'tls_gd_call'
This modifier is used to tag an instruction as the "call" part of a
calling sequence for a TLS GD reference of its operand.
'tls_gd_add'
This modifier is used to tag an instruction as the "add" part of a
calling sequence for a TLS GD reference of its operand.
'tls_ie_load'
This modifier is used to tag an instruction as the "load" part of a
calling sequence for a TLS IE reference of its operand.