[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