[Scummvm-cvs-logs] CVS: scummvm/sky disk.cpp,1.65,1.66

Chris Apers chrilith at users.sourceforge.net
Fri Mar 11 02:55:36 CET 2005


Update of /cvsroot/scummvm/scummvm/sky
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11538

Modified Files:
	disk.cpp 
Log Message:
PalmOS : ARM optimized unpacker

Index: disk.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/disk.cpp,v
retrieving revision 1.65
retrieving revision 1.66
diff -u -d -r1.65 -r1.66
--- disk.cpp	11 Feb 2005 11:14:21 -0000	1.65
+++ disk.cpp	11 Mar 2005 10:55:10 -0000	1.66
@@ -28,6 +28,11 @@
 #include "sky/sky.h"
 #include "sky/struc.h"
 
+#if defined(__PALM_OS__)
+#include "arm/native.h"
+#include "arm/macros.h"
+#endif
+
 namespace Sky {
 
 static const char *dataFilename = "sky.dsk";
@@ -154,9 +159,20 @@
 		uint8 *uncompDest = (uint8 *)malloc(decompSize);
 
 		int32 unpackLen;
+		void *output, *input = fileDest + sizeof(dataFileHeader);
+
 		if ((fileFlags >> 22) & 0x1) { //do we include the header?
 			// don't return the file's header
-			unpackLen = _rncDecoder.unpackM1(fileDest + sizeof(dataFileHeader), uncompDest, 0);
+			output = uncompDest;
+#ifdef __PALM_OS__
+		ARM_START(RncDecoderType)
+			ARM_INIT(SKY_UNPACKM1)
+			ARM_ADDM(input)
+			ARM_ADDM(output)
+			ARM_CALL_VALUE(ARM_ENGINE, PNO_DATA(), unpackLen)
+		ARM_CONTINUE()
+#endif
+			unpackLen = _rncDecoder.unpackM1(input, output, 0);
 		} else {
 #ifdef SCUMM_BIG_ENDIAN
 			// Convert dataFileHeader to BE (it only consists of 16 bit words)
@@ -164,8 +180,19 @@
 			for (uint i = 0; i < sizeof(struct dataFileHeader) / 2; i++)
 				*(headPtr + i) = READ_LE_UINT16(headPtr + i);
 #endif
+
 			memcpy(uncompDest, fileDest, sizeof(dataFileHeader));
-			unpackLen = _rncDecoder.unpackM1(fileDest + sizeof(dataFileHeader), uncompDest + sizeof(dataFileHeader), 0);
+			output = uncompDest + sizeof(dataFileHeader);
+
+#ifdef __PALM_OS__
+		ARM_START(RncDecoderType)
+			ARM_INIT(SKY_UNPACKM1)
+			ARM_ADDM(input)
+			ARM_ADDM(output)
+			ARM_CALL_VALUE(ARM_ENGINE, PNO_DATA(), unpackLen)
+		ARM_CONTINUE()
+#endif
+			unpackLen = _rncDecoder.unpackM1(input, output, 0);
 			if (unpackLen)
 				unpackLen += sizeof(dataFileHeader);
 		}





More information about the Scummvm-git-logs mailing list