annotate libmpeg2/mmx.h @ 4559:5dc383bb1c82

added mga_top_reserved module parameter to skip a configurable amount of space at the top of video memory. this is needed to prevent corruption of the kernel's console font when using the "fastfont" option with matroxfb.
author rfelker
date Thu, 07 Feb 2002 02:07:29 +0000
parents 846535ace7a2
children 47984e3f54ce
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1 /*
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2 * mmx.h
36
846535ace7a2 libmpeg2-0.2.0 merge
arpi_esp
parents: 1
diff changeset
3 * Copyright (C) 1997-2001 H. Dietz and R. Fisher
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
4 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
5 * This file is part of mpeg2dec, a free MPEG-2 video stream decoder.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
6 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
7 * mpeg2dec is free software; you can redistribute it and/or modify
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
8 * it under the terms of the GNU General Public License as published by
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
10 * (at your option) any later version.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
11 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
12 * mpeg2dec is distributed in the hope that it will be useful,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
15 * GNU General Public License for more details.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
16 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
20 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
21
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
22 /*
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
23 * The type of an value that fits in an MMX register (note that long
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
24 * long constant values MUST be suffixed by LL and unsigned long long
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
25 * values by ULL, lest they be truncated by the compiler)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
26 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
27
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
28 typedef union {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
29 long long q; /* Quadword (64-bit) value */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
30 unsigned long long uq; /* Unsigned Quadword */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
31 int d[2]; /* 2 Doubleword (32-bit) values */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
32 unsigned int ud[2]; /* 2 Unsigned Doubleword */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
33 short w[4]; /* 4 Word (16-bit) values */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
34 unsigned short uw[4]; /* 4 Unsigned Word */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
35 char b[8]; /* 8 Byte (8-bit) values */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
36 unsigned char ub[8]; /* 8 Unsigned Byte */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
37 float s[2]; /* Single-precision (32-bit) value */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
38 } ATTR_ALIGN(8) mmx_t; /* On an 8-byte (64-bit) boundary */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
39
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
40
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
41 #define mmx_i2r(op,imm,reg) \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
42 __asm__ __volatile__ (#op " %0, %%" #reg \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
43 : /* nothing */ \
36
846535ace7a2 libmpeg2-0.2.0 merge
arpi_esp
parents: 1
diff changeset
44 : "i" (imm) )
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
45
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
46 #define mmx_m2r(op,mem,reg) \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
47 __asm__ __volatile__ (#op " %0, %%" #reg \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
48 : /* nothing */ \
36
846535ace7a2 libmpeg2-0.2.0 merge
arpi_esp
parents: 1
diff changeset
49 : "m" (mem))
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
50
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
51 #define mmx_r2m(op,reg,mem) \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
52 __asm__ __volatile__ (#op " %%" #reg ", %0" \
36
846535ace7a2 libmpeg2-0.2.0 merge
arpi_esp
parents: 1
diff changeset
53 : "=m" (mem) \
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
54 : /* nothing */ )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
55
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
56 #define mmx_r2r(op,regs,regd) \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
57 __asm__ __volatile__ (#op " %" #regs ", %" #regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
58
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
59
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
60 #define emms() __asm__ __volatile__ ("emms")
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
61
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
62 #define movd_m2r(var,reg) mmx_m2r (movd, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
63 #define movd_r2m(reg,var) mmx_r2m (movd, reg, var)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
64 #define movd_r2r(regs,regd) mmx_r2r (movd, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
65
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
66 #define movq_m2r(var,reg) mmx_m2r (movq, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
67 #define movq_r2m(reg,var) mmx_r2m (movq, reg, var)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
68 #define movq_r2r(regs,regd) mmx_r2r (movq, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
69
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
70 #define packssdw_m2r(var,reg) mmx_m2r (packssdw, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
71 #define packssdw_r2r(regs,regd) mmx_r2r (packssdw, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
72 #define packsswb_m2r(var,reg) mmx_m2r (packsswb, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
73 #define packsswb_r2r(regs,regd) mmx_r2r (packsswb, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
74
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
75 #define packuswb_m2r(var,reg) mmx_m2r (packuswb, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
76 #define packuswb_r2r(regs,regd) mmx_r2r (packuswb, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
77
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
78 #define paddb_m2r(var,reg) mmx_m2r (paddb, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
79 #define paddb_r2r(regs,regd) mmx_r2r (paddb, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
80 #define paddd_m2r(var,reg) mmx_m2r (paddd, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
81 #define paddd_r2r(regs,regd) mmx_r2r (paddd, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
82 #define paddw_m2r(var,reg) mmx_m2r (paddw, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
83 #define paddw_r2r(regs,regd) mmx_r2r (paddw, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
84
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
85 #define paddsb_m2r(var,reg) mmx_m2r (paddsb, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
86 #define paddsb_r2r(regs,regd) mmx_r2r (paddsb, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
87 #define paddsw_m2r(var,reg) mmx_m2r (paddsw, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
88 #define paddsw_r2r(regs,regd) mmx_r2r (paddsw, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
89
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
90 #define paddusb_m2r(var,reg) mmx_m2r (paddusb, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
91 #define paddusb_r2r(regs,regd) mmx_r2r (paddusb, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
92 #define paddusw_m2r(var,reg) mmx_m2r (paddusw, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
93 #define paddusw_r2r(regs,regd) mmx_r2r (paddusw, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
94
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
95 #define pand_m2r(var,reg) mmx_m2r (pand, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
96 #define pand_r2r(regs,regd) mmx_r2r (pand, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
97
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
98 #define pandn_m2r(var,reg) mmx_m2r (pandn, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
99 #define pandn_r2r(regs,regd) mmx_r2r (pandn, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
100
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
101 #define pcmpeqb_m2r(var,reg) mmx_m2r (pcmpeqb, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
102 #define pcmpeqb_r2r(regs,regd) mmx_r2r (pcmpeqb, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
103 #define pcmpeqd_m2r(var,reg) mmx_m2r (pcmpeqd, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
104 #define pcmpeqd_r2r(regs,regd) mmx_r2r (pcmpeqd, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
105 #define pcmpeqw_m2r(var,reg) mmx_m2r (pcmpeqw, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
106 #define pcmpeqw_r2r(regs,regd) mmx_r2r (pcmpeqw, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
107
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
108 #define pcmpgtb_m2r(var,reg) mmx_m2r (pcmpgtb, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
109 #define pcmpgtb_r2r(regs,regd) mmx_r2r (pcmpgtb, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
110 #define pcmpgtd_m2r(var,reg) mmx_m2r (pcmpgtd, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
111 #define pcmpgtd_r2r(regs,regd) mmx_r2r (pcmpgtd, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
112 #define pcmpgtw_m2r(var,reg) mmx_m2r (pcmpgtw, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
113 #define pcmpgtw_r2r(regs,regd) mmx_r2r (pcmpgtw, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
114
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
115 #define pmaddwd_m2r(var,reg) mmx_m2r (pmaddwd, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
116 #define pmaddwd_r2r(regs,regd) mmx_r2r (pmaddwd, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
117
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
118 #define pmulhw_m2r(var,reg) mmx_m2r (pmulhw, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
119 #define pmulhw_r2r(regs,regd) mmx_r2r (pmulhw, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
120
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
121 #define pmullw_m2r(var,reg) mmx_m2r (pmullw, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
122 #define pmullw_r2r(regs,regd) mmx_r2r (pmullw, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
123
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
124 #define por_m2r(var,reg) mmx_m2r (por, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
125 #define por_r2r(regs,regd) mmx_r2r (por, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
126
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
127 #define pslld_i2r(imm,reg) mmx_i2r (pslld, imm, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
128 #define pslld_m2r(var,reg) mmx_m2r (pslld, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
129 #define pslld_r2r(regs,regd) mmx_r2r (pslld, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
130 #define psllq_i2r(imm,reg) mmx_i2r (psllq, imm, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
131 #define psllq_m2r(var,reg) mmx_m2r (psllq, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
132 #define psllq_r2r(regs,regd) mmx_r2r (psllq, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
133 #define psllw_i2r(imm,reg) mmx_i2r (psllw, imm, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
134 #define psllw_m2r(var,reg) mmx_m2r (psllw, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
135 #define psllw_r2r(regs,regd) mmx_r2r (psllw, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
136
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
137 #define psrad_i2r(imm,reg) mmx_i2r (psrad, imm, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
138 #define psrad_m2r(var,reg) mmx_m2r (psrad, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
139 #define psrad_r2r(regs,regd) mmx_r2r (psrad, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
140 #define psraw_i2r(imm,reg) mmx_i2r (psraw, imm, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
141 #define psraw_m2r(var,reg) mmx_m2r (psraw, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
142 #define psraw_r2r(regs,regd) mmx_r2r (psraw, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
143
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
144 #define psrld_i2r(imm,reg) mmx_i2r (psrld, imm, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
145 #define psrld_m2r(var,reg) mmx_m2r (psrld, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
146 #define psrld_r2r(regs,regd) mmx_r2r (psrld, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
147 #define psrlq_i2r(imm,reg) mmx_i2r (psrlq, imm, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
148 #define psrlq_m2r(var,reg) mmx_m2r (psrlq, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
149 #define psrlq_r2r(regs,regd) mmx_r2r (psrlq, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
150 #define psrlw_i2r(imm,reg) mmx_i2r (psrlw, imm, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
151 #define psrlw_m2r(var,reg) mmx_m2r (psrlw, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
152 #define psrlw_r2r(regs,regd) mmx_r2r (psrlw, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
153
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
154 #define psubb_m2r(var,reg) mmx_m2r (psubb, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
155 #define psubb_r2r(regs,regd) mmx_r2r (psubb, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
156 #define psubd_m2r(var,reg) mmx_m2r (psubd, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
157 #define psubd_r2r(regs,regd) mmx_r2r (psubd, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
158 #define psubw_m2r(var,reg) mmx_m2r (psubw, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
159 #define psubw_r2r(regs,regd) mmx_r2r (psubw, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
160
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
161 #define psubsb_m2r(var,reg) mmx_m2r (psubsb, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
162 #define psubsb_r2r(regs,regd) mmx_r2r (psubsb, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
163 #define psubsw_m2r(var,reg) mmx_m2r (psubsw, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
164 #define psubsw_r2r(regs,regd) mmx_r2r (psubsw, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
165
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
166 #define psubusb_m2r(var,reg) mmx_m2r (psubusb, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
167 #define psubusb_r2r(regs,regd) mmx_r2r (psubusb, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
168 #define psubusw_m2r(var,reg) mmx_m2r (psubusw, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
169 #define psubusw_r2r(regs,regd) mmx_r2r (psubusw, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
170
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
171 #define punpckhbw_m2r(var,reg) mmx_m2r (punpckhbw, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
172 #define punpckhbw_r2r(regs,regd) mmx_r2r (punpckhbw, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
173 #define punpckhdq_m2r(var,reg) mmx_m2r (punpckhdq, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
174 #define punpckhdq_r2r(regs,regd) mmx_r2r (punpckhdq, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
175 #define punpckhwd_m2r(var,reg) mmx_m2r (punpckhwd, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
176 #define punpckhwd_r2r(regs,regd) mmx_r2r (punpckhwd, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
177
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
178 #define punpcklbw_m2r(var,reg) mmx_m2r (punpcklbw, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
179 #define punpcklbw_r2r(regs,regd) mmx_r2r (punpcklbw, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
180 #define punpckldq_m2r(var,reg) mmx_m2r (punpckldq, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
181 #define punpckldq_r2r(regs,regd) mmx_r2r (punpckldq, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
182 #define punpcklwd_m2r(var,reg) mmx_m2r (punpcklwd, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
183 #define punpcklwd_r2r(regs,regd) mmx_r2r (punpcklwd, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
184
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
185 #define pxor_m2r(var,reg) mmx_m2r (pxor, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
186 #define pxor_r2r(regs,regd) mmx_r2r (pxor, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
187
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
188
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
189 /* 3DNOW extensions */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
190
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
191 #define pavgusb_m2r(var,reg) mmx_m2r (pavgusb, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
192 #define pavgusb_r2r(regs,regd) mmx_r2r (pavgusb, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
193
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
194
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
195 /* AMD MMX extensions - also available in intel SSE */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
196
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
197
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
198 #define mmx_m2ri(op,mem,reg,imm) \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
199 __asm__ __volatile__ (#op " %1, %0, %%" #reg \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
200 : /* nothing */ \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
201 : "X" (mem), "X" (imm))
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
202 #define mmx_r2ri(op,regs,regd,imm) \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
203 __asm__ __volatile__ (#op " %0, %%" #regs ", %%" #regd \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
204 : /* nothing */ \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
205 : "X" (imm) )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
206
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
207 #define mmx_fetch(mem,hint) \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
208 __asm__ __volatile__ ("prefetch" #hint " %0" \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
209 : /* nothing */ \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
210 : "X" (mem))
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
211
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
212
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
213 #define maskmovq(regs,maskreg) mmx_r2ri (maskmovq, regs, maskreg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
214
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
215 #define movntq_r2m(mmreg,var) mmx_r2m (movntq, mmreg, var)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
216
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
217 #define pavgb_m2r(var,reg) mmx_m2r (pavgb, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
218 #define pavgb_r2r(regs,regd) mmx_r2r (pavgb, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
219 #define pavgw_m2r(var,reg) mmx_m2r (pavgw, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
220 #define pavgw_r2r(regs,regd) mmx_r2r (pavgw, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
221
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
222 #define pextrw_r2r(mmreg,reg,imm) mmx_r2ri (pextrw, mmreg, reg, imm)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
223
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
224 #define pinsrw_r2r(reg,mmreg,imm) mmx_r2ri (pinsrw, reg, mmreg, imm)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
225
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
226 #define pmaxsw_m2r(var,reg) mmx_m2r (pmaxsw, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
227 #define pmaxsw_r2r(regs,regd) mmx_r2r (pmaxsw, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
228
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
229 #define pmaxub_m2r(var,reg) mmx_m2r (pmaxub, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
230 #define pmaxub_r2r(regs,regd) mmx_r2r (pmaxub, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
231
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
232 #define pminsw_m2r(var,reg) mmx_m2r (pminsw, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
233 #define pminsw_r2r(regs,regd) mmx_r2r (pminsw, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
234
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
235 #define pminub_m2r(var,reg) mmx_m2r (pminub, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
236 #define pminub_r2r(regs,regd) mmx_r2r (pminub, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
237
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
238 #define pmovmskb(mmreg,reg) \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
239 __asm__ __volatile__ ("movmskps %" #mmreg ", %" #reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
240
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
241 #define pmulhuw_m2r(var,reg) mmx_m2r (pmulhuw, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
242 #define pmulhuw_r2r(regs,regd) mmx_r2r (pmulhuw, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
243
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
244 #define prefetcht0(mem) mmx_fetch (mem, t0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
245 #define prefetcht1(mem) mmx_fetch (mem, t1)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
246 #define prefetcht2(mem) mmx_fetch (mem, t2)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
247 #define prefetchnta(mem) mmx_fetch (mem, nta)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
248
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
249 #define psadbw_m2r(var,reg) mmx_m2r (psadbw, var, reg)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
250 #define psadbw_r2r(regs,regd) mmx_r2r (psadbw, regs, regd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
251
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
252 #define pshufw_m2r(var,reg,imm) mmx_m2ri(pshufw, var, reg, imm)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
253 #define pshufw_r2r(regs,regd,imm) mmx_r2ri(pshufw, regs, regd, imm)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
254
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
255 #define sfence() __asm__ __volatile__ ("sfence\n\t")