mmi.h 5.56 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 AVCODEC_PS2_MMI_H
#define AVCODEC_PS2_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
#define         lq(base, off, reg)        \
63
        __asm__ volatile ("lq " #reg ", %0("#base ")" : : "i" (off) )
64

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

171
#endif /* AVCODEC_PS2_MMI_H */