bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Fwd: Re: PA-RISC bug in gas]


From: John David Anglin
Subject: Re: [Fwd: Re: PA-RISC bug in gas]
Date: Mon, 23 May 2005 12:40:56 -0400 (EDT)

I've installed the enclosed change on the trunk.  It should fix the
problem.  It adds cache completer support to 1.1 style loads and stores.
It should now be possible to use either 1.x or 2.0 mneumonics.

Tested by inspection on hppa-unknown-linux-gnu.  I have also tested
the change with GCC builds on hppa-unknown-linux-gnu and
hppa2.0w-hp-hpux11.11.

Dave

> Hi Dave, Hi Alan,
> 
>    Right, lets get people talking together.
> 
>    Dan - I am sending this message to Dave Anglin and Alan Modra, the 
> maintainers of the HPPA gas port.
> 
>    Dave - this is Dan's response to your reply about the PA-RISC bug:
> 
> -------- Original Message --------
> Date: Wed, 18 May 2005 18:38:25 -0700
> To: Nick Clifton <address@hidden>
> From: Dan Bonachea <address@hidden>
> Subject: Re: PA-RISC bug in gas
> Cc: address@hidden
> 
> At 02:50 AM 5/18/2005, Nick Clifton wrote:
> >Hi Dan,
> >
> >>Hi - I'm trying to use gas 2.15 on PA-RISC, and I want to issue an ldcws 
> >>instruction like:
> >>     ldcws,co 0(%r20), %r19
> >>which is accepted by the HP assembler, but gas barfs with:
> >>    Error: Invalid Short Load/Store Completer.
> >>gas apparently doesn't like the cache control hint completor, which is 
> >>critical for semaphore performance on PA-RISC. I've tried every reasonable 
> >>combination of characters for the completer that I can think of, and 
> >>nothing 
> >>seems to work.
> >
> >I passed this question and your proposed patch onto the HPPA binutils port 
> >maintainer.  This is what he had to say about it:
> >
> >: One problem is you are mixing PA 1.x and 2.0 assembler semantics.
> >: The co completer is a PA 2.0 feature.  PA 1.x processors don't
> >: support this completer.  The PA 2.0 semantics is ldcw,co.  I guess
> >: the HP assembler accepts ldcws as a synonym for ldcw when generating
> >: PA 2.0 code.
> >
> >: I suspect that if Dan changes ldcws to ldcw and specifies .level
> >: correctly, the assembler will accept the co completer.
> >
> >I hope that this helps.
> 
> With all due respect, I believe your unnamed maintainer may have it 
> backwards.
> According to the "PA-RISC 1.1 Architecture and Instruction Set Reference
> Manual, February 1994" page 5-18 Table 5.10, the CO completer *is* 
> supported
> in the PA-RISC 1.1 ABI (although it's just a hint, so the processor
> implementation is of course free to ignore it). On the contrary, "ldcw" 
> does
> not appear to be a valid PA 1.1 instruction - it does not appear 
> anywhere in
> the architecture manual, although both gas and the HP assembler accept 
> it and
> generate the same opcode as ldcws (must be an alias for the same
> instruction?). Here is some assembly output from the HP assembler:
> 
>     12 0000000C (0F0015DC)          ldcws,co (%arg2),%ret0
>     13 00000010 (0F0015DC)          ldcw,co (%arg2),%ret0
>     14 00000014 (0F0011DC)          ldcws (%arg2),%ret0
>     15 00000018 (0F0011DC)          ldcw (%arg2),%ret0
> Note that all four mnemonics generate the same opcode, the only difference
> being the
> 
> In any case, it seems the HP assembler is correct to accept ldcws,co - 
> the HP
> document "Implementing Spinlocks on the Intel Itanium Architecture and
> PA-RISC, 2003" includes the assembly code below, which notably includes 
> a use
> of ldcws,co and works on the HP assembler.
> 
> I've verified that gas does indeed accept "ldcw,co", but this doesn't make
> sense because it rejects "ldcws,co" which seems to be the exact same
> instruction as far as the ABI is concerned.
> 
> Dan
> 
> .code
> .export load_and_clear,entry,priv_lev=3,rtnval=gr
> .proc
> 
> load_and_clear
>          .callinfo no_calls
>          .enter
>          addi 15,%arg0,%arg2
>          depi 0,31,4,%arg2
>          bv (%r2)
>          ldcws,co (%arg2),%ret0
> .leave
> .procend
> ----------------------------------------------------------------
> 
> Cheers
>    Nick
> 

Dave
-- 
J. David Anglin                                  address@hidden
National Research Council of Canada              (613) 990-0752 (FAX: 952-6602)

2005-05-23  John David Anglin  <address@hidden>

        * hppa.h (FLAG_STRICT): Correct comment.
        (pa_opcodes): Update load and store entries to allow both PA 1.X and
        PA 2.0 mneumonics when equivalent.  Entries with cache control
        completers now require PA 1.1.  Adjust whitespace.

Index: hppa.h
===================================================================
RCS file: /cvs/src/src/include/opcode/hppa.h,v
retrieving revision 1.52
diff -u -3 -p -r1.52 hppa.h
--- hppa.h      10 May 2005 10:21:12 -0000      1.52
+++ hppa.h      22 May 2005 20:25:54 -0000
@@ -48,8 +48,7 @@ struct pa_opcode
     char flags;
 };
 
-/* Enable/disable strict syntax checking.  Not currently used, but will
-   be necessary for PA2.0 support in the future.  */
+/* Enable/disable strict syntax checking.  */
 #define FLAG_STRICT 0x1
 
 /*
@@ -180,8 +179,8 @@ Completer operands all have 'c' as the p
    cs   store bytes short completer.
    cA   store bytes short completer.  Like cs, but emits a space
         after in disassembler.
-   ce   long load/store completer for LDW/STW with a different encoding than 
the
-       others
+   ce   long load/store completer for LDW/STW with a different encoding
+       than the others
    cc   load cache control hint
    cd   load and clear cache control hint
    cC   store cache control hint
@@ -293,7 +292,7 @@ static const struct pa_opcode pa_opcodes
 { "ldi",       0x34000000, 0xffe00000, "l,x", pa20w, 0},/* ldo val(r0),r */
 { "ldi",       0x34000000, 0xffe0c000, "j,x", pa10, 0},/* ldo val(r0),r */
 
-{ "cmpib",     0xec000000, 0xfc000000, "?Qn5,b,w", pa20, FLAG_STRICT},
+{ "cmpib",     0xec000000, 0xfc000000, "?Qn5,b,w", pa20, FLAG_STRICT},
 { "cmpib",     0x84000000, 0xf4000000, "?nn5,b,w", pa10, FLAG_STRICT},
 { "comib",     0x84000000, 0xfc000000, "?nn5,b,w", pa10, 0}, /* comib{tf}*/
 /* This entry is for the disassembler only.  It will never be used by
@@ -315,141 +314,195 @@ static const struct pa_opcode pa_opcodes
 /* This entry is for the disassembler only.  It will never be used by
    assembler.  */
 { "addib",     0xac000000, 0xfc000000, "address@hidden,b,w", pa10, 0}, /* 
addib{tf}*/
-{ "nop",        0x08000240, 0xffffffff, "", pa10, 0},      /* or 0,0,0 */
-{ "copy",       0x08000240, 0xffe0ffe0, "x,t", pa10, 0},   /* or r,0,t */
-{ "mtsar",      0x01601840, 0xffe0ffff, "x", pa10, 0}, /* mtctl r,cr11 */
+{ "nop",       0x08000240, 0xffffffff, "", pa10, 0},      /* or 0,0,0 */
+{ "copy",      0x08000240, 0xffe0ffe0, "x,t", pa10, 0},   /* or r,0,t */
+{ "mtsar",     0x01601840, 0xffe0ffff, "x", pa10, 0}, /* mtctl r,cr11 */
 
 /* Loads and Stores for integer registers.  */
 
 { "ldd",       0x0c0010e0, 0xfc1f33e0, "cocc@(s,b),t", pa20, FLAG_STRICT},
 { "ldd",       0x0c0010e0, 0xfc1f33e0, "cocc@(b),t", pa20, FLAG_STRICT},
-{ "ldd",        0x0c0000c0, 0xfc0013c0, "cxccx(s,b),t", pa20, FLAG_STRICT},
-{ "ldd",        0x0c0000c0, 0xfc0013c0, "cxccx(b),t", pa20, FLAG_STRICT},
+{ "ldd",       0x0c0000c0, 0xfc0013c0, "cxccx(s,b),t", pa20, FLAG_STRICT},
+{ "ldd",       0x0c0000c0, 0xfc0013c0, "cxccx(b),t", pa20, FLAG_STRICT},
 { "ldd",       0x0c0010c0, 0xfc0013c0, "cmcc5(s,b),t", pa20, FLAG_STRICT},
 { "ldd",       0x0c0010c0, 0xfc0013c0, "cmcc5(b),t", pa20, FLAG_STRICT},
-{ "ldd",        0x50000000, 0xfc000002, "cq&(b),x", pa20w, FLAG_STRICT},
-{ "ldd",        0x50000000, 0xfc000002, "cq#(b),x", pa20, FLAG_STRICT},
-{ "ldw",        0x0c000080, 0xfc0013c0, "cxccx(s,b),t", pa10, FLAG_STRICT},
-{ "ldw",        0x0c000080, 0xfc0013c0, "cxccx(b),t", pa10, FLAG_STRICT},
-{ "ldw",       0x0c001080, 0xfc0013c0, "cmcc5(s,b),t", pa10, FLAG_STRICT},
-{ "ldw",       0x0c001080, 0xfc0013c0, "cmcc5(b),t", pa10, FLAG_STRICT},
+{ "ldd",       0x50000000, 0xfc000002, "cq&(b),x", pa20w, FLAG_STRICT},
+{ "ldd",       0x50000000, 0xfc000002, "cq#(b),x", pa20, FLAG_STRICT},
+{ "ldw",       0x0c000080, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT},
+{ "ldw",       0x0c000080, 0xfc001fc0, "cXx(b),t", pa10, FLAG_STRICT},
+{ "ldw",       0x0c000080, 0xfc0013c0, "cxccx(s,b),t", pa11, FLAG_STRICT},
+{ "ldw",       0x0c000080, 0xfc0013c0, "cxccx(b),t", pa11, FLAG_STRICT},
+{ "ldw",       0x0c001080, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT},
+{ "ldw",       0x0c001080, 0xfc001fc0, "cM5(b),t", pa10, FLAG_STRICT},
+{ "ldw",       0x0c001080, 0xfc0013c0, "cmcc5(s,b),t", pa11, FLAG_STRICT},
+{ "ldw",       0x0c001080, 0xfc0013c0, "cmcc5(b),t", pa11, FLAG_STRICT},
 { "ldw",       0x0c0010a0, 0xfc1f33e0, "cocc@(s,b),t", pa20, FLAG_STRICT},
 { "ldw",       0x0c0010a0, 0xfc1f33e0, "cocc@(b),t", pa20, FLAG_STRICT},
-{ "ldw",        0x4c000000, 0xfc000000, "ce<(b),x", pa20w, FLAG_STRICT},
-{ "ldw",        0x4c000000, 0xfc000000, "ceJ(s,b),x", pa10, FLAG_STRICT},
-{ "ldw",        0x4c000000, 0xfc000000, "ceJ(b),x", pa10, FLAG_STRICT},
-{ "ldw",        0x5c000004, 0xfc000006, "ce>(b),x", pa20w, FLAG_STRICT},
-{ "ldw",        0x5c000004, 0xfc000006, "ceK(s,b),x", pa20, FLAG_STRICT},
-{ "ldw",        0x5c000004, 0xfc000006, "ceK(b),x", pa20, FLAG_STRICT},
-{ "ldw",        0x48000000, 0xfc000000, "l(b),x", pa20w, FLAG_STRICT},
-{ "ldw",        0x48000000, 0xfc000000, "j(s,b),x", pa10, 0},
-{ "ldw",        0x48000000, 0xfc000000, "j(b),x", pa10, 0},
-{ "ldh",        0x0c000040, 0xfc0013c0, "cxccx(s,b),t", pa10, FLAG_STRICT},
-{ "ldh",        0x0c000040, 0xfc0013c0, "cxccx(b),t", pa10, FLAG_STRICT},
-{ "ldh",       0x0c001040, 0xfc0013c0, "cmcc5(s,b),t", pa10, FLAG_STRICT},
-{ "ldh",       0x0c001040, 0xfc0013c0, "cmcc5(b),t", pa10, FLAG_STRICT},
+{ "ldw",       0x4c000000, 0xfc000000, "ce<(b),x", pa20w, FLAG_STRICT},
+{ "ldw",       0x4c000000, 0xfc000000, "ceJ(s,b),x", pa10, FLAG_STRICT},
+{ "ldw",       0x4c000000, 0xfc000000, "ceJ(b),x", pa10, FLAG_STRICT},
+{ "ldw",       0x5c000004, 0xfc000006, "ce>(b),x", pa20w, FLAG_STRICT},
+{ "ldw",       0x5c000004, 0xfc000006, "ceK(s,b),x", pa20, FLAG_STRICT},
+{ "ldw",       0x5c000004, 0xfc000006, "ceK(b),x", pa20, FLAG_STRICT},
+{ "ldw",       0x48000000, 0xfc000000, "l(b),x", pa20w, FLAG_STRICT},
+{ "ldw",       0x48000000, 0xfc000000, "j(s,b),x", pa10, 0},
+{ "ldw",       0x48000000, 0xfc000000, "j(b),x", pa10, 0},
+{ "ldh",       0x0c000040, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT},
+{ "ldh",       0x0c000040, 0xfc001fc0, "cXx(b),t", pa10, FLAG_STRICT},
+{ "ldh",       0x0c000040, 0xfc0013c0, "cxccx(s,b),t", pa11, FLAG_STRICT},
+{ "ldh",       0x0c000040, 0xfc0013c0, "cxccx(b),t", pa11, FLAG_STRICT},
+{ "ldh",       0x0c001040, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT},
+{ "ldh",       0x0c001040, 0xfc001fc0, "cM5(b),t", pa10, FLAG_STRICT},
+{ "ldh",       0x0c001040, 0xfc0013c0, "cmcc5(s,b),t", pa11, FLAG_STRICT},
+{ "ldh",       0x0c001040, 0xfc0013c0, "cmcc5(b),t", pa11, FLAG_STRICT},
 { "ldh",       0x0c001060, 0xfc1f33e0, "cocc@(s,b),t", pa20, FLAG_STRICT},
 { "ldh",       0x0c001060, 0xfc1f33e0, "cocc@(b),t", pa20, FLAG_STRICT},
