Support proper scaling and other MATRIX operations
This commit is contained in:
@@ -22,4 +22,43 @@ size_t strlen(const char *str) {
|
||||
|
||||
for(; *end; ++end);
|
||||
return(end - str);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
static void* core_memset(T* dst, int val, size_t &len) {
|
||||
while(len >= sizeof(T)) {
|
||||
*dst++ = val;
|
||||
len -= sizeof(T);
|
||||
}
|
||||
|
||||
return dst;
|
||||
}
|
||||
|
||||
static void* simple_memset(void* dest, int val, size_t len) {
|
||||
core_memset(static_cast<uint8_t*>(dest), val, len);
|
||||
return dest;
|
||||
}
|
||||
|
||||
static void* cplx_memset(void* dst, int val, size_t len) {
|
||||
void*const org_dst = dst;
|
||||
|
||||
if(reinterpret_cast<uintptr_t>(dst) & 0x2 == 0) {
|
||||
dst = core_memset(static_cast<uint32_t*>(dst), val, len);
|
||||
}
|
||||
|
||||
if(reinterpret_cast<uintptr_t>(dst) & 0x1 == 0) {
|
||||
dst = core_memset(static_cast<uint16_t*>(dst), val, len);
|
||||
}
|
||||
|
||||
if(len > 0) {
|
||||
simple_memset(dst, val, len);
|
||||
}
|
||||
return org_dst;
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
// TODO: Speed measure
|
||||
void* memset(void* dest, int val, size_t len) {
|
||||
return simple_memset(dest, val, len);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user