~ubuntu-branches/debian/wheezy/cuneiform/wheezy

« back to all changes in this revision

Viewing changes to cuneiform_src/Kern/mmx/src/mmx_ind.c

  • Committer: Bazaar Package Importer
  • Author(s): Daniel Baumann
  • Date: 2009-07-10 17:58:10 UTC
  • Revision ID: james.westby@ubuntu.com-20090710175810-rqc89d2i3tki9m89
Tags: upstream-0.7.0+dfsg
ImportĀ upstreamĀ versionĀ 0.7.0+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
Copyright (c) 1993-2008, Cognitive Technologies
 
3
All rights reserved.
 
4
 
 
5
ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½,
 
6
ļæ½ļæ½ļæ½ ļæ½ ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½:
 
7
 
 
8
      * ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½
 
9
        ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½
 
10
        ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½.
 
11
      * ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½/ļæ½ļæ½ļæ½ ļæ½
 
12
        ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½
 
13
        ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½
 
14
        ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½.
 
15
      * ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ Cognitive Technologies, ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½
 
16
        ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½/ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½
 
17
        ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½, ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½
 
18
        ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½.
 
19
 
 
20
ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½/ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ "ļæ½ļæ½ļæ½
 
21
ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½" ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½-ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½,
 
22
ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ ļæ½ļæ½
 
23
ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½. ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½
 
24
ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½/ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½
 
25
ļæ½ļæ½ŃØļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½
 
26
ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½
 
27
ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ (ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½,
 
28
ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½/ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½-ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½
 
29
ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ ļæ½/ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½,
 
30
ļæ½ļæ½ ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½), ļæ½ļæ½ ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½, ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½
 
31
ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½ ļæ½ ļæ½ļæ½ļæ½ļæ½ļæ½ļæ½.
 
32
 
 
33
Redistribution and use in source and binary forms, with or without modification,
 
34
are permitted provided that the following conditions are met:
 
35
 
 
36
    * Redistributions of source code must retain the above copyright notice,
 
37
      this list of conditions and the following disclaimer.
 
38
    * Redistributions in binary form must reproduce the above copyright notice,
 
39
      this list of conditions and the following disclaimer in the documentation
 
40
      and/or other materials provided with the distribution.
 
41
    * Neither the name of the Cognitive Technologies nor the names of its
 
42
      contributors may be used to endorse or promote products derived from this
 
43
      software without specific prior written permission.
 
44
 
 
45
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 
46
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 
47
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 
48
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
 
49
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 
50
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 
51
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 
52
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 
53
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 
54
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
55
*/
 
56
 
 
57
#include"mmx.h"
 
58
 
 
59
extern   Word32 bit_cnt_mmx[];
 
60
 
 
61
//
 
62
//       DWORD   MMX_anding (int32 * images, int32 * etalon, int32 limit)
 
63
//
 
64
MMX_FUNC(Bool32) MMX_anding(Int32 *image,Word16 *etalons,Int32 L)
 
