Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
//===----------------------------------------------------------------------===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
 
9
#ifndef _HEXAGON_CIRC_BREV_INTRINSICS_H_
10
#define _HEXAGON_CIRC_BREV_INTRINSICS_H_ 1
11
 
12
#include <hexagon_protos.h>
13
#include <stdint.h>
14
 
15
/* Circular Load */
16
/* ==========================================================================
17
   Assembly Syntax:       Return=instruction()
18
   C Intrinsic Prototype: void Q6_circ_load_update_D(Word64 dst, Word64 *ptr, UWord32 incr, UWord32 bufsize, UWord32 K)
19
   Instruction Type:      InstructionType
20
   Execution Slots:       SLOT0123
21
   ========================================================================== */
22
#define Q6_circ_load_update_D(dest,ptr,incr,bufsize,K)  \
23
    { ptr = (int64_t *) HEXAGON_circ_ldd (ptr, &(dest), ((((K)+1)<<24)|((bufsize)<<3)), ((incr)*8)); }
24
 
25
/* ==========================================================================
26
   Assembly Syntax:       Return=instruction()
27
   C Intrinsic Prototype: void Q6_circ_load_update_W(Word32 dst, Word32 *ptr, UWord32 incr, UWord32 bufsize, UWord32 K)
28
   Instruction Type:      InstructionType
29
   Execution Slots:       SLOT0123
30
   ========================================================================== */
31
#define Q6_circ_load_update_W(dest,ptr,incr,bufsize,K)  \
32
    { ptr = (int *) HEXAGON_circ_ldw (ptr, &(dest), (((K)<<24)|((bufsize)<<2)), ((incr)*4)); }
33
 
34
/* ==========================================================================
35
   Assembly Syntax:       Return=instruction()
36
   C Intrinsic Prototype: void Q6_circ_load_update_H(Word16 dst, Word16 *ptr, UWord32 incr, UWord32 bufsize, UWord32 K)
37
   Instruction Type:      InstructionType
38
   Execution Slots:       SLOT0123
39
   ========================================================================== */
40
#define Q6_circ_load_update_H(dest,ptr,incr,bufsize,K)  \
41
    { ptr = (int16_t *) HEXAGON_circ_ldh (ptr, &(dest), ((((K)-1)<<24)|((bufsize)<<1)), ((incr)*2)); }
42
 
43
/* ==========================================================================
44
   Assembly Syntax:       Return=instruction()
45
   C Intrinsic Prototype: void Q6_circ_load_update_UH( UWord16 dst,  UWord16 *ptr, UWord32 incr, UWord32 bufsize, UWord32 K)
46
   Instruction Type:      InstructionType
47
   Execution Slots:       SLOT0123
48
   ========================================================================== */
49
#define Q6_circ_load_update_UH(dest,ptr,incr,bufsize,K) \
50
    { ptr = (uint16_t *) HEXAGON_circ_lduh (ptr, &(dest), ((((K)-1)<<24)|((bufsize)<<1)), ((incr)*2)); }
51
 
52
/* ==========================================================================
53
   Assembly Syntax:       Return=instruction()
54
   C Intrinsic Prototype: void Q6_circ_load_update_B(Word8 dst, Word8 *ptr, UWord32 incr, UWord32 bufsize, UWord32 K)
55
   Instruction Type:      InstructionType
56
   Execution Slots:       SLOT0123
57
   ========================================================================== */
58
#define Q6_circ_load_update_B(dest,ptr,incr,bufsize,K)  \
59
    { ptr = (int8_t *) HEXAGON_circ_ldb (ptr, &(dest), ((((K)-2)<<24)|(bufsize)), incr); }
60
 
61
/* ==========================================================================
62
   Assembly Syntax:       Return=instruction()
63
   C Intrinsic Prototype: void  Q6_circ_load_update_UB(UWord8 dst, UWord8 *ptr, UWord32 incr, UWord32 bufsize, UWord32 K)
64
   Instruction Type:      InstructionType
65
   Execution Slots:       SLOT0123
66
   ========================================================================== */
67
#define Q6_circ_load_update_UB(dest,ptr,incr,bufsize,K) \
68
    { ptr = (uint8_t *) HEXAGON_circ_ldub (ptr, &(dest), ((((K)-2)<<24)|(bufsize)), incr); }
69
 
70
/* Circular Store */
71
/* ==========================================================================
72
   Assembly Syntax:       Return=instruction()
73
   C Intrinsic Prototype: void Q6_circ_store_update_D(Word64 *src, Word64 *ptr, UWord32 incr, UWord32 bufsize, UWord32 K)
74
   Instruction Type:      InstructionType
75
   Execution Slots:       SLOT0123
76
   ========================================================================== */