-{ "ldh",        0x44000000, 0xfc000000, "l(b),x", pa20w, FLAG_STRICT},
-{ "ldh",        0x44000000, 0xfc000000, "j(s,b),x", pa10, 0},
-{ "ldh",        0x44000000, 0xfc000000, "j(b),x", pa10, 0},
-{ "ldb",        0x0c000000, 0xfc0013c0, "cxccx(s,b),t", pa10, FLAG_STRICT},
-{ "ldb",        0x0c000000, 0xfc0013c0, "cxccx(b),t", pa10, FLAG_STRICT},
-{ "ldb",       0x0c001000, 0xfc0013c0, "cmcc5(s,b),t", pa10, FLAG_STRICT},
-{ "ldb",       0x0c001000, 0xfc0013c0, "cmcc5(b),t", pa10, FLAG_STRICT},
+{ "ldh",       0x44000000, 0xfc000000, "l(b),x", pa20w, FLAG_STRICT},
+{ "ldh",       0x44000000, 0xfc000000, "j(s,b),x", pa10, 0},
+{ "ldh",       0x44000000, 0xfc000000, "j(b),x", pa10, 0},
+{ "ldb",       0x0c000000, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT},
+{ "ldb",       0x0c000000, 0xfc001fc0, "cXx(b),t", pa10, FLAG_STRICT},
+{ "ldb",       0x0c000000, 0xfc0013c0, "cxccx(s,b),t", pa11, FLAG_STRICT},
+{ "ldb",       0x0c000000, 0xfc0013c0, "cxccx(b),t", pa11, FLAG_STRICT},
+{ "ldb",       0x0c001000, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT},
+{ "ldb",       0x0c001000, 0xfc001fc0, "cM5(b),t", pa10, FLAG_STRICT},
+{ "ldb",       0x0c001000, 0xfc0013c0, "cmcc5(s,b),t", pa11, FLAG_STRICT},
+{ "ldb",       0x0c001000, 0xfc0013c0, "cmcc5(b),t", pa11, FLAG_STRICT},
 { "ldb",       0x0c001020, 0xfc1f33e0, "cocc@(s,b),t", pa20, FLAG_STRICT},
 { "ldb",       0x0c001020, 0xfc1f33e0, "cocc@(b),t", pa20, FLAG_STRICT},
-{ "ldb",        0x40000000, 0xfc000000, "l(b),x", pa20w, FLAG_STRICT},
-{ "ldb",        0x40000000, 0xfc000000, "j(s,b),x", pa10, 0},
-{ "ldb",        0x40000000, 0xfc000000, "j(b),x", pa10, 0},
+{ "ldb",       0x40000000, 0xfc000000, "l(b),x", pa20w, FLAG_STRICT},
+{ "ldb",       0x40000000, 0xfc000000, "j(s,b),x", pa10, 0},
+{ "ldb",       0x40000000, 0xfc000000, "j(b),x", pa10, 0},
 { "std",       0x0c0012e0, 0xfc0033ff, "cocCx,@(s,b)", pa20, FLAG_STRICT},
 { "std",       0x0c0012e0, 0xfc0033ff, "cocCx,@(b)", pa20, FLAG_STRICT},
 { "std",       0x0c0012c0, 0xfc0013c0, "cmcCx,V(s,b)", pa20, FLAG_STRICT},
 { "std",       0x0c0012c0, 0xfc0013c0, "cmcCx,V(b)", pa20, FLAG_STRICT},
-{ "std",        0x70000000, 0xfc000002, "cqx,&(b)", pa20w, FLAG_STRICT},
-{ "std",        0x70000000, 0xfc000002, "cqx,#(b)", pa20, FLAG_STRICT},
-{ "stw",       0x0c001280, 0xfc0013c0, "cmcCx,V(s,b)", pa10, FLAG_STRICT},
-{ "stw",       0x0c001280, 0xfc0013c0, "cmcCx,V(b)", pa10, FLAG_STRICT},
+{ "std",       0x70000000, 0xfc000002, "cqx,&(b)", pa20w, FLAG_STRICT},
+{ "std",       0x70000000, 0xfc000002, "cqx,#(b)", pa20, FLAG_STRICT},
+{ "stw",       0x0c001280, 0xfc001fc0, "cMx,V(s,b)", pa10, FLAG_STRICT},
+{ "stw",       0x0c001280, 0xfc001fc0, "cMx,V(b)", pa10, FLAG_STRICT},
+{ "stw",       0x0c001280, 0xfc0013c0, "cmcCx,V(s,b)", pa11, FLAG_STRICT},
+{ "stw",       0x0c001280, 0xfc0013c0, "cmcCx,V(b)", pa11, FLAG_STRICT},
 { "stw",       0x0c0012a0, 0xfc0013ff, "cocCx,@(s,b)", pa20, FLAG_STRICT},
 { "stw",       0x0c0012a0, 0xfc0013ff, "cocCx,@(b)", pa20, FLAG_STRICT},
-{ "stw",        0x6c000000, 0xfc000000, "cex,<(b)", pa20w, FLAG_STRICT},
-{ "stw",        0x6c000000, 0xfc000000, "cex,J(s,b)", pa10, FLAG_STRICT},
-{ "stw",        0x6c000000, 0xfc000000, "cex,J(b)", pa10, FLAG_STRICT},
-{ "stw",        0x7c000004, 0xfc000006, "cex,>(b)", pa20w, FLAG_STRICT},
-{ "stw",        0x7c000004, 0xfc000006, "cex,K(s,b)", pa20, FLAG_STRICT},
-{ "stw",        0x7c000004, 0xfc000006, "cex,K(b)", pa20, FLAG_STRICT},
-{ "stw",        0x68000000, 0xfc000000, "x,l(b)", pa20w, FLAG_STRICT},
-{ "stw",        0x68000000, 0xfc000000, "x,j(s,b)", pa10, 0},
-{ "stw",        0x68000000, 0xfc000000, "x,j(b)", pa10, 0},
-{ "sth",       0x0c001240, 0xfc0013c0, "cmcCx,V(s,b)", pa10, FLAG_STRICT},
-{ "sth",       0x0c001240, 0xfc0013c0, "cmcCx,V(b)", pa10, FLAG_STRICT},
+{ "stw",       0x6c000000, 0xfc000000, "cex,<(b)", pa20w, FLAG_STRICT},
+{ "stw",       0x6c000000, 0xfc000000, "cex,J(s,b)", pa10, FLAG_STRICT},
+{ "stw",       0x6c000000, 0xfc000000, "cex,J(b)", pa10, FLAG_STRICT},
+{ "stw",       0x7c000004, 0xfc000006, "cex,>(b)", pa20w, FLAG_STRICT},
+{ "stw",       0x7c000004, 0xfc000006, "cex,K(s,b)", pa20, FLAG_STRICT},
+{ "stw",       0x7c000004, 0xfc000006, "cex,K(b)", pa20, FLAG_STRICT},
+{ "stw",       0x68000000, 0xfc000000, "x,l(b)", pa20w, FLAG_STRICT},
+{ "stw",       0x68000000, 0xfc000000, "x,j(s,b)", pa10, 0},
+{ "stw",       0x68000000, 0xfc000000, "x,j(b)", pa10, 0},
+{ "sth",       0x0c001240, 0xfc001fc0, "cMx,V(s,b)", pa10, FLAG_STRICT},
+{ "sth",       0x0c001240, 0xfc001fc0, "cMx,V(b)", pa10, FLAG_STRICT},
+{ "sth",       0x0c001240, 0xfc0013c0, "cmcCx,V(s,b)", pa11, FLAG_STRICT},
+{ "sth",       0x0c001240, 0xfc0013c0, "cmcCx,V(b)", pa11, FLAG_STRICT},
 { "sth",       0x0c001260, 0xfc0033ff, "cocCx,@(s,b)", pa20, FLAG_STRICT},
 { "sth",       0x0c001260, 0xfc0033ff, "cocCx,@(b)", pa20, FLAG_STRICT},
-{ "sth",        0x64000000, 0xfc000000, "x,l(b)", pa20w, FLAG_STRICT},
-{ "sth",        0x64000000, 0xfc000000, "x,j(s,b)", pa10, 0},
-{ "sth",        0x64000000, 0xfc000000, "x,j(b)", pa10, 0},
-{ "stb",       0x0c001200, 0xfc0013c0, "cmcCx,V(s,b)", pa10, FLAG_STRICT},
-{ "stb",       0x0c001200, 0xfc0013c0, "cmcCx,V(b)", pa10, FLAG_STRICT},
+{ "sth",       0x64000000, 0xfc000000, "x,l(b)", pa20w, FLAG_STRICT},
+{ "sth",       0x64000000, 0xfc000000, "x,j(s,b)", pa10, 0},
+{ "sth",       0x64000000, 0xfc000000, "x,j(b)", pa10, 0},
+{ "stb",       0x0c001200, 0xfc001fc0, "cMx,V(s,b)", pa10, FLAG_STRICT},
+{ "stb",       0x0c001200, 0xfc001fc0, "cMx,V(b)", pa10, FLAG_STRICT},
+{ "stb",       0x0c001200, 0xfc0013c0, "cmcCx,V(s,b)", pa11, FLAG_STRICT},
+{ "stb",       0x0c001200, 0xfc0013c0, "cmcCx,V(b)", pa11, FLAG_STRICT},
 { "stb",       0x0c001220, 0xfc0033ff, "cocCx,@(s,b)", pa20, FLAG_STRICT},
 { "stb",       0x0c001220, 0xfc0033ff, "cocCx,@(b)", pa20, FLAG_STRICT},
-{ "stb",        0x60000000, 0xfc000000, "x,l(b)", pa20w, FLAG_STRICT},
-{ "stb",        0x60000000, 0xfc000000, "x,j(s,b)", pa10, 0},
-{ "stb",        0x60000000, 0xfc000000, "x,j(b)", pa10, 0},
-{ "ldwm",       0x4c000000, 0xfc000000, "j(s,b),x", pa10, 0},
-{ "ldwm",       0x4c000000, 0xfc000000, "j(b),x", pa10, 0},
-{ "stwm",       0x6c000000, 0xfc000000, "x,j(s,b)", pa10, 0},
-{ "stwm",       0x6c000000, 0xfc000000, "x,j(b)", pa10, 0},
-{ "ldwx",       0x0c000080, 0xfc001fc0, "cXx(s,b),t", pa10, 0},
-{ "ldwx",       0x0c000080, 0xfc001fc0, "cXx(b),t", pa10, 0},
-{ "ldhx",       0x0c000040, 0xfc001fc0, "cXx(s,b),t", pa10, 0},
-{ "ldhx",       0x0c000040, 0xfc001fc0, "cXx(b),t", pa10, 0},
-{ "ldbx",       0x0c000000, 0xfc001fc0, "cXx(s,b),t", pa10, 0},
-{ "ldbx",       0x0c000000, 0xfc001fc0, "cXx(b),t", pa10, 0},
-{ "ldwa",       0x0c000180, 0xfc00d3c0, "cxccx(b),t", pa10, FLAG_STRICT},
-{ "ldwa",      0x0c001180, 0xfc00d3c0, "cmcc5(b),t", pa10, FLAG_STRICT},
+{ "stb",       0x60000000, 0xfc000000, "x,l(b)", pa20w, FLAG_STRICT},
+{ "stb",       0x60000000, 0xfc000000, "x,j(s,b)", pa10, 0},
+{ "stb",       0x60000000, 0xfc000000, "x,j(b)", pa10, 0},
+{ "ldwm",      0x4c000000, 0xfc000000, "j(s,b),x", pa10, 0},
+{ "ldwm",      0x4c000000, 0xfc000000, "j(b),x", pa10, 0},
+{ "stwm",      0x6c000000, 0xfc000000, "x,j(s,b)", pa10, 0},
+{ "stwm",      0x6c000000, 0xfc000000, "x,j(b)", pa10, 0},
+{ "ldwx",      0x0c000080, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT},
+{ "ldwx",      0x0c000080, 0xfc001fc0, "cXx(b),t", pa10, FLAG_STRICT},
+{ "ldwx",      0x0c000080, 0xfc0013c0, "cxccx(s,b),t", pa11, FLAG_STRICT},
+{ "ldwx",      0x0c000080, 0xfc0013c0, "cxccx(b),t", pa11, FLAG_STRICT},
+{ "ldhx",      0x0c000040, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT},
+{ "ldhx",      0x0c000040, 0xfc001fc0, "cXx(b),t", pa10, FLAG_STRICT},
+{ "ldhx",      0x0c000040, 0xfc0013c0, "cxccx(s,b),t", pa11, FLAG_STRICT},
+{ "ldhx",      0x0c000040, 0xfc0013c0, "cxccx(b),t", pa11, FLAG_STRICT},
+{ "ldbx",      0x0c000000, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT},
+{ "ldbx",      0x0c000000, 0xfc001fc0, "cXx(b),t", pa10, FLAG_STRICT},
+{ "ldbx",      0x0c000000, 0xfc0013c0, "cxccx(s,b),t", pa11, FLAG_STRICT},
+{ "ldbx",      0x0c000000, 0xfc0013c0, "cxccx(b),t", pa11, FLAG_STRICT},
+{ "ldwa",      0x0c000180, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT},
+{ "ldwa",      0x0c000180, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT},
+{ "ldwa",      0x0c001180, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT},
+{ "ldwa",      0x0c001180, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT},
 { "ldwa",      0x0c0011a0, 0xfc1ff3e0, "cocc@(b),t", pa20, FLAG_STRICT},
-{ "ldcw",       0x0c0001c0, 0xfc0013c0, "cxcdx(s,b),t", pa10, FLAG_STRICT},
-{ "ldcw",       0x0c0001c0, 0xfc0013c0, "cxcdx(b),t", pa10, FLAG_STRICT},
-{ "ldcw",      0x0c0011c0, 0xfc0013c0, "cmcd5(s,b),t", pa10, FLAG_STRICT},
-{ "ldcw",      0x0c0011c0, 0xfc0013c0, "cmcd5(b),t", pa10, FLAG_STRICT},
-{ "stwa",      0x0c001380, 0xfc00d3c0, "cmcCx,V(b)", pa10, FLAG_STRICT},
+{ "ldcw",      0x0c0001c0, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT},
+{ "ldcw",      0x0c0001c0, 0xfc001fc0, "cXx(b),t", pa10, FLAG_STRICT},
+{ "ldcw",      0x0c0001c0, 0xfc0013c0, "cxcdx(s,b),t", pa11, FLAG_STRICT},
+{ "ldcw",      0x0c0001c0, 0xfc0013c0, "cxcdx(b),t", pa11, FLAG_STRICT},
+{ "ldcw",      0x0c0011c0, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT},
+{ "ldcw",      0x0c0011c0, 0xfc001fc0, "cM5(b),t", pa10, FLAG_STRICT},
+{ "ldcw",      0x0c0011c0, 0xfc0013c0, "cmcd5(s,b),t", pa11, FLAG_STRICT},
+{ "ldcw",      0x0c0011c0, 0xfc0013c0, "cmcd5(b),t", pa11, FLAG_STRICT},
+{ "stwa",      0x0c001380, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT},
+{ "stwa",      0x0c001380, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT},
 { "stwa",      0x0c0013a0, 0xfc00d3ff, "cocCx,@(b)", pa20, FLAG_STRICT},
