Previous: TILE-Gx Registers, Up: TILE-Gx Syntax [Contents][Index]
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:
hw0This modifier is used to load bits 0-15 of the symbol’s address.
hw1This modifier is used to load bits 16-31 of the symbol’s address.
hw2This modifier is used to load bits 32-47 of the symbol’s address.
hw3This modifier is used to load bits 48-63 of the symbol’s address.
hw0_lastThis modifier yields the same value as hw0, but it also checks
that the value does not overflow.
hw1_lastThis modifier yields the same value as hw1, but it also checks
that the value does not overflow.
hw2_lastThis 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_gotThis modifier is used to load bits 0-15 of the symbol’s offset in the GOT entry corresponding to the symbol.
hw0_last_gotThis modifier yields the same value as hw0_got, but it also
checks that the value does not overflow.
hw1_last_gotThis 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.
pltThis 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_pltThis modifier is used to load bits 0-15 of the pc-relative address of a plt entry.
hw1_pltThis modifier is used to load bits 16-31 of the pc-relative address of a plt entry.
hw1_last_pltThis modifier yields the same value as hw1_plt, but it also
checks that the value does not overflow.
hw2_last_pltThis 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_gdThis 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_gdThis modifier yields the same value as hw0_tls_gd, but it also
checks that the value does not overflow.
hw1_last_tls_gdThis 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_ieThis 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_ieThis modifier yields the same value as hw0_tls_ie, but it also
checks that the value does not overflow.
hw1_last_tls_ieThis 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_leThis 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_leThis modifier yields the same value as hw0_tls_le, but it also
checks that the value does not overflow.
hw1_last_tls_leThis 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_callThis modifier is used to tag an instrution as the “call” part of a calling sequence for a TLS GD reference of its operand.
tls_gd_addThis 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_loadThis modifier is used to tag an instruction as the “load” part of a calling sequence for a TLS IE reference of its operand.
Previous: TILE-Gx Registers, Up: TILE-Gx Syntax [Contents][Index]