[LLVMdev] How to bind a register variable with a given general purpose register?
kennethuil at gmail.com
Mon Jan 4 05:44:55 PST 2010
On Sun, Jan 3, 2010 at 8:59 PM, Heyu Zhu <zhu.heyu at gmail.com> wrote:
> Hi everyone,
> There are 16 GPRs in my RISC, but in fact GPR13 is read-only and connected
> to output of an A/D converter.
> It would be very convenient if i could bind a register variable with GPR13.
> Because i am a newbie i don't know how my llvm backend can support that.
> I plan to implement it as below.
> A. first declare a global variable in c-code
> int ADC asm("GPR13");
> B. If backend finds a variable is loaded from "GPR13" use GPR13 instead.
> C. backend can't allocate GPR13 to other variable
> Is it a foolish method? Is there a better one? Please give me some guidance
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
If your end goal is to allow programs to use the output of the A/D
converter, my recommendation would be to create a platform-specific
intrinsic function that returns the output of the A/D converter, and
have your back-end refuse to allocate GPR13 as a register. The
intrinsic function would of course simply cough up the value of GPR13,
which would then be available for use in the program.
More information about the llvm-dev