-{ "stby",      0x0c001300, 0xfc0013c0, "cscCx,V(s,b)", pa10, FLAG_STRICT},
-{ "stby",      0x0c001300, 0xfc0013c0, "cscCx,V(b)", pa10, FLAG_STRICT},
-{ "ldda",       0x0c000100, 0xfc00d3c0, "cxccx(b),t", pa20, FLAG_STRICT},
+{ "stby",      0x0c001300, 0xfc001fc0, "cAx,V(s,b)", pa10, FLAG_STRICT},
+{ "stby",      0x0c001300, 0xfc001fc0, "cAx,V(b)", pa10, FLAG_STRICT},
+{ "stby",      0x0c001300, 0xfc0013c0, "cscCx,V(s,b)", pa11, FLAG_STRICT},
+{ "stby",      0x0c001300, 0xfc0013c0, "cscCx,V(b)", pa11, FLAG_STRICT},
+{ "ldda",      0x0c000100, 0xfc00d3c0, "cxccx(b),t", pa20, FLAG_STRICT},
 { "ldda",      0x0c001100, 0xfc00d3c0, "cmcc5(b),t", pa20, FLAG_STRICT},
 { "ldda",      0x0c001120, 0xfc1ff3e0, "cocc@(b),t", pa20, FLAG_STRICT},
-{ "ldcd",       0x0c000140, 0xfc0013c0, "cxcdx(s,b),t", pa20, FLAG_STRICT},
-{ "ldcd",       0x0c000140, 0xfc0013c0, "cxcdx(b),t", pa20, FLAG_STRICT},
+{ "ldcd",      0x0c000140, 0xfc0013c0, "cxcdx(s,b),t", pa20, FLAG_STRICT},
+{ "ldcd",      0x0c000140, 0xfc0013c0, "cxcdx(b),t", pa20, FLAG_STRICT},
 { "ldcd",      0x0c001140, 0xfc0013c0, "cmcd5(s,b),t", pa20, FLAG_STRICT},
 { "ldcd",      0x0c001140, 0xfc0013c0, "cmcd5(b),t", pa20, FLAG_STRICT},
 { "stda",      0x0c0013e0, 0xfc0033ff, "cocCx,@(s,b)", pa20, FLAG_STRICT},
 { "stda",      0x0c0013e0, 0xfc0033ff, "cocCx,@(b)", pa20, FLAG_STRICT},
 { "stda",      0x0c0013c0, 0xfc0013c0, "cmcCx,V(s,b)", pa20, FLAG_STRICT},
 { "stda",      0x0c0013c0, 0xfc0013c0, "cmcCx,V(b)", pa20, FLAG_STRICT},
-{ "ldwax",      0x0c000180, 0xfc00dfc0, "cXx(b),t", pa10, 0},
-{ "ldcwx",      0x0c0001c0, 0xfc001fc0, "cXx(s,b),t", pa10, 0},
-{ "ldcwx",      0x0c0001c0, 0xfc001fc0, "cXx(b),t", pa10, 0},
-{ "ldws",      0x0c001080, 0xfc001fc0, "cM5(s,b),t", pa10, 0},
-{ "ldws",      0x0c001080, 0xfc001fc0, "cM5(b),t", pa10, 0},
-{ "ldhs",      0x0c001040, 0xfc001fc0, "cM5(s,b),t", pa10, 0},
-{ "ldhs",      0x0c001040, 0xfc001fc0, "cM5(b),t", pa10, 0},
-{ "ldbs",      0x0c001000, 0xfc001fc0, "cM5(s,b),t", pa10, 0},
-{ "ldbs",      0x0c001000, 0xfc001fc0, "cM5(b),t", pa10, 0},
-{ "ldwas",     0x0c001180, 0xfc00dfc0, "cM5(b),t", pa10, 0},
-{ "ldcws",     0x0c0011c0, 0xfc001fc0, "cM5(s,b),t", pa10, 0},
-{ "ldcws",     0x0c0011c0, 0xfc001fc0, "cM5(b),t", pa10, 0},
-{ "stws",      0x0c001280, 0xfc001fc0, "cMx,V(s,b)", pa10, 0},
-{ "stws",      0x0c001280, 0xfc001fc0, "cMx,V(b)", pa10, 0},
-{ "sths",      0x0c001240, 0xfc001fc0, "cMx,V(s,b)", pa10, 0},
-{ "sths",      0x0c001240, 0xfc001fc0, "cMx,V(b)", pa10, 0},
-{ "stbs",      0x0c001200, 0xfc001fc0, "cMx,V(s,b)", pa10, 0},
-{ "stbs",      0x0c001200, 0xfc001fc0, "cMx,V(b)", pa10, 0},
-{ "stwas",     0x0c001380, 0xfc00dfc0, "cMx,V(b)", pa10, 0},
+{ "ldwax",     0x0c000180, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT},
+{ "ldwax",     0x0c000180, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT},
+{ "ldcwx",     0x0c0001c0, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT},
+{ "ldcwx",     0x0c0001c0, 0xfc001fc0, "cXx(b),t", pa10, FLAG_STRICT},
+{ "ldcwx",     0x0c0001c0, 0xfc0013c0, "cxcdx(s,b),t", pa11, FLAG_STRICT},
+{ "ldcwx",     0x0c0001c0, 0xfc0013c0, "cxcdx(b),t", pa11, FLAG_STRICT},
+{ "ldws",      0x0c001080, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT},
+{ "ldws",      0x0c001080, 0xfc001fc0, "cM5(b),t", pa10, FLAG_STRICT},
+{ "ldws",      0x0c001080, 0xfc0013c0, "cmcc5(s,b),t", pa11, FLAG_STRICT},
+{ "ldws",      0x0c001080, 0xfc0013c0, "cmcc5(b),t", pa11, FLAG_STRICT},
+{ "ldhs",      0x0c001040, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT},
+{ "ldhs",      0x0c001040, 0xfc001fc0, "cM5(b),t", pa10, FLAG_STRICT},
+{ "ldhs",      0x0c001040, 0xfc0013c0, "cmcc5(s,b),t", pa11, FLAG_STRICT},
+{ "ldhs",      0x0c001040, 0xfc0013c0, "cmcc5(b),t", pa11, FLAG_STRICT},
+{ "ldbs",      0x0c001000, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT},
+{ "ldbs",      0x0c001000, 0xfc001fc0, "cM5(b),t", pa10, FLAG_STRICT},
+{ "ldbs",      0x0c001000, 0xfc0013c0, "cmcc5(s,b),t", pa11, FLAG_STRICT},
+{ "ldbs",      0x0c001000, 0xfc0013c0, "cmcc5(b),t", pa11, FLAG_STRICT},
+{ "ldwas",     0x0c001180, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT},
+{ "ldwas",     0x0c001180, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT},
+{ "ldcws",     0x0c0011c0, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT},
+{ "ldcws",     0x0c0011c0, 0xfc001fc0, "cM5(b),t", pa10, FLAG_STRICT},
+{ "ldcws",     0x0c0011c0, 0xfc0013c0, "cmcd5(s,b),t", pa11, FLAG_STRICT},
+{ "ldcws",     0x0c0011c0, 0xfc0013c0, "cmcd5(b),t", pa11, FLAG_STRICT},
+{ "stws",      0x0c001280, 0xfc001fc0, "cMx,V(s,b)", pa10, FLAG_STRICT},
+{ "stws",      0x0c001280, 0xfc001fc0, "cMx,V(b)", pa10, FLAG_STRICT},
+{ "stws",      0x0c001280, 0xfc0013c0, "cmcCx,V(s,b)", pa11, FLAG_STRICT},
+{ "stws",      0x0c001280, 0xfc0013c0, "cmcCx,V(b)", pa11, FLAG_STRICT},
+{ "sths",      0x0c001240, 0xfc001fc0, "cMx,V(s,b)", pa10, FLAG_STRICT},
+{ "sths",      0x0c001240, 0xfc001fc0, "cMx,V(b)", pa10, FLAG_STRICT},
+{ "sths",      0x0c001240, 0xfc0013c0, "cmcCx,V(s,b)", pa11, FLAG_STRICT},
+{ "sths",      0x0c001240, 0xfc0013c0, "cmcCx,V(b)", pa11, FLAG_STRICT},
+{ "stbs",      0x0c001200, 0xfc001fc0, "cMx,V(s,b)", pa10, FLAG_STRICT},
+{ "stbs",      0x0c001200, 0xfc001fc0, "cMx,V(b)", pa10, FLAG_STRICT},
+{ "stbs",      0x0c001200, 0xfc0013c0, "cmcCx,V(s,b)", pa11, FLAG_STRICT},
+{ "stbs",      0x0c001200, 0xfc0013c0, "cmcCx,V(b)", pa11, FLAG_STRICT},
+{ "stwas",     0x0c001380, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT},
+{ "stwas",     0x0c001380, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT},
 { "stdby",     0x0c001340, 0xfc0013c0, "cscCx,V(s,b)", pa20, FLAG_STRICT},
 { "stdby",     0x0c001340, 0xfc0013c0, "cscCx,V(b)", pa20, FLAG_STRICT},
-{ "stbys",     0x0c001300, 0xfc001fc0, "cAx,V(s,b)", pa10, 0},
-{ "stbys",     0x0c001300, 0xfc001fc0, "cAx,V(b)", pa10, 0},
+{ "stbys",     0x0c001300, 0xfc001fc0, "cAx,V(s,b)", pa10, FLAG_STRICT},
+{ "stbys",     0x0c001300, 0xfc001fc0, "cAx,V(b)", pa10, FLAG_STRICT},
+{ "stbys",     0x0c001300, 0xfc0013c0, "cscCx,V(s,b)", pa11, FLAG_STRICT},
+{ "stbys",     0x0c001300, 0xfc0013c0, "cscCx,V(b)", pa11, FLAG_STRICT},
 
 /* Immediate instructions.  */
 { "ldo",       0x34000000, 0xfc000000, "l(b),x", pa20w, 0},
@@ -500,203 +553,203 @@ static const struct pa_opcode pa_opcodes
 
 /* Computation Instructions.  */
 
