mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-07 03:13:49 +00:00
Fix int-long types usage in convert.h.
Taken from gles2N64.
This commit is contained in:
parent
7a4cc12aec
commit
829e5ad4ff
72
convert.h
72
convert.h
|
@ -169,22 +169,22 @@ Done:
|
||||||
}
|
}
|
||||||
# else // WIN32
|
# else // WIN32
|
||||||
// copy leading bytes
|
// copy leading bytes
|
||||||
int leadingBytes = ((int)src) & 3;
|
int leadingBytes = ((long)src) & 3;
|
||||||
if (leadingBytes != 0)
|
if (leadingBytes != 0)
|
||||||
{
|
{
|
||||||
leadingBytes = 4-leadingBytes;
|
leadingBytes = 4-leadingBytes;
|
||||||
if (leadingBytes > numBytes)
|
if ((unsigned int)leadingBytes > numBytes)
|
||||||
leadingBytes = numBytes;
|
leadingBytes = numBytes;
|
||||||
numBytes -= leadingBytes;
|
numBytes -= leadingBytes;
|
||||||
|
|
||||||
src = (void *)((int)src ^ 3);
|
src = (void *)((long)src ^ 3);
|
||||||
for (int i = 0; i < leadingBytes; i++)
|
for (int i = 0; i < leadingBytes; i++)
|
||||||
{
|
{
|
||||||
*(u8 *)(dest) = *(u8 *)(src);
|
*(u8 *)(dest) = *(u8 *)(src);
|
||||||
dest = (void *)((int)dest+1);
|
dest = (void *)((long)dest+1);
|
||||||
src = (void *)((int)src -1);
|
src = (void *)((long)src -1);
|
||||||
}
|
}
|
||||||
src = (void *)((int)src+5);
|
src = (void *)((long)src+5);
|
||||||
}
|
}
|
||||||
|
|
||||||
// copy dwords
|
// copy dwords
|
||||||
|
@ -192,22 +192,26 @@ Done:
|
||||||
while (numDWords--)
|
while (numDWords--)
|
||||||
{
|
{
|
||||||
u32 dword = *(u32 *)src;
|
u32 dword = *(u32 *)src;
|
||||||
__asm__ volatile( "bswapl %0\n\t" : "=q"(dword) : "0"(dword) );
|
#ifdef ARM_ASM
|
||||||
|
asm("rev %0, %0" : "+r"(dword)::);
|
||||||
|
#else
|
||||||
|
dword = ((dword<<24)|((dword<<8)&0x00FF0000)|((dword>>8)&0x0000FF00)|(dword>>24));
|
||||||
|
#endif
|
||||||
*(u32 *)dest = dword;
|
*(u32 *)dest = dword;
|
||||||
dest = (void *)((int)dest+4);
|
dest = (void *)((long)dest+4);
|
||||||
src = (void *)((int)src +4);
|
src = (void *)((long)src +4);
|
||||||
}
|
}
|
||||||
|
|
||||||
// copy trailing bytes
|
// copy trailing bytes
|
||||||
int trailingBytes = numBytes & 3;
|
int trailingBytes = numBytes & 3;
|
||||||
if (trailingBytes)
|
if (trailingBytes)
|
||||||
{
|
{
|
||||||
src = (void *)((int)src ^ 3);
|
src = (void *)((long)src ^ 3);
|
||||||
for (int i = 0; i < trailingBytes; i++)
|
for (int i = 0; i < trailingBytes; i++)
|
||||||
{
|
{
|
||||||
*(u8 *)(dest) = *(u8 *)(src);
|
*(u8 *)(dest) = *(u8 *)(src);
|
||||||
dest = (void *)((int)dest+1);
|
dest = (void *)((long)dest+1);
|
||||||
src = (void *)((int)src -1);
|
src = (void *)((long)src -1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // WIN32
|
#endif // WIN32
|
||||||
|
@ -231,15 +235,13 @@ DWordInterleaveLoop:
|
||||||
loop DWordInterleaveLoop
|
loop DWordInterleaveLoop
|
||||||
}
|
}
|
||||||
#else // WIN32
|
#else // WIN32
|
||||||
// ok
|
|
||||||
int tmp;
|
int tmp;
|
||||||
while( numDWords-- )
|
while( numDWords-- )
|
||||||
{
|
{
|
||||||
tmp = *(int *)((int)mem + 0);
|
tmp = *(int *)((long)mem + 0);
|
||||||
*(int *)((int)mem + 0) = *(int *)((int)mem + 4);
|
*(int *)((long)mem + 0) = *(int *)((long)mem + 4);
|
||||||
*(int *)((int)mem + 4) = tmp;
|
*(int *)((long)mem + 4) = tmp;
|
||||||
|
mem = (void *)((long)mem + 8);
|
||||||
mem = (void *)((int)mem + 8);
|
|
||||||
}
|
}
|
||||||
#endif // WIN32
|
#endif // WIN32
|
||||||
}
|
}
|
||||||
|
@ -271,19 +273,17 @@ QWordInterleaveLoop:
|
||||||
loop QWordInterleaveLoop
|
loop QWordInterleaveLoop
|
||||||
}
|
}
|
||||||
#else // WIN32
|
#else // WIN32
|
||||||
int tmp;
|
|
||||||
numDWords >>= 1; // qwords
|
numDWords >>= 1; // qwords
|
||||||
while( numDWords-- )
|
while( numDWords-- )
|
||||||
{
|
{
|
||||||
tmp = *(int *)((int)mem + 0);
|
int tmp0, tmp1;
|
||||||
*(int *)((int)mem + 0) = *(int *)((int)mem + 8);
|
tmp0 = *(int *)((long)mem + 0);
|
||||||
*(int *)((int)mem + 8) = tmp;
|
tmp1 = *(int *)((long)mem + 4);
|
||||||
|
*(int *)((long)mem + 0) = *(int *)((long)mem + 8);
|
||||||
tmp = *(int *)((int)mem + 4);
|
*(int *)((long)mem + 8) = tmp0;
|
||||||
*(int *)((int)mem + 4) = *(int *)((int)mem + 12);
|
*(int *)((long)mem + 4) = *(int *)((long)mem + 12);
|
||||||
*(int *)((int)mem + 12) = tmp;
|
*(int *)((long)mem + 12) = tmp1;
|
||||||
|
mem = (void *)((long)mem + 16);
|
||||||
mem = (void *)((int)mem + 16);
|
|
||||||
}
|
}
|
||||||
#endif // WIN32
|
#endif // WIN32
|
||||||
}
|
}
|
||||||
|
@ -298,10 +298,15 @@ inline u32 swapdword( u32 value )
|
||||||
bswap eax
|
bswap eax
|
||||||
}
|
}
|
||||||
#else // WIN32
|
#else // WIN32
|
||||||
|
#ifdef ARM_ASM
|
||||||
|
asm("rev %0, %0" : "+r"(value)::);
|
||||||
|
return value;
|
||||||
|
#else
|
||||||
return ((value & 0xff000000) >> 24) |
|
return ((value & 0xff000000) >> 24) |
|
||||||
((value & 0x00ff0000) >> 8) |
|
((value & 0x00ff0000) >> 8) |
|
||||||
((value & 0x0000ff00) << 8) |
|
((value & 0x0000ff00) << 8) |
|
||||||
((value & 0x000000ff) << 24);
|
((value & 0x000000ff) << 24);
|
||||||
|
#endif // ARM_ASM
|
||||||
#endif // WIN32
|
#endif // WIN32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -314,7 +319,12 @@ inline u16 swapword( u16 value )
|
||||||
xchg ah, al
|
xchg ah, al
|
||||||
}
|
}
|
||||||
#else // WIN32
|
#else // WIN32
|
||||||
|
#ifdef ARM_ASM
|
||||||
|
asm("rev16 %0, %0" : "+r"(value)::);
|
||||||
|
return value;
|
||||||
|
#else
|
||||||
return (value << 8) | (value >> 8);
|
return (value << 8) | (value >> 8);
|
||||||
|
#endif // ARM_ASM
|
||||||
#endif // WIN32
|
#endif // WIN32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user