77
#define Q6_circ_store_update_D(src,ptr,incr,bufsize,K)  \
78
    { ptr = (int64_t *) HEXAGON_circ_std (ptr, src, ((((K)+1)<<24)|((bufsize)<<3)), ((incr)*8)); }
79
 
80
/* ==========================================================================
81
   Assembly Syntax:       Return=instruction()
82
   C Intrinsic Prototype: void Q6_circ_store_update_W(Word32 *src, Word32 *ptr, UWord32 incr, UWord32 bufsize, UWord32 K)
83
   Instruction Type:      InstructionType
84
   Execution Slots:       SLOT0123
85
   ========================================================================== */
86
#define Q6_circ_store_update_W(src,ptr,incr,bufsize,K)  \
87
    { ptr = (int *) HEXAGON_circ_stw (ptr, src, (((K)<<24)|((bufsize)<<2)), ((incr)*4)); }
88
 
89
/* ==========================================================================
90
   Assembly Syntax:       Return=instruction()
91
   C Intrinsic Prototype: void Q6_circ_store_update_HL(Word16 *src, Word16 *ptr, UWord32 incr, UWord32 bufsize, UWord32 K)
92
   Instruction Type:      InstructionType
93
   Execution Slots:       SLOT0123
94
   ========================================================================== */
95
#define Q6_circ_store_update_HL(src,ptr,incr,bufsize,K) \
96
    { ptr = (int16_t *) HEXAGON_circ_sth (ptr, src, ((((K)-1)<<24)|((bufsize)<<1)), ((incr)*2)); }
97
 
98
/* ==========================================================================
99
   Assembly Syntax:       Return=instruction()
100
   C Intrinsic Prototype: void Q6_circ_store_update_HH(Word16 *src, Word16 *ptr, UWord32 incr, UWord32 bufsize, UWord32 K)
101
   Instruction Type:      InstructionType
102
   Execution Slots:       SLOT0123
103
   ========================================================================== */
104
#define Q6_circ_store_update_HH(src,ptr,incr,bufsize,K) \
105
    { ptr = (int16_t *) HEXAGON_circ_sthhi (ptr, src, ((((K)-1)<<24)|((bufsize)<<1)), ((incr)*2)); }
106
 
107
/* ==========================================================================
108
   Assembly Syntax:       Return=instruction()
109
   C Intrinsic Prototype: void Q6_circ_store_update_B(Word8 *src, Word8 *ptr, UWord32 I4, UWord32 bufsize,  UWord64 K)
110
   Instruction Type:      InstructionType
111
   Execution Slots:       SLOT0123
112
   ========================================================================== */
113
#define Q6_circ_store_update_B(src,ptr,incr,bufsize,K)  \
114
    { ptr = (int8_t *) HEXAGON_circ_stb (ptr, src, ((((K)-2)<<24)|(bufsize)), incr); }
115
 
116
 
117
/* Bit Reverse Load */
118
/* ==========================================================================
119
   Assembly Syntax:       Return=instruction()
120
   C Intrinsic Prototype: void Q6_bitrev_load_update_D(Word64 dst, Word64 *ptr, UWord32 Iu4)
121
   Instruction Type:      InstructionType
122
   Execution Slots:       SLOT0123
123
   ========================================================================== */
124
#define Q6_bitrev_load_update_D(dest,ptr,log2bufsize) \
125
    { ptr = (int64_t *) HEXAGON_brev_ldd (ptr, &(dest), (1<<(16-((log2bufsize) + 3)))); }
126
 
127
/* ==========================================================================
128
   Assembly Syntax:       Return=instruction()
129
   C Intrinsic Prototype: void Q6_bitrev_load_update_W(Word32 dst, Word32 *ptr, UWord32 Iu4)
130
   Instruction Type:      InstructionType
131
   Execution Slots:       SLOT0123
132
   ========================================================================== */
133
#define Q6_bitrev_load_update_W(dest,ptr,log2bufsize) \
134
    { ptr = (int *) HEXAGON_brev_ldw (ptr, &(dest), (1<<(16-((log2bufsize) + 2)))); }
135
 
136
/* ==========================================================================
137
   Assembly Syntax:       Return=instruction()
138
   C Intrinsic Prototype: void Q6_bitrev_load_update_H(Word16 dst, Word16 *ptr, UWord32 Iu4)
139
   Instruction Type:      InstructionType
140
   Execution Slots:       SLOT0123
141
   ========================================================================== */
142
#define Q6_bitrev_load_update_H(dest,ptr,log2bufsize) \
143
    { ptr = (int16_t *) HEXAGON_brev_ldh (ptr, &(dest), (1<<(16-((log2bufsize) + 1)))); }
144
 
145
/* ==========================================================================
146
   Assembly Syntax:       Return=instruction()
147
   C Intrinsic Prototype: void Q6_bitrev_load_update_UH(UWord16 dst,  UWord16 *ptr, UWord32 Iu4)
148
   Instruction Type:      InstructionType
149
   Execution Slots:       SLOT0123
150
   ========================================================================== */
151
#define Q6_bitrev_load_update_UH(dest,ptr,log2bufsize) \
152
    { ptr = (uint16_t *) HEXAGON_brev_lduh (ptr, &(dest), (1<<(16-((log2bufsize) + 1)))); }
153
 
154
/* ==========================================================================
155
   Assembly Syntax:       Return=instruction()
156
   C Intrinsic Prototype: void Q6_bitrev_load_update_B(Word8 dst, Word8 *ptr, UWord32 Iu4)
157
   Instruction Type:      InstructionType
158
   Execution Slots:       SLOT0123
159
   ========================================================================== */
160
#define Q6_bitrev_load_update_B(dest,ptr,log2bufsize) \
161
    { ptr = (int8_t *) HEXAGON_brev_ldb (ptr, &(dest), (1<<(16-((log2bufsize))))); }
162
 
163
/* ==========================================================================
164
   Assembly Syntax:       Return=instruction()
165
   C Intrinsic Prototype: void Q6_bitrev_load_update_UB(UWord8 dst, UWord8 *ptr, UWord32 Iu4)
166
   Instruction Type:      InstructionType
167
   Execution Slots:       SLOT0123
168
   ========================================================================== */
169
#define Q6_bitrev_load_update_UB(dest,ptr,log2bufsize) \
170
    { ptr = (uint8_t *) HEXAGON_brev_ldub (ptr, &(dest), (1<<(16-((log2bufsize))))); }
171
 
172
/* Bit Reverse Store */
173
 
174
/* ==========================================================================
175
   Assembly Syntax:       Return=instruction()
176
   C Intrinsic Prototype: void Q6_bitrev_store_update_D(Word64 *src, Word64 *ptr, UWord32 Iu4)
177
   Instruction Type:      InstructionType
178
   Execution Slots:       SLOT0123
179
   ========================================================================== */
180
#define Q6_bitrev_store_update_D(src,ptr,log2bufsize)   \
181
    { ptr = (int64_t *) HEXAGON_brev_std (ptr, src, (1<<(16-((log2bufsize) + 3)))); }
182
 
183
/* ==========================================================================
184
   Assembly Syntax:       Return=instruction()
185
   C Intrinsic Prototype: void Q6_bitrev_store_update_W(Word32 *src, Word32 *ptr, UWord32 Iu4)
186
   Instruction Type:      InstructionType
187
   Execution Slots:       SLOT0123
188
   ========================================================================== */
189
#define Q6_bitrev_store_update_W(src,ptr,log2bufsize)   \
190
    { ptr = (int *) HEXAGON_brev_stw (ptr, src, (1<<(16-((log2bufsize) + 2)))); }
191
 
192
/* ==========================================================================
193
   Assembly Syntax:       Return=instruction()
194
   C Intrinsic Prototype: void Q6_bitrev_store_update_HL(Word16 *src, Word16 *ptr, Word32 Iu4)
195
   Instruction Type:      InstructionType
196
   Execution Slots:       SLOT0123
197
   ========================================================================== */
198
#define Q6_bitrev_store_update_HL(src,ptr,log2bufsize)   \
199
    { ptr = (int16_t *) HEXAGON_brev_sth (ptr, src, (1<<(16-((log2bufsize) + 1)))); }
200
 
201
/* ==========================================================================
202
   Assembly Syntax:       Return=instruction()
203
   C Intrinsic Prototype: void Q6_bitrev_store_update_HH(Word16 *src, Word16 *ptr, UWord32 Iu4)
204
   Instruction Type:      InstructionType
205
   Execution Slots:       SLOT0123
206
   ========================================================================== */
207
#define Q6_bitrev_store_update_HH(src,ptr,log2bufsize)   \
208
    { ptr = (int16_t *) HEXAGON_brev_sthhi (ptr, src, (1<<(16-((log2bufsize) + 1)))); }
209
 
210
/* ==========================================================================
211
   Assembly Syntax:       Return=instruction()
212
   C Intrinsic Prototype: void Q6_bitrev_store_update_B(Word8 *src, Word8 *ptr, UWord32 Iu4)
213
   Instruction Type:      InstructionType
214
   Execution Slots:       SLOT0123
215
   ========================================================================== */
216
#define Q6_bitrev_store_update_B(src,ptr,log2bufsize)   \
217
    { ptr = (int8_t *) HEXAGON_brev_stb (ptr, src, (1<<(16-((log2bufsize))))); }
218
 
219
 
220
#define HEXAGON_circ_ldd  __builtin_circ_ldd
221
#define HEXAGON_circ_ldw  __builtin_circ_ldw
222
#define HEXAGON_circ_ldh  __builtin_circ_ldh
223
#define HEXAGON_circ_lduh __builtin_circ_lduh
224
#define HEXAGON_circ_ldb  __builtin_circ_ldb
225
#define HEXAGON_circ_ldub __builtin_circ_ldub
226
 
227
 
228
#define HEXAGON_circ_std  __builtin_circ_std
229
#define HEXAGON_circ_stw  __builtin_circ_stw
230
#define HEXAGON_circ_sth  __builtin_circ_sth
231
#define HEXAGON_circ_sthhi __builtin_circ_sthhi
232
#define HEXAGON_circ_stb  __builtin_circ_stb
233
 
234
 
235
#define HEXAGON_brev_ldd  __builtin_brev_ldd
236
#define HEXAGON_brev_ldw  __builtin_brev_ldw
237
#define HEXAGON_brev_ldh  __builtin_brev_ldh
238
#define HEXAGON_brev_lduh __builtin_brev_lduh
239
#define HEXAGON_brev_ldb  __builtin_brev_ldb
240
#define HEXAGON_brev_ldub __builtin_brev_ldub
241
 
242
#define HEXAGON_brev_std  __builtin_brev_std
243
#define HEXAGON_brev_stw  __builtin_brev_stw
244
#define HEXAGON_brev_sth  __builtin_brev_sth
245
#define HEXAGON_brev_sthhi __builtin_brev_sthhi
246
#define HEXAGON_brev_stb  __builtin_brev_stb
247
 
248
#ifdef __HVX__
249
/* ==========================================================================
250
   Assembly Syntax:       if (Qt) vmem(Rt+#0) = Vs
251
   C Intrinsic Prototype: void Q6_vmaskedstoreq_QAV(HVX_VectorPred Qt, HVX_VectorAddress A, HVX_Vector Vs)
252
   Instruction Type:      COPROC_VMEM
253
   Execution Slots:       SLOT0
254
   ========================================================================== */
255
 
256
#define Q6_vmaskedstoreq_QAV __BUILTIN_VECTOR_WRAP(__builtin_HEXAGON_V6_vmaskedstoreq)
257
 
258
/* ==========================================================================
259
   Assembly Syntax:       if (!Qt) vmem(Rt+#0) = Vs
260
   C Intrinsic Prototype: void Q6_vmaskedstorenq_QAV(HVX_VectorPred Qt, HVX_VectorAddress A, HVX_Vector Vs)
261
   Instruction Type:      COPROC_VMEM
262
   Execution Slots:       SLOT0
263
   ========================================================================== */
264
 
265
#define Q6_vmaskedstorenq_QAV __BUILTIN_VECTOR_WRAP(__builtin_HEXAGON_V6_vmaskedstorenq)
266
 
267
/* ==========================================================================
268
   Assembly Syntax:       if (Qt) vmem(Rt+#0):nt = Vs
269
   C Intrinsic Prototype: void Q6_vmaskedstorentq_QAV(HVX_VectorPred Qt, HVX_VectorAddress A, HVX_Vector Vs)
270
   Instruction Type:      COPROC_VMEM
271
   Execution Slots:       SLOT0
272
   ========================================================================== */
273
 
274
#define Q6_vmaskedstorentq_QAV __BUILTIN_VECTOR_WRAP(__builtin_HEXAGON_V6_vmaskedstorentq)
275
 
276
/* ==========================================================================
277
   Assembly Syntax:       if (!Qt) vmem(Rt+#0):nt = Vs
278
   C Intrinsic Prototype: void Q6_vmaskedstorentnq_QAV(HVX_VectorPred Qt, HVX_VectorAddress A, HVX_Vector Vs)
279
   Instruction Type:      COPROC_VMEM
280
   Execution Slots:       SLOT0
281
   ========================================================================== */
282
 
283
#define Q6_vmaskedstorentnq_QAV __BUILTIN_VECTOR_WRAP(__builtin_HEXAGON_V6_vmaskedstorentnq)
284
 
285
#endif
286
 
287
 
288
#endif  /* #ifndef _HEXAGON_CIRC_BREV_INTRINSICS_H_ */
289
 
290
#ifdef __NOT_DEFINED__
291
/*** comment block template  ***/
292
/* ==========================================================================
293
   Assembly Syntax:       Return=instruction()
294
   C Intrinsic Prototype: ReturnType Intrinsic(ParamType Rs, ParamType Rt)
295
   Instruction Type:      InstructionType
296
   Execution Slots:       SLOT0123
297
   ========================================================================== */
298
#endif /***  __NOT_DEFINED__  ***/