Problem with instruction description

youssef fahmi yflelion@hotmail.fr
Mon Jan 16 14:32:00 GMT 2012


Hello,
I'm sorry for the previous mail, I do not know why there were "Â" everywhere.
I am working on the porting of binutils to a new architecture.This processor has an instruction of the form: ld rx,[r1] + imm6 [load the 32 bit word at the address calculated from the contents of r1 plus the 6 bit immediate value (multiplied by 4) ]In summary: rx <- mem[r1 + imm6 * 4]
I need to generate code for this instruction, but only in the case where the code generator in the compiler generates a standard load, but with an offset appropriate for the imm6 value. That is to say the immediate value would be less than 256 and be a multiple of 4 (word access).
This is the description that I am using at the moment:(df f-imm6x4 "imm6x4" ()  11 6 UINT  ((value pc) (sra WI value (const 2)))  ((value pc) (sll WI value (const 2))))(dnop imm6x4 "imm6x4" () h-uint f-imm6x4)(dni ldstack-r1-imm6x4 "ldstack r1#imm6x4"    ()    "ld $r1,[r1]+$imm6x4" (+ (f-stack-opcode #05) r1 imm6x4)  ()    ())   However this description causes the "ld rx,[r1] + imm6" to be used whenever the immediate vallue is less than 256, and not JUST when the offset is also a multiple of 4.
How do I alter this description so that it only operates when the immediate value is less than 256 AND ALSO a multiple of 4.
I have already tried.... but this generates code with this instruction in these cases which are not appropriate.How do I achieve this? I guess that I'll have to create an attribute to handle this, but I could not get an attribute that suits me. is there a way to create an attribute of type integer, for example, but with only specific integers not necessarily following.  
Thanks in advance  for your answer.Youssef  		 	   		  



More information about the Cgen mailing list