Mercurial > libavcodec.hg
comparison sparc/vis.h @ 2979:bfabfdf9ce55 libavcodec
COSMETICS: tabs --> spaces, some prettyprinting
author | diego |
---|---|
date | Thu, 22 Dec 2005 01:10:11 +0000 |
parents | 55b7435c59b8 |
children | 0b546eab515d |
comparison
equal
deleted
inserted
replaced
2978:403183bbb505 | 2979:bfabfdf9ce55 |
---|---|
39 * | 39 * |
40 * Thus, we do the opcode encoding by hand and output 32-bit words in | 40 * Thus, we do the opcode encoding by hand and output 32-bit words in |
41 * the assembler to keep the binary from becoming tainted. | 41 * the assembler to keep the binary from becoming tainted. |
42 */ | 42 */ |
43 | 43 |
44 #define vis_opc_base ((0x1 << 31) | (0x36 << 19)) | 44 #define vis_opc_base ((0x1 << 31) | (0x36 << 19)) |
45 #define vis_opf(X) ((X) << 5) | 45 #define vis_opf(X) ((X) << 5) |
46 #define vis_sreg(X) (X) | 46 #define vis_sreg(X) (X) |
47 #define vis_dreg(X) (((X)&0x1f)|((X)>>5)) | 47 #define vis_dreg(X) (((X)&0x1f)|((X)>>5)) |
48 #define vis_rs1_s(X) (vis_sreg(X) << 14) | 48 #define vis_rs1_s(X) (vis_sreg(X) << 14) |
49 #define vis_rs1_d(X) (vis_dreg(X) << 14) | 49 #define vis_rs1_d(X) (vis_dreg(X) << 14) |
50 #define vis_rs2_s(X) (vis_sreg(X) << 0) | 50 #define vis_rs2_s(X) (vis_sreg(X) << 0) |
51 #define vis_rs2_d(X) (vis_dreg(X) << 0) | 51 #define vis_rs2_d(X) (vis_dreg(X) << 0) |
52 #define vis_rd_s(X) (vis_sreg(X) << 25) | 52 #define vis_rd_s(X) (vis_sreg(X) << 25) |
53 #define vis_rd_d(X) (vis_dreg(X) << 25) | 53 #define vis_rd_d(X) (vis_dreg(X) << 25) |
54 | 54 |
55 #define vis_ss2s(opf,rs1,rs2,rd) \ | 55 #define vis_ss2s(opf,rs1,rs2,rd) \ |
56 __asm__ __volatile__ (".word %0" \ | 56 __asm__ __volatile__ (".word %0" \ |
57 : : "i" (vis_opc_base | vis_opf(opf) | \ | 57 : : "i" (vis_opc_base | vis_opf(opf) | \ |
58 vis_rs1_s(rs1) | \ | 58 vis_rs1_s(rs1) | \ |
59 vis_rs2_s(rs2) | \ | 59 vis_rs2_s(rs2) | \ |
60 vis_rd_s(rd))) | 60 vis_rd_s(rd))) |
61 | 61 |
62 #define vis_dd2d(opf,rs1,rs2,rd) \ | 62 #define vis_dd2d(opf,rs1,rs2,rd) \ |
63 __asm__ __volatile__ (".word %0" \ | 63 __asm__ __volatile__ (".word %0" \ |
64 : : "i" (vis_opc_base | vis_opf(opf) | \ | 64 : : "i" (vis_opc_base | vis_opf(opf) | \ |
65 vis_rs1_d(rs1) | \ | 65 vis_rs1_d(rs1) | \ |
66 vis_rs2_d(rs2) | \ | 66 vis_rs2_d(rs2) | \ |
67 vis_rd_d(rd))) | 67 vis_rd_d(rd))) |
68 | 68 |
69 #define vis_ss2d(opf,rs1,rs2,rd) \ | 69 #define vis_ss2d(opf,rs1,rs2,rd) \ |
70 __asm__ __volatile__ (".word %0" \ | 70 __asm__ __volatile__ (".word %0" \ |
71 : : "i" (vis_opc_base | vis_opf(opf) | \ | 71 : : "i" (vis_opc_base | vis_opf(opf) | \ |
72 vis_rs1_s(rs1) | \ | 72 vis_rs1_s(rs1) | \ |
73 vis_rs2_s(rs2) | \ | 73 vis_rs2_s(rs2) | \ |
74 vis_rd_d(rd))) | 74 vis_rd_d(rd))) |
75 | 75 |
76 #define vis_sd2d(opf,rs1,rs2,rd) \ | 76 #define vis_sd2d(opf,rs1,rs2,rd) \ |
77 __asm__ __volatile__ (".word %0" \ | 77 __asm__ __volatile__ (".word %0" \ |
78 : : "i" (vis_opc_base | vis_opf(opf) | \ | 78 : : "i" (vis_opc_base | vis_opf(opf) | \ |
79 vis_rs1_s(rs1) | \ | 79 vis_rs1_s(rs1) | \ |
80 vis_rs2_d(rs2) | \ | 80 vis_rs2_d(rs2) | \ |
81 vis_rd_d(rd))) | 81 vis_rd_d(rd))) |
82 | 82 |
83 #define vis_d2s(opf,rs2,rd) \ | 83 #define vis_d2s(opf,rs2,rd) \ |
84 __asm__ __volatile__ (".word %0" \ | 84 __asm__ __volatile__ (".word %0" \ |
85 : : "i" (vis_opc_base | vis_opf(opf) | \ | 85 : : "i" (vis_opc_base | vis_opf(opf) | \ |
86 vis_rs2_d(rs2) | \ | 86 vis_rs2_d(rs2) | \ |
87 vis_rd_s(rd))) | 87 vis_rd_s(rd))) |
88 | 88 |
89 #define vis_s2d(opf,rs2,rd) \ | 89 #define vis_s2d(opf,rs2,rd) \ |
90 __asm__ __volatile__ (".word %0" \ | 90 __asm__ __volatile__ (".word %0" \ |
91 : : "i" (vis_opc_base | vis_opf(opf) | \ | 91 : : "i" (vis_opc_base | vis_opf(opf) | \ |
92 vis_rs2_s(rs2) | \ | 92 vis_rs2_s(rs2) | \ |
93 vis_rd_d(rd))) | 93 vis_rd_d(rd))) |
94 | 94 |
95 #define vis_d12d(opf,rs1,rd) \ | 95 #define vis_d12d(opf,rs1,rd) \ |
96 __asm__ __volatile__ (".word %0" \ | 96 __asm__ __volatile__ (".word %0" \ |
97 : : "i" (vis_opc_base | vis_opf(opf) | \ | 97 : : "i" (vis_opc_base | vis_opf(opf) | \ |
98 vis_rs1_d(rs1) | \ | 98 vis_rs1_d(rs1) | \ |
99 vis_rd_d(rd))) | 99 vis_rd_d(rd))) |
100 | 100 |
101 #define vis_d22d(opf,rs2,rd) \ | 101 #define vis_d22d(opf,rs2,rd) \ |
102 __asm__ __volatile__ (".word %0" \ | 102 __asm__ __volatile__ (".word %0" \ |
103 : : "i" (vis_opc_base | vis_opf(opf) | \ | 103 : : "i" (vis_opc_base | vis_opf(opf) | \ |
104 vis_rs2_d(rs2) | \ | 104 vis_rs2_d(rs2) | \ |
105 vis_rd_d(rd))) | 105 vis_rd_d(rd))) |
106 | 106 |
107 #define vis_s12s(opf,rs1,rd) \ | 107 #define vis_s12s(opf,rs1,rd) \ |
108 __asm__ __volatile__ (".word %0" \ | 108 __asm__ __volatile__ (".word %0" \ |
109 : : "i" (vis_opc_base | vis_opf(opf) | \ | 109 : : "i" (vis_opc_base | vis_opf(opf) | \ |
110 vis_rs1_s(rs1) | \ | 110 vis_rs1_s(rs1) | \ |
111 vis_rd_s(rd))) | 111 vis_rd_s(rd))) |
112 | 112 |
113 #define vis_s22s(opf,rs2,rd) \ | 113 #define vis_s22s(opf,rs2,rd) \ |
114 __asm__ __volatile__ (".word %0" \ | 114 __asm__ __volatile__ (".word %0" \ |
115 : : "i" (vis_opc_base | vis_opf(opf) | \ | 115 : : "i" (vis_opc_base | vis_opf(opf) | \ |
116 vis_rs2_s(rs2) | \ | 116 vis_rs2_s(rs2) | \ |
117 vis_rd_s(rd))) | 117 vis_rd_s(rd))) |
118 | 118 |
119 #define vis_s(opf,rd) \ | 119 #define vis_s(opf,rd) \ |
120 __asm__ __volatile__ (".word %0" \ | 120 __asm__ __volatile__ (".word %0" \ |
121 : : "i" (vis_opc_base | vis_opf(opf) | \ | 121 : : "i" (vis_opc_base | vis_opf(opf) | \ |
122 vis_rd_s(rd))) | 122 vis_rd_s(rd))) |
123 | 123 |
124 #define vis_d(opf,rd) \ | 124 #define vis_d(opf,rd) \ |
125 __asm__ __volatile__ (".word %0" \ | 125 __asm__ __volatile__ (".word %0" \ |
126 : : "i" (vis_opc_base | vis_opf(opf) | \ | 126 : : "i" (vis_opc_base | vis_opf(opf) | \ |
127 vis_rd_d(rd))) | 127 vis_rd_d(rd))) |
128 | 128 |
129 #define vis_r2m(op,rd,mem) \ | 129 #define vis_r2m(op,rd,mem) \ |
130 __asm__ __volatile__ (#op "\t%%f" #rd ", [%0]" : : "r" (&(mem)) ) | 130 __asm__ __volatile__ (#op "\t%%f" #rd ", [%0]" : : "r" (&(mem)) ) |
131 | 131 |
132 #define vis_r2m_2(op,rd,mem1,mem2) \ | 132 #define vis_r2m_2(op,rd,mem1,mem2) \ |
133 __asm__ __volatile__ (#op "\t%%f" #rd ", [%0 + %1]" : : "r" (mem1), "r" (mem2) ) | 133 __asm__ __volatile__ (#op "\t%%f" #rd ", [%0 + %1]" : : "r" (mem1), "r" (mem2) ) |
134 | 134 |
135 #define vis_m2r(op,mem,rd) \ | 135 #define vis_m2r(op,mem,rd) \ |
136 __asm__ __volatile__ (#op "\t[%0], %%f" #rd : : "r" (&(mem)) ) | 136 __asm__ __volatile__ (#op "\t[%0], %%f" #rd : : "r" (&(mem)) ) |
137 | 137 |
138 #define vis_m2r_2(op,mem1,mem2,rd) \ | 138 #define vis_m2r_2(op,mem1,mem2,rd) \ |
139 __asm__ __volatile__ (#op "\t[%0 + %1], %%f" #rd : : "r" (mem1), "r" (mem2) ) | 139 __asm__ __volatile__ (#op "\t[%0 + %1], %%f" #rd : : "r" (mem1), "r" (mem2) ) |
140 | 140 |
141 static inline void vis_set_gsr(unsigned int _val) | 141 static inline void vis_set_gsr(unsigned int _val) |
142 { | 142 { |
143 register unsigned int val asm("g1"); | 143 register unsigned int val asm("g1"); |
144 | 144 |
145 val = _val; | 145 val = _val; |
146 __asm__ __volatile__(".word 0xa7804000" | 146 __asm__ __volatile__(".word 0xa7804000" |
147 : : "r" (val)); | 147 : : "r" (val)); |
148 } | 148 } |
149 | 149 |
150 #define VIS_GSR_ALIGNADDR_MASK 0x0000007 | 150 #define VIS_GSR_ALIGNADDR_MASK 0x0000007 |
151 #define VIS_GSR_ALIGNADDR_SHIFT 0 | 151 #define VIS_GSR_ALIGNADDR_SHIFT 0 |
152 #define VIS_GSR_SCALEFACT_MASK 0x0000078 | 152 #define VIS_GSR_SCALEFACT_MASK 0x0000078 |
153 #define VIS_GSR_SCALEFACT_SHIFT 3 | 153 #define VIS_GSR_SCALEFACT_SHIFT 3 |
154 | 154 |
155 #define vis_ld32(mem,rs1) vis_m2r(ld, mem, rs1) | 155 #define vis_ld32(mem,rs1) vis_m2r(ld, mem, rs1) |
156 #define vis_ld32_2(mem1,mem2,rs1) vis_m2r_2(ld, mem1, mem2, rs1) | 156 #define vis_ld32_2(mem1,mem2,rs1) vis_m2r_2(ld, mem1, mem2, rs1) |
157 #define vis_st32(rs1,mem) vis_r2m(st, rs1, mem) | 157 #define vis_st32(rs1,mem) vis_r2m(st, rs1, mem) |
158 #define vis_st32_2(rs1,mem1,mem2) vis_r2m_2(st, rs1, mem1, mem2) | 158 #define vis_st32_2(rs1,mem1,mem2) vis_r2m_2(st, rs1, mem1, mem2) |
159 #define vis_ld64(mem,rs1) vis_m2r(ldd, mem, rs1) | 159 #define vis_ld64(mem,rs1) vis_m2r(ldd, mem, rs1) |
160 #define vis_ld64_2(mem1,mem2,rs1) vis_m2r_2(ldd, mem1, mem2, rs1) | 160 #define vis_ld64_2(mem1,mem2,rs1) vis_m2r_2(ldd, mem1, mem2, rs1) |
161 #define vis_st64(rs1,mem) vis_r2m(std, rs1, mem) | 161 #define vis_st64(rs1,mem) vis_r2m(std, rs1, mem) |
162 #define vis_st64_2(rs1,mem1,mem2) vis_r2m_2(std, rs1, mem1, mem2) | 162 #define vis_st64_2(rs1,mem1,mem2) vis_r2m_2(std, rs1, mem1, mem2) |
163 | 163 |
164 #define vis_ldblk(mem, rd) \ | 164 #define vis_ldblk(mem, rd) \ |
165 do { register void *__mem asm("g1"); \ | 165 do { register void *__mem asm("g1"); \ |
166 __mem = &(mem); \ | 166 __mem = &(mem); \ |
167 __asm__ __volatile__(".word 0xc1985e00 | %1" \ | 167 __asm__ __volatile__(".word 0xc1985e00 | %1" \ |
168 : \ | 168 : \ |
169 : "r" (__mem), \ | 169 : "r" (__mem), \ |
170 "i" (vis_rd_d(rd)) \ | 170 "i" (vis_rd_d(rd)) \ |
171 : "memory"); \ | 171 : "memory"); \ |
172 } while (0) | 172 } while (0) |
173 | 173 |
174 #define vis_stblk(rd, mem) \ | 174 #define vis_stblk(rd, mem) \ |
175 do { register void *__mem asm("g1"); \ | 175 do { register void *__mem asm("g1"); \ |
176 __mem = &(mem); \ | 176 __mem = &(mem); \ |
177 __asm__ __volatile__(".word 0xc1b85e00 | %1" \ | 177 __asm__ __volatile__(".word 0xc1b85e00 | %1" \ |
178 : \ | 178 : \ |
179 : "r" (__mem), \ | 179 : "r" (__mem), \ |
180 "i" (vis_rd_d(rd)) \ | 180 "i" (vis_rd_d(rd)) \ |
181 : "memory"); \ | 181 : "memory"); \ |
182 } while (0) | 182 } while (0) |
183 | 183 |
184 #define vis_membar_storestore() \ | 184 #define vis_membar_storestore() \ |
185 __asm__ __volatile__(".word 0x8143e008" : : : "memory") | 185 __asm__ __volatile__(".word 0x8143e008" : : : "memory") |
186 | 186 |
187 #define vis_membar_sync() \ | 187 #define vis_membar_sync() \ |
188 __asm__ __volatile__(".word 0x8143e040" : : : "memory") | 188 __asm__ __volatile__(".word 0x8143e040" : : : "memory") |
189 | 189 |
190 /* 16 and 32 bit partitioned addition and subtraction. The normal | 190 /* 16 and 32 bit partitioned addition and subtraction. The normal |
191 * versions perform 4 16-bit or 2 32-bit additions or subtractions. | 191 * versions perform 4 16-bit or 2 32-bit additions or subtractions. |
192 * The 's' versions perform 2 16-bit or 1 32-bit additions or | 192 * The 's' versions perform 2 16-bit or 1 32-bit additions or |
193 * subtractions. | 193 * subtractions. |
194 */ | 194 */ |
195 | 195 |
196 #define vis_padd16(rs1,rs2,rd) vis_dd2d(0x50, rs1, rs2, rd) | 196 #define vis_padd16(rs1,rs2,rd) vis_dd2d(0x50, rs1, rs2, rd) |
197 #define vis_padd16s(rs1,rs2,rd) vis_ss2s(0x51, rs1, rs2, rd) | 197 #define vis_padd16s(rs1,rs2,rd) vis_ss2s(0x51, rs1, rs2, rd) |
198 #define vis_padd32(rs1,rs2,rd) vis_dd2d(0x52, rs1, rs2, rd) | 198 #define vis_padd32(rs1,rs2,rd) vis_dd2d(0x52, rs1, rs2, rd) |
199 #define vis_padd32s(rs1,rs2,rd) vis_ss2s(0x53, rs1, rs2, rd) | 199 #define vis_padd32s(rs1,rs2,rd) vis_ss2s(0x53, rs1, rs2, rd) |
200 #define vis_psub16(rs1,rs2,rd) vis_dd2d(0x54, rs1, rs2, rd) | 200 #define vis_psub16(rs1,rs2,rd) vis_dd2d(0x54, rs1, rs2, rd) |
201 #define vis_psub16s(rs1,rs2,rd) vis_ss2s(0x55, rs1, rs2, rd) | 201 #define vis_psub16s(rs1,rs2,rd) vis_ss2s(0x55, rs1, rs2, rd) |
202 #define vis_psub32(rs1,rs2,rd) vis_dd2d(0x56, rs1, rs2, rd) | 202 #define vis_psub32(rs1,rs2,rd) vis_dd2d(0x56, rs1, rs2, rd) |
203 #define vis_psub32s(rs1,rs2,rd) vis_ss2s(0x57, rs1, rs2, rd) | 203 #define vis_psub32s(rs1,rs2,rd) vis_ss2s(0x57, rs1, rs2, rd) |
204 | 204 |
205 /* Pixel formatting instructions. */ | 205 /* Pixel formatting instructions. */ |
206 | 206 |
207 #define vis_pack16(rs2,rd) vis_d2s( 0x3b, rs2, rd) | 207 #define vis_pack16(rs2,rd) vis_d2s( 0x3b, rs2, rd) |
208 #define vis_pack32(rs1,rs2,rd) vis_dd2d(0x3a, rs1, rs2, rd) | 208 #define vis_pack32(rs1,rs2,rd) vis_dd2d(0x3a, rs1, rs2, rd) |
209 #define vis_packfix(rs2,rd) vis_d2s( 0x3d, rs2, rd) | 209 #define vis_packfix(rs2,rd) vis_d2s( 0x3d, rs2, rd) |
210 #define vis_expand(rs2,rd) vis_s2d( 0x4d, rs2, rd) | 210 #define vis_expand(rs2,rd) vis_s2d( 0x4d, rs2, rd) |
211 #define vis_pmerge(rs1,rs2,rd) vis_ss2d(0x4b, rs1, rs2, rd) | 211 #define vis_pmerge(rs1,rs2,rd) vis_ss2d(0x4b, rs1, rs2, rd) |
212 | 212 |
213 /* Partitioned multiply instructions. */ | 213 /* Partitioned multiply instructions. */ |
214 | 214 |
215 #define vis_mul8x16(rs1,rs2,rd) vis_sd2d(0x31, rs1, rs2, rd) | 215 #define vis_mul8x16(rs1,rs2,rd) vis_sd2d(0x31, rs1, rs2, rd) |
216 #define vis_mul8x16au(rs1,rs2,rd) vis_ss2d(0x33, rs1, rs2, rd) | 216 #define vis_mul8x16au(rs1,rs2,rd) vis_ss2d(0x33, rs1, rs2, rd) |
217 #define vis_mul8x16al(rs1,rs2,rd) vis_ss2d(0x35, rs1, rs2, rd) | 217 #define vis_mul8x16al(rs1,rs2,rd) vis_ss2d(0x35, rs1, rs2, rd) |
218 #define vis_mul8sux16(rs1,rs2,rd) vis_dd2d(0x36, rs1, rs2, rd) | 218 #define vis_mul8sux16(rs1,rs2,rd) vis_dd2d(0x36, rs1, rs2, rd) |
219 #define vis_mul8ulx16(rs1,rs2,rd) vis_dd2d(0x37, rs1, rs2, rd) | 219 #define vis_mul8ulx16(rs1,rs2,rd) vis_dd2d(0x37, rs1, rs2, rd) |
220 #define vis_muld8sux16(rs1,rs2,rd) vis_ss2d(0x38, rs1, rs2, rd) | 220 #define vis_muld8sux16(rs1,rs2,rd) vis_ss2d(0x38, rs1, rs2, rd) |
221 #define vis_muld8ulx16(rs1,rs2,rd) vis_ss2d(0x39, rs1, rs2, rd) | 221 #define vis_muld8ulx16(rs1,rs2,rd) vis_ss2d(0x39, rs1, rs2, rd) |
222 | 222 |
223 /* Alignment instructions. */ | 223 /* Alignment instructions. */ |
224 | 224 |
225 static inline void *vis_alignaddr(void *_ptr) | 225 static inline void *vis_alignaddr(void *_ptr) |
226 { | 226 { |
227 register void *ptr asm("g1"); | 227 register void *ptr asm("g1"); |
228 | 228 |
229 ptr = _ptr; | 229 ptr = _ptr; |
230 | 230 |
231 __asm__ __volatile__(".word %2" | 231 __asm__ __volatile__(".word %2" |
232 : "=&r" (ptr) | 232 : "=&r" (ptr) |
233 : "0" (ptr), | 233 : "0" (ptr), |
234 "i" (vis_opc_base | vis_opf(0x18) | | 234 "i" (vis_opc_base | vis_opf(0x18) | |
235 vis_rs1_s(1) | | 235 vis_rs1_s(1) | |
236 vis_rs2_s(0) | | 236 vis_rs2_s(0) | |
237 vis_rd_s(1))); | 237 vis_rd_s(1))); |
238 | 238 |
239 return ptr; | 239 return ptr; |
240 } | 240 } |
241 | 241 |
242 static inline void vis_alignaddr_g0(void *_ptr) | 242 static inline void vis_alignaddr_g0(void *_ptr) |
243 { | 243 { |
244 register void *ptr asm("g1"); | 244 register void *ptr asm("g1"); |
245 | 245 |
246 ptr = _ptr; | 246 ptr = _ptr; |
247 | 247 |
248 __asm__ __volatile__(".word %2" | 248 __asm__ __volatile__(".word %2" |
249 : "=&r" (ptr) | 249 : "=&r" (ptr) |
250 : "0" (ptr), | 250 : "0" (ptr), |
251 "i" (vis_opc_base | vis_opf(0x18) | | 251 "i" (vis_opc_base | vis_opf(0x18) | |
252 vis_rs1_s(1) | | 252 vis_rs1_s(1) | |
253 vis_rs2_s(0) | | 253 vis_rs2_s(0) | |
254 vis_rd_s(0))); | 254 vis_rd_s(0))); |
255 } | 255 } |
256 | 256 |
257 static inline void *vis_alignaddrl(void *_ptr) | 257 static inline void *vis_alignaddrl(void *_ptr) |
258 { | 258 { |
259 register void *ptr asm("g1"); | 259 register void *ptr asm("g1"); |
260 | 260 |
261 ptr = _ptr; | 261 ptr = _ptr; |
262 | 262 |
263 __asm__ __volatile__(".word %2" | 263 __asm__ __volatile__(".word %2" |
264 : "=&r" (ptr) | 264 : "=&r" (ptr) |
265 : "0" (ptr), | 265 : "0" (ptr), |
266 "i" (vis_opc_base | vis_opf(0x19) | | 266 "i" (vis_opc_base | vis_opf(0x19) | |
267 vis_rs1_s(1) | | 267 vis_rs1_s(1) | |
268 vis_rs2_s(0) | | 268 vis_rs2_s(0) | |
269 vis_rd_s(1))); | 269 vis_rd_s(1))); |
270 | 270 |
271 return ptr; | 271 return ptr; |
272 } | 272 } |
273 | 273 |
274 static inline void vis_alignaddrl_g0(void *_ptr) | 274 static inline void vis_alignaddrl_g0(void *_ptr) |
275 { | 275 { |
276 register void *ptr asm("g1"); | 276 register void *ptr asm("g1"); |
277 | 277 |
278 ptr = _ptr; | 278 ptr = _ptr; |
279 | 279 |
280 __asm__ __volatile__(".word %2" | 280 __asm__ __volatile__(".word %2" |
281 : "=&r" (ptr) | 281 : "=&r" (ptr) |
282 : "0" (ptr), | 282 : "0" (ptr), |
283 "i" (vis_opc_base | vis_opf(0x19) | | 283 "i" (vis_opc_base | vis_opf(0x19) | |
284 vis_rs1_s(1) | | 284 vis_rs1_s(1) | |
285 vis_rs2_s(0) | | 285 vis_rs2_s(0) | |
286 vis_rd_s(0))); | 286 vis_rd_s(0))); |
287 } | 287 } |
288 | 288 |
289 #define vis_faligndata(rs1,rs2,rd) vis_dd2d(0x48, rs1, rs2, rd) | 289 #define vis_faligndata(rs1,rs2,rd) vis_dd2d(0x48, rs1, rs2, rd) |
290 | 290 |
291 /* Logical operate instructions. */ | 291 /* Logical operate instructions. */ |
292 | 292 |
293 #define vis_fzero(rd) vis_d( 0x60, rd) | 293 #define vis_fzero(rd) vis_d( 0x60, rd) |
294 #define vis_fzeros(rd) vis_s( 0x61, rd) | 294 #define vis_fzeros(rd) vis_s( 0x61, rd) |
295 #define vis_fone(rd) vis_d( 0x7e, rd) | 295 #define vis_fone(rd) vis_d( 0x7e, rd) |
296 #define vis_fones(rd) vis_s( 0x7f, rd) | 296 #define vis_fones(rd) vis_s( 0x7f, rd) |
297 #define vis_src1(rs1,rd) vis_d12d(0x74, rs1, rd) | 297 #define vis_src1(rs1,rd) vis_d12d(0x74, rs1, rd) |
298 #define vis_src1s(rs1,rd) vis_s12s(0x75, rs1, rd) | 298 #define vis_src1s(rs1,rd) vis_s12s(0x75, rs1, rd) |
299 #define vis_src2(rs2,rd) vis_d22d(0x78, rs2, rd) | 299 #define vis_src2(rs2,rd) vis_d22d(0x78, rs2, rd) |
300 #define vis_src2s(rs2,rd) vis_s22s(0x79, rs2, rd) | 300 #define vis_src2s(rs2,rd) vis_s22s(0x79, rs2, rd) |
301 #define vis_not1(rs1,rd) vis_d12d(0x6a, rs1, rd) | 301 #define vis_not1(rs1,rd) vis_d12d(0x6a, rs1, rd) |
302 #define vis_not1s(rs1,rd) vis_s12s(0x6b, rs1, rd) | 302 #define vis_not1s(rs1,rd) vis_s12s(0x6b, rs1, rd) |
303 #define vis_not2(rs2,rd) vis_d22d(0x66, rs2, rd) | 303 #define vis_not2(rs2,rd) vis_d22d(0x66, rs2, rd) |
304 #define vis_not2s(rs2,rd) vis_s22s(0x67, rs2, rd) | 304 #define vis_not2s(rs2,rd) vis_s22s(0x67, rs2, rd) |
305 #define vis_or(rs1,rs2,rd) vis_dd2d(0x7c, rs1, rs2, rd) | 305 #define vis_or(rs1,rs2,rd) vis_dd2d(0x7c, rs1, rs2, rd) |
306 #define vis_ors(rs1,rs2,rd) vis_ss2s(0x7d, rs1, rs2, rd) | 306 #define vis_ors(rs1,rs2,rd) vis_ss2s(0x7d, rs1, rs2, rd) |
307 #define vis_nor(rs1,rs2,rd) vis_dd2d(0x62, rs1, rs2, rd) | 307 #define vis_nor(rs1,rs2,rd) vis_dd2d(0x62, rs1, rs2, rd) |
308 #define vis_nors(rs1,rs2,rd) vis_ss2s(0x63, rs1, rs2, rd) | 308 #define vis_nors(rs1,rs2,rd) vis_ss2s(0x63, rs1, rs2, rd) |
309 #define vis_and(rs1,rs2,rd) vis_dd2d(0x70, rs1, rs2, rd) | 309 #define vis_and(rs1,rs2,rd) vis_dd2d(0x70, rs1, rs2, rd) |
310 #define vis_ands(rs1,rs2,rd) vis_ss2s(0x71, rs1, rs2, rd) | 310 #define vis_ands(rs1,rs2,rd) vis_ss2s(0x71, rs1, rs2, rd) |
311 #define vis_nand(rs1,rs2,rd) vis_dd2d(0x6e, rs1, rs2, rd) | 311 #define vis_nand(rs1,rs2,rd) vis_dd2d(0x6e, rs1, rs2, rd) |
312 #define vis_nands(rs1,rs2,rd) vis_ss2s(0x6f, rs1, rs2, rd) | 312 #define vis_nands(rs1,rs2,rd) vis_ss2s(0x6f, rs1, rs2, rd) |
313 #define vis_xor(rs1,rs2,rd) vis_dd2d(0x6c, rs1, rs2, rd) | 313 #define vis_xor(rs1,rs2,rd) vis_dd2d(0x6c, rs1, rs2, rd) |
314 #define vis_xors(rs1,rs2,rd) vis_ss2s(0x6d, rs1, rs2, rd) | 314 #define vis_xors(rs1,rs2,rd) vis_ss2s(0x6d, rs1, rs2, rd) |
315 #define vis_xnor(rs1,rs2,rd) vis_dd2d(0x72, rs1, rs2, rd) | 315 #define vis_xnor(rs1,rs2,rd) vis_dd2d(0x72, rs1, rs2, rd) |
316 #define vis_xnors(rs1,rs2,rd) vis_ss2s(0x73, rs1, rs2, rd) | 316 #define vis_xnors(rs1,rs2,rd) vis_ss2s(0x73, rs1, rs2, rd) |
317 #define vis_ornot1(rs1,rs2,rd) vis_dd2d(0x7a, rs1, rs2, rd) | 317 #define vis_ornot1(rs1,rs2,rd) vis_dd2d(0x7a, rs1, rs2, rd) |
318 #define vis_ornot1s(rs1,rs2,rd) vis_ss2s(0x7b, rs1, rs2, rd) | 318 #define vis_ornot1s(rs1,rs2,rd) vis_ss2s(0x7b, rs1, rs2, rd) |
319 #define vis_ornot2(rs1,rs2,rd) vis_dd2d(0x76, rs1, rs2, rd) | 319 #define vis_ornot2(rs1,rs2,rd) vis_dd2d(0x76, rs1, rs2, rd) |
320 #define vis_ornot2s(rs1,rs2,rd) vis_ss2s(0x77, rs1, rs2, rd) | 320 #define vis_ornot2s(rs1,rs2,rd) vis_ss2s(0x77, rs1, rs2, rd) |
321 #define vis_andnot1(rs1,rs2,rd) vis_dd2d(0x68, rs1, rs2, rd) | 321 #define vis_andnot1(rs1,rs2,rd) vis_dd2d(0x68, rs1, rs2, rd) |
322 #define vis_andnot1s(rs1,rs2,rd) vis_ss2s(0x69, rs1, rs2, rd) | 322 #define vis_andnot1s(rs1,rs2,rd) vis_ss2s(0x69, rs1, rs2, rd) |
323 #define vis_andnot2(rs1,rs2,rd) vis_dd2d(0x64, rs1, rs2, rd) | 323 #define vis_andnot2(rs1,rs2,rd) vis_dd2d(0x64, rs1, rs2, rd) |
324 #define vis_andnot2s(rs1,rs2,rd) vis_ss2s(0x65, rs1, rs2, rd) | 324 #define vis_andnot2s(rs1,rs2,rd) vis_ss2s(0x65, rs1, rs2, rd) |
325 | 325 |
326 /* Pixel component distance. */ | 326 /* Pixel component distance. */ |
327 | 327 |
328 #define vis_pdist(rs1,rs2,rd) vis_dd2d(0x3e, rs1, rs2, rd) | 328 #define vis_pdist(rs1,rs2,rd) vis_dd2d(0x3e, rs1, rs2, rd) |