The National Semiconductor CR16 target of as has a few machine dependent operand qualifiers.
Operand expression type qualifier is an optional field in the instruction operand, to determines the type of the expression field of an operand. The @ is required. CR16 architecture uses one of the following expression qualifiers:
sSpecifies expression operand type as small
mSpecifies expression operand type as medium
lSpecifies expression operand type as large
cSpecifies the CR16 Assembler generates a relocation entry for the operand, where pc has implied bit, the expression is adjusted accordingly. The linker uses the relocation entry to update the operand address at link time.
got/GOTSpecifies the CR16 Assembler generates a relocation entry for the operand, offset from Global Offset Table. The linker uses this relocation entry to update the operand address at link time
cgot/cGOTSpecifies the CompactRISC Assembler generates a relocation entry for the operand, where pc has implied bit, the expression is adjusted accordingly. The linker uses the relocation entry to update the operand address at link time.
CR16 target operand qualifiers and its size (in bits):
For example:
1movw $_myfun@c,r1This loads the address of _myfun, shifted right by 1, into r1. 2movd $_myfun@c,(r2,r1)This loads the address of _myfun, shifted right by 1, into register-pair r2-r1. 3_myfun_ptr:.long _myfun@cloadd _myfun_ptr, (r1,r0)jal (r1,r0)This .long directive, the address of _myfunc, shifted right by 1 at link time. 4loadd _data1@GOT(r12), (r1,r0)This loads the address of _data1, into global offset table (ie GOT) and its offset value from GOT loads into register-pair r2-r1. 5loadd _myfunc@cGOT(r12), (r1,r0)This loads the address of _myfun, shifted right by 1, into global offset table (ie GOT) and its offset value from GOT loads into register-pair r1-r0.