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]);
}
next prev parent 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