Previous: TILE-Gx Registers, Up: TILE-Gx Syntax

##### 9.44.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 instrution 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.