mtsprg on BOOKE

Kumar Gala kumar.gala@freescale.com
Mon Nov 1 20:25:00 GMT 2004


Jeff,

Looking at opcode/ppc-opc.c I think what you want to look at modifying 
the following:



/* The operands table.

    The fields are bits, shift, insert, extract, flags.

    We used to put parens around the various additions, like the one
    for BA just below.  However, that caused trouble with feeble
    compilers with a limit on depth of a parenthesized expression, like
    (reportedly) the compiler in Microsoft Developer Studio 5.  So we
    omit the parens, since the macros are never used in a context where
    the addition will be ambiguous.  */

.... [snip] ....

   /* The SPRG register number in an XFX form m[ft]sprg instruction.  */
#define SPRG SPRBAT + 1
#define SPRG_MASK (0x3 << 16)
   { 2, 16, NULL, NULL, 0 },

-- 

You will want to grow the size of the field from 2 bits to 3.  I can 
remember if you will need to adjust the shift amount or not.  I would 
also recommend adding some testcases to gas/testsuite/ppc/booke.{s,d}

- kumar

On Nov 1, 2004, at 9:26 AM, Jeff Baker wrote:

> I've never worked in the opcodes area before and I'm not sure how to
> implement this change.  Can anyone give me a hand?
>
> James E Wilson wrote:
>  > On Fri, 2004-10-29 at 09:17, Jeff Baker wrote:
>  >
> >>Why does the following assembly produce errors on BOOKE?
>  >>mtsprg 7, %r3
>  >
> >
> > Looking at the sources, opcode/ppc-opc.c, I see that the mtsprg macro
>  > only takes 2-bit sprg register numbers, which is apparently correct 
> for
>  > the basic ppc architecture, but not for e500.  This should probably 
> be
>  > conditional on the architecture choice.  I haven't looked at any
>  > architecture or processor manuals to double check.
>  >
> > Meanwhile, "mtsprg7 %r3" will work.  Likewise for mfsprg.



More information about the Binutils mailing list