Merge pull request #1342 from phire/lessGetPointer

Eliminate getPointers which are memcpyed or memset.
This commit is contained in:
comex 2014-10-23 14:42:37 -04:00
commit 1f5b1001ce
9 changed files with 23 additions and 20 deletions

View File

@ -668,7 +668,8 @@ void ExecuteCommand()
else if ((iDVDOffset == 0x1f900000) || (iDVDOffset == 0x1f900020)) else if ((iDVDOffset == 0x1f900000) || (iDVDOffset == 0x1f900020))
{ {
ERROR_LOG(DVDINTERFACE, "GC-AM: READ MEDIA BOARD COMM AREA (1f900020)"); ERROR_LOG(DVDINTERFACE, "GC-AM: READ MEDIA BOARD COMM AREA (1f900020)");
memcpy(Memory::GetPointer(m_DIMAR.Address), media_buffer + iDVDOffset - 0x1f900000, m_DILENGTH.Length); u8* source = media_buffer + iDVDOffset - 0x1f900000;
Memory::CopyToEmu(m_DIMAR.Address, source, m_DILENGTH.Length);
for (u32 i = 0; i < m_DILENGTH.Length; i += 4) for (u32 i = 0; i < m_DILENGTH.Length; i += 4)
ERROR_LOG(DVDINTERFACE, "GC-AM: %08x", Memory::Read_U32(m_DIMAR.Address + i)); ERROR_LOG(DVDINTERFACE, "GC-AM: %08x", Memory::Read_U32(m_DIMAR.Address + i));
break; break;
@ -827,7 +828,7 @@ void ExecuteCommand()
else else
{ {
u32 addr = m_DIMAR.Address; u32 addr = m_DIMAR.Address;
memcpy(media_buffer + offset, Memory::GetPointer(addr), len); Memory::CopyFromEmu(media_buffer + offset, addr, len);
while (len >= 4) while (len >= 4)
{ {
ERROR_LOG(DVDINTERFACE, "GC-AM Media Board WRITE (0xAA): %08x: %08x", iDVDOffset, Memory::Read_U32(addr)); ERROR_LOG(DVDINTERFACE, "GC-AM Media Board WRITE (0xAA): %08x: %08x", iDVDOffset, Memory::Read_U32(addr));

View File

@ -192,7 +192,7 @@ void CEXIETHERNET::DMARead(u32 addr, u32 size)
{ {
DEBUG_LOG(SP1, "DMA read: %08x %x", addr, size); DEBUG_LOG(SP1, "DMA read: %08x %x", addr, size);
memcpy(Memory::GetPointer(addr), &mBbaMem[transfer.address], size); Memory::CopyToEmu(addr, &mBbaMem[transfer.address], size);
transfer.address += size; transfer.address += size;
} }

View File

@ -118,7 +118,7 @@ bool CWII_IPC_HLE_Device_di::IOCtlV(u32 _CommandAddress)
// Read TMD to the buffer // Read TMD to the buffer
VolumeHandler::RAWReadToPtr(pTMD, TMDOffset, TMDsz); VolumeHandler::RAWReadToPtr(pTMD, TMDOffset, TMDsz);
memcpy(Memory::GetPointer(CommandBuffer.PayloadBuffer[0].m_Address), pTMD, TMDsz); Memory::CopyToEmu(CommandBuffer.PayloadBuffer[0].m_Address, pTMD, TMDsz);
WII_IPC_HLE_Interface::ES_DIVerify(pTMD, TMDsz); WII_IPC_HLE_Interface::ES_DIVerify(pTMD, TMDsz);
ReturnValue = 1; ReturnValue = 1;

View File

@ -666,11 +666,11 @@ bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress)
// shouldn't matter at all. Just fill out some fields just // shouldn't matter at all. Just fill out some fields just
// to be on the safe side. // to be on the safe side.
u32 Address = Buffer.PayloadBuffer[0].m_Address; u32 Address = Buffer.PayloadBuffer[0].m_Address;
memset(Memory::GetPointer(Address), 0, 0xD8); Memory::Memset(Address, 0, 0xD8);
Memory::Write_U64(TitleID, Address + 4 + (0x1dc - 0x1d0)); // title ID Memory::Write_U64(TitleID, Address + 4 + (0x1dc - 0x1d0)); // title ID
Memory::Write_U16(0xffff, Address + 4 + (0x1e4 - 0x1d0)); // unnnown Memory::Write_U16(0xffff, Address + 4 + (0x1e4 - 0x1d0)); // unnnown
Memory::Write_U32(0xff00, Address + 4 + (0x1ec - 0x1d0)); // access mask Memory::Write_U32(0xff00, Address + 4 + (0x1ec - 0x1d0)); // access mask
memset(Memory::GetPointer(Address + 4 + (0x222 - 0x1d0)), 0xff, 0x20); // content permissions Memory::Memset(Address + 4 + (0x222 - 0x1d0), 0xff, 0x20); // content permissions
} }
else else
{ {

View File

@ -197,7 +197,7 @@ bool CWII_IPC_HLE_Device_hid::IOCtl(u32 _CommandAddress)
u8 * buffer = (u8*)malloc(wLength + LIBUSB_CONTROL_SETUP_SIZE); u8 * buffer = (u8*)malloc(wLength + LIBUSB_CONTROL_SETUP_SIZE);
libusb_fill_control_setup(buffer, bmRequestType, bRequest, wValue, wIndex, wLength); libusb_fill_control_setup(buffer, bmRequestType, bRequest, wValue, wIndex, wLength);
memcpy(buffer + LIBUSB_CONTROL_SETUP_SIZE, Memory::GetPointer(data), wLength); Memory::CopyFromEmu(buffer + LIBUSB_CONTROL_SETUP_SIZE, data, wLength);
libusb_fill_control_transfer(transfer, dev_handle, buffer, handleUsbUpdates, (void*)(size_t)_CommandAddress, /* no timeout */ 0); libusb_fill_control_transfer(transfer, dev_handle, buffer, handleUsbUpdates, (void*)(size_t)_CommandAddress, /* no timeout */ 0);
libusb_submit_transfer(transfer); libusb_submit_transfer(transfer);

View File

@ -952,8 +952,8 @@ bool CWII_IPC_HLE_Device_net_ip_top::IOCtl(u32 _CommandAddress)
Memory::Read_U8(BufferIn + 8 + 3) Memory::Read_U8(BufferIn + 8 + 3)
); );
INFO_LOG(WII_IPC_NET, "IOCTL_SO_INETNTOP %s", ip_s); INFO_LOG(WII_IPC_NET, "IOCTL_SO_INETNTOP %s", ip_s);
memset(Memory::GetPointer(BufferOut), 0, BufferOutSize); Memory::Memset(BufferOut, 0, BufferOutSize);
memcpy(Memory::GetPointer(BufferOut), ip_s, strlen(ip_s)); Memory::CopyToEmu(BufferOut, (u8*)ip_s, strlen(ip_s));
break; break;
} }
@ -1449,7 +1449,7 @@ bool CWII_IPC_HLE_Device_net_ip_top::IOCtlV(u32 CommandAddress)
s32 icmp_length = sizeof(data); s32 icmp_length = sizeof(data);
if (BufferInSize2 == sizeof(data)) if (BufferInSize2 == sizeof(data))
memcpy(data, Memory::GetPointer(_BufferIn2), BufferInSize2); Memory::CopyFromEmu(data, _BufferIn2, BufferInSize2);
else else
{ {
// TODO sequence number is incremented either statically, by // TODO sequence number is incremented either statically, by

View File

@ -123,7 +123,7 @@ private:
inline void FillBuffer(const void* src, const size_t size) const inline void FillBuffer(const void* src, const size_t size) const
{ {
memcpy(Memory::GetPointer(m_buffer), src, size); Memory::CopyToEmu(m_buffer, (u8*)src, size);
} }
inline void SetRetVal(const u32 retval) const inline void SetRetVal(const u32 retval) const

View File

@ -129,8 +129,7 @@ namespace PowerPC
else else
t = way_from_plru[plru[set]]; t = way_from_plru[plru[set]];
// load // load
u8 *p = Memory::GetPointer(addr & ~0x1f); Memory::CopyFromEmu((u8*)data[set][t], (addr & ~0x1f), 32);
memcpy(data[set][t], p, 32);
if (valid[set] & (1 << t)) if (valid[set] & (1 << t))
{ {
if (tags[set][t] & (ICACHE_VMEM_BIT >> 12)) if (tags[set][t] & (ICACHE_VMEM_BIT >> 12))

View File

@ -270,16 +270,16 @@ static void BPWritten(const BPCmd& bp)
u32 tlutTMemAddr = (bp.newvalue & 0x3FF) << 9; u32 tlutTMemAddr = (bp.newvalue & 0x3FF) << 9;
u32 tlutXferCount = (bp.newvalue & 0x1FFC00) >> 5; u32 tlutXferCount = (bp.newvalue & 0x1FFC00) >> 5;
u8 *ptr = nullptr; u32 addr = 0;
// TODO - figure out a cleaner way. // TODO - figure out a cleaner way.
if (SConfig::GetInstance().m_LocalCoreStartupParameter.bWii) if (SConfig::GetInstance().m_LocalCoreStartupParameter.bWii)
ptr = Memory::GetPointer(bpmem.tmem_config.tlut_src << 5); addr = bpmem.tmem_config.tlut_src << 5;
else else
ptr = Memory::GetPointer((bpmem.tmem_config.tlut_src & 0xFFFFF) << 5); addr = (bpmem.tmem_config.tlut_src & 0xFFFFF) << 5;
if (ptr) if (addr)
memcpy(texMem + tlutTMemAddr, ptr, tlutXferCount); Memory::CopyFromEmu(texMem + tlutTMemAddr, addr, tlutXferCount);
else else
PanicAlert("Invalid palette pointer %08x %08x %08x", bpmem.tmem_config.tlut_src, bpmem.tmem_config.tlut_src << 5, (bpmem.tmem_config.tlut_src & 0xFFFFF)<< 5); PanicAlert("Invalid palette pointer %08x %08x %08x", bpmem.tmem_config.tlut_src, bpmem.tmem_config.tlut_src << 5, (bpmem.tmem_config.tlut_src & 0xFFFFF)<< 5);
@ -453,7 +453,7 @@ static void BPWritten(const BPCmd& bp)
// NOTE: libogc's implementation of GX_PreloadEntireTexture seems flawed, so it's not necessarily a good reference for RE'ing this feature. // NOTE: libogc's implementation of GX_PreloadEntireTexture seems flawed, so it's not necessarily a good reference for RE'ing this feature.
BPS_TmemConfig& tmem_cfg = bpmem.tmem_config; BPS_TmemConfig& tmem_cfg = bpmem.tmem_config;
u8* src_ptr = Memory::GetPointer(tmem_cfg.preload_addr << 5); // TODO: Should we add mask here on GC? u32 src_addr = tmem_cfg.preload_addr << 5; // TODO: Should we add mask here on GC?
u32 size = tmem_cfg.preload_tile_info.count * TMEM_LINE_SIZE; u32 size = tmem_cfg.preload_tile_info.count * TMEM_LINE_SIZE;
u32 tmem_addr_even = tmem_cfg.preload_tmem_even * TMEM_LINE_SIZE; u32 tmem_addr_even = tmem_cfg.preload_tmem_even * TMEM_LINE_SIZE;
@ -462,10 +462,12 @@ static void BPWritten(const BPCmd& bp)
if (tmem_addr_even + size > TMEM_SIZE) if (tmem_addr_even + size > TMEM_SIZE)
size = TMEM_SIZE - tmem_addr_even; size = TMEM_SIZE - tmem_addr_even;
memcpy(texMem + tmem_addr_even, src_ptr, size); Memory::CopyFromEmu(texMem + tmem_addr_even, src_addr, size);
} }
else // RGBA8 tiles (and CI14, but that might just be stupid libogc!) else // RGBA8 tiles (and CI14, but that might just be stupid libogc!)
{ {
u8* src_ptr = Memory::GetPointer(src_addr);
// AR and GB tiles are stored in separate TMEM banks => can't use a single memcpy for everything // AR and GB tiles are stored in separate TMEM banks => can't use a single memcpy for everything
u32 tmem_addr_odd = tmem_cfg.preload_tmem_odd * TMEM_LINE_SIZE; u32 tmem_addr_odd = tmem_cfg.preload_tmem_odd * TMEM_LINE_SIZE;
@ -475,6 +477,7 @@ static void BPWritten(const BPCmd& bp)
tmem_addr_odd + TMEM_LINE_SIZE > TMEM_SIZE) tmem_addr_odd + TMEM_LINE_SIZE > TMEM_SIZE)
return; return;
// TODO: This isn't very optimised, does a whole lot of small memcpys
memcpy(texMem + tmem_addr_even, src_ptr, TMEM_LINE_SIZE); memcpy(texMem + tmem_addr_even, src_ptr, TMEM_LINE_SIZE);
memcpy(texMem + tmem_addr_odd, src_ptr + TMEM_LINE_SIZE, TMEM_LINE_SIZE); memcpy(texMem + tmem_addr_odd, src_ptr + TMEM_LINE_SIZE, TMEM_LINE_SIZE);
tmem_addr_even += TMEM_LINE_SIZE; tmem_addr_even += TMEM_LINE_SIZE;