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.