ååå <wuxb45@xxxxxxxxx> writes: > I'm now modifying the gcc's md file, for a mips(el) target. gcc src's > version is 4.6.0. > > I want to modify the sign-extend insn generation. > > originally, mips use "lb"/"lh" instruction to sign-extend a byte/half. > > but in my target CPU it doesn't has "lb" and "lh", it only support > "lbu" and "lhu". so I have to generate such instructions to implement > a sign-ext. > > e.g. > > lb %0,%1 > > become: > > lbu %0,%1 > srl %0,%0,24 > sra %0,%0,24 > > similarly: > > lh %0,%1 > > become: > > lhu %0,%1 > srl %0,%0,16 > sra %0,%0,16 > > But, In original "md" file, two of these is a single pattern, it use > macro to generate lb/lh instruction: > > "l<SHORT:size>" > > <SHORT:size> may be "b" or "h" --> "lb" or "lh" > > but I want to get "24" from "b" ; get "16" form "h". How can I achieve this? Don't use a macro. Split the insn apart into separate insns. Ian