[LLVMdev] how to declare that two registers must be different
sabre at nondot.org
Mon Sep 18 10:27:50 PDT 2006
On Mon, 18 Sep 2006, [UTF-8] Rafael Esp?ndola wrote:
>> "The destination register shall not be the same as the operand
>> register Rm. R15 shall not be used as an operand or as the
>> destination register."
> The ARM ARM has this "Operand restriction" on MUL:
> Specifying the same register for <Rd> and <Rm> has UNPEDICTABLE results.
My copy of the ARM ARM says:
"Use of R15: Specifying R15 for register <Rd>, <Rm>, or <Rs> has
This is the same as above. However, it goes on to say:
"Operand restriction: Specifying the same register for <Rd> and <Rm> was
previously described as producing UNPREDICTABLE results. There is no
restriction in ARMv6, and it is believed all relevant ARMv4 and ARMv5
implementations do not require this restriction either, because high
performance multipliers read all their operands prior to writing back any
Perhaps this isn't an issue any more? I don't know the arch well enough
to know what it means by "all relevant" implementations.
>> Then, for the load and store multiple instructions, LDM and STM, the R15
>> should not be used as the base register. Neither should R15 be the
>> destination for an MCR, Move to Co-processor register from Register.
>> These are some examples, hopefully enough to alter the regalloc
>> interface to cope.
> Restrictions of the form cannot be register Rx can be solved by
> creating a register class without Rx. The problem is the "must not be
> the same" restriction.
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
More information about the llvm-dev