annotate alpha/asm.h @ 5319:40af705cef7e libavcodec

AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9 Fix the bugs: 1. The quality of output because of incorrect windowing coefficients. New code for window generation. 2. Dynrng values were reset where dynrng value is present in the first block, but not in the subsequent block.
author jbr
date Sat, 14 Jul 2007 16:03:14 +0000
parents c8c591fe26f8
children 1d83e9c34641
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
214
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
1 /*
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
2 * Alpha optimized DSP utils
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
3 * Copyright (c) 2002 Falk Hueffner <falk@debian.org>
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
4 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3036
diff changeset
5 * This file is part of FFmpeg.
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3036
diff changeset
6 *
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3036
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
429
718a22dc121f license/copyright change
glantau
parents: 214
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
718a22dc121f license/copyright change
glantau
parents: 214
diff changeset
9 * License as published by the Free Software Foundation; either
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3036
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
214
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
11 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3036
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
214
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
429
718a22dc121f license/copyright change
glantau
parents: 214
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
718a22dc121f license/copyright change
glantau
parents: 214
diff changeset
15 * Lesser General Public License for more details.
214
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
16 *
429
718a22dc121f license/copyright change
glantau
parents: 214
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3036
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
214
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
20 */
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
21
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
22 #ifndef LIBAVCODEC_ALPHA_ASM_H
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
23 #define LIBAVCODEC_ALPHA_ASM_H
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
24
504
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
25 #include <inttypes.h>
214
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
26
728
9cda14fe33d9 Some nifty stuff for upcoming patches.
mellum
parents: 665
diff changeset
27 #if defined __GNUC__
9cda14fe33d9 Some nifty stuff for upcoming patches.
mellum
parents: 665
diff changeset
28 # define GNUC_PREREQ(maj, min) \
9cda14fe33d9 Some nifty stuff for upcoming patches.
mellum
parents: 665
diff changeset
29 ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
9cda14fe33d9 Some nifty stuff for upcoming patches.
mellum
parents: 665
diff changeset
30 #else
9cda14fe33d9 Some nifty stuff for upcoming patches.
mellum
parents: 665
diff changeset
31 # define GNUC_PREREQ(maj, min) 0
9cda14fe33d9 Some nifty stuff for upcoming patches.
mellum
parents: 665
diff changeset
32 #endif
9cda14fe33d9 Some nifty stuff for upcoming patches.
mellum
parents: 665
diff changeset
33
9cda14fe33d9 Some nifty stuff for upcoming patches.
mellum
parents: 665
diff changeset
34 #if GNUC_PREREQ(2,96)
9cda14fe33d9 Some nifty stuff for upcoming patches.
mellum
parents: 665
diff changeset
35 # define likely(x) __builtin_expect((x) != 0, 1)
9cda14fe33d9 Some nifty stuff for upcoming patches.
mellum
parents: 665
diff changeset
36 # define unlikely(x) __builtin_expect((x) != 0, 0)
9cda14fe33d9 Some nifty stuff for upcoming patches.
mellum
parents: 665
diff changeset
37 #else
9cda14fe33d9 Some nifty stuff for upcoming patches.
mellum
parents: 665
diff changeset
38 # define likely(x) (x)
9cda14fe33d9 Some nifty stuff for upcoming patches.
mellum
parents: 665
diff changeset
39 # define unlikely(x) (x)
9cda14fe33d9 Some nifty stuff for upcoming patches.
mellum
parents: 665
diff changeset
40 #endif
9cda14fe33d9 Some nifty stuff for upcoming patches.
mellum
parents: 665
diff changeset
41
214
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
42 #define AMASK_BWX (1 << 0)
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
43 #define AMASK_FIX (1 << 1)
504
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
44 #define AMASK_CIX (1 << 2)
214
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
45 #define AMASK_MVI (1 << 8)
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
46
1378
1831d86117a3 warning fixes
al3x
parents: 728
diff changeset
47 static inline uint64_t BYTE_VEC(uint64_t x)
214
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
48 {
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
49 x |= x << 8;
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
50 x |= x << 16;
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
51 x |= x << 32;
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
52 return x;
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
53 }
1378
1831d86117a3 warning fixes
al3x
parents: 728
diff changeset
54 static inline uint64_t WORD_VEC(uint64_t x)
214
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
55 {
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
56 x |= x << 16;
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
57 x |= x << 32;
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
58 return x;
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
59 }
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
60
728
9cda14fe33d9 Some nifty stuff for upcoming patches.
mellum
parents: 665
diff changeset
61 #define sextw(x) ((int16_t) (x))
214
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
62
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
63 #ifdef __GNUC__
2765
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
64 #define ldq(p) \
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
65 (((union { \
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
66 uint64_t __l; \
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
67 __typeof__(*(p)) __s[sizeof (uint64_t) / sizeof *(p)]; \
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
68 } *) (p))->__l)
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
69 #define ldl(p) \
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
70 (((union { \
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
71 int32_t __l; \
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
72 __typeof__(*(p)) __s[sizeof (int32_t) / sizeof *(p)]; \
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
73 } *) (p))->__l)
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
74 #define stq(l, p) \
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
75 do { \
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
76 (((union { \
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
77 uint64_t __l; \
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
78 __typeof__(*(p)) __s[sizeof (uint64_t) / sizeof *(p)]; \
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
79 } *) (p))->__l) = l; \
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
80 } while (0)
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
81 #define stl(l, p) \
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
82 do { \
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
83 (((union { \
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
84 int32_t __l; \
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
85 __typeof__(*(p)) __s[sizeof (int32_t) / sizeof *(p)]; \
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
86 } *) (p))->__l) = l; \
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
87 } while (0)
504
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
88 struct unaligned_long { uint64_t l; } __attribute__((packed));
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
89 #define ldq_u(p) (*(const uint64_t *) (((uint64_t) (p)) & ~7ul))
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
90 #define uldq(a) (((const struct unaligned_long *) (a))->l)
214
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
91
728
9cda14fe33d9 Some nifty stuff for upcoming patches.
mellum
parents: 665
diff changeset
92 #if GNUC_PREREQ(3,3)
1465
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
93 #define prefetch(p) __builtin_prefetch((p), 0, 1)
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
94 #define prefetch_en(p) __builtin_prefetch((p), 0, 0)
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
95 #define prefetch_m(p) __builtin_prefetch((p), 1, 1)
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
96 #define prefetch_men(p) __builtin_prefetch((p), 1, 0)
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
97 #define cmpbge __builtin_alpha_cmpbge
504
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
98 /* Avoid warnings. */
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
99 #define extql(a, b) __builtin_alpha_extql(a, (uint64_t) (b))
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
100 #define extwl(a, b) __builtin_alpha_extwl(a, (uint64_t) (b))
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
101 #define extqh(a, b) __builtin_alpha_extqh(a, (uint64_t) (b))
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
102 #define zap __builtin_alpha_zap
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
103 #define zapnot __builtin_alpha_zapnot
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
104 #define amask __builtin_alpha_amask
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
105 #define implver __builtin_alpha_implver
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
106 #define rpcc __builtin_alpha_rpcc
1465
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
107 #else
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
108 #define prefetch(p) asm volatile("ldl $31,%0" : : "m"(*(const char *) (p)) : "memory")
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
109 #define prefetch_en(p) asm volatile("ldq $31,%0" : : "m"(*(const char *) (p)) : "memory")
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
110 #define prefetch_m(p) asm volatile("lds $f31,%0" : : "m"(*(const char *) (p)) : "memory")
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
111 #define prefetch_men(p) asm volatile("ldt $f31,%0" : : "m"(*(const char *) (p)) : "memory")
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
112 #define cmpbge(a, b) ({ uint64_t __r; asm ("cmpbge %r1,%2,%0" : "=r" (__r) : "rJ" (a), "rI" (b)); __r; })
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
113 #define extql(a, b) ({ uint64_t __r; asm ("extql %r1,%2,%0" : "=r" (__r) : "rJ" (a), "rI" (b)); __r; })
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
114 #define extwl(a, b) ({ uint64_t __r; asm ("extwl %r1,%2,%0" : "=r" (__r) : "rJ" (a), "rI" (b)); __r; })
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
115 #define extqh(a, b) ({ uint64_t __r; asm ("extqh %r1,%2,%0" : "=r" (__r) : "rJ" (a), "rI" (b)); __r; })
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
116 #define zap(a, b) ({ uint64_t __r; asm ("zap %r1,%2,%0" : "=r" (__r) : "rJ" (a), "rI" (b)); __r; })
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
117 #define zapnot(a, b) ({ uint64_t __r; asm ("zapnot %r1,%2,%0" : "=r" (__r) : "rJ" (a), "rI" (b)); __r; })
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
118 #define amask(a) ({ uint64_t __r; asm ("amask %1,%0" : "=r" (__r) : "rI" (a)); __r; })
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
119 #define implver() ({ uint64_t __r; asm ("implver %0" : "=r" (__r)); __r; })
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
120 #define rpcc() ({ uint64_t __r; asm volatile ("rpcc %0" : "=r" (__r)); __r; })
1465
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
121 #endif
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
122 #define wh64(p) asm volatile("wh64 (%0)" : : "r"(p) : "memory")
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
123
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
124 #if GNUC_PREREQ(3,3) && defined(__alpha_max__)
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
125 #define minub8 __builtin_alpha_minub8
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
126 #define minsb8 __builtin_alpha_minsb8
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
127 #define minuw4 __builtin_alpha_minuw4
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
128 #define minsw4 __builtin_alpha_minsw4
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
129 #define maxub8 __builtin_alpha_maxub8
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
130 #define maxsb8 __builtin_alpha_maxsb8
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
131 #define maxuw4 __builtin_alpha_maxuw4
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
132 #define maxsw4 __builtin_alpha_maxsw4
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
133 #define perr __builtin_alpha_perr
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
134 #define pklb __builtin_alpha_pklb
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
135 #define pkwb __builtin_alpha_pkwb
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
136 #define unpkbl __builtin_alpha_unpkbl
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
137 #define unpkbw __builtin_alpha_unpkbw
504
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
138 #else
1465
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
139 #define minub8(a, b) ({ uint64_t __r; asm (".arch ev6; minub8 %r1,%2,%0" : "=r" (__r) : "%rJ" (a), "rI" (b)); __r; })
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
140 #define minsb8(a, b) ({ uint64_t __r; asm (".arch ev6; minsb8 %r1,%2,%0" : "=r" (__r) : "%rJ" (a), "rI" (b)); __r; })
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
141 #define minuw4(a, b) ({ uint64_t __r; asm (".arch ev6; minuw4 %r1,%2,%0" : "=r" (__r) : "%rJ" (a), "rI" (b)); __r; })
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
142 #define minsw4(a, b) ({ uint64_t __r; asm (".arch ev6; minsw4 %r1,%2,%0" : "=r" (__r) : "%rJ" (a), "rI" (b)); __r; })
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
143 #define maxub8(a, b) ({ uint64_t __r; asm (".arch ev6; maxub8 %r1,%2,%0" : "=r" (__r) : "%rJ" (a), "rI" (b)); __r; })
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
144 #define maxsb8(a, b) ({ uint64_t __r; asm (".arch ev6; maxsb8 %r1,%2,%0" : "=r" (__r) : "%rJ" (a), "rI" (b)); __r; })
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
145 #define maxuw4(a, b) ({ uint64_t __r; asm (".arch ev6; maxuw4 %r1,%2,%0" : "=r" (__r) : "%rJ" (a), "rI" (b)); __r; })
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
146 #define maxsw4(a, b) ({ uint64_t __r; asm (".arch ev6; maxsw4 %r1,%2,%0" : "=r" (__r) : "%rJ" (a), "rI" (b)); __r; })
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
147 #define perr(a, b) ({ uint64_t __r; asm (".arch ev6; perr %r1,%r2,%0" : "=r" (__r) : "%rJ" (a), "rJ" (b)); __r; })
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
148 #define pklb(a) ({ uint64_t __r; asm (".arch ev6; pklb %r1,%0" : "=r" (__r) : "rJ" (a)); __r; })
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
149 #define pkwb(a) ({ uint64_t __r; asm (".arch ev6; pkwb %r1,%0" : "=r" (__r) : "rJ" (a)); __r; })
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
150 #define unpkbl(a) ({ uint64_t __r; asm (".arch ev6; unpkbl %r1,%0" : "=r" (__r) : "rJ" (a)); __r; })
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
151 #define unpkbw(a) ({ uint64_t __r; asm (".arch ev6; unpkbw %r1,%0" : "=r" (__r) : "rJ" (a)); __r; })
504
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
152 #endif
214
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
153
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
154 #elif defined(__DECC) /* Digital/Compaq/hp "ccc" compiler */
214
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
155
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
156 #include <c_asm.h>
2765
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
157 #define ldq(p) (*(const uint64_t *) (p))
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
158 #define ldl(p) (*(const int32_t *) (p))
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
159 #define stq(l, p) do { *(uint64_t *) (p) = (l); } while (0)
e44ff53b1c85 Communicate proper aliasing to gcc (needed for 4.1).
mellum
parents: 1465
diff changeset
160 #define stl(l, p) do { *(int32_t *) (p) = (l); } while (0)
504
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
161 #define ldq_u(a) asm ("ldq_u %v0,0(%a0)", a)
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
162 #define uldq(a) (*(const __unaligned uint64_t *) (a))
504
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
163 #define cmpbge(a, b) asm ("cmpbge %a0,%a1,%v0", a, b)
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
164 #define extql(a, b) asm ("extql %a0,%a1,%v0", a, b)
728
9cda14fe33d9 Some nifty stuff for upcoming patches.
mellum
parents: 665
diff changeset
165 #define extwl(a, b) asm ("extwl %a0,%a1,%v0", a, b)
504
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
166 #define extqh(a, b) asm ("extqh %a0,%a1,%v0", a, b)
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
167 #define zap(a, b) asm ("zap %a0,%a1,%v0", a, b)
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
168 #define zapnot(a, b) asm ("zapnot %a0,%a1,%v0", a, b)
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
169 #define amask(a) asm ("amask %a0,%v0", a)
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
170 #define implver() asm ("implver %v0")
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
171 #define rpcc() asm ("rpcc %v0")
504
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
172 #define minub8(a, b) asm ("minub8 %a0,%a1,%v0", a, b)
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
173 #define minsb8(a, b) asm ("minsb8 %a0,%a1,%v0", a, b)
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
174 #define minuw4(a, b) asm ("minuw4 %a0,%a1,%v0", a, b)
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
175 #define minsw4(a, b) asm ("minsw4 %a0,%a1,%v0", a, b)
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
176 #define maxub8(a, b) asm ("maxub8 %a0,%a1,%v0", a, b)
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
177 #define maxsb8(a, b) asm ("maxsb8 %a0,%a1,%v0", a, b)
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
178 #define maxuw4(a, b) asm ("maxuw4 %a0,%a1,%v0", a, b)
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
179 #define maxsw4(a, b) asm ("maxsw4 %a0,%a1,%v0", a, b)
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
180 #define perr(a, b) asm ("perr %a0,%a1,%v0", a, b)
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
181 #define pklb(a) asm ("pklb %a0,%v0", a)
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
182 #define pkwb(a) asm ("pkwb %a0,%v0", a)
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
183 #define unpkbl(a) asm ("unpkbl %a0,%v0", a)
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
184 #define unpkbw(a) asm ("unpkbw %a0,%v0", a)
1465
52254c2f9cae Use asms instead of builtins when compiling for generic Alpha. Less
mellum
parents: 1378
diff changeset
185 #define wh64(a) asm ("wh64 %a0", a)
214
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
186
504
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
187 #else
4aa1ff2acc74 * Fixed constraints
mellum
parents: 429
diff changeset
188 #error "Unknown compiler!"
214
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
189 #endif
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
190
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents:
diff changeset
191 #endif /* LIBAVCODEC_ALPHA_ASM_H */