mirror of https://github.com/zeldaret/tp.git
222 lines
4.8 KiB
C
222 lines
4.8 KiB
C
#include "MSL_C/MSL_Common/Src/mem_funcs.h"
|
|
|
|
#define cps ((unsigned char*)src)
|
|
#define cpd ((unsigned char*)dst)
|
|
#define lps ((unsigned long*)src)
|
|
#define lpd ((unsigned long*)dst)
|
|
#define deref_auto_inc(p) *++(p)
|
|
|
|
/* 80366410-803664CC 360D50 00BC+00 0/0 1/1 0/0 .text __copy_longs_aligned */
|
|
void __copy_longs_aligned(void* dst, const void* src, size_t n) {
|
|
unsigned long i;
|
|
|
|
i = (-(unsigned long)dst) & 3;
|
|
|
|
cps = ((unsigned char*)src) - 1;
|
|
cpd = ((unsigned char*)dst) - 1;
|
|
|
|
if (i) {
|
|
n -= i;
|
|
|
|
do
|
|
deref_auto_inc(cpd) = deref_auto_inc(cps);
|
|
while (--i);
|
|
}
|
|
|
|
lps = ((unsigned long*)(cps + 1)) - 1;
|
|
lpd = ((unsigned long*)(cpd + 1)) - 1;
|
|
|
|
i = n >> 5;
|
|
|
|
if (i)
|
|
do {
|
|
deref_auto_inc(lpd) = deref_auto_inc(lps);
|
|
deref_auto_inc(lpd) = deref_auto_inc(lps);
|
|
deref_auto_inc(lpd) = deref_auto_inc(lps);
|
|
deref_auto_inc(lpd) = deref_auto_inc(lps);
|
|
deref_auto_inc(lpd) = deref_auto_inc(lps);
|
|
deref_auto_inc(lpd) = deref_auto_inc(lps);
|
|
deref_auto_inc(lpd) = deref_auto_inc(lps);
|
|
deref_auto_inc(lpd) = deref_auto_inc(lps);
|
|
} while (--i);
|
|
|
|
i = (n & 31) >> 2;
|
|
|
|
if (i)
|
|
do
|
|
deref_auto_inc(lpd) = deref_auto_inc(lps);
|
|
while (--i);
|
|
|
|
cps = ((unsigned char*)(lps + 1)) - 1;
|
|
cpd = ((unsigned char*)(lpd + 1)) - 1;
|
|
|
|
n &= 3;
|
|
|
|
if (n)
|
|
do
|
|
deref_auto_inc(cpd) = deref_auto_inc(cps);
|
|
while (--n);
|
|
|
|
return;
|
|
}
|
|
|
|
/* 80366368-80366410 360CA8 00A8+00 0/0 1/1 0/0 .text __copy_longs_rev_aligned */
|
|
void __copy_longs_rev_aligned(void* dst, const void* src, size_t n) {
|
|
unsigned long i;
|
|
|
|
cps = ((unsigned char*)src) + n;
|
|
cpd = ((unsigned char*)dst) + n;
|
|
|
|
i = ((unsigned long)cpd) & 3;
|
|
|
|
if (i) {
|
|
n -= i;
|
|
|
|
do
|
|
*--cpd = *--cps;
|
|
while (--i);
|
|
}
|
|
|
|
i = n >> 5;
|
|
|
|
if (i)
|
|
do {
|
|
*--lpd = *--lps;
|
|
*--lpd = *--lps;
|
|
*--lpd = *--lps;
|
|
*--lpd = *--lps;
|
|
*--lpd = *--lps;
|
|
*--lpd = *--lps;
|
|
*--lpd = *--lps;
|
|
*--lpd = *--lps;
|
|
} while (--i);
|
|
|
|
i = (n & 31) >> 2;
|
|
|
|
if (i)
|
|
do
|
|
*--lpd = *--lps;
|
|
while (--i);
|
|
|
|
n &= 3;
|
|
|
|
if (n)
|
|
do
|
|
*--cpd = *--cps;
|
|
while (--n);
|
|
|
|
return;
|
|
}
|
|
|
|
/* 803662A8-80366368 360BE8 00C0+00 0/0 1/1 0/0 .text __copy_longs_unaligned */
|
|
void __copy_longs_unaligned(void* dst, const void* src, size_t n) {
|
|
unsigned long i, v1, v2;
|
|
unsigned int src_offset, left_shift, right_shift;
|
|
|
|
i = (-(unsigned long)dst) & 3;
|
|
|
|
cps = ((unsigned char*)src) - 1;
|
|
cpd = ((unsigned char*)dst) - 1;
|
|
|
|
if (i) {
|
|
n -= i;
|
|
|
|
do
|
|
deref_auto_inc(cpd) = deref_auto_inc(cps);
|
|
while (--i);
|
|
}
|
|
|
|
src_offset = ((unsigned int)(cps + 1)) & 3;
|
|
|
|
left_shift = src_offset << 3;
|
|
right_shift = 32 - left_shift;
|
|
|
|
cps -= src_offset;
|
|
|
|
lps = ((unsigned long*)(cps + 1)) - 1;
|
|
lpd = ((unsigned long*)(cpd + 1)) - 1;
|
|
|
|
i = n >> 3;
|
|
|
|
v1 = deref_auto_inc(lps);
|
|
|
|
do {
|
|
v2 = deref_auto_inc(lps);
|
|
deref_auto_inc(lpd) = (v1 << left_shift) | (v2 >> right_shift);
|
|
v1 = deref_auto_inc(lps);
|
|
deref_auto_inc(lpd) = (v2 << left_shift) | (v1 >> right_shift);
|
|
} while (--i);
|
|
|
|
if (n & 4) {
|
|
v2 = deref_auto_inc(lps);
|
|
deref_auto_inc(lpd) = (v1 << left_shift) | (v2 >> right_shift);
|
|
}
|
|
|
|
cps = ((unsigned char*)(lps + 1)) - 1;
|
|
cpd = ((unsigned char*)(lpd + 1)) - 1;
|
|
|
|
n &= 3;
|
|
|
|
if (n) {
|
|
cps -= 4 - src_offset;
|
|
do
|
|
deref_auto_inc(cpd) = deref_auto_inc(cps);
|
|
while (--n);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
/* 803661FC-803662A8 360B3C 00AC+00 0/0 1/1 0/0 .text __copy_longs_rev_unaligned */
|
|
void __copy_longs_rev_unaligned(void* dst, const void* src, size_t n) {
|
|
unsigned long i, v1, v2;
|
|
unsigned int src_offset, left_shift, right_shift;
|
|
|
|
cps = ((unsigned char*)src) + n;
|
|
cpd = ((unsigned char*)dst) + n;
|
|
|
|
i = ((unsigned long)cpd) & 3;
|
|
|
|
if (i) {
|
|
n -= i;
|
|
|
|
do
|
|
*--cpd = *--cps;
|
|
while (--i);
|
|
}
|
|
|
|
src_offset = ((unsigned int)cps) & 3;
|
|
|
|
left_shift = src_offset << 3;
|
|
right_shift = 32 - left_shift;
|
|
|
|
cps += 4 - src_offset;
|
|
|
|
i = n >> 3;
|
|
|
|
v1 = *--lps;
|
|
|
|
do {
|
|
v2 = *--lps;
|
|
*--lpd = (v2 << left_shift) | (v1 >> right_shift);
|
|
v1 = *--lps;
|
|
*--lpd = (v1 << left_shift) | (v2 >> right_shift);
|
|
} while (--i);
|
|
|
|
if (n & 4) {
|
|
v2 = *--lps;
|
|
*--lpd = (v2 << left_shift) | (v1 >> right_shift);
|
|
}
|
|
|
|
n &= 3;
|
|
|
|
if (n) {
|
|
cps += src_offset;
|
|
do
|
|
*--cpd = *--cps;
|
|
while (--n);
|
|
}
|
|
|
|
return;
|
|
}
|