I am using gcc4.3.2.
In our microcontroller, move instruction(mov reg, imm) can accept
16bits and 32bits immediate operand.
The data memory size is less than 64KB, however, code memory size is
larger than 64KB.
The immediate operand may be addresses of variables in data sections
and function pointers. The address of variables can be represented by
16bits. However, function pointers may be larger than 16bits.
I'd like to use "mov reg, imm16" for addresses of variables and "mov
reg, imm32" for function pointers. So that the code size can be a
little bit smaller.
Another way to understand the requirement is the size of pointers to
data and text have to be different.

How can I select appropriate mov for them? I tried to use LABEL_REF
and SYMBOL_REL to distinguish between them, but it didn't help. It
seems that function pointers are treated as symbols too.
Are there any other cases that references to functions in text
sections are used in data sections?

Thanks.
-Qifei Fan

Reply via email to