mmi.h 5.68 KB
Newer Older
1 2 3
/*
 * copyright (c) 2002 Leon van Stuivenberg
 *
4 5 6
 * This file is part of FFmpeg.
 *
 * FFmpeg 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
 * FFmpeg 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 FFmpeg; 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 FFMPEG_MMI_H
#define FFMPEG_MMI_H
23 24 25 26 27

#define align16 __attribute__ ((aligned (16)))

/*
#define r0 $zero
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
#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
59 60 61
*/


62 63
#define         lq(base, off, reg)        \
        __asm__ __volatile__ ("lq " #reg ", %0("#base ")" : : "i" (off) )
64

65 66
#define         lq2(mem, reg)        \
        __asm__ __volatile__ ("lq " #reg ", %0" : : "r" (mem))
67

68 69
#define         sq(reg, off, base)        \
        __asm__ __volatile__ ("sq " #reg ", %0("#base ")" : : "i" (off) )
70

71
/*
72 73
#define         ld(base, off, reg)        \
        __asm__ __volatile__ ("ld " #reg ", " #off "("#base ")")
74 75
*/

76 77
#define         ld3(base, off, reg)        \
        __asm__ __volatile__ (".word %0" : : "i" ( 0xdc000000 | (base<<21) | (reg<<16) | (off)))
78

79 80
#define         ldr3(base, off, reg)        \
        __asm__ __volatile__ (".word %0" : : "i" ( 0x6c000000 | (base<<21) | (reg<<16) | (off)))
81

82 83
#define         ldl3(base, off, reg)        \
        __asm__ __volatile__ (".word %0" : : "i" ( 0x68000000 | (base<<21) | (reg<<16) | (off)))
84

85
/*
86 87
#define         sd(reg, off, base)        \
        __asm__ __volatile__ ("sd " #reg ", " #off "("#base ")")
88 89
*/
//seems assembler has bug encoding mnemonic 'sd', so DIY
90 91
#define         sd3(reg, off, base)        \
        __asm__ __volatile__ (".word %0" : : "i" ( 0xfc000000 | (base<<21) | (reg<<16) | (off)))
92

93 94
#define         sw(reg, off, base)        \
        __asm__ __volatile__ ("sw " #reg ", " #off "("#base ")")
95

96 97
#define         sq2(reg, mem)        \
        __asm__ __volatile__ ("sq " #reg ", %0" : : "m" (*(mem)))
98

99 100
#define         pinth(rs, rt, rd) \
        __asm__ __volatile__ ("pinth  " #rd ", " #rs ", " #rt )
101

102 103
#define         phmadh(rs, rt, rd) \
        __asm__ __volatile__ ("phmadh " #rd ", " #rs ", " #rt )
104

105 106
#define         pcpyud(rs, rt, rd) \
        __asm__ __volatile__ ("pcpyud " #rd ", " #rs ", " #rt )
107

108 109
#define         pcpyld(rs, rt, rd) \
        __asm__ __volatile__ ("pcpyld " #rd ", " #rs ", " #rt )
110

111 112
#define         pcpyh(rt, rd) \
        __asm__ __volatile__ ("pcpyh  " #rd ", " #rt )
113

114 115
#define         paddw(rs, rt, rd) \
        __asm__ __volatile__ ("paddw  " #rd ", " #rs ", " #rt )
116

117 118
#define         pextlw(rs, rt, rd) \
        __asm__ __volatile__ ("pextlw " #rd ", " #rs ", " #rt )
119

120 121
#define         pextuw(rs, rt, rd) \
        __asm__ __volatile__ ("pextuw " #rd ", " #rs ", " #rt )
122

123 124
#define         pextlh(rs, rt, rd) \
        __asm__ __volatile__ ("pextlh " #rd ", " #rs ", " #rt )
125

126 127
#define         pextuh(rs, rt, rd) \
        __asm__ __volatile__ ("pextuh " #rd ", " #rs ", " #rt )
128

129 130
#define         psubw(rs, rt, rd) \
        __asm__ __volatile__ ("psubw  " #rd ", " #rs ", " #rt )
131

132 133
#define         psraw(rt, sa, rd) \
        __asm__ __volatile__ ("psraw  " #rd ", " #rt ", %0" : : "i"(sa) )
134

135 136
#define         ppach(rs, rt, rd) \
        __asm__ __volatile__ ("ppach  " #rd ", " #rs ", " #rt )
137

138 139
#define         ppacb(rs, rt, rd) \
        __asm__ __volatile__ ("ppacb  " #rd ", " #rs ", " #rt )
140

141 142
#define         prevh(rt, rd) \
        __asm__ __volatile__ ("prevh  " #rd ", " #rt )
143

144 145
#define         pmulth(rs, rt, rd) \
        __asm__ __volatile__ ("pmulth " #rd ", " #rs ", " #rt )
146

147 148
#define         pmaxh(rs, rt, rd) \
        __asm__ __volatile__ ("pmaxh " #rd ", " #rs ", " #rt )
149

150 151
#define         pminh(rs, rt, rd) \
        __asm__ __volatile__ ("pminh " #rd ", " #rs ", " #rt )
152

153 154
#define         pinteh(rs, rt, rd) \
        __asm__ __volatile__ ("pinteh  " #rd ", " #rs ", " #rt )
155

156 157
#define         paddh(rs, rt, rd) \
        __asm__ __volatile__ ("paddh  " #rd ", " #rs ", " #rt )
158

159 160
#define         psubh(rs, rt, rd) \
        __asm__ __volatile__ ("psubh  " #rd ", " #rs ", " #rt )
161

162 163
#define         psrah(rt, sa, rd) \
        __asm__ __volatile__ ("psrah  " #rd ", " #rt ", %0" : : "i"(sa) )
164

165 166
#define         pmfhl_uw(rd) \
        __asm__ __volatile__ ("pmfhl.uw  " #rd)
167

168 169
#define         pextlb(rs, rt, rd) \
        __asm__ __volatile__ ("pextlb  " #rd ", " #rs ", " #rt )
170

171
#endif /* FFMPEG_MMI_H */