Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: David Ung <davidu@mips.com>
To: cgd@broadcom.com
Cc: Andrew Cagney <cagney@gnu.org>,
	gdb-patches@sources.redhat.com,  nigel@mips.com
Subject: Re: MIPS32 / MIPS64 release 2 support in simulator
Date: Wed, 24 Nov 2004 17:08:00 -0000	[thread overview]
Message-ID: <1101316048.29221.240.camel@stockwell.mips.com> (raw)
In-Reply-To: <yov5actqrkih.fsf@xl-sj1-04.sj.broadcom.com>

[-- Attachment #1: Type: text/plain, Size: 42568 bytes --]

On Tue, 2004-11-09 at 17:37, cgd@broadcom.com wrote:
> At Tue, 09 Nov 2004 11:59:28 -0500, Andrew Cagney wrote:
> > > Once the legal issues are resolved on your end, will be it be
> > > acceptable from your POV to merge them all into mips.igen?
> > > Or do you believe they should always be separate?
> > 
> > That's a technical question, as I shouldn't, I don't care!
> 
> actually, i didn't ask that as a technical question.  it's a question
> about the state of the expected copyright/license on mips.igen once
> the any current issues are resolved.
> 
> from your response, it sounds like you think that merging everything
> together would be not-disallowed-by-you.
> 
> 
> so, mips folks, i think the only solution for now is:
> 
> (1) mark everything mips32/mips64 in mips.igen with additional
>     mips32r2/mips64r2 markers, but
> 
> (2) keep the new instructions in a separate file, which i can merge
>     later.
> 
> 
> 
> chris

ok..  here we go again..  
:)

whenever you are ready Andrew.

David

Index: ChangeLog
===================================================================
RCS file: /cvs/uberbaum/sim/mips/ChangeLog,v
retrieving revision 1.109
diff -c -p -r1.109 ChangeLog
*** ChangeLog	24 Sep 2004 20:28:24 -0000	1.109
--- ChangeLog	24 Nov 2004 17:02:01 -0000
***************
*** 1,3 ****
--- 1,18 ----
+ 2004-11-24  David Ung  <davidu@mips.com>
+ 
+ 	* mips.igen: Added models mips32r2 and mips64r2. Tag all existing
+ 	instructions which are applicable to mips32r2/mips64r2.
+ 
+ 	* mips3264r2.igen: New file for mips 32/64 revision 2 specific
+ 	instructions. 
+ 
+ 	* vr.igen: The following instructions: ror, rorv, dror, dror32,
+ 	drorv and their corresponding worker functions do_ror/dodror are
+ 	moved into mips.igen. 
+ 	
+ 	* configure.in: Add targets mipsisa32r2*-*-* and mipsisa64r2*-*-*
+ 	to use mips32r2/64r2 models. 
+ 
  2004-09-24  Monika Chaddha  <monika@acmet.com>
  	
  	Committed by Andrew Cagney.
Index: configure.in
===================================================================
RCS file: /cvs/uberbaum/sim/mips/configure.in,v
retrieving revision 1.8
diff -c -p -r1.8 configure.in
*** configure.in	19 Aug 2004 07:02:04 -0000	1.8
--- configure.in	24 Nov 2004 17:02:01 -0000
*************** case "${target}" in
*** 141,146 ****
--- 141,151 ----
  			sim_igen_filter="32,64,f"
  			sim_m16_filter="16"
  			;;
+   mipsisa32r2*-*-*)	sim_gen=IGEN
+ 		        sim_igen_machine="-M mips32r2"
+ 			sim_igen_filter="32,f"
+ 			sim_mach_default="mipsisa32r2"
+ 			;;
    mipsisa32*-*-*)	sim_gen=IGEN
  		        sim_igen_machine="-M mips32"
  			sim_igen_filter="32,f"
*************** case "${target}" in
*** 151,156 ****
--- 156,166 ----
  			sim_igen_filter="32,64,f"
  			sim_mach_default="mips_sb1"
  			;;
+   mipsisa64r2*-*-*)	sim_gen=IGEN
+ 		        sim_igen_machine="-M mips64r2,mips3d"
+ 			sim_igen_filter="32,64,f"
+ 			sim_mach_default="mipsisa64r2"
+ 			;;
    mipsisa64*-*-*)	sim_gen=IGEN
  		        sim_igen_machine="-M mips64,mips3d"
  			sim_igen_filter="32,64,f"
Index: mips.igen
===================================================================
RCS file: /cvs/uberbaum/sim/mips/mips.igen,v
retrieving revision 1.57
diff -c -p -r1.57 mips.igen
*** mips.igen	10 Apr 2004 06:51:49 -0000	1.57
--- mips.igen	24 Nov 2004 17:02:01 -0000
***************
*** 45,51 ****
--- 45,53 ----
  :model:::mipsIV:mips8000:
  :model:::mipsV:mipsisaV:
  :model:::mips32:mipsisa32:
+ :model:::mips32r2:mipsisa32r2:
  :model:::mips64:mipsisa64:
+ :model:::mips64r2:mipsisa64r2:
  
  //  Vendor ISAs:
  //
***************
*** 132,137 ****
--- 134,140 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 141,146 ****
--- 144,150 ----
  
  :function:::address_word:loadstore_ea:address_word base, address_word
offset
  *mips64:
+ *mips64r2:
  {
  #if 0 /* XXX FIXME: enable this only after some additional testing. 
*/
    /* If in user mode and UX is not set, use 32-bit compatibility
effective
***************
*** 178,183 ****
--- 182,188 ----
  
  :function:::int:not_word_value:unsigned_word value
  *mips32:
+ *mips32r2:
  {
    /* On MIPS32, since registers are 32-bits, there's no check to be
done.  */
    return 0;
***************
*** 185,190 ****
--- 190,196 ----
  
  :function:::int:not_word_value:unsigned_word value
  *mips64:
+ *mips64r2:
  {
    return ((value >> 32) != (value & 0x80000000 ? 0xFFFFFFFF : 0));
  }
***************
*** 212,218 ****
--- 218,226 ----
  
  :function:::void:unpredictable:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  {
    unpredictable_action (CPU, CIA);
  }
***************
*** 300,306 ****
--- 308,316 ----
  
  :function:::int:check_mt_hilo:hilo_history *history
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *r3900:
  {
    signed64 time = sim_events_time (SD);
***************
*** 322,328 ****
--- 332,340 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 392,398 ****
--- 404,412 ----
  
  :function:::int:check_mult_hilo:hilo_history *hi, hilo_history *lo
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *r3900:
  {
    /* FIXME: could record the fact that a stall occured if we want */
***************
*** 445,451 ****
--- 459,467 ----
  
  :function:::int:check_div_hilo:hilo_history *hi, hilo_history *lo
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  {
    signed64 time = sim_events_time (SD);
    hi->op.timestamp = time;
***************
*** 468,479 ****
--- 484,498 ----
  *mipsV:
  *vr4100:
  *vr5000:
+ *vr5400:
+ *vr5500:
  {
    // The check should be similar to mips64 for any with PX/UX bit
equivalents.
  }
  
  :function:::void:check_u64:instruction_word insn
  *mips64:
+ *mips64r2:
  {
  #if 0 /* XXX FIXME: enable this only after some additional testing. 
*/
    if (UserMode && (SR & (status_UX|status_PX)) == 0)
***************
*** 486,492 ****
  //
  // MIPS Architecture:
  //
! //        CPU Instruction Set (mipsI - mipsV, mips32, mips64)
  //
  
  
--- 505,511 ----
  //
  // MIPS Architecture:
  //
! //        CPU Instruction Set (mipsI - mipsV, mips32/r2, mips64/r2)
  //
  
  
***************
*** 499,505 ****
--- 518,526 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 525,531 ****
--- 546,554 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 560,566 ****
--- 583,591 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 587,593 ****
--- 612,620 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 612,618 ****
--- 639,647 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 630,636 ****
--- 659,667 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 650,656 ****
--- 681,689 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 671,677 ****
--- 704,712 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 695,701 ****
--- 730,738 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 717,723 ****
--- 754,762 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 741,747 ****
--- 780,788 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 769,775 ****
--- 810,818 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 793,799 ****
--- 836,844 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 814,820 ****
--- 859,867 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 840,846 ****
--- 887,895 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 863,869 ****
--- 912,920 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 887,893 ****
--- 938,946 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 909,915 ****
--- 962,970 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 935,941 ****
--- 990,998 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 961,967 ****
--- 1018,1026 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 987,993 ****
--- 1046,1054 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 1008,1014 ****
--- 1069,1077 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 1032,1038 ****
--- 1095,1103 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 1068,1074 ****
--- 1133,1141 ----
  011100,5.RS,5.RT,5.RD,00000,100001:SPECIAL2:32::CLO
  "clo r<RD>, r<RS>"
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr5500:
  {
    unsigned32 temp = GPR[RS];
***************
*** 1093,1099 ****
--- 1160,1168 ----
  011100,5.RS,5.RT,5.RD,00000,100000:SPECIAL2:32::CLZ
  "clz r<RD>, r<RS>"
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr5500:
  {
    unsigned32 temp = GPR[RS];
***************
*** 1121,1126 ****
--- 1190,1196 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 1142,1147 ****
--- 1212,1218 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 1170,1175 ****
--- 1241,1247 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 1192,1197 ****
--- 1264,1270 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 1204,1209 ****
--- 1277,1283 ----
  011100,5.RS,5.RT,5.RD,00000,100101:SPECIAL2:64::DCLO
  "dclo r<RD>, r<RS>"
  *mips64:
+ *mips64r2:
  *vr5500:
  {
    unsigned64 temp = GPR[RS];
***************
*** 1228,1233 ****
--- 1302,1308 ----
  011100,5.RS,5.RT,5.RD,00000,100100:SPECIAL2:64::DCLZ
  "dclz r<RD>, r<RS>"
  *mips64:
+ *mips64r2:
  *vr5500:
  {
    unsigned64 temp = GPR[RS];
***************
*** 1285,1290 ****
--- 1360,1366 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 1325,1330 ****
--- 1401,1407 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 1332,1339 ****
    do_ddivu (SD_, RS, RT);
  }
  
- 
- 
  :function:::void:do_div:int rs, int rt
  {
    check_div_hilo (SD_, HIHISTORY, LOHISTORY);
--- 1409,1414 ----
***************
*** 1368,1374 ****
--- 1443,1451 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 1407,1413 ****
--- 1484,1492 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 1416,1422 ****
  }
  
  
- 
  :function:::void:do_dmultx:int rs, int rt, int rd, int signed_p
  {
    unsigned64 lo;
--- 1495,1500 ----
***************
*** 1488,1493 ****
--- 1566,1572 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  {
    check_u64 (SD_, instruction_0);
***************
*** 1516,1521 ****
--- 1595,1601 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  {
    check_u64 (SD_, instruction_0);
***************
*** 1531,1536 ****
--- 1611,1659 ----
    do_dmultu (SD_, RS, RT, RD);
  }
  
+ 
+ :function:::unsigned64:do_dror:unsigned64 x,unsigned64 y
+ {
+   unsigned64 result;
+ 
+   y &= 63;
+   TRACE_ALU_INPUT2 (x, y);
+   result = ROTR64 (x, y);
+   TRACE_ALU_RESULT (result);
+   return result;
+ }
+ 
+ 000000,00001,5.RT,5.RD,5.SHIFT,111010::64::DROR
+ "dror r<RD>, r<RT>, <SHIFT>"
+ *mips64r2:
+ *vr5400:
+ *vr5500:
+ {
+   check_u64 (SD_, instruction_0);
+   GPR[RD] = do_dror (SD_, GPR[RT], SHIFT);
+ }
+ 
+ 000000,00001,5.RT,5.RD,5.SHIFT,111110::64::DROR32
+ "dror32 r<RD>, r<RT>, <SHIFT>"
+ *mips64r2:
+ *vr5400:
+ *vr5500:
+ {
+   check_u64 (SD_, instruction_0);
+   GPR[RD] = do_dror (SD_, GPR[RT], SHIFT + 32);
+ }
+ 
+ 000000,5.RS,5.RT,5.RD,00001,010110::64::DRORV
+ "drorv r<RD>, r<RT>, r<RS>"
+ *mips64r2:
+ *vr5400:
+ *vr5500:
+ {
+   check_u64 (SD_, instruction_0);
+   GPR[RD] = do_dror (SD_, GPR[RT], GPR[RS]);
+ }
+ 
+ 
  :function:::void:do_dsll:int rt, int rd, int shift
  {
    TRACE_ALU_INPUT2 (GPR[rt], shift);
***************
*** 1544,1549 ****
--- 1667,1673 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 1558,1563 ****
--- 1682,1688 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 1582,1587 ****
--- 1707,1713 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 1603,1608 ****
--- 1729,1735 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 1617,1622 ****
--- 1744,1750 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 1642,1647 ****
--- 1770,1776 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 1663,1668 ****
--- 1792,1798 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 1677,1682 ****
--- 1807,1813 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 1704,1709 ****
--- 1835,1841 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 1718,1723 ****
--- 1850,1856 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 1745,1750 ****
--- 1878,1884 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 1761,1767 ****
--- 1895,1903 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 1781,1787 ****
--- 1917,1925 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 1802,1808 ****
--- 1940,1948 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 1821,1827 ****
--- 1961,1969 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 1948,1954 ****
--- 2090,2098 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 1965,1971 ****
--- 2109,2117 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 1980,1985 ****
--- 2126,2132 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 1995,2001 ****
--- 2142,2150 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 2012,2017 ****
--- 2161,2167 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 2026,2031 ****
--- 2176,2182 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 2042,2048 ****
--- 2193,2201 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 2059,2065 ****
--- 2212,2220 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 2075,2081 ****
--- 2230,2238 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 2117,2122 ****
--- 2274,2280 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 2154,2160 ****
--- 2312,2320 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 2173,2179 ****
--- 2333,2341 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 2190,2196 ****
--- 2352,2360 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 2207,2213 ****
--- 2371,2379 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 2224,2230 ****
--- 2390,2398 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 2239,2244 ****
--- 2407,2413 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 2251,2257 ****
--- 2420,2428 ----
  011100,5.RS,5.RT,00000,00000,000000:SPECIAL2:32::MADD
  "madd r<RS>, r<RT>"
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr5500:
  {
    signed64 temp;
***************
*** 2271,2277 ****
--- 2442,2450 ----
  011100,5.RS,5.RT,00000,00000,000001:SPECIAL2:32::MADDU
  "maddu r<RS>, r<RT>"
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr5500:
  {
    unsigned64 temp;
***************
*** 2303,2309 ****
--- 2476,2484 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 2329,2335 ****
--- 2504,2512 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 2344,2350 ****
--- 2521,2529 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr5000:
  {
    if (GPR[RT] != 0)
***************
*** 2361,2367 ****
--- 2540,2548 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr5000:
  {
    if (GPR[RT] == 0)
***************
*** 2376,2382 ****
--- 2557,2565 ----
  011100,5.RS,5.RT,00000,00000,000100:SPECIAL2:32::MSUB
  "msub r<RS>, r<RT>"
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr5500:
  {
    signed64 temp;
***************
*** 2396,2402 ****
--- 2579,2587 ----
  011100,5.RS,5.RT,00000,00000,000101:SPECIAL2:32::MSUBU
  "msubu r<RS>, r<RT>"
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr5500:
  {
    unsigned64 temp;
***************
*** 2421,2427 ****
--- 2606,2614 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 2440,2446 ****
--- 2627,2635 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 2454,2460 ****
--- 2643,2651 ----
  011100,5.RS,5.RT,5.RD,00000,000010:SPECIAL2:32::MUL
  "mul r<RD>, r<RS>, r<RT>"
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr5500:
  {
    signed64 prod;
***************
*** 2493,2499 ****
--- 2684,2692 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  {
    do_mult (SD_, RS, RT, 0);
***************
*** 2534,2540 ****
--- 2727,2735 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  {
    do_multu (SD_, RS, RT, 0);
***************
*** 2565,2571 ****
--- 2760,2768 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 2589,2595 ****
--- 2786,2794 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 2614,2620 ****
--- 2813,2821 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 2628,2634 ****
--- 2829,2837 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr5000:
  {
    address_word base = GPR[BASE];
***************
*** 2645,2650 ****
--- 2848,2885 ----
  }
  
  
+ :function:::unsigned64:do_ror:unsigned32 x,unsigned32 y
+ {
+   unsigned64 result;
+ 
+   y &= 31;
+   TRACE_ALU_INPUT2 (x, y);
+   result = EXTEND32 (ROTR32 (x, y));
+   TRACE_ALU_RESULT (result);
+   return result;
+ }
+ 
+ 000000,00001,5.RT,5.RD,5.SHIFT,000010::32::ROR
+ "ror r<RD>, r<RT>, <SHIFT>"
+ *mips32r2:
+ *mips64r2:
+ *vr5400:
+ *vr5500:
+ {
+   GPR[RD] = do_ror (SD_, GPR[RT], SHIFT);
+ }
+ 
+ 000000,5.RS,5.RT,5.RD,00001,000110::32::RORV
+ "rorv r<RD>, r<RT>, r<RS>"
+ *mips32r2:
+ *mips64r2:
+ *vr5400:
+ *vr5500:
+ {
+   GPR[RD] = do_ror (SD_, GPR[RT], GPR[RS]);
+ }
+ 
+ 
  :function:::void:do_store:unsigned access, address_word base,
address_word offset, unsigned_word word
  {
    address_word mask = (WITH_TARGET_WORD_BITSIZE == 64 ? 0x7 : 0x3);
***************
*** 2743,2749 ****
--- 2978,2986 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 2759,2765 ****
--- 2996,3004 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 2802,2807 ****
--- 3041,3047 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 2840,2845 ****
--- 3080,3086 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 2855,2861 ****
--- 3096,3104 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 2869,2874 ****
--- 3112,3118 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 2883,2888 ****
--- 3127,3133 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 2891,2896 ****
--- 3136,3142 ----
  }
  
  
+ 
  101001,5.BASE,5.RT,16.OFFSET:NORMAL:32::SH
  "sh r<RT>, <OFFSET>(r<BASE>)"
  *mipsI:
***************
*** 2899,2905 ****
--- 3145,3153 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 2939,2945 ****
--- 3187,3195 ----
  "ssnop":RD == 0 && RT == 0 && SHIFT == 1
  "sll r<RD>, r<RT>, <SHIFT>"
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  {
    /* Skip shift for NOP and SSNOP, so that there won't be lots of
       extraneous trace output.  */
***************
*** 2965,2971 ****
--- 3215,3223 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 2989,2995 ****
--- 3241,3249 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 3013,3019 ****
--- 3267,3275 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 3037,3043 ****
--- 3293,3301 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 3062,3068 ****
--- 3320,3328 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 3089,3095 ****
--- 3349,3357 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 3118,3124 ****
--- 3380,3388 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 3146,3152 ****
--- 3410,3418 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 3174,3180 ****
--- 3440,3448 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 3191,3197 ****
--- 3459,3467 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 3225,3231 ****
--- 3495,3503 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 3242,3248 ****
--- 3514,3522 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *r3900:
  *vr5000:
***************
*** 3259,3265 ****
--- 3533,3541 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 3276,3282 ****
--- 3552,3560 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 3293,3299 ****
--- 3571,3579 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 3310,3316 ****
--- 3590,3598 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 3327,3333 ****
--- 3609,3617 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 3343,3349 ****
--- 3627,3635 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 3359,3365 ****
--- 3645,3653 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 3375,3381 ****
--- 3663,3671 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 3391,3397 ****
--- 3681,3689 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 3407,3413 ****
--- 3699,3707 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 3423,3429 ****
--- 3717,3725 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 3439,3445 ****
--- 3735,3743 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 3455,3461 ****
--- 3753,3761 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 3471,3477 ****
--- 3771,3779 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 3487,3493 ****
--- 3789,3797 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 3503,3509 ****
--- 3807,3815 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 3519,3525 ****
--- 3825,3833 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 3543,3549 ****
--- 3851,3859 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 3567,3573 ****
--- 3877,3885 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 3650,3655 ****
--- 3962,3968 ----
  *mipsIII:
  *mipsIV:
  *mips32:
+ *mips32r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 3663,3668 ****
--- 3976,3982 ----
  :function:::void:check_fmt_p:int fmt, instruction_word insn
  *mipsV:
  *mips64:
+ *mips64r2:
  {
    if ((fmt != fmt_single) && (fmt != fmt_double)
        && (fmt != fmt_ps || (UserMode && (SR & (status_UX|status_PX))
== 0)))
***************
*** 3683,3689 ****
--- 3997,4005 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 3703,3708 ****
--- 4019,4025 ----
  :function:::unsigned64:do_load_double:address_word base, address_word
offset
  *mipsII:
  *mips32:
+ *mips32r2:
  {
    int bigendian = (BigEndianCPU ? ! ReverseEndian : ReverseEndian);
    address_word vaddr;
***************
*** 3739,3744 ****
--- 4056,4062 ----
  :function:::void:do_store_double:address_word base, address_word
offset, unsigned64 v
  *mipsII:
  *mips32:
+ *mips32r2:
  {
    int bigendian = (BigEndianCPU ? ! ReverseEndian : ReverseEndian);
    address_word vaddr;
***************
*** 3772,3778 ****
--- 4090,4098 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 3793,3799 ****
--- 4113,4121 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 3809,3814 ****
--- 4131,4137 ----
  "alnv.ps f<FD>, f<FS>, f<FT>, r<RS>"
  *mipsV:
  *mips64:
+ *mips64r2:
  {
    unsigned64 fs;
    unsigned64 ft;
***************
*** 3868,3874 ****
--- 4191,4199 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  #*vr4100:
  *vr5000:
  *r3900:
***************
*** 3904,3910 ****
--- 4229,4237 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 3923,3928 ****
--- 4250,4256 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 3941,3947 ****
--- 4269,4277 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 3989,3995 ****
--- 4319,4327 ----
  "cfc1 r<RT>, f<FS>"
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  {
    check_fpu (SD_);
    if (FS == 0 || FS == 25 || FS == 26 || FS == 28 || FS == 31)
***************
*** 4032,4038 ****
--- 4364,4372 ----
  "ctc1 r<RT>, f<FS>"
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  {
    check_fpu (SD_);
    TRACE_ALU_INPUT1 (GPR[RT]);
***************
*** 4053,4059 ****
--- 4387,4395 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 4073,4078 ****
--- 4409,4415 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 4090,4095 ****
--- 4427,4433 ----
  "cvt.ps.s f<FD>, f<FS>, f<FT>"
  *mipsV:
  *mips64:
+ *mips64r2:
  {
    check_fpu (SD_);
    check_u64 (SD_, instruction_0);
***************
*** 4109,4115 ****
--- 4447,4455 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 4127,4132 ****
--- 4467,4473 ----
  "cvt.s.pl f<FD>, f<FS>"
  *mipsV:
  *mips64:
+ *mips64r2:
  {
    check_fpu (SD_);
    check_u64 (SD_, instruction_0);
***************
*** 4138,4143 ****
--- 4479,4485 ----
  "cvt.s.pu f<FD>, f<FS>"
  *mipsV:
  *mips64:
+ *mips64r2:
  {
    check_fpu (SD_);
    check_u64 (SD_, instruction_0);
***************
*** 4153,4159 ****
--- 4495,4503 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 4175,4181 ****
--- 4519,4527 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 4208,4213 ****
--- 4554,4560 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 4248,4253 ****
--- 4595,4601 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 4269,4274 ****
--- 4617,4623 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 4287,4293 ****
--- 4636,4644 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 4303,4308 ****
--- 4654,4660 ----
  "ldc1 f<FT>, <OFFSET>(r<BASE>)"
  *mipsII:
  *mips32:
+ *mips32r2:
  {
    check_fpu (SD_);
    COP_LD (1, FT, do_load_double (SD_, GPR[BASE], EXTEND16 (OFFSET)));
***************
*** 4315,4320 ****
--- 4667,4673 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 4329,4334 ****
--- 4682,4688 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr5000:
  {
    check_fpu (SD_);
***************
*** 4341,4346 ****
--- 4695,4701 ----
  "luxc1 f<FD>, r<INDEX>(r<BASE>)"
  *mipsV:
  *mips64:
+ *mips64r2:
  {
    address_word base = GPR[BASE];
    address_word index = GPR[INDEX];
***************
*** 4362,4368 ****
--- 4717,4725 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 4377,4382 ****
--- 4734,4740 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr5000:
  {
    check_fpu (SD_);
***************
*** 4391,4396 ****
--- 4749,4755 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr5000:
  {
    int fmt = FMT;
***************
*** 4420,4426 ****
--- 4779,4787 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 4439,4445 ****
--- 4800,4808 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 4458,4464 ****
--- 4821,4829 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr5000:
  {
    check_fpu (SD_);
***************
*** 4474,4480 ****
--- 4839,4847 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr5000:
  {
    int fmt = FMT;
***************
*** 4503,4509 ****
--- 4870,4878 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr5000:
  {
    check_fpu (SD_);
***************
*** 4526,4532 ****
--- 4895,4903 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr5000:
  {
    check_fpu (SD_);
***************
*** 4542,4547 ****
--- 4913,4919 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr5000:
  {
    int fmt = FMT;
***************
*** 4572,4578 ****
--- 4944,4952 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 4590,4596 ****
--- 4964,4972 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 4610,4616 ****
--- 4986,4994 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 4627,4632 ****
--- 5005,5011 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr5000:
  {
    int fmt = FMT;
***************
*** 4643,4648 ****
--- 5022,5028 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr5000:
  {
    int fmt = FMT;
***************
*** 4658,4663 ****
--- 5038,5044 ----
  "pll.ps f<FD>, f<FS>, f<FT>"
  *mipsV:
  *mips64:
+ *mips64r2:
  {
    check_fpu (SD_);
    check_u64 (SD_, instruction_0);
***************
*** 4670,4675 ****
--- 5051,5057 ----
  "plu.ps f<FD>, f<FS>, f<FT>"
  *mipsV:
  *mips64:
+ *mips64r2:
  {
    check_fpu (SD_);
    check_u64 (SD_, instruction_0);
***************
*** 4683,4688 ****
--- 5065,5071 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr5000:
  {
    address_word base = GPR[BASE];
***************
*** 4701,4706 ****
--- 5084,5090 ----
  "pul.ps f<FD>, f<FS>, f<FT>"
  *mipsV:
  *mips64:
+ *mips64r2:
  {
    check_fpu (SD_);
    check_u64 (SD_, instruction_0);
***************
*** 4713,4718 ****
--- 5097,5103 ----
  "puu.ps f<FD>, f<FS>, f<FT>"
  *mipsV:
  *mips64:
+ *mips64r2:
  {
    check_fpu (SD_);
    check_u64 (SD_, instruction_0);
***************
*** 4726,4731 ****
--- 5111,5117 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr5000:
  {
    int fmt = FMT;
***************
*** 4740,4745 ****
--- 5126,5132 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 4758,4764 ****
--- 5145,5153 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 4775,4780 ****
--- 5164,5170 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr5000:
  {
    int fmt = FMT;
***************
*** 4787,4792 ****
--- 5177,5183 ----
  "sdc1 f<FT>, <OFFSET>(r<BASE>)"
  *mipsII:
  *mips32:
+ *mips32r2:
  {
    check_fpu (SD_);
    do_store_double (SD_, GPR[BASE], EXTEND16 (OFFSET), COP_SD (1, FT));
***************
*** 4799,4804 ****
--- 5190,5196 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 4813,4818 ****
--- 5205,5211 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr5000:
  {
    check_fpu (SD_);
***************
*** 4825,4830 ****
--- 5218,5224 ----
  "suxc1 f<FS>, r<INDEX>(r<BASE>)"
  *mipsV:
  *mips64:
+ *mips64r2:
  {
    unsigned64 v;
    address_word base = GPR[BASE];
***************
*** 4846,4852 ****
--- 5240,5248 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 4865,4871 ****
--- 5261,5269 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 4886,4892 ****
--- 5284,5292 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 4927,4932 ****
--- 5327,5333 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr5000:
  {
  
***************
*** 4968,4973 ****
--- 5369,5375 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 4986,4992 ****
--- 5388,5396 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 5013,5019 ****
--- 5417,5425 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  
***************
*** 5034,5040 ****
--- 5440,5448 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  
***************
*** 5047,5053 ****
--- 5455,5463 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  
  
***************
*** 5059,5065 ****
--- 5469,5477 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  
***************
*** 5070,5076 ****
--- 5482,5490 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 5093,5098 ****
--- 5507,5513 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  {
    check_u64 (SD_, instruction_0);
    DecodeCoproc (instruction_0);
***************
*** 5105,5110 ****
--- 5520,5526 ----
  *mipsIV:
  *mipsV:
  *mips64:
+ *mips64r2:
  {
    check_u64 (SD_, instruction_0);
    DecodeCoproc (instruction_0);
***************
*** 5117,5123 ****
--- 5533,5541 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  {
***************
*** 5144,5150 ****
--- 5562,5570 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 5162,5168 ****
--- 5582,5590 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  *r3900:
***************
*** 5194,5200 ****
--- 5616,5624 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *r3900:
  {
***************
*** 5211,5217 ****
--- 5635,5643 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  
***************
*** 5224,5230 ****
--- 5650,5658 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  
***************
*** 5237,5243 ****
--- 5665,5673 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  
***************
*** 5250,5264 ****
  *mipsIV:
  *mipsV:
  *mips32:
  *mips64:
  *vr4100:
  *vr5000:
  
! \f
  :include:::m16.igen
  :include:::mdmx.igen
  :include:::mips3d.igen
  :include:::sb1.igen
  :include:::tx.igen
  :include:::vr.igen
! \f
--- 5680,5697 ----
  *mipsIV:
  *mipsV:
  *mips32:
+ *mips32r2:
  *mips64:
+ *mips64r2:
  *vr4100:
  *vr5000:
  
! 
! :include:::mips3264r2.igen
  :include:::m16.igen
  :include:::mdmx.igen
  :include:::mips3d.igen
  :include:::sb1.igen
  :include:::tx.igen
  :include:::vr.igen
! 
Index: vr.igen
===================================================================
RCS file: /cvs/uberbaum/sim/mips/vr.igen,v
retrieving revision 1.3
diff -c -p -r1.3 vr.igen
*** vr.igen	16 Apr 2003 00:52:08 -0000	1.3
--- vr.igen	24 Nov 2004 17:02:01 -0000
***************
*** 100,134 ****
      GPR[rd] = store_hi_p ? HI : LO;
  }
  
- // 32-bit rotate right of X by Y bits.
- :function:::unsigned64:do_ror:unsigned32 x,unsigned32 y
- *vr5400:
- *vr5500:
- {
-   unsigned64 result;
- 
-   y &= 31;
-   TRACE_ALU_INPUT2 (x, y);
-   result = EXTEND32 (ROTR32 (x, y));
-   TRACE_ALU_RESULT (result);
-   return result;
- }
- 
- // Likewise 64-bit
- :function:::unsigned64:do_dror:unsigned64 x,unsigned64 y
- *vr5400:
- *vr5500:
- {
-   unsigned64 result;
- 
-   y &= 63;
-   TRACE_ALU_INPUT2 (x, y);
-   result = ROTR64 (x, y);
-   TRACE_ALU_RESULT (result);
-   return result;
- }
- 
- 
  // VR4100 instructions.
  
  000000,5.RS,5.RT,00000,00000,101000::32::MADD16
--- 100,105 ----
***************
*** 246,290 ****
  		0 /* single */);
  }
  
- 000000,00001,5.RT,5.RD,5.SHIFT,000010::32::ROR
- "ror r<RD>, r<RT>, <SHIFT>"
- *vr5400:
- *vr5500:
- {
-   GPR[RD] = do_ror (SD_, GPR[RT], SHIFT);
- }
- 
- 000000,5.RS,5.RT,5.RD,00001,000110::32::RORV
- "rorv r<RD>, r<RT>, r<RS>"
- *vr5400:
- *vr5500:
- {
-   GPR[RD] = do_ror (SD_, GPR[RT], GPR[RS]);
- }
- 
- 000000,00001,5.RT,5.RD,5.SHIFT,111010::64::DROR
- "dror r<RD>, r<RT>, <SHIFT>"
- *vr5400:
- *vr5500:
- {
-   GPR[RD] = do_dror (SD_, GPR[RT], SHIFT);
- }
- 
- 000000,00001,5.RT,5.RD,5.SHIFT,111110::64::DROR32
- "dror32 r<RD>, r<RT>, <SHIFT>"
- *vr5400:
- *vr5500:
- {
-   GPR[RD] = do_dror (SD_, GPR[RT], SHIFT + 32);
- }
- 
- 000000,5.RS,5.RT,5.RD,00001,010110::64::DRORV
- "drorv r<RD>, r<RT>, r<RS>"
- *vr5400:
- *vr5500:
- {
-   GPR[RD] = do_dror (SD_, GPR[RT], GPR[RS]);
- }
  
  010011,5.BASE,5.INDEX,5.0,5.FD,000101:COP1X:64::LUXC1
  "luxc1 f<FD>, r<INDEX>(r<BASE>)"
--- 217,222 ----


[-- Attachment #2: mips3264r2.igen --]
[-- Type: text/plain, Size: 6173 bytes --]

// -*- C -*-

// Simulator definition for the MIPS 32/64 revision 2 instructions.
// Copyright (C) 2004 Free Software Foundation, Inc.
// Contributed by David Ung, of MIPS Technologies.
//
// This file is part of GDB, the GNU debugger.
// 
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2, or (at your option)
// any later version.
// 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// 
// You should have received a copy of the GNU General Public License along
// with this program; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.


011111,5.RS,5.RT,5.SIZE,5.LSB,000011::64::DEXT
"dext r<RT>, r<RS>, <LSB>, <SIZE+1>"
*mips64r2:
{
  check_u64 (SD_, instruction_0);
  TRACE_ALU_INPUT3 (GPR[RS], LSB, SIZE);
  GPR[RT] = EXTRACTED64 (GPR[RS], LSB + SIZE, LSB);
  TRACE_ALU_RESULT1 (GPR[RT]);
}

011111,5.RS,5.RT,5.SIZE,5.LSB,000001::64::DEXTM
"dextm r<RT>, r<RS>, <LSB>, <SIZE+33>"
*mips64r2:
{
  check_u64 (SD_, instruction_0);
  TRACE_ALU_INPUT3 (GPR[RS], LSB, SIZE);
  GPR[RT] = EXTRACTED64 (GPR[RS], LSB + SIZE + 32, LSB);
  TRACE_ALU_RESULT1 (GPR[RT]);
}

011111,5.RS,5.RT,5.SIZE,5.LSB,000010::64::DEXTU
"dextu r<RT>, r<RS>, <LSB+32>, <SIZE+1>"
*mips64r2:
{
  check_u64 (SD_, instruction_0);
  TRACE_ALU_INPUT3 (GPR[RS], LSB, SIZE);
  GPR[RT] = EXTRACTED64 (GPR[RS], LSB + 32 + SIZE, LSB + 32);
  TRACE_ALU_RESULT1 (GPR[RT]);
}


010000,01011,5.RT,01100,00000,0,00,000::32::DI
"di":RT == 0
"di r<RT>"
*mips32r2:
*mips64r2:
{
  TRACE_ALU_INPUT0 ();
  GPR[RT] = EXTEND32 (SR);
  SR &= ~status_IE;
  TRACE_ALU_RESULT1 (GPR[RT]);
}


011111,5.RS,5.RT,5.MSB,5.LSB,000111::64::DINS
"dins r<RT>, r<RS>, <LSB>, <MSB-LSB+1>"
*mips64r2:
{
  check_u64 (SD_, instruction_0);
  TRACE_ALU_INPUT4 (GPR[RT], GPR[RS], LSB, MSB);
  if (LSB <= MSB)
    GPR[RT] ^= (GPR[RT] ^ (GPR[RS] << LSB)) & MASK64 (MSB, LSB);
  TRACE_ALU_RESULT1 (GPR[RT]);
}

011111,5.RS,5.RT,5.MSB,5.LSB,000101::64::DINSM
"dinsm r<RT>, r<RS>, <LSB>, <MSB+32-LSB+1>"
*mips64r2:
{
  check_u64 (SD_, instruction_0);
  TRACE_ALU_INPUT4 (GPR[RT], GPR[RS], LSB, MSB);
  if (LSB <= MSB + 32)
    GPR[RT] ^= (GPR[RT] ^ (GPR[RS] << LSB)) & MASK64 (MSB + 32, LSB);
  TRACE_ALU_RESULT1 (GPR[RT]);
}

011111,5.RS,5.RT,5.MSB,5.LSB,000110::64::DINSU
"dinsu r<RT>, r<RS>, <LSB+32>, <MSB-LSB+1>"
*mips64r2:
{
  check_u64 (SD_, instruction_0);
  TRACE_ALU_INPUT4 (GPR[RT], GPR[RS], LSB, MSB);
  if (LSB <= MSB)
    GPR[RT] ^= (GPR[RT] ^ (GPR[RS] << (LSB + 32)))
      & MASK64 (MSB + 32, LSB + 32);
  TRACE_ALU_RESULT1 (GPR[RT]);
}


011111,00000,5.RT,5.RD,00010,100100::64::DSBH
"dsbh r<RD>, r<RT>"
*mips64r2:
{
  union { unsigned64 d; unsigned16 h[4]; } u;
  check_u64 (SD_, instruction_0);
  TRACE_ALU_INPUT1 (GPR[RT]);
  u.d = GPR[RT];
  u.h[0] = SWAP_2 (u.h[0]);
  u.h[1] = SWAP_2 (u.h[1]);
  u.h[2] = SWAP_2 (u.h[2]);
  u.h[3] = SWAP_2 (u.h[3]);
  GPR[RD] = u.d;
  TRACE_ALU_RESULT1 (GPR[RD]);
}

011111,00000,5.RT,5.RD,00101,100100::64::DSHD
"dshd r<RD>, r<RT>"
*mips64r2:
{
  unsigned64 d;
  check_u64 (SD_, instruction_0);
  TRACE_ALU_INPUT1 (GPR[RT]);
  d = GPR[RT];
  GPR[RD] = ((d >> 48)
	     | (d << 48)
	     | ((d & 0x0000ffff00000000) >> 16)
	     | ((d & 0x00000000ffff0000) << 16));
  TRACE_ALU_RESULT1 (GPR[RD]);
}


010000,01011,5.RT,01100,00000,1,00,000::32::EI
"ei":RT == 0
"ei r<RT>"
*mips32r2:
*mips64r2:
{
  TRACE_ALU_INPUT0 ();
  GPR[RT] = EXTEND32 (SR);
  SR |= status_IE;
  TRACE_ALU_RESULT1 (GPR[RT]);
}


011111,5.RS,5.RT,5.SIZE,5.LSB,000000::32::EXT
"ext r<RT>, r<RS>, <LSB>, <SIZE+1>"
*mips32r2:
*mips64r2:
{
  TRACE_ALU_INPUT3 (GPR[RS], LSB, SIZE);
  GPR[RT] = EXTEND32 (EXTRACTED32 (GPR[RS], LSB + SIZE, LSB));
  TRACE_ALU_RESULT1 (GPR[RT]);
}


010001,00011,5.RT,5.FS,00000000000:COP1Sa:32,f::MFHC1
"mfhc1 r<RT>, f<FS>"
*mips32r2:
*mips64r2:
{
  check_fpu (SD_);
  if (SizeFGR() == 64)
    GPR[RT] = EXTEND32 (WORD64HI (FGR[FS]));
  else if ((FS & 0x1) == 0)
    GPR[RT] = EXTEND32 (FGR[FS + 1]);
  else
    {
      if (STATE_VERBOSE_P(SD))
	sim_io_eprintf (SD, 
	         "Warning: PC 0x%lx: MFHC1 32-bit use of odd FPR number\n",
			(long) CIA);
      GPR[RT] = EXTEND32 (0xBADF00D);
    }
  TRACE_ALU_RESULT (GPR[RT]);
}

010001,00111,5.RT,5.FS,00000000000:COP1Sa:32,f::MTHC1
"mthc1 r<RT>, f<FS>"
*mips32r2:
*mips64r2:
{
  check_fpu (SD_); 
  if (SizeFGR() == 64)
    StoreFPR (FS, fmt_uninterpreted_64, SET64HI (GPR[RT]) | VL4_8 (FGR[FS]));
  else if ((FS & 0x1) == 0)
    StoreFPR (FS + 1, fmt_uninterpreted_32, VL4_8 (GPR[RT]));
  else
    {
      if (STATE_VERBOSE_P(SD))
	sim_io_eprintf (SD, 
	         "Warning: PC 0x%lx: MTHC1 32-bit use of odd FPR number\n",
			(long) CIA);
      StoreFPR (FS, fmt_uninterpreted_32, 0xDEADC0DE);
    }
  TRACE_FP_RESULT (GPR[RT]);
}


011111,5.RS,5.RT,5.MSB,5.LSB,000100::32::INS
"ins r<RT>, r<RS>, <LSB>, <MSB-LSB+1>"
*mips32r2:
*mips64r2:
{
  TRACE_ALU_INPUT4 (GPR[RT], GPR[RS], LSB, MSB);
  if (LSB <= MSB)
    GPR[RT] = EXTEND32 (GPR[RT] ^
			((GPR[RT] ^ (GPR[RS] << LSB)) & MASK32 (MSB, LSB)));
  TRACE_ALU_RESULT1 (GPR[RT]);
}


011111,00000,5.RT,5.RD,10000,100000::32::SEB
"seb r<RD>, r<RT>"
*mips32r2:
*mips64r2:
{
  TRACE_ALU_INPUT1 (GPR[RT]);
  GPR[RD] = EXTEND8 (GPR[RT]);
  TRACE_ALU_RESULT1 (GPR[RD]);
}

011111,00000,5.RT,5.RD,11000,100000::32::SEH
"seh r<RD>, r<RT>"
*mips32r2:
*mips64r2:
{
  TRACE_ALU_INPUT1 (GPR[RT]);
  GPR[RD] = EXTEND16 (GPR[RT]);
  TRACE_ALU_RESULT1 (GPR[RD]);
}


000001,5.BASE,11111,16.OFFSET::32::SYNCI
"synci <OFFSET>(r<BASE>)"
*mips32r2:
*mips64r2:
{
  // sync i-cache - nothing to do currently
}


011111,00000,5.RT,5.RD,00010,100000::32::WSBH
"wsbh r<RD>, r<RT>"
*mips32r2:
*mips64r2:
{
  union { unsigned32 w; unsigned16 h[2]; } u;
  TRACE_ALU_INPUT1 (GPR[RT]);
  u.w = GPR[RT];
  u.h[0] = SWAP_2 (u.h[0]);
  u.h[1] = SWAP_2 (u.h[1]);
  GPR[RD] = EXTEND32 (u.w);
  TRACE_ALU_RESULT1 (GPR[RD]);
}



  reply	other threads:[~2004-11-24 17:08 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-11-03 15:26 David Ung
     [not found] ` <mailpost.1099495587.2562@news-sj1-1>
2004-11-03 16:54   ` cgd
2004-11-03 16:57   ` cgd
     [not found]     ` <mailpost.1099501062.5136@news-sj1-1>
2004-11-03 19:01       ` cgd
2004-11-04 13:53         ` David Ung
     [not found]           ` <mailpost.1099576418.9773@news-sj1-1>
2004-11-04 17:46             ` cgd
2004-11-08 16:44               ` Andrew Cagney
2004-11-08 18:06                 ` David Ung
2004-11-09 15:54                   ` David Ung
2004-11-09 16:12                   ` Andrew Cagney
2004-11-09 16:23                     ` cgd
2004-11-09 17:00                       ` Andrew Cagney
2004-11-09 17:38                         ` cgd
2004-11-24 17:08                           ` David Ung [this message]
2004-11-24 18:17                             ` cgd
2005-05-18 18:11                               ` [patch ping] " David Ung
2005-05-19  2:04                                 ` cgd
     [not found]                                   ` <mailpost.1116450142.2303@news-sj1-1>
2005-05-25  2:21                                     ` cgd
2005-05-26 22:27                                       ` cgd
2005-05-27 14:38                                         ` David Ung
2004-11-09 23:36                         ` Nigel Stephens

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1101316048.29221.240.camel@stockwell.mips.com \
    --to=davidu@mips.com \
    --cc=cagney@gnu.org \
    --cc=cgd@broadcom.com \
    --cc=gdb-patches@sources.redhat.com \
    --cc=nigel@mips.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox