summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author cracyc <cracyc@users.noreply.github.com>2013-02-07 01:28:14 +0000
committer cracyc <cracyc@users.noreply.github.com>2013-02-07 01:28:14 +0000
commitc8dc44b9fafe06eb6e9e949ac2650dab8ebf54e2 (patch)
treec153ab761fc1fc9e97fe4cb7c1b816fc29f960a9
parent27ff4936851545d4992cb9eade544a0bced5fbee (diff)
i386: improve tlb performance slightly (nw)
-rw-r--r--src/emu/cpu/i386/i386priv.h10
-rw-r--r--src/emu/cpu/vtlb.c1
2 files changed, 4 insertions, 7 deletions
diff --git a/src/emu/cpu/i386/i386priv.h b/src/emu/cpu/i386/i386priv.h
index a3279246082..b068039bb2d 100644
--- a/src/emu/cpu/i386/i386priv.h
+++ b/src/emu/cpu/i386/i386priv.h
@@ -527,11 +527,10 @@ static int i386_translate_address(i386_state *cpustate, int intention, offs_t *a
ret = FALSE;
else
{
+ if(write)
+ perm |= VTLB_FLAG_DIRTY;
if(!(page_dir & 0x40) && write)
- {
cpustate->program->write_dword(pdbr + directory * 4, page_dir | 0x60);
- perm |= VTLB_FLAG_DIRTY;
- }
else if(!(page_dir & 0x20))
cpustate->program->write_dword(pdbr + directory * 4, page_dir | 0x20);
ret = TRUE;
@@ -557,13 +556,12 @@ static int i386_translate_address(i386_state *cpustate, int intention, offs_t *a
ret = FALSE;
else
{
+ if(write)
+ perm |= VTLB_FLAG_DIRTY;
if(!(page_dir & 0x20))
cpustate->program->write_dword(pdbr + directory * 4, page_dir | 0x20);
if(!(page_entry & 0x40) && write)
- {
cpustate->program->write_dword((page_dir & 0xfffff000) + (table * 4), page_entry | 0x60);
- perm |= VTLB_FLAG_DIRTY;
- }
else if(!(page_entry & 0x20))
cpustate->program->write_dword((page_dir & 0xfffff000) + (table * 4), page_entry | 0x20);
ret = TRUE;
diff --git a/src/emu/cpu/vtlb.c b/src/emu/cpu/vtlb.c
index d9ab0a4c875..da583fb77e6 100644
--- a/src/emu/cpu/vtlb.c
+++ b/src/emu/cpu/vtlb.c
@@ -232,7 +232,6 @@ void vtlb_load(vtlb_state *vtlb, int entrynum, int numpages, offs_t address, vtl
void vtlb_dynload(vtlb_state *vtlb, int index, offs_t address, vtlb_entry value)
{
vtlb_entry entry = vtlb->table[index];
- value &= VTLB_FLAGS_MASK;
if (vtlb->dynamic == 0)
{