-{ "cmpclr",     0x080008a0, 0xfc000fe0, "?Sx,b,t", pa20, FLAG_STRICT},
-{ "cmpclr",     0x08000880, 0xfc000fe0, "?sx,b,t", pa10, FLAG_STRICT},
-{ "comclr",     0x08000880, 0xfc000fe0, "?sx,b,t", pa10, 0},
-{ "or",         0x08000260, 0xfc000fe0, "?Lx,b,t", pa20, FLAG_STRICT},
-{ "or",         0x08000240, 0xfc000fe0, "?lx,b,t", pa10, 0},
-{ "xor",        0x080002a0, 0xfc000fe0, "?Lx,b,t", pa20, FLAG_STRICT},
-{ "xor",        0x08000280, 0xfc000fe0, "?lx,b,t", pa10, 0},
-{ "and",        0x08000220, 0xfc000fe0, "?Lx,b,t", pa20, FLAG_STRICT},
-{ "and",        0x08000200, 0xfc000fe0, "?lx,b,t", pa10, 0},
-{ "andcm",      0x08000020, 0xfc000fe0, "?Lx,b,t", pa20, FLAG_STRICT},
-{ "andcm",      0x08000000, 0xfc000fe0, "?lx,b,t", pa10, 0},
-{ "uxor",       0x080003a0, 0xfc000fe0, "?Ux,b,t", pa20, FLAG_STRICT},
-{ "uxor",       0x08000380, 0xfc000fe0, "?ux,b,t", pa10, 0},
-{ "uaddcm",     0x080009a0, 0xfc000fa0, "cT?Ux,b,t", pa20, FLAG_STRICT},
-{ "uaddcm",     0x08000980, 0xfc000fa0, "cT?ux,b,t", pa10, FLAG_STRICT},
-{ "uaddcm",     0x08000980, 0xfc000fe0, "?ux,b,t", pa10, 0},
-{ "uaddcmt",    0x080009c0, 0xfc000fe0, "?ux,b,t", pa10, 0},
-{ "dcor",       0x08000ba0, 0xfc1f0fa0, "ci?Ub,t", pa20, FLAG_STRICT},
-{ "dcor",       0x08000b80, 0xfc1f0fa0, "ci?ub,t", pa10, FLAG_STRICT},
-{ "dcor",       0x08000b80, 0xfc1f0fe0, "?ub,t",   pa10, 0},
-{ "idcor",      0x08000bc0, 0xfc1f0fe0, "?ub,t",   pa10, 0},
-{ "addi",       0xb0000000, 0xfc000000, "ct?ai,b,x", pa10, FLAG_STRICT},
-{ "addi",       0xb4000000, 0xfc000000, "cv?ai,b,x", pa10, FLAG_STRICT},
-{ "addi",       0xb4000000, 0xfc000800, "?ai,b,x", pa10, 0},
-{ "addio",      0xb4000800, 0xfc000800, "?ai,b,x", pa10, 0},
-{ "addit",      0xb0000000, 0xfc000800, "?ai,b,x", pa10, 0},
-{ "addito",     0xb0000800, 0xfc000800, "?ai,b,x", pa10, 0},
-{ "add",        0x08000720, 0xfc0007e0, "cY?Ax,b,t", pa20, FLAG_STRICT},
-{ "add",        0x08000700, 0xfc0007e0, "cy?ax,b,t", pa10, FLAG_STRICT},
-{ "add",        0x08000220, 0xfc0003e0, "ca?Ax,b,t", pa20, FLAG_STRICT},
-{ "add",        0x08000200, 0xfc0003e0, "ca?ax,b,t", pa10, FLAG_STRICT},
-{ "add",        0x08000600, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "addl",       0x08000a00, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "addo",       0x08000e00, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "addc",       0x08000700, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "addco",      0x08000f00, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "sub",        0x080004e0, 0xfc0007e0, "ct?Sx,b,t", pa20, FLAG_STRICT},
-{ "sub",        0x080004c0, 0xfc0007e0, "ct?sx,b,t", pa10, FLAG_STRICT},
-{ "sub",        0x08000520, 0xfc0007e0, "cB?Sx,b,t", pa20, FLAG_STRICT},
-{ "sub",        0x08000500, 0xfc0007e0, "cb?sx,b,t", pa10, FLAG_STRICT},
-{ "sub",        0x08000420, 0xfc0007e0, "cv?Sx,b,t", pa20, FLAG_STRICT},
-{ "sub",        0x08000400, 0xfc0007e0, "cv?sx,b,t", pa10, FLAG_STRICT},
-{ "sub",        0x08000400, 0xfc000fe0, "?sx,b,t", pa10, 0},
-{ "subo",       0x08000c00, 0xfc000fe0, "?sx,b,t", pa10, 0},
-{ "subb",       0x08000500, 0xfc000fe0, "?sx,b,t", pa10, 0},
-{ "subbo",      0x08000d00, 0xfc000fe0, "?sx,b,t", pa10, 0},
-{ "subt",       0x080004c0, 0xfc000fe0, "?sx,b,t", pa10, 0},
-{ "subto",      0x08000cc0, 0xfc000fe0, "?sx,b,t", pa10, 0},
-{ "ds",         0x08000440, 0xfc000fe0, "?sx,b,t", pa10, 0},
-{ "subi",       0x94000000, 0xfc000000, "cv?si,b,x", pa10, FLAG_STRICT},
-{ "subi",       0x94000000, 0xfc000800, "?si,b,x", pa10, 0},
-{ "subio",      0x94000800, 0xfc000800, "?si,b,x", pa10, 0},
-{ "cmpiclr",    0x90000800, 0xfc000800, "?Si,b,x", pa20, FLAG_STRICT},
-{ "cmpiclr",    0x90000000, 0xfc000800, "?si,b,x", pa10, FLAG_STRICT},
-{ "comiclr",    0x90000000, 0xfc000800, "?si,b,x", pa10, 0},
-{ "shladd",     0x08000220, 0xfc000320, "ca?Ax,.,b,t", pa20, FLAG_STRICT},
-{ "shladd",     0x08000200, 0xfc000320, "ca?ax,.,b,t", pa10, FLAG_STRICT},
-{ "sh1add",     0x08000640, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "sh1addl",    0x08000a40, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "sh1addo",    0x08000e40, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "sh2add",     0x08000680, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "sh2addl",    0x08000a80, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "sh2addo",    0x08000e80, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "sh3add",     0x080006c0, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "sh3addl",    0x08000ac0, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "sh3addo",    0x08000ec0, 0xfc000fe0, "?ax,b,t", pa10, 0},
+{ "cmpclr",    0x080008a0, 0xfc000fe0, "?Sx,b,t", pa20, FLAG_STRICT},
+{ "cmpclr",    0x08000880, 0xfc000fe0, "?sx,b,t", pa10, FLAG_STRICT},
+{ "comclr",    0x08000880, 0xfc000fe0, "?sx,b,t", pa10, 0},
+{ "or",                0x08000260, 0xfc000fe0, "?Lx,b,t", pa20, FLAG_STRICT},
+{ "or",                0x08000240, 0xfc000fe0, "?lx,b,t", pa10, 0},
+{ "xor",       0x080002a0, 0xfc000fe0, "?Lx,b,t", pa20, FLAG_STRICT},
+{ "xor",       0x08000280, 0xfc000fe0, "?lx,b,t", pa10, 0},
+{ "and",       0x08000220, 0xfc000fe0, "?Lx,b,t", pa20, FLAG_STRICT},
+{ "and",       0x08000200, 0xfc000fe0, "?lx,b,t", pa10, 0},
+{ "andcm",     0x08000020, 0xfc000fe0, "?Lx,b,t", pa20, FLAG_STRICT},
+{ "andcm",     0x08000000, 0xfc000fe0, "?lx,b,t", pa10, 0},
+{ "uxor",      0x080003a0, 0xfc000fe0, "?Ux,b,t", pa20, FLAG_STRICT},
+{ "uxor",      0x08000380, 0xfc000fe0, "?ux,b,t", pa10, 0},
+{ "uaddcm",    0x080009a0, 0xfc000fa0, "cT?Ux,b,t", pa20, FLAG_STRICT},
+{ "uaddcm",    0x08000980, 0xfc000fa0, "cT?ux,b,t", pa10, FLAG_STRICT},
+{ "uaddcm",    0x08000980, 0xfc000fe0, "?ux,b,t", pa10, 0},
+{ "uaddcmt",   0x080009c0, 0xfc000fe0, "?ux,b,t", pa10, 0},
+{ "dcor",      0x08000ba0, 0xfc1f0fa0, "ci?Ub,t", pa20, FLAG_STRICT},
+{ "dcor",      0x08000b80, 0xfc1f0fa0, "ci?ub,t", pa10, FLAG_STRICT},
+{ "dcor",      0x08000b80, 0xfc1f0fe0, "?ub,t",   pa10, 0},
+{ "idcor",     0x08000bc0, 0xfc1f0fe0, "?ub,t",   pa10, 0},
+{ "addi",      0xb0000000, 0xfc000000, "ct?ai,b,x", pa10, FLAG_STRICT},
+{ "addi",      0xb4000000, 0xfc000000, "cv?ai,b,x", pa10, FLAG_STRICT},
+{ "addi",      0xb4000000, 0xfc000800, "?ai,b,x", pa10, 0},
+{ "addio",     0xb4000800, 0xfc000800, "?ai,b,x", pa10, 0},
+{ "addit",     0xb0000000, 0xfc000800, "?ai,b,x", pa10, 0},
+{ "addito",    0xb0000800, 0xfc000800, "?ai,b,x", pa10, 0},
+{ "add",       0x08000720, 0xfc0007e0, "cY?Ax,b,t", pa20, FLAG_STRICT},
+{ "add",       0x08000700, 0xfc0007e0, "cy?ax,b,t", pa10, FLAG_STRICT},
+{ "add",       0x08000220, 0xfc0003e0, "ca?Ax,b,t", pa20, FLAG_STRICT},
+{ "add",       0x08000200, 0xfc0003e0, "ca?ax,b,t", pa10, FLAG_STRICT},
+{ "add",       0x08000600, 0xfc000fe0, "?ax,b,t", pa10, 0},
+{ "addl",      0x08000a00, 0xfc000fe0, "?ax,b,t", pa10, 0},
+{ "addo",      0x08000e00, 0xfc000fe0, "?ax,b,t", pa10, 0},
+{ "addc",      0x08000700, 0xfc000fe0, "?ax,b,t", pa10, 0},
+{ "addco",     0x08000f00, 0xfc000fe0, "?ax,b,t", pa10, 0},
+{ "sub",       0x080004e0, 0xfc0007e0, "ct?Sx,b,t", pa20, FLAG_STRICT},
+{ "sub",       0x080004c0, 0xfc0007e0, "ct?sx,b,t", pa10, FLAG_STRICT},
+{ "sub",       0x08000520, 0xfc0007e0, "cB?Sx,b,t", pa20, FLAG_STRICT},
+{ "sub",       0x08000500, 0xfc0007e0, "cb?sx,b,t", pa10, FLAG_STRICT},
+{ "sub",       0x08000420, 0xfc0007e0, "cv?Sx,b,t", pa20, FLAG_STRICT},
+{ "sub",       0x08000400, 0xfc0007e0, "cv?sx,b,t", pa10, FLAG_STRICT},
+{ "sub",       0x08000400, 0xfc000fe0, "?sx,b,t", pa10, 0},
+{ "subo",      0x08000c00, 0xfc000fe0, "?sx,b,t", pa10, 0},
+{ "subb",      0x08000500, 0xfc000fe0, "?sx,b,t", pa10, 0},
+{ "subbo",     0x08000d00, 0xfc000fe0, "?sx,b,t", pa10, 0},
+{ "subt",      0x080004c0, 0xfc000fe0, "?sx,b,t", pa10, 0},
+{ "subto",     0x08000cc0, 0xfc000fe0, "?sx,b,t", pa10, 0},
+{ "ds",                0x08000440, 0xfc000fe0, "?sx,b,t", pa10, 0},
+{ "subi",      0x94000000, 0xfc000000, "cv?si,b,x", pa10, FLAG_STRICT},
+{ "subi",      0x94000000, 0xfc000800, "?si,b,x", pa10, 0},
+{ "subio",     0x94000800, 0xfc000800, "?si,b,x", pa10, 0},
+{ "cmpiclr",   0x90000800, 0xfc000800, "?Si,b,x", pa20, FLAG_STRICT},
+{ "cmpiclr",   0x90000000, 0xfc000800, "?si,b,x", pa10, FLAG_STRICT},
+{ "comiclr",   0x90000000, 0xfc000800, "?si,b,x", pa10, 0},
+{ "shladd",    0x08000220, 0xfc000320, "ca?Ax,.,b,t", pa20, FLAG_STRICT},
+{ "shladd",    0x08000200, 0xfc000320, "ca?ax,.,b,t", pa10, FLAG_STRICT},
+{ "sh1add",    0x08000640, 0xfc000fe0, "?ax,b,t", pa10, 0},
+{ "sh1addl",   0x08000a40, 0xfc000fe0, "?ax,b,t", pa10, 0},
+{ "sh1addo",   0x08000e40, 0xfc000fe0, "?ax,b,t", pa10, 0},
+{ "sh2add",    0x08000680, 0xfc000fe0, "?ax,b,t", pa10, 0},
+{ "sh2addl",   0x08000a80, 0xfc000fe0, "?ax,b,t", pa10, 0},
+{ "sh2addo",   0x08000e80, 0xfc000fe0, "?ax,b,t", pa10, 0},
+{ "sh3add",    0x080006c0, 0xfc000fe0, "?ax,b,t", pa10, 0},
+{ "sh3addl",   0x08000ac0, 0xfc000fe0, "?ax,b,t", pa10, 0},
+{ "sh3addo",   0x08000ec0, 0xfc000fe0, "?ax,b,t", pa10, 0},
 
 /* Subword Operation Instructions.  */
 
-{ "hadd",       0x08000300, 0xfc00ff20, "cHx,b,t", pa20, FLAG_STRICT},
-{ "havg",       0x080002c0, 0xfc00ffe0, "x,b,t", pa20, FLAG_STRICT},
-{ "hshl",       0xf8008800, 0xffe0fc20, "x,*,t", pa20, FLAG_STRICT},
-{ "hshladd",    0x08000700, 0xfc00ff20, "x,.,b,t", pa20, FLAG_STRICT},
-{ "hshr",       0xf800c800, 0xfc1ff820, "cSb,*,t", pa20, FLAG_STRICT},
-{ "hshradd",    0x08000500, 0xfc00ff20, "x,.,b,t", pa20, FLAG_STRICT},
-{ "hsub",       0x08000100, 0xfc00ff20, "cHx,b,t", pa20, FLAG_STRICT},
-{ "mixh",       0xf8008400, 0xfc009fe0, "chx,b,t", pa20, FLAG_STRICT},
-{ "mixw",       0xf8008000, 0xfc009fe0, "chx,b,t", pa20, FLAG_STRICT},
-{ "permh",      0xf8000000, 0xfc009020, "c*a,t", pa20, FLAG_STRICT},
+{ "hadd",      0x08000300, 0xfc00ff20, "cHx,b,t", pa20, FLAG_STRICT},
+{ "havg",      0x080002c0, 0xfc00ffe0, "x,b,t", pa20, FLAG_STRICT},
+{ "hshl",      0xf8008800, 0xffe0fc20, "x,*,t", pa20, FLAG_STRICT},
+{ "hshladd",   0x08000700, 0xfc00ff20, "x,.,b,t", pa20, FLAG_STRICT},
+{ "hshr",      0xf800c800, 0xfc1ff820, "cSb,*,t", pa20, FLAG_STRICT},
+{ "hshradd",   0x08000500, 0xfc00ff20, "x,.,b,t", pa20, FLAG_STRICT},
+{ "hsub",      0x08000100, 0xfc00ff20, "cHx,b,t", pa20, FLAG_STRICT},
+{ "mixh",      0xf8008400, 0xfc009fe0, "chx,b,t", pa20, FLAG_STRICT},
+{ "mixw",      0xf8008000, 0xfc009fe0, "chx,b,t", pa20, FLAG_STRICT},
+{ "permh",     0xf8000000, 0xfc009020, "c*a,t", pa20, FLAG_STRICT},
 
 
 /* Extract and Deposit Instructions.  */
 
-{ "shrpd",      0xd0000200, 0xfc001fe0, "?Xx,b,!,t", pa20, FLAG_STRICT},
-{ "shrpd",      0xd0000400, 0xfc001400, "?Xx,b,~,t", pa20, FLAG_STRICT},
-{ "shrpw",      0xd0000000, 0xfc001fe0, "?xx,b,!,t", pa10, FLAG_STRICT},
-{ "shrpw",      0xd0000800, 0xfc001c00, "?xx,b,p,t", pa10, FLAG_STRICT},
-{ "vshd",       0xd0000000, 0xfc001fe0, "?xx,b,t", pa10, 0},
-{ "shd",        0xd0000800, 0xfc001c00, "?xx,b,p,t", pa10, 0},
-{ "extrd",      0xd0001200, 0xfc001ae0, "cS?Xb,!,%,x", pa20, FLAG_STRICT},
-{ "extrd",      0xd8000000, 0xfc000000, "cS?Xb,q,|,x", pa20, FLAG_STRICT},
-{ "extrw",      0xd0001000, 0xfc001be0, "cS?xb,!,T,x", pa10, FLAG_STRICT},
-{ "extrw",      0xd0001800, 0xfc001800, "cS?xb,P,T,x", pa10, FLAG_STRICT},
-{ "vextru",     0xd0001000, 0xfc001fe0, "?xb,T,x", pa10, 0},
-{ "vextrs",     0xd0001400, 0xfc001fe0, "?xb,T,x", pa10, 0},
-{ "extru",      0xd0001800, 0xfc001c00, "?xb,P,T,x", pa10, 0},
-{ "extrs",      0xd0001c00, 0xfc001c00, "?xb,P,T,x", pa10, 0},
-{ "depd",       0xd4000200, 0xfc001ae0, "cz?Xx,!,%,b", pa20, FLAG_STRICT},
-{ "depd",       0xf0000000, 0xfc000000, "cz?Xx,~,|,b", pa20, FLAG_STRICT},
-{ "depdi",      0xd4001200, 0xfc001ae0, "cz?X5,!,%,b", pa20, FLAG_STRICT},
-{ "depdi",      0xf4000000, 0xfc000000, "cz?X5,~,|,b", pa20, FLAG_STRICT},
-{ "depw",       0xd4000000, 0xfc001be0, "cz?xx,!,T,b", pa10, FLAG_STRICT},
-{ "depw",       0xd4000800, 0xfc001800, "cz?xx,p,T,b", pa10, FLAG_STRICT},
-{ "depwi",      0xd4001000, 0xfc001be0, "cz?x5,!,T,b", pa10, FLAG_STRICT},
-{ "depwi",      0xd4001800, 0xfc001800, "cz?x5,p,T,b", pa10, FLAG_STRICT},
-{ "zvdep",      0xd4000000, 0xfc001fe0, "?xx,T,b", pa10, 0},
-{ "vdep",       0xd4000400, 0xfc001fe0, "?xx,T,b", pa10, 0},
-{ "zdep",       0xd4000800, 0xfc001c00, "?xx,p,T,b", pa10, 0},
-{ "dep",        0xd4000c00, 0xfc001c00, "?xx,p,T,b", pa10, 0},
-{ "zvdepi",     0xd4001000, 0xfc001fe0, "?x5,T,b", pa10, 0},
-{ "vdepi",      0xd4001400, 0xfc001fe0, "?x5,T,b", pa10, 0},
-{ "zdepi",      0xd4001800, 0xfc001c00, "?x5,p,T,b", pa10, 0},
-{ "depi",       0xd4001c00, 0xfc001c00, "?x5,p,T,b", pa10, 0},
+{ "shrpd",     0xd0000200, 0xfc001fe0, "?Xx,b,!,t", pa20, FLAG_STRICT},
+{ "shrpd",     0xd0000400, 0xfc001400, "?Xx,b,~,t", pa20, FLAG_STRICT},
+{ "shrpw",     0xd0000000, 0xfc001fe0, "?xx,b,!,t", pa10, FLAG_STRICT},
+{ "shrpw",     0xd0000800, 0xfc001c00, "?xx,b,p,t", pa10, FLAG_STRICT},
+{ "vshd",      0xd0000000, 0xfc001fe0, "?xx,b,t", pa10, 0},
+{ "shd",       0xd0000800, 0xfc001c00, "?xx,b,p,t", pa10, 0},
+{ "extrd",     0xd0001200, 0xfc001ae0, "cS?Xb,!,%,x", pa20, FLAG_STRICT},
+{ "extrd",     0xd8000000, 0xfc000000, "cS?Xb,q,|,x", pa20, FLAG_STRICT},
+{ "extrw",     0xd0001000, 0xfc001be0, "cS?xb,!,T,x", pa10, FLAG_STRICT},
+{ "extrw",     0xd0001800, 0xfc001800, "cS?xb,P,T,x", pa10, FLAG_STRICT},
+{ "vextru",    0xd0001000, 0xfc001fe0, "?xb,T,x", pa10, 0},
+{ "vextrs",    0xd0001400, 0xfc001fe0, "?xb,T,x", pa10, 0},
+{ "extru",     0xd0001800, 0xfc001c00, "?xb,P,T,x", pa10, 0},
+{ "extrs",     0xd0001c00, 0xfc001c00, "?xb,P,T,x", pa10, 0},
+{ "depd",      0xd4000200, 0xfc001ae0, "cz?Xx,!,%,b", pa20, FLAG_STRICT},
+{ "depd",      0xf0000000, 0xfc000000, "cz?Xx,~,|,b", pa20, FLAG_STRICT},
+{ "depdi",     0xd4001200, 0xfc001ae0, "cz?X5,!,%,b", pa20, FLAG_STRICT},
+{ "depdi",     0xf4000000, 0xfc000000, "cz?X5,~,|,b", pa20, FLAG_STRICT},
+{ "depw",      0xd4000000, 0xfc001be0, "cz?xx,!,T,b", pa10, FLAG_STRICT},
+{ "depw",      0xd4000800, 0xfc001800, "cz?xx,p,T,b", pa10, FLAG_STRICT},
+{ "depwi",     0xd4001000, 0xfc001be0, "cz?x5,!,T,b", pa10, FLAG_STRICT},
+{ "depwi",     0xd4001800, 0xfc001800, "cz?x5,p,T,b", pa10, FLAG_STRICT},
+{ "zvdep",     0xd4000000, 0xfc001fe0, "?xx,T,b", pa10, 0},
+{ "vdep",      0xd4000400, 0xfc001fe0, "?xx,T,b", pa10, 0},
+{ "zdep",      0xd4000800, 0xfc001c00, "?xx,p,T,b", pa10, 0},
+{ "dep",       0xd4000c00, 0xfc001c00, "?xx,p,T,b", pa10, 0},
+{ "zvdepi",    0xd4001000, 0xfc001fe0, "?x5,T,b", pa10, 0},
+{ "vdepi",     0xd4001400, 0xfc001fe0, "?x5,T,b", pa10, 0},
+{ "zdepi",     0xd4001800, 0xfc001c00, "?x5,p,T,b", pa10, 0},
+{ "depi",      0xd4001c00, 0xfc001c00, "?x5,p,T,b", pa10, 0},
 
 /* System Control Instructions.  */
 
