This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Porting GCC: understanding the meaning of predicates


Hello,

I have some questions about the Predicate-Field in the RTL-Template of an Instruction Pattern.
I have the following situation: The current instruction follows an indirect addressing and the address of the memory operand stands in a register. Does this operand is valid for the predicate "general_operand" or "register_operand" ? I does not think so, but I'm not sure, because a "general_operand" can be a register operand (Value stands in a register), a memory reference (operand is in memory) or an immediate operand (a constant). But when there is an indirect Operand, the address of this operand can also be in a register, or it can be a memory reference or an immediate operand. So if I define as predicate "register_operand", is a valid operand really in a register or is it possible that only the address of this operand is in the register ?
There is another predicate "indirect_operand" for such cases. How can I find out in the instruction pattern, where the address of the operand is stored - in a register, in memory or as immediate value ? Can I do this with the Constraints ? For example: when I want to have the address of the operand in one of my pointer registers - can I force this by the Constraint-Letter that I defined for this Pointer-Register-Class ?

The data memory of my Target Machine cannot be addressed directly, that means, that it is not possible to move a datum directly from memory to a register or vice versa. The only way to do this is to load the memory address of the datum into one of the pointer register at first. Then you can move the datum indirectly in the Accumulator (mov a,@dptr  <->  mov @dptr,a). How can I realize this in the "mov*"-Instruction Patterns ?

Ciao,
Anja
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]