1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
--- filter/Absdiff.c 2002-08-25 17:54:47.000000000 -0400
+++ filter/Absdiff.c?rt=sdlcam&r=1.3&p=1 2003-09-10 00:33:39.213153784 -0400
@@ -33,53 +33,52 @@
#ifdef MMX
/* {{{ D = [A-B] OR [B-A] ; [] mean sturated to 0 */
if (len < 8) return 0; // image size must be at least 8 bytes
- asm volatile ("
- push %%ebx
- push %%ecx
- push %%esi
- push %%edi
- mov %3, %%ecx
- mov %2, %%edi
- mov %1, %%ebx
- mov %0, %%esi
- shr $5, %%ecx
- .align 16
- .absdiff_MMX:
- movq (%%esi), %%mm0
- movq 8(%%esi), %%mm1
- movq 16(%%esi), %%mm2
- movq 24(%%esi), %%mm3
- movq (%%ebx), %%mm4
- movq 8(%%ebx), %%mm5
- movq 16(%%ebx), %%mm6
- movq 24(%%ebx), %%mm7
- psubusb %%mm4 , %%mm0
- psubusb %%mm5 , %%mm1
- psubusb %%mm6 , %%mm2
- psubusb %%mm7 , %%mm3
- psubusb (%%esi), %%mm4
- psubusb 8(%%esi), %%mm5
- psubusb 16(%%esi), %%mm6
- psubusb 24(%%esi), %%mm7
- por %%mm4 , %%mm0
- por %%mm5 , %%mm1
- por %%mm6 , %%mm2
- por %%mm7 , %%mm3
- movq %%mm0, (%%edi)
- movq %%mm1, 8(%%edi)
- movq %%mm2, 16(%%edi)
- movq %%mm3, 24(%%edi)
- add $32, %%esi
- add $32, %%edi
- add $32, %%ebx
- dec %%ecx
- jnz .absdiff_MMX
- emms
- pop %%edi
- pop %%esi
- pop %%ecx
- pop %%ebx
- "
+ asm volatile (
+ " push %%ebx \n"
+ " push %%ecx \n"
+ " push %%esi \n"
+ " push %%edi \n"
+ " mov %3, %%ecx \n"
+ " mov %2, %%edi \n"
+ " mov %1, %%ebx \n"
+ " mov %0, %%esi \n"
+ " shr $5, %%ecx \n"
+ ".align 16 \n"
+ ".absdiff_MMX: \n"
+ " movq (%%esi), %%mm0 \n"
+ " movq 8(%%esi), %%mm1 \n"
+ " movq 16(%%esi), %%mm2 \n"
+ " movq 24(%%esi), %%mm3 \n"
+ " movq (%%ebx), %%mm4 \n"
+ " movq 8(%%ebx), %%mm5 \n"
+ " movq 16(%%ebx), %%mm6 \n"
+ " movq 24(%%ebx), %%mm7 \n"
+ " psubusb %%mm4 , %%mm0 \n"
+ " psubusb %%mm5 , %%mm1 \n"
+ " psubusb %%mm6 , %%mm2 \n"
+ " psubusb %%mm7 , %%mm3 \n"
+ " psubusb (%%esi), %%mm4 \n"
+ " psubusb 8(%%esi), %%mm5 \n"
+ " psubusb 16(%%esi), %%mm6 \n"
+ " psubusb 24(%%esi), %%mm7 \n"
+ " por %%mm4 , %%mm0 \n"
+ " por %%mm5 , %%mm1 \n"
+ " por %%mm6 , %%mm2 \n"
+ " por %%mm7 , %%mm3 \n"
+ " movq %%mm0, (%%edi) \n"
+ " movq %%mm1, 8(%%edi) \n"
+ " movq %%mm2, 16(%%edi) \n"
+ " movq %%mm3, 24(%%edi) \n"
+ " add $32, %%esi \n"
+ " add $32, %%edi \n"
+ " add $32, %%ebx \n"
+ " dec %%ecx \n"
+ " jnz .absdiff_MMX \n"
+ " emms \n"
+ " pop %%edi \n"
+ " pop %%esi \n"
+ " pop %%ecx \n"
+ " pop %%ebx \n"
: "=m" (b) // %0
:"m" (a), // %1
"m" (dst), // %2
|