mmi.h 5.78 KB
Newer Older
1 2 3
/*
 * copyright (c) 2002 Leon van Stuivenberg
 *
4
 * This file is part of Libav.
5
 *
6
 * Libav is free software; you can redistribute it and/or
7 8
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
9
 * version 2.1 of the License, or (at your option) any later version.
10
 *
11
 * Libav is distributed in the hope that it will be useful,
12 13 14 15 16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
17
 * License along with Libav; if not, write to the Free Software
18 19 20
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */

21 22
#ifndef AVCODEC_MIPS_MMI_H
#define AVCODEC_MIPS_MMI_H
23

24 25 26 27 28 29 30 31
#include <stdint.h>

#include "libavcodec/dsputil.h"

void ff_mmi_idct_put(uint8_t *dest, int line_size, DCTELEM *block);
void ff_mmi_idct_add(uint8_t *dest, int line_size, DCTELEM *block);
void ff_mmi_idct(DCTELEM *block);

32 33 34 35
#define align16 __attribute__ ((aligned (16)))

/*
#define r0 $zero
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
#define r1 $at          //assembler!
#define r2 $v0          //return
#define r3 $v1          //return
#define r4 $a0          //arg
#define r5 $a1          //arg
#define r6 $a2          //arg
#define r7 $a3          //arg
#define r8 $t0          //temp
#define r9 $t1          //temp
#define r10 $t2         //temp
#define r11 $t3         //temp
#define r12 $t4         //temp
#define r13 $t5         //temp
#define r14 $t6         //temp
#define r15 $t7         //temp
#define r16 $s0         //saved temp
#define r17 $s1         //saved temp
#define r18 $s2         //saved temp
#define r19 $s3         //saved temp
#define r20 $s4         //saved temp
#define r21 $s5         //saved temp
#define r22 $s6         //saved temp
#define r23 $s7         //saved temp
#define r24 $t8         //temp
#define r25 $t9         //temp
#define r26 $k0         //kernel
#define r27 $k1         //kernel
#define r28 $gp         //global ptr
#define r29 $sp         //stack ptr
#define r30 $fp         //frame ptr
#define r31 $ra         //return addr
67 68 69
*/


70
#define         lq(base, off, reg)        \
71
        __asm__ volatile ("lq " #reg ", %0("#base ")" : : "i" (off) )
72

73
#define         lq2(mem, reg)        \
74
        __asm__ volatile ("lq " #reg ", %0" : : "r" (mem))
75

76
#define         sq(reg, off, base)        \
77
        __asm__ volatile ("sq " #reg ", %0("#base ")" : : "i" (off) )
78

79
/*
80
#define         ld(base, off, reg)        \
81
        __asm__ volatile ("ld " #reg ", " #off "("#base ")")
82 83
*/

84
#define         ld3(base, off, reg)        \
85
        __asm__ volatile (".word %0" : : "i" ( 0xdc000000 | (base<<21) | (reg<<16) | (off)))
86

87
#define         ldr3(base, off, reg)        \
88
        __asm__ volatile (".word %0" : : "i" ( 0x6c000000 | (base<<21) | (reg<<16) | (off)))
89

90
#define         ldl3(base, off, reg)        \
91
        __asm__ volatile (".word %0" : : "i" ( 0x68000000 | (base<<21) | (reg<<16) | (off)))
92

93
/*
94
#define         sd(reg, off, base)        \
95
        __asm__ volatile ("sd " #reg ", " #off "("#base ")")
96 97
*/
//seems assembler has bug encoding mnemonic 'sd', so DIY
98
#define         sd3(reg, off, base)        \
99
        __asm__ volatile (".word %0" : : "i" ( 0xfc000000 | (base<<21) | (reg<<16) | (off)))
100

101
#define         sw(reg, off, base)        \
102
        __asm__ volatile ("sw " #reg ", " #off "("#base ")")
103

104
#define         sq2(reg, mem)        \
105
        __asm__ volatile ("sq " #reg ", %0" : : "m" (*(mem)))
106

107
#define         pinth(rs, rt, rd) \
108
        __asm__ volatile ("pinth  " #rd ", " #rs ", " #rt )
109

110
#define         phmadh(rs, rt, rd) \
111
        __asm__ volatile ("phmadh " #rd ", " #rs ", " #rt )
112

113
#define         pcpyud(rs, rt, rd) \
114
        __asm__ volatile ("pcpyud " #rd ", " #rs ", " #rt )
115

116
#define         pcpyld(rs, rt, rd) \
117
        __asm__ volatile ("pcpyld " #rd ", " #rs ", " #rt )
118

119
#define         pcpyh(rt, rd) \
120
        __asm__ volatile ("pcpyh  " #rd ", " #rt )
121

122
#define         paddw(rs, rt, rd) \
123
        __asm__ volatile ("paddw  " #rd ", " #rs ", " #rt )
124

125
#define         pextlw(rs, rt, rd) \
126
        __asm__ volatile ("pextlw " #rd ", " #rs ", " #rt )
127

128
#define         pextuw(rs, rt, rd) \
129
        __asm__ volatile ("pextuw " #rd ", " #rs ", " #rt )
130

131
#define         pextlh(rs, rt, rd) \
132
        __asm__ volatile ("pextlh " #rd ", " #rs ", " #rt )
133

134
#define         pextuh(rs, rt, rd) \
135
        __asm__ volatile ("pextuh " #rd ", " #rs ", " #rt )
136

137
#define         psubw(rs, rt, rd) \
138
        __asm__ volatile ("psubw  " #rd ", " #rs ", " #rt )
139

140
#define         psraw(rt, sa, rd) \
141
        __asm__ volatile ("psraw  " #rd ", " #rt ", %0" : : "i"(sa) )
142

143
#define         ppach(rs, rt, rd) \
144
        __asm__ volatile ("ppach  " #rd ", " #rs ", " #rt )
145

146
#define         ppacb(rs, rt, rd) \
147
        __asm__ volatile ("ppacb  " #rd ", " #rs ", " #rt )
148

149
#define         prevh(rt, rd) \
150
        __asm__ volatile ("prevh  " #rd ", " #rt )
151

152
#define         pmulth(rs, rt, rd) \
153
        __asm__ volatile ("pmulth " #rd ", " #rs ", " #rt )
154

155
#define         pmaxh(rs, rt, rd) \
156
        __asm__ volatile ("pmaxh " #rd ", " #rs ", " #rt )
157

158
#define         pminh(rs, rt, rd) \
159
        __asm__ volatile ("pminh " #rd ", " #rs ", " #rt )
160

161
#define         pinteh(rs, rt, rd) \
162
        __asm__ volatile ("pinteh  " #rd ", " #rs ", " #rt )
163

164
#define         paddh(rs, rt, rd) \
165
        __asm__ volatile ("paddh  " #rd ", " #rs ", " #rt )
166

167
#define         psubh(rs, rt, rd) \
168
        __asm__ volatile ("psubh  " #rd ", " #rs ", " #rt )
169

170
#define         psrah(rt, sa, rd) \
171
        __asm__ volatile ("psrah  " #rd ", " #rt ", %0" : : "i"(sa) )
172

173
#define         pmfhl_uw(rd) \
174
        __asm__ volatile ("pmfhl.uw  " #rd)
175

176
#define         pextlb(rs, rt, rd) \
177
        __asm__ volatile ("pextlb  " #rd ", " #rs ", " #rt )
178

179
#endif /* AVCODEC_MIPS_MMI_H */