[Scummvm-cvs-logs] CVS: scummvm/scumm/smush codec37.cpp,1.10,1.11
Marcus Comstedt
marcus_c at users.sourceforge.net
Sun Mar 2 12:21:15 CET 2003
Update of /cvsroot/scummvm/scummvm/scumm/smush
In directory sc8-pr-cvs1:/tmp/cvs-serv3109
Modified Files:
codec37.cpp
Log Message:
Handle architectures which need alignment for 32bit memory access...
Index: codec37.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/codec37.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- codec37.cpp 28 Feb 2003 20:33:06 -0000 1.10
+++ codec37.cpp 2 Mar 2003 20:15:22 -0000 1.11
@@ -288,14 +288,56 @@
do {
int32 code = *src++;
if (code == 0xFD) {
+#if defined(SCUMM_NEED_ALIGNMENT)
+ t = *src++;
+ (dst + pitch * 0)[0] = t;
+ (dst + pitch * 0)[1] = t;
+ (dst + pitch * 0)[2] = t;
+ (dst + pitch * 0)[3] = t;
+ (dst + pitch * 1)[0] = t;
+ (dst + pitch * 1)[1] = t;
+ (dst + pitch * 1)[2] = t;
+ (dst + pitch * 1)[3] = t;
+ (dst + pitch * 2)[0] = t;
+ (dst + pitch * 2)[1] = t;
+ (dst + pitch * 2)[2] = t;
+ (dst + pitch * 2)[3] = t;
+ (dst + pitch * 3)[0] = t;
+ (dst + pitch * 3)[1] = t;
+ (dst + pitch * 3)[2] = t;
+ (dst + pitch * 3)[3] = t;
+#else
t = *src++;
t += (t << 8) + (t << 16) + (t << 24);
*(uint32*)(dst + pitch * 0) = t;
*(uint32*)(dst + pitch * 1) = t;
*(uint32*)(dst + pitch * 2) = t;
*(uint32*)(dst + pitch * 3) = t;
+#endif
dst += 4;
} else if (code == 0xFE) {
+#if defined(SCUMM_NEED_ALIGNMENT)
+ t = *src++;
+ (dst + pitch * 0)[0] = t;
+ (dst + pitch * 0)[1] = t;
+ (dst + pitch * 0)[2] = t;
+ (dst + pitch * 0)[3] = t;
+ t = *src++;
+ (dst + pitch * 1)[0] = t;
+ (dst + pitch * 1)[1] = t;
+ (dst + pitch * 1)[2] = t;
+ (dst + pitch * 1)[3] = t;
+ t = *src++;
+ (dst + pitch * 2)[0] = t;
+ (dst + pitch * 2)[1] = t;
+ (dst + pitch * 2)[2] = t;
+ (dst + pitch * 2)[3] = t;
+ t = *src++;
+ (dst + pitch * 3)[0] = t;
+ (dst + pitch * 3)[1] = t;
+ (dst + pitch * 3)[2] = t;
+ (dst + pitch * 3)[3] = t;
+#else
t = *src++;
t += (t << 8) + (t << 16) + (t << 24);
*(uint32*)(dst + pitch * 0) = t;
@@ -308,8 +350,27 @@
t = *src++;
t += (t << 8) + (t << 16) + (t << 24);
*(uint32*)(dst + pitch * 3) = t;
+#endif
dst += 4;
} else if (code == 0xFF) {
+#if defined(SCUMM_NEED_ALIGNMENT)
+ (dst + pitch * 0)[0] = *src++;
+ (dst + pitch * 0)[1] = *src++;
+ (dst + pitch * 0)[2] = *src++;
+ (dst + pitch * 0)[3] = *src++;
+ (dst + pitch * 1)[0] = *src++;
+ (dst + pitch * 1)[1] = *src++;
+ (dst + pitch * 1)[2] = *src++;
+ (dst + pitch * 1)[3] = *src++;
+ (dst + pitch * 2)[0] = *src++;
+ (dst + pitch * 2)[1] = *src++;
+ (dst + pitch * 2)[2] = *src++;
+ (dst + pitch * 2)[3] = *src++;
+ (dst + pitch * 3)[0] = *src++;
+ (dst + pitch * 3)[1] = *src++;
+ (dst + pitch * 3)[2] = *src++;
+ (dst + pitch * 3)[3] = *src++;
+#else
*(uint32*)(dst + pitch * 0) = *(uint32*)src;
src += 4;
*(uint32*)(dst + pitch * 1) = *(uint32*)src;
@@ -318,13 +379,33 @@
src += 4;
*(uint32*)(dst + pitch * 3) = *(uint32*)src;
src += 4;
+#endif
dst += 4;
} else {
byte *dst2 = dst + _offsetTable[code] + next_offs;
+#if defined(SCUMM_NEED_ALIGNMENT)
+ (dst + pitch * 0)[0] = (dst2 + pitch * 0)[0];
+ (dst + pitch * 0)[1] = (dst2 + pitch * 0)[1];
+ (dst + pitch * 0)[2] = (dst2 + pitch * 0)[2];
+ (dst + pitch * 0)[3] = (dst2 + pitch * 0)[3];
+ (dst + pitch * 1)[0] = (dst2 + pitch * 1)[0];
+ (dst + pitch * 1)[1] = (dst2 + pitch * 1)[1];
+ (dst + pitch * 1)[2] = (dst2 + pitch * 1)[2];
+ (dst + pitch * 1)[3] = (dst2 + pitch * 1)[3];
+ (dst + pitch * 2)[0] = (dst2 + pitch * 2)[0];
+ (dst + pitch * 2)[1] = (dst2 + pitch * 2)[1];
+ (dst + pitch * 2)[2] = (dst2 + pitch * 2)[2];
+ (dst + pitch * 2)[3] = (dst2 + pitch * 2)[3];
+ (dst + pitch * 3)[0] = (dst2 + pitch * 3)[0];
+ (dst + pitch * 3)[1] = (dst2 + pitch * 3)[1];
+ (dst + pitch * 3)[2] = (dst2 + pitch * 3)[2];
+ (dst + pitch * 3)[3] = (dst2 + pitch * 3)[3];
+#else
*(uint32*)(dst + pitch * 0) = *(uint32*)(dst2 + pitch * 0);
*(uint32*)(dst + pitch * 1) = *(uint32*)(dst2 + pitch * 1);
*(uint32*)(dst + pitch * 2) = *(uint32*)(dst2 + pitch * 2);
*(uint32*)(dst + pitch * 3) = *(uint32*)(dst2 + pitch * 3);
+#endif
dst += 4;
}
} while (--i);
@@ -338,6 +419,24 @@
do {
int32 code = *src++;
if (code == 0xFF) {
+#if defined(SCUMM_NEED_ALIGNMENT)
+ (dst + pitch * 0)[0] = *src++;
+ (dst + pitch * 0)[1] = *src++;
+ (dst + pitch * 0)[2] = *src++;
+ (dst + pitch * 0)[3] = *src++;
+ (dst + pitch * 1)[0] = *src++;
+ (dst + pitch * 1)[1] = *src++;
+ (dst + pitch * 1)[2] = *src++;
+ (dst + pitch * 1)[3] = *src++;
+ (dst + pitch * 2)[0] = *src++;
+ (dst + pitch * 2)[1] = *src++;
+ (dst + pitch * 2)[2] = *src++;
+ (dst + pitch * 2)[3] = *src++;
+ (dst + pitch * 3)[0] = *src++;
+ (dst + pitch * 3)[1] = *src++;
+ (dst + pitch * 3)[2] = *src++;
+ (dst + pitch * 3)[3] = *src++;
+#else
*(uint32*)(dst + pitch * 0) = *(uint32*)src;
src += 4;
*(uint32*)(dst + pitch * 1) = *(uint32*)src;
@@ -346,13 +445,33 @@
src += 4;
*(uint32*)(dst + pitch * 3) = *(uint32*)src;
src += 4;
+#endif
dst += 4;
} else {
byte *dst2 = dst + _offsetTable[code] + next_offs;
+#if defined(SCUMM_NEED_ALIGNMENT)
+ (dst + pitch * 0)[0] = (dst2 + pitch * 0)[0];
+ (dst + pitch * 0)[1] = (dst2 + pitch * 0)[1];
+ (dst + pitch * 0)[2] = (dst2 + pitch * 0)[2];
+ (dst + pitch * 0)[3] = (dst2 + pitch * 0)[3];
+ (dst + pitch * 1)[0] = (dst2 + pitch * 1)[0];
+ (dst + pitch * 1)[1] = (dst2 + pitch * 1)[1];
+ (dst + pitch * 1)[2] = (dst2 + pitch * 1)[2];
+ (dst + pitch * 1)[3] = (dst2 + pitch * 1)[3];
+ (dst + pitch * 2)[0] = (dst2 + pitch * 2)[0];
+ (dst + pitch * 2)[1] = (dst2 + pitch * 2)[1];
+ (dst + pitch * 2)[2] = (dst2 + pitch * 2)[2];
+ (dst + pitch * 2)[3] = (dst2 + pitch * 2)[3];
+ (dst + pitch * 3)[0] = (dst2 + pitch * 3)[0];
+ (dst + pitch * 3)[1] = (dst2 + pitch * 3)[1];
+ (dst + pitch * 3)[2] = (dst2 + pitch * 3)[2];
+ (dst + pitch * 3)[3] = (dst2 + pitch * 3)[3];
+#else
*(uint32*)(dst + pitch * 0) = *(uint32*)(dst2 + pitch * 0);
*(uint32*)(dst + pitch * 1) = *(uint32*)(dst2 + pitch * 1);
*(uint32*)(dst + pitch * 2) = *(uint32*)(dst2 + pitch * 2);
*(uint32*)(dst + pitch * 3) = *(uint32*)(dst2 + pitch * 3);
+#endif
dst += 4;
}
} while (--i);
@@ -368,14 +487,56 @@
do {
int32 code = *src++;
if (code == 0xFD) {
+#if defined(SCUMM_NEED_ALIGNMENT)
+ t = *src++;
+ (dst + pitch * 0)[0] = t;
+ (dst + pitch * 0)[1] = t;
+ (dst + pitch * 0)[2] = t;
+ (dst + pitch * 0)[3] = t;
+ (dst + pitch * 1)[0] = t;
+ (dst + pitch * 1)[1] = t;
+ (dst + pitch * 1)[2] = t;
+ (dst + pitch * 1)[3] = t;
+ (dst + pitch * 2)[0] = t;
+ (dst + pitch * 2)[1] = t;
+ (dst + pitch * 2)[2] = t;
+ (dst + pitch * 2)[3] = t;
+ (dst + pitch * 3)[0] = t;
+ (dst + pitch * 3)[1] = t;
+ (dst + pitch * 3)[2] = t;
+ (dst + pitch * 3)[3] = t;
+#else
t = *src++;
t += (t << 8) + (t << 16) + (t << 24);
*(uint32*)(dst + pitch * 0) = t;
*(uint32*)(dst + pitch * 1) = t;
*(uint32*)(dst + pitch * 2) = t;
*(uint32*)(dst + pitch * 3) = t;
+#endif
dst += 4;
} else if (code == 0xFE) {
+#if defined(SCUMM_NEED_ALIGNMENT)
+ t = *src++;
+ (dst + pitch * 0)[0] = t;
+ (dst + pitch * 0)[1] = t;
+ (dst + pitch * 0)[2] = t;
+ (dst + pitch * 0)[3] = t;
+ t = *src++;
+ (dst + pitch * 1)[0] = t;
+ (dst + pitch * 1)[1] = t;
+ (dst + pitch * 1)[2] = t;
+ (dst + pitch * 1)[3] = t;
+ t = *src++;
+ (dst + pitch * 2)[0] = t;
+ (dst + pitch * 2)[1] = t;
+ (dst + pitch * 2)[2] = t;
+ (dst + pitch * 2)[3] = t;
+ t = *src++;
+ (dst + pitch * 3)[0] = t;
+ (dst + pitch * 3)[1] = t;
+ (dst + pitch * 3)[2] = t;
+ (dst + pitch * 3)[3] = t;
+#else
t = *src++;
t += (t << 8) + (t << 16) + (t << 24);
*(uint32*)(dst + pitch * 0) = t;
@@ -388,8 +549,27 @@
t = *src++;
t += (t << 8) + (t << 16) + (t << 24);
*(uint32*)(dst + pitch * 3) = t;
+#endif
dst += 4;
} else if (code == 0xFF) {
+#if defined(SCUMM_NEED_ALIGNMENT)
+ (dst + pitch * 0)[0] = *src++;
+ (dst + pitch * 0)[1] = *src++;
+ (dst + pitch * 0)[2] = *src++;
+ (dst + pitch * 0)[3] = *src++;
+ (dst + pitch * 1)[0] = *src++;
+ (dst + pitch * 1)[1] = *src++;
+ (dst + pitch * 1)[2] = *src++;
+ (dst + pitch * 1)[3] = *src++;
+ (dst + pitch * 2)[0] = *src++;
+ (dst + pitch * 2)[1] = *src++;
+ (dst + pitch * 2)[2] = *src++;
+ (dst + pitch * 2)[3] = *src++;
+ (dst + pitch * 3)[0] = *src++;
+ (dst + pitch * 3)[1] = *src++;
+ (dst + pitch * 3)[2] = *src++;
+ (dst + pitch * 3)[3] = *src++;
+#else
*(uint32*)(dst + pitch * 0) = *(uint32*)src;
src += 4;
*(uint32*)(dst + pitch * 1) = *(uint32*)src;
@@ -398,15 +578,35 @@
src += 4;
*(uint32*)(dst + pitch * 3) = *(uint32*)src;
src += 4;
+#endif
dst += 4;
} else if (code == 0x00) {
int32 length = *src++ + 1;
for (int32 l = 0; l < length; l++) {
byte *dst2 = dst + next_offs;
+#if defined(SCUMM_NEED_ALIGNMENT)
+ (dst + pitch * 0)[0] = (dst2 + pitch * 0)[0];
+ (dst + pitch * 0)[1] = (dst2 + pitch * 0)[1];
+ (dst + pitch * 0)[2] = (dst2 + pitch * 0)[2];
+ (dst + pitch * 0)[3] = (dst2 + pitch * 0)[3];
+ (dst + pitch * 1)[0] = (dst2 + pitch * 1)[0];
+ (dst + pitch * 1)[1] = (dst2 + pitch * 1)[1];
+ (dst + pitch * 1)[2] = (dst2 + pitch * 1)[2];
+ (dst + pitch * 1)[3] = (dst2 + pitch * 1)[3];
+ (dst + pitch * 2)[0] = (dst2 + pitch * 2)[0];
+ (dst + pitch * 2)[1] = (dst2 + pitch * 2)[1];
+ (dst + pitch * 2)[2] = (dst2 + pitch * 2)[2];
+ (dst + pitch * 2)[3] = (dst2 + pitch * 2)[3];
+ (dst + pitch * 3)[0] = (dst2 + pitch * 3)[0];
+ (dst + pitch * 3)[1] = (dst2 + pitch * 3)[1];
+ (dst + pitch * 3)[2] = (dst2 + pitch * 3)[2];
+ (dst + pitch * 3)[3] = (dst2 + pitch * 3)[3];
+#else
*(uint32*)(dst + pitch * 0) = *(uint32*)(dst2 + pitch * 0);
*(uint32*)(dst + pitch * 1) = *(uint32*)(dst2 + pitch * 1);
*(uint32*)(dst + pitch * 2) = *(uint32*)(dst2 + pitch * 2);
*(uint32*)(dst + pitch * 3) = *(uint32*)(dst2 + pitch * 3);
+#endif
dst += 4;
i--;
if (i == 0) {
@@ -421,10 +621,29 @@
i++;
} else {
byte *dst2 = dst + _offsetTable[code] + next_offs;
+#if defined(SCUMM_NEED_ALIGNMENT)
+ (dst + pitch * 0)[0] = (dst2 + pitch * 0)[0];
+ (dst + pitch * 0)[1] = (dst2 + pitch * 0)[1];
+ (dst + pitch * 0)[2] = (dst2 + pitch * 0)[2];
+ (dst + pitch * 0)[3] = (dst2 + pitch * 0)[3];
+ (dst + pitch * 1)[0] = (dst2 + pitch * 1)[0];
+ (dst + pitch * 1)[1] = (dst2 + pitch * 1)[1];
+ (dst + pitch * 1)[2] = (dst2 + pitch * 1)[2];
+ (dst + pitch * 1)[3] = (dst2 + pitch * 1)[3];
+ (dst + pitch * 2)[0] = (dst2 + pitch * 2)[0];
+ (dst + pitch * 2)[1] = (dst2 + pitch * 2)[1];
+ (dst + pitch * 2)[2] = (dst2 + pitch * 2)[2];
+ (dst + pitch * 2)[3] = (dst2 + pitch * 2)[3];
+ (dst + pitch * 3)[0] = (dst2 + pitch * 3)[0];
+ (dst + pitch * 3)[1] = (dst2 + pitch * 3)[1];
+ (dst + pitch * 3)[2] = (dst2 + pitch * 3)[2];
+ (dst + pitch * 3)[3] = (dst2 + pitch * 3)[3];
+#else
*(uint32*)(dst + pitch * 0) = *(uint32*)(dst2 + pitch * 0);
*(uint32*)(dst + pitch * 1) = *(uint32*)(dst2 + pitch * 1);
*(uint32*)(dst + pitch * 2) = *(uint32*)(dst2 + pitch * 2);
*(uint32*)(dst + pitch * 3) = *(uint32*)(dst2 + pitch * 3);
+#endif
dst += 4;
}
} while (--i);
@@ -438,6 +657,24 @@
do {
int32 code = *src++;
if (code == 0xFF) {
+#if defined(SCUMM_NEED_ALIGNMENT)
+ (dst + pitch * 0)[0] = *src++;
+ (dst + pitch * 0)[1] = *src++;
+ (dst + pitch * 0)[2] = *src++;
+ (dst + pitch * 0)[3] = *src++;
+ (dst + pitch * 1)[0] = *src++;
+ (dst + pitch * 1)[1] = *src++;
+ (dst + pitch * 1)[2] = *src++;
+ (dst + pitch * 1)[3] = *src++;
+ (dst + pitch * 2)[0] = *src++;
+ (dst + pitch * 2)[1] = *src++;
+ (dst + pitch * 2)[2] = *src++;
+ (dst + pitch * 2)[3] = *src++;
+ (dst + pitch * 3)[0] = *src++;
+ (dst + pitch * 3)[1] = *src++;
+ (dst + pitch * 3)[2] = *src++;
+ (dst + pitch * 3)[3] = *src++;
+#else
*(uint32*)(dst + pitch * 0) = *(uint32*)src;
src += 4;
*(uint32*)(dst + pitch * 1) = *(uint32*)src;
@@ -446,15 +683,35 @@
src += 4;
*(uint32*)(dst + pitch * 3) = *(uint32*)src;
src += 4;
+#endif
dst += 4;
} else if (code == 0x00) {
int32 length = *src++ + 1;
for (int32 l = 0; l < length; l++) {
byte *dst2 = dst + next_offs;
+#if defined(SCUMM_NEED_ALIGNMENT)
+ (dst + pitch * 0)[0] = (dst2 + pitch * 0)[0];
+ (dst + pitch * 0)[1] = (dst2 + pitch * 0)[1];
+ (dst + pitch * 0)[2] = (dst2 + pitch * 0)[2];
+ (dst + pitch * 0)[3] = (dst2 + pitch * 0)[3];
+ (dst + pitch * 1)[0] = (dst2 + pitch * 1)[0];
+ (dst + pitch * 1)[1] = (dst2 + pitch * 1)[1];
+ (dst + pitch * 1)[2] = (dst2 + pitch * 1)[2];
+ (dst + pitch * 1)[3] = (dst2 + pitch * 1)[3];
+ (dst + pitch * 2)[0] = (dst2 + pitch * 2)[0];
+ (dst + pitch * 2)[1] = (dst2 + pitch * 2)[1];
+ (dst + pitch * 2)[2] = (dst2 + pitch * 2)[2];
+ (dst + pitch * 2)[3] = (dst2 + pitch * 2)[3];
+ (dst + pitch * 3)[0] = (dst2 + pitch * 3)[0];
+ (dst + pitch * 3)[1] = (dst2 + pitch * 3)[1];
+ (dst + pitch * 3)[2] = (dst2 + pitch * 3)[2];
+ (dst + pitch * 3)[3] = (dst2 + pitch * 3)[3];
+#else
*(uint32*)(dst + pitch * 0) = *(uint32*)(dst2 + pitch * 0);
*(uint32*)(dst + pitch * 1) = *(uint32*)(dst2 + pitch * 1);
*(uint32*)(dst + pitch * 2) = *(uint32*)(dst2 + pitch * 2);
*(uint32*)(dst + pitch * 3) = *(uint32*)(dst2 + pitch * 3);
+#endif
dst += 4;
i--;
if (i == 0) {
@@ -469,10 +726,29 @@
i++;
} else {
byte *dst2 = dst + _offsetTable[code] + next_offs;
+#if defined(SCUMM_NEED_ALIGNMENT)
+ (dst + pitch * 0)[0] = (dst2 + pitch * 0)[0];
+ (dst + pitch * 0)[1] = (dst2 + pitch * 0)[1];
+ (dst + pitch * 0)[2] = (dst2 + pitch * 0)[2];
+ (dst + pitch * 0)[3] = (dst2 + pitch * 0)[3];
+ (dst + pitch * 1)[0] = (dst2 + pitch * 1)[0];
+ (dst + pitch * 1)[1] = (dst2 + pitch * 1)[1];
+ (dst + pitch * 1)[2] = (dst2 + pitch * 1)[2];
+ (dst + pitch * 1)[3] = (dst2 + pitch * 1)[3];
+ (dst + pitch * 2)[0] = (dst2 + pitch * 2)[0];
+ (dst + pitch * 2)[1] = (dst2 + pitch * 2)[1];
+ (dst + pitch * 2)[2] = (dst2 + pitch * 2)[2];
+ (dst + pitch * 2)[3] = (dst2 + pitch * 2)[3];
+ (dst + pitch * 3)[0] = (dst2 + pitch * 3)[0];
+ (dst + pitch * 3)[1] = (dst2 + pitch * 3)[1];
+ (dst + pitch * 3)[2] = (dst2 + pitch * 3)[2];
+ (dst + pitch * 3)[3] = (dst2 + pitch * 3)[3];
+#else
*(uint32*)(dst + pitch * 0) = *(uint32*)(dst2 + pitch * 0);
*(uint32*)(dst + pitch * 1) = *(uint32*)(dst2 + pitch * 1);
*(uint32*)(dst + pitch * 2) = *(uint32*)(dst2 + pitch * 2);
*(uint32*)(dst + pitch * 3) = *(uint32*)(dst2 + pitch * 3);
+#endif
dst += 4;
}
} while (--i);
More information about the Scummvm-git-logs
mailing list