[PATCH RFA] Add MIPS-3D support.

cgd@broadcom.com cgd@broadcom.com
Fri Mar 15 11:14:00 GMT 2002


MIPS recently released their specification of the MIPS-3D Application
Specific Extension to the MIPS64 Architecture.  (See
www.mips.com/publications for more information.)

The following patch adds support for assembly and dissasembly of the
new MIPS-3D opcodes.

It adds two new flags to the assembler -mips3d and -no-mips3d, which
will enable and disable assembly of MIPS-3D instructions.  MIPS-3D
instructions will also be assembled if an -march=<CPU> flag is given
indicating a CPU which supports MIPS-3D, or if the assembler is
compiled in a way that defaults to targetting such a CPU.

It also adds ".set mips3d" and ".set nomips3d" directives to control
assembly of the instructions from within the file.

For disassembly, I want to push the notion that the standard MIPS32
and MIPS64 ISAs will support disassembly of all applicable MIPS ASEs.
Therefore, disassembling for MIPS64 by default will recognize and
disassemble MIPS-3D ASE instructions.

It includes documentation and a test case.


One thing to note: it is possible, and some would say reasonable, to
treat the following two bits of assembly code the same:

	bf1any2f label
	bc1any2f $fcc0, label

(i.e., assume omitted condition code means 0, and if condition code 0
omit it from disassembly).

In my opinion, that is undesirable.  These instructions take an
explicit condition code operand, and, in my opinion, omitting it in
assembly code or in disassembly is confusing.

Therefore, assembly disallows the first form (requires $fccN to be
specified) and disassembly always prints $fccN.

If people really think the other way is better, it's trivial for me to
add support for that.  (You'll note that i already have separate
entries in the test case to test for cc == 0.  I went both ways on
this, before deciding that omitting the fcc info was too confusing.)
But, I don't think it's The Right Thing(TM).



chris
===================================================================
[ gas/ChangeLog ]
2002-03-15  Chris G. Demetriou  <cgd@broadcom.com>

	* config/tc-mips.c (mips_set_options): New "ase_mips3d" member.
	(mips_opts): Initialize "ase_mips3d" member.
	(file_ase_mips3d): New variable.
	(CPU_HAS_MIPS3D): New macro.
	(md_begin): Initialize mips_opts.ase_mips3d and file_ase_mips3d
	based on command line options and configuration defaults.
	(macro_build, mips_ip): Accept MIPS-3D instructions if
	mips_opts.ase_mips3d is set.
	(OPTION_MIPS3D, OPTION_NO_MIPS3D, md_longopts, md_parse_option):
	Add support for "-mips3d" and "-no-mips3d" options.
	(OPTION_ELF_BASE): Move to accomodate new options.
	(s_mipsset): Support ".set mips3d" and ".set nomips3d".
	(mips_elf_final_processing): Add a comment indicating that a
	MIPS-3D ASE ELF header flag should be set, when one exists.
	* doc/as.texinfo: Document -mips3d and -no-mips3d options.
	* doc/c-mips.texi: Likewise, and document ".set mips3d" and ".set
	nomips3d" directives.

[ gas/testsuite/ChangeLog ]
2002-03-15  Chris G. Demetriou  <cgd@broadcom.com>

	* gas/mips/mips64-mips3d.s: New file.
	* gas/mips/mips64-mips3d.d: Likewise.
	* gas/mips/mips.exp: Run new "mips64-mips3d" test.

[ include/opcode/ChangeLog ]
2002-03-15  Chris G. Demetriou  <cgd@broadcom.com>

	* mips.h (INSN_MIPS3D): New definition used to mark MIPS-3D
	instructions.
	(OPCODE_IS_MEMBER): Adjust comments to indicate that ASE bit masks
	may be passed along with the ISA bitmask.

[ opcodes/ChangeLog ]
2002-03-15  Chris G. Demetriou  <cgd@broadcom.com>

	* mips-dis.c (mips_isa_type): Add MIPS3D instructions to the ISA
	bit masks for bfd_mach_mips_sb1 and bfd_mach_mipsisa64.  Add
	comments for bfd_mach_mipsisa32 and bfd_mach_mipsisa64 that
	indicate that they should dissassemble all applicable
	MIPS-specified ASEs.
	* mips-opc.c: Add support for MIPS-3D instructions.
	(M3D): New definition.

Index: gas/config/tc-mips.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-mips.c,v
retrieving revision 1.112
diff -u -p -r1.112 tc-mips.c
--- tc-mips.c	2002/02/26 22:18:51	1.112
+++ tc-mips.c	2002/03/15 19:00:07
@@ -137,6 +137,10 @@ struct mips_set_options
      if it has not been initialized.  Changed by `.set mipsN', and the
      -mipsN command line option, and the default CPU.  */
   int isa;
+  /* Enabled Application Specific Extensions (ASEs).  These are set to -1
+     if they have not been initialized.  Changed by `.set <asename>', by
+     command line options, and based on the default architecture.  */
+  int ase_mips3d;
   /* Whether we are assembling for the mips16 processor.  0 if we are
      not, 1 if we are, and -1 if the value has not been initialized.
      Changed by `.set mips16' and `.set nomips16', and the -mips16 and
@@ -185,7 +189,7 @@ static int file_mips_fp32 = -1;
 
 static struct mips_set_options mips_opts =
 {
-  ISA_UNKNOWN, -1, 0, 0, 0, 0, 0, 0, 0, 0, NO_ABI
+  ISA_UNKNOWN, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, NO_ABI
 };
 
 /* These variables are filled in with the masks of registers used.
@@ -197,6 +201,10 @@ unsigned long mips_cprmask[4];
 /* MIPS ISA we are using for this output file.  */
 static int file_mips_isa = ISA_UNKNOWN;
 
+/* True if -mips3d was passed or implied by arguments passed on the
+   command line (e.g., by -march).  */
+static int file_ase_mips3d;
+
 /* The argument of the -mcpu= flag.  Historical for code generation.  */
 static int mips_cpu = CPU_UNKNOWN;
 
