Mercurial > libavcodec.hg
annotate sparc/vis.h @ 7351:1502ba3beb72 libavcodec
The codebook generator algorithm involves picking three
different codebook centroids ("high utility", "low
utility" and "closest to the low utility one"). This
change avoid the corner case of choosing two times the
same centroid.
author | vitor |
---|---|
date | Wed, 23 Jul 2008 03:54:31 +0000 |
parents | 43c97362dfa8 |
children | c4a4495715dd |
rev | line source |
---|---|
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
1 /* |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
2 * vis.h |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
3 * Copyright (C) 2003 David S. Miller <davem@redhat.com> |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
4 * |
3987
2c54309fef91
Switch to the LGPL as agreed to by the author according to the
diego
parents:
3965
diff
changeset
|
5 * This file is part of FFmpeg. |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
6 * |
3987
2c54309fef91
Switch to the LGPL as agreed to by the author according to the
diego
parents:
3965
diff
changeset
|
7 * FFmpeg is free software; you can redistribute it and/or |
2c54309fef91
Switch to the LGPL as agreed to by the author according to the
diego
parents:
3965
diff
changeset
|
8 * modify it under the terms of the GNU Lesser General Public |
2c54309fef91
Switch to the LGPL as agreed to by the author according to the
diego
parents:
3965
diff
changeset
|
9 * License as published by the Free Software Foundation; either |
2c54309fef91
Switch to the LGPL as agreed to by the author according to the
diego
parents:
3965
diff
changeset
|
10 * version 2.1 of the License, or (at your option) any later version. |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
11 * |
3987
2c54309fef91
Switch to the LGPL as agreed to by the author according to the
diego
parents:
3965
diff
changeset
|
12 * FFmpeg is distributed in the hope that it will be useful, |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
3987
2c54309fef91
Switch to the LGPL as agreed to by the author according to the
diego
parents:
3965
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
2c54309fef91
Switch to the LGPL as agreed to by the author according to the
diego
parents:
3965
diff
changeset
|
15 * Lesser General Public License for more details. |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
16 * |
3987
2c54309fef91
Switch to the LGPL as agreed to by the author according to the
diego
parents:
3965
diff
changeset
|
17 * You should have received a copy of the GNU Lesser General Public |
2c54309fef91
Switch to the LGPL as agreed to by the author according to the
diego
parents:
3965
diff
changeset
|
18 * License along with FFmpeg; if not, write to the Free Software |
3036
0b546eab515d
Update licensing information: The FSF changed postal address.
diego
parents:
2979
diff
changeset
|
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
20 */ |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
21 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
22 /* You may be asking why I hard-code the instruction opcodes and don't |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
23 * use the normal VIS assembler mnenomics for the VIS instructions. |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
24 * |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
25 * The reason is that Sun, in their infinite wisdom, decided that a binary |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
26 * using a VIS instruction will cause it to be marked (in the ELF headers) |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
27 * as doing so, and this prevents the OS from loading such binaries if the |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
28 * current cpu doesn't have VIS. There is no way to easily override this |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
29 * behavior of the assembler that I am aware of. |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
30 * |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
31 * This totally defeats what libmpeg2 is trying to do which is allow a |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
32 * single binary to be created, and then detect the availability of VIS |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
33 * at runtime. |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
34 * |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
35 * I'm not saying that tainting the binary by default is bad, rather I'm |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
36 * saying that not providing a way to override this easily unnecessarily |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
37 * ties people's hands. |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
38 * |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
39 * Thus, we do the opcode encoding by hand and output 32-bit words in |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
40 * the assembler to keep the binary from becoming tainted. |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
41 */ |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
42 |
5830
1d83e9c34641
Add FFMPEG_ prefix to all multiple inclusion guards.
diego
parents:
5169
diff
changeset
|
43 #ifndef FFMPEG_VIS_H |
1d83e9c34641
Add FFMPEG_ prefix to all multiple inclusion guards.
diego
parents:
5169
diff
changeset
|
44 #define FFMPEG_VIS_H |
5163 | 45 |
2979 | 46 #define vis_opc_base ((0x1 << 31) | (0x36 << 19)) |
47 #define vis_opf(X) ((X) << 5) | |
48 #define vis_sreg(X) (X) | |
49 #define vis_dreg(X) (((X)&0x1f)|((X)>>5)) | |
50 #define vis_rs1_s(X) (vis_sreg(X) << 14) | |
51 #define vis_rs1_d(X) (vis_dreg(X) << 14) | |
52 #define vis_rs2_s(X) (vis_sreg(X) << 0) | |
53 #define vis_rs2_d(X) (vis_dreg(X) << 0) | |
54 #define vis_rd_s(X) (vis_sreg(X) << 25) | |
55 #define vis_rd_d(X) (vis_dreg(X) << 25) | |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
56 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
57 #define vis_ss2s(opf,rs1,rs2,rd) \ |
6636 | 58 asm volatile (".word %0" \ |
2979 | 59 : : "i" (vis_opc_base | vis_opf(opf) | \ |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
60 vis_rs1_s(rs1) | \ |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
61 vis_rs2_s(rs2) | \ |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
62 vis_rd_s(rd))) |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
63 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
64 #define vis_dd2d(opf,rs1,rs2,rd) \ |
6636 | 65 asm volatile (".word %0" \ |
2979 | 66 : : "i" (vis_opc_base | vis_opf(opf) | \ |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
67 vis_rs1_d(rs1) | \ |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
68 vis_rs2_d(rs2) | \ |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
69 vis_rd_d(rd))) |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
70 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
71 #define vis_ss2d(opf,rs1,rs2,rd) \ |
6636 | 72 asm volatile (".word %0" \ |
2979 | 73 : : "i" (vis_opc_base | vis_opf(opf) | \ |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
74 vis_rs1_s(rs1) | \ |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
75 vis_rs2_s(rs2) | \ |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
76 vis_rd_d(rd))) |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
77 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
78 #define vis_sd2d(opf,rs1,rs2,rd) \ |
6636 | 79 asm volatile (".word %0" \ |
2979 | 80 : : "i" (vis_opc_base | vis_opf(opf) | \ |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
81 vis_rs1_s(rs1) | \ |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
82 vis_rs2_d(rs2) | \ |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
83 vis_rd_d(rd))) |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
84 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
85 #define vis_d2s(opf,rs2,rd) \ |
6636 | 86 asm volatile (".word %0" \ |
2979 | 87 : : "i" (vis_opc_base | vis_opf(opf) | \ |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
88 vis_rs2_d(rs2) | \ |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
89 vis_rd_s(rd))) |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
90 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
91 #define vis_s2d(opf,rs2,rd) \ |
6636 | 92 asm volatile (".word %0" \ |
2979 | 93 : : "i" (vis_opc_base | vis_opf(opf) | \ |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
94 vis_rs2_s(rs2) | \ |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
95 vis_rd_d(rd))) |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
96 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
97 #define vis_d12d(opf,rs1,rd) \ |
6636 | 98 asm volatile (".word %0" \ |
2979 | 99 : : "i" (vis_opc_base | vis_opf(opf) | \ |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
100 vis_rs1_d(rs1) | \ |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
101 vis_rd_d(rd))) |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
102 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
103 #define vis_d22d(opf,rs2,rd) \ |
6636 | 104 asm volatile (".word %0" \ |
2979 | 105 : : "i" (vis_opc_base | vis_opf(opf) | \ |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
106 vis_rs2_d(rs2) | \ |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
107 vis_rd_d(rd))) |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
108 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
109 #define vis_s12s(opf,rs1,rd) \ |
6636 | 110 asm volatile (".word %0" \ |
2979 | 111 : : "i" (vis_opc_base | vis_opf(opf) | \ |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
112 vis_rs1_s(rs1) | \ |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
113 vis_rd_s(rd))) |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
114 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
115 #define vis_s22s(opf,rs2,rd) \ |
6636 | 116 asm volatile (".word %0" \ |
2979 | 117 : : "i" (vis_opc_base | vis_opf(opf) | \ |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
118 vis_rs2_s(rs2) | \ |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
119 vis_rd_s(rd))) |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
120 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
121 #define vis_s(opf,rd) \ |
6636 | 122 asm volatile (".word %0" \ |
2979 | 123 : : "i" (vis_opc_base | vis_opf(opf) | \ |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
124 vis_rd_s(rd))) |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
125 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
126 #define vis_d(opf,rd) \ |
6636 | 127 asm volatile (".word %0" \ |
2979 | 128 : : "i" (vis_opc_base | vis_opf(opf) | \ |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
129 vis_rd_d(rd))) |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
130 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
131 #define vis_r2m(op,rd,mem) \ |
6636 | 132 asm volatile (#op "\t%%f" #rd ", [%0]" : : "r" (&(mem)) ) |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
133 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
134 #define vis_r2m_2(op,rd,mem1,mem2) \ |
6636 | 135 asm volatile (#op "\t%%f" #rd ", [%0 + %1]" : : "r" (mem1), "r" (mem2) ) |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
136 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
137 #define vis_m2r(op,mem,rd) \ |
6636 | 138 asm volatile (#op "\t[%0], %%f" #rd : : "r" (&(mem)) ) |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
139 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
140 #define vis_m2r_2(op,mem1,mem2,rd) \ |
6636 | 141 asm volatile (#op "\t[%0 + %1], %%f" #rd : : "r" (mem1), "r" (mem2) ) |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
142 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
143 static inline void vis_set_gsr(unsigned int _val) |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
144 { |
2979 | 145 register unsigned int val asm("g1"); |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
146 |
2979 | 147 val = _val; |
6636 | 148 asm volatile(".word 0xa7804000" |
2979 | 149 : : "r" (val)); |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
150 } |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
151 |
2979 | 152 #define VIS_GSR_ALIGNADDR_MASK 0x0000007 |
153 #define VIS_GSR_ALIGNADDR_SHIFT 0 | |
154 #define VIS_GSR_SCALEFACT_MASK 0x0000078 | |
155 #define VIS_GSR_SCALEFACT_SHIFT 3 | |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
156 |
2979 | 157 #define vis_ld32(mem,rs1) vis_m2r(ld, mem, rs1) |
158 #define vis_ld32_2(mem1,mem2,rs1) vis_m2r_2(ld, mem1, mem2, rs1) | |
159 #define vis_st32(rs1,mem) vis_r2m(st, rs1, mem) | |
160 #define vis_st32_2(rs1,mem1,mem2) vis_r2m_2(st, rs1, mem1, mem2) | |
161 #define vis_ld64(mem,rs1) vis_m2r(ldd, mem, rs1) | |
162 #define vis_ld64_2(mem1,mem2,rs1) vis_m2r_2(ldd, mem1, mem2, rs1) | |
163 #define vis_st64(rs1,mem) vis_r2m(std, rs1, mem) | |
164 #define vis_st64_2(rs1,mem1,mem2) vis_r2m_2(std, rs1, mem1, mem2) | |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
165 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
166 #define vis_ldblk(mem, rd) \ |
2979 | 167 do { register void *__mem asm("g1"); \ |
168 __mem = &(mem); \ | |
6636 | 169 asm volatile(".word 0xc1985e00 | %1" \ |
2979 | 170 : \ |
171 : "r" (__mem), \ | |
172 "i" (vis_rd_d(rd)) \ | |
173 : "memory"); \ | |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
174 } while (0) |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
175 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
176 #define vis_stblk(rd, mem) \ |
2979 | 177 do { register void *__mem asm("g1"); \ |
178 __mem = &(mem); \ | |
6636 | 179 asm volatile(".word 0xc1b85e00 | %1" \ |
2979 | 180 : \ |
181 : "r" (__mem), \ | |
182 "i" (vis_rd_d(rd)) \ | |
183 : "memory"); \ | |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
184 } while (0) |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
185 |
2979 | 186 #define vis_membar_storestore() \ |
6636 | 187 asm volatile(".word 0x8143e008" : : : "memory") |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
188 |
2979 | 189 #define vis_membar_sync() \ |
6636 | 190 asm volatile(".word 0x8143e040" : : : "memory") |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
191 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
192 /* 16 and 32 bit partitioned addition and subtraction. The normal |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
193 * versions perform 4 16-bit or 2 32-bit additions or subtractions. |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
194 * The 's' versions perform 2 16-bit or 1 32-bit additions or |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
195 * subtractions. |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
196 */ |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
197 |
2979 | 198 #define vis_padd16(rs1,rs2,rd) vis_dd2d(0x50, rs1, rs2, rd) |
199 #define vis_padd16s(rs1,rs2,rd) vis_ss2s(0x51, rs1, rs2, rd) | |
200 #define vis_padd32(rs1,rs2,rd) vis_dd2d(0x52, rs1, rs2, rd) | |
201 #define vis_padd32s(rs1,rs2,rd) vis_ss2s(0x53, rs1, rs2, rd) | |
202 #define vis_psub16(rs1,rs2,rd) vis_dd2d(0x54, rs1, rs2, rd) | |
203 #define vis_psub16s(rs1,rs2,rd) vis_ss2s(0x55, rs1, rs2, rd) | |
204 #define vis_psub32(rs1,rs2,rd) vis_dd2d(0x56, rs1, rs2, rd) | |
205 #define vis_psub32s(rs1,rs2,rd) vis_ss2s(0x57, rs1, rs2, rd) | |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
206 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
207 /* Pixel formatting instructions. */ |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
208 |
2979 | 209 #define vis_pack16(rs2,rd) vis_d2s( 0x3b, rs2, rd) |
210 #define vis_pack32(rs1,rs2,rd) vis_dd2d(0x3a, rs1, rs2, rd) | |
211 #define vis_packfix(rs2,rd) vis_d2s( 0x3d, rs2, rd) | |
212 #define vis_expand(rs2,rd) vis_s2d( 0x4d, rs2, rd) | |
213 #define vis_pmerge(rs1,rs2,rd) vis_ss2d(0x4b, rs1, rs2, rd) | |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
214 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
215 /* Partitioned multiply instructions. */ |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
216 |
2979 | 217 #define vis_mul8x16(rs1,rs2,rd) vis_sd2d(0x31, rs1, rs2, rd) |
218 #define vis_mul8x16au(rs1,rs2,rd) vis_ss2d(0x33, rs1, rs2, rd) | |
219 #define vis_mul8x16al(rs1,rs2,rd) vis_ss2d(0x35, rs1, rs2, rd) | |
220 #define vis_mul8sux16(rs1,rs2,rd) vis_dd2d(0x36, rs1, rs2, rd) | |
221 #define vis_mul8ulx16(rs1,rs2,rd) vis_dd2d(0x37, rs1, rs2, rd) | |
222 #define vis_muld8sux16(rs1,rs2,rd) vis_ss2d(0x38, rs1, rs2, rd) | |
223 #define vis_muld8ulx16(rs1,rs2,rd) vis_ss2d(0x39, rs1, rs2, rd) | |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
224 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
225 /* Alignment instructions. */ |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
226 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
227 static inline void *vis_alignaddr(void *_ptr) |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
228 { |
2979 | 229 register void *ptr asm("g1"); |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
230 |
2979 | 231 ptr = _ptr; |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
232 |
6636 | 233 asm volatile(".word %2" |
2979 | 234 : "=&r" (ptr) |
235 : "0" (ptr), | |
236 "i" (vis_opc_base | vis_opf(0x18) | | |
237 vis_rs1_s(1) | | |
238 vis_rs2_s(0) | | |
239 vis_rd_s(1))); | |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
240 |
2979 | 241 return ptr; |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
242 } |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
243 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
244 static inline void vis_alignaddr_g0(void *_ptr) |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
245 { |
2979 | 246 register void *ptr asm("g1"); |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
247 |
2979 | 248 ptr = _ptr; |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
249 |
6636 | 250 asm volatile(".word %2" |
2979 | 251 : "=&r" (ptr) |
252 : "0" (ptr), | |
253 "i" (vis_opc_base | vis_opf(0x18) | | |
254 vis_rs1_s(1) | | |
255 vis_rs2_s(0) | | |
256 vis_rd_s(0))); | |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
257 } |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
258 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
259 static inline void *vis_alignaddrl(void *_ptr) |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
260 { |
2979 | 261 register void *ptr asm("g1"); |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
262 |
2979 | 263 ptr = _ptr; |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
264 |
6636 | 265 asm volatile(".word %2" |
2979 | 266 : "=&r" (ptr) |
267 : "0" (ptr), | |
268 "i" (vis_opc_base | vis_opf(0x19) | | |
269 vis_rs1_s(1) | | |
270 vis_rs2_s(0) | | |
271 vis_rd_s(1))); | |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
272 |
2979 | 273 return ptr; |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
274 } |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
275 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
276 static inline void vis_alignaddrl_g0(void *_ptr) |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
277 { |
2979 | 278 register void *ptr asm("g1"); |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
279 |
2979 | 280 ptr = _ptr; |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
281 |
6636 | 282 asm volatile(".word %2" |
2979 | 283 : "=&r" (ptr) |
284 : "0" (ptr), | |
285 "i" (vis_opc_base | vis_opf(0x19) | | |
286 vis_rs1_s(1) | | |
287 vis_rs2_s(0) | | |
288 vis_rd_s(0))); | |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
289 } |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
290 |
2979 | 291 #define vis_faligndata(rs1,rs2,rd) vis_dd2d(0x48, rs1, rs2, rd) |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
292 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
293 /* Logical operate instructions. */ |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
294 |
2979 | 295 #define vis_fzero(rd) vis_d( 0x60, rd) |
296 #define vis_fzeros(rd) vis_s( 0x61, rd) | |
297 #define vis_fone(rd) vis_d( 0x7e, rd) | |
298 #define vis_fones(rd) vis_s( 0x7f, rd) | |
299 #define vis_src1(rs1,rd) vis_d12d(0x74, rs1, rd) | |
300 #define vis_src1s(rs1,rd) vis_s12s(0x75, rs1, rd) | |
301 #define vis_src2(rs2,rd) vis_d22d(0x78, rs2, rd) | |
302 #define vis_src2s(rs2,rd) vis_s22s(0x79, rs2, rd) | |
303 #define vis_not1(rs1,rd) vis_d12d(0x6a, rs1, rd) | |
304 #define vis_not1s(rs1,rd) vis_s12s(0x6b, rs1, rd) | |
305 #define vis_not2(rs2,rd) vis_d22d(0x66, rs2, rd) | |
306 #define vis_not2s(rs2,rd) vis_s22s(0x67, rs2, rd) | |
307 #define vis_or(rs1,rs2,rd) vis_dd2d(0x7c, rs1, rs2, rd) | |
308 #define vis_ors(rs1,rs2,rd) vis_ss2s(0x7d, rs1, rs2, rd) | |
309 #define vis_nor(rs1,rs2,rd) vis_dd2d(0x62, rs1, rs2, rd) | |
310 #define vis_nors(rs1,rs2,rd) vis_ss2s(0x63, rs1, rs2, rd) | |
311 #define vis_and(rs1,rs2,rd) vis_dd2d(0x70, rs1, rs2, rd) | |
312 #define vis_ands(rs1,rs2,rd) vis_ss2s(0x71, rs1, rs2, rd) | |
313 #define vis_nand(rs1,rs2,rd) vis_dd2d(0x6e, rs1, rs2, rd) | |
314 #define vis_nands(rs1,rs2,rd) vis_ss2s(0x6f, rs1, rs2, rd) | |
315 #define vis_xor(rs1,rs2,rd) vis_dd2d(0x6c, rs1, rs2, rd) | |
316 #define vis_xors(rs1,rs2,rd) vis_ss2s(0x6d, rs1, rs2, rd) | |
317 #define vis_xnor(rs1,rs2,rd) vis_dd2d(0x72, rs1, rs2, rd) | |
318 #define vis_xnors(rs1,rs2,rd) vis_ss2s(0x73, rs1, rs2, rd) | |
319 #define vis_ornot1(rs1,rs2,rd) vis_dd2d(0x7a, rs1, rs2, rd) | |
320 #define vis_ornot1s(rs1,rs2,rd) vis_ss2s(0x7b, rs1, rs2, rd) | |
321 #define vis_ornot2(rs1,rs2,rd) vis_dd2d(0x76, rs1, rs2, rd) | |
322 #define vis_ornot2s(rs1,rs2,rd) vis_ss2s(0x77, rs1, rs2, rd) | |
323 #define vis_andnot1(rs1,rs2,rd) vis_dd2d(0x68, rs1, rs2, rd) | |
324 #define vis_andnot1s(rs1,rs2,rd) vis_ss2s(0x69, rs1, rs2, rd) | |
325 #define vis_andnot2(rs1,rs2,rd) vis_dd2d(0x64, rs1, rs2, rd) | |
326 #define vis_andnot2s(rs1,rs2,rd) vis_ss2s(0x65, rs1, rs2, rd) | |
1959
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
327 |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
328 /* Pixel component distance. */ |
55b7435c59b8
VIS optimized motion compensation code. by (David S. Miller <davem at redhat dot com>)
michael
parents:
diff
changeset
|
329 |
2979 | 330 #define vis_pdist(rs1,rs2,rd) vis_dd2d(0x3e, rs1, rs2, rd) |
5163 | 331 |
5830
1d83e9c34641
Add FFMPEG_ prefix to all multiple inclusion guards.
diego
parents:
5169
diff
changeset
|
332 #endif /* FFMPEG_VIS_H */ |