[PATCH] Add MIPS32r2/MT ASE pause instruction
Richard Sandiford
rdsandiford@googlemail.com
Thu Dec 8 20:44:00 GMT 2011
Andrew Pinski <andrew.pinski@caviumnetworks.com> writes:
> On Thu, Dec 8, 2011 at 11:52 AM, Richard Sandiford
> <rdsandiford@googlemail.com> wrote:
>> "Maciej W. Rozycki" <macro@linux-mips.org> writes:
>>>> Index: opcodes/mips-opc.c
>>>> ===================================================================
>>>> RCS file: /cvs/src/src/opcodes/mips-opc.c,v
>>>> retrieving revision 1.89
>>>> diff -u -p -r1.89 mips-opc.c
>>>> --- opcodes/mips-opc.c 29 Nov 2011 20:28:55 -0000 1.89
>>>> +++ opcodes/mips-opc.c 7 Dec 2011 22:39:50 -0000
>>>> @@ -1169,6 +1169,7 @@ const struct mips_opcode mips_builtin_op
>>>> {"ori", "t,r,i", 0x34000000, 0xfc000000, WR_t|RD_s, 0, I1 },
>>>> {"pabsdiff.ob", "X,Y,Q",0x78000009, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, SB1 },
>>>> {"pabsdiffc.ob", "Y,Q", 0x78000035, 0xfc2007ff, RD_S|RD_T|FP_D, WR_MACC, SB1 },
>>>> +{"pause", "", 0x00000140, 0xffffffff, TRAP, 0, I33|MT32},
>>>> {"pavg.ob", "X,Y,Q", 0x78000008, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, SB1 },
>>>> {"pickf.ob", "X,Y,Q", 0x78000002, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX|SB1 },
>>>> {"pickf.ob", "D,S,T", 0x4ac00002, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
>>>
>>> I think it's redundant to say |MT32 here as MT32 already implies I33 --
>>> the MT ASE requires rev. 2 of the architecture.
>>>
>>> Also please use NODS rather than TRAP -- although both macros expand to
>>> the same numerical value, they have been semantically split so that the
>>> former refers to instructions that must not be scheduled into a delay slot
>>> for architectural reasons (undefined behaviour) and the latter is for
>>> instructions that are meant to generate a trap and we chose not to
>>> schedule these instructions into a delay slot merely to make life of other
>>> software easier (delay-slot execution is just fine).
>>>
>>> Yes, I know most MT instructions use the TRAP flag, but that's because
>>> there's really no reason I know of they should have this flag at all in
>>> the first place, so they have been left as classified "for someone's
>>> convenience" (some can legitimately trap indeed, i.e. FORK when run out of
>>> thread contexts). PAUSE's delay-slot operation is on the other hand
>>> undefined (which actually brings a concern about forward compatibility of
>>> old software, hmm...).
>>>
>>> I can't approve the change, but it looks good to me otherwise.
>>
>> OK with Maciej's changes (i.e. MT32 rather than "I33|MT32" and
>> NODS rather than TRAP).
>
> It is part of the MIPS32R2 instruction set as of v2.6 (and not just
> MT32). So should it be just I33 then?
Yeah, sorry.
Richard
More information about the Binutils
mailing list