opcode/
authorAndrew Pinski <apinski@cavium.com>
Tue, 29 Nov 2011 20:28:55 +0000 (20:28 +0000)
committerAndrew Pinski <apinski@cavium.com>
Tue, 29 Nov 2011 20:28:55 +0000 (20:28 +0000)
2011-11-29  Andrew Pinski  <apinski@cavium.com>

        * mips-dis.c (mips_arch_choices): Add Octeon+.
        * mips-opc.c (IOCT): Include Octeon+.
        (IOCTP): New macro.
        (mips_builtin_opcodes): Add "saa" and "saad".
bfd/
2011-11-29  Andrew Pinski  <apinski@cavium.com>

        * archures.c (bfd_mach_mips_octeonp): New macro.
        * bfd-in2.h: Regenerate.
        * bfd/cpu-mips.c (I_mipsocteonp): New enum value.
        (arch_info_struct): Add bfd_mach_mips_octeonp.
        * elfxx-mips.c (mips_set_isa_flags): Add bfd_mach_mips_octeonp.
        (mips_mach_extensions): Add bfd_mach_mips_octeonp.
include/opcodes/
2011-11-29  Andrew Pinski  <apinski@cavium.com>

        * mips.h (INSN_CHIP_MASK): Update according to INSN_OCTEONP.
        (INSN_OCTEONP): New macro.
        (CPU_OCTEONP): New macro.
        (OPCODE_IS_MEMBER): Add Octeon+.
        (M_SAA_AB, M_SAAD_AB, M_SAA_OB, M_SAAD_OB): New enum values.
gas/
2011-11-29  Andrew Pinski  <apinski@cavium.com>

        * config/tc-mips.c (CPU_IS_OCTEON): New macro function.
        (CPU_HAS_SEQ): Change to use CPU_IS_OCTEON.
        (NO_ISA_COP): Likewise.
        (macro) <ld_st>: Add support when off0 is true.
        Add support for M_SAA_AB, M_SAA_OB, M_SAAD_OB and M_SAAD_AB.
        (mips_cpu_info_table): Add octeon+.
        * doc/c-mips.texi: Document octeon+ as an acceptable value for -march=.
gas/testsuite/
2011-11-29  Andrew Pinski  <apinski@cavium.com>

        * gas/mips/mips.exp: Add octeon+ for an architecture.
        Run octeon-saa-saad test.
        (run_dump_test_arch): For Octeon architectures, also try octeon@.
        * gas/mips/octeon-pref.d: Remove -march=octeon from command line.
        * gas/mips/octeon.d: Likewise.
        * gas/mips/octeon-saa-saad.d: New file.
        * gas/mips/octeon-saa-saad.s: New file

19 files changed:
bfd/ChangeLog
bfd/archures.c
bfd/bfd-in2.h
bfd/cpu-mips.c
bfd/elfxx-mips.c
gas/ChangeLog
gas/config/tc-mips.c
gas/doc/c-mips.texi
gas/testsuite/ChangeLog
gas/testsuite/gas/mips/mips.exp
gas/testsuite/gas/mips/octeon-pref.d
gas/testsuite/gas/mips/octeon-saa-saad.d [new file with mode: 0644]
gas/testsuite/gas/mips/octeon-saa-saad.s [new file with mode: 0644]
gas/testsuite/gas/mips/octeon.d
include/opcode/ChangeLog
include/opcode/mips.h
opcodes/ChangeLog
opcodes/mips-dis.c
opcodes/mips-opc.c

index 3755368cbd2d5630ea92d49736f7af210797208b..c1a6f0d436f676c2f3bd61a38db8a3cb159ba95d 100644 (file)
@@ -1,3 +1,12 @@
+2011-11-29  Andrew Pinski  <apinski@cavium.com>
+
+       * archures.c (bfd_mach_mips_octeonp): New macro.
+       * bfd-in2.h: Regenerate.
+       * bfd/cpu-mips.c (I_mipsocteonp): New enum value.
+       (arch_info_struct): Add bfd_mach_mips_octeonp.
+       * elfxx-mips.c (mips_set_isa_flags): Add bfd_mach_mips_octeonp.
+       (mips_mach_extensions): Add bfd_mach_mips_octeonp.
+
 2011-11-23  Tristan Gingold  <gingold@adacore.com>
 
        * vms-lib.c (get_idxlen): Add comments.  Fix type in sizeof.
index 5d0c682d7f08fe78326104ca1d51a10697caecf5..698155fbc60b9b9abf27d06c574c16ee8f9e51cc 100644 (file)
@@ -176,6 +176,7 @@ DESCRIPTION
 .#define bfd_mach_mips_loongson_3a      3003
 .#define bfd_mach_mips_sb1              12310201 {* octal 'SB', 01 *}
 .#define bfd_mach_mips_octeon          6501
+.#define bfd_mach_mips_octeonp         6601
 .#define bfd_mach_mips_xlr              887682   {* decimal 'XLR'  *}
 .#define bfd_mach_mipsisa32             32
 .#define bfd_mach_mipsisa32r2           33
index 88fd45aee17ee8e9a6609ebb7421f5ab1bc29103..14e0d1a1f6b5281b591e71301e7a6add52d39277 100644 (file)
@@ -1882,6 +1882,7 @@ enum bfd_architecture
 #define bfd_mach_mips_loongson_3a      3003
 #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
 #define bfd_mach_mips_octeon           6501
+#define bfd_mach_mips_octeonp          6601
 #define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
 #define bfd_mach_mipsisa32             32
 #define bfd_mach_mipsisa32r2           33
index 42d43a96bba523ba538af34f05fa7ca3e3d4a26c..417bc7cf4c5ac1b23c3907f6a4e8d3216c3fcd6e 100644 (file)
@@ -93,6 +93,7 @@ enum
   I_loongson_2f,
   I_loongson_3a,
   I_mipsocteon,
+  I_mipsocteonp,
   I_xlr,
   I_micromips
 };
@@ -134,6 +135,7 @@ static const bfd_arch_info_type arch_info_struct[] =
   N (64, 64, bfd_mach_mips_loongson_2f, "mips:loongson_2f",       FALSE, NN(I_loongson_2f)),
   N (64, 64, bfd_mach_mips_loongson_3a, "mips:loongson_3a",       FALSE, NN(I_loongson_3a)),
   N (64, 64, bfd_mach_mips_octeon,"mips:octeon",  FALSE, NN(I_mipsocteon)),
+  N (64, 64, bfd_mach_mips_octeonp,"mips:octeon+",  FALSE, NN(I_mipsocteonp)),
   N (64, 64, bfd_mach_mips_xlr, "mips:xlr",       FALSE, NN(I_xlr)),
   N (64, 64, bfd_mach_mips_micromips,"mips:micromips",FALSE,0)
 };
index 0c901c63d19c5ecd05f6915ec1c78297a0eb096e..7a467c71bc83508b906ac9e3e6b91f98d3e6406d 100644 (file)
@@ -10885,6 +10885,7 @@ mips_set_isa_flags (bfd *abfd)
       break;
 
     case bfd_mach_mips_octeon:
+    case bfd_mach_mips_octeonp:
       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
       break;
 
@@ -13491,6 +13492,7 @@ struct mips_mach_extension {
 
 static const struct mips_mach_extension mips_mach_extensions[] = {
   /* MIPS64r2 extensions.  */
+  { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
   { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
 
   /* MIPS64 extensions.  */
index d8cf38131318d7013e59bf38f7b8a5bee2e338e5..eee35dec0d30c6dddf48f5cc033b282766cfebdb 100644 (file)
@@ -1,3 +1,13 @@
+2011-11-29  Andrew Pinski  <apinski@cavium.com>
+
+       * config/tc-mips.c (CPU_IS_OCTEON): New macro function.
+       (CPU_HAS_SEQ): Change to use CPU_IS_OCTEON.
+       (NO_ISA_COP): Likewise.
+       (macro) <ld_st>: Add support when off0 is true.
+       Add support for M_SAA_AB, M_SAA_OB, M_SAAD_OB and M_SAAD_AB.
+       (mips_cpu_info_table): Add octeon+.
+       * doc/c-mips.texi: Document octeon+ as an acceptable value for -march=.
+
 2011-11-25  Matthew Gretton-Dann  <matthew.gretton-dann@arm.com>
 
        * config/tc-arm.c (do_t_mov_cmp): Allow MOV lowreg, lowreg when no CPU
index 34d2df758a74cb4484563d5b379ba02f5a57c8ea..2a573934337139537f14249f7df6371d363cf02b 100644 (file)
@@ -497,13 +497,16 @@ static int mips_32bitmode = 0;
 /* True if CPU has a ror instruction.  */
 #define CPU_HAS_ROR(CPU)       CPU_HAS_DROR (CPU)
 
+/* True if CPU is in the Octeon family */
+#define CPU_IS_OCTEON(CPU) ((CPU) == CPU_OCTEON || (CPU) == CPU_OCTEONP)
+
 /* True if CPU has seq/sne and seqi/snei instructions.  */
-#define CPU_HAS_SEQ(CPU)       ((CPU) == CPU_OCTEON)
+#define CPU_HAS_SEQ(CPU)       (CPU_IS_OCTEON (CPU))
 
 /* True if CPU does not implement the all the coprocessor insns.  For these
    CPUs only those COP insns are accepted that are explicitly marked to be
    available on the CPU.  ISA membership for COP insns is ignored.  */
-#define NO_ISA_COP(CPU)                ((CPU) == CPU_OCTEON)
+#define NO_ISA_COP(CPU)                (CPU_IS_OCTEON (CPU))
 
 /* True if mflo and mfhi can be immediately followed by instructions
    which write to the HI and LO registers.
@@ -6261,6 +6264,7 @@ macro (struct mips_cl_insn *ip)
   int ust = 0;
   int lp = 0;
   int ab = 0;
+  int off0 = 0;
   int off;
   offsetT maxnum;
   bfd_reloc_code_real_type r;
@@ -8295,20 +8299,29 @@ macro (struct mips_cl_insn *ip)
                             tempreg, tempreg, breg);
              breg = tempreg;
            }
-         if (!off12)
+         if (off0)
+           {
+             if (offset_expr.X_add_number == 0)
+               tempreg = breg;
+             else
+               macro_build (&offset_expr, ADDRESS_ADDI_INSN,
+                            "t,r,j", tempreg, breg, BFD_RELOC_LO16);
+             macro_build (NULL, s, fmt, treg, tempreg);
+           }
+         else if (!off12)
            macro_build (&offset_expr, s, fmt, treg, BFD_RELOC_LO16, breg);
          else
            macro_build (NULL, s, fmt,
                         treg, (unsigned long) offset_expr.X_add_number, breg);
        }
-      else if (off12)
+      else if (off12 || off0)
        {
-         /* A 12-bit offset field is too narrow to be used for a low-part
-            relocation, so load the whole address into the auxillary
-            register.  In the case of "A(b)" addresses, we first load
-            absolute address "A" into the register and then add base
-            register "b".  In the case of "o(b)" addresses, we simply
-            need to add 16-bit offset "o" to base register "b", and
+         /* A 12-bit or 0-bit offset field is too narrow to be used
+            for a low-part relocation, so load the whole address into
+            the auxillary register.  In the case of "A(b)" addresses,
+            we first load absolute address "A" into the register and
+            then add base register "b".  In the case of "o(b)" addresses,
+            we simply need to add 16-bit offset "o" to base register "b", and
             offset_reloc already contains the relocations associated
             with "o".  */
          if (ab)
@@ -8323,8 +8336,11 @@ macro (struct mips_cl_insn *ip)
                         tempreg, breg, -1,
                         offset_reloc[0], offset_reloc[1], offset_reloc[2]);
          expr1.X_add_number = 0;
-         macro_build (NULL, s, fmt,
-                      treg, (unsigned long) expr1.X_add_number, tempreg);
+         if (off0)
+           macro_build (NULL, s, fmt, treg, tempreg);
+         else
+           macro_build (NULL, s, fmt,
+                        treg, (unsigned long) expr1.X_add_number, tempreg);
        }
       else if (mips_pic == NO_PIC)
        {
@@ -9118,6 +9134,22 @@ macro (struct mips_cl_insn *ip)
        }
       break;
 
+       
+    case M_SAA_AB:
+      ab = 1;
+    case M_SAA_OB:
+      s = "saa";
+      off0 = 1;
+      fmt = "t,(b)";
+      goto ld_st;
+    case M_SAAD_AB:
+      ab = 1;
+    case M_SAAD_OB:
+      s = "saad";
+      off0 = 1;
+      fmt = "t,(b)";
+      goto ld_st;
+
    /* New code added to support COPZ instructions.
       This code builds table entries out of the macros in mip_opcodes.
       R4000 uses interlocks to handle coproc delays.
@@ -19042,6 +19074,7 @@ static const struct mips_cpu_info mips_cpu_info_table[] =
 
   /* Cavium Networks Octeon CPU core */
   { "octeon",        0,      ISA_MIPS64R2,   CPU_OCTEON },
+  { "octeon+",       0,      ISA_MIPS64R2,   CPU_OCTEONP },
 
   /* RMI Xlr */
   { "xlr",           0,      ISA_MIPS64,     CPU_XLR },
index 22c7c38bf2c0e4bde7689fe36849d006a937014a..ddfcbd95f25d99e315d21c288d62fcfcb708cf38 100644 (file)
@@ -323,6 +323,7 @@ loongson2e,
 loongson2f,
 loongson3a,
 octeon,
+octeon+,
 xlr
 @end quotation
 
index 054eee3888138564a39e362591f3b0ad491281df..6d0688b8f589cfb1370895355397cd4b7068221e 100644 (file)
@@ -1,3 +1,13 @@
+2011-11-29  Andrew Pinski  <apinski@cavium.com>
+
+       * gas/mips/mips.exp: Add octeon+ for an architecture.
+       Run octeon-saa-saad test.
+       (run_dump_test_arch): For Octeon architectures, also try octeon@.
+       * gas/mips/octeon-pref.d: Remove -march=octeon from command line.
+       * gas/mips/octeon.d: Likewise.
+       * gas/mips/octeon-saa-saad.d: New file.
+       * gas/mips/octeon-saa-saad.s: New file
+
 2011-11-25  Matthew Gretton-Dann  <matthew.gretton-dann@arm.com>
 
        * gas/arm/mov-highregs-any.d: New testcase.
index 5d91aeff6c8f4a29956a67a9970e9072c96dd16a..047c038647337de58de0cd87a495300b1057217e 100644 (file)
@@ -308,7 +308,13 @@ proc run_dump_test_arch { name arch } {
 
     set format [expr { $elf ? "elf" : $ecoff ? "ecoff" : "aout" }]
     set proparch [lindex [mips_arch_properties $arch 0] 0]
-    foreach prefix [list ${proparch}@${format}@ ${proparch}@ ${format}@] {
+    set prefixes [list ${proparch}@${format}@ ${proparch}@ ]
+    if { [ string match "octeon*" $proparch ] && $proparch != "octeon" } {
+      lappend prefixes octeon@
+      lappend prefixes octeon@${format}@
+    }
+    lappend prefixes ${format}@
+    foreach prefix ${prefixes} {
        set archname ${prefix}${name}
        if { [file exists "$srcdir/$subdir/${archname}.d"] } {
            set name $archname
@@ -412,6 +418,9 @@ mips_arch_create sb1        64      mips64  { mips3d } \
 mips_arch_create octeon 64     mips64r2 {} \
                        { -march=octeon -mtune=octeon } { -mmips:octeon } \
                        { mips64octeon*-*-* }
+mips_arch_create octeonp 64    octeon {} \
+                       { -march=octeon+ -mtune=octeon+ } { -mmips:octeon+ } \
+                       { }
 mips_arch_create xlr   64      mips64  {} \
                        { -march=xlr -mtune=xlr } { -mmips:xlr }
 
@@ -981,6 +990,7 @@ if { [istarget mips*-*-vxworks*] } {
     run_dump_test "loongson-3a-3"
 
     run_dump_test_arches "octeon"      [mips_arch_list_matching octeon]
+    run_dump_test_arches "octeon-saa-saad" [mips_arch_list_matching octeonp]
     run_list_test_arches "octeon-ill" "" \
                                        [mips_arch_list_matching octeon]
     run_dump_test_arches "octeon-pref" [mips_arch_list_matching octeon]
index 6dcb1848d179ea9ec962397bfe340dbf409c1483..0b536d6f5c1454fa7afdfa938c221da4d8af4deb 100644 (file)
@@ -1,4 +1,4 @@
-#as: -march=octeon -64 -mfix-cn63xxp1
+#as: -64 -mfix-cn63xxp1
 #objdump: -M reg-names=numeric -dr
 #name: MIPS octeon-pref mfix-cn63xxp1
 
diff --git a/gas/testsuite/gas/mips/octeon-saa-saad.d b/gas/testsuite/gas/mips/octeon-saa-saad.d
new file mode 100644 (file)
index 0000000..e5dff8e
--- /dev/null
@@ -0,0 +1,58 @@
+#objdump: -d -r --show-raw-insn
+#name: MIPS-OCTEON octeon_saa_saad
+
+.*: +file format .*mips.*
+
+Disassembly of section .text:
+
+[0-9a-f]+ <foo>:
+.*:    70450018        saa     a1,\(v0\)
+.*:    70860019        saad    a2,\(a0\)
+.*:    00000000        nop
+.*:    70450018        saa     a1,\(v0\)
+.*:    70860019        saad    a2,\(a0\)
+.*:    00000000        nop
+.*:    3c010000        lui     at,0x0
+                       18: R_MIPS_HI16 .text
+.*:    24210000        addiu   at,at,0
+                       1c: R_MIPS_LO16 .text
+.*:    70250018        saa     a1,\(at\)
+.*:    3c010000        lui     at,0x0
+                       24: R_MIPS_HI16 .text
+.*:    24210000        addiu   at,at,0
+                       28: R_MIPS_LO16 .text
+.*:    70220019        saad    v0,\(at\)
+.*:    00000000        nop
+.*:    3c011234        lui     at,0x1234
+.*:    24215678        addiu   at,at,22136
+.*:    70240018        saa     a0,\(at\)
+.*:    3c011234        lui     at,0x1234
+.*:    24215678        addiu   at,at,22136
+.*:    70240019        saad    a0,\(at\)
+.*:    00000000        nop
+.*:    24811234        addiu   at,a0,4660
+.*:    70250018        saa     a1,\(at\)
+.*:    2401003c        li      at,60
+.*:    70260019        saad    a2,\(at\)
+.*:    00000000        nop
+.*:    3c010012        lui     at,0x12
+.*:    00240821        addu    at,at,a0
+.*:    24213456        addiu   at,at,13398
+.*:    70250018        saa     a1,\(at\)
+.*:    24c11234        addiu   at,a2,4660
+.*:    70260018        saa     a2,\(at\)
+.*:    00000000        nop
+.*:    24a15678        addiu   at,a1,22136
+.*:    70240019        saad    a0,\(at\)
+.*:    3c010056        lui     at,0x56
+.*:    00250821        addu    at,at,a1
+.*:    24217891        addiu   at,at,30865
+.*:    70250019        saad    a1,\(at\)
+.*:    00000000        nop
+.*:    24a10000        addiu   at,a1,0
+                       9c: R_MIPS_LO16 .text
+.*:    70240018        saa     a0,\(at\)
+.*:    24a10000        addiu   at,a1,0
+                       a4: R_MIPS_LO16 .text
+.*:    70240019        saad    a0,\(at\)
+.*:    00000000        nop
diff --git a/gas/testsuite/gas/mips/octeon-saa-saad.s b/gas/testsuite/gas/mips/octeon-saa-saad.s
new file mode 100644 (file)
index 0000000..22d1a07
--- /dev/null
@@ -0,0 +1,33 @@
+       .text
+foo:
+       saa $5,($2)
+       saad $6,($4)
+       nop
+
+       saa $5,0($2)
+       saad $6,0($4)
+       nop
+
+       saa $5, foo
+       saad $2, foo
+       nop
+
+       saa $4, 0x12345678
+       saad $4, 0x12345678
+       nop
+
+       saa $5, 0x1234($4)
+       saad $6, 60($0)
+       nop
+
+       saa $5, 0x123456($4)
+       saa $6, 0x1234($6)
+       nop
+
+       saad $4, 0x5678($5)
+       saad $5, 0x567891($5)
+       nop     
+
+       saa $4, %lo(foo)($5)
+       saad $4, %lo(foo)($5)
+       nop
index 79b4001440752f312dd1e4aaaa9ffbd3919ad99b..a0e15d8af45077b7ea84a9e290300940a3d3d7ae 100644 (file)
@@ -1,4 +1,4 @@
-#as: -march=octeon -64
+#as: -64
 #objdump: -M reg-names=numeric -dr
 #name: MIPS octeon instructions
 
index dd4a977a6862641a651802d7b146ab691a214940..bfd71e055b06aed9c0d10f33660f919404b0ec1c 100644 (file)
@@ -1,3 +1,11 @@
+2011-11-29  Andrew Pinski  <apinski@cavium.com>
+
+       * mips.h (INSN_CHIP_MASK): Update according to INSN_OCTEONP.
+       (INSN_OCTEONP): New macro.
+       (CPU_OCTEONP): New macro.
+       (OPCODE_IS_MEMBER): Add Octeon+.
+       (M_SAA_AB, M_SAAD_AB, M_SAA_OB, M_SAAD_OB): New enum values.
+
 2011-11-01  DJ Delorie  <dj@redhat.com>
 
        * rl78.h: New file.
index a94860f058913a5020337c72deb046089e2636c9..eb28d160f353a0ad26e718170b3fef9aeb6ba425 100644 (file)
@@ -713,10 +713,11 @@ static const unsigned int mips_isa_table[] =
   { 0x0001, 0x0003, 0x0607, 0x1e0f, 0x3e1f, 0x0a23, 0x3e63, 0x3ebf, 0x3fff };
 
 /* Masks used for Chip specific instructions.  */
-#define INSN_CHIP_MASK           0xc3ff0c20
+#define INSN_CHIP_MASK           0xc3ff0e20
 
 /* Cavium Networks Octeon instructions.  */
 #define INSN_OCTEON              0x00000800
+#define INSN_OCTEONP             0x00000200
 
 /* Masks used for MIPS-defined ASEs.  */
 #define INSN_ASE_MASK            0x3c00f010
@@ -823,6 +824,7 @@ static const unsigned int mips_isa_table[] =
 #define CPU_LOONGSON_2F 3002
 #define CPU_LOONGSON_3A 3003
 #define CPU_OCTEON     6501
+#define CPU_OCTEONP    6601
 #define CPU_XLR        887682          /* decimal 'XLR'   */
 
 /* Test for membership in an ISA including chip specific ISAs.  INSN
@@ -859,6 +861,8 @@ static const unsigned int mips_isa_table[] =
          && ((insn)->membership & INSN_LOONGSON_3A) != 0)               \
      || (cpu == CPU_OCTEON                                             \
         && ((insn)->membership & INSN_OCTEON) != 0)                    \
+     || (cpu == CPU_OCTEONP                                            \
+        && ((insn)->membership & INSN_OCTEONP) != 0)                   \
      || (cpu == CPU_XLR && ((insn)->membership & INSN_XLR) != 0)        \
      || 0)     /* Please keep this term for easier source merging.  */
 
@@ -1065,6 +1069,10 @@ enum
   M_S_DOB,
   M_S_DAB,
   M_S_S,
+  M_SAA_AB,
+  M_SAA_OB,
+  M_SAAD_AB,
+  M_SAAD_OB,
   M_SC_AB,
   M_SC_OB,
   M_SCD_AB,
index 045b9cae7c179b5cbf11060c72b58dc1efd24b0d..9458f0e211a22a2d6d3b17875c81912fc112a8ed 100644 (file)
@@ -1,3 +1,10 @@
+2011-11-29  Andrew Pinski  <apinski@cavium.com>
+
+       * mips-dis.c (mips_arch_choices): Add Octeon+.
+       * mips-opc.c (IOCT): Include Octeon+.
+       (IOCTP): New macro.
+       (mips_builtin_opcodes): Add "saa" and "saad".
+
 2011-11-25  Pierre Muller  <muller@ics.u-strasbg.fr>
 
        * mips-dis.c (print_insn_micromips): Rename local variable iprintf
index 72285de8519b9e096529b3bb9f3edb33b3c887b1..09714ac9df329d153f0eb188a6ec68a695f9cc38 100644 (file)
@@ -605,6 +605,10 @@ const struct mips_arch_choice mips_arch_choices[] =
     ISA_MIPS64R2 | INSN_OCTEON, mips_cp0_names_numeric, NULL, 0,
     mips_hwr_names_numeric },
 
+  { "octeon+",   1, bfd_mach_mips_octeonp, CPU_OCTEONP,
+    ISA_MIPS64R2 | INSN_OCTEON | INSN_OCTEONP, mips_cp0_names_numeric,
+    NULL, 0, mips_hwr_names_numeric },
+
   { "xlr", 1, bfd_mach_mips_xlr, CPU_XLR,
     ISA_MIPS64 | INSN_XLR,
     mips_cp0_names_xlr,
index 7adf3370c5b7d2beb9620ea8cfff7dbd7ebc65f8..a0e05f52fc4f8176c36636a1d30501b0caf1139a 100644 (file)
 #define N5     (INSN_5400 | INSN_5500)
 #define N54    INSN_5400
 #define N55    INSN_5500
-#define IOCT   INSN_OCTEON
+#define IOCT   (INSN_OCTEON | INSN_OCTEONP)
+#define IOCTP  INSN_OCTEONP
 #define XLR     INSN_XLR
 
 #define G1      (T3             \
@@ -1247,6 +1248,12 @@ const struct mips_opcode mips_builtin_opcodes[] =
 {"rzu.ob",  "X,Q",     0x78000020, 0xfc20f83f, WR_D|RD_T|FP_D,         RD_MACC,        MX|SB1  },
 {"rzu.ob",  "D,k",     0x4bc00020, 0xffe0f83f, WR_D|RD_S|RD_T,         0,              N54     },
 {"rzu.qh",  "X,Q",     0x78200020, 0xfc20f83f, WR_D|RD_T|FP_D,         RD_MACC,        MX      },
+{"saa",            "t,o(b)",   0,    (int) M_SAA_OB,   INSN_MACRO,             0,              IOCTP   },
+{"saa",            "t,A(b)",   0,    (int) M_SAA_AB,   INSN_MACRO,             0,              IOCTP   },
+{"saa",            "t,(b)",    0x70000018, 0xfc00ffff, SM|RD_t|RD_b,           0,              IOCTP   },
+{"saad",    "t,o(b)",  0,    (int) M_SAAD_OB,  INSN_MACRO,             0,              IOCTP   },
+{"saad",    "t,A(b)",  0,    (int) M_SAAD_AB,  INSN_MACRO,             0,              IOCTP   },
+{"saad",    "t,(b)",   0x70000019, 0xfc00ffff, SM|RD_t|RD_b,           0,              IOCTP   },
 {"sb",      "t,o(b)",  0xa0000000, 0xfc000000, SM|RD_t|RD_b,           0,              I1      },
 {"sb",      "t,A(b)",  0,    (int) M_SB_AB,    INSN_MACRO,             0,              I1      },
 {"sc",     "t,o(b)",   0xe0000000, 0xfc000000, SM|RD_t|WR_t|RD_b,      0,              I2      },