-{ "break",      0x00000000, 0xfc001fe0, "r,A", pa10, 0},
-{ "rfi",        0x00000c00, 0xffffff1f, "cr", pa10, FLAG_STRICT},
-{ "rfi",        0x00000c00, 0xffffffff, "", pa10, 0},
-{ "rfir",       0x00000ca0, 0xffffffff, "", pa11, 0},
-{ "ssm",        0x00000d60, 0xfc00ffe0, "U,t", pa20, FLAG_STRICT},
-{ "ssm",        0x00000d60, 0xffe0ffe0, "R,t", pa10, 0},
-{ "rsm",        0x00000e60, 0xfc00ffe0, "U,t", pa20, FLAG_STRICT},
-{ "rsm",        0x00000e60, 0xffe0ffe0, "R,t", pa10, 0},
-{ "mtsm",       0x00001860, 0xffe0ffff, "x", pa10, 0},
-{ "ldsid",      0x000010a0, 0xfc1f3fe0, "(s,b),t", pa10, 0},
-{ "ldsid",      0x000010a0, 0xfc1f3fe0, "(b),t", pa10, 0},
-{ "mtsp",       0x00001820, 0xffe01fff, "x,S", pa10, 0},
-{ "mtctl",      0x00001840, 0xfc00ffff, "x,^", pa10, 0},
-{ "mtsarcm",    0x016018C0, 0xffe0ffff, "x", pa20, FLAG_STRICT},
-{ "mfia",       0x000014A0, 0xffffffe0, "t", pa20, FLAG_STRICT},
-{ "mfsp",       0x000004a0, 0xffff1fe0, "S,t", pa10, 0},
-{ "mfctl",      0x016048a0, 0xffffffe0, "cW!,t", pa20, FLAG_STRICT},
-{ "mfctl",      0x000008a0, 0xfc1fffe0, "^,t", pa10, 0},
-{ "sync",       0x00000400, 0xffffffff, "", pa10, 0},
-{ "syncdma",    0x00100400, 0xffffffff, "", pa10, 0},
-{ "probe",      0x04001180, 0xfc003fa0, "cw(s,b),x,t", pa10, FLAG_STRICT},
-{ "probe",      0x04001180, 0xfc003fa0, "cw(b),x,t", pa10, FLAG_STRICT},
-{ "probei",     0x04003180, 0xfc003fa0, "cw(s,b),R,t", pa10, FLAG_STRICT},
-{ "probei",     0x04003180, 0xfc003fa0, "cw(b),R,t", pa10, FLAG_STRICT},
-{ "prober",     0x04001180, 0xfc003fe0, "(s,b),x,t", pa10, 0},
-{ "prober",     0x04001180, 0xfc003fe0, "(b),x,t", pa10, 0},
-{ "proberi",    0x04003180, 0xfc003fe0, "(s,b),R,t", pa10, 0},
-{ "proberi",    0x04003180, 0xfc003fe0, "(b),R,t", pa10, 0},
-{ "probew",     0x040011c0, 0xfc003fe0, "(s,b),x,t", pa10, 0},
-{ "probew",     0x040011c0, 0xfc003fe0, "(b),x,t", pa10, 0},
-{ "probewi",    0x040031c0, 0xfc003fe0, "(s,b),R,t", pa10, 0},
-{ "probewi",    0x040031c0, 0xfc003fe0, "(b),R,t", pa10, 0},
-{ "lpa",        0x04001340, 0xfc003fc0, "cZx(s,b),t", pa10, 0},
-{ "lpa",        0x04001340, 0xfc003fc0, "cZx(b),t", pa10, 0},
-{ "lha",        0x04001300, 0xfc003fc0, "cZx(s,b),t", pa10, 0},
-{ "lha",        0x04001300, 0xfc003fc0, "cZx(b),t", pa10, 0},
-{ "lci",        0x04001300, 0xfc003fe0, "x(s,b),t", pa10, 0},
-{ "lci",        0x04001300, 0xfc003fe0, "x(b),t", pa10, 0},
-{ "pdtlb",      0x04001600, 0xfc003fdf, "cLcZx(s,b)", pa20, FLAG_STRICT},
-{ "pdtlb",      0x04001600, 0xfc003fdf, "cLcZx(b)", pa20, FLAG_STRICT},
-{ "pdtlb",      0x04001200, 0xfc003fdf, "cZx(s,b)", pa10, 0},
-{ "pdtlb",      0x04001200, 0xfc003fdf, "cZx(b)", pa10, 0},
-{ "pitlb",      0x04000600, 0xfc001fdf, "cLcZx(S,b)", pa20, FLAG_STRICT},
-{ "pitlb",      0x04000600, 0xfc001fdf, "cLcZx(b)", pa20, FLAG_STRICT},
-{ "pitlb",      0x04000200, 0xfc001fdf, "cZx(S,b)", pa10, 0},
-{ "pitlb",      0x04000200, 0xfc001fdf, "cZx(b)", pa10, 0},
-{ "pdtlbe",     0x04001240, 0xfc003fdf, "cZx(s,b)", pa10, 0},
-{ "pdtlbe",     0x04001240, 0xfc003fdf, "cZx(b)", pa10, 0},
-{ "pitlbe",     0x04000240, 0xfc001fdf, "cZx(S,b)", pa10, 0},
-{ "pitlbe",     0x04000240, 0xfc001fdf, "cZx(b)", pa10, 0},
-{ "idtlba",     0x04001040, 0xfc003fff, "x,(s,b)", pa10, 0},
-{ "idtlba",     0x04001040, 0xfc003fff, "x,(b)", pa10, 0},
-{ "iitlba",     0x04000040, 0xfc001fff, "x,(S,b)", pa10, 0},
-{ "iitlba",     0x04000040, 0xfc001fff, "x,(b)", pa10, 0},
-{ "idtlbp",     0x04001000, 0xfc003fff, "x,(s,b)", pa10, 0},
-{ "idtlbp",     0x04001000, 0xfc003fff, "x,(b)", pa10, 0},
-{ "iitlbp",     0x04000000, 0xfc001fff, "x,(S,b)", pa10, 0},
-{ "iitlbp",     0x04000000, 0xfc001fff, "x,(b)", pa10, 0},
-{ "pdc",        0x04001380, 0xfc003fdf, "cZx(s,b)", pa10, 0},
-{ "pdc",        0x04001380, 0xfc003fdf, "cZx(b)", pa10, 0},
-{ "fdc",        0x04001280, 0xfc003fdf, "cZx(s,b)", pa10, 0},
-{ "fdc",        0x04001280, 0xfc003fdf, "cZx(b)", pa10, 0},
-{ "fic",        0x04000280, 0xfc001fdf, "cZx(S,b)", pa10, 0},
-{ "fic",        0x04000280, 0xfc001fdf, "cZx(b)", pa10, 0},
-{ "fdce",       0x040012c0, 0xfc003fdf, "cZx(s,b)", pa10, 0},
-{ "fdce",       0x040012c0, 0xfc003fdf, "cZx(b)", pa10, 0},
-{ "fice",       0x040002c0, 0xfc001fdf, "cZx(S,b)", pa10, 0},
-{ "fice",       0x040002c0, 0xfc001fdf, "cZx(b)", pa10, 0},
-{ "diag",       0x14000000, 0xfc000000, "D", pa10, 0},
-{ "idtlbt",     0x04001800, 0xfc00ffff, "x,b", pa20, FLAG_STRICT},
-{ "iitlbt",     0x04000800, 0xfc00ffff, "x,b", pa20, FLAG_STRICT},
+{ "break",     0x00000000, 0xfc001fe0, "r,A", pa10, 0},
+{ "rfi",       0x00000c00, 0xffffff1f, "cr", pa10, FLAG_STRICT},
+{ "rfi",       0x00000c00, 0xffffffff, "", pa10, 0},
+{ "rfir",      0x00000ca0, 0xffffffff, "", pa11, 0},
+{ "ssm",       0x00000d60, 0xfc00ffe0, "U,t", pa20, FLAG_STRICT},
+{ "ssm",       0x00000d60, 0xffe0ffe0, "R,t", pa10, 0},
+{ "rsm",       0x00000e60, 0xfc00ffe0, "U,t", pa20, FLAG_STRICT},
+{ "rsm",       0x00000e60, 0xffe0ffe0, "R,t", pa10, 0},
+{ "mtsm",      0x00001860, 0xffe0ffff, "x", pa10, 0},
+{ "ldsid",     0x000010a0, 0xfc1f3fe0, "(s,b),t", pa10, 0},
+{ "ldsid",     0x000010a0, 0xfc1f3fe0, "(b),t", pa10, 0},
+{ "mtsp",      0x00001820, 0xffe01fff, "x,S", pa10, 0},
+{ "mtctl",     0x00001840, 0xfc00ffff, "x,^", pa10, 0},
+{ "mtsarcm",   0x016018C0, 0xffe0ffff, "x", pa20, FLAG_STRICT},
+{ "mfia",      0x000014A0, 0xffffffe0, "t", pa20, FLAG_STRICT},
+{ "mfsp",      0x000004a0, 0xffff1fe0, "S,t", pa10, 0},
+{ "mfctl",     0x016048a0, 0xffffffe0, "cW!,t", pa20, FLAG_STRICT},
+{ "mfctl",     0x000008a0, 0xfc1fffe0, "^,t", pa10, 0},
+{ "sync",      0x00000400, 0xffffffff, "", pa10, 0},
+{ "syncdma",   0x00100400, 0xffffffff, "", pa10, 0},
+{ "probe",     0x04001180, 0xfc003fa0, "cw(s,b),x,t", pa10, FLAG_STRICT},
+{ "probe",     0x04001180, 0xfc003fa0, "cw(b),x,t", pa10, FLAG_STRICT},
+{ "probei",    0x04003180, 0xfc003fa0, "cw(s,b),R,t", pa10, FLAG_STRICT},
+{ "probei",    0x04003180, 0xfc003fa0, "cw(b),R,t", pa10, FLAG_STRICT},
+{ "prober",    0x04001180, 0xfc003fe0, "(s,b),x,t", pa10, 0},
+{ "prober",    0x04001180, 0xfc003fe0, "(b),x,t", pa10, 0},
+{ "proberi",   0x04003180, 0xfc003fe0, "(s,b),R,t", pa10, 0},
+{ "proberi",   0x04003180, 0xfc003fe0, "(b),R,t", pa10, 0},
+{ "probew",    0x040011c0, 0xfc003fe0, "(s,b),x,t", pa10, 0},
+{ "probew",    0x040011c0, 0xfc003fe0, "(b),x,t", pa10, 0},
+{ "probewi",   0x040031c0, 0xfc003fe0, "(s,b),R,t", pa10, 0},
+{ "probewi",   0x040031c0, 0xfc003fe0, "(b),R,t", pa10, 0},
+{ "lpa",       0x04001340, 0xfc003fc0, "cZx(s,b),t", pa10, 0},
+{ "lpa",       0x04001340, 0xfc003fc0, "cZx(b),t", pa10, 0},
+{ "lha",       0x04001300, 0xfc003fc0, "cZx(s,b),t", pa10, 0},
+{ "lha",       0x04001300, 0xfc003fc0, "cZx(b),t", pa10, 0},
+{ "lci",       0x04001300, 0xfc003fe0, "x(s,b),t", pa10, 0},
+{ "lci",       0x04001300, 0xfc003fe0, "x(b),t", pa10, 0},
+{ "pdtlb",     0x04001600, 0xfc003fdf, "cLcZx(s,b)", pa20, FLAG_STRICT},
+{ "pdtlb",     0x04001600, 0xfc003fdf, "cLcZx(b)", pa20, FLAG_STRICT},
+{ "pdtlb",     0x04001200, 0xfc003fdf, "cZx(s,b)", pa10, 0},
+{ "pdtlb",     0x04001200, 0xfc003fdf, "cZx(b)", pa10, 0},
+{ "pitlb",     0x04000600, 0xfc001fdf, "cLcZx(S,b)", pa20, FLAG_STRICT},
+{ "pitlb",     0x04000600, 0xfc001fdf, "cLcZx(b)", pa20, FLAG_STRICT},
+{ "pitlb",     0x04000200, 0xfc001fdf, "cZx(S,b)", pa10, 0},
+{ "pitlb",     0x04000200, 0xfc001fdf, "cZx(b)", pa10, 0},
+{ "pdtlbe",    0x04001240, 0xfc003fdf, "cZx(s,b)", pa10, 0},
+{ "pdtlbe",    0x04001240, 0xfc003fdf, "cZx(b)", pa10, 0},
+{ "pitlbe",    0x04000240, 0xfc001fdf, "cZx(S,b)", pa10, 0},
+{ "pitlbe",    0x04000240, 0xfc001fdf, "cZx(b)", pa10, 0},
+{ "idtlba",    0x04001040, 0xfc003fff, "x,(s,b)", pa10, 0},
+{ "idtlba",    0x04001040, 0xfc003fff, "x,(b)", pa10, 0},
+{ "iitlba",    0x04000040, 0xfc001fff, "x,(S,b)", pa10, 0},
+{ "iitlba",    0x04000040, 0xfc001fff, "x,(b)", pa10, 0},
+{ "idtlbp",    0x04001000, 0xfc003fff, "x,(s,b)", pa10, 0},
+{ "idtlbp",    0x04001000, 0xfc003fff, "x,(b)", pa10, 0},
+{ "iitlbp",    0x04000000, 0xfc001fff, "x,(S,b)", pa10, 0},
+{ "iitlbp",    0x04000000, 0xfc001fff, "x,(b)", pa10, 0},
+{ "pdc",       0x04001380, 0xfc003fdf, "cZx(s,b)", pa10, 0},
+{ "pdc",       0x04001380, 0xfc003fdf, "cZx(b)", pa10, 0},
+{ "fdc",       0x04001280, 0xfc003fdf, "cZx(s,b)", pa10, 0},
+{ "fdc",       0x04001280, 0xfc003fdf, "cZx(b)", pa10, 0},
+{ "fic",       0x04000280, 0xfc001fdf, "cZx(S,b)", pa10, 0},
+{ "fic",       0x04000280, 0xfc001fdf, "cZx(b)", pa10, 0},
+{ "fdce",      0x040012c0, 0xfc003fdf, "cZx(s,b)", pa10, 0},
+{ "fdce",      0x040012c0, 0xfc003fdf, "cZx(b)", pa10, 0},
+{ "fice",      0x040002c0, 0xfc001fdf, "cZx(S,b)", pa10, 0},
+{ "fice",      0x040002c0, 0xfc001fdf, "cZx(b)", pa10, 0},
+{ "diag",      0x14000000, 0xfc000000, "D", pa10, 0},
+{ "idtlbt",    0x04001800, 0xfc00ffff, "x,b", pa20, FLAG_STRICT},
+{ "iitlbt",    0x04000800, 0xfc00ffff, "x,b", pa20, FLAG_STRICT},
 
 /* These may be specific to certain versions of the PA.  Joel claimed
    they were 72000 (7200?) specific.  However, I'm almost certain the
    mtcpu/mfcpu were undocumented, but available in the older 700 machines.  */
-{ "mtcpu",      0x14001600, 0xfc00ffff, "x,^", pa10, 0},
-{ "mfcpu",      0x14001A00, 0xfc00ffff, "^,x", pa10, 0},
-{ "tocen",      0x14403600, 0xffffffff, "", pa10, 0},
-{ "tocdis",     0x14401620, 0xffffffff, "", pa10, 0},
-{ "shdwgr",     0x14402600, 0xffffffff, "", pa10, 0},
-{ "grshdw",     0x14400620, 0xffffffff, "", pa10, 0},
+{ "mtcpu",     0x14001600, 0xfc00ffff, "x,^", pa10, 0},
+{ "mfcpu",     0x14001A00, 0xfc00ffff, "^,x", pa10, 0},
+{ "tocen",     0x14403600, 0xffffffff, "", pa10, 0},
+{ "tocdis",    0x14401620, 0xffffffff, "", pa10, 0},
+{ "shdwgr",    0x14402600, 0xffffffff, "", pa10, 0},
+{ "grshdw",    0x14400620, 0xffffffff, "", pa10, 0},
 
 /* gfw and gfr are not in the HP PA 1.1 manual, but they are in either
    the Timex FPU or the Mustang ERS (not sure which) manual.  */
@@ -707,107 +760,139 @@ static const struct pa_opcode pa_opcodes
 
 /* Floating Point Coprocessor Instructions.  */
  
-{ "fldw",       0x24000000, 0xfc001380, "cxccx(s,b),fT", pa10, FLAG_STRICT},
-{ "fldw",       0x24000000, 0xfc001380, "cxccx(b),fT", pa10, FLAG_STRICT},
-{ "fldw",       0x24001000, 0xfc001380, "cmcc5(s,b),fT", pa10, FLAG_STRICT},
-{ "fldw",       0x24001000, 0xfc001380, "cmcc5(b),fT", pa10, FLAG_STRICT},
-{ "fldw",       0x24001020, 0xfc1f33a0, "cocc@(s,b),fT", pa20, FLAG_STRICT},
-{ "fldw",       0x24001020, 0xfc1f33a0, "cocc@(b),fT", pa20, FLAG_STRICT},
-{ "fldw",       0x5c000000, 0xfc000004, "y(b),fe", pa20w, FLAG_STRICT},
-{ "fldw",       0x58000000, 0xfc000000, "cJy(b),fe", pa20w, FLAG_STRICT},
-{ "fldw",       0x5c000000, 0xfc000004, "d(b),fe", pa20, FLAG_STRICT},
-{ "fldw",       0x58000000, 0xfc000000, "cJd(b),fe", pa20, FLAG_STRICT},
-{ "fldd",       0x2c000000, 0xfc0013c0, "cxccx(s,b),ft", pa10, FLAG_STRICT},
-{ "fldd",       0x2c000000, 0xfc0013c0, "cxccx(b),ft", pa10, FLAG_STRICT},
-{ "fldd",       0x2c001000, 0xfc0013c0, "cmcc5(s,b),ft", pa10, FLAG_STRICT},
-{ "fldd",       0x2c001000, 0xfc0013c0, "cmcc5(b),ft", pa10, FLAG_STRICT},
-{ "fldd",       0x2c001020, 0xfc1f33e0, "cocc@(s,b),ft", pa20, FLAG_STRICT},
-{ "fldd",       0x2c001020, 0xfc1f33e0, "cocc@(b),ft", pa20, FLAG_STRICT},
-{ "fldd",       0x50000002, 0xfc000002, "cq&(b),fx", pa20w, FLAG_STRICT},
-{ "fldd",       0x50000002, 0xfc000002, "cq#(b),fx", pa20, FLAG_STRICT},
-{ "fstw",       0x24000200, 0xfc001380, "cxcCfT,x(s,b)", pa10, FLAG_STRICT},
-{ "fstw",       0x24000200, 0xfc001380, "cxcCfT,x(b)", pa10, FLAG_STRICT},
-{ "fstw",       0x24001200, 0xfc001380, "cmcCfT,5(s,b)", pa10, FLAG_STRICT},
-{ "fstw",       0x24001200, 0xfc001380, "cmcCfT,5(b)", pa10, FLAG_STRICT},
-{ "fstw",       0x24001220, 0xfc1f33a0, "cocCfT,@(s,b)", pa10, FLAG_STRICT},
-{ "fstw",       0x24001220, 0xfc1f33a0, "cocCfT,@(b)", pa10, FLAG_STRICT},
-{ "fstw",       0x7c000000, 0xfc000004, "fE,y(b)", pa20w, FLAG_STRICT},
-{ "fstw",       0x78000000, 0xfc000000, "cJfe,y(b)", pa20w, FLAG_STRICT},
-{ "fstw",       0x7c000000, 0xfc000004, "fe,d(b)", pa20, FLAG_STRICT},
-{ "fstw",       0x78000000, 0xfc000000, "cJfe,d(b)", pa20, FLAG_STRICT},
-{ "fstd",       0x2c000200, 0xfc0013c0, "cxcCft,x(s,b)", pa10, FLAG_STRICT},
-{ "fstd",       0x2c000200, 0xfc0013c0, "cxcCft,x(b)", pa10, FLAG_STRICT},
-{ "fstd",       0x2c001200, 0xfc0013c0, "cmcCft,5(s,b)", pa10, FLAG_STRICT},
-{ "fstd",       0x2c001200, 0xfc0013c0, "cmcCft,5(b)", pa10, FLAG_STRICT},
-{ "fstd",       0x2c001220, 0xfc1f33e0, "cocCft,@(s,b)", pa10, FLAG_STRICT},
-{ "fstd",       0x2c001220, 0xfc1f33e0, "cocCft,@(b)", pa10, FLAG_STRICT},
-{ "fstd",       0x70000002, 0xfc000002, "cqfx,&(b)", pa20w, FLAG_STRICT},
-{ "fstd",       0x70000002, 0xfc000002, "cqfx,#(b)", pa20, FLAG_STRICT},
-{ "fldwx",      0x24000000, 0xfc001f80, "cXx(s,b),fT", pa10, 0},
-{ "fldwx",      0x24000000, 0xfc001f80, "cXx(b),fT", pa10, 0},
-{ "flddx",      0x2c000000, 0xfc001fc0, "cXx(s,b),ft", pa10, 0},
-{ "flddx",      0x2c000000, 0xfc001fc0, "cXx(b),ft", pa10, 0},
-{ "fstwx",      0x24000200, 0xfc001f80, "cxfT,x(s,b)", pa10, 0},
-{ "fstwx",      0x24000200, 0xfc001f80, "cxfT,x(b)", pa10, 0},
-{ "fstdx",      0x2c000200, 0xfc001fc0, "cxft,x(s,b)", pa10, 0},
-{ "fstdx",      0x2c000200, 0xfc001fc0, "cxft,x(b)", pa10, 0},
-{ "fstqx",      0x3c000200, 0xfc001fc0, "cxft,x(s,b)", pa10, 0},
-{ "fstqx",      0x3c000200, 0xfc001fc0, "cxft,x(b)", pa10, 0},
-{ "fldws",      0x24001000, 0xfc001f80, "cm5(s,b),fT", pa10, 0},
-{ "fldws",      0x24001000, 0xfc001f80, "cm5(b),fT", pa10, 0},
-{ "fldds",      0x2c001000, 0xfc001fc0, "cm5(s,b),ft", pa10, 0},
-{ "fldds",      0x2c001000, 0xfc001fc0, "cm5(b),ft", pa10, 0},
-{ "fstws",      0x24001200, 0xfc001f80, "cmfT,5(s,b)", pa10, 0},
-{ "fstws",      0x24001200, 0xfc001f80, "cmfT,5(b)", pa10, 0},
-{ "fstds",      0x2c001200, 0xfc001fc0, "cmft,5(s,b)", pa10, 0},
-{ "fstds",      0x2c001200, 0xfc001fc0, "cmft,5(b)", pa10, 0},
-{ "fstqs",      0x3c001200, 0xfc001fc0, "cmft,5(s,b)", pa10, 0},
-{ "fstqs",      0x3c001200, 0xfc001fc0, "cmft,5(b)", pa10, 0},
-{ "fadd",       0x30000600, 0xfc00e7e0, "Ffa,fb,fT", pa10, 0},
-{ "fadd",       0x38000600, 0xfc00e720, "IfA,fB,fT", pa10, 0},
-{ "fsub",       0x30002600, 0xfc00e7e0, "Ffa,fb,fT", pa10, 0},
-{ "fsub",       0x38002600, 0xfc00e720, "IfA,fB,fT", pa10, 0},
-{ "fmpy",       0x30004600, 0xfc00e7e0, "Ffa,fb,fT", pa10, 0},
-{ "fmpy",       0x38004600, 0xfc00e720, "IfA,fB,fT", pa10, 0},
-{ "fdiv",       0x30006600, 0xfc00e7e0, "Ffa,fb,fT", pa10, 0},
-{ "fdiv",       0x38006600, 0xfc00e720, "IfA,fB,fT", pa10, 0},
-{ "fsqrt",      0x30008000, 0xfc1fe7e0, "Ffa,fT", pa10, 0},
-{ "fsqrt",      0x38008000, 0xfc1fe720, "FfA,fT", pa10, 0},
-{ "fabs",       0x30006000, 0xfc1fe7e0, "Ffa,fT", pa10, 0},
-{ "fabs",       0x38006000, 0xfc1fe720, "FfA,fT", pa10, 0},
-{ "frem",       0x30008600, 0xfc00e7e0, "Ffa,fb,fT", pa10, 0},
-{ "frem",       0x38008600, 0xfc00e720, "FfA,fB,fT", pa10, 0},
-{ "frnd",       0x3000a000, 0xfc1fe7e0, "Ffa,fT", pa10, 0},
-{ "frnd",       0x3800a000, 0xfc1fe720, "FfA,fT", pa10, 0},
-{ "fcpy",       0x30004000, 0xfc1fe7e0, "Ffa,fT", pa10, 0},
-{ "fcpy",       0x38004000, 0xfc1fe720, "FfA,fT", pa10, 0},
-{ "fcnvff",     0x30000200, 0xfc1f87e0, "FGfa,fT", pa10, 0},
-{ "fcnvff",     0x38000200, 0xfc1f8720, "FGfA,fT", pa10, 0},
-{ "fcnvxf",     0x30008200, 0xfc1f87e0, "FGfa,fT", pa10, 0},
-{ "fcnvxf",     0x38008200, 0xfc1f8720, "FGfA,fT", pa10, 0},
-{ "fcnvfx",     0x30010200, 0xfc1f87e0, "FGfa,fT", pa10, 0},
-{ "fcnvfx",     0x38010200, 0xfc1f8720, "FGfA,fT", pa10, 0},
-{ "fcnvfxt",    0x30018200, 0xfc1f87e0, "FGfa,fT", pa10, 0},
-{ "fcnvfxt",    0x38018200, 0xfc1f8720, "FGfA,fT", pa10, 0},
-{ "fmpyfadd",   0xb8000000, 0xfc000020, "IfA,fB,fC,fT", pa20, FLAG_STRICT},
-{ "fmpynfadd",  0xb8000020, 0xfc000020, "IfA,fB,fC,fT", pa20, FLAG_STRICT},
-{ "fneg",       0x3000c000, 0xfc1fe7e0, "Ffa,fT", pa20, FLAG_STRICT},
-{ "fneg",       0x3800c000, 0xfc1fe720, "IfA,fT", pa20, FLAG_STRICT},
-{ "fnegabs",    0x3000e000, 0xfc1fe7e0, "Ffa,fT", pa20, FLAG_STRICT},
-{ "fnegabs",    0x3800e000, 0xfc1fe720, "IfA,fT", pa20, FLAG_STRICT},
-{ "fcnv",       0x30000200, 0xfc1c0720, "{_fa,fT", pa20, FLAG_STRICT},
-{ "fcnv",       0x38000200, 0xfc1c0720, "FGfA,fT", pa20, FLAG_STRICT},
-{ "fcmp",       0x30000400, 0xfc0007e0, "F?ffa,fb,h", pa20, FLAG_STRICT},
-{ "fcmp",       0x38000400, 0xfc000720, "I?ffA,fB,h", pa20, FLAG_STRICT},
-{ "fcmp",       0x30000400, 0xfc00e7e0, "F?ffa,fb", pa10, 0},
-{ "fcmp",       0x38000400, 0xfc00e720, "I?ffA,fB", pa10, 0},
+{ "fldw",      0x24000000, 0xfc001f80, "cXx(s,b),fT", pa10, FLAG_STRICT},
+{ "fldw",      0x24000000, 0xfc001f80, "cXx(b),fT", pa10, FLAG_STRICT},
+{ "fldw",      0x24000000, 0xfc001380, "cxccx(s,b),fT", pa11, FLAG_STRICT},
+{ "fldw",      0x24000000, 0xfc001380, "cxccx(b),fT", pa11, FLAG_STRICT},
+{ "fldw",      0x24001000, 0xfc001f80, "cm5(s,b),fT", pa10, FLAG_STRICT},
+{ "fldw",      0x24001000, 0xfc001f80, "cm5(b),fT", pa10, FLAG_STRICT},
+{ "fldw",      0x24001000, 0xfc001380, "cmcc5(s,b),fT", pa11, FLAG_STRICT},
+{ "fldw",      0x24001000, 0xfc001380, "cmcc5(b),fT", pa11, FLAG_STRICT},
+{ "fldw",      0x24001020, 0xfc1f33a0, "cocc@(s,b),fT", pa20, FLAG_STRICT},
+{ "fldw",      0x24001020, 0xfc1f33a0, "cocc@(b),fT", pa20, FLAG_STRICT},
+{ "fldw",      0x5c000000, 0xfc000004, "y(b),fe", pa20w, FLAG_STRICT},
+{ "fldw",      0x58000000, 0xfc000000, "cJy(b),fe", pa20w, FLAG_STRICT},
+{ "fldw",      0x5c000000, 0xfc000004, "d(b),fe", pa20, FLAG_STRICT},
+{ "fldw",      0x58000000, 0xfc000000, "cJd(b),fe", pa20, FLAG_STRICT},
+{ "fldd",      0x2c000000, 0xfc001fc0, "cXx(s,b),ft", pa10, FLAG_STRICT},
+{ "fldd",      0x2c000000, 0xfc001fc0, "cXx(b),ft", pa10, FLAG_STRICT},
+{ "fldd",      0x2c000000, 0xfc0013c0, "cxccx(s,b),ft", pa11, FLAG_STRICT},
+{ "fldd",      0x2c000000, 0xfc0013c0, "cxccx(b),ft", pa11, FLAG_STRICT},
+{ "fldd",      0x2c001000, 0xfc001fc0, "cm5(s,b),ft", pa10, FLAG_STRICT},
+{ "fldd",      0x2c001000, 0xfc001fc0, "cm5(b),ft", pa10, FLAG_STRICT},
+{ "fldd",      0x2c001000, 0xfc0013c0, "cmcc5(s,b),ft", pa11, FLAG_STRICT},
+{ "fldd",      0x2c001000, 0xfc0013c0, "cmcc5(b),ft", pa11, FLAG_STRICT},
+{ "fldd",      0x2c001020, 0xfc1f33e0, "cocc@(s,b),ft", pa20, FLAG_STRICT},
+{ "fldd",      0x2c001020, 0xfc1f33e0, "cocc@(b),ft", pa20, FLAG_STRICT},
+{ "fldd",      0x50000002, 0xfc000002, "cq&(b),fx", pa20w, FLAG_STRICT},
+{ "fldd",      0x50000002, 0xfc000002, "cq#(b),fx", pa20, FLAG_STRICT},
+{ "fstw",      0x24000200, 0xfc001f80, "cxfT,x(s,b)", pa10, FLAG_STRICT},
+{ "fstw",      0x24000200, 0xfc001f80, "cxfT,x(b)", pa10, FLAG_STRICT},
+{ "fstw",      0x24000200, 0xfc001380, "cxcCfT,x(s,b)", pa11, FLAG_STRICT},
+{ "fstw",      0x24000200, 0xfc001380, "cxcCfT,x(b)", pa11, FLAG_STRICT},
+{ "fstw",      0x24001200, 0xfc001f80, "cmfT,5(s,b)", pa10, FLAG_STRICT},
+{ "fstw",      0x24001200, 0xfc001f80, "cmfT,5(b)", pa10, FLAG_STRICT},
+{ "fstw",      0x24001200, 0xfc001380, "cmcCfT,5(s,b)", pa11, FLAG_STRICT},
+{ "fstw",      0x24001200, 0xfc001380, "cmcCfT,5(b)", pa11, FLAG_STRICT},
+{ "fstw",      0x24001220, 0xfc1f33a0, "cocCfT,@(s,b)", pa20, FLAG_STRICT},
+{ "fstw",      0x24001220, 0xfc1f33a0, "cocCfT,@(b)", pa20, FLAG_STRICT},
+{ "fstw",      0x7c000000, 0xfc000004, "fE,y(b)", pa20w, FLAG_STRICT},
+{ "fstw",      0x78000000, 0xfc000000, "cJfe,y(b)", pa20w, FLAG_STRICT},
+{ "fstw",      0x7c000000, 0xfc000004, "fe,d(b)", pa20, FLAG_STRICT},
+{ "fstw",      0x78000000, 0xfc000000, "cJfe,d(b)", pa20, FLAG_STRICT},
+{ "fstd",      0x2c000200, 0xfc001fc0, "cxft,x(s,b)", pa10, FLAG_STRICT},
+{ "fstd",      0x2c000200, 0xfc001fc0, "cxft,x(b)", pa10, FLAG_STRICT},
+{ "fstd",      0x2c000200, 0xfc0013c0, "cxcCft,x(s,b)", pa11, FLAG_STRICT},
+{ "fstd",      0x2c000200, 0xfc0013c0, "cxcCft,x(b)", pa11, FLAG_STRICT},
+{ "fstd",      0x2c001200, 0xfc001fc0, "cmft,5(s,b)", pa10, FLAG_STRICT},
+{ "fstd",      0x2c001200, 0xfc001fc0, "cmft,5(b)", pa10, FLAG_STRICT},
+{ "fstd",      0x2c001200, 0xfc0013c0, "cmcCft,5(s,b)", pa11, FLAG_STRICT},
+{ "fstd",      0x2c001200, 0xfc0013c0, "cmcCft,5(b)", pa11, FLAG_STRICT},
+{ "fstd",      0x2c001220, 0xfc1f33e0, "cocCft,@(s,b)", pa20, FLAG_STRICT},
+{ "fstd",      0x2c001220, 0xfc1f33e0, "cocCft,@(b)", pa20, FLAG_STRICT},
+{ "fstd",      0x70000002, 0xfc000002, "cqfx,&(b)", pa20w, FLAG_STRICT},
+{ "fstd",      0x70000002, 0xfc000002, "cqfx,#(b)", pa20, FLAG_STRICT},
+{ "fldwx",     0x24000000, 0xfc001f80, "cXx(s,b),fT", pa10, FLAG_STRICT},
+{ "fldwx",     0x24000000, 0xfc001f80, "cXx(b),fT", pa10, FLAG_STRICT},
+{ "fldwx",     0x24000000, 0xfc001380, "cxccx(s,b),fT", pa11, FLAG_STRICT},
+{ "fldwx",     0x24000000, 0xfc001380, "cxccx(b),fT", pa11, FLAG_STRICT},
+{ "flddx",     0x2c000000, 0xfc001fc0, "cXx(s,b),ft", pa10, FLAG_STRICT},
+{ "flddx",     0x2c000000, 0xfc001fc0, "cXx(b),ft", pa10, FLAG_STRICT},
+{ "flddx",     0x2c000000, 0xfc0013c0, "cxccx(s,b),ft", pa11, FLAG_STRICT},
+{ "flddx",     0x2c000000, 0xfc0013c0, "cxccx(b),ft", pa11, FLAG_STRICT},
+{ "fstwx",     0x24000200, 0xfc001f80, "cxfT,x(s,b)", pa10, FLAG_STRICT},
+{ "fstwx",     0x24000200, 0xfc001f80, "cxfT,x(b)", pa10, FLAG_STRICT},
+{ "fstwx",     0x24000200, 0xfc001380, "cxcCfT,x(s,b)", pa11, FLAG_STRICT},
+{ "fstwx",     0x24000200, 0xfc001380, "cxcCfT,x(b)", pa11, FLAG_STRICT},
+{ "fstdx",     0x2c000200, 0xfc001fc0, "cxft,x(s,b)", pa10, FLAG_STRICT},
+{ "fstdx",     0x2c000200, 0xfc001fc0, "cxft,x(b)", pa10, FLAG_STRICT},
+{ "fstdx",     0x2c000200, 0xfc0013c0, "cxcCft,x(s,b)", pa11, FLAG_STRICT},
+{ "fstdx",     0x2c000200, 0xfc0013c0, "cxcCft,x(b)", pa11, FLAG_STRICT},
+{ "fstqx",     0x3c000200, 0xfc001fc0, "cxft,x(s,b)", pa10, 0},
+{ "fstqx",     0x3c000200, 0xfc001fc0, "cxft,x(b)", pa10, 0},
+{ "fldws",     0x24001000, 0xfc001f80, "cm5(s,b),fT", pa10, FLAG_STRICT},
+{ "fldws",     0x24001000, 0xfc001f80, "cm5(b),fT", pa10, FLAG_STRICT},
+{ "fldws",     0x24001000, 0xfc001380, "cmcc5(s,b),fT", pa11, FLAG_STRICT},
+{ "fldws",     0x24001000, 0xfc001380, "cmcc5(b),fT", pa11, FLAG_STRICT},
+{ "fldds",     0x2c001000, 0xfc001fc0, "cm5(s,b),ft", pa10, FLAG_STRICT},
+{ "fldds",     0x2c001000, 0xfc001fc0, "cm5(b),ft", pa10, FLAG_STRICT},
+{ "fldds",     0x2c001000, 0xfc0013c0, "cmcc5(s,b),ft", pa11, FLAG_STRICT},
+{ "fldds",     0x2c001000, 0xfc0013c0, "cmcc5(b),ft", pa11, FLAG_STRICT},
+{ "fstws",     0x24001200, 0xfc001f80, "cmfT,5(s,b)", pa10, FLAG_STRICT},
+{ "fstws",     0x24001200, 0xfc001f80, "cmfT,5(b)", pa10, FLAG_STRICT},
+{ "fstws",     0x24001200, 0xfc001380, "cmcCfT,5(s,b)", pa11, FLAG_STRICT},
+{ "fstws",     0x24001200, 0xfc001380, "cmcCfT,5(b)", pa11, FLAG_STRICT},
+{ "fstds",     0x2c001200, 0xfc001fc0, "cmft,5(s,b)", pa10, FLAG_STRICT},
+{ "fstds",     0x2c001200, 0xfc001fc0, "cmft,5(b)", pa10, FLAG_STRICT},
+{ "fstds",     0x2c001200, 0xfc0013c0, "cmcCft,5(s,b)", pa11, FLAG_STRICT},
+{ "fstds",     0x2c001200, 0xfc0013c0, "cmcCft,5(b)", pa11, FLAG_STRICT},
+{ "fstqs",     0x3c001200, 0xfc001fc0, "cmft,5(s,b)", pa10, 0},
+{ "fstqs",     0x3c001200, 0xfc001fc0, "cmft,5(b)", pa10, 0},
+{ "fadd",      0x30000600, 0xfc00e7e0, "Ffa,fb,fT", pa10, 0},
+{ "fadd",      0x38000600, 0xfc00e720, "IfA,fB,fT", pa10, 0},
+{ "fsub",      0x30002600, 0xfc00e7e0, "Ffa,fb,fT", pa10, 0},
+{ "fsub",      0x38002600, 0xfc00e720, "IfA,fB,fT", pa10, 0},
+{ "fmpy",      0x30004600, 0xfc00e7e0, "Ffa,fb,fT", pa10, 0},
+{ "fmpy",      0x38004600, 0xfc00e720, "IfA,fB,fT", pa10, 0},
+{ "fdiv",      0x30006600, 0xfc00e7e0, "Ffa,fb,fT", pa10, 0},
+{ "fdiv",      0x38006600, 0xfc00e720, "IfA,fB,fT", pa10, 0},
+{ "fsqrt",     0x30008000, 0xfc1fe7e0, "Ffa,fT", pa10, 0},
+{ "fsqrt",     0x38008000, 0xfc1fe720, "FfA,fT", pa10, 0},
+{ "fabs",      0x30006000, 0xfc1fe7e0, "Ffa,fT", pa10, 0},
+{ "fabs",      0x38006000, 0xfc1fe720, "FfA,fT", pa10, 0},
+{ "frem",      0x30008600, 0xfc00e7e0, "Ffa,fb,fT", pa10, 0},
+{ "frem",      0x38008600, 0xfc00e720, "FfA,fB,fT", pa10, 0},
+{ "frnd",      0x3000a000, 0xfc1fe7e0, "Ffa,fT", pa10, 0},
+{ "frnd",      0x3800a000, 0xfc1fe720, "FfA,fT", pa10, 0},
+{ "fcpy",      0x30004000, 0xfc1fe7e0, "Ffa,fT", pa10, 0},
+{ "fcpy",      0x38004000, 0xfc1fe720, "FfA,fT", pa10, 0},
+{ "fcnvff",    0x30000200, 0xfc1f87e0, "FGfa,fT", pa10, 0},
+{ "fcnvff",    0x38000200, 0xfc1f8720, "FGfA,fT", pa10, 0},
+{ "fcnvxf",    0x30008200, 0xfc1f87e0, "FGfa,fT", pa10, 0},
+{ "fcnvxf",    0x38008200, 0xfc1f8720, "FGfA,fT", pa10, 0},
+{ "fcnvfx",    0x30010200, 0xfc1f87e0, "FGfa,fT", pa10, 0},
+{ "fcnvfx",    0x38010200, 0xfc1f8720, "FGfA,fT", pa10, 0},
+{ "fcnvfxt",   0x30018200, 0xfc1f87e0, "FGfa,fT", pa10, 0},
+{ "fcnvfxt",   0x38018200, 0xfc1f8720, "FGfA,fT", pa10, 0},
+{ "fmpyfadd",  0xb8000000, 0xfc000020, "IfA,fB,fC,fT", pa20, FLAG_STRICT},
+{ "fmpynfadd", 0xb8000020, 0xfc000020, "IfA,fB,fC,fT", pa20, FLAG_STRICT},
+{ "fneg",      0x3000c000, 0xfc1fe7e0, "Ffa,fT", pa20, FLAG_STRICT},
+{ "fneg",      0x3800c000, 0xfc1fe720, "IfA,fT", pa20, FLAG_STRICT},
+{ "fnegabs",   0x3000e000, 0xfc1fe7e0, "Ffa,fT", pa20, FLAG_STRICT},
+{ "fnegabs",   0x3800e000, 0xfc1fe720, "IfA,fT", pa20, FLAG_STRICT},
+{ "fcnv",      0x30000200, 0xfc1c0720, "{_fa,fT", pa20, FLAG_STRICT},
+{ "fcnv",      0x38000200, 0xfc1c0720, "FGfA,fT", pa20, FLAG_STRICT},
+{ "fcmp",      0x30000400, 0xfc0007e0, "F?ffa,fb,h", pa20, FLAG_STRICT},
+{ "fcmp",      0x38000400, 0xfc000720, "I?ffA,fB,h", pa20, FLAG_STRICT},
+{ "fcmp",      0x30000400, 0xfc00e7e0, "F?ffa,fb", pa10, 0},
+{ "fcmp",      0x38000400, 0xfc00e720, "I?ffA,fB", pa10, 0},
 { "xmpyu",     0x38004700, 0xfc00e720, "fX,fB,fT", pa11, 0},
 { "fmpyadd",   0x18000000, 0xfc000000, "Hfi,fj,fk,fl,fm", pa11, 0},
 { "fmpysub",   0x98000000, 0xfc000000, "Hfi,fj,fk,fl,fm", pa11, 0},
-{ "ftest",      0x30002420, 0xffffffe0, ",=", pa20, FLAG_STRICT},
-{ "ftest",      0x30000420, 0xffff1fff, "m", pa20, FLAG_STRICT},
-{ "ftest",      0x30002420, 0xffffffff, "", pa10, 0},
-{ "fid",        0x30000000, 0xffffffff, "", pa11, 0},
+{ "ftest",     0x30002420, 0xffffffe0, ",=", pa20, FLAG_STRICT},
+{ "ftest",     0x30000420, 0xffff1fff, "m", pa20, FLAG_STRICT},
+{ "ftest",     0x30002420, 0xffffffff, "", pa10, 0},
+{ "fid",       0x30000000, 0xffffffff, "", pa11, 0},
 
 /* Performance Monitor Instructions.  */
 
@@ -816,43 +901,83 @@ static const struct pa_opcode pa_opcodes
 
 /* Assist Instructions.  */
 
-{ "spop0",      0x10000000, 0xfc000600, "v,ON", pa10, 0},
-{ "spop1",      0x10000200, 0xfc000600, "v,oNt", pa10, 0},
-{ "spop2",      0x10000400, 0xfc000600, "v,1Nb", pa10, 0},
-{ "spop3",      0x10000600, 0xfc000600, "v,0Nx,b", pa10, 0},
-{ "copr",       0x30000000, 0xfc000000, "u,2N", pa10, 0},
-{ "cldwx",      0x24000000, 0xfc001e00, "ucXx(s,b),t", pa10, 0},
-{ "cldwx",      0x24000000, 0xfc001e00, "ucXx(b),t", pa10, 0},
-{ "clddx",      0x2c000000, 0xfc001e00, "ucXx(s,b),t", pa10, 0},
-{ "clddx",      0x2c000000, 0xfc001e00, "ucXx(b),t", pa10, 0},
-{ "cstwx",      0x24000200, 0xfc001e00, "ucXt,x(s,b)", pa10, 0},
-{ "cstwx",      0x24000200, 0xfc001e00, "ucXt,x(b)", pa10, 0},
-{ "cstdx",      0x2c000200, 0xfc001e00, "ucXt,x(s,b)", pa10, 0},
-{ "cstdx",      0x2c000200, 0xfc001e00, "ucXt,x(b)", pa10, 0},
-{ "cldws",      0x24001000, 0xfc001e00, "ucM5(s,b),t", pa10, 0},
-{ "cldws",      0x24001000, 0xfc001e00, "ucM5(b),t", pa10, 0},
-{ "cldds",      0x2c001000, 0xfc001e00, "ucM5(s,b),t", pa10, 0},
-{ "cldds",      0x2c001000, 0xfc001e00, "ucM5(b),t", pa10, 0},
-{ "cstws",      0x24001200, 0xfc001e00, "ucMt,5(s,b)", pa10, 0},
-{ "cstws",      0x24001200, 0xfc001e00, "ucMt,5(b)", pa10, 0},
-{ "cstds",      0x2c001200, 0xfc001e00, "ucMt,5(s,b)", pa10, 0},
-{ "cstds",      0x2c001200, 0xfc001e00, "ucMt,5(b)", pa10, 0},
-{ "cldw",       0x24000000, 0xfc001e00, "ucXx(s,b),t", pa10, FLAG_STRICT},
-{ "cldw",       0x24000000, 0xfc001e00, "ucXx(b),t", pa10, FLAG_STRICT},
-{ "cldw",       0x24001000, 0xfc001e00, "ucM5(s,b),t", pa10, FLAG_STRICT},
-{ "cldw",       0x24001000, 0xfc001e00, "ucM5(b),t", pa10, FLAG_STRICT},
-{ "cldd",       0x2c000000, 0xfc001e00, "ucXx(s,b),t", pa10, FLAG_STRICT},
-{ "cldd",       0x2c000000, 0xfc001e00, "ucXx(b),t", pa10, FLAG_STRICT},
-{ "cldd",       0x2c001000, 0xfc001e00, "ucM5(s,b),t", pa10, FLAG_STRICT},
-{ "cldd",       0x2c001000, 0xfc001e00, "ucM5(b),t", pa20, FLAG_STRICT},
-{ "cstw",       0x24000200, 0xfc001e00, "ucXt,x(s,b)", pa10, FLAG_STRICT},
-{ "cstw",       0x24000200, 0xfc001e00, "ucXt,x(b)", pa10, FLAG_STRICT},
-{ "cstw",       0x24001200, 0xfc001e00, "ucMt,5(s,b)", pa10, FLAG_STRICT},
-{ "cstw",       0x24001200, 0xfc001e00, "ucMt,5(b)", pa10, FLAG_STRICT},
-{ "cstd",       0x2c000200, 0xfc001e00, "ucXt,x(s,b)", pa10, FLAG_STRICT},
-{ "cstd",       0x2c000200, 0xfc001e00, "ucXt,x(b)", pa10, FLAG_STRICT},
-{ "cstd",       0x2c001200, 0xfc001e00, "ucMt,5(s,b)", pa10, FLAG_STRICT},
-{ "cstd",       0x2c001200, 0xfc001e00, "ucMt,5(b)", pa10, FLAG_STRICT},
+{ "spop0",     0x10000000, 0xfc000600, "v,ON", pa10, 0},
+{ "spop1",     0x10000200, 0xfc000600, "v,oNt", pa10, 0},
+{ "spop2",     0x10000400, 0xfc000600, "v,1Nb", pa10, 0},
+{ "spop3",     0x10000600, 0xfc000600, "v,0Nx,b", pa10, 0},
+{ "copr",      0x30000000, 0xfc000000, "u,2N", pa10, 0},
+{ "cldw",      0x24000000, 0xfc001e00, "ucXx(s,b),t", pa10, FLAG_STRICT},
+{ "cldw",      0x24000000, 0xfc001e00, "ucXx(b),t", pa10, FLAG_STRICT},
+{ "cldw",      0x24000000, 0xfc001200, "ucxccx(s,b),t", pa11, FLAG_STRICT},
+{ "cldw",      0x24000000, 0xfc001200, "ucxccx(b),t", pa11, FLAG_STRICT},
+{ "cldw",      0x24001000, 0xfc001e00, "ucM5(s,b),t", pa10, FLAG_STRICT},
+{ "cldw",      0x24001000, 0xfc001e00, "ucM5(b),t", pa10, FLAG_STRICT},
+{ "cldw",      0x24001000, 0xfc001200, "ucmcc5(s,b),t", pa11, FLAG_STRICT},
+{ "cldw",      0x24001000, 0xfc001200, "ucmcc5(b),t", pa11, FLAG_STRICT},
+{ "cldw",      0x24001000, 0xfc001200, "ucocc@(s,b),t", pa20, FLAG_STRICT},
+{ "cldw",      0x24001000, 0xfc001200, "ucocc@(b),t", pa20, FLAG_STRICT},
+{ "cldd",      0x2c000000, 0xfc001e00, "ucXx(s,b),t", pa10, FLAG_STRICT},
+{ "cldd",      0x2c000000, 0xfc001e00, "ucXx(b),t", pa10, FLAG_STRICT},
+{ "cldd",      0x2c000000, 0xfc001200, "ucxccx(s,b),t", pa11, FLAG_STRICT},
+{ "cldd",      0x2c000000, 0xfc001200, "ucxccx(b),t", pa11, FLAG_STRICT},
+{ "cldd",      0x2c001000, 0xfc001e00, "ucM5(s,b),t", pa10, FLAG_STRICT},
+{ "cldd",      0x2c001000, 0xfc001e00, "ucM5(b),t", pa10, FLAG_STRICT},
+{ "cldd",      0x2c001000, 0xfc001200, "ucmcc5(s,b),t", pa11, FLAG_STRICT},
+{ "cldd",      0x2c001000, 0xfc001200, "ucmcc5(b),t", pa11, FLAG_STRICT},
+{ "cldd",      0x2c001000, 0xfc001200, "ucocc@(s,b),t", pa20, FLAG_STRICT},
+{ "cldd",      0x2c001000, 0xfc001200, "ucocc@(b),t", pa20, FLAG_STRICT},
+{ "cstw",      0x24000200, 0xfc001e00, "ucXt,x(s,b)", pa10, FLAG_STRICT},
+{ "cstw",      0x24000200, 0xfc001e00, "ucXt,x(b)", pa10, FLAG_STRICT},
+{ "cstw",      0x24000200, 0xfc001200, "ucxcCt,x(s,b)", pa11, FLAG_STRICT},
+{ "cstw",      0x24000200, 0xfc001200, "ucxcCt,x(b)", pa11, FLAG_STRICT},
+{ "cstw",      0x24001200, 0xfc001e00, "ucMt,5(s,b)", pa10, FLAG_STRICT},
+{ "cstw",      0x24001200, 0xfc001e00, "ucMt,5(b)", pa10, FLAG_STRICT},
+{ "cstw",      0x24001200, 0xfc001200, "ucmcCt,5(s,b)", pa11, FLAG_STRICT},
+{ "cstw",      0x24001200, 0xfc001200, "ucmcCt,5(b)", pa11, FLAG_STRICT},
+{ "cstw",      0x24001200, 0xfc001200, "ucocCt,@(s,b)", pa20, FLAG_STRICT},
+{ "cstw",      0x24001200, 0xfc001200, "ucocCt,@(b)", pa20, FLAG_STRICT},
+{ "cstd",      0x2c000200, 0xfc001e00, "ucXt,x(s,b)", pa10, FLAG_STRICT},
+{ "cstd",      0x2c000200, 0xfc001e00, "ucXt,x(b)", pa10, FLAG_STRICT},
+{ "cstd",      0x2c000200, 0xfc001200, "ucxcCt,x(s,b)", pa11, FLAG_STRICT},
+{ "cstd",      0x2c000200, 0xfc001200, "ucxcCt,x(b)", pa11, FLAG_STRICT},
+{ "cstd",      0x2c001200, 0xfc001e00, "ucMt,5(s,b)", pa10, FLAG_STRICT},
+{ "cstd",      0x2c001200, 0xfc001e00, "ucMt,5(b)", pa10, FLAG_STRICT},
+{ "cstd",      0x2c001200, 0xfc001200, "ucmcCt,5(s,b)", pa11, FLAG_STRICT},
+{ "cstd",      0x2c001200, 0xfc001200, "ucmcCt,5(b)", pa11, FLAG_STRICT},
+{ "cstd",      0x2c001200, 0xfc001200, "ucocCt,@(s,b)", pa20, FLAG_STRICT},
+{ "cstd",      0x2c001200, 0xfc001200, "ucocCt,@(b)", pa20, FLAG_STRICT},
+{ "cldwx",     0x24000000, 0xfc001e00, "ucXx(s,b),t", pa10, FLAG_STRICT},
+{ "cldwx",     0x24000000, 0xfc001e00, "ucXx(b),t", pa10, FLAG_STRICT},
+{ "cldwx",     0x24000000, 0xfc001200, "ucxccx(s,b),t", pa11, FLAG_STRICT},
+{ "cldwx",     0x24000000, 0xfc001200, "ucxccx(b),t", pa11, FLAG_STRICT},
+{ "clddx",     0x2c000000, 0xfc001e00, "ucXx(s,b),t", pa10, FLAG_STRICT},
+{ "clddx",     0x2c000000, 0xfc001e00, "ucXx(b),t", pa10, FLAG_STRICT},
+{ "clddx",     0x2c000000, 0xfc001200, "ucxccx(s,b),t", pa11, FLAG_STRICT},
+{ "clddx",     0x2c000000, 0xfc001200, "ucxccx(b),t", pa11, FLAG_STRICT},
+{ "cstwx",     0x24000200, 0xfc001e00, "ucXt,x(s,b)", pa10, FLAG_STRICT},
+{ "cstwx",     0x24000200, 0xfc001e00, "ucXt,x(b)", pa10, FLAG_STRICT},
+{ "cstwx",     0x24000200, 0xfc001200, "ucxcCt,x(s,b)", pa11, FLAG_STRICT},
+{ "cstwx",     0x24000200, 0xfc001200, "ucxcCt,x(b)", pa11, FLAG_STRICT},
+{ "cstdx",     0x2c000200, 0xfc001e00, "ucXt,x(s,b)", pa10, FLAG_STRICT},
+{ "cstdx",     0x2c000200, 0xfc001e00, "ucXt,x(b)", pa10, FLAG_STRICT},
+{ "cstdx",     0x2c001200, 0xfc001200, "ucmcCt,5(s,b)", pa11, FLAG_STRICT},
+{ "cstdx",     0x2c001200, 0xfc001200, "ucmcCt,5(b)", pa11, FLAG_STRICT},
+{ "cldws",     0x24001000, 0xfc001e00, "ucM5(s,b),t", pa10, FLAG_STRICT},
+{ "cldws",     0x24001000, 0xfc001e00, "ucM5(b),t", pa10, FLAG_STRICT},
+{ "cldws",     0x24001000, 0xfc001200, "ucmcc5(s,b),t", pa11, FLAG_STRICT},
+{ "cldws",     0x24001000, 0xfc001200, "ucmcc5(b),t", pa11, FLAG_STRICT},
+{ "cldds",     0x2c001000, 0xfc001e00, "ucM5(s,b),t", pa10, FLAG_STRICT},
+{ "cldds",     0x2c001000, 0xfc001e00, "ucM5(b),t", pa10, FLAG_STRICT},
+{ "cldds",     0x2c001000, 0xfc001200, "ucmcc5(s,b),t", pa11, FLAG_STRICT},
+{ "cldds",     0x2c001000, 0xfc001200, "ucmcc5(b),t", pa11, FLAG_STRICT},
+{ "cstws",     0x24001200, 0xfc001e00, "ucMt,5(s,b)", pa10, FLAG_STRICT},
+{ "cstws",     0x24001200, 0xfc001e00, "ucMt,5(b)", pa10, FLAG_STRICT},
+{ "cstws",     0x24001200, 0xfc001200, "ucmcCt,5(s,b)", pa11, FLAG_STRICT},
+{ "cstws",     0x24001200, 0xfc001200, "ucmcCt,5(b)", pa11, FLAG_STRICT},
+{ "cstds",     0x2c001200, 0xfc001e00, "ucMt,5(s,b)", pa10, FLAG_STRICT},
+{ "cstds",     0x2c001200, 0xfc001e00, "ucMt,5(b)", pa10, FLAG_STRICT},
+{ "cstds",     0x2c001200, 0xfc001200, "ucmcCt,5(s,b)", pa11, FLAG_STRICT},
+{ "cstds",     0x2c001200, 0xfc001200, "ucmcCt,5(b)", pa11, FLAG_STRICT},
 
 /* More pseudo instructions which must follow the main table.  */
 { "call",      0xe800f000, 0xfc1ffffd, "n(b)", pa20, FLAG_STRICT},




reply via email to

[Prev in Thread] Current Thread [Next in Thread]