65
{
 
66
#ifdef _MSC_VER
 
67
_asm    {
 
68
 
 
69
        mov     edx,    etalons
 
70
                xor     eax,    eax                     ; accounter of bits
 
71
 
 
72
;CYKL 0
 
73
        movq    mm0,    [edx]       ;   mm0 = etalon
 
74
 
 
75
        movq    mm1,    mm0
 
76
;IF     ARG EQ 0
 
77
        pand    mm0,    mm2
 
78
        pandn   mm1,    mm3
 
79
;ENDIF
 
80
 
 
81
;IF     ARG EQ 1
 
82
;        pand    mm0,    mm4
 
83
;        pandn   mm1,    mm5
 
84
;ENDIF
 
85
 
 
86
;IF     ARG EQ 2
 
87
;        pand    mm0,    mm6
 
88
;        pandn   mm1,    mm7
 
89
;ENDIF
 
90
 
 
91
;IF     ARG EQ 3
 
92
;               mov     edx,    image
 
93
;        pand    mm0,    [edx+24]
 
94
;        pandn   mm1,    [edx+8*4+24]
 
95
;ENDIF
 
96
;   mm0 = tmp & (image   = iobraz)
 
97
;   mm1 =~tmp & (image+8 = iobraz2)
 
98
;IF     ARG EQ 0
 
99
                sub             eax,    L
 
100
;ENDIF
 
101
        movd   esi,    mm0
 
102
                mov             edi,    esi
 
103
                and             esi,    0ffffh
 
104
        movd   ebx,    mm1
 
105
                shr             edi,    16
 
106
                mov             ecx,    ebx
 
107
                and             ebx,    0ffffh
 
108
                shr             ecx,    16
 
109
        add     eax,    dword ptr bit_cnt_mmx[esi*4]  ;    0-15
 
110
 
 
111
                add     eax,    dword ptr bit_cnt_mmx[ebx*4]  ;    0-15
 
112
                jge                     retur
 
113
 
 
114
        psrlq   mm0,    32
 
115
                add     eax,    dword ptr bit_cnt_mmx[edi*4]  ;    16-31
 
116
        psrlq   mm1,    32
 
117
        add     eax,    dword ptr bit_cnt_mmx[ecx*4]  ;    16-31
 
118
                jge                     retur
 
119
 
 
120
        movd   esi,    mm0
 
121
                mov             edi,    esi
 
122
                and             esi,    0ffffh
 
123
        movd   ebx,    mm1
 
124
                shr             edi,    16
 
125
                mov             ecx,    ebx
 
126
                and             ebx,    0ffffh
 
127
                shr             ecx,    16
 
128
        add     eax,    dword ptr bit_cnt_mmx[esi*4]  ;    32-47
 
129
 
 
130
                add     eax,    dword ptr bit_cnt_mmx[ebx*4]  ;    32-47
 
131
                jge                     retur
 
132
 
 
133
                add     eax,    dword ptr bit_cnt_mmx[edi*4]  ;    48-63
 
134
                add     edx,    8
 
135
        add     eax,    dword ptr bit_cnt_mmx[ecx*4]  ;    48-63
 
136
;IF     ARG NE 3
 
137
                jge                     retur
 
138
;ENDIF
 
139
 
 
140
;        CYKL 1
 
141
        movq    mm0,    [edx]       ;   mm0 = etalon
 
142
 
 
143
        movq    mm1,    mm0
 
144
;IF     ARG EQ 0
 
145
;        pand    mm0,    mm2
 
146
;        pandn   mm1,    mm3
 
147
;ENDIF
 
148
 
 
149
;IF     ARG EQ 1
 
150
        pand    mm0,    mm4
 
151
        pandn   mm1,    mm5
 
152
;ENDIF
 
153
 
 
154
;IF     ARG EQ 2
 
155
;        pand    mm0,    mm6
 
156
;        pandn   mm1,    mm7
 
157
;ENDIF
 
158
 
 
159
;IF     ARG EQ 3
 
160
;               mov     edx,    image
 
161
;        pand    mm0,    [edx+24]
 
162
;        pandn   mm1,    [edx+8*4+24]
 
163
;ENDIF
 
164
;   mm0 = tmp & (image   = iobraz)
 
165
;   mm1 =~tmp & (image+8 = iobraz2)
 
166
;IF     ARG EQ 0
 
167
;               sub             eax,    L
 
168
;ENDIF
 
169
        movd   esi,    mm0
 
170
                mov             edi,    esi
 
171
                and             esi,    0ffffh
 
172
        movd   ebx,    mm1
 
173
                shr             edi,    16
 
174
                mov             ecx,    ebx
 
175
                and             ebx,    0ffffh
 
176
                shr             ecx,    16
 
177
        add     eax,    dword ptr bit_cnt_mmx[esi*4]  ;    0-15
 
178
 
 
179
                add     eax,    dword ptr bit_cnt_mmx[ebx*4]  ;    0-15
 
180
                jge                     retur
 
181
 
 
182
        psrlq   mm0,    32
 
183
                add     eax,    dword ptr bit_cnt_mmx[edi*4]  ;    16-31
 
184
        psrlq   mm1,    32
 
185
        add     eax,    dword ptr bit_cnt_mmx[ecx*4]  ;    16-31
 
186
                jge                     retur
 
187
 
 
188
        movd   esi,    mm0
 
189
                mov             edi,    esi
 
190
                and             esi,    0ffffh
 
191
        movd   ebx,    mm1
 
192
                shr             edi,    16
 
193
                mov             ecx,    ebx
 
194
                and             ebx,    0ffffh
 
195
                shr             ecx,    16
 
196
        add     eax,    dword ptr bit_cnt_mmx[esi*4]  ;    32-47
 
197
 
 
198
                add     eax,    dword ptr bit_cnt_mmx[ebx*4]  ;    32-47
 
199
                jge                     retur
 
200
 
 
201
                add     eax,    dword ptr bit_cnt_mmx[edi*4]  ;    48-63
 
202
                add     edx,    8
 
203
        add     eax,    dword ptr bit_cnt_mmx[ecx*4]  ;    48-63
 
204
;IF     ARG NE 3
 
205
                jge                     retur
 
206
;ENDIF
 
207
 
 
208
;       CYKL 2
 
209
        movq    mm0,    [edx]       ;   mm0 = etalon
 
210
 
 
211
        movq    mm1,    mm0
 
212
;IF     ARG EQ 0
 
213
;        pand    mm0,    mm2
 
214
;        pandn   mm1,    mm3
 
215
;ENDIF
 
216
 
 
217
;IF     ARG EQ 1
 
218
;        pand    mm0,    mm4
 
219
;        pandn   mm1,    mm5
 
220
;ENDIF
 
221
 
 
222
;IF     ARG EQ 2
 
223
        pand    mm0,    mm6
 
224
        pandn   mm1,    mm7
 
225
;ENDIF
 
226
 
 
227
;IF     ARG EQ 3
 
228
;               mov     edx,    image
 
229
;        pand    mm0,    [edx+24]
 
230
;        pandn   mm1,    [edx+8*4+24]
 
231
;ENDIF
 
232
;   mm0 = tmp & (image   = iobraz)
 
233
;   mm1 =~tmp & (image+8 = iobraz2)
 
234
;IF     ARG EQ 0
 
235
;               sub             eax,    L
 
236
;ENDIF
 
237
        movd   esi,    mm0
 
238
                mov             edi,    esi
 
239
                and             esi,    0ffffh
 
240
        movd   ebx,    mm1
 
241
                shr             edi,    16
 
242
                mov             ecx,    ebx
 
243
                and             ebx,    0ffffh
 
244
                shr             ecx,    16
 
245
        add     eax,    dword ptr bit_cnt_mmx[esi*4]  ;    0-15
 
246
 
 
247
                add     eax,    dword ptr bit_cnt_mmx[ebx*4]  ;    0-15
 
248
                jge                     retur
 
249
 
 
250
        psrlq   mm0,    32
 
251
                add     eax,    dword ptr bit_cnt_mmx[edi*4]  ;    16-31
 
252
        psrlq   mm1,    32
 
253
        add     eax,    dword ptr bit_cnt_mmx[ecx*4]  ;    16-31
 
254
                jge                     retur
 
255
 
 
256
        movd   esi,    mm0
 
257
                mov             edi,    esi
 
258
                and             esi,    0ffffh
 
259
        movd   ebx,    mm1
 
260
                shr             edi,    16
 
261
                mov             ecx,    ebx
 
262
                and             ebx,    0ffffh
 
263
                shr             ecx,    16
 
264
        add     eax,    dword ptr bit_cnt_mmx[esi*4]  ;    32-47
 
265
 
 
266
                add     eax,    dword ptr bit_cnt_mmx[ebx*4]  ;    32-47
 
267
                jge                     retur
 
268
 
 
269
                add     eax,    dword ptr bit_cnt_mmx[edi*4]  ;    48-63
 
270
                add     edx,    8
 
271
        add     eax,    dword ptr bit_cnt_mmx[ecx*4]  ;    48-63
 
272
;IF     ARG NE 3
 
273
                jge                     retur
 
274
;ENDIF
 
275
 
 
276
;       CYKL 3
 
277
        movq    mm0,    [edx]       ;   mm0 = etalon
 
278
 
 
279
        movq    mm1,    mm0
 
280
;IF     ARG EQ 0
 
281
;        pand    mm0,    mm2
 
282
;        pandn   mm1,    mm3
 
283
;ENDIF
 
284
 
 
285
;IF     ARG EQ 1
 
286
;        pand    mm0,    mm4
 
287
;        pandn   mm1,    mm5
 
288
;ENDIF
 
289
 
 
290
;IF     ARG EQ 2
 
291
;        pand    mm0,    mm6
 
292
;        pandn   mm1,    mm7
 
293
;ENDIF
 
294
 
 
295
;IF     ARG EQ 3
 
296
                mov     edx,    image
 
297
        pand    mm0,    [edx+24]
 
298
        pandn   mm1,    [edx+8*4+24]
 
299
;ENDIF
 
300
;   mm0 = tmp & (image   = iobraz)
 
301
;   mm1 =~tmp & (image+8 = iobraz2)
 
302
;IF     ARG EQ 0
 
303
;               sub             eax,    L
 
304
;ENDIF
 
305
        movd   esi,    mm0
 
306
                mov             edi,    esi
 
307
                and             esi,    0ffffh
 
308
        movd   ebx,    mm1
 
309
                shr             edi,    16
 
310
                mov             ecx,    ebx
 
311
                and             ebx,    0ffffh
 
312
                shr             ecx,    16
 
313
        add     eax,    dword ptr bit_cnt_mmx[esi*4]  ;    0-15
 
314
 
 
315
                add     eax,    dword ptr bit_cnt_mmx[ebx*4]  ;    0-15
 
316
                jge                     retur
 
317
 
 
318
        psrlq   mm0,    32
 
319
                add     eax,    dword ptr bit_cnt_mmx[edi*4]  ;    16-31
 
320
        psrlq   mm1,    32
 
321
        add     eax,    dword ptr bit_cnt_mmx[ecx*4]  ;    16-31
 
322
                jge                     retur
 
323
 
 
324
        movd   esi,    mm0
 
325
                mov             edi,    esi
 
326
                and             esi,    0ffffh
 
327
        movd   ebx,    mm1
 
328
                shr             edi,    16
 
329
                mov             ecx,    ebx
 
330
                and             ebx,    0ffffh
 
331
                shr             ecx,    16
 
332
        add     eax,    dword ptr bit_cnt_mmx[esi*4]  ;    32-47
 
333
 
 
334
                add     eax,    dword ptr bit_cnt_mmx[ebx*4]  ;    32-47
 
335
                jge                     retur
 
336
 
 
337
                add     eax,    dword ptr bit_cnt_mmx[edi*4]  ;    48-63
 
338
                add     edx,    8
 
339
        add     eax,    dword ptr bit_cnt_mmx[ecx*4]  ;    48-63
 
340
;IF     ARG NE 3
 
341
;               jge                     retur
 
342
;ENDIF
 
343
retur:
 
344
                add             eax,    L
 
345
        }
 
346
 
 
347
#else
 
348
    return 0;
 
349
#endif
 
350
}
 
351
 
 
352
 
 
353
MMX_FUNC(void) MMX_open( Int32 *image)
 
354
{
 
355
#ifdef _MSC_VER
 
356
_asm    {
 
357
                mov     edx,    image
 
358
                movq    mm2,    [edx]        ;   MM2 = (image   = iobraz)
 
359
                movq    mm3,    [edx+8*4]    ;   MM3 = (image+8 = iobraz2)
 
360
                movq    mm4,    [edx+8]      ;   MM4 = (image   = iobraz)
 
361
                movq    mm5,    [edx+8*4+8]  ;   MM5 = (image+8 = iobraz2)
 
362
                movq    mm6,    [edx+16]         ;   MM6 = (image   = iobraz)
 
363
        movq    mm7,    [edx+8*4+16] ;   MM7 = (image+8 = iobraz2)
 
364
        }
 
365
#endif
 
366
}
 
367
 
 
368
MMX_FUNC(void) MMX_close(void)
 
369
{
 
370
#ifdef _MSC_VER
 
371
_asm            EMMS
 
372
#endif
 
373
}