@@ -263,6 +271,10 @@ static int mips_32bitmode = 0;
 
 #define HAVE_64BIT_ADDRESSES (! HAVE_32BIT_ADDRESSES)
 
+/* Return true if the given CPU supports the MIPS3D ASE.  */
+#define CPU_HAS_MIPS3D(cpu)	((cpu) == CPU_SB1      \
+				 )
+
 /* Whether the processor uses hardware interlocks to protect
    reads from the HI and LO registers, and thus does not
    require nops to be inserted.  */
@@ -1223,6 +1235,11 @@ md_begin ()
       && ISA_HAS_64BIT_REGS (mips_isa_from_cpu))
     mips_32bitmode = 1;
 
+  /* If the selected architecture includes support for ASEs, enable
+     generation of code for them.  */
+  if (mips_opts.ase_mips3d == -1 && CPU_HAS_MIPS3D (mips_arch))
+    mips_opts.ase_mips3d = 1;
+
   if (! bfd_set_arch_mach (stdoutput, bfd_arch_mips, mips_arch))
     as_warn (_("Could not set architecture and machine"));
 
@@ -1233,6 +1250,7 @@ md_begin ()
 
   file_mips_isa = mips_opts.isa;
   file_mips_abi = mips_opts.abi;
+  file_ase_mips3d = mips_opts.ase_mips3d;
   mips_opts.gp32 = file_mips_gp32;
   mips_opts.fp32 = file_mips_fp32;
 
@@ -2885,7 +2903,10 @@ macro_build (place, counter, ep, name, f
     {
       if (strcmp (fmt, insn.insn_mo->args) == 0
 	  && insn.insn_mo->pinfo != INSN_MACRO
-	  && OPCODE_IS_MEMBER (insn.insn_mo, mips_opts.isa, mips_arch)
+	  && OPCODE_IS_MEMBER (insn.insn_mo,
+			       (mips_opts.isa
+	      		        | (mips_opts.ase_mips3d ? INSN_MIPS3D : 0)),
+			       mips_arch)
 	  && (mips_arch != CPU_R4650 || (insn.insn_mo->pinfo & FP_D) == 0))
 	break;
 
@@ -7670,7 +7691,10 @@ mips_ip (str, ip)
 
       assert (strcmp (insn->name, str) == 0);
 
-      if (OPCODE_IS_MEMBER (insn, mips_opts.isa, mips_arch))
+      if (OPCODE_IS_MEMBER (insn,
+			    (mips_opts.isa
+	      		     | (mips_opts.ase_mips3d ? INSN_MIPS3D : 0)),
+			    mips_arch))
 	ok = true;
       else
 	ok = false;
@@ -9738,8 +9762,12 @@ struct option md_longopts[] =
   {"no-m3900", no_argument, NULL, OPTION_NO_M3900},
 #define OPTION_GP64 (OPTION_MD_BASE + 32)
   {"mgp64", no_argument, NULL, OPTION_GP64},
+#define OPTION_MIPS3D (OPTION_MD_BASE + 33)
+  {"mips3d", no_argument, NULL, OPTION_MIPS3D},
+#define OPTION_NO_MIPS3D (OPTION_MD_BASE + 34)
+  {"no-mips3d", no_argument, NULL, OPTION_NO_MIPS3D},
 #ifdef OBJ_ELF
-#define OPTION_ELF_BASE    (OPTION_MD_BASE + 33)
+#define OPTION_ELF_BASE    (OPTION_MD_BASE + 35)
 #define OPTION_CALL_SHARED (OPTION_ELF_BASE + 0)
   {"KPIC",        no_argument, NULL, OPTION_CALL_SHARED},
   {"call_shared", no_argument, NULL, OPTION_CALL_SHARED},
@@ -9954,6 +9982,14 @@ md_parse_option (c, arg)
       mips_no_prev_insn (false);
       break;
 
+    case OPTION_MIPS3D:
+      mips_opts.ase_mips3d = 1;
+      break;
+
+    case OPTION_NO_MIPS3D:
+      mips_opts.ase_mips3d = 0;
+      break;
+
     case OPTION_MEMBEDDED_PIC:
       mips_pic = EMBEDDED_PIC;
       if (USE_GLOBAL_POINTER_OPT && g_switch_seen)
@@ -11275,6 +11311,10 @@ s_mipsset (x)
   else if (strcmp (name, "nomips16") == 0
 	   || strcmp (name, "noMIPS-16") == 0)
     mips_opts.mips16 = 0;
+  else if (strcmp (name, "mips3d") == 0)
+    mips_opts.ase_mips3d = 1;
+  else if (strcmp (name, "nomips3d") == 0)
+    mips_opts.ase_mips3d = 0;
   else if (strncmp (name, "mips", 4) == 0)
     {
       int isa;
@@ -12762,6 +12802,12 @@ mips_elf_final_processing ()
     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_NOREORDER;
   if (mips_pic != NO_PIC)
     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_PIC;
+
+  /* Set MIPS ELF flags for ASEs. */
+#if 0 /* XXX FIXME */
+  if (file_ase_mips3d)
+    elf_elfheader (stdoutput)->e_flags |= ???;
+#endif
 
   /* Set the MIPS ELF ABI flags.  */
   if (file_mips_abi == NO_ABI)
Index: gas/doc/as.texinfo
===================================================================
RCS file: /cvs/src/src/gas/doc/as.texinfo,v
retrieving revision 1.61
diff -u -p -r1.61 as.texinfo
--- as.texinfo	2002/03/08 04:21:51	1.61
+++ as.texinfo	2002/03/15 19:00:08
@@ -374,6 +374,7 @@ gcc(1), ld(1), and the Info entries for 
    [@b{-mips1}] [@b{-mips2}] [@b{-mips3}] [@b{-mips4}] [@b{-mips5}]
    [@b{-mips32}] [@b{-mips64}]
    [@b{-m4650}] [@b{-no-m4650}]
+   [@b{-mips3d}] [@b{-no-mips3d}]
    [@b{--trap}] [@b{--break}] [@b{-n}]
    [@b{--emulation}=@var{name} ]
 @end ifset
@@ -880,6 +881,12 @@ Generate code for the MIPS @sc{r4650} ch
 the @samp{mad} and @samp{madu} instruction, and to not schedule @samp{nop}
 instructions around accesses to the @samp{HI} and @samp{LO} registers.
 @samp{-no-m4650} turns off this option.
+
+@item -mips3d
+@itemx -no-mips3d
+Generate code for the MIPS-3D Application Specific Extension.
+This tells the assembler to accept MIPS-3D instructions.
+@samp{-no-mips3d} turns off this option.
 
 @item -mcpu=@var{CPU}
 Generate code for a particular MIPS cpu.  It is exactly equivalent to
Index: gas/doc/c-mips.texi
===================================================================
RCS file: /cvs/src/src/gas/doc/c-mips.texi,v
retrieving revision 1.17
diff -u -p -r1.17 c-mips.texi
--- c-mips.texi	2001/08/02 10:15:24	1.17
+++ c-mips.texi	2002/03/15 19:00:08
@@ -97,6 +97,12 @@ Generate code for the MIPS 16 processor.
 @samp{.set mips16} at the start of the assembly file.  @samp{-no-mips16}
 turns off this option.
 
+@item -mips3d
+@itemx -no-mips3d
+Generate code for the MIPS-3D Application Specific Extension.
+This tells the assembler to accept MIPS-3D instructions.
+@samp{-no-mips3d} turns off this option.
+
 @item -mfix7000
 @itemx -no-mfix7000
 Cause nops to be inserted if the read of the destination register
@@ -321,5 +327,18 @@ stack and restores the settings.
 These directives can be useful inside an macro which must change an
 option such as the ISA level or instruction reordering but does not want
 to change the state of the code which invoked the macro.
+
+Traditional @sc{mips} assemblers do not support these directives.
+
+@node MIPS ASE instruction generation overrides
+@section Directives to control generation of MIPS ASE instructions
+
+@cindex MIPS MIPS-3D instruction generation override
+@kindex @code{.set mips3d}
+@kindex @code{.set nomips3d}
+The directive @code{.set mips3d} makes the assembler accept instructions
+from the MIPS-3D Application Specific Extension from that point on
+in the assembly.  The @code{.set nomips3d} directive prevents MIPS-3D
+instructions from being accepted.
 
 Traditional @sc{mips} assemblers do not support these directives.
Index: gas/testsuite/gas/mips/mips.exp
===================================================================
RCS file: /cvs/src/src/gas/testsuite/gas/mips/mips.exp,v
retrieving revision 1.29
diff -u -p -r1.29 mips.exp
--- mips.exp	2002/02/26 22:17:56	1.29
+++ mips.exp	2002/03/15 19:00:09
@@ -142,6 +142,7 @@ if { [istarget mips*-*-*] } then {
     run_dump_test "sync"
     run_dump_test "mips32"
     run_dump_test "mips64"
+    run_dump_test "mips64-mips3d"
     run_dump_test "sb1-ext-ps"
 
     # It will always fail until someone fixes it.
Index: gas/testsuite/gas/mips/mips64-mips3d.d
===================================================================
RCS file: mips64-mips3d.d
diff -N mips64-mips3d.d
--- /dev/null	Tue May  5 13:32:27 1998
+++ mips64-mips3d.d	Fri Mar 15 11:00:09 2002
@@ -0,0 +1,138 @@
+#objdump: -dr --prefix-addresses --show-raw-insn -mmips:isa64
+#name: MIPS MIPS64 MIPS-3D ASE instructions
+#as: -mips64 -mips3d
+
+# Check MIPS64 MIPS-3D ASE instruction assembly and disassembly
+
+.*: +file format .*mips.*
+
+Disassembly of section .text:
+0+0000 <[^>]*> 46d34118 	addr\.ps	\$f4,\$f8,\$f19
+0+0004 <[^>]*> 4520fffe 	bc1any2f	\$fcc0,0+0000 <text_label>
+0+0008 <[^>]*> 00000000 	nop
+0+000c <[^>]*> 4528fffc 	bc1any2f	\$fcc2,0+0000 <text_label>
+0+0010 <[^>]*> 00000000 	nop
+0+0014 <[^>]*> 4521fffa 	bc1any2t	\$fcc0,0+0000 <text_label>
+0+0018 <[^>]*> 00000000 	nop
+0+001c <[^>]*> 4531fff8 	bc1any2t	\$fcc4,0+0000 <text_label>
+0+0020 <[^>]*> 00000000 	nop
+0+0024 <[^>]*> 4540fff6 	bc1any4f	\$fcc0,0+0000 <text_label>
+0+0028 <[^>]*> 00000000 	nop
+0+002c <[^>]*> 4550fff4 	bc1any4f	\$fcc4,0+0000 <text_label>
+0+0030 <[^>]*> 00000000 	nop
+0+0034 <[^>]*> 4541fff2 	bc1any4t	\$fcc0,0+0000 <text_label>
+0+0038 <[^>]*> 00000000 	nop
+0+003c <[^>]*> 4551fff0 	bc1any4t	\$fcc4,0+0000 <text_label>
+0+0040 <[^>]*> 00000000 	nop
+0+0044 <[^>]*> 46334070 	cabs\.f\.d	\$fcc0,\$f8,\$f19
+0+0048 <[^>]*> 46334270 	cabs\.f\.d	\$fcc2,\$f8,\$f19
+0+004c <[^>]*> 46134070 	cabs\.f\.s	\$fcc0,\$f8,\$f19
+0+0050 <[^>]*> 46134270 	cabs\.f\.s	\$fcc2,\$f8,\$f19
+0+0054 <[^>]*> 46d34070 	cabs\.f\.ps	\$fcc0,\$f8,\$f19
+0+0058 <[^>]*> 46d34270 	cabs\.f\.ps	\$fcc2,\$f8,\$f19
+0+005c <[^>]*> 46334071 	cabs\.un\.d	\$fcc0,\$f8,\$f19
+0+0060 <[^>]*> 46334271 	cabs\.un\.d	\$fcc2,\$f8,\$f19
+0+0064 <[^>]*> 46134071 	cabs\.un\.s	\$fcc0,\$f8,\$f19
+0+0068 <[^>]*> 46134271 	cabs\.un\.s	\$fcc2,\$f8,\$f19
+0+006c <[^>]*> 46d34071 	cabs\.un\.ps	\$fcc0,\$f8,\$f19
+0+0070 <[^>]*> 46d34271 	cabs\.un\.ps	\$fcc2,\$f8,\$f19
+0+0074 <[^>]*> 46334072 	cabs\.eq\.d	\$fcc0,\$f8,\$f19
+0+0078 <[^>]*> 46334272 	cabs\.eq\.d	\$fcc2,\$f8,\$f19
+0+007c <[^>]*> 46134072 	cabs\.eq\.s	\$fcc0,\$f8,\$f19
+0+0080 <[^>]*> 46134272 	cabs\.eq\.s	\$fcc2,\$f8,\$f19
+0+0084 <[^>]*> 46d34072 	cabs\.eq\.ps	\$fcc0,\$f8,\$f19
+0+0088 <[^>]*> 46d34272 	cabs\.eq\.ps	\$fcc2,\$f8,\$f19
+0+008c <[^>]*> 46334073 	cabs\.ueq\.d	\$fcc0,\$f8,\$f19
+0+0090 <[^>]*> 46334273 	cabs\.ueq\.d	\$fcc2,\$f8,\$f19
+0+0094 <[^>]*> 46134073 	cabs\.ueq\.s	\$fcc0,\$f8,\$f19
+0+0098 <[^>]*> 46134273 	cabs\.ueq\.s	\$fcc2,\$f8,\$f19
+0+009c <[^>]*> 46d34073 	cabs\.ueq\.ps	\$fcc0,\$f8,\$f19
+0+00a0 <[^>]*> 46d34273 	cabs\.ueq\.ps	\$fcc2,\$f8,\$f19
+0+00a4 <[^>]*> 46334074 	cabs\.olt\.d	\$fcc0,\$f8,\$f19
+0+00a8 <[^>]*> 46334274 	cabs\.olt\.d	\$fcc2,\$f8,\$f19
+0+00ac <[^>]*> 46134074 	cabs\.olt\.s	\$fcc0,\$f8,\$f19
+0+00b0 <[^>]*> 46134274 	cabs\.olt\.s	\$fcc2,\$f8,\$f19
+0+00b4 <[^>]*> 46d34074 	cabs\.olt\.ps	\$fcc0,\$f8,\$f19
+0+00b8 <[^>]*> 46d34274 	cabs\.olt\.ps	\$fcc2,\$f8,\$f19
+0+00bc <[^>]*> 46334075 	cabs\.ult\.d	\$fcc0,\$f8,\$f19
+0+00c0 <[^>]*> 46334275 	cabs\.ult\.d	\$fcc2,\$f8,\$f19
+0+00c4 <[^>]*> 46134075 	cabs\.ult\.s	\$fcc0,\$f8,\$f19
+0+00c8 <[^>]*> 46134275 	cabs\.ult\.s	\$fcc2,\$f8,\$f19
+0+00cc <[^>]*> 46d34075 	cabs\.ult\.ps	\$fcc0,\$f8,\$f19
+0+00d0 <[^>]*> 46d34275 	cabs\.ult\.ps	\$fcc2,\$f8,\$f19
+0+00d4 <[^>]*> 46334076 	cabs\.ole\.d	\$fcc0,\$f8,\$f19
+0+00d8 <[^>]*> 46334276 	cabs\.ole\.d	\$fcc2,\$f8,\$f19
+0+00dc <[^>]*> 46134076 	cabs\.ole\.s	\$fcc0,\$f8,\$f19
+0+00e0 <[^>]*> 46134276 	cabs\.ole\.s	\$fcc2,\$f8,\$f19
+0+00e4 <[^>]*> 46d34076 	cabs\.ole\.ps	\$fcc0,\$f8,\$f19
+0+00e8 <[^>]*> 46d34276 	cabs\.ole\.ps	\$fcc2,\$f8,\$f19
+0+00ec <[^>]*> 46334077 	cabs\.ule\.d	\$fcc0,\$f8,\$f19
+0+00f0 <[^>]*> 46334277 	cabs\.ule\.d	\$fcc2,\$f8,\$f19
+0+00f4 <[^>]*> 46134077 	cabs\.ule\.s	\$fcc0,\$f8,\$f19
+0+00f8 <[^>]*> 46134277 	cabs\.ule\.s	\$fcc2,\$f8,\$f19
+0+00fc <[^>]*> 46d34077 	cabs\.ule\.ps	\$fcc0,\$f8,\$f19
+0+0100 <[^>]*> 46d34277 	cabs\.ule\.ps	\$fcc2,\$f8,\$f19
+0+0104 <[^>]*> 46334078 	cabs\.sf\.d	\$fcc0,\$f8,\$f19
+0+0108 <[^>]*> 46334278 	cabs\.sf\.d	\$fcc2,\$f8,\$f19
+0+010c <[^>]*> 46134078 	cabs\.sf\.s	\$fcc0,\$f8,\$f19
+0+0110 <[^>]*> 46134278 	cabs\.sf\.s	\$fcc2,\$f8,\$f19
+0+0114 <[^>]*> 46d34078 	cabs\.sf\.ps	\$fcc0,\$f8,\$f19
+0+0118 <[^>]*> 46d34278 	cabs\.sf\.ps	\$fcc2,\$f8,\$f19
+0+011c <[^>]*> 46334079 	cabs\.ngle\.d	\$fcc0,\$f8,\$f19
+0+0120 <[^>]*> 46334279 	cabs\.ngle\.d	\$fcc2,\$f8,\$f19
+0+0124 <[^>]*> 46134079 	cabs\.ngle\.s	\$fcc0,\$f8,\$f19
+0+0128 <[^>]*> 46134279 	cabs\.ngle\.s	\$fcc2,\$f8,\$f19
+0+012c <[^>]*> 46d34079 	cabs\.ngle\.ps	\$fcc0,\$f8,\$f19
+0+0130 <[^>]*> 46d34279 	cabs\.ngle\.ps	\$fcc2,\$f8,\$f19
+0+0134 <[^>]*> 4633407a 	cabs\.seq\.d	\$fcc0,\$f8,\$f19
+0+0138 <[^>]*> 4633427a 	cabs\.seq\.d	\$fcc2,\$f8,\$f19
+0+013c <[^>]*> 4613407a 	cabs\.seq\.s	\$fcc0,\$f8,\$f19
+0+0140 <[^>]*> 4613427a 	cabs\.seq\.s	\$fcc2,\$f8,\$f19
+0+0144 <[^>]*> 46d3407a 	cabs\.seq\.ps	\$fcc0,\$f8,\$f19
+0+0148 <[^>]*> 46d3427a 	cabs\.seq\.ps	\$fcc2,\$f8,\$f19
+0+014c <[^>]*> 4633407b 	cabs\.ngl\.d	\$fcc0,\$f8,\$f19
+0+0150 <[^>]*> 4633427b 	cabs\.ngl\.d	\$fcc2,\$f8,\$f19
+0+0154 <[^>]*> 4613407b 	cabs\.ngl\.s	\$fcc0,\$f8,\$f19
+0+0158 <[^>]*> 4613427b 	cabs\.ngl\.s	\$fcc2,\$f8,\$f19
+0+015c <[^>]*> 46d3407b 	cabs\.ngl\.ps	\$fcc0,\$f8,\$f19
+0+0160 <[^>]*> 46d3427b 	cabs\.ngl\.ps	\$fcc2,\$f8,\$f19
+0+0164 <[^>]*> 4633407c 	cabs\.lt\.d	\$fcc0,\$f8,\$f19
+0+0168 <[^>]*> 4633427c 	cabs\.lt\.d	\$fcc2,\$f8,\$f19
+0+016c <[^>]*> 4613407c 	cabs\.lt\.s	\$fcc0,\$f8,\$f19
+0+0170 <[^>]*> 4613427c 	cabs\.lt\.s	\$fcc2,\$f8,\$f19
+0+0174 <[^>]*> 46d3407c 	cabs\.lt\.ps	\$fcc0,\$f8,\$f19
+0+0178 <[^>]*> 46d3427c 	cabs\.lt\.ps	\$fcc2,\$f8,\$f19
+0+017c <[^>]*> 4633407d 	cabs\.nge\.d	\$fcc0,\$f8,\$f19
+0+0180 <[^>]*> 4633427d 	cabs\.nge\.d	\$fcc2,\$f8,\$f19
+0+0184 <[^>]*> 4613407d 	cabs\.nge\.s	\$fcc0,\$f8,\$f19
+0+0188 <[^>]*> 4613427d 	cabs\.nge\.s	\$fcc2,\$f8,\$f19
+0+018c <[^>]*> 46d3407d 	cabs\.nge\.ps	\$fcc0,\$f8,\$f19
+0+0190 <[^>]*> 46d3427d 	cabs\.nge\.ps	\$fcc2,\$f8,\$f19
+0+0194 <[^>]*> 4633407e 	cabs\.le\.d	\$fcc0,\$f8,\$f19
+0+0198 <[^>]*> 4633427e 	cabs\.le\.d	\$fcc2,\$f8,\$f19
+0+019c <[^>]*> 4613407e 	cabs\.le\.s	\$fcc0,\$f8,\$f19
+0+01a0 <[^>]*> 4613427e 	cabs\.le\.s	\$fcc2,\$f8,\$f19
+0+01a4 <[^>]*> 46d3407e 	cabs\.le\.ps	\$fcc0,\$f8,\$f19
+0+01a8 <[^>]*> 46d3427e 	cabs\.le\.ps	\$fcc2,\$f8,\$f19
+0+01ac <[^>]*> 4633407f 	cabs\.ngt\.d	\$fcc0,\$f8,\$f19
+0+01b0 <[^>]*> 4633427f 	cabs\.ngt\.d	\$fcc2,\$f8,\$f19
+0+01b4 <[^>]*> 4613407f 	cabs\.ngt\.s	\$fcc0,\$f8,\$f19
+0+01b8 <[^>]*> 4613427f 	cabs\.ngt\.s	\$fcc2,\$f8,\$f19
+0+01bc <[^>]*> 46d3407f 	cabs\.ngt\.ps	\$fcc0,\$f8,\$f19
+0+01c0 <[^>]*> 46d3427f 	cabs\.ngt\.ps	\$fcc2,\$f8,\$f19
+0+01c4 <[^>]*> 46c09924 	cvt\.pw\.ps	\$f4,\$f19
+0+01c8 <[^>]*> 46809926 	cvt\.ps\.pw	\$f4,\$f19
+0+01cc <[^>]*> 46d3411a 	mulr\.ps	\$f4,\$f8,\$f19
+0+01d0 <[^>]*> 46209a1d 	recip1\.d	\$f8,\$f19
+0+01d4 <[^>]*> 46009a1d 	recip1\.s	\$f8,\$f19
+0+01d8 <[^>]*> 46c09a1d 	recip1\.ps	\$f8,\$f19
+0+01dc <[^>]*> 4633411c 	recip2\.d	\$f4,\$f8,\$f19
+0+01e0 <[^>]*> 4613411c 	recip2\.s	\$f4,\$f8,\$f19
+0+01e4 <[^>]*> 46d3411c 	recip2\.ps	\$f4,\$f8,\$f19
+0+01e8 <[^>]*> 46209a1e 	rsqrt1\.d	\$f8,\$f19
+0+01ec <[^>]*> 46009a1e 	rsqrt1\.s	\$f8,\$f19
+0+01f0 <[^>]*> 46c09a1e 	rsqrt1\.ps	\$f8,\$f19
+0+01f4 <[^>]*> 4633411f 	rsqrt2\.d	\$f4,\$f8,\$f19
+0+01f8 <[^>]*> 4613411f 	rsqrt2\.s	\$f4,\$f8,\$f19
+0+01fc <[^>]*> 46d3411f 	rsqrt2\.ps	\$f4,\$f8,\$f19
+	\.\.\.
Index: gas/testsuite/gas/mips/mips64-mips3d.s
===================================================================
RCS file: mips64-mips3d.s
diff -N mips64-mips3d.s
--- /dev/null	Tue May  5 13:32:27 1998
+++ mips64-mips3d.s	Fri Mar 15 11:00:09 2002
@@ -0,0 +1,151 @@
+# source file to test assembly of mips64 MIPS-3D ASE instructions
+
+	.set noreorder
+	.set noat
+
+	.globl text_label .text
+text_label:
+
+	addr.ps		$f4, $f8, $f19
+
+	bc1any2f	$fcc0, text_label
+	nop
+	bc1any2f	$fcc2, text_label
+	nop
+
+	bc1any2t	$fcc0, text_label
+	nop
+	bc1any2t	$fcc4, text_label
+	nop
+
+	bc1any4f	$fcc0, text_label
+	nop
+	bc1any4f	$fcc4, text_label
+	nop
+
+	bc1any4t	$fcc0, text_label
+	nop
+	bc1any4t	$fcc4, text_label
+	nop
+
+	cabs.f.d	$fcc0, $f8, $f19
+	cabs.f.d	$fcc2, $f8, $f19
+	cabs.f.s	$fcc0, $f8, $f19
+	cabs.f.s	$fcc2, $f8, $f19
+	cabs.f.ps	$fcc0, $f8, $f19
+	cabs.f.ps	$fcc2, $f8, $f19
+	cabs.un.d	$fcc0, $f8, $f19
+	cabs.un.d	$fcc2, $f8, $f19
+	cabs.un.s	$fcc0, $f8, $f19
+	cabs.un.s	$fcc2, $f8, $f19
+	cabs.un.ps	$fcc0, $f8, $f19
+	cabs.un.ps	$fcc2, $f8, $f19
+	cabs.eq.d	$fcc0, $f8, $f19
+	cabs.eq.d	$fcc2, $f8, $f19
+	cabs.eq.s	$fcc0, $f8, $f19
+	cabs.eq.s	$fcc2, $f8, $f19
+	cabs.eq.ps	$fcc0, $f8, $f19
+	cabs.eq.ps	$fcc2, $f8, $f19
+	cabs.ueq.d	$fcc0, $f8, $f19
+	cabs.ueq.d	$fcc2, $f8, $f19
+	cabs.ueq.s	$fcc0, $f8, $f19
+	cabs.ueq.s	$fcc2, $f8, $f19
+	cabs.ueq.ps	$fcc0, $f8, $f19
+	cabs.ueq.ps	$fcc2, $f8, $f19
+	cabs.olt.d	$fcc0, $f8, $f19
+	cabs.olt.d	$fcc2, $f8, $f19
+	cabs.olt.s	$fcc0, $f8, $f19
+	cabs.olt.s	$fcc2, $f8, $f19
+	cabs.olt.ps	$fcc0, $f8, $f19
+	cabs.olt.ps	$fcc2, $f8, $f19
+	cabs.ult.d	$fcc0, $f8, $f19
+	cabs.ult.d	$fcc2, $f8, $f19
+	cabs.ult.s	$fcc0, $f8, $f19
+	cabs.ult.s	$fcc2, $f8, $f19
+	cabs.ult.ps	$fcc0, $f8, $f19
+	cabs.ult.ps	$fcc2, $f8, $f19
+	cabs.ole.d	$fcc0, $f8, $f19
+	cabs.ole.d	$fcc2, $f8, $f19
+	cabs.ole.s	$fcc0, $f8, $f19
+	cabs.ole.s	$fcc2, $f8, $f19
+	cabs.ole.ps	$fcc0, $f8, $f19
+	cabs.ole.ps	$fcc2, $f8, $f19
+	cabs.ule.d	$fcc0, $f8, $f19
+	cabs.ule.d	$fcc2, $f8, $f19
+	cabs.ule.s	$fcc0, $f8, $f19
+	cabs.ule.s	$fcc2, $f8, $f19
+	cabs.ule.ps	$fcc0, $f8, $f19
+	cabs.ule.ps	$fcc2, $f8, $f19
+	cabs.sf.d	$fcc0, $f8, $f19
+	cabs.sf.d	$fcc2, $f8, $f19
+	cabs.sf.s	$fcc0, $f8, $f19
+	cabs.sf.s	$fcc2, $f8, $f19
+	cabs.sf.ps	$fcc0, $f8, $f19
+	cabs.sf.ps	$fcc2, $f8, $f19
+	cabs.ngle.d	$fcc0, $f8, $f19
+	cabs.ngle.d	$fcc2, $f8, $f19
+	cabs.ngle.s	$fcc0, $f8, $f19
+	cabs.ngle.s	$fcc2, $f8, $f19
+	cabs.ngle.ps	$fcc0, $f8, $f19
+	cabs.ngle.ps	$fcc2, $f8, $f19
+	cabs.seq.d	$fcc0, $f8, $f19
+	cabs.seq.d	$fcc2, $f8, $f19
+	cabs.seq.s	$fcc0, $f8, $f19
+	cabs.seq.s	$fcc2, $f8, $f19
+	cabs.seq.ps	$fcc0, $f8, $f19
+	cabs.seq.ps	$fcc2, $f8, $f19
+	cabs.ngl.d	$fcc0, $f8, $f19
+	cabs.ngl.d	$fcc2, $f8, $f19
+	cabs.ngl.s	$fcc0, $f8, $f19
+	cabs.ngl.s	$fcc2, $f8, $f19
+	cabs.ngl.ps	$fcc0, $f8, $f19
+	cabs.ngl.ps	$fcc2, $f8, $f19
+	cabs.lt.d	$fcc0, $f8, $f19
+	cabs.lt.d	$fcc2, $f8, $f19
+	cabs.lt.s	$fcc0, $f8, $f19
+	cabs.lt.s	$fcc2, $f8, $f19
+	cabs.lt.ps	$fcc0, $f8, $f19
+	cabs.lt.ps	$fcc2, $f8, $f19
+	cabs.nge.d	$fcc0, $f8, $f19
+	cabs.nge.d	$fcc2, $f8, $f19
+	cabs.nge.s	$fcc0, $f8, $f19
+	cabs.nge.s	$fcc2, $f8, $f19
+	cabs.nge.ps	$fcc0, $f8, $f19
+	cabs.nge.ps	$fcc2, $f8, $f19
+	cabs.le.d	$fcc0, $f8, $f19
+	cabs.le.d	$fcc2, $f8, $f19
+	cabs.le.s	$fcc0, $f8, $f19
+	cabs.le.s	$fcc2, $f8, $f19
+	cabs.le.ps	$fcc0, $f8, $f19
+	cabs.le.ps	$fcc2, $f8, $f19
+	cabs.ngt.d	$fcc0, $f8, $f19
+	cabs.ngt.d	$fcc2, $f8, $f19
+	cabs.ngt.s	$fcc0, $f8, $f19
+	cabs.ngt.s	$fcc2, $f8, $f19
+	cabs.ngt.ps	$fcc0, $f8, $f19
+	cabs.ngt.ps	$fcc2, $f8, $f19
+
+	cvt.pw.ps	$f4, $f19
+
+	cvt.ps.pw	$f4, $f19
+
+	mulr.ps		$f4, $f8, $f19
+
+	recip1.d	$f8, $f19
+	recip1.s	$f8, $f19
+	recip1.ps	$f8, $f19
+
+	recip2.d	$f4, $f8, $f19
+	recip2.s	$f4, $f8, $f19
+	recip2.ps	$f4, $f8, $f19
+
+	rsqrt1.d	$f8, $f19
+	rsqrt1.s	$f8, $f19
+	rsqrt1.ps	$f8, $f19
+
+	rsqrt2.d	$f4, $f8, $f19
+	rsqrt2.s	$f4, $f8, $f19
+	rsqrt2.ps	$f4, $f8, $f19
+
+# Force at least 8 (non-delay-slot) zero bytes, to make 'objdump' print ...
+      .space  8
Index: include/opcode/mips.h
===================================================================
RCS file: /cvs/src/src/include/opcode/mips.h,v
retrieving revision 1.23
diff -u -p -r1.23 mips.h
--- mips.h	2001/11/05 03:07:26	1.23
+++ mips.h	2002/03/15 19:00:11
@@ -316,6 +316,11 @@ struct mips_opcode
 #define INSN_ISA32                0x00000200
 #define INSN_ISA64                0x00000400
 
+/* Masks used for MIPS-defined ASEs.  */
+
+/* MIPS-3D ASE */
+#define INSN_MIPS3D               0x00004000
+
 /* Chip specific instructions.  These are bitmasks.  */
 
 /* MIPS R4650 instruction.  */
@@ -367,10 +372,10 @@ struct mips_opcode
 #define CPU_MIPS64      64
 #define CPU_SB1         12310201        /* octal 'SB', 01.  */
 
-/* Test for membership in an ISA including chip specific ISAs.
-   INSN is pointer to an element of the opcode table; ISA is the
-   specified ISA to test against; and CPU is the CPU specific ISA
-   to test, or zero if no CPU specific ISA test is desired.  */
+/* Test for membership in an ISA including chip specific ISAs.  INSN
+   is pointer to an element of the opcode table; ISA is the specified
+   ISA/ASE bitmask to test against; and CPU is the CPU specific ISA to
+   test, or zero if no CPU specific ISA test is desired.  */
 
 #define OPCODE_IS_MEMBER(insn, isa, cpu)				\
     (((insn)->membership & isa) != 0					\
Index: opcodes/mips-dis.c
===================================================================
RCS file: /cvs/src/src/opcodes/mips-dis.c,v
retrieving revision 1.26
diff -u -p -r1.26 mips-dis.c
--- mips-dis.c	2002/03/15 17:32:05	1.26
+++ mips-dis.c	2002/03/15 19:00:13
@@ -373,15 +373,17 @@ mips_isa_type (mach, isa, cputype)
       break;
     case bfd_mach_mips_sb1:
       *cputype = CPU_SB1;
-      *isa = ISA_MIPS64 | INSN_SB1;
+      *isa = ISA_MIPS64 | INSN_MIPS3D | INSN_SB1;
       break;
     case bfd_mach_mipsisa32:
       *cputype = CPU_MIPS32;
+      /* For stock MIPS32, disassemble all applicable MIPS-specified ASEs.  */
       *isa = ISA_MIPS32;
       break;
     case bfd_mach_mipsisa64:
       *cputype = CPU_MIPS64;
-      *isa = ISA_MIPS64;
+      /* For stock MIPS64, disassemble all applicable MIPS-specified ASEs.  */
+      *isa = ISA_MIPS64 | INSN_MIPS3D;
       break;
 
     default:
Index: opcodes/mips-opc.c
===================================================================
RCS file: /cvs/src/src/opcodes/mips-opc.c,v
retrieving revision 1.29
diff -u -p -r1.29 mips-opc.c
--- mips-opc.c	2002/03/06 20:31:14	1.29
+++ mips-opc.c	2002/03/15 19:00:13
@@ -82,6 +82,9 @@ Software Foundation, 59 Temple Place - S
 #define I32	INSN_ISA32
 #define I64     INSN_ISA64
 
+/* MIPS-3D support. */
+#define M3D     INSN_MIPS3D
+
 #define P3	INSN_4650
 #define L1	INSN_4010
 #define V1      INSN_4100
@@ -845,6 +848,77 @@ const struct mips_opcode mips_builtin_op
 {"wait",    "J",        0x42000020, 0xfe00003f, TRAP,   		I32     },
 {"waiti",   "",		0x42000020, 0xffffffff,	TRAP,			L1	},
 {"wb", 	    "o(b)",	0xbc040000, 0xfc1f0000, SM|RD_b,		L1	},
+
+/* MIPS-3D instructions.  */
+{"addr.ps",	"D,S,T",	0x46c00018, 0xffe0003f,	WR_D|RD_S|RD_T|FP_D,	M3D	},
+{"bc1any2f",	"N,p",		0x45200000, 0xffe30000,	CBD|RD_CC|FP_S,		M3D	},
+{"bc1any2t",	"N,p",		0x45210000, 0xffe30000,	CBD|RD_CC|FP_S,		M3D	},
+{"bc1any4f",	"N,p",		0x45400000, 0xffe30000,	CBD|RD_CC|FP_S,		M3D	},
+{"bc1any4t",	"N,p",		0x45410000, 0xffe30000,	CBD|RD_CC|FP_S,		M3D	},
+{"cabs.f.d",	"M,S,T",	0x46200070, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.f.s",	"M,S,T",	0x46000070, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	M3D	},
+{"cabs.f.ps",	"M,S,T",	0x46c00070, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.un.d",	"M,S,T",	0x46200071, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.un.s",	"M,S,T",	0x46000071, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	M3D	},
+{"cabs.un.ps",	"M,S,T",	0x46c00071, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.eq.d",	"M,S,T",	0x46200072, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.eq.s",	"M,S,T",	0x46000072, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	M3D	},
+{"cabs.eq.ps",	"M,S,T",	0x46c00072, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.ueq.d",	"M,S,T",	0x46200073, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.ueq.s",	"M,S,T",	0x46000073, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	M3D	},
+{"cabs.ueq.ps",	"M,S,T",	0x46c00073, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.olt.d",	"M,S,T",	0x46200074, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.olt.s",	"M,S,T",	0x46000074, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	M3D	},
+{"cabs.olt.ps",	"M,S,T",	0x46c00074, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.ult.d",	"M,S,T",	0x46200075, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.ult.s",	"M,S,T",	0x46000075, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	M3D	},
+{"cabs.ult.ps",	"M,S,T",	0x46c00075, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.ole.d",	"M,S,T",	0x46200076, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.ole.s",	"M,S,T",	0x46000076, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	M3D	},
+{"cabs.ole.ps",	"M,S,T",	0x46c00076, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.ule.d",	"M,S,T",	0x46200077, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.ule.s",	"M,S,T",	0x46000077, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	M3D	},
+{"cabs.ule.ps",	"M,S,T",	0x46c00077, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.sf.d",	"M,S,T",	0x46200078, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.sf.s",	"M,S,T",	0x46000078, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	M3D	},
+{"cabs.sf.ps",	"M,S,T",	0x46c00078, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.ngle.d",	"M,S,T",	0x46200079, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.ngle.s",	"M,S,T",	0x46000079, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	M3D	},
+{"cabs.ngle.ps", "M,S,T",	0x46c00079, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.seq.d",	"M,S,T",	0x4620007a, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.seq.s",	"M,S,T",	0x4600007a, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	M3D	},
+{"cabs.seq.ps",	"M,S,T",	0x46c0007a, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.ngl.d",	"M,S,T",	0x4620007b, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.ngl.s",	"M,S,T",	0x4600007b, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	M3D	},
+{"cabs.ngl.ps",	"M,S,T",	0x46c0007b, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.lt.d",	"M,S,T",	0x4620007c, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.lt.s", 	"M,S,T",	0x4600007c, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	M3D	},
+{"cabs.lt.ps",	"M,S,T",	0x46c0007c, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.nge.d",	"M,S,T",	0x4620007d, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.nge.s",	"M,S,T",	0x4600007d, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	M3D	},
+{"cabs.nge.ps",	"M,S,T",	0x46c0007d, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.le.d", 	"M,S,T",	0x4620007e, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.le.s", 	"M,S,T",	0x4600007e, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	M3D	},
+{"cabs.le.ps",	"M,S,T",	0x46c0007e, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.ngt.d",	"M,S,T",	0x4620007f, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cabs.ngt.s",	"M,S,T",	0x4600007f, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	M3D	},
+{"cabs.ngt.ps",	"M,S,T",	0x46c0007f, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	M3D	},
+{"cvt.pw.ps",	"D,S",		0x46c00024, 0xffff003f,	WR_D|RD_S|FP_S|FP_D,	M3D	},
+{"cvt.ps.pw",	"D,S",		0x46800026, 0xffff003f,	WR_D|RD_S|FP_S|FP_D,	M3D	},
+{"mulr.ps",	"D,S,T",	0x46c0001a, 0xffe0003f,	WR_D|RD_S|RD_T|FP_D,	M3D	},
+{"recip1.d",	"D,S",		0x4620001d, 0xffff003f,	WR_D|RD_S|FP_D,		M3D	},
+{"recip1.s",	"D,S",		0x4600001d, 0xffff003f,	WR_D|RD_S|FP_S,		M3D	},
+{"recip1.ps",	"D,S",		0x46c0001d, 0xffff003f,	WR_D|RD_S|FP_S,		M3D	},
+{"recip2.d",	"D,S,T",	0x4620001c, 0xffe0003f,	WR_D|RD_S|RD_T|FP_D,	M3D	},
+{"recip2.s",	"D,S,T",	0x4600001c, 0xffe0003f,	WR_D|RD_S|RD_T|FP_S,	M3D	},
+{"recip2.ps",	"D,S,T",	0x46c0001c, 0xffe0003f,	WR_D|RD_S|RD_T|FP_S,	M3D	},
+{"rsqrt1.d",	"D,S",  	0x4620001e, 0xffff003f,	WR_D|RD_S|FP_D,		M3D	},
+{"rsqrt1.s",	"D,S",		0x4600001e, 0xffff003f,	WR_D|RD_S|FP_S,		M3D	},
+{"rsqrt1.ps",	"D,S",		0x46c0001e, 0xffff003f,	WR_D|RD_S|FP_S,		M3D	},
+{"rsqrt2.d",	"D,S,T",	0x4620001f, 0xffe0003f,	WR_D|RD_S|RD_T|FP_D,	M3D	},
+{"rsqrt2.s",	"D,S,T",	0x4600001f, 0xffe0003f,	WR_D|RD_S|RD_T|FP_S,	M3D	},
+{"rsqrt2.ps",	"D,S,T",	0x46c0001f, 0xffe0003f,	WR_D|RD_S|RD_T|FP_S,	M3D	},
+
 /* No hazard protection on coprocessor instructions--they shouldn't
    change the state of the processor and if they do it's up to the
    user to put in nops as necessary.  These are at the end so that the



More information about the Binutils mailing list