mips64 xlr processor support (3rd try)

Sandip Matte sandip@rmicorp.com
Mon Jun 16 15:30:00 GMT 2008


Hi guys,

Please go through the following patch and let me know your comments.

Thanks in advance,
Sandip


Sandip Matte wrote:
> Hello binutils maintainers,
> 
> Can somebody please take a look at the xlr processor patch and
> let me know the comments.
> 
> Thanks,
> Sandip
> 
> 
> Sandip Matte wrote:
> 
>> Hello,
>>
>> This patch adds support for RMI Corp's mips64 xlr processor.
>>
>> Thanks,
>> Sandip
>>
>>
>> ------------------------------------------------------------------------
>>
>> 2008-05-27 Sandip Matte <sandip@rmicorp.com> 
>>     * bfd/aoutx.h: bfd for xlr mips64 processor.
>>
>>     * bfd/archures.c: define xlr processor.
>>
>>     * bfd/bfd-in2.h: define xlr processor.
>>
>>     * bfd/cpu-mips.c: Add xlr to arch_info_struct.
>>
>>     * doc/archures.texi: define xlr processor.
>>
>>     * bfd/elfxx-mips.c: add xlr bfd in mips_mach_extensions and 
>> related     related places.
>>
>>     * binutils/readelf.c:  Define machine flag for xlr processor.
>>     * gas/config/tc-mips.c: Add xlr in mips_cpu_info_table.
>>     Add new xlr machine instructions: msgld, msgsend, msgwait
>>
>>     * gas/doc/c-mips.texi: Add xlr architecture.
>>
>>     * gas/testsuite/gas/mips/mips.exp: Create mips arch xlr and run dump
>>     test.
>>
>>     * include/elf/mips.h: Assign a value to machine define for xlr.
>>
>>     * include/opcode/mips.h: Add INSN_XLR flag for xlr instructions.
>>     Decimal define CPU_XLR is added. Add msg instructions in the macro
>>     expansion list.
>>
>>     * opcodes/mips-dis.c: Define xlr cop0 regs. Add xlr in
>>     mips_arch_choices.
>>
>>     * opcodes/mips-opc.c: Add instructions daddwc, ldaddw, ldaddwu, 
>> ldaddd,     mfcr, msgsnd, msgld, msgwait, mtcr, swapw, swapwu, swapd 
>> to xlr arch.
>>
>>     * gas/testsuite/gas/mips/xlr-ext.d: Add new file for xlr arch.
>>
>>     * gas/testsuite/gas/mips/xlr-ext.s: new source file to test xlr 
>>     assembler instructions.
>>
>>
>> ------------------------------------------------------------------------
>>
>> diff -Naur binutils-2.18.orig/bfd/aoutx.h binutils-2.18/bfd/aoutx.h
>> --- binutils-2.18.orig/bfd/aoutx.h    2008-05-27 15:04:04.002684000 +0530
>> +++ binutils-2.18/bfd/aoutx.h    2008-05-27 15:25:58.000414000 +0530
>> @@ -793,6 +793,7 @@
>>      case bfd_mach_mipsisa64:
>>      case bfd_mach_mipsisa64r2:
>>      case bfd_mach_mips_sb1:
>> +    case bfd_mach_mips_xlr:
>>        /* FIXME: These should be MIPS3, MIPS4, MIPS16, MIPS32, etc.  */
>>        arch_flags = M_MIPS2;
>>        break;
>> diff -Naur binutils-2.18.orig/bfd/archures.c binutils-2.18/bfd/archures.c
>> --- binutils-2.18.orig/bfd/archures.c    2008-05-27 15:04:04.002777000 
>> +0530
>> +++ binutils-2.18/bfd/archures.c    2008-05-27 15:25:58.000492000 +0530
>> @@ -167,6 +167,7 @@
>>  .#define bfd_mach_mips16        16
>>  .#define bfd_mach_mips5                 5
>>  .#define bfd_mach_mips_sb1              12310201 {* octal 'SB', 01 *}
>> +.#define bfd_mach_mips_xlr              887682   {* decimal 'XLR'  *}
>>  .#define bfd_mach_mipsisa32             32
>>  .#define bfd_mach_mipsisa32r2           33
>>  .#define bfd_mach_mipsisa64             64
>> diff -Naur binutils-2.18.orig/bfd/bfd-in2.h binutils-2.18/bfd/bfd-in2.h
>> --- binutils-2.18.orig/bfd/bfd-in2.h    2008-05-27 15:04:04.002843000 
>> +0530
>> +++ binutils-2.18/bfd/bfd-in2.h    2008-05-27 15:25:58.000539000 +0530
>> @@ -1838,6 +1838,7 @@
>>  #define bfd_mach_mips16                16
>>  #define bfd_mach_mips5                 5
>>  #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
>> +#define bfd_mach_mips_xlr              887682    /* decimal 'XLR'  */
>>  #define bfd_mach_mipsisa32             32
>>  #define bfd_mach_mipsisa32r2           33
>>  #define bfd_mach_mipsisa64             64
>> diff -Naur binutils-2.18.orig/bfd/cpu-mips.c binutils-2.18/bfd/cpu-mips.c
>> --- binutils-2.18.orig/bfd/cpu-mips.c    2008-05-27 15:04:05.001200000 
>> +0530
>> +++ binutils-2.18/bfd/cpu-mips.c    2008-05-27 15:25:58.000718000 +0530
>> @@ -87,6 +87,7 @@
>>    I_mipsisa64,
>>    I_mipsisa64r2,
>>    I_sb1,
>> +  I_xlr,
>>  };
>>  
>>  #define NN(index) (&arch_info_struct[(index) + 1])
>> @@ -119,7 +120,8 @@
>>    N (32, 32, bfd_mach_mipsisa32r2,"mips:isa32r2", FALSE, 
>> NN(I_mipsisa32r2)),
>>    N (64, 64, bfd_mach_mipsisa64,  "mips:isa64",   FALSE, 
>> NN(I_mipsisa64)),
>>    N (64, 64, bfd_mach_mipsisa64r2,"mips:isa64r2", FALSE, 
>> NN(I_mipsisa64r2)),
>> -  N (64, 64, bfd_mach_mips_sb1, "mips:sb1",       FALSE, 0),
>> +  N (64, 64, bfd_mach_mips_sb1, "mips:sb1",       FALSE, NN(I_sb1)),
>> +  N (64, 64, bfd_mach_mips_xlr, "mips:xlr",       FALSE, 0),
>>  };
>>  
>>  /* The default architecture is mips:3000, but with a machine number of
>> diff -Naur binutils-2.18.orig/bfd/doc/archures.texi 
>> binutils-2.18/bfd/doc/archures.texi
>> --- binutils-2.18.orig/bfd/doc/archures.texi    2008-05-27 
>> 15:04:04.000144000 +0530
>> +++ binutils-2.18/bfd/doc/archures.texi    2008-05-27 
>> 15:25:58.000889000 +0530
>> @@ -132,6 +132,7 @@
>>  #define bfd_mach_mips16                16
>>  #define bfd_mach_mips5                 5
>>  #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
>> +#define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
>>  #define bfd_mach_mipsisa32             32
>>  #define bfd_mach_mipsisa32r2           33
>>  #define bfd_mach_mipsisa64             64
>> diff -Naur binutils-2.18.orig/bfd/elfxx-mips.c 
>> binutils-2.18/bfd/elfxx-mips.c
>> --- binutils-2.18.orig/bfd/elfxx-mips.c    2008-05-27 
>> 15:04:09.000526000 +0530
>> +++ binutils-2.18/bfd/elfxx-mips.c    2008-05-27 15:25:58.001064000 +0530
>> @@ -5013,6 +5013,9 @@
>>      case E_MIPS_MACH_SB1:
>>        return bfd_mach_mips_sb1;
>>  
>> +    case E_MIPS_MACH_XLR:
>> +      return bfd_mach_mips_xlr;
>> +
>>      default:
>>        switch (flags & EF_MIPS_ARCH)
>>      {
>> @@ -9177,6 +9180,10 @@
>>        val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
>>        break;
>>  
>> +    case bfd_mach_mips_xlr:
>> +      val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
>> +      break;
>> +
>>      case bfd_mach_mipsisa32:
>>        val = E_MIPS_ARCH_32;
>>        break;
>> @@ -10908,6 +10915,7 @@
>>    /* MIPS64 extensions.  */
>>    { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
>>    { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
>> +  { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
>>  
>>    /* MIPS V extensions.  */
>>    { bfd_mach_mipsisa64, bfd_mach_mips5 },
>> diff -Naur binutils-2.18.orig/binutils/readelf.c 
>> binutils-2.18/binutils/readelf.c
>> --- binutils-2.18.orig/binutils/readelf.c    2008-05-27 
>> 15:06:01.000062000 +0530
>> +++ binutils-2.18/binutils/readelf.c    2008-05-27 15:25:58.001157000 
>> +0530
>> @@ -2170,6 +2170,7 @@
>>          case E_MIPS_MACH_5400: strcat (buf, ", 5400"); break;
>>          case E_MIPS_MACH_5500: strcat (buf, ", 5500"); break;
>>          case E_MIPS_MACH_SB1:  strcat (buf, ", sb1");  break;
>> +        case E_MIPS_MACH_XLR:  strcat (buf, ", xlr");  break;
>>          case E_MIPS_MACH_9000: strcat (buf, ", 9000"); break;
>>          case 0:
>>          /* We simply ignore the field in this case to avoid confusion:
>> diff -Naur binutils-2.18.orig/gas/config/tc-mips.c 
>> binutils-2.18/gas/config/tc-mips.c
>> --- binutils-2.18.orig/gas/config/tc-mips.c    2008-05-27 
>> 15:04:12.002034000 +0530
>> +++ binutils-2.18/gas/config/tc-mips.c    2008-05-27 
>> 15:25:58.001357000 +0530
>> @@ -442,6 +442,7 @@
>>     || mips_opts.arch == CPU_R12000                    \
>>     || mips_opts.arch == CPU_RM7000                    \
>>     || mips_opts.arch == CPU_VR5500                    \
>> +   || mips_opts.arch == CPU_XLR                       \
>>     )
>>  
>>  /* Whether the processor uses hardware interlocks to protect reads
>> @@ -466,6 +467,7 @@
>>      && mips_opts.isa != ISA_MIPS2                     \
>>      && mips_opts.isa != ISA_MIPS3)                    \
>>     || mips_opts.arch == CPU_R4300                     \
>> +   || mips_opts.arch == CPU_XLR                       \
>>     )
>>  
>>  /* Whether the processor uses hardware interlocks to protect reads
>> @@ -5866,6 +5868,39 @@
>>      macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", treg, tempreg, breg);
>>        break;
>>  
>> +    case M_MSGSND: {
>> +      unsigned long temp = (treg << 16) | (0x01);
>> +      /*printf("[%s]: treg = %d, temp = %lx\n", __FUNCTION__, treg, 
>> temp);*/
>> +      macro_build((expressionS *)NULL, "c2", "C", temp);
>> +    }
>> +      /* AT is not used, just return */
>> +      return;
>> +
>> +    case M_MSGLD: {
>> +      unsigned long temp = (0x02);
>> +      macro_build((expressionS *)NULL, "c2", "C", temp);
>> +    }
>> +      /* AT is not used, just return */
>> +      return;
>> +    case M_MSGLD_T: {
>> +      unsigned long temp = (treg << 16) | (0x02);
>> +      macro_build((expressionS *)NULL, "c2", "C", temp);
>> +    }
>> +      /* AT is not used, just return */
>> +      return;
>> +
>> +    case M_MSGWAIT:
>> +      macro_build((expressionS *)NULL, "c2", "C", 3);
>> +      /* AT is not used, just return */
>> +      return;
>> +
>> +    case M_MSGWAIT_T: {
>> +      unsigned long temp = (treg << 16) | 0x03;
>> +      macro_build((expressionS *)NULL, "c2", "C", temp);
>> +    }
>> +      /* AT is not used, just return */
>> +      return;
>> +
>>      case M_J_A:
>>        /* The j instruction may not be used in PIC code, since it
>>       requires an absolute address.  We convert it to a b
>> @@ -14844,6 +14879,9 @@
>>    { "sb1a",           MIPS_CPU_ASE_MIPS3D | MIPS_CPU_ASE_MDMX,
>>                          ISA_MIPS64,    CPU_SB1 },
>>  
>> +  /* RMI Xlr */
>> +  { "xlr",            0,      ISA_MIPS64,     CPU_XLR },
>> +
>>    /* End marker */
>>    { NULL, 0, 0, 0 }
>>  };
>> diff -Naur binutils-2.18.orig/gas/doc/c-mips.texi 
>> binutils-2.18/gas/doc/c-mips.texi
>> --- binutils-2.18.orig/gas/doc/c-mips.texi    2008-05-27 
>> 15:04:15.000641000 +0530
>> +++ binutils-2.18/gas/doc/c-mips.texi    2008-05-27 15:25:58.001418000 
>> +0530
>> @@ -270,7 +270,8 @@
>>  20kc,
>>  25kf,
>>  sb1,
>> -sb1a
>> +sb1a,
>> +xlr
>>  @end quotation
>>  
>>  For compatibility reasons, @samp{@var{n}x} and @samp{@var{b}fx} are
>> diff -Naur binutils-2.18.orig/gas/testsuite/gas/mips/mips.exp 
>> binutils-2.18/gas/testsuite/gas/mips/mips.exp
>> --- binutils-2.18.orig/gas/testsuite/gas/mips/mips.exp    2008-05-27 
>> 15:04:39.001111000 +0530
>> +++ binutils-2.18/gas/testsuite/gas/mips/mips.exp    2008-05-27 
>> 15:25:58.001468000 +0530
>> @@ -361,6 +361,8 @@
>>  mips_arch_create sb1     64    mips64    { mips3d } \
>>              { -march=sb1 -mtune=sb1 } { -mmips:sb1 } \
>>              { mipsisa64sb1-*-* mipsisa64sb1el-*-* }
>> +mips_arch_create xlr     64    mips64    {} \
>> +            { -march=xlr -mtune=xlr } { -mmips:xlr }  
>>  #
>>  # And now begin the actual tests!  VxWorks uses RELA rather than REL
>> @@ -564,6 +566,7 @@
>>      run_dump_test "mips64-mdmx"
>>      run_dump_test "sb1-ext-mdmx"
>>      run_dump_test "sb1-ext-ps"
>> +    run_dump_test "xlr-ext"
>>      }
>>  
>>      run_dump_test "relax"
>> diff -Naur binutils-2.18.orig/gas/testsuite/gas/mips/xlr-ext.d 
>> binutils-2.18/gas/testsuite/gas/mips/xlr-ext.d
>> --- binutils-2.18.orig/gas/testsuite/gas/mips/xlr-ext.d    1970-01-01 
>> 05:30:00.000000000 +0530
>> +++ binutils-2.18/gas/testsuite/gas/mips/xlr-ext.d    2008-05-27 
>> 15:25:58.001681000 +0530
>> @@ -0,0 +1,20 @@
>> +#objdump: -dr --prefix-addresses --show-raw-insn -mmips:xlr
>> +#name: XLRs native MIPS64 extensions
>> +#as: -march=xlr
>> +
>> +.*: +file format .*mips.*
>> +
>> +Disassembly of section .text:
>> +0+0000 <[^>]*> 3c000000     lui    zero,0x0
>> +0+0004 <[^>]*> 8c010001     lw    at,1\(zero\)
>> +0+0008 <[^>]*> 8c020002     lw    v0,2\(zero\)
>> +0+000c <[^>]*> 70221838     daddwc    v1,at,v0
>> +0+0010 <[^>]*> 70230010     ldaddw    v1,at
>> +0+0014 <[^>]*> 70230011     ldaddwu    v1,at
>> +0+0018 <[^>]*> 70230012     ldaddd    v1,at
>> +0+001c <[^>]*> 70230014     swapw    v1,at
>> +0+0020 <[^>]*> 70230015     swapwu    v1,at
>> +0+0024 <[^>]*> 4a000003     c2    0x3
>> +0+0028 <[^>]*> 4a000002     c2    0x2
>> +0+002c <[^>]*> 4a000001     c2    0x1
>> +    \.\.\.
>> diff -Naur binutils-2.18.orig/gas/testsuite/gas/mips/xlr-ext.s 
>> binutils-2.18/gas/testsuite/gas/mips/xlr-ext.s
>> --- binutils-2.18.orig/gas/testsuite/gas/mips/xlr-ext.s    1970-01-01 
>> 05:30:00.000000000 +0530
>> +++ binutils-2.18/gas/testsuite/gas/mips/xlr-ext.s    2008-05-27 
>> 15:25:58.001689000 +0530
>> @@ -0,0 +1,27 @@
>> +# Source file used to test XLR's assembler instructions
>> +
>> +    .set     noreorder
>> +    .set     noat
>> +
>> +    .globl    text_label    .text
>> +text_label:   
>> +
>> +    lui     $0, 0x00
>> +    lw         $1, 0x01
>> +    lw         $2, 0x02
>> +   
>> +    daddwc    $3, $1, $2
>> +   
>> +    ldaddw    $3, $1
>> +    ldaddwu    $3, $1
>> +    ldaddd    $3, $1
>> +
>> +    swapw    $3, $1
>> +    swapwu    $3, $1
>> +   
>> +    msgwait
>> +    msgld    $0
>> +    msgsnd    $0
>> +
>> +# Force at least 8 (non-delay-slot) zero bytes, to make 'objdump' 
>> print ...
>> +    .space  8
>> diff -Naur binutils-2.18.orig/include/elf/mips.h 
>> binutils-2.18/include/elf/mips.h
>> --- binutils-2.18.orig/include/elf/mips.h    2008-05-27 
>> 15:04:58.000419000 +0530
>> +++ binutils-2.18/include/elf/mips.h    2008-05-27 15:25:58.001517000 
>> +0530
>> @@ -213,6 +213,7 @@
>>  #define E_MIPS_MACH_4120    0x00870000
>>  #define E_MIPS_MACH_4111    0x00880000
>>  #define E_MIPS_MACH_SB1         0x008a0000
>> +#define E_MIPS_MACH_XLR         0x008c0000
>>  #define E_MIPS_MACH_5400    0x00910000
>>  #define E_MIPS_MACH_5500    0x00980000
>>  #define E_MIPS_MACH_9000    0x00990000
>> diff -Naur binutils-2.18.orig/include/opcode/mips.h 
>> binutils-2.18/include/opcode/mips.h
>> --- binutils-2.18.orig/include/opcode/mips.h    2008-05-27 
>> 15:04:59.000286000 +0530
>> +++ binutils-2.18/include/opcode/mips.h    2008-05-27 
>> 15:45:52.000050000 +0530
>> @@ -520,6 +520,8 @@
>>  #define INSN_5400          0x01000000
>>  /* NEC VR5500 instruction.  */
>>  #define INSN_5500          0x02000000
>> +/* RMI Xlr instruction */
>> +#define INSN_XLR                    0x04000000
>>  
>>  /* MDMX ASE */  #define INSN_MDMX                 0x04000000
>> @@ -576,6 +578,7 @@
>>  #define CPU_MIPS64      64
>>  #define CPU_MIPS64R2    65
>>  #define CPU_SB1         12310201        /* octal 'SB', 01.  */
>> +#define CPU_XLR         887682       /* decimal 'XLR'   */
>>  
>>  /* Test for membership in an ISA including chip specific ISAs.  INSN
>>     is pointer to an element of the opcode table; ISA is the specified
>> @@ -597,6 +600,7 @@
>>       || (cpu == CPU_VR4120 && ((insn)->membership & INSN_4120) != 
>> 0)    \
>>       || (cpu == CPU_VR5400 && ((insn)->membership & INSN_5400) != 
>> 0)    \
>>       || (cpu == CPU_VR5500 && ((insn)->membership & INSN_5500) != 
>> 0)    \
>> +     || (cpu == CPU_XLR && ((insn)->membership & INSN_XLR) != 0) \
>>       || 0)    /* Please keep this term for easier source merging.  */
>>  
>>  /* This is a list of macro expanded instructions.
>> @@ -730,6 +734,11 @@
>>    M_LWR_AB,
>>    M_LWU_AB,
>>    M_MOVE,
>> +  M_MSGSND,
>> +  M_MSGLD,
>> +  M_MSGLD_T,
>> +  M_MSGWAIT,
>> +  M_MSGWAIT_T,
>>    M_MUL,
>>    M_MUL_I,
>>    M_MULO,
>> diff -Naur binutils-2.18.orig/opcodes/mips-dis.c 
>> binutils-2.18/opcodes/mips-dis.c
>> --- binutils-2.18.orig/opcodes/mips-dis.c    2008-05-27 
>> 15:05:05.000848000 +0530
>> +++ binutils-2.18/opcodes/mips-dis.c    2008-05-27 15:52:18.000047000 
>> +0530
>> @@ -295,6 +295,56 @@
>>    { 29, 3, "c0_datahi_d"    },
>>  };
>>  
>> +/* Xlr cop0 register names */
>> +static const char * const mips_cp0_names_xlr[32] = {
>> +  "c0_index",     "c0_random",    "c0_entrylo0",  "c0_entrylo1",
>> +  "c0_context",   "c0_pagemask",  "c0_wired",     "$7",
>> +  "c0_badvaddr",  "c0_count",     "c0_entryhi",   "c0_compare",
>> +  "c0_status",    "c0_cause",     "c0_epc",       "c0_prid",
>> +  "c0_config",    "c0_lladdr",    "c0_watchlo",   "c0_watchhi",
>> +  "c0_xcontext",  "$21",          "$22",          "c0_debug",
>> +  "c0_depc",      "c0_perfcnt",   "c0_errctl",    "c0_cacheerr_i",
>> +  "c0_taglo_i",   "c0_taghi_i",   "c0_errorepc",  "c0_desave",
>> +};
>> +
>> +/* XLR's CP0 Select Registers */
>> +
>> +static const struct mips_cp0sel_name mips_cp0sel_names_xlr[] = {
>> +  {  9, 6, "c0_extintreq"       },
>> +  {  9, 7, "c0_extintmask"      },
>> +  { 15, 1, "c0_ebase"           },
>> +  { 16, 1, "c0_config1"         },
>> +  { 16, 2, "c0_config2"         },
>> +  { 16, 3, "c0_config3"         },
>> +  { 16, 7, "c0_procid2"         },
>> +  { 18, 1, "c0_watchlo,1"       },
>> +  { 18, 2, "c0_watchlo,2"       },
>> +  { 18, 3, "c0_watchlo,3"       },
>> +  { 18, 4, "c0_watchlo,4"       },
>> +  { 18, 5, "c0_watchlo,5"       },
>> +  { 18, 6, "c0_watchlo,6"       },
>> +  { 18, 7, "c0_watchlo,7"       },
>> +  { 19, 1, "c0_watchhi,1"       },
>> +  { 19, 2, "c0_watchhi,2"       },
>> +  { 19, 3, "c0_watchhi,3"       },
>> +  { 19, 4, "c0_watchhi,4"       },
>> +  { 19, 5, "c0_watchhi,5"       },
>> +  { 19, 6, "c0_watchhi,6"       },
>> +  { 19, 7, "c0_watchhi,7"       },
>> +  { 25, 1, "c0_perfcnt,1"       },
>> +  { 25, 2, "c0_perfcnt,2"       },
>> +  { 25, 3, "c0_perfcnt,3"       },
>> +  { 25, 4, "c0_perfcnt,4"       },
>> +  { 25, 5, "c0_perfcnt,5"       },
>> +  { 25, 6, "c0_perfcnt,6"       },
>> +  { 25, 7, "c0_perfcnt,7"       },
>> +  { 27, 1, "c0_cacheerr,1"      },
>> +  { 27, 2, "c0_cacheerr,2"      },
>> +  { 27, 3, "c0_cacheerr,3"      },
>> +  { 28, 1, "c0_datalo"          },
>> +  { 29, 1, "c0_datahi"          }
>> +};
>> +
>>  static const char * const mips_hwr_names_numeric[32] =
>>  {
>>    "$0",   "$1",   "$2",   "$3",   "$4",   "$5",   "$6",   "$7",
>> @@ -426,6 +476,12 @@
>>      mips_cp0sel_names_sb1, ARRAY_SIZE (mips_cp0sel_names_sb1),
>>      mips_hwr_names_numeric },
>>  
>> +  { "xlr", 1, bfd_mach_mips_xlr, CPU_XLR,
>> +    ISA_MIPS64 | INSN_XLR,
>> +    mips_cp0_names_xlr,
>> +    mips_cp0sel_names_xlr, ARRAY_SIZE (mips_cp0sel_names_xlr),
>> +    mips_hwr_names_numeric },
>> +
>>    /* This entry, mips16, is here only for ISA/processor selection; do
>>       not print its name.  */
>>    { "",        1, bfd_mach_mips16, CPU_MIPS16, ISA_MIPS3 | INSN_MIPS16,
>> diff -Naur binutils-2.18.orig/opcodes/mips-opc.c 
>> binutils-2.18/opcodes/mips-opc.c
>> --- binutils-2.18.orig/opcodes/mips-opc.c    2008-05-27 
>> 15:05:05.000890000 +0530
>> +++ binutils-2.18/opcodes/mips-opc.c    2008-05-27 15:25:58.001644000 
>> +0530
>> @@ -113,6 +113,7 @@
>>  #define N5    (INSN_5400 | INSN_5500)
>>  #define N54    INSN_5400
>>  #define N55    INSN_5500
>> +#define XLR     INSN_XLR
>>  
>>  #define G1      (T3             \
>>                   )
>> @@ -513,6 +514,7 @@
>>  {"daddiu",  "t,r,j",    0x64000000, 0xfc000000, WR_t|RD_s,        
>> 0,        I3    },
>>  {"daddu",   "d,v,t",    0x0000002d, 0xfc0007ff, 
>> WR_d|RD_s|RD_t,        0,        I3    },
>>  {"daddu",   "t,r,I",    0,    (int) M_DADDU_I,    INSN_MACRO,        
>> 0,        I3    },
>> +{"daddwc",  "d,s,t",    0x70000038, 0xfc0007ff, 
>> WR_d|RD_s|RD_t|WR_C0|RD_C0,0,        XLR    },
>>  {"dbreak",  "",        0x7000003f, 0xffffffff,    0,            
>> 0,        N5    },
>>  {"dclo",    "U,s",      0x70000025, 0xfc0007ff, RD_s|WR_d|WR_t,     
>> 0,        I64|N55 },
>>  {"dclz",    "U,s",      0x70000024, 0xfc0007ff, RD_s|WR_d|WR_t,     
>> 0,        I64|N55 },
>> @@ -688,6 +690,9 @@
>>  {"ld",        "t,o(b)",   0xdc000000, 0xfc000000, WR_t|RD_b,        
>> 0,        I3    },
>>  {"ld",      "t,o(b)",    0,    (int) M_LD_OB,    INSN_MACRO,        
>> 0,        I1    },
>>  {"ld",      "t,A(b)",    0,    (int) M_LD_AB,    INSN_MACRO,        
>> 0,        I1    },
>> +{"ldaddw",  "t,b",     0x70000010, 0xfc00ffff,  
>> SM|RD_t|WR_t|RD_b,      0,            XLR    },
>> +{"ldaddwu", "t,b",     0x70000011, 0xfc00ffff,  
>> SM|RD_t|WR_t|RD_b,      0,            XLR     },
>> +{"ldaddd",  "t,b",     0x70000012, 0xfc00ffff,  
>> SM|RD_t|WR_t|RD_b,      0,            XLR    },
>>  {"ldc1",    "T,o(b)",    0xd4000000, 0xfc000000, 
>> CLD|RD_b|WR_T|FP_D,    0,        I2    },
>>  {"ldc1",    "E,o(b)",    0xd4000000, 0xfc000000, 
>> CLD|RD_b|WR_T|FP_D,    0,        I2    },
>>  {"ldc1",    "T,A(b)",    0,    (int) M_LDC1_AB,    INSN_MACRO,        
>> 0,        I2    },
>> @@ -816,6 +821,7 @@
>>  {"mflo",    "d",    0x00000012, 0xffff07ff,    WR_d|RD_LO,        
>> 0,        I1    },
>>  {"mflo",    "d,9",    0x00000012, 0xff9f07ff, WR_d|RD_LO,        
>> 0,        D32    },
>>  {"mflhxu",  "d",    0x00000052, 0xffff07ff,    WR_d|MOD_HILO,        
>> 0,        SMT    },
>> +{"mfcr",    "t,s",      0x70000018, 0xfc00ffff, WR_t,            
>> 0,        XLR     },
>>  {"min.ob",  "X,Y,Q",    0x78000006, 0xfc20003f,    
>> WR_D|RD_S|RD_T|FP_D,    0,        MX|SB1    },
>>  {"min.ob",  "D,S,T",    0x4ac00006, 0xffe0003f,    
>> WR_D|RD_S|RD_T,        0,        N54    },
>>  {"min.ob",  "D,S,T[e]",    0x48000006, 0xfe20003f,    
>> WR_D|RD_S|RD_T,        0,        N54    },
>> @@ -856,6 +862,11 @@
>>  {"msachiu", "d,s,t",    0x000003d9, 0xfc0007ff,    
>> RD_s|RD_t|WR_HILO|WR_d,    0,        N5    },
>>  /* move is at the top of the table.  */
>>  {"msgn.qh", "X,Y,Q",    0x78200000, 0xfc20003f,    
>> WR_D|RD_S|RD_T|FP_D,    0,        MX    },
>> +{"msgsnd",  "t",        0,    (int) M_MSGSND,   INSN_MACRO,        
>> 0,        XLR     },
>> +{"msgld",   "",         0,    (int) M_MSGLD,    INSN_MACRO,        
>> 0,        XLR     },
>> +{"msgld",   "t",        0,    (int) M_MSGLD_T,  INSN_MACRO,        
>> 0,        XLR     },
>> +{"msgwait", "",         0,    (int) M_MSGWAIT,  INSN_MACRO,        
>> 0,        XLR     },
>> +{"msgwait", "t",        0,    (int) M_MSGWAIT_T,INSN_MACRO,        
>> 0,        XLR     },
>>  {"msub.d",  "D,R,S,T",    0x4c000029, 0xfc00003f, 
>> RD_R|RD_S|RD_T|WR_D|FP_D, 0,        I4|I33    },
>>  {"msub.s",  "D,R,S,T",    0x4c000028, 0xfc00003f, 
>> RD_R|RD_S|RD_T|WR_D|FP_S, 0,        I4|I33    },
>>  {"msub.ps", "D,R,S,T",    0x4c00002e, 0xfc00003f, 
>> RD_R|RD_S|RD_T|WR_D|FP_D, 0,        I5|I33    },
>> @@ -882,6 +893,7 @@
>>  {"mthi",    "s,7",    0x00000011, 0xfc1fe7ff, RD_s|WR_HI,        
>> 0,        D32    },
>>  {"mtlo",    "s",    0x00000013, 0xfc1fffff,    RD_s|WR_LO,        
>> 0,        I1    },
>>  {"mtlo",    "s,7",    0x00000013, 0xfc1fe7ff, RD_s|WR_LO,        
>> 0,        D32    },
>> +{"mtcr",    "t,s",      0x70000019, 0xfc00ffff, RD_t,            
>> 0,        XLR     },
>>  {"mtlhx",   "s",    0x00000053, 0xfc1fffff,    RD_s|MOD_HILO,        
>> 0,        SMT    },
>>  {"mttc0",   "t,G",    0x41800000, 0xffe007ff, 
>> TRAP|COD|RD_t|WR_C0|WR_CC, 0,        MT32    },
>>  {"mttc0",   "t,+D",    0x41800000, 0xffe007f8, 
>> TRAP|COD|RD_t|WR_C0|WR_CC, 0,        MT32    },
>> @@ -1175,6 +1187,9 @@
>>  {"suxc1",   "S,t(b)",   0x4c00000d, 0xfc0007ff, SM|RD_S|RD_t|RD_b,    
>> 0,        I5|I33|N55},
>>  {"sw",      "t,o(b)",    0xac000000, 0xfc000000,    
>> SM|RD_t|RD_b,        0,        I1    },
>>  {"sw",      "t,A(b)",    0,    (int) M_SW_AB,    INSN_MACRO,        
>> 0,        I1    },
>> +{"swapw",   "t,b",    0x70000014, 0xfc00ffff, SM|RD_t|WR_t|RD_b,    
>> 0,        XLR     },
>> +{"swapwu",  "t,b",    0x70000015, 0xfc00ffff, SM|RD_t|WR_t|RD_b,    
>> 0,        XLR     },
>> +{"swapd",   "t,b",    0x70000016, 0xfc00ffff, SM|RD_t|WR_t|RD_b,    
>> 0,        XLR     },
>>  {"swc0",    "E,o(b)",    0xe0000000, 0xfc000000,    
>> SM|RD_C0|RD_b,        0,        I1    },
>>  {"swc0",    "E,A(b)",    0,    (int) M_SWC0_AB,    INSN_MACRO,        
>> 0,        I1    },
>>  {"swc1",    "T,o(b)",    0xe4000000, 0xfc000000,    
>> SM|RD_T|RD_b|FP_S,    0,        I1    },
> 
> 

-- 
The bulk of the worldÂ’s knowledge is an imaginary construction. -Helen Keller



More information about the Binutils mailing list