1 /* VENUS Family C Library V40L00 */
2 /* COPYRIGHT(C) FUJITSU LIMITED 1993-1999 */
8 #define __MEDIA_PASTE__(A,B) __MEDIA_XPASTE__(A,B)
9 #define __MEDIA_XPASTE__(A,B) A ## B
11 #define __MEDIA_PASTE__(A,B) A/**/B
14 /* Floating Point Condition Code Field Type */
23 /* Accumulator Type */
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
;
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 */
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 */
81 /* 6-bit Immediate Type */
84 /* 5-bit Immediate Type */
87 /* 5-bit Unsigned Immediate Type */
90 /* 4-bit Unsigned Immediate Type */
93 /* 1-bit Unsigned Immediate Type */
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
);
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
);
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
);
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
);
211 extern __muword1
__Mcop1(__muword1
, __muword1
);
212 extern __muword1
__Mcop2(__muword1
, __muword1
);
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__ */