Delete {read,write}_aligned
This commit is contained in:
parent
70b98bbe5a
commit
942b16d71d
2 changed files with 9 additions and 51 deletions
|
|
@ -19,10 +19,7 @@ use cpu::fpu::fpu_set_tag_word;
|
|||
use cpu::global_pointers::*;
|
||||
use cpu::memory;
|
||||
use cpu::memory::mem8;
|
||||
use cpu::memory::{
|
||||
in_mapped_range, read8, read16, read32s, read64s, read128, read_aligned32, read_aligned64,
|
||||
write8, write_aligned32,
|
||||
};
|
||||
use cpu::memory::{in_mapped_range, read8, read16, read32s, read64s, read128, write8};
|
||||
use cpu::misc_instr::{
|
||||
adjust_stack_reg, get_stack_pointer, getaf, getcf, getof, getpf, getsf, getzf, pop16, pop32s,
|
||||
push16, push32,
|
||||
|
|
@ -1834,7 +1831,7 @@ pub unsafe fn do_page_walk(
|
|||
let page_dir_idx = ((addr as u32) >> 21) & 0x1FF;
|
||||
|
||||
let pdpt_addr = (*cr.offset(3) as u32 >> 2).wrapping_add(pdpt_idx << 1);
|
||||
let pdpt_entry = read_aligned64(pdpt_addr);
|
||||
let pdpt_entry = read64s(pdpt_addr << 2);
|
||||
if pdpt_entry as i32 & PAGE_TABLE_PRESENT_MASK == 0 {
|
||||
return Err(PageFault {
|
||||
addr,
|
||||
|
|
@ -1850,7 +1847,7 @@ pub unsafe fn do_page_walk(
|
|||
|
||||
let page_dir_addr =
|
||||
((pdpt_entry as u32 & 0xFFFFF000) >> 2).wrapping_add(page_dir_idx << 1);
|
||||
let page_dir_entry = read_aligned64(page_dir_addr);
|
||||
let page_dir_entry = read64s(page_dir_addr << 2);
|
||||
dbg_assert!(
|
||||
page_dir_entry as u64 & 0x7FFF_FFFF_0000_0000 == 0,
|
||||
"Unsupported: Page directory entry larger than 32 bits"
|
||||
|
|
@ -1865,7 +1862,7 @@ pub unsafe fn do_page_walk(
|
|||
else {
|
||||
let page_dir_idx = (addr as u32) >> 22;
|
||||
let page_dir_addr = (*cr.offset(3) as u32 >> 2).wrapping_add(page_dir_idx);
|
||||
let page_dir_entry = read_aligned32(page_dir_addr);
|
||||
let page_dir_entry = read32s(page_dir_addr << 2);
|
||||
(page_dir_addr as i32, page_dir_entry)
|
||||
};
|
||||
|
||||
|
|
@ -1911,7 +1908,7 @@ pub unsafe fn do_page_walk(
|
|||
| if for_writing { PAGE_TABLE_DIRTY_MASK } else { 0 };
|
||||
|
||||
if side_effects && page_dir_entry != new_page_dir_entry {
|
||||
write_aligned32(page_dir_addr as u32, new_page_dir_entry);
|
||||
write8((page_dir_addr as u32) << 2, new_page_dir_entry);
|
||||
}
|
||||
|
||||
high = if pae {
|
||||
|
|
@ -1927,7 +1924,7 @@ pub unsafe fn do_page_walk(
|
|||
let page_table = (page_dir_entry as u32 & 0xFFFFF000) >> 2;
|
||||
let page_table_idx = (addr as u32 >> 12) & 0x1FF;
|
||||
let page_table_addr = page_table.wrapping_add(page_table_idx << 1);
|
||||
let page_table_entry = read_aligned64(page_table_addr);
|
||||
let page_table_entry = read64s(page_table_addr << 2);
|
||||
dbg_assert!(
|
||||
page_table_entry as u64 & 0x7FFF_FFFF_0000_0000 == 0,
|
||||
"Unsupported: Page table entry larger than 32 bits"
|
||||
|
|
@ -1943,7 +1940,7 @@ pub unsafe fn do_page_walk(
|
|||
let page_table = (page_dir_entry as u32 & 0xFFFFF000) >> 2;
|
||||
let page_table_idx = (addr as u32 >> 12) & 0x3FF;
|
||||
let page_table_addr = page_table.wrapping_add(page_table_idx);
|
||||
let page_table_entry = read_aligned32(page_table_addr);
|
||||
let page_table_entry = read32s(page_table_addr << 2);
|
||||
(page_table_addr as i32, page_table_entry)
|
||||
};
|
||||
|
||||
|
|
@ -1983,13 +1980,13 @@ pub unsafe fn do_page_walk(
|
|||
// Note: dirty bit is only set on the page table entry
|
||||
let new_page_dir_entry = page_dir_entry | PAGE_TABLE_ACCESSED_MASK;
|
||||
if side_effects && new_page_dir_entry != page_dir_entry {
|
||||
write_aligned32(page_dir_addr as u32, new_page_dir_entry);
|
||||
write8((page_dir_addr as u32) << 2, new_page_dir_entry);
|
||||
}
|
||||
let new_page_table_entry = page_table_entry
|
||||
| PAGE_TABLE_ACCESSED_MASK
|
||||
| if for_writing { PAGE_TABLE_DIRTY_MASK } else { 0 };
|
||||
if side_effects && page_table_entry != new_page_table_entry {
|
||||
write_aligned32(page_table_addr as u32, new_page_table_entry);
|
||||
write8((page_table_addr as u32) << 2, new_page_table_entry);
|
||||
}
|
||||
|
||||
high = (page_table_entry as u32 & 0xFFFFF000) as i32;
|
||||
|
|
|
|||
|
|
@ -87,29 +87,6 @@ pub unsafe fn read64s(addr: u32) -> i64 {
|
|||
};
|
||||
}
|
||||
|
||||
pub unsafe fn read_aligned32(addr: u32) -> i32 {
|
||||
dbg_assert!(addr < 0x40000000 as u32);
|
||||
if in_mapped_range(addr << 2) {
|
||||
return mmap_read32(addr << 2);
|
||||
}
|
||||
else {
|
||||
return *(mem8 as *mut i32).offset(addr as isize);
|
||||
};
|
||||
}
|
||||
|
||||
pub unsafe fn read_aligned64(addr: u32) -> i64 {
|
||||
dbg_assert!(addr < 0x40000000 as u32);
|
||||
dbg_assert!(addr & 1 == 0);
|
||||
if in_mapped_range(addr << 2) {
|
||||
let lo = mmap_read32(addr << 2);
|
||||
let hi = mmap_read32(addr + 1 << 2);
|
||||
return lo as i64 | (hi as i64) << 32;
|
||||
}
|
||||
else {
|
||||
return *(mem8 as *mut i64).offset((addr >> 1) as isize);
|
||||
}
|
||||
}
|
||||
|
||||
pub unsafe fn read128(addr: u32) -> reg128 {
|
||||
let mut value: reg128 = reg128 {
|
||||
i8_0: [0 as i8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
|
|
@ -170,22 +147,6 @@ pub unsafe fn write32_no_mmap_or_dirty_check(addr: u32, value: i32) {
|
|||
*(mem8.offset(addr as isize) as *mut i32) = value
|
||||
}
|
||||
|
||||
pub unsafe fn write_aligned32_no_mmap_or_dirty_check(addr: u32, value: i32) {
|
||||
*(mem8 as *mut i32).offset(addr as isize) = value
|
||||
}
|
||||
|
||||
pub unsafe fn write_aligned32(addr: u32, value: i32) {
|
||||
dbg_assert!(addr < 0x40000000 as u32);
|
||||
let phys_addr = addr << 2;
|
||||
if in_mapped_range(phys_addr) {
|
||||
mmap_write32(phys_addr, value);
|
||||
}
|
||||
else {
|
||||
::jit::jit_dirty_cache_small(phys_addr, phys_addr.wrapping_add(4 as u32));
|
||||
write_aligned32_no_mmap_or_dirty_check(addr, value);
|
||||
};
|
||||
}
|
||||
|
||||
pub unsafe fn write64_no_mmap_or_dirty_check(addr: u32, value: u64) {
|
||||
*(mem8.offset(addr as isize) as *mut u64) = value
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue