On Thu, Apr 07, 2005 at 07:53:49PM +0200, Fabrizio Fazzino wrote:
> Hi all,
> I'm working to an hardware extension of the MIPS32 instruction set
> and I need to convert my new instruction into an existing opcode
> to make it possible for the normal GCC to correctly compile the code.
>
> Just to be clear, to obtain my new FZMIN instruction like
>
> FZMIN $rd, $rs, $rt
>
> I have to convert it into
>
> LWC1 $rt, rd<<11 ($rs)
>
> that is an existing (in some cases unused) opcode.
>
> I'm currently using hardcoded values for the parameters, so
> fzmin(10,8,9) will be transformed into
> asm("lwc1 $9, 10<<11($8)" : : : "$10");
>
> It works, but I need a way to set the values of the parameters
> at runtime; so I've tried the following macro:
>
> #define fzmin(rd, rs, rt) asm("lwc1 $rt, rd<<11($rs)");
Which will leave the assembler entirely unimpressed ;-)
> As you can imagine I'm not an expert of MIPS Assembly macros:
> what I've written does NOT work since the values of rd,rs,rt
> are NOT substituted inside the asm string.
>
> Is there any way to do what I need? I would appreciate your
> help very much.
Unless you only have a few instructions and are going for a quick hack
I really suggest to add proper support for these instructions to binutils.
Having working support in as, gdb, objdump will make your life so much
easier.
Ralf
|