Add the FRV port
[official-gcc.git] / gcc / config / frv / media.h
blob9b0c70ed3e60bb6fc1acf529425c059a8c039143
1 /* VENUS Family C Library V40L00 */
2 /* COPYRIGHT(C) FUJITSU LIMITED 1993-1999 */
4 #ifndef __MEDIA_H__
5 #define __MEDIA_H__
7 #ifdef __STDC__
8 #define __MEDIA_PASTE__(A,B) __MEDIA_XPASTE__(A,B)
9 #define __MEDIA_XPASTE__(A,B) A ## B
10 #else
11 #define __MEDIA_PASTE__(A,B) A/**/B
12 #endif
14 /* Floating Point Condition Code Field Type */
15 typedef enum
17 FCC0 = 0,
18 FCC1,
19 FCC2,
20 FCC3
21 } FCC_T;
23 /* Accumulator Type */
24 #define ACC0 0
25 #define ACC1 1
26 #define ACC2 2
27 #define ACC3 3
28 #define ACC4 4
29 #define ACC5 5
30 #define ACC6 6
31 #define ACC7 7
33 typedef unsigned char __mubyte;
34 typedef unsigned short __muhalf;
35 typedef unsigned long __muword1;
36 typedef unsigned long long __muword2;
38 typedef signed short __mshalf;
39 typedef signed long __msword1;
40 typedef signed long long __msword2;
42 typedef int ACC_T;
44 register __muword1 __acc0 __asm__("acc0");
45 register __muword1 __acc1 __asm__("acc1");
46 register __muword1 __acc2 __asm__("acc2");
47 register __muword1 __acc3 __asm__("acc3");
48 register __muword1 __acc4 __asm__("acc4");
49 register __muword1 __acc5 __asm__("acc5");
50 register __muword1 __acc6 __asm__("acc6");
51 register __muword1 __acc7 __asm__("acc7");
53 #define __ACC(N) __MEDIA_PASTE__(__acc,N)
55 /* Accumulator Guard Type */
56 #define ACCG0 0
57 #define ACCG1 1
58 #define ACCG2 2
59 #define ACCG3 3
60 #define ACCG4 4
61 #define ACCG5 5
62 #define ACCG6 6
63 #define ACCG7 7
65 typedef int ACCG_T;
67 register __mubyte __accg0 __asm__("accg0");
68 register __mubyte __accg1 __asm__("accg1");
69 register __mubyte __accg2 __asm__("accg2");
70 register __mubyte __accg3 __asm__("accg3");
71 register __mubyte __accg4 __asm__("accg4");
72 register __mubyte __accg5 __asm__("accg5");
73 register __mubyte __accg6 __asm__("accg6");
74 register __mubyte __accg7 __asm__("accg7");
76 #define __ACCG(N) __MEDIA_PASTE__(__accg,N)
78 /* 12-bit Immediate Type */
79 typedef int IMM12;
81 /* 6-bit Immediate Type */
82 typedef int IMM6;
84 /* 5-bit Immediate Type */
85 typedef int IMM5;
87 /* 5-bit Unsigned Immediate Type */
88 typedef int UIMM5;
90 /* 4-bit Unsigned Immediate Type */
91 typedef int UIMM4;
93 /* 1-bit Unsigned Immediate Type */
94 typedef int UIMM1;
96 /* Media Logical (Word) */
97 extern __muword1 __MAND(__muword1, __muword1);
98 extern __muword1 __MOR(__muword1, __muword1);
99 extern __muword1 __MXOR(__muword1, __muword1);
100 extern __muword1 __MNOT(__muword1);
102 /* Media Rotate (Word) */
103 extern __muword1 __MROTLI(__muword1, UIMM5);
104 extern __muword1 __MROTRI(__muword1, UIMM5);
106 /* Media Word Cut */
107 extern __muword1 __MWCUT(__muword2, __muword1);
109 /* Media Average (Halfword Dual) */
110 extern __muword1 __MAVEH(__muword1, __muword1);
112 /* Media Shift (Halfword Dual) */
113 extern __muword1 __MSLLHI(__muword1, UIMM4);
114 extern __muword1 __MSRLHI(__muword1, UIMM4);
115 extern __msword1 __MSRAHI(__msword1, UIMM4);
117 /* Media Saturation (Halfword Dual) */
118 extern __msword1 __MSATHS(__msword1, __msword1);
119 extern __muword1 __MSATHU(__muword1, __muword1);
121 #if 0 /* These are not supported. */
122 /* Media Dual Compare (Halfword Dual) */
123 extern void __MCMPSH(FCC_T, __msword1, __msword1);
124 extern void __MCMPUH(FCC_T, __muword1, __muword1);
125 #endif
127 /* Media Dual Saturation Add/Sub (Halfword Dual) */
128 extern __msword1 __MADDHSS(__msword1, __msword1);
129 extern __muword1 __MADDHUS(__muword1, __muword1);
130 extern __msword1 __MSUBHSS(__msword1, __msword1);
131 extern __muword1 __MSUBHUS(__muword1, __muword1);
133 /* Media Dual Mult (Halfword Dual) */
134 extern void __MMULHS(ACC_T, __msword1, __msword1);
135 extern void __MMULHU(ACC_T, __muword1, __muword1);
137 /* Media Dual Cross Mult (Halfword Dual) */
138 extern void __MMULXHS(ACC_T, __msword1, __msword1);
139 extern void __MMULXHU(ACC_T, __muword1, __muword1);
141 /* Media Dual Mult & Add (Halfword Dual) */
142 extern void __MMACHS(ACC_T, __msword1, __msword1);
143 extern void __MMACHU(ACC_T, __muword1, __muword1);
145 /* Media Dual Mult & Sub (Halfword Dual) */
146 extern void __MMRDHS(ACC_T, __msword1, __msword1);
147 extern void __MMRDHU(ACC_T, __muword1, __muword1);
149 /* Media Quad Saturation Add/Sub (Halfword Quad) */
150 extern __msword2 __MQADDHSS(__msword2, __msword2);
151 extern __muword2 __MQADDHUS(__muword2, __muword2);
152 extern __msword2 __MQSUBHSS(__msword2, __msword2);
153 extern __muword2 __MQSUBHUS(__muword2, __muword2);
155 /* Media Quad Mult (Halfword Quad) */
156 extern void __MQMULHS(ACC_T, __msword2, __msword2);
157 extern void __MQMULHU(ACC_T, __muword2, __muword2);
159 /* Media Quad Cross Mult (Halfword Quad) */
160 extern void __MQMULXHS(ACC_T, __msword2, __msword2);
161 extern void __MQMULXHU(ACC_T, __muword2, __muword2);
163 /* Media Quad Mult & Add (Halfword Quad) */
164 extern void __MQMACHS(ACC_T, __msword2, __msword2);
165 extern void __MQMACHU(ACC_T, __muword2, __muword2);
167 /* Media Dual Mult & Add for Complex (Halfword Dual) */
168 extern void __MCPXRS(ACC_T, __msword1, __msword1);
169 extern void __MCPXRU(ACC_T, __muword1, __muword1);
170 extern void __MCPXIS(ACC_T, __msword1, __msword1);
171 extern void __MCPXIU(ACC_T, __muword1, __muword1);
173 /* Media Quad Mult & Add for Complex (Halfword Quad) */
174 extern void __MQCPXRS(ACC_T, __msword2, __msword2);
175 extern void __MQCPXRU(ACC_T, __muword2, __muword2);
176 extern void __MQCPXIS(ACC_T, __msword2, __msword2);
177 extern void __MQCPXIU(ACC_T, __muword2, __muword2);
179 /* Media Cut */
180 extern __muword1 __MCUT(ACC_T, __muword1);
181 extern __muword1 __MCUTSS(ACC_T, __msword1);
183 /* Media Halfword Expand */
184 extern __muword1 __MEXPDHW(__muword1, UIMM1);
185 extern __muword2 __MEXPDHD(__muword1, UIMM1);
187 /* Media Halfword Pack/Unpack */
188 extern __muword1 __MPACKH(__muhalf, __muhalf);
189 extern __muword2 __MUNPACKH(__muword1);
191 /* Media Halfword Pack/Unpack (Dual) */
192 extern __muword2 __MDPACKH(__muword2, __muword2);
193 extern void __MDUNPACKH(__muword1[4], __muword2);
195 /* Media Byte-Halfword Convert */
196 extern __muword2 __MBTOH(__muword1);
197 extern __muword1 __MHTOB(__muword2);
198 extern void __MBTOHE(__muword1[4], __muword1);
200 /* Media Accumulator Clear */
201 extern void __MCLRACC(ACC_T);
202 extern void __MCLRACCA(void);
204 /* Media Accumlator Read/Write */
205 extern __muword1 __MRDACC(ACC_T);
206 extern __muword1 __MRDACCG(ACCG_T);
207 extern void __MWTACC(ACC_T, __muword1);
208 extern void __MWTACCG(ACCG_T, __muword1);
210 /* Media Custom */
211 extern __muword1 __Mcop1(__muword1, __muword1);
212 extern __muword1 __Mcop2(__muword1, __muword1);
214 /* Media Trap */
215 extern void __MTRAP(void);
217 /* The following are available on the FR400. The compiler will report an
218 error if an attempt is made to use them in FR500 code. */
220 /* Media Multiply And Add (Halfword) */
221 extern void __MQXMACHS(ACC_T, __msword2, __msword2);
222 extern void __MQXMACXHS(ACC_T, __msword2, __msword2);
223 extern void __MQMACXHS(ACC_T, __msword2, __msword2);
225 /* Media Accumulator Addition/Subtraction */
226 extern void __MADDACCS(ACC_T, ACC_T);
227 extern void __MSUBACCS(ACC_T, ACC_T);
228 extern void __MASACCS(ACC_T, ACC_T);
229 extern void __MDADDACCS(ACC_T, ACC_T);
230 extern void __MDSUBACCS(ACC_T, ACC_T);
231 extern void __MDASACCS(ACC_T, ACC_T);
233 /* Media Dual Absolute (Halfword) */
234 extern __muword1 __MABSHS(__msword1);
236 /* Media Dual Rotate Left */
237 extern __muword2 __MDROTLI(__muword2, UIMM5);
239 /* Media Dual Coupling */
240 extern __muword1 __MCPLHI(__muword2, UIMM4);
241 extern __muword1 __MCPLI(__muword2, UIMM5);
243 /* Media Dual Cut And Signed Saturation */
244 extern __muword2 __MDCUTSSI(ACC_T, IMM6);
246 /* Media Quad Saturation (Halfword) */
247 extern __msword2 __MQSATHS(__msword2, __msword2);
249 /* Media SETHI/SETLO */
250 extern __msword1 __MHSETLOS(__msword1, IMM12);
251 extern __msword1 __MHSETHIS(__msword1, IMM12);
252 extern __msword1 __MHDSETS(IMM12);
253 extern __muword1 __MHSETLOH(__muword1, IMM5);
254 extern __muword1 __MHSETHIH(__muword1, IMM5);
255 extern __muword1 __MHDSETH(__muword1, IMM5);
256 #endif /* __MEDIA_H__ */