make ICACHE always enabled option and deprecate it in the configure script
Trace cache still can be turned off
This commit is contained in:
parent
10c8d8ea33
commit
4470c6a1c8
@ -47,8 +47,11 @@ Detailed change log :
|
|||||||
the code.
|
the code.
|
||||||
- Added ability to choose Bochs log file name and Bochs debugger log file
|
- Added ability to choose Bochs log file name and Bochs debugger log file
|
||||||
name from Bochs command line (using new -log and -dbglog options)
|
name from Bochs command line (using new -log and -dbglog options)
|
||||||
- Removed --enable-guest2host-tlb configure option. The option will be
|
- Removed --enable-guest2host-tlb configure option. The option is always
|
||||||
always enabled for any Bochs configuration.
|
enabled for any Bochs configuration.
|
||||||
|
- Removed --enable-icache configure option. The option is always enabled
|
||||||
|
for any Bochs configuration. Trace cache support still remains optional
|
||||||
|
and could be configured off.
|
||||||
- Added configure option to compile in GUI frontend for Bochs debugger,
|
- Added configure option to compile in GUI frontend for Bochs debugger,
|
||||||
to enable configure with --enable-debugger-gui option.
|
to enable configure with --enable-debugger-gui option.
|
||||||
The GUI debugger frontend is enabled by default with Bochs debugger.
|
The GUI debugger frontend is enabled by default with Bochs debugger.
|
||||||
|
@ -731,13 +731,8 @@ typedef
|
|||||||
#define BX_SupportRepeatSpeedups 0
|
#define BX_SupportRepeatSpeedups 0
|
||||||
#define BX_SupportHostAsms 0
|
#define BX_SupportHostAsms 0
|
||||||
|
|
||||||
#define BX_SUPPORT_ICACHE 0
|
|
||||||
#define BX_SUPPORT_TRACE_CACHE 0
|
#define BX_SUPPORT_TRACE_CACHE 0
|
||||||
|
|
||||||
#if (BX_SUPPORT_TRACE_CACHE && BX_SUPPORT_ICACHE==0)
|
|
||||||
#error Trace cache optimization cannot be compiled without iCache!
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if BX_SUPPORT_3DNOW
|
#if BX_SUPPORT_3DNOW
|
||||||
#define BX_CPU_VENDOR_INTEL 0
|
#define BX_CPU_VENDOR_INTEL 0
|
||||||
#else
|
#else
|
||||||
|
62
bochs/configure
vendored
62
bochs/configure
vendored
@ -1569,7 +1569,6 @@ Optional Features:
|
|||||||
--enable-mtrr support for MTRRs
|
--enable-mtrr support for MTRRs
|
||||||
--enable-repeat-speedups support repeated IO and mem copy speedups
|
--enable-repeat-speedups support repeated IO and mem copy speedups
|
||||||
--enable-trace-cache support instruction trace cache
|
--enable-trace-cache support instruction trace cache
|
||||||
--enable-icache support instruction cache
|
|
||||||
--enable-fast-function-calls support for fast function calls (gcc on x86 only)
|
--enable-fast-function-calls support for fast function calls (gcc on x86 only)
|
||||||
--enable-host-specific-asms support for host specific inline assembly
|
--enable-host-specific-asms support for host specific inline assembly
|
||||||
--enable-configurable-msrs support for configurable MSR registers
|
--enable-configurable-msrs support for configurable MSR registers
|
||||||
@ -1613,6 +1612,7 @@ Optional Features:
|
|||||||
--enable-docbook build the Docbook documentation
|
--enable-docbook build the Docbook documentation
|
||||||
--enable-xpm enable the check for XPM support
|
--enable-xpm enable the check for XPM support
|
||||||
--enable-guest2host-tlb enables guest to host addr TLB for speed (deprecated)
|
--enable-guest2host-tlb enables guest to host addr TLB for speed (deprecated)
|
||||||
|
--enable-icache support instruction cache (deprecated)
|
||||||
--enable-external-debugger enables external debugger interface (deprecated)
|
--enable-external-debugger enables external debugger interface (deprecated)
|
||||||
--enable-magic-breakpoints enables magic breakpoints (deprecated)
|
--enable-magic-breakpoints enables magic breakpoints (deprecated)
|
||||||
--enable-save-restore enables save/restore (deprecated)
|
--enable-save-restore enables save/restore (deprecated)
|
||||||
@ -34739,29 +34739,6 @@ echo "${ECHO_T}no" >&6; }
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
{ echo "$as_me:$LINENO: checking for instruction cache support" >&5
|
|
||||||
echo $ECHO_N "checking for instruction cache support... $ECHO_C" >&6; }
|
|
||||||
# Check whether --enable-icache was given.
|
|
||||||
if test "${enable_icache+set}" = set; then
|
|
||||||
enableval=$enable_icache; if test "$enableval" = yes; then
|
|
||||||
{ echo "$as_me:$LINENO: result: yes" >&5
|
|
||||||
echo "${ECHO_T}yes" >&6; }
|
|
||||||
speedup_iCache=1
|
|
||||||
else
|
|
||||||
{ echo "$as_me:$LINENO: result: no" >&5
|
|
||||||
echo "${ECHO_T}no" >&6; }
|
|
||||||
speedup_iCache=0
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
|
|
||||||
{ echo "$as_me:$LINENO: result: no" >&5
|
|
||||||
echo "${ECHO_T}no" >&6; }
|
|
||||||
speedup_iCache=0
|
|
||||||
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
{ echo "$as_me:$LINENO: checking for gcc fast function calls optimization" >&5
|
{ echo "$as_me:$LINENO: checking for gcc fast function calls optimization" >&5
|
||||||
echo $ECHO_N "checking for gcc fast function calls optimization... $ECHO_C" >&6; }
|
echo $ECHO_N "checking for gcc fast function calls optimization... $ECHO_C" >&6; }
|
||||||
# Check whether --enable-fast-function-calls was given.
|
# Check whether --enable-fast-function-calls was given.
|
||||||
@ -35147,17 +35124,10 @@ fi
|
|||||||
if test "$speedups_all" = 1; then
|
if test "$speedups_all" = 1; then
|
||||||
# Configure requested to force all options enabled.
|
# Configure requested to force all options enabled.
|
||||||
speedup_repeat=1
|
speedup_repeat=1
|
||||||
speedup_iCache=1
|
|
||||||
speedup_TraceCache=1
|
speedup_TraceCache=1
|
||||||
speedup_fastcall=1
|
speedup_fastcall=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$speedup_iCache" = 0 -a "$speedup_TraceCache" = 1; then
|
|
||||||
{ { echo "$as_me:$LINENO: error: iCache is required to compile with trace cache optimization" >&5
|
|
||||||
echo "$as_me: error: iCache is required to compile with trace cache optimization" >&2;}
|
|
||||||
{ (exit 1); exit 1; }; }
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$speedup_repeat" = 1; then
|
if test "$speedup_repeat" = 1; then
|
||||||
cat >>confdefs.h <<\_ACEOF
|
cat >>confdefs.h <<\_ACEOF
|
||||||
#define BX_SupportRepeatSpeedups 1
|
#define BX_SupportRepeatSpeedups 1
|
||||||
@ -35170,18 +35140,6 @@ _ACEOF
|
|||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$speedup_iCache" = 1; then
|
|
||||||
cat >>confdefs.h <<\_ACEOF
|
|
||||||
#define BX_SUPPORT_ICACHE 1
|
|
||||||
_ACEOF
|
|
||||||
|
|
||||||
else
|
|
||||||
cat >>confdefs.h <<\_ACEOF
|
|
||||||
#define BX_SUPPORT_ICACHE 0
|
|
||||||
_ACEOF
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$speedup_host_specific_asms" = 1; then
|
if test "$speedup_host_specific_asms" = 1; then
|
||||||
cat >>confdefs.h <<\_ACEOF
|
cat >>confdefs.h <<\_ACEOF
|
||||||
#define BX_SupportHostAsms 1
|
#define BX_SupportHostAsms 1
|
||||||
@ -39528,6 +39486,24 @@ echo "${ECHO_T}no" >&6; }
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
{ echo "$as_me:$LINENO: checking for instruction cache support (deprecated)" >&5
|
||||||
|
echo $ECHO_N "checking for instruction cache support (deprecated)... $ECHO_C" >&6; }
|
||||||
|
# Check whether --enable-icache was given.
|
||||||
|
if test "${enable_icache+set}" = set; then
|
||||||
|
enableval=$enable_icache; { echo "$as_me:$LINENO: result: $enableval" >&5
|
||||||
|
echo "${ECHO_T}$enableval" >&6; }
|
||||||
|
{ { echo "$as_me:$LINENO: error: DEPRECATED - ALWAYS ON" >&5
|
||||||
|
echo "$as_me: error: DEPRECATED - ALWAYS ON" >&2;}
|
||||||
|
{ (exit 1); exit 1; }; }
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
{ echo "$as_me:$LINENO: result: no" >&5
|
||||||
|
echo "${ECHO_T}no" >&6; }
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
{ echo "$as_me:$LINENO: checking for external debugger interface (deprecated)" >&5
|
{ echo "$as_me:$LINENO: checking for external debugger interface (deprecated)" >&5
|
||||||
echo $ECHO_N "checking for external debugger interface (deprecated)... $ECHO_C" >&6; }
|
echo $ECHO_N "checking for external debugger interface (deprecated)... $ECHO_C" >&6; }
|
||||||
# Check whether --enable-external-debugger was given.
|
# Check whether --enable-external-debugger was given.
|
||||||
|
@ -2,7 +2,7 @@ dnl // Process this file with autoconf to produce a configure script.
|
|||||||
|
|
||||||
AC_PREREQ(2.50)
|
AC_PREREQ(2.50)
|
||||||
AC_INIT(bochs.h)
|
AC_INIT(bochs.h)
|
||||||
AC_REVISION([[$Id: configure.in,v 1.392 2009-03-10 19:33:03 vruppert Exp $]])
|
AC_REVISION([[$Id: configure.in,v 1.393 2009-03-13 18:48:08 sshwarts Exp $]])
|
||||||
AC_CONFIG_HEADER(config.h)
|
AC_CONFIG_HEADER(config.h)
|
||||||
AC_CONFIG_HEADER(ltdlconf.h)
|
AC_CONFIG_HEADER(ltdlconf.h)
|
||||||
|
|
||||||
@ -1088,22 +1088,6 @@ AC_ARG_ENABLE(trace-cache,
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
AC_MSG_CHECKING(for instruction cache support)
|
|
||||||
AC_ARG_ENABLE(icache,
|
|
||||||
[ --enable-icache support instruction cache],
|
|
||||||
[if test "$enableval" = yes; then
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
speedup_iCache=1
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
speedup_iCache=0
|
|
||||||
fi],
|
|
||||||
[
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
speedup_iCache=0
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
AC_MSG_CHECKING(for gcc fast function calls optimization)
|
AC_MSG_CHECKING(for gcc fast function calls optimization)
|
||||||
AC_ARG_ENABLE(fast-function-calls,
|
AC_ARG_ENABLE(fast-function-calls,
|
||||||
[ --enable-fast-function-calls support for fast function calls (gcc on x86 only)],
|
[ --enable-fast-function-calls support for fast function calls (gcc on x86 only)],
|
||||||
@ -1341,27 +1325,16 @@ AC_ARG_ENABLE(all-optimizations,
|
|||||||
if test "$speedups_all" = 1; then
|
if test "$speedups_all" = 1; then
|
||||||
# Configure requested to force all options enabled.
|
# Configure requested to force all options enabled.
|
||||||
speedup_repeat=1
|
speedup_repeat=1
|
||||||
speedup_iCache=1
|
|
||||||
speedup_TraceCache=1
|
speedup_TraceCache=1
|
||||||
speedup_fastcall=1
|
speedup_fastcall=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$speedup_iCache" = 0 -a "$speedup_TraceCache" = 1; then
|
|
||||||
AC_MSG_ERROR([iCache is required to compile with trace cache optimization])
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$speedup_repeat" = 1; then
|
if test "$speedup_repeat" = 1; then
|
||||||
AC_DEFINE(BX_SupportRepeatSpeedups, 1)
|
AC_DEFINE(BX_SupportRepeatSpeedups, 1)
|
||||||
else
|
else
|
||||||
AC_DEFINE(BX_SupportRepeatSpeedups, 0)
|
AC_DEFINE(BX_SupportRepeatSpeedups, 0)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$speedup_iCache" = 1; then
|
|
||||||
AC_DEFINE(BX_SUPPORT_ICACHE, 1)
|
|
||||||
else
|
|
||||||
AC_DEFINE(BX_SUPPORT_ICACHE, 0)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$speedup_host_specific_asms" = 1; then
|
if test "$speedup_host_specific_asms" = 1; then
|
||||||
AC_DEFINE(BX_SupportHostAsms, 1)
|
AC_DEFINE(BX_SupportHostAsms, 1)
|
||||||
else
|
else
|
||||||
@ -3074,6 +3047,16 @@ AC_ARG_ENABLE(guest2host-tlb,
|
|||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
])
|
])
|
||||||
|
|
||||||
|
AC_MSG_CHECKING(for instruction cache support (deprecated))
|
||||||
|
AC_ARG_ENABLE(icache,
|
||||||
|
[ --enable-icache support instruction cache (deprecated)],
|
||||||
|
[AC_MSG_RESULT($enableval)
|
||||||
|
AC_MSG_ERROR([DEPRECATED - ALWAYS ON])
|
||||||
|
],
|
||||||
|
[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
|
|
||||||
AC_MSG_CHECKING(for external debugger interface (deprecated))
|
AC_MSG_CHECKING(for external debugger interface (deprecated))
|
||||||
AC_ARG_ENABLE(external-debugger,
|
AC_ARG_ENABLE(external-debugger,
|
||||||
[ --enable-external-debugger enables external debugger interface (deprecated)],
|
[ --enable-external-debugger enables external debugger interface (deprecated)],
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// $Id: access.cc,v 1.123 2009-03-05 17:48:12 sshwarts Exp $
|
// $Id: access.cc,v 1.124 2009-03-13 18:48:08 sshwarts Exp $
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Copyright (C) 2001 MandrakeSoft S.A.
|
// Copyright (C) 2001 MandrakeSoft S.A.
|
||||||
@ -367,9 +367,7 @@ BX_CPU_C::v2h_write_byte(bx_address laddr, bx_bool user)
|
|||||||
bx_hostpageaddr_t hostPageAddr = tlbEntry->hostPageAddr;
|
bx_hostpageaddr_t hostPageAddr = tlbEntry->hostPageAddr;
|
||||||
Bit32u pageOffset = PAGE_OFFSET(laddr);
|
Bit32u pageOffset = PAGE_OFFSET(laddr);
|
||||||
Bit8u *hostAddr = (Bit8u*) (hostPageAddr | pageOffset);
|
Bit8u *hostAddr = (Bit8u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
return hostAddr;
|
return hostAddr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// $Id: access32.cc,v 1.24 2009-02-26 21:56:53 sshwarts Exp $
|
// $Id: access32.cc,v 1.25 2009-03-13 18:48:08 sshwarts Exp $
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Copyright (c) 2008 Stanislav Shwartsman
|
// Copyright (c) 2008 Stanislav Shwartsman
|
||||||
@ -52,9 +52,7 @@ accessOK:
|
|||||||
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
||||||
tlbEntry->ppf | pageOffset, 1, CPL, BX_WRITE, (Bit8u*) &data);
|
tlbEntry->ppf | pageOffset, 1, CPL, BX_WRITE, (Bit8u*) &data);
|
||||||
Bit8u *hostAddr = (Bit8u*) (hostPageAddr | pageOffset);
|
Bit8u *hostAddr = (Bit8u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
*hostAddr = data;
|
*hostAddr = data;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -103,9 +101,7 @@ accessOK:
|
|||||||
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
||||||
tlbEntry->ppf | pageOffset, 2, CPL, BX_WRITE, (Bit8u*) &data);
|
tlbEntry->ppf | pageOffset, 2, CPL, BX_WRITE, (Bit8u*) &data);
|
||||||
Bit16u *hostAddr = (Bit16u*) (hostPageAddr | pageOffset);
|
Bit16u *hostAddr = (Bit16u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
WriteHostWordToLittleEndian(hostAddr, data);
|
WriteHostWordToLittleEndian(hostAddr, data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -164,9 +160,7 @@ accessOK:
|
|||||||
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
||||||
tlbEntry->ppf | pageOffset, 4, CPL, BX_WRITE, (Bit8u*) &data);
|
tlbEntry->ppf | pageOffset, 4, CPL, BX_WRITE, (Bit8u*) &data);
|
||||||
Bit32u *hostAddr = (Bit32u*) (hostPageAddr | pageOffset);
|
Bit32u *hostAddr = (Bit32u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
WriteHostDWordToLittleEndian(hostAddr, data);
|
WriteHostDWordToLittleEndian(hostAddr, data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -225,9 +219,7 @@ accessOK:
|
|||||||
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
||||||
tlbEntry->ppf | pageOffset, 8, CPL, BX_WRITE, (Bit8u*) &data);
|
tlbEntry->ppf | pageOffset, 8, CPL, BX_WRITE, (Bit8u*) &data);
|
||||||
Bit64u *hostAddr = (Bit64u*) (hostPageAddr | pageOffset);
|
Bit64u *hostAddr = (Bit64u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
WriteHostQWordToLittleEndian(hostAddr, data);
|
WriteHostQWordToLittleEndian(hostAddr, data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -284,9 +276,7 @@ accessOK:
|
|||||||
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
||||||
tlbEntry->ppf | pageOffset, 16, CPL, BX_WRITE, (Bit8u*) data);
|
tlbEntry->ppf | pageOffset, 16, CPL, BX_WRITE, (Bit8u*) data);
|
||||||
Bit64u *hostAddr = (Bit64u*) (hostPageAddr | pageOffset);
|
Bit64u *hostAddr = (Bit64u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
WriteHostQWordToLittleEndian(hostAddr, data->xmm64u(0));
|
WriteHostQWordToLittleEndian(hostAddr, data->xmm64u(0));
|
||||||
WriteHostQWordToLittleEndian(hostAddr+1, data->xmm64u(1));
|
WriteHostQWordToLittleEndian(hostAddr+1, data->xmm64u(1));
|
||||||
return;
|
return;
|
||||||
@ -333,9 +323,7 @@ accessOK:
|
|||||||
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
||||||
tlbEntry->ppf | pageOffset, 16, CPL, BX_WRITE, (Bit8u*) data);
|
tlbEntry->ppf | pageOffset, 16, CPL, BX_WRITE, (Bit8u*) data);
|
||||||
Bit64u *hostAddr = (Bit64u*) (hostPageAddr | pageOffset);
|
Bit64u *hostAddr = (Bit64u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
WriteHostQWordToLittleEndian(hostAddr, data->xmm64u(0));
|
WriteHostQWordToLittleEndian(hostAddr, data->xmm64u(0));
|
||||||
WriteHostQWordToLittleEndian(hostAddr+1, data->xmm64u(1));
|
WriteHostQWordToLittleEndian(hostAddr+1, data->xmm64u(1));
|
||||||
return;
|
return;
|
||||||
@ -710,9 +698,7 @@ accessOK:
|
|||||||
bx_hostpageaddr_t hostPageAddr = tlbEntry->hostPageAddr;
|
bx_hostpageaddr_t hostPageAddr = tlbEntry->hostPageAddr;
|
||||||
Bit32u pageOffset = PAGE_OFFSET(laddr);
|
Bit32u pageOffset = PAGE_OFFSET(laddr);
|
||||||
Bit8u *hostAddr = (Bit8u*) (hostPageAddr | pageOffset);
|
Bit8u *hostAddr = (Bit8u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
data = *hostAddr;
|
data = *hostAddr;
|
||||||
BX_CPU_THIS_PTR address_xlation.pages = (bx_ptr_equiv_t) hostAddr;
|
BX_CPU_THIS_PTR address_xlation.pages = (bx_ptr_equiv_t) hostAddr;
|
||||||
BX_INSTR_LIN_ACCESS(BX_CPU_ID, laddr, tlbEntry->ppf | pageOffset, 1, BX_RW);
|
BX_INSTR_LIN_ACCESS(BX_CPU_ID, laddr, tlbEntry->ppf | pageOffset, 1, BX_RW);
|
||||||
@ -763,9 +749,7 @@ accessOK:
|
|||||||
bx_hostpageaddr_t hostPageAddr = tlbEntry->hostPageAddr;
|
bx_hostpageaddr_t hostPageAddr = tlbEntry->hostPageAddr;
|
||||||
Bit32u pageOffset = PAGE_OFFSET(laddr);
|
Bit32u pageOffset = PAGE_OFFSET(laddr);
|
||||||
Bit16u *hostAddr = (Bit16u*) (hostPageAddr | pageOffset);
|
Bit16u *hostAddr = (Bit16u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
ReadHostWordFromLittleEndian(hostAddr, data);
|
ReadHostWordFromLittleEndian(hostAddr, data);
|
||||||
BX_CPU_THIS_PTR address_xlation.pages = (bx_ptr_equiv_t) hostAddr;
|
BX_CPU_THIS_PTR address_xlation.pages = (bx_ptr_equiv_t) hostAddr;
|
||||||
BX_INSTR_LIN_ACCESS(BX_CPU_ID, laddr, tlbEntry->ppf | pageOffset, 2, BX_RW);
|
BX_INSTR_LIN_ACCESS(BX_CPU_ID, laddr, tlbEntry->ppf | pageOffset, 2, BX_RW);
|
||||||
@ -826,9 +810,7 @@ accessOK:
|
|||||||
bx_hostpageaddr_t hostPageAddr = tlbEntry->hostPageAddr;
|
bx_hostpageaddr_t hostPageAddr = tlbEntry->hostPageAddr;
|
||||||
Bit32u pageOffset = PAGE_OFFSET(laddr);
|
Bit32u pageOffset = PAGE_OFFSET(laddr);
|
||||||
Bit32u *hostAddr = (Bit32u*) (hostPageAddr | pageOffset);
|
Bit32u *hostAddr = (Bit32u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
ReadHostDWordFromLittleEndian(hostAddr, data);
|
ReadHostDWordFromLittleEndian(hostAddr, data);
|
||||||
BX_CPU_THIS_PTR address_xlation.pages = (bx_ptr_equiv_t) hostAddr;
|
BX_CPU_THIS_PTR address_xlation.pages = (bx_ptr_equiv_t) hostAddr;
|
||||||
BX_INSTR_LIN_ACCESS(BX_CPU_ID, laddr, tlbEntry->ppf | pageOffset, 4, BX_RW);
|
BX_INSTR_LIN_ACCESS(BX_CPU_ID, laddr, tlbEntry->ppf | pageOffset, 4, BX_RW);
|
||||||
@ -889,9 +871,7 @@ accessOK:
|
|||||||
bx_hostpageaddr_t hostPageAddr = tlbEntry->hostPageAddr;
|
bx_hostpageaddr_t hostPageAddr = tlbEntry->hostPageAddr;
|
||||||
Bit32u pageOffset = PAGE_OFFSET(laddr);
|
Bit32u pageOffset = PAGE_OFFSET(laddr);
|
||||||
Bit64u *hostAddr = (Bit64u*) (hostPageAddr | pageOffset);
|
Bit64u *hostAddr = (Bit64u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
ReadHostQWordFromLittleEndian(hostAddr, data);
|
ReadHostQWordFromLittleEndian(hostAddr, data);
|
||||||
BX_CPU_THIS_PTR address_xlation.pages = (bx_ptr_equiv_t) hostAddr;
|
BX_CPU_THIS_PTR address_xlation.pages = (bx_ptr_equiv_t) hostAddr;
|
||||||
BX_INSTR_LIN_ACCESS(BX_CPU_ID, laddr, tlbEntry->ppf | pageOffset, 8, BX_RW);
|
BX_INSTR_LIN_ACCESS(BX_CPU_ID, laddr, tlbEntry->ppf | pageOffset, 8, BX_RW);
|
||||||
@ -1099,9 +1079,7 @@ accessOK:
|
|||||||
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
||||||
tlbEntry->ppf | pageOffset, 2, curr_pl, BX_WRITE, (Bit8u*) &data);
|
tlbEntry->ppf | pageOffset, 2, curr_pl, BX_WRITE, (Bit8u*) &data);
|
||||||
Bit16u *hostAddr = (Bit16u*) (hostPageAddr | pageOffset);
|
Bit16u *hostAddr = (Bit16u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
WriteHostWordToLittleEndian(hostAddr, data);
|
WriteHostWordToLittleEndian(hostAddr, data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1160,9 +1138,7 @@ accessOK:
|
|||||||
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
||||||
tlbEntry->ppf | pageOffset, 4, curr_pl, BX_WRITE, (Bit8u*) &data);
|
tlbEntry->ppf | pageOffset, 4, curr_pl, BX_WRITE, (Bit8u*) &data);
|
||||||
Bit32u *hostAddr = (Bit32u*) (hostPageAddr | pageOffset);
|
Bit32u *hostAddr = (Bit32u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
WriteHostDWordToLittleEndian(hostAddr, data);
|
WriteHostDWordToLittleEndian(hostAddr, data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1221,9 +1197,7 @@ accessOK:
|
|||||||
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
||||||
tlbEntry->ppf | pageOffset, 8, curr_pl, BX_WRITE, (Bit8u*) &data);
|
tlbEntry->ppf | pageOffset, 8, curr_pl, BX_WRITE, (Bit8u*) &data);
|
||||||
Bit64u *hostAddr = (Bit64u*) (hostPageAddr | pageOffset);
|
Bit64u *hostAddr = (Bit64u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
WriteHostQWordToLittleEndian(hostAddr, data);
|
WriteHostQWordToLittleEndian(hostAddr, data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// $Id: access64.cc,v 1.23 2009-02-26 21:56:57 sshwarts Exp $
|
// $Id: access64.cc,v 1.24 2009-03-13 18:48:08 sshwarts Exp $
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Copyright (c) 2008 Stanislav Shwartsman
|
// Copyright (c) 2008 Stanislav Shwartsman
|
||||||
@ -49,9 +49,7 @@ BX_CPU_C::write_virtual_byte_64(unsigned s, Bit64u offset, Bit8u data)
|
|||||||
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
||||||
tlbEntry->ppf | pageOffset, 1, CPL, BX_WRITE, (Bit8u*) &data);
|
tlbEntry->ppf | pageOffset, 1, CPL, BX_WRITE, (Bit8u*) &data);
|
||||||
Bit8u *hostAddr = (Bit8u*) (hostPageAddr | pageOffset);
|
Bit8u *hostAddr = (Bit8u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
*hostAddr = data;
|
*hostAddr = data;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -90,9 +88,7 @@ BX_CPU_C::write_virtual_word_64(unsigned s, Bit64u offset, Bit16u data)
|
|||||||
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
||||||
tlbEntry->ppf | pageOffset, 2, CPL, BX_WRITE, (Bit8u*) &data);
|
tlbEntry->ppf | pageOffset, 2, CPL, BX_WRITE, (Bit8u*) &data);
|
||||||
Bit16u *hostAddr = (Bit16u*) (hostPageAddr | pageOffset);
|
Bit16u *hostAddr = (Bit16u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
WriteHostWordToLittleEndian(hostAddr, data);
|
WriteHostWordToLittleEndian(hostAddr, data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -140,9 +136,7 @@ BX_CPU_C::write_virtual_dword_64(unsigned s, Bit64u offset, Bit32u data)
|
|||||||
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
||||||
tlbEntry->ppf | pageOffset, 4, CPL, BX_WRITE, (Bit8u*) &data);
|
tlbEntry->ppf | pageOffset, 4, CPL, BX_WRITE, (Bit8u*) &data);
|
||||||
Bit32u *hostAddr = (Bit32u*) (hostPageAddr | pageOffset);
|
Bit32u *hostAddr = (Bit32u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
WriteHostDWordToLittleEndian(hostAddr, data);
|
WriteHostDWordToLittleEndian(hostAddr, data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -190,9 +184,7 @@ BX_CPU_C::write_virtual_qword_64(unsigned s, Bit64u offset, Bit64u data)
|
|||||||
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
||||||
tlbEntry->ppf | pageOffset, 8, CPL, BX_WRITE, (Bit8u*) &data);
|
tlbEntry->ppf | pageOffset, 8, CPL, BX_WRITE, (Bit8u*) &data);
|
||||||
Bit64u *hostAddr = (Bit64u*) (hostPageAddr | pageOffset);
|
Bit64u *hostAddr = (Bit64u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
WriteHostQWordToLittleEndian(hostAddr, data);
|
WriteHostQWordToLittleEndian(hostAddr, data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -236,9 +228,7 @@ BX_CPU_C::write_virtual_dqword_64(unsigned s, Bit64u offset, const BxPackedXmmRe
|
|||||||
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
||||||
tlbEntry->ppf | pageOffset, 16, CPL, BX_WRITE, (Bit8u*) data);
|
tlbEntry->ppf | pageOffset, 16, CPL, BX_WRITE, (Bit8u*) data);
|
||||||
Bit64u *hostAddr = (Bit64u*) (hostPageAddr | pageOffset);
|
Bit64u *hostAddr = (Bit64u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
WriteHostQWordToLittleEndian(hostAddr, data->xmm64u(0));
|
WriteHostQWordToLittleEndian(hostAddr, data->xmm64u(0));
|
||||||
WriteHostQWordToLittleEndian(hostAddr+1, data->xmm64u(1));
|
WriteHostQWordToLittleEndian(hostAddr+1, data->xmm64u(1));
|
||||||
return;
|
return;
|
||||||
@ -274,9 +264,7 @@ BX_CPU_C::write_virtual_dqword_aligned_64(unsigned s, Bit64u offset, const BxPac
|
|||||||
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
||||||
tlbEntry->ppf | pageOffset, 16, CPL, BX_WRITE, (Bit8u*) data);
|
tlbEntry->ppf | pageOffset, 16, CPL, BX_WRITE, (Bit8u*) data);
|
||||||
Bit64u *hostAddr = (Bit64u*) (hostPageAddr | pageOffset);
|
Bit64u *hostAddr = (Bit64u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
WriteHostQWordToLittleEndian(hostAddr, data->xmm64u(0));
|
WriteHostQWordToLittleEndian(hostAddr, data->xmm64u(0));
|
||||||
WriteHostQWordToLittleEndian(hostAddr+1, data->xmm64u(1));
|
WriteHostQWordToLittleEndian(hostAddr+1, data->xmm64u(1));
|
||||||
return;
|
return;
|
||||||
@ -570,9 +558,7 @@ BX_CPU_C::read_RMW_virtual_byte_64(unsigned s, Bit64u offset)
|
|||||||
bx_hostpageaddr_t hostPageAddr = tlbEntry->hostPageAddr;
|
bx_hostpageaddr_t hostPageAddr = tlbEntry->hostPageAddr;
|
||||||
Bit32u pageOffset = PAGE_OFFSET(laddr);
|
Bit32u pageOffset = PAGE_OFFSET(laddr);
|
||||||
Bit8u *hostAddr = (Bit8u*) (hostPageAddr | pageOffset);
|
Bit8u *hostAddr = (Bit8u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
data = *hostAddr;
|
data = *hostAddr;
|
||||||
BX_CPU_THIS_PTR address_xlation.pages = (bx_ptr_equiv_t) hostAddr;
|
BX_CPU_THIS_PTR address_xlation.pages = (bx_ptr_equiv_t) hostAddr;
|
||||||
BX_INSTR_LIN_ACCESS(BX_CPU_ID, laddr, tlbEntry->ppf | pageOffset, 1, BX_RW);
|
BX_INSTR_LIN_ACCESS(BX_CPU_ID, laddr, tlbEntry->ppf | pageOffset, 1, BX_RW);
|
||||||
@ -613,9 +599,7 @@ BX_CPU_C::read_RMW_virtual_word_64(unsigned s, Bit64u offset)
|
|||||||
bx_hostpageaddr_t hostPageAddr = tlbEntry->hostPageAddr;
|
bx_hostpageaddr_t hostPageAddr = tlbEntry->hostPageAddr;
|
||||||
Bit32u pageOffset = PAGE_OFFSET(laddr);
|
Bit32u pageOffset = PAGE_OFFSET(laddr);
|
||||||
Bit16u *hostAddr = (Bit16u*) (hostPageAddr | pageOffset);
|
Bit16u *hostAddr = (Bit16u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
ReadHostWordFromLittleEndian(hostAddr, data);
|
ReadHostWordFromLittleEndian(hostAddr, data);
|
||||||
BX_CPU_THIS_PTR address_xlation.pages = (bx_ptr_equiv_t) hostAddr;
|
BX_CPU_THIS_PTR address_xlation.pages = (bx_ptr_equiv_t) hostAddr;
|
||||||
BX_INSTR_LIN_ACCESS(BX_CPU_ID, laddr, tlbEntry->ppf | pageOffset, 2, BX_RW);
|
BX_INSTR_LIN_ACCESS(BX_CPU_ID, laddr, tlbEntry->ppf | pageOffset, 2, BX_RW);
|
||||||
@ -665,9 +649,7 @@ BX_CPU_C::read_RMW_virtual_dword_64(unsigned s, Bit64u offset)
|
|||||||
bx_hostpageaddr_t hostPageAddr = tlbEntry->hostPageAddr;
|
bx_hostpageaddr_t hostPageAddr = tlbEntry->hostPageAddr;
|
||||||
Bit32u pageOffset = PAGE_OFFSET(laddr);
|
Bit32u pageOffset = PAGE_OFFSET(laddr);
|
||||||
Bit32u *hostAddr = (Bit32u*) (hostPageAddr | pageOffset);
|
Bit32u *hostAddr = (Bit32u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
ReadHostDWordFromLittleEndian(hostAddr, data);
|
ReadHostDWordFromLittleEndian(hostAddr, data);
|
||||||
BX_CPU_THIS_PTR address_xlation.pages = (bx_ptr_equiv_t) hostAddr;
|
BX_CPU_THIS_PTR address_xlation.pages = (bx_ptr_equiv_t) hostAddr;
|
||||||
BX_INSTR_LIN_ACCESS(BX_CPU_ID, laddr, tlbEntry->ppf | pageOffset, 4, BX_RW);
|
BX_INSTR_LIN_ACCESS(BX_CPU_ID, laddr, tlbEntry->ppf | pageOffset, 4, BX_RW);
|
||||||
@ -717,9 +699,7 @@ BX_CPU_C::read_RMW_virtual_qword_64(unsigned s, Bit64u offset)
|
|||||||
bx_hostpageaddr_t hostPageAddr = tlbEntry->hostPageAddr;
|
bx_hostpageaddr_t hostPageAddr = tlbEntry->hostPageAddr;
|
||||||
Bit32u pageOffset = PAGE_OFFSET(laddr);
|
Bit32u pageOffset = PAGE_OFFSET(laddr);
|
||||||
Bit64u *hostAddr = (Bit64u*) (hostPageAddr | pageOffset);
|
Bit64u *hostAddr = (Bit64u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
ReadHostQWordFromLittleEndian(hostAddr, data);
|
ReadHostQWordFromLittleEndian(hostAddr, data);
|
||||||
BX_CPU_THIS_PTR address_xlation.pages = (bx_ptr_equiv_t) hostAddr;
|
BX_CPU_THIS_PTR address_xlation.pages = (bx_ptr_equiv_t) hostAddr;
|
||||||
BX_INSTR_LIN_ACCESS(BX_CPU_ID, laddr, tlbEntry->ppf | pageOffset, 8, BX_RW);
|
BX_INSTR_LIN_ACCESS(BX_CPU_ID, laddr, tlbEntry->ppf | pageOffset, 8, BX_RW);
|
||||||
@ -767,9 +747,7 @@ void BX_CPU_C::write_new_stack_word_64(Bit64u laddr, unsigned curr_pl, Bit16u da
|
|||||||
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
||||||
tlbEntry->ppf | pageOffset, 2, curr_pl, BX_WRITE, (Bit8u*) &data);
|
tlbEntry->ppf | pageOffset, 2, curr_pl, BX_WRITE, (Bit8u*) &data);
|
||||||
Bit16u *hostAddr = (Bit16u*) (hostPageAddr | pageOffset);
|
Bit16u *hostAddr = (Bit16u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
WriteHostWordToLittleEndian(hostAddr, data);
|
WriteHostWordToLittleEndian(hostAddr, data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -812,9 +790,7 @@ void BX_CPU_C::write_new_stack_dword_64(Bit64u laddr, unsigned curr_pl, Bit32u d
|
|||||||
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
||||||
tlbEntry->ppf | pageOffset, 4, curr_pl, BX_WRITE, (Bit8u*) &data);
|
tlbEntry->ppf | pageOffset, 4, curr_pl, BX_WRITE, (Bit8u*) &data);
|
||||||
Bit32u *hostAddr = (Bit32u*) (hostPageAddr | pageOffset);
|
Bit32u *hostAddr = (Bit32u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
WriteHostDWordToLittleEndian(hostAddr, data);
|
WriteHostDWordToLittleEndian(hostAddr, data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -857,9 +833,7 @@ void BX_CPU_C::write_new_stack_qword_64(Bit64u laddr, unsigned curr_pl, Bit64u d
|
|||||||
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
BX_DBG_LIN_MEMORY_ACCESS(BX_CPU_ID, laddr,
|
||||||
tlbEntry->ppf | pageOffset, 8, curr_pl, BX_WRITE, (Bit8u*) &data);
|
tlbEntry->ppf | pageOffset, 8, curr_pl, BX_WRITE, (Bit8u*) &data);
|
||||||
Bit64u *hostAddr = (Bit64u*) (hostPageAddr | pageOffset);
|
Bit64u *hostAddr = (Bit64u*) (hostPageAddr | pageOffset);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
pageWriteStampTable.decWriteStamp(tlbEntry->ppf);
|
||||||
#endif
|
|
||||||
WriteHostQWordToLittleEndian(hostAddr, data);
|
WriteHostQWordToLittleEndian(hostAddr, data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// $Id: cpu.cc,v 1.275 2009-03-13 18:02:33 sshwarts Exp $
|
// $Id: cpu.cc,v 1.276 2009-03-13 18:48:08 sshwarts Exp $
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Copyright (C) 2001 MandrakeSoft S.A.
|
// Copyright (C) 2001 MandrakeSoft S.A.
|
||||||
@ -38,9 +38,6 @@
|
|||||||
#define RCX ECX
|
#define RCX ECX
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// ICACHE instrumentation code
|
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
|
|
||||||
#define InstrumentICACHE 0
|
#define InstrumentICACHE 0
|
||||||
|
|
||||||
#if InstrumentICACHE
|
#if InstrumentICACHE
|
||||||
@ -59,14 +56,11 @@ static unsigned iCacheMisses=0;
|
|||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
#define InstrICache_Increment(v) (v)++
|
#define InstrICache_Increment(v) (v)++
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#define InstrICache_Stats()
|
#define InstrICache_Stats()
|
||||||
#define InstrICache_Increment(v)
|
#define InstrICache_Increment(v)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // BX_SUPPORT_ICACHE
|
|
||||||
|
|
||||||
// The CHECK_MAX_INSTRUCTIONS macro allows cpu_loop to execute a few
|
// The CHECK_MAX_INSTRUCTIONS macro allows cpu_loop to execute a few
|
||||||
// instructions and then return so that the other processors have a chance to
|
// instructions and then return so that the other processors have a chance to
|
||||||
// run. This is used by bochs internal debugger or when simulating
|
// run. This is used by bochs internal debugger or when simulating
|
||||||
@ -141,7 +135,6 @@ no_async_event:
|
|||||||
eipBiased = RIP + BX_CPU_THIS_PTR eipPageBias;
|
eipBiased = RIP + BX_CPU_THIS_PTR eipPageBias;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
bx_phy_address pAddr = BX_CPU_THIS_PTR pAddrPage + eipBiased;
|
bx_phy_address pAddr = BX_CPU_THIS_PTR pAddrPage + eipBiased;
|
||||||
bxICacheEntry_c *entry = BX_CPU_THIS_PTR iCache.get_entry(pAddr);
|
bxICacheEntry_c *entry = BX_CPU_THIS_PTR iCache.get_entry(pAddr);
|
||||||
bxInstruction_c *i = entry->i;
|
bxInstruction_c *i = entry->i;
|
||||||
@ -161,10 +154,6 @@ no_async_event:
|
|||||||
serveICacheMiss(entry, eipBiased, pAddr);
|
serveICacheMiss(entry, eipBiased, pAddr);
|
||||||
i = entry->i;
|
i = entry->i;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
bxInstruction_c iStorage, *i = &iStorage;
|
|
||||||
fetchInstruction(i, eipBiased);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if BX_SUPPORT_TRACE_CACHE
|
#if BX_SUPPORT_TRACE_CACHE
|
||||||
unsigned length = entry->ilen;
|
unsigned length = entry->ilen;
|
||||||
@ -767,13 +756,11 @@ void BX_CPU_C::prefetch(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
BX_CPU_THIS_PTR currPageWriteStampPtr = pageWriteStampTable.getPageWriteStampPtr(BX_CPU_THIS_PTR pAddrPage);
|
BX_CPU_THIS_PTR currPageWriteStampPtr = pageWriteStampTable.getPageWriteStampPtr(BX_CPU_THIS_PTR pAddrPage);
|
||||||
Bit32u pageWriteStamp = *(BX_CPU_THIS_PTR currPageWriteStampPtr);
|
Bit32u pageWriteStamp = *(BX_CPU_THIS_PTR currPageWriteStampPtr);
|
||||||
pageWriteStamp &= ~ICacheWriteStampFetchModeMask; // Clear out old fetch mode bits
|
pageWriteStamp &= ~ICacheWriteStampFetchModeMask; // Clear out old fetch mode bits
|
||||||
pageWriteStamp |= BX_CPU_THIS_PTR fetchModeMask; // And add new ones
|
pageWriteStamp |= BX_CPU_THIS_PTR fetchModeMask; // And add new ones
|
||||||
pageWriteStampTable.setPageWriteStamp(BX_CPU_THIS_PTR pAddrPage, pageWriteStamp);
|
pageWriteStampTable.setPageWriteStamp(BX_CPU_THIS_PTR pAddrPage, pageWriteStamp);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BX_CPU_C::boundaryFetch(const Bit8u *fetchPtr, unsigned remainingInPage, bxInstruction_c *i)
|
void BX_CPU_C::boundaryFetch(const Bit8u *fetchPtr, unsigned remainingInPage, bxInstruction_c *i)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// $Id: cpu.h,v 1.583 2009-03-13 18:26:10 sshwarts Exp $
|
// $Id: cpu.h,v 1.584 2009-03-13 18:48:08 sshwarts Exp $
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Copyright (C) 2001 MandrakeSoft S.A.
|
// Copyright (C) 2001 MandrakeSoft S.A.
|
||||||
@ -621,10 +621,7 @@ struct cpuid_function_t {
|
|||||||
#include "descriptor.h"
|
#include "descriptor.h"
|
||||||
#include "instr.h"
|
#include "instr.h"
|
||||||
#include "lazy_flags.h"
|
#include "lazy_flags.h"
|
||||||
|
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
#include "icache.h"
|
#include "icache.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
// BX_TLB_SIZE: Number of entries in TLB
|
// BX_TLB_SIZE: Number of entries in TLB
|
||||||
// BX_TLB_INDEX_OF(lpf): This macro is passed the linear page frame
|
// BX_TLB_INDEX_OF(lpf): This macro is passed the linear page frame
|
||||||
@ -987,11 +984,9 @@ public: // for now...
|
|||||||
// An instruction cache. Each entry should be exactly 32 bytes, and
|
// An instruction cache. Each entry should be exactly 32 bytes, and
|
||||||
// this structure should be aligned on a 32-byte boundary to be friendly
|
// this structure should be aligned on a 32-byte boundary to be friendly
|
||||||
// with the host cache lines.
|
// with the host cache lines.
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
bxICache_c iCache BX_CPP_AlignN(32);
|
bxICache_c iCache BX_CPP_AlignN(32);
|
||||||
Bit32u fetchModeMask;
|
Bit32u fetchModeMask;
|
||||||
const Bit32u *currPageWriteStampPtr;
|
const Bit32u *currPageWriteStampPtr;
|
||||||
#endif
|
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
bx_address rm_addr; // The address offset after resolution
|
bx_address rm_addr; // The address offset after resolution
|
||||||
@ -2776,13 +2771,12 @@ public: // for now...
|
|||||||
#if BX_SUPPORT_X86_64
|
#if BX_SUPPORT_X86_64
|
||||||
BX_SMF unsigned fetchDecode64(const Bit8u *fetchPtr, bxInstruction_c *i, unsigned remainingInPage) BX_CPP_AttrRegparmN(3);
|
BX_SMF unsigned fetchDecode64(const Bit8u *fetchPtr, bxInstruction_c *i, unsigned remainingInPage) BX_CPP_AttrRegparmN(3);
|
||||||
#endif
|
#endif
|
||||||
BX_SMF bx_bool fetchInstruction(bxInstruction_c *iStorage, Bit32u eipBiased);
|
|
||||||
BX_SMF void boundaryFetch(const Bit8u *fetchPtr, unsigned remainingInPage, bxInstruction_c *);
|
BX_SMF void boundaryFetch(const Bit8u *fetchPtr, unsigned remainingInPage, bxInstruction_c *);
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
BX_SMF void serveICacheMiss(bxICacheEntry_c *entry, Bit32u eipBiased, bx_phy_address pAddr);
|
BX_SMF void serveICacheMiss(bxICacheEntry_c *entry, Bit32u eipBiased, bx_phy_address pAddr);
|
||||||
#if BX_SUPPORT_TRACE_CACHE
|
#if BX_SUPPORT_TRACE_CACHE
|
||||||
BX_SMF bx_bool mergeTraces(bxICacheEntry_c *entry, bxInstruction_c *i, bx_phy_address pAddr);
|
BX_SMF bx_bool mergeTraces(bxICacheEntry_c *entry, bxInstruction_c *i, bx_phy_address pAddr);
|
||||||
#endif
|
#else
|
||||||
|
BX_SMF bx_bool fetchInstruction(bxInstruction_c *iStorage, Bit32u eipBiased);
|
||||||
#endif
|
#endif
|
||||||
BX_SMF void prefetch(void);
|
BX_SMF void prefetch(void);
|
||||||
BX_SMF void updateFetchModeMask(void);
|
BX_SMF void updateFetchModeMask(void);
|
||||||
@ -3427,13 +3421,11 @@ BX_CPP_INLINE void BX_CPU_C::prepareXSAVE(void)
|
|||||||
|
|
||||||
BX_CPP_INLINE void BX_CPU_C::updateFetchModeMask(void)
|
BX_CPP_INLINE void BX_CPU_C::updateFetchModeMask(void)
|
||||||
{
|
{
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
BX_CPU_THIS_PTR fetchModeMask =
|
BX_CPU_THIS_PTR fetchModeMask =
|
||||||
#if BX_SUPPORT_X86_64
|
#if BX_SUPPORT_X86_64
|
||||||
((BX_CPU_THIS_PTR cpu_mode == BX_MODE_LONG_64)<<31) |
|
((BX_CPU_THIS_PTR cpu_mode == BX_MODE_LONG_64)<<31) |
|
||||||
#endif
|
#endif
|
||||||
(BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].cache.u.segment.d_b << 30);
|
(BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].cache.u.segment.d_b << 30);
|
||||||
#endif
|
|
||||||
|
|
||||||
BX_CPU_THIS_PTR user_pl = // CPL == 3
|
BX_CPU_THIS_PTR user_pl = // CPL == 3
|
||||||
(BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.rpl == 3);
|
(BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.rpl == 3);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// $Id: icache.cc,v 1.21 2009-01-16 18:18:58 sshwarts Exp $
|
// $Id: icache.cc,v 1.22 2009-03-13 18:48:08 sshwarts Exp $
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Copyright (c) 2007 Stanislav Shwartsman
|
// Copyright (c) 2007 Stanislav Shwartsman
|
||||||
@ -26,35 +26,6 @@
|
|||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
#define LOG_THIS BX_CPU_THIS_PTR
|
#define LOG_THIS BX_CPU_THIS_PTR
|
||||||
|
|
||||||
bx_bool BX_CPU_C::fetchInstruction(bxInstruction_c *iStorage, Bit32u eipBiased)
|
|
||||||
{
|
|
||||||
unsigned remainingInPage = BX_CPU_THIS_PTR eipPageWindowSize - eipBiased;
|
|
||||||
const Bit8u *fetchPtr = BX_CPU_THIS_PTR eipFetchPtr + eipBiased;
|
|
||||||
unsigned ret;
|
|
||||||
|
|
||||||
#if BX_SUPPORT_X86_64
|
|
||||||
if (BX_CPU_THIS_PTR cpu_mode == BX_MODE_LONG_64)
|
|
||||||
ret = fetchDecode64(fetchPtr, iStorage, remainingInPage);
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
ret = fetchDecode32(fetchPtr, iStorage, remainingInPage);
|
|
||||||
|
|
||||||
if (ret==0) {
|
|
||||||
// handle instrumentation callback inside boundaryFetch
|
|
||||||
boundaryFetch(fetchPtr, remainingInPage, iStorage);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if BX_INSTRUMENTATION
|
|
||||||
BX_INSTR_OPCODE(BX_CPU_ID, fetchPtr, iStorage->ilen(),
|
|
||||||
BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].cache.u.segment.d_b, Is64BitMode());
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
|
|
||||||
bxPageWriteStampTable pageWriteStampTable;
|
bxPageWriteStampTable pageWriteStampTable;
|
||||||
|
|
||||||
void flushICaches(void)
|
void flushICaches(void)
|
||||||
@ -163,6 +134,33 @@ bx_bool BX_CPU_C::mergeTraces(bxICacheEntry_c *entry, bxInstruction_c *i, bx_phy
|
|||||||
|
|
||||||
#else // BX_SUPPORT_TRACE_CACHE == 0
|
#else // BX_SUPPORT_TRACE_CACHE == 0
|
||||||
|
|
||||||
|
bx_bool BX_CPU_C::fetchInstruction(bxInstruction_c *iStorage, Bit32u eipBiased)
|
||||||
|
{
|
||||||
|
unsigned remainingInPage = BX_CPU_THIS_PTR eipPageWindowSize - eipBiased;
|
||||||
|
const Bit8u *fetchPtr = BX_CPU_THIS_PTR eipFetchPtr + eipBiased;
|
||||||
|
unsigned ret;
|
||||||
|
|
||||||
|
#if BX_SUPPORT_X86_64
|
||||||
|
if (BX_CPU_THIS_PTR cpu_mode == BX_MODE_LONG_64)
|
||||||
|
ret = fetchDecode64(fetchPtr, iStorage, remainingInPage);
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
ret = fetchDecode32(fetchPtr, iStorage, remainingInPage);
|
||||||
|
|
||||||
|
if (ret==0) {
|
||||||
|
// handle instrumentation callback inside boundaryFetch
|
||||||
|
boundaryFetch(fetchPtr, remainingInPage, iStorage);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if BX_INSTRUMENTATION
|
||||||
|
BX_INSTR_OPCODE(BX_CPU_ID, fetchPtr, iStorage->ilen(),
|
||||||
|
BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].cache.u.segment.d_b, Is64BitMode());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
void BX_CPU_C::serveICacheMiss(bxICacheEntry_c *cache_entry, Bit32u eipBiased, bx_phy_address pAddr)
|
void BX_CPU_C::serveICacheMiss(bxICacheEntry_c *cache_entry, Bit32u eipBiased, bx_phy_address pAddr)
|
||||||
{
|
{
|
||||||
// The entry will be marked valid if fetchdecode will succeed
|
// The entry will be marked valid if fetchdecode will succeed
|
||||||
@ -175,5 +173,3 @@ void BX_CPU_C::serveICacheMiss(bxICacheEntry_c *cache_entry, Bit32u eipBiased, b
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // BX_SUPPORT_ICACHE
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// $Id: icache.h,v 1.43 2009-03-10 16:28:01 sshwarts Exp $
|
// $Id: icache.h,v 1.44 2009-03-13 18:48:08 sshwarts Exp $
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Copyright (c) 2007 Stanislav Shwartsman
|
// Copyright (c) 2007 Stanislav Shwartsman
|
||||||
@ -24,8 +24,6 @@
|
|||||||
#ifndef BX_ICACHE_H
|
#ifndef BX_ICACHE_H
|
||||||
#define BX_ICACHE_H
|
#define BX_ICACHE_H
|
||||||
|
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
|
|
||||||
// bit31: 1=Long Mode, 0=not Long Mode.
|
// bit31: 1=Long Mode, 0=not Long Mode.
|
||||||
// bit30: 1=CS is 32/64-bit, 0=CS is 16-bit.
|
// bit30: 1=CS is 32/64-bit, 0=CS is 16-bit.
|
||||||
// Combination bit31=1 & bit30=1 is invalid (data page)
|
// Combination bit31=1 & bit30=1 is invalid (data page)
|
||||||
@ -199,6 +197,4 @@ BX_CPP_INLINE void bxICache_c::purgeICacheEntries(void)
|
|||||||
extern void purgeICaches(void);
|
extern void purgeICaches(void);
|
||||||
extern void flushICaches(void);
|
extern void flushICaches(void);
|
||||||
|
|
||||||
#endif // BX_SUPPORT_ICACHE
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// $Id: init.cc,v 1.203 2009-02-20 17:26:01 sshwarts Exp $
|
// $Id: init.cc,v 1.204 2009-03-13 18:48:08 sshwarts Exp $
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Copyright (C) 2001 MandrakeSoft S.A.
|
// Copyright (C) 2001 MandrakeSoft S.A.
|
||||||
@ -778,9 +778,7 @@ void BX_CPU_C::reset(unsigned source)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
updateFetchModeMask();
|
updateFetchModeMask();
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
flushICaches();
|
flushICaches();
|
||||||
#endif
|
|
||||||
|
|
||||||
/* DS (Data Segment) and descriptor cache */
|
/* DS (Data Segment) and descriptor cache */
|
||||||
parse_selector(0x0000,
|
parse_selector(0x0000,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// $Id: proc_ctrl.cc,v 1.290 2009-03-10 22:28:08 sshwarts Exp $
|
// $Id: proc_ctrl.cc,v 1.291 2009-03-13 18:48:08 sshwarts Exp $
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Copyright (C) 2001 MandrakeSoft S.A.
|
// Copyright (C) 2001 MandrakeSoft S.A.
|
||||||
@ -173,10 +173,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::INVD(bxInstruction_c *i)
|
|||||||
BX_DEBUG(("INVD: Flush internal caches !"));
|
BX_DEBUG(("INVD: Flush internal caches !"));
|
||||||
BX_INSTR_CACHE_CNTRL(BX_CPU_ID, BX_INSTR_INVD);
|
BX_INSTR_CACHE_CNTRL(BX_CPU_ID, BX_INSTR_INVD);
|
||||||
|
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
flushICaches();
|
flushICaches();
|
||||||
#endif
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
BX_INFO(("INVD: required 486 support, use --enable-cpu-level=4 option"));
|
BX_INFO(("INVD: required 486 support, use --enable-cpu-level=4 option"));
|
||||||
exception(BX_UD_EXCEPTION, 0, 0);
|
exception(BX_UD_EXCEPTION, 0, 0);
|
||||||
@ -197,10 +194,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::WBINVD(bxInstruction_c *i)
|
|||||||
BX_DEBUG(("WBINVD: Flush internal caches !"));
|
BX_DEBUG(("WBINVD: Flush internal caches !"));
|
||||||
BX_INSTR_CACHE_CNTRL(BX_CPU_ID, BX_INSTR_WBINVD);
|
BX_INSTR_CACHE_CNTRL(BX_CPU_ID, BX_INSTR_WBINVD);
|
||||||
|
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
flushICaches();
|
flushICaches();
|
||||||
#endif
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
BX_INFO(("WBINVD: required 486 support, use --enable-cpu-level=4 option"));
|
BX_INFO(("WBINVD: required 486 support, use --enable-cpu-level=4 option"));
|
||||||
exception(BX_UD_EXCEPTION, 0, 0);
|
exception(BX_UD_EXCEPTION, 0, 0);
|
||||||
@ -1240,18 +1234,14 @@ void BX_CPU_C::handleAlignmentCheck(void)
|
|||||||
if (BX_CPU_THIS_PTR alignment_check_mask == 0) {
|
if (BX_CPU_THIS_PTR alignment_check_mask == 0) {
|
||||||
BX_CPU_THIS_PTR alignment_check_mask = 0xF;
|
BX_CPU_THIS_PTR alignment_check_mask = 0xF;
|
||||||
BX_INFO(("Enable alignment check (#AC exception)"));
|
BX_INFO(("Enable alignment check (#AC exception)"));
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
BX_CPU_THIS_PTR iCache.flushICacheEntries();
|
BX_CPU_THIS_PTR iCache.flushICacheEntries();
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (BX_CPU_THIS_PTR alignment_check_mask != 0) {
|
if (BX_CPU_THIS_PTR alignment_check_mask != 0) {
|
||||||
BX_CPU_THIS_PTR alignment_check_mask = 0;
|
BX_CPU_THIS_PTR alignment_check_mask = 0;
|
||||||
BX_INFO(("Disable alignment check (#AC exception)"));
|
BX_INFO(("Disable alignment check (#AC exception)"));
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
BX_CPU_THIS_PTR iCache.flushICacheEntries();
|
BX_CPU_THIS_PTR iCache.flushICacheEntries();
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// $Id: load32bitOShack.cc,v 1.32 2009-01-16 18:18:57 sshwarts Exp $
|
// $Id: load32bitOShack.cc,v 1.33 2009-03-13 18:48:08 sshwarts Exp $
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Copyright (C) 2001 MandrakeSoft S.A.
|
// Copyright (C) 2001 MandrakeSoft S.A.
|
||||||
@ -246,10 +246,6 @@ void bx_load_null_kernel_hack(void)
|
|||||||
BX_CPU(0)->sregs[BX_SEG_REG_CS].cache.u.segment.g = 1; // page gran
|
BX_CPU(0)->sregs[BX_SEG_REG_CS].cache.u.segment.g = 1; // page gran
|
||||||
BX_CPU(0)->sregs[BX_SEG_REG_CS].cache.u.segment.d_b = 1; // 32bit
|
BX_CPU(0)->sregs[BX_SEG_REG_CS].cache.u.segment.d_b = 1; // 32bit
|
||||||
|
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
BX_CPU(0)->updateFetchModeMask();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// DS deltas
|
// DS deltas
|
||||||
BX_CPU(0)->sregs[BX_SEG_REG_DS].cache.u.segment.base = 0x00000000;
|
BX_CPU(0)->sregs[BX_SEG_REG_DS].cache.u.segment.base = 0x00000000;
|
||||||
BX_CPU(0)->sregs[BX_SEG_REG_DS].cache.u.segment.limit = 0xFFFFF;
|
BX_CPU(0)->sregs[BX_SEG_REG_DS].cache.u.segment.limit = 0xFFFFF;
|
||||||
@ -259,10 +255,11 @@ void bx_load_null_kernel_hack(void)
|
|||||||
|
|
||||||
// CR0 deltas
|
// CR0 deltas
|
||||||
BX_CPU(0)->cr0.set_PE(1); // protected mode
|
BX_CPU(0)->cr0.set_PE(1); // protected mode
|
||||||
|
|
||||||
|
BX_CPU(0)->handleCpuModeChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
Bit32u
|
Bit32u bx_load_kernel_image(char *path, Bit32u paddr)
|
||||||
bx_load_kernel_image(char *path, Bit32u paddr)
|
|
||||||
{
|
{
|
||||||
struct stat stat_buf;
|
struct stat stat_buf;
|
||||||
int fd, ret;
|
int fd, ret;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// $Id: main.cc,v 1.393 2009-02-23 11:06:53 vruppert Exp $
|
// $Id: main.cc,v 1.394 2009-03-13 18:48:08 sshwarts Exp $
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Copyright (C) 2002 MandrakeSoft S.A.
|
// Copyright (C) 2002 MandrakeSoft S.A.
|
||||||
@ -1028,7 +1028,6 @@ void bx_init_hardware()
|
|||||||
BX_INFO((" VMX support: %s",BX_SUPPORT_VMX?"yes":"no"));
|
BX_INFO((" VMX support: %s",BX_SUPPORT_VMX?"yes":"no"));
|
||||||
BX_INFO(("Optimization configuration"));
|
BX_INFO(("Optimization configuration"));
|
||||||
BX_INFO((" RepeatSpeedups support: %s",BX_SupportRepeatSpeedups?"yes":"no"));
|
BX_INFO((" RepeatSpeedups support: %s",BX_SupportRepeatSpeedups?"yes":"no"));
|
||||||
BX_INFO((" Icache support: %s",BX_SUPPORT_ICACHE?"yes":"no"));
|
|
||||||
BX_INFO((" Trace cache support: %s",BX_SUPPORT_TRACE_CACHE?"yes":"no"));
|
BX_INFO((" Trace cache support: %s",BX_SUPPORT_TRACE_CACHE?"yes":"no"));
|
||||||
BX_INFO((" Fast function calls: %s",BX_FAST_FUNC_CALL?"yes":"no"));
|
BX_INFO((" Fast function calls: %s",BX_FAST_FUNC_CALL?"yes":"no"));
|
||||||
BX_INFO(("Devices configuration"));
|
BX_INFO(("Devices configuration"));
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// $Id: memory.cc,v 1.75 2009-02-17 19:20:47 sshwarts Exp $
|
// $Id: memory.cc,v 1.76 2009-03-13 18:48:08 sshwarts Exp $
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Copyright (C) 2001 MandrakeSoft S.A.
|
// Copyright (C) 2001 MandrakeSoft S.A.
|
||||||
@ -89,9 +89,7 @@ mem_write:
|
|||||||
|
|
||||||
// all memory access feets in single 4K page
|
// all memory access feets in single 4K page
|
||||||
if (a20addr < BX_MEM_THIS len) {
|
if (a20addr < BX_MEM_THIS len) {
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
pageWriteStampTable.decWriteStamp(a20addr);
|
pageWriteStampTable.decWriteStamp(a20addr);
|
||||||
#endif
|
|
||||||
// all of data is within limits of physical memory
|
// all of data is within limits of physical memory
|
||||||
if ((a20addr & 0xfff80000) != 0x00080000 || (a20addr <= 0x0009ffff))
|
if ((a20addr & 0xfff80000) != 0x00080000 || (a20addr <= 0x0009ffff))
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// $Id: pc_system.cc,v 1.73 2009-01-16 18:18:57 sshwarts Exp $
|
// $Id: pc_system.cc,v 1.74 2009-03-13 18:48:08 sshwarts Exp $
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Copyright (C) 2002 MandrakeSoft S.A.
|
// Copyright (C) 2002 MandrakeSoft S.A.
|
||||||
@ -48,12 +48,7 @@ double m_ips; // Millions of Instructions Per Second
|
|||||||
#define SpewPeriodicTimerInfo 0
|
#define SpewPeriodicTimerInfo 0
|
||||||
#define MinAllowableTimerPeriod 1
|
#define MinAllowableTimerPeriod 1
|
||||||
|
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
const Bit64u bx_pc_system_c::NullTimerInterval = ICacheWriteStampStart;
|
const Bit64u bx_pc_system_c::NullTimerInterval = ICacheWriteStampStart;
|
||||||
#else
|
|
||||||
// This must be the maximum 32-bit unsigned int value, NOT (Bit64u) -1.
|
|
||||||
const Bit64u bx_pc_system_c::NullTimerInterval = 0xffffffff;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// constructor
|
// constructor
|
||||||
bx_pc_system_c::bx_pc_system_c()
|
bx_pc_system_c::bx_pc_system_c()
|
||||||
@ -418,9 +413,7 @@ void bx_pc_system_c::nullTimer(void* this_ptr)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if BX_SUPPORT_ICACHE
|
|
||||||
purgeICaches();
|
purgeICaches();
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void bx_pc_system_c::benchmarkTimer(void* this_ptr)
|
void bx_pc_system_c::benchmarkTimer(void* this_ptr)
|
||||||
|
Loading…
Reference in New Issue
Block a user