comparison alpha/asm.h @ 1465:52254c2f9cae libavcodec

Use asms instead of builtins when compiling for generic Alpha. Less ugly.
author mellum
date Sat, 13 Sep 2003 10:07:46 +0000
parents 1831d86117a3
children e44ff53b1c85
comparison
equal deleted inserted replaced
1464:51239e385475 1465:52254c2f9cae
61 #define stl(l, p) do { *(uint32_t *) (p) = (l); } while (0) 61 #define stl(l, p) do { *(uint32_t *) (p) = (l); } while (0)
62 #define stq(l, p) do { *(uint64_t *) (p) = (l); } while (0) 62 #define stq(l, p) do { *(uint64_t *) (p) = (l); } while (0)
63 #define sextw(x) ((int16_t) (x)) 63 #define sextw(x) ((int16_t) (x))
64 64
65 #ifdef __GNUC__ 65 #ifdef __GNUC__
66 #define ASM_ACCEPT_MVI asm (".arch pca56")
67 struct unaligned_long { uint64_t l; } __attribute__((packed)); 66 struct unaligned_long { uint64_t l; } __attribute__((packed));
68 #define ldq_u(p) (*(const uint64_t *) (((uint64_t) (p)) & ~7ul)) 67 #define ldq_u(p) (*(const uint64_t *) (((uint64_t) (p)) & ~7ul))
69 #define uldq(a) (((const struct unaligned_long *) (a))->l) 68 #define uldq(a) (((const struct unaligned_long *) (a))->l)
70 69
71 #if GNUC_PREREQ(3,0)
72 /* Unfortunately, __builtin_prefetch is slightly buggy on Alpha. The
73 defines here are kludged so we still get the right
74 instruction. This needs to be adapted as soon as gcc is fixed. */
75 # define prefetch(p) __builtin_prefetch((p), 0, 1)
76 # define prefetch_en(p) __builtin_prefetch((p), 1, 1)
77 # define prefetch_m(p) __builtin_prefetch((p), 0, 0)
78 # define prefetch_men(p) __builtin_prefetch((p), 1, 0)
79 #else
80 # define prefetch(p) asm volatile("ldl $31,%0" : : "m"(*(const char *) (p)) : "memory")
81 # define prefetch_en(p) asm volatile("ldq $31,%0" : : "m"(*(const char *) (p)) : "memory")
82 # define prefetch_m(p) asm volatile("lds $f31,%0" : : "m"(*(const char *) (p)) : "memory")
83 # define prefetch_men(p) asm volatile("ldt $f31,%0" : : "m"(*(const char *) (p)) : "memory")
84 #endif
85
86 #if GNUC_PREREQ(3,3) 70 #if GNUC_PREREQ(3,3)
71 #define prefetch(p) __builtin_prefetch((p), 0, 1)
72 #define prefetch_en(p) __builtin_prefetch((p), 0, 0)
73 #define prefetch_m(p) __builtin_prefetch((p), 1, 1)
74 #define prefetch_men(p) __builtin_prefetch((p), 1, 0)
87 #define cmpbge __builtin_alpha_cmpbge 75 #define cmpbge __builtin_alpha_cmpbge
88 /* Avoid warnings. */ 76 /* Avoid warnings. */
89 #define extql(a, b) __builtin_alpha_extql(a, (uint64_t) (b)) 77 #define extql(a, b) __builtin_alpha_extql(a, (uint64_t) (b))
90 #define extwl(a, b) __builtin_alpha_extwl(a, (uint64_t) (b)) 78 #define extwl(a, b) __builtin_alpha_extwl(a, (uint64_t) (b))
91 #define extqh(a, b) __builtin_alpha_extqh(a, (uint64_t) (b)) 79 #define extqh(a, b) __builtin_alpha_extqh(a, (uint64_t) (b))
92 #define zap __builtin_alpha_zap 80 #define zap __builtin_alpha_zap
93 #define zapnot __builtin_alpha_zapnot 81 #define zapnot __builtin_alpha_zapnot
94 #define amask __builtin_alpha_amask 82 #define amask __builtin_alpha_amask
95 #define implver __builtin_alpha_implver 83 #define implver __builtin_alpha_implver
96 #define rpcc __builtin_alpha_rpcc 84 #define rpcc __builtin_alpha_rpcc
85 #else
86 #define prefetch(p) asm volatile("ldl $31,%0" : : "m"(*(const char *) (p)) : "memory")
87 #define prefetch_en(p) asm volatile("ldq $31,%0" : : "m"(*(const char *) (p)) : "memory")
88 #define prefetch_m(p) asm volatile("lds $f31,%0" : : "m"(*(const char *) (p)) : "memory")
89 #define prefetch_men(p) asm volatile("ldt $f31,%0" : : "m"(*(const char *) (p)) : "memory")
90 #define cmpbge(a, b) ({ uint64_t __r; asm ("cmpbge %r1,%2,%0" : "=r" (__r) : "rJ" (a), "rI" (b)); __r; })
91 #define extql(a, b) ({ uint64_t __r; asm ("extql %r1,%2,%0" : "=r" (__r) : "rJ" (a), "rI" (b)); __r; })
92 #define extwl(a, b) ({ uint64_t __r; asm ("extwl %r1,%2,%0" : "=r" (__r) : "rJ" (a), "rI" (b)); __r; })
93 #define extqh(a, b) ({ uint64_t __r; asm ("extqh %r1,%2,%0" : "=r" (__r) : "rJ" (a), "rI" (b)); __r; })
94 #define zap(a, b) ({ uint64_t __r; asm ("zap %r1,%2,%0" : "=r" (__r) : "rJ" (a), "rI" (b)); __r; })
95 #define zapnot(a, b) ({ uint64_t __r; asm ("zapnot %r1,%2,%0" : "=r" (__r) : "rJ" (a), "rI" (b)); __r; })
96 #define amask(a) ({ uint64_t __r; asm ("amask %1,%0" : "=r" (__r) : "rI" (a)); __r; })
97 #define implver() ({ uint64_t __r; asm ("implver %0" : "=r" (__r)); __r; })
98 #define rpcc() ({ uint64_t __r; asm volatile ("rpcc %0" : "=r" (__r)); __r; })
99 #endif
100 #define wh64(p) asm volatile("wh64 (%0)" : : "r"(p) : "memory")
101
102 #if GNUC_PREREQ(3,3) && defined(__alpha_max__)
97 #define minub8 __builtin_alpha_minub8 103 #define minub8 __builtin_alpha_minub8
98 #define minsb8 __builtin_alpha_minsb8 104 #define minsb8 __builtin_alpha_minsb8
99 #define minuw4 __builtin_alpha_minuw4 105 #define minuw4 __builtin_alpha_minuw4
100 #define minsw4 __builtin_alpha_minsw4 106 #define minsw4 __builtin_alpha_minsw4
101 #define maxub8 __builtin_alpha_maxub8 107 #define maxub8 __builtin_alpha_maxub8
106 #define pklb __builtin_alpha_pklb 112 #define pklb __builtin_alpha_pklb
107 #define pkwb __builtin_alpha_pkwb 113 #define pkwb __builtin_alpha_pkwb
108 #define unpkbl __builtin_alpha_unpkbl 114 #define unpkbl __builtin_alpha_unpkbl
109 #define unpkbw __builtin_alpha_unpkbw 115 #define unpkbw __builtin_alpha_unpkbw
110 #else 116 #else
111 #define cmpbge(a, b) ({ uint64_t __r; asm ("cmpbge %r1,%2,%0" : "=r" (__r) : "rJ" (a), "rI" (b)); __r; }) 117 #define minub8(a, b) ({ uint64_t __r; asm (".arch ev6; minub8 %r1,%2,%0" : "=r" (__r) : "%rJ" (a), "rI" (b)); __r; })
112 #define extql(a, b) ({ uint64_t __r; asm ("extql %r1,%2,%0" : "=r" (__r) : "rJ" (a), "rI" (b)); __r; }) 118 #define minsb8(a, b) ({ uint64_t __r; asm (".arch ev6; minsb8 %r1,%2,%0" : "=r" (__r) : "%rJ" (a), "rI" (b)); __r; })
113 #define extwl(a, b) ({ uint64_t __r; asm ("extwl %r1,%2,%0" : "=r" (__r) : "rJ" (a), "rI" (b)); __r; }) 119 #define minuw4(a, b) ({ uint64_t __r; asm (".arch ev6; minuw4 %r1,%2,%0" : "=r" (__r) : "%rJ" (a), "rI" (b)); __r; })
114 #define extqh(a, b) ({ uint64_t __r; asm ("extqh %r1,%2,%0" : "=r" (__r) : "rJ" (a), "rI" (b)); __r; }) 120 #define minsw4(a, b) ({ uint64_t __r; asm (".arch ev6; minsw4 %r1,%2,%0" : "=r" (__r) : "%rJ" (a), "rI" (b)); __r; })
115 #define zap(a, b) ({ uint64_t __r; asm ("zap %r1,%2,%0" : "=r" (__r) : "rJ" (a), "rI" (b)); __r; }) 121 #define maxub8(a, b) ({ uint64_t __r; asm (".arch ev6; maxub8 %r1,%2,%0" : "=r" (__r) : "%rJ" (a), "rI" (b)); __r; })
116 #define zapnot(a, b) ({ uint64_t __r; asm ("zapnot %r1,%2,%0" : "=r" (__r) : "rJ" (a), "rI" (b)); __r; }) 122 #define maxsb8(a, b) ({ uint64_t __r; asm (".arch ev6; maxsb8 %r1,%2,%0" : "=r" (__r) : "%rJ" (a), "rI" (b)); __r; })
117 #define amask(a) ({ uint64_t __r; asm ("amask %1,%0" : "=r" (__r) : "rI" (a)); __r; }) 123 #define maxuw4(a, b) ({ uint64_t __r; asm (".arch ev6; maxuw4 %r1,%2,%0" : "=r" (__r) : "%rJ" (a), "rI" (b)); __r; })
118 #define implver() ({ uint64_t __r; asm ("implver %0" : "=r" (__r)); __r; }) 124 #define maxsw4(a, b) ({ uint64_t __r; asm (".arch ev6; maxsw4 %r1,%2,%0" : "=r" (__r) : "%rJ" (a), "rI" (b)); __r; })
119 #define rpcc() ({ uint64_t __r; asm volatile ("rpcc %0" : "=r" (__r)); __r; }) 125 #define perr(a, b) ({ uint64_t __r; asm (".arch ev6; perr %r1,%r2,%0" : "=r" (__r) : "%rJ" (a), "rJ" (b)); __r; })
120 #define minub8(a, b) ({ uint64_t __r; asm ("minub8 %r1,%2,%0" : "=r" (__r) : "%rJ" (a), "rI" (b)); __r; }) 126 #define pklb(a) ({ uint64_t __r; asm (".arch ev6; pklb %r1,%0" : "=r" (__r) : "rJ" (a)); __r; })
121 #define minsb8(a, b) ({ uint64_t __r; asm ("minsb8 %r1,%2,%0" : "=r" (__r) : "%rJ" (a), "rI" (b)); __r; }) 127 #define pkwb(a) ({ uint64_t __r; asm (".arch ev6; pkwb %r1,%0" : "=r" (__r) : "rJ" (a)); __r; })
122 #define minuw4(a, b) ({ uint64_t __r; asm ("minuw4 %r1,%2,%0" : "=r" (__r) : "%rJ" (a), "rI" (b)); __r; }) 128 #define unpkbl(a) ({ uint64_t __r; asm (".arch ev6; unpkbl %r1,%0" : "=r" (__r) : "rJ" (a)); __r; })
123 #define minsw4(a, b) ({ uint64_t __r; asm ("minsw4 %r1,%2,%0" : "=r" (__r) : "%rJ" (a), "rI" (b)); __r; }) 129 #define unpkbw(a) ({ uint64_t __r; asm (".arch ev6; unpkbw %r1,%0" : "=r" (__r) : "rJ" (a)); __r; })
124 #define maxub8(a, b) ({ uint64_t __r; asm ("maxub8 %r1,%2,%0" : "=r" (__r) : "%rJ" (a), "rI" (b)); __r; })
125 #define maxsb8(a, b) ({ uint64_t __r; asm ("maxsb8 %r1,%2,%0" : "=r" (__r) : "%rJ" (a), "rI" (b)); __r; })
126 #define maxuw4(a, b) ({ uint64_t __r; asm ("maxuw4 %r1,%2,%0" : "=r" (__r) : "%rJ" (a), "rI" (b)); __r; })
127 #define maxsw4(a, b) ({ uint64_t __r; asm ("maxsw4 %r1,%2,%0" : "=r" (__r) : "%rJ" (a), "rI" (b)); __r; })
128 #define perr(a, b) ({ uint64_t __r; asm ("perr %r1,%r2,%0" : "=r" (__r) : "%rJ" (a), "rJ" (b)); __r; })
129 #define pklb(a) ({ uint64_t __r; asm ("pklb %r1,%0" : "=r" (__r) : "rJ" (a)); __r; })
130 #define pkwb(a) ({ uint64_t __r; asm ("pkwb %r1,%0" : "=r" (__r) : "rJ" (a)); __r; })
131 #define unpkbl(a) ({ uint64_t __r; asm ("unpkbl %r1,%0" : "=r" (__r) : "rJ" (a)); __r; })
132 #define unpkbw(a) ({ uint64_t __r; asm ("unpkbw %r1,%0" : "=r" (__r) : "rJ" (a)); __r; })
133 #endif 130 #endif
134 131
135 #elif defined(__DECC) /* Digital/Compaq/hp "ccc" compiler */ 132 #elif defined(__DECC) /* Digital/Compaq/hp "ccc" compiler */
136 133
137 #include <c_asm.h> 134 #include <c_asm.h>
138 #define ASM_ACCEPT_MVI
139 #define ldq_u(a) asm ("ldq_u %v0,0(%a0)", a) 135 #define ldq_u(a) asm ("ldq_u %v0,0(%a0)", a)
140 #define uldq(a) (*(const __unaligned uint64_t *) (a)) 136 #define uldq(a) (*(const __unaligned uint64_t *) (a))
141 #define cmpbge(a, b) asm ("cmpbge %a0,%a1,%v0", a, b) 137 #define cmpbge(a, b) asm ("cmpbge %a0,%a1,%v0", a, b)
142 #define extql(a, b) asm ("extql %a0,%a1,%v0", a, b) 138 #define extql(a, b) asm ("extql %a0,%a1,%v0", a, b)
143 #define extwl(a, b) asm ("extwl %a0,%a1,%v0", a, b) 139 #define extwl(a, b) asm ("extwl %a0,%a1,%v0", a, b)
158 #define perr(a, b) asm ("perr %a0,%a1,%v0", a, b) 154 #define perr(a, b) asm ("perr %a0,%a1,%v0", a, b)
159 #define pklb(a) asm ("pklb %a0,%v0", a) 155 #define pklb(a) asm ("pklb %a0,%v0", a)
160 #define pkwb(a) asm ("pkwb %a0,%v0", a) 156 #define pkwb(a) asm ("pkwb %a0,%v0", a)
161 #define unpkbl(a) asm ("unpkbl %a0,%v0", a) 157 #define unpkbl(a) asm ("unpkbl %a0,%v0", a)
162 #define unpkbw(a) asm ("unpkbw %a0,%v0", a) 158 #define unpkbw(a) asm ("unpkbw %a0,%v0", a)
159 #define wh64(a) asm ("wh64 %a0", a)
163 160
164 #else 161 #else
165 #error "Unknown compiler!" 162 #error "Unknown compiler!"
166 #endif 163 #endif
167 164