SH4ZAM! 0.1.0
Fast math library for the Sega Dreamcast's SH4 CPU
Loading...
Searching...
No Matches
shz_mem.hpp
Go to the documentation of this file.
1/*! \file
2 * \brief C++ Memory API
3 * \ingroup memory
4 *
5 * C++ wrapper API for copying, assigning, and working with memory.
6 *
7 * \author 2025, 2026 Falco Girgis
8 * \copyright MIT License
9 */
10
11#ifndef SHZ_MEM_HPP
12#define SHZ_MEM_HPP
13
14#include "shz_mem.h"
15
16namespace shz {
17 constexpr auto dcache_alloc_line = shz_dcache_alloc_line;
18
19 constexpr auto memcpy = shz_memcpy;
20 constexpr auto memcpy1 = shz_memcpy1;
21 constexpr auto memcpy2 = shz_memcpy2;
22 constexpr auto memcpy4 = shz_memcpy4;
23 constexpr auto memcpy8 = shz_memcpy8;
24 constexpr auto memset8 = shz_memset8;
25 constexpr auto memcpy32 = shz_memcpy32;
26 constexpr auto memcpy64 = shz_memcpy64;
27
28 //! C++ wrapper around shz_memcpy128().
29 inline void* memcpy128(void* dst, const void* src, size_t bytes) noexcept {
30 return shz_memcpy128(dst, src, bytes);
31 }
32
33 constexpr auto memcpy2_16 = shz_memcpy2_16;
34 constexpr auto memset2_16 = shz_memset2_16;
35 constexpr auto memcpy4_16 = shz_memcpy4_16;
36
37 constexpr auto memswap32_1 = shz_memswap32_1;
38 constexpr auto memswap32_1_xmtrx = shz_memswap32_1_xmtrx;
39
40 constexpr auto sq_memcpy32 = shz_sq_memcpy32;
41 constexpr auto sq_memcpy32_xmtrx = shz_sq_memcpy32_xmtrx;
42 constexpr auto sq_memcpy32_1 = shz_sq_memcpy32_1;
43 constexpr auto sq_memcpy32_1_xmtrx = shz_sq_memcpy32_1_xmtrx;
44}
45
46#endif
Namespace enclosing the SH4ZAM C++ API.
Definition shz_cdefs.hpp:21
void * memcpy128(void *dst, const void *src, size_t bytes) noexcept
C++ wrapper around shz_memcpy128().
Definition shz_mem.hpp:29
void * shz_memset8(void *dst, uint64_t value, size_t bytes) SHZ_NOEXCEPT
Assigns the given 8-byte value to the bytes in dst.
void * shz_memcpy4(void *SHZ_RESTRICT dst, const void *SHZ_RESTRICT src, size_t bytes) SHZ_NOEXCEPT
Copies a from one 4-byte aligned buffer to another 4 bytes at a time.
void * shz_sq_memcpy32_xmtrx(void *SHZ_RESTRICT dst, const void *SHZ_RESTRICT src, size_t bytes) SHZ_NOEXCEPT
Copies bytes from src to dst in 32-byte chunks, using the Store Queues and XMTRX.
void * shz_sq_memcpy32(void *SHZ_RESTRICT dst, const void *SHZ_RESTRICT src, size_t bytes) SHZ_NOEXCEPT
Copies bytes from src to dst in 32-byte chunks, using the Store Queues.
void shz_memcpy2_16(void *SHZ_RESTRICT dst, const void *SHZ_RESTRICT src) SHZ_NOEXCEPT
Copies 16 shorts from src to dst.
void shz_memswap32_1_xmtrx(void *SHZ_RESTRICT p1, void *SHZ_RESTRICT p2) SHZ_NOEXCEPT
Swaps the values within the given 32-byte buffers, using XMTRX.
void * shz_sq_memcpy32_1(void *SHZ_RESTRICT dst, const void *SHZ_RESTRICT src) SHZ_NOEXCEPT
Copies src to dst in a single 32-byte transaction using the Store Queues.
void shz_memswap32_1(void *SHZ_RESTRICT p1, void *SHZ_RESTRICT p2) SHZ_NOEXCEPT
Swaps the values within the given 32-byte buffers.
void shz_dcache_alloc_line(void *src) SHZ_NOEXCEPT
Intrinsic around the SH4 MOVCA.L instruction.
void * shz_memcpy2(void *SHZ_RESTRICT dst, const void *SHZ_RESTRICT src, size_t bytes) SHZ_NOEXCEPT
Copies from one 2-byte aligned buffer to another two bytes at a time.
void * shz_sq_memcpy32_1_xmtrx(void *SHZ_RESTRICT dst, const void *SHZ_RESTRICT src) SHZ_NOEXCEPT
Copies src to dst in a single 32-byte transaction using the Store Queues and XMTRX.
void * shz_memcpy64(void *SHZ_RESTRICT dst, const void *SHZ_RESTRICT src, size_t bytes) SHZ_NOEXCEPT
Specialized memcpy() variant for copying multiples of 64-bytes.
void * shz_memcpy1(void *SHZ_RESTRICT dst, const void *SHZ_RESTRICT src, size_t bytes) SHZ_NOEXCEPT
Copies an unaligned buffer to another one byte at a time.
void * shz_memcpy(void *SHZ_RESTRICT dst, const void *SHZ_RESTRICT src, size_t bytes) SHZ_NOEXCEPT
Generic drop-in fast memcpy() replacement.
void shz_memcpy4_16(void *SHZ_RESTRICT dst, const void *SHZ_RESTRICT src) SHZ_NOEXCEPT
Copies 16 4-byte, long values from src to dst.
void * shz_memcpy32(void *SHZ_RESTRICT dst, const void *SHZ_RESTRICT src, size_t bytes) SHZ_NOEXCEPT
Copies bytes from the src to the dst buffer in 32-byte chunks.
void shz_memset2_16(void *dst, uint16_t value) SHZ_NOEXCEPT
Sets the values of the 16 shorts pointed to by dst to the given value.
void * shz_memcpy8(void *SHZ_RESTRICT dst, const void *SHZ_RESTRICT src, size_t bytes) SHZ_NOEXCEPT
Copies a from one 8-byte aligned buffer to another 8 bytes at a time.
void * shz_memcpy128(void *SHZ_RESTRICT dst, const void *SHZ_RESTRICT src, size_t bytes) SHZ_NOEXCEPT
Specialized memcpy() variant for copying multiples of 128 bytes.