fanqifei <fanqi...@gmail.com> writes:

> 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?

SYMBOL_REF_FUNCTION_P.

(A LABEL_REF refers to a goto label.)

Ian

Reply via email to