[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