as: TILEPro Modifiers
1
1 9.48.2.3 Symbolic Operand Modifiers
1 ...................................
1
1 The assembler supports several modifiers when using symbol addresses in
1 TILEPro instruction operands. The general syntax is the following:
1
1 modifier(symbol)
1
1 The following modifiers are supported:
1
1 'lo16'
1
1 This modifier is used to load the low 16 bits of the symbol's
1 address, sign-extended to a 32-bit value (sign-extension allows it
1 to be range-checked against signed 16 bit immediate operands
1 without complaint).
1
1 'hi16'
1
1 This modifier is used to load the high 16 bits of the symbol's
1 address, also sign-extended to a 32-bit value.
1
1 'ha16'
1
1 'ha16(N)' is identical to 'hi16(N)', except if 'lo16(N)' is
1 negative it adds one to the 'hi16(N)' value. This way 'lo16' and
1 'ha16' can be added to create any 32-bit value using 'auli'. For
1 example, here is how you move an arbitrary 32-bit address into r3:
1
1 moveli r3, lo16(sym)
1 auli r3, r3, ha16(sym)
1
1 'got'
1
1 This modifier is used to load the offset of the GOT entry
1 corresponding to the symbol.
1
1 'got_lo16'
1
1 This modifier is used to load the sign-extended low 16 bits of the
1 offset of the GOT entry corresponding to the symbol.
1
1 'got_hi16'
1
1 This modifier is used to load the sign-extended high 16 bits of the
1 offset of the GOT entry corresponding to the symbol.
1
1 'got_ha16'
1
1 This modifier is like 'got_hi16', but it adds one if 'got_lo16' of
1 the input value is negative.
1
1 'plt'
1
1 This modifier is used for function symbols. It causes a _procedure
1 linkage table_, an array of code stubs, to be created at the time
1 the shared object is created or linked against, together with a
1 global offset table entry. The value is a pc-relative offset to
1 the corresponding stub code in the procedure linkage table. This
1 arrangement causes the run-time symbol resolver to be called to
1 look up and set the value of the symbol the first time the function
1 is called (at latest; depending environment variables). It is only
1 safe to leave the symbol unresolved this way if all references are
1 function calls.
1
1 'tls_gd'
1
1 This modifier is used to load the offset of the GOT entry of the
1 symbol's TLS descriptor, to be used for general-dynamic TLS
1 accesses.
1
1 'tls_gd_lo16'
1
1 This modifier is used to load the sign-extended low 16 bits of the
1 offset of the GOT entry of the symbol's TLS descriptor, to be used
1 for general dynamic TLS accesses.
1
1 'tls_gd_hi16'
1
1 This modifier is used to load the sign-extended high 16 bits of the
1 offset of the GOT entry of the symbol's TLS descriptor, to be used
1 for general dynamic TLS accesses.
1
1 'tls_gd_ha16'
1
1 This modifier is like 'tls_gd_hi16', but it adds one to the value
1 if 'tls_gd_lo16' of the input value is negative.
1
1 'tls_ie'
1
1 This modifier is used to load the offset of the GOT entry
1 containing the offset of the symbol's address from the TCB, to be
1 used for initial-exec TLS accesses.
1
1 'tls_ie_lo16'
1
1 This modifier is used to load the low 16 bits of the offset of the
1 GOT entry containing the offset of the symbol's address from the
1 TCB, to be used for initial-exec TLS accesses.
1
1 'tls_ie_hi16'
1
1 This modifier is used to load the high 16 bits of the offset of the
1 GOT entry containing the offset of the symbol's address from the
1 TCB, to be used for initial-exec TLS accesses.
1
1 'tls_ie_ha16'
1
1 This modifier is like 'tls_ie_hi16', but it adds one to the value
1 if 'tls_ie_lo16' of the input value is negative.
1
1 'tls_le'
1
1 This modifier is used to load the offset of the symbol's address
1 from the TCB, to be used for local-exec TLS accesses.
1
1 'tls_le_lo16'
1
1 This modifier is used to load the low 16 bits of the offset of the
1 symbol's address from the TCB, to be used for local-exec TLS
1 accesses.
1
1 'tls_le_hi16'
1
1 This modifier is used to load the high 16 bits of the offset of the
1 symbol's address from the TCB, to be used for local-exec TLS
1 accesses.
1
1 'tls_le_ha16'
1
1 This modifier is like 'tls_le_hi16', but it adds one to the value
1 if 'tls_le_lo16' of the input value is negative.
1
1 'tls_gd_call'
1
1 This modifier is used to tag an instruction as the "call" part of a
1 calling sequence for a TLS GD reference of its operand.
1
1 'tls_gd_add'
1
1 This modifier is used to tag an instruction as the "add" part of a
1 calling sequence for a TLS GD reference of its operand.
1
1 'tls_ie_load'
1
1 This modifier is used to tag an instruction as the "load" part of a
1 calling sequence for a TLS IE reference of its operand.
1