News:

MASM32 SDK Description, downloads and other helpful links
MASM32.com New Forum Link
masmforum WebSite

InstrCi - case-insensitive string search

Started by jj2007, June 15, 2008, 10:09:46 PM

Previous topic - Next topic

jj2007

Quote from: UtillMasm on May 15, 2009, 07:11:39 AM
Genuine Intel(R) CPU           T2400  @ 1.83GHz (SSE3)
Type        Short   Medium HighAnsi MisMatch MisMatch     File  Overall
InStrL         33       44      253       11      121  1577477      462
File            874029


Type        Short   Medium HighAnsi MisMatch MisMatch     File  Overall
InStrL         26       43      298        1      170 2512065e  <------------------

File            849788

Strange. Which Masm32/Windows.inc version do you use? For my version, the algo produces an error...

Directory of D:\masm32\include
05.06.08  03:57           849,788 windows.inc

UtillMasm

yes, because i comment two lines.

\masm32\include\windows.inc(16569)
\masm32\include\windows.inc(16610)

atachment is before comment.

[attachment deleted by admin]

Mark Jones

AMD Athlon(tm) 64 X2 Dual Core Processor 4000+ (SSE3)
Type        Short   Medium HighAnsi MisMatch MisMatch     File  Overall
Source    Mainstr  Mainstr  Mainstr mismatch mismatch  fbuffer  sum of
Pattern   Substr1  Substr2  Substr4  mmStr_b  mmStr_x  WindInc  cycles*
======== ======== ======== ======== ======== ======== ======== ========
OVH            71        0        0        0        0        0       71
InstrM32      177      262      555      168      520  4635503     1682
finstr2        45       74      186       33      165  2235211      503
finstr3        47       71      179       33      158  2177821      488
finstr6        45       71      186       33      165  2232679      500
InStrL         30       36      197       21      109 1517858e      393
InstrJJ        61       80      108       59      116  1163430      424
InstrJJw       53       86      128       54      135   832986      456
BMLinDB       11e      125      199       11      11e  1446577      357

* not including file test

Sizes:
Mainstr         100
Substr1         4
Substr2         9
Substr4         9

mismatch        100
mmStr_b         5
mmStr_x         5

File            849788
WindInc         13 = Duplicate inc
"To deny our impulses... foolish; to revel in them, chaos." MCJ 2003.08

lingo

New CPU with new instructions and results:  :lol
comment * SrchBytes by Lingo *
align 16
SrchBytes proc lpBuffer:dword, lpSrchPatt:dword
        mov edx, [esp+2*4]
        mov eax, [esp+1*4] 
        movdqu xmm2, xmmword ptr[edx]
        pxor xmm3, xmm3
@Loop:
        pcmpistri xmm2, xmmword ptr [eax], 0Ch
        jna @f
pcmpistri xmm2, xmmword ptr [eax+16], 0Ch
        lea eax, [eax+32]
        ja @Loop
lea ecx, [ecx-16]
@@:
lea eax, [eax+ecx]
        jnc L_not_found
sub edx, eax
movd xmm7, eax
@@:
    movdqu xmm1, xmmword ptr[eax + edx]
    pcmpistrm xmm3, xmm1, 58h
    movdqu xmm4, xmmword ptr[eax]
    add eax, 16
    pand xmm4, xmm0
    pcmpistri xmm1, xmm4, 18h
    ja @b
movd eax, xmm7
jnc L_found
add edx, eax
add eax, 1
jne @Loop
align 8
L_not_found:
or eax, -1
ret 2*4
align 8
L_found:
sub eax, [esp+1*4]
ret 2*4
SrchBytes endp

The results are:

       Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz (SSE4)

Search Test 1 - value expected 37; lenSrchPattern ->22
InString - JJb:                         38 ; clocks: 52
InString - JJw:                         38 ; clocks: 60
SrchBytes -  Lingo:                     37 ; clocks: 23

Search Test 2 - value expected 1007; lenSrchPattern ->17
InString - JJb:                         1008 ; clocks: 10432
InString - JJw:                         1008 ; clocks: 7897
SrchBytes -  Lingo:                     1007 ; clocks: 1710

Search Test 3 - value expected 1008 ;lenSrchPattern ->16
InString - JJb:                         1009 ; clocks: 208
InString - JJw:                         1009 ; clocks: 284
SrchBytes -  Lingo:                     1008 ; clocks: 166

Search Test 4 - value expected 1008 ;lenSrchPattern ->16
InString - JJb:                         1009 ; clocks: 1994
InString - JJw:                         1009 ; clocks: 2183
SrchBytes -  Lingo:                     1008 ; clocks: 1409

Search Test 5 - value expected 1008 ;lenSrchPattern ->16
InString - JJb:                         1009 ; clocks: 1284
InString - JJw:                         1009 ; clocks: 1377
SrchBytes -  Lingo:                     1008 ; clocks: 1050

Search Test 6 - value expected 1008 ;lenSrchPattern ->16
InString - JJb:                         1009 ; clocks: 205
InString - JJw:                         1009 ; clocks: 289
SrchBytes -  Lingo:                     1008 ; clocks: 174

Search Test 7 - value expected 1009 ;lenSrchPattern ->14
InString - JJb:                         1010 ; clocks: 296
InString - JJw:                         1010 ; clocks: 281
SrchBytes -  Lingo:                     1009 ; clocks: 214

Search Test 8 - value expected 1001 ;lenSrchPattern ->1
InString - JJb:                         1002 ; clocks: 175
InString - JJw:                         1002 ; clocks: 186
SrchBytes -  Lingo:                     1001 ; clocks: 138

Search Test 9 - value expected 1001 ;lenSrchPattern ->2
InString - JJb:                         1002 ; clocks: 181
InString - JJw:                         1002 ; clocks: 261
SrchBytes -  Lingo:                     1001 ; clocks: 158

Search Test 10 - value expected 1001 ;lenSrchPattern ->3
InString - JJb:                         1002 ; clocks: 180
InString - JJw:                         1002 ; clocks: 264
SrchBytes -  Lingo:                     1001 ; clocks: 151

Search Test 11 - value expected 1001 ;lenSrchPattern ->4
InString - JJb:                         1002 ; clocks: 176
InString - JJw:                         1002 ; clocks: 269
SrchBytes -  Lingo:                     1001 ; clocks: 159

Search Test 12 - value expected 1001 ;lenSrchPattern ->5
InString - JJb:                         1002 ; clocks: 188
InString - JJw:                         1002 ; clocks: 264
SrchBytes -  Lingo:                     1001 ; clocks: 171

Search Test 13 --Find 'Duplicate inc' in 'windows.inc' ;lenSrchPattern ->13
InString - JJb:                         1127625 ; clocks: 550930
InString - JJw:                         1127625 ; clocks: 249918
SrchBytes -  Lingo:                     1127624 ; clocks: 202321

Search Test 14 --Find 'warning or' in 'windows.inc' ;lenSrchPattern ->10
InString - JJb:                         1127404 ; clocks: 196414
InString - JJw:                         1127404 ; clocks: 250335
SrchBytes -  Lingo:                     1127403 ; clocks: 171055

Press ENTER to exit...

jj2007

Since I fully trust my old friend Lingo, I double-clicked the exe - and wow, that's probably called a "SSE4.2 GPF" :green2