mirror of
https://github.com/pret/pmd-sky.git
synced 2026-08-05 10:46:00 -05:00
140 lines
4.3 KiB
C
140 lines
4.3 KiB
C
#ifndef NITRO_MI_MEMORY_H_
|
|
#define NITRO_MI_MEMORY_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <nitro/misc.h>
|
|
#include <nitro/types.h>
|
|
|
|
void MTi_CpuClear16(u16 data, void * destp, u32 size);
|
|
void MTi_CpuCopy16(const void * srcp, void * destp, u32 size);
|
|
void MTi_CpuSend16(const void * srcp, volatile void * destp, u32 size);
|
|
|
|
void MTi_CpuClear32(u32 data, void * destp, u32 size);
|
|
void MTi_CpuCopy32(const void * srcp, void * destp, u32 size);
|
|
void MTi_CpuSend32(const void * srcp, volatile void * destp, u32 size);
|
|
|
|
void MTi_CpuClearFast(u32 data, void * destp, u32 size);
|
|
void MTi_CpuCopy32Fast(const void * srcp, void * destp, u32 size);
|
|
|
|
static inline void MI_CpuFill32 (void * dest, u32 data, u32 size)
|
|
{
|
|
SDK_ASSERTMSG((size & 3) == 0, "size & 3 must be 0");
|
|
SDK_ASSERTMSG(((u32)dest & 3) == 0, "destination address must be in 4-byte alignment");
|
|
|
|
MTi_CpuClear32(data, dest, size);
|
|
}
|
|
|
|
static inline void MI_CpuCopy32 (const void * src, void * dest, u32 size)
|
|
{
|
|
SDK_ASSERTMSG((size & 3) == 0, "size & 3 must be 0");
|
|
SDK_ASSERTMSG(((u32)src & 3) == 0, "source address must be in 4-byte alignment");
|
|
SDK_ASSERTMSG(((u32)dest & 3) == 0, "destination address must be in 4-byte alignment");
|
|
|
|
MTi_CpuCopy32(src, dest, size);
|
|
}
|
|
|
|
static inline void MI_CpuClear32 (void * dest, u32 size)
|
|
{
|
|
MI_CpuFill32(dest, 0, size);
|
|
}
|
|
|
|
static inline void MI_CpuSend32 (const void * src, volatile void * dest, u32 size)
|
|
{
|
|
SDK_ASSERTMSG((size & 3) == 0, "size & 3 must be 0");
|
|
SDK_ASSERTMSG(((u32)src & 3) == 0, "source address must be in 4-byte alignment");
|
|
SDK_ASSERTMSG(((u32)dest & 3) == 0, "destination address must be in 4-byte alignment");
|
|
|
|
MTi_CpuSend32(src, dest, size);
|
|
}
|
|
|
|
static inline void MI_CpuFill16 (void * dest, u16 data, u32 size)
|
|
{
|
|
SDK_ASSERTMSG((size & 1) == 0, "size & 1 must be 0");
|
|
SDK_ASSERTMSG(((u32)dest & 1) == 0, "source address must be in 2-byte alignment");
|
|
|
|
MTi_CpuClear16(data, dest, size);
|
|
}
|
|
|
|
static inline void MI_CpuCopy16 (const void * src, void * dest, u32 size)
|
|
{
|
|
SDK_ASSERTMSG((size & 1) == 0, "size & 1 must be 0");
|
|
SDK_ASSERTMSG(((u32)src & 1) == 0, "source address must be in 2-byte alignment");
|
|
SDK_ASSERTMSG(((u32)dest & 1) == 0, "destination address must be in 2-byte alignment");
|
|
|
|
MTi_CpuCopy16(src, dest, size);
|
|
}
|
|
|
|
static inline void MI_CpuClear16 (void * dest, u32 size)
|
|
{
|
|
MI_CpuFill16(dest, 0, size);
|
|
}
|
|
|
|
static inline void MI_CpuSend16 (const void * src, volatile void * dest, u32 size)
|
|
{
|
|
SDK_ASSERTMSG((size & 1) == 0, "size & 1 must be 0");
|
|
SDK_ASSERTMSG(((u32)src & 1) == 0, "source address must be in 2-byte alignment");
|
|
SDK_ASSERTMSG(((u32)dest & 1) == 0, "destination address must be in 2-byte alignment");
|
|
|
|
MTi_CpuSend16(src, dest, size);
|
|
}
|
|
|
|
static inline void MI_CpuFillFast (void * dest, u32 data, u32 size)
|
|
{
|
|
SDK_ASSERTMSG((size & 3) == 0, "size & 3 must be 0");
|
|
SDK_ASSERTMSG(((u32)dest & 3) == 0, "source address must be in 4-byte alignment");
|
|
|
|
MTi_CpuClearFast(data, dest, size);
|
|
}
|
|
|
|
static inline void MI_CpuCopyFast (const void * src, void * dest, u32 size)
|
|
{
|
|
SDK_ASSERTMSG((size & 3) == 0, "size & 3 must be 0");
|
|
SDK_ASSERTMSG(((u32)src & 3) == 0, "source address must be in 4-byte alignment");
|
|
SDK_ASSERTMSG(((u32)dest & 3) == 0, "destination address must be in 4-byte alignment");
|
|
|
|
MTi_CpuCopy32Fast(src, dest, size);
|
|
}
|
|
|
|
static inline void MI_CpuClearFast (void * dest, u32 size)
|
|
{
|
|
MI_CpuFillFast(dest, 0, size);
|
|
}
|
|
|
|
void MI_CpuFill8(void * dest, u8 data, u32 size);
|
|
|
|
void MI_CpuCopy8(const void * src, void * dest, u32 size);
|
|
|
|
static inline void MI_CpuClear8 (void * dest, u32 size)
|
|
{
|
|
MI_CpuFill8(dest, 0, size);
|
|
}
|
|
|
|
#ifndef SDK_ASM
|
|
#define MI_ReadWord(adrs) (*(vu32 *)(adrs))
|
|
#endif
|
|
|
|
#ifndef SDK_ASM
|
|
#define MI_WriteWord(adrs, val) do { (*(vu32 *)(adrs)) = (u32)(val); } while (0)
|
|
#endif
|
|
|
|
void MI_Copy16B(register const void * pSrc, register void * pDest);
|
|
void MI_Copy32B(register const void * pSrc, register void * pDest);
|
|
void MI_Copy36B(register const void * pSrc, register void * pDest);
|
|
void MI_Copy48B(register const void * pSrc, register void * pDest);
|
|
void MI_Copy64B(register const void * pSrc, register void * pDest);
|
|
void MI_Copy128B(register const void * pSrc, register void * pDest);
|
|
|
|
void MI_Zero32B(register void * pDest);
|
|
void MI_Zero36B(register void * pDest);
|
|
void MI_Zero48B(register void * pDest);
|
|
void MI_Zero64B(register void * pDest);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|