|
Message
From: Balaji V. Iyer<bviyer@n...>
Date: Wed Dec 12 13:53:15 CET 2007
Subject: [openrisc] RE: Help with another constraint
Hi Revital1, Thank you very much for your help. The ISA I am using (OpenRISC) does not provide an alternative for moving a constant into memory. The only way of doing this is to move the constant into a register (which i am doing) and then move that register value into memory. So what can I do in that case?
Thanks,
Baljai V. Iyer.
-- Balaji V. Iyer PhD Student, Center for Efficient, Scalable and Reliable Computing, Department of Electrical and Computer Engineering, North Carolina State University.
-----Original Message----- From: Revital1 Eres [mailto:ERES@i...] Sent: Wednesday, December 12, 2007 7:14 AM To: Balaji V. Iyer Cc: gcc@g...; openrisc@o...; 'Rask Ingemann Lambertsen' Subject: RE: Help with another constraint
Hello,
I think you should add the pair of constraints m and I respectively to the description of the instruction in your md file (and a relevant case 8 to handle such instruction), i.e.:
(define_insn "movqi" - [(set (match_operand:QI 0 "nonimmediate_operand" "=p,q,m,m,p,q,p,q") - (match_operand:QI 1 "general_operand" "m,m,p,q,p,q,I,I"))] + [(set (match_operand:QI 0 "nonimmediate_operand" "=p,q,m,m,p,q,p,q,m") + (match_operand:QI 1 "general_operand" "m,m,p,q,p,q,I,I,I"))] "" "* switch(which_alternative) @@ -17,6 +17,8 @@ case 6: case 7: return \"l.addi \\t%0,r0,%1\\t # move immediate\";, + case 8: + return ...; default: return \"invalid alternative\"; }
It seems that the pair m and I is missing (which indicate the memory = constant instruction). You could look for which_alternative variable in GCC internals for more details on this.
Revital
|
 |