aboutsummaryrefslogtreecommitdiff
path: root/tools/skycpt
diff options
context:
space:
mode:
authorMax Horn2009-12-26 01:38:57 +0000
committerMax Horn2009-12-26 01:38:57 +0000
commitddce48ed03a0bb5c28c5f13e9e3c5016e3bed2a1 (patch)
tree337a47c96a6d6a4a85d67fe9e3a581e6fc26d901 /tools/skycpt
parent6c0dc96fd3ba2a8aa3498b3de71d9fea7cf57881 (diff)
downloadscummvm-rg350-ddce48ed03a0bb5c28c5f13e9e3c5016e3bed2a1.tar.gz
scummvm-rg350-ddce48ed03a0bb5c28c5f13e9e3c5016e3bed2a1.tar.bz2
scummvm-rg350-ddce48ed03a0bb5c28c5f13e9e3c5016e3bed2a1.zip
Remove x86 ASM version of sykcpt code, just use the generic code everywhere
svn-id: r46574
Diffstat (limited to 'tools/skycpt')
-rw-r--r--tools/skycpt/KmpSearch.cpp137
-rw-r--r--tools/skycpt/KmpSearch.h13
2 files changed, 6 insertions, 144 deletions
diff --git a/tools/skycpt/KmpSearch.cpp b/tools/skycpt/KmpSearch.cpp
index 4f561ba309..b787d1df69 100644
--- a/tools/skycpt/KmpSearch.cpp
+++ b/tools/skycpt/KmpSearch.cpp
@@ -26,143 +26,10 @@
#include <stdlib.h>
#include <string.h>
-#ifdef _MSC_VER
-
-__declspec(naked) void __fastcall KmpSearch::init(const char *subStr) {
- __asm {
- // kmp initialization, make jump table for mismatches
- push esi
- push edi
- push ebp
- push ebx
- push ecx
-
- mov esi, edx // edx: subStr argument
- lea edi, [ecx + KmpSearch::_subStr] // this + 0x100
- lea ebx, [ecx + KmpSearch::_retarget] // this
- lea ebp, [ecx + 1]
-
- mov byte ptr [ebx], -1
-
- xor eax, eax
-
- loopStart:
- shr ecx, 8
- test al, 3
- jnz short dontLoad
- mov ecx, dword ptr [esi + eax] // load next 4 bytes of subStr
- mov dword ptr [edi], ecx // and copy them to this._subStr while we're at it
- lea edi, [edi + 4]
- dontLoad:
-
- or cl, cl // end of subStr?
- jz short endOfString
-
- mov edx, eax // save counter (i) in edx
-
- xlat // al = retarget[i]
- inc al
- mov byte ptr [ebp + edx], al // retarget[i + 1] = retarget[i] + 1
- jz short decLoopEnd
- decrementLoop:
- dec al
- mov ah, byte ptr [esi + eax] // ah = sub[retarget[i + 1] - 1]
- cmp ah, cl // if (ah == sub[i])
- jz short decLoopEnd // goto decLoopEnd
-
- xlat // al = retarget[retarget[i + 1] - 1]
- xor ah, ah
- inc al // al = retarget[retarget[i + 1] - 1] + 1
- mov byte ptr [ebp + edx], al // retarget[i + 1] = al
- jnz short decrementLoop
- decLoopEnd:
- lea eax, [edx + 1] // i = i + 1
- jmp short loopStart
-
- endOfString:
-
- pop ecx // this
- mov [ecx + KmpSearch::_strLen], eax // length of substring (without '\0')
-
- pop ebx
- pop ebp
- pop edi
- pop esi
- ret
- }
-}
-
-__declspec(naked) const char * __fastcall KmpSearch::search(const char *str) {
- __asm {
- push esi
- push edi
- push ebx
-
- mov esi, edx // edx: str argument
- lea edi, [ecx + KmpSearch::_subStr]
- lea ebx, [ecx + KmpSearch::_retarget]
- mov ch, byte ptr [ecx + KmpSearch::_strLen]
-
- or ch, ch // if (_strLen == 0)
- jz short endOfString // goto endOfString
-
- xor edx, edx // index
-
- mov cl, 3
- searchLoop:
- shr eax, 8
- inc cl
- test cl, 4
- jz short skipRead
- lodsd
- xor cl, cl
- skipRead:
-
- test al, al
- jz short endOfString
-
- newIndexLoop:
- cmp al, byte ptr [edi + edx] // while (c != sub[index]) {
- jz short gotNewIndex
- or edx, edx // if (index == 0)
- jz short searchLoop // goto searchLoop
- movzx edx, byte ptr [ebx + edx] // index = retarget[index]
- jmp short newIndexLoop // }
-
- gotNewIndex:
- inc edx
- cmp dl, ch // if (index != _strLen)
- jne short searchLoop // goto searchLoop
-
- movzx ebx, cl // bytes of eax used
- movzx ecx, ch // length of subStr
-
- lea eax, [esi + ebx - 3]
- sub eax, ecx
-
- pop ebx
- pop edi
- pop esi
- ret
-
- endOfString:
- xor eax, eax // return NULL
- pop ebx
- pop edi
- pop esi
- ret
- }
-}
-
-#else
-
-void __fastcall KmpSearch::init(const char *subStr) {
+void KmpSearch::init(const char *subStr) {
strcpy(_subStr, subStr);
}
-const char * __fastcall KmpSearch::search(const char *str) {
+const char *KmpSearch::search(const char *str) {
return strstr(str, _subStr);
}
-
-#endif
-
diff --git a/tools/skycpt/KmpSearch.h b/tools/skycpt/KmpSearch.h
index 97ec1ca7c8..b57a6736f7 100644
--- a/tools/skycpt/KmpSearch.h
+++ b/tools/skycpt/KmpSearch.h
@@ -23,17 +23,12 @@
#ifndef __KmpSearch__
#define __KmpSearch__
-#ifndef _MSC_VER
-#define __fastcall
-#endif
-
class KmpSearch {
public:
- void __fastcall init(const char *subStr);
- const char * __fastcall search(const char *str);
-//private:
- char _retarget[256], _subStr[256];
- unsigned long _strLen;
+ void init(const char *subStr);
+ const char *search(const char *str);
+private:
+ char _subStr[256];
};
#endif //__KmpSearch__