30 #define __UPX_BELE_H 1 37 inline unsigned get_be16(
const void *p)
39 #if defined(ACC_UA_GET_BE16) 40 return ACC_UA_GET_BE16(p);
42 return acc_ua_get_be16(p);
46 inline void set_be16(
void *p,
unsigned v)
48 #if defined(ACC_UA_SET_BE16) 49 ACC_UA_SET_BE16(p, v);
51 acc_ua_set_be16(p, v);
55 inline unsigned get_be24(
const void *p)
57 #if defined(ACC_UA_GET_BE24) 58 return ACC_UA_GET_BE24(p);
60 return acc_ua_get_be24(p);
64 inline void set_be24(
void *p,
unsigned v)
66 #if defined(ACC_UA_SET_BE24) 67 ACC_UA_SET_BE24(p, v);
69 acc_ua_set_be24(p, v);
73 inline unsigned get_be32(
const void *p)
75 #if defined(ACC_UA_GET_BE32) 76 return ACC_UA_GET_BE32(p);
78 return acc_ua_get_be32(p);
82 inline void set_be32(
void *p,
unsigned v)
84 #if defined(ACC_UA_SET_BE32) 85 ACC_UA_SET_BE32(p, v);
87 acc_ua_set_be32(p, v);
91 inline upx_uint64_t get_be64(
const void *p)
93 #if defined(ACC_UA_GET_BE64) 94 return ACC_UA_GET_BE64(p);
96 return acc_ua_get_be64(p);
100 inline void set_be64(
void *p, upx_uint64_t v)
102 #if defined(ACC_UA_SET_BE64) 103 ACC_UA_SET_BE64(p, v);
105 acc_ua_set_be64(p, v);
109 inline unsigned get_le16(
const void *p)
111 #if defined(ACC_UA_GET_LE16) 112 return ACC_UA_GET_LE16(p);
114 return acc_ua_get_le16(p);
118 inline void set_le16(
void *p,
unsigned v)
120 #if defined(ACC_UA_SET_LE16) 121 ACC_UA_SET_LE16(p, v);
123 acc_ua_set_le16(p, v);
127 inline unsigned get_le24(
const void *p)
129 #if defined(ACC_UA_GET_LE24) 130 return ACC_UA_GET_LE24(p);
132 return acc_ua_get_le24(p);
136 inline void set_le24(
void *p,
unsigned v)
138 #if defined(ACC_UA_SET_LE24) 139 ACC_UA_SET_LE24(p, v);
141 acc_ua_set_le24(p, v);
145 inline unsigned get_le32(
const void *p)
147 #if defined(ACC_UA_GET_LE32) 148 return ACC_UA_GET_LE32(p);
150 return acc_ua_get_le32(p);
154 inline void set_le32(
void *p,
unsigned v)
156 #if defined(ACC_UA_SET_LE32) 157 ACC_UA_SET_LE32(p, v);
159 acc_ua_set_le32(p, v);
163 inline upx_uint64_t get_le64(
const void *p)
165 #if defined(ACC_UA_GET_LE64) 166 return ACC_UA_GET_LE64(p);
168 return acc_ua_get_le64(p);
172 inline void set_le64(
void *p, upx_uint64_t v)
174 #if defined(ACC_UA_SET_LE64) 175 ACC_UA_SET_LE64(p, v);
177 acc_ua_set_le64(p, v);
186 inline int sign_extend(
unsigned v,
unsigned bits)
188 const unsigned sign_bit = 1u << (bits - 1);
189 v &= sign_bit | (sign_bit - 1);
190 v |= 0 - (v & sign_bit);
191 return ACC_ICAST(
int, v);
194 inline upx_int64_t sign_extend(upx_uint64_t v,
unsigned bits)
196 const upx_uint64_t sign_bit = UPX_UINT64_C(1) << (bits - 1);
197 v &= sign_bit | (sign_bit - 1);
198 v |= 0 - (v & sign_bit);
199 return ACC_ICAST(upx_int64_t, v);
202 inline int get_be16_signed(
const void *p)
204 unsigned v = get_be16(p);
205 return sign_extend(v, 16);
208 inline int get_be24_signed(
const void *p)
210 unsigned v = get_be24(p);
211 return sign_extend(v, 24);
214 inline int get_be32_signed(
const void *p)
216 unsigned v = get_be32(p);
217 return sign_extend(v, 32);
220 inline upx_int64_t get_be64_signed(
const void *p)
222 upx_uint64_t v = get_be64(p);
223 return sign_extend(v, 64);
226 inline int get_le16_signed(
const void *p)
228 unsigned v = get_le16(p);
229 return sign_extend(v, 16);
232 inline int get_le24_signed(
const void *p)
234 unsigned v = get_le24(p);
235 return sign_extend(v, 24);
238 inline int get_le32_signed(
const void *p)
240 unsigned v = get_le32(p);
241 return sign_extend(v, 32);
244 inline upx_int64_t get_le64_signed(
const void *p)
246 upx_uint64_t v = get_le64(p);
247 return sign_extend(v, 64);
255 inline unsigned acc_swab16(
unsigned v)
257 return ((v & 0x00ff) << 8) |
261 inline unsigned acc_swab32(
unsigned v)
263 return ((v & 0x000000ff) << 24) |
264 ((v & 0x0000ff00) << 8) |
265 ((v & 0x00ff0000) >> 8) |
266 ((v & 0xff000000) >> 24);
270 inline unsigned acc_swab16p(
const upx_uint16_t *p)
272 return acc_swab16(*p);
275 inline unsigned acc_swap32p(
const upx_uint32_t *p)
277 return acc_swab32(*p);
281 inline void acc_swab16s(upx_uint16_t *p)
283 *p = ACC_ICONV(upx_uint16_t, acc_swab16(*p));
286 inline void acc_swab32s(upx_uint32_t *p)
288 *p = ACC_ICONV(upx_uint32_t, acc_swab32(*p));
292 inline void acc_ua_swab16s(
void *p)
294 set_be16(p, get_le16(p));
297 inline void acc_ua_swab32s(
void *p)
299 set_be32(p, get_le32(p));
314 __packed_struct(BE16)
317 BE16& operator = (
unsigned v) { set_be16(d, v);
return *
this; }
318 BE16& operator += (
unsigned v) { set_be16(d, get_be16(d) + v);
return *
this; }
319 BE16& operator -= (
unsigned v) { set_be16(d, get_be16(d) - v);
return *
this; }
320 BE16& operator *= (
unsigned v) { set_be16(d, get_be16(d) * v);
return *
this; }
321 BE16& operator /= (
unsigned v) { set_be16(d, get_be16(d) / v);
return *
this; }
322 BE16& operator &= (
unsigned v) { set_be16(d, get_be16(d) & v);
return *
this; }
323 BE16& operator |= (
unsigned v) { set_be16(d, get_be16(d) | v);
return *
this; }
324 BE16& operator ^= (
unsigned v) { set_be16(d, get_be16(d) ^ v);
return *
this; }
325 BE16& operator <<= (
unsigned v) { set_be16(d, get_be16(d) << v);
return *
this; }
326 BE16& operator >>= (
unsigned v) { set_be16(d, get_be16(d) >> v);
return *
this; }
328 operator unsigned ()
const {
return get_be16(d); }
329 __packed_struct_end()
332 __packed_struct(BE32)
335 BE32& operator = (
unsigned v) { set_be32(d, v);
return *
this; }
336 BE32& operator += (
unsigned v) { set_be32(d, get_be32(d) + v);
return *
this; }
337 BE32& operator -= (
unsigned v) { set_be32(d, get_be32(d) - v);
return *
this; }
338 BE32& operator *= (
unsigned v) { set_be32(d, get_be32(d) * v);
return *
this; }
339 BE32& operator /= (
unsigned v) { set_be32(d, get_be32(d) / v);
return *
this; }
340 BE32& operator &= (
unsigned v) { set_be32(d, get_be32(d) & v);
return *
this; }
341 BE32& operator |= (
unsigned v) { set_be32(d, get_be32(d) | v);
return *
this; }
342 BE32& operator ^= (
unsigned v) { set_be32(d, get_be32(d) ^ v);
return *
this; }
343 BE32& operator <<= (
unsigned v) { set_be32(d, get_be32(d) << v);
return *
this; }
344 BE32& operator >>= (
unsigned v) { set_be32(d, get_be32(d) >> v);
return *
this; }
346 operator unsigned ()
const {
return get_be32(d); }
347 __packed_struct_end()
350 __packed_struct(BE64)
353 BE64& operator = (upx_uint64_t v) { set_be64(d, v);
return *
this; }
354 BE64& operator += (upx_uint64_t v) { set_be64(d, get_be64(d) + v);
return *
this; }
355 BE64& operator -= (upx_uint64_t v) { set_be64(d, get_be64(d) - v);
return *
this; }
356 BE64& operator *= (upx_uint64_t v) { set_be64(d, get_be64(d) * v);
return *
this; }
357 BE64& operator /= (upx_uint64_t v) { set_be64(d, get_be64(d) / v);
return *
this; }
358 BE64& operator &= (upx_uint64_t v) { set_be64(d, get_be64(d) & v);
return *
this; }
359 BE64& operator |= (upx_uint64_t v) { set_be64(d, get_be64(d) | v);
return *
this; }
360 BE64& operator ^= (upx_uint64_t v) { set_be64(d, get_be64(d) ^ v);
return *
this; }
361 BE64& operator <<= (
unsigned v) { set_be64(d, get_be64(d) << v);
return *
this; }
362 BE64& operator >>= (
unsigned v) { set_be64(d, get_be64(d) >> v);
return *
this; }
364 operator upx_uint64_t ()
const {
return get_be64(d); }
365 __packed_struct_end()
368 __packed_struct(LE16)
371 LE16& operator = (
unsigned v) { set_le16(d, v);
return *
this; }
372 LE16& operator += (
unsigned v) { set_le16(d, get_le16(d) + v);
return *
this; }
373 LE16& operator -= (
unsigned v) { set_le16(d, get_le16(d) - v);
return *
this; }
374 LE16& operator *= (
unsigned v) { set_le16(d, get_le16(d) * v);
return *
this; }
375 LE16& operator /= (
unsigned v) { set_le16(d, get_le16(d) / v);
return *
this; }
376 LE16& operator &= (
unsigned v) { set_le16(d, get_le16(d) & v);
return *
this; }
377 LE16& operator |= (
unsigned v) { set_le16(d, get_le16(d) | v);
return *
this; }
378 LE16& operator ^= (
unsigned v) { set_le16(d, get_le16(d) ^ v);
return *
this; }
379 LE16& operator <<= (
unsigned v) { set_le16(d, get_le16(d) << v);
return *
this; }
380 LE16& operator >>= (
unsigned v) { set_le16(d, get_le16(d) >> v);
return *
this; }
382 operator unsigned ()
const {
return get_le16(d); }
383 __packed_struct_end()
386 __packed_struct(LE32)
389 LE32& operator = (
unsigned v) { set_le32(d, v);
return *
this; }
390 LE32& operator += (
unsigned v) { set_le32(d, get_le32(d) + v);
return *
this; }
391 LE32& operator -= (
unsigned v) { set_le32(d, get_le32(d) - v);
return *
this; }
392 LE32& operator *= (
unsigned v) { set_le32(d, get_le32(d) * v);
return *
this; }
393 LE32& operator /= (
unsigned v) { set_le32(d, get_le32(d) / v);
return *
this; }
394 LE32& operator &= (
unsigned v) { set_le32(d, get_le32(d) & v);
return *
this; }
395 LE32& operator |= (
unsigned v) { set_le32(d, get_le32(d) | v);
return *
this; }
396 LE32& operator ^= (
unsigned v) { set_le32(d, get_le32(d) ^ v);
return *
this; }
397 LE32& operator <<= (
unsigned v) { set_le32(d, get_le32(d) << v);
return *
this; }
398 LE32& operator >>= (
unsigned v) { set_le32(d, get_le32(d) >> v);
return *
this; }
400 operator unsigned ()
const {
return get_le32(d); }
401 __packed_struct_end()
404 __packed_struct(LE64)
407 LE64& operator = (upx_uint64_t v) { set_le64(d, v);
return *
this; }
408 LE64& operator += (upx_uint64_t v) { set_le64(d, get_le64(d) + v);
return *
this; }
409 LE64& operator -= (upx_uint64_t v) { set_le64(d, get_le64(d) - v);
return *
this; }
410 LE64& operator *= (upx_uint64_t v) { set_le64(d, get_le64(d) * v);
return *
this; }
411 LE64& operator /= (upx_uint64_t v) { set_le64(d, get_le64(d) / v);
return *
this; }
412 LE64& operator &= (upx_uint64_t v) { set_le64(d, get_le64(d) & v);
return *
this; }
413 LE64& operator |= (upx_uint64_t v) { set_le64(d, get_le64(d) | v);
return *
this; }
414 LE64& operator ^= (upx_uint64_t v) { set_le64(d, get_le64(d) ^ v);
return *
this; }
415 LE64& operator <<= (
unsigned v) { set_le64(d, get_le64(d) << v);
return *
this; }
416 LE64& operator >>= (
unsigned v) { set_le64(d, get_le64(d) >> v);
return *
this; }
418 operator upx_uint64_t ()
const {
return get_le64(d); }
419 __packed_struct_end()
427 inline T* operator + (T* ptr,
const BE16& v) {
return ptr + (unsigned) v; }
429 inline T* operator + (
const BE16& v, T* ptr) {
return ptr + (unsigned) v; }
431 inline T* operator - (T* ptr,
const BE16& v) {
return ptr - (unsigned) v; }
434 inline T* operator + (T* ptr,
const BE32& v) {
return ptr + (unsigned) v; }
436 inline T* operator + (
const BE32& v, T* ptr) {
return ptr + (unsigned) v; }
438 inline T* operator - (T* ptr,
const BE32& v) {
return ptr - (unsigned) v; }
441 template <
class T> T* operator + (T* ptr,
const BE64& v);
442 template <
class T> T* operator + (
const BE64& v, T* ptr);
443 template <
class T> T* operator - (T* ptr,
const BE64& v);
446 inline T* operator + (T* ptr,
const LE16& v) {
return ptr + (unsigned) v; }
448 inline T* operator + (
const LE16& v, T* ptr) {
return ptr + (unsigned) v; }
450 inline T* operator - (T* ptr,
const LE16& v) {
return ptr - (unsigned) v; }
453 inline T* operator + (T* ptr,
const LE32& v) {
return ptr + (unsigned) v; }
455 inline T* operator + (
const LE32& v, T* ptr) {
return ptr + (unsigned) v; }
457 inline T* operator - (T* ptr,
const LE32& v) {
return ptr - (unsigned) v; }
460 template <
class T> T* operator + (T* ptr,
const LE64& v);
461 template <
class T> T* operator + (
const LE64& v, T* ptr);
462 template <
class T> T* operator - (T* ptr,
const LE64& v);
469 inline unsigned ALIGN_DOWN(
unsigned a,
const BE32& b) {
return ALIGN_DOWN(a, (
unsigned) b); }
470 inline unsigned ALIGN_DOWN(
const BE32& a,
unsigned b) {
return ALIGN_DOWN((
unsigned) a, b); }
471 inline unsigned ALIGN_UP (
unsigned a,
const BE32& b) {
return ALIGN_UP (a, (
unsigned) b); }
472 inline unsigned ALIGN_UP (
const BE32& a,
unsigned b) {
return ALIGN_UP ((
unsigned) a, b); }
474 inline unsigned ALIGN_DOWN(
unsigned a,
const LE32& b) {
return ALIGN_DOWN(a, (
unsigned) b); }
475 inline unsigned ALIGN_DOWN(
const LE32& a,
unsigned b) {
return ALIGN_DOWN((
unsigned) a, b); }
476 inline unsigned ALIGN_UP (
unsigned a,
const LE32& b) {
return ALIGN_UP (a, (
unsigned) b); }
477 inline unsigned ALIGN_UP (
const LE32& a,
unsigned b) {
return ALIGN_UP ((
unsigned) a, b); }
479 inline unsigned UPX_MAX(
unsigned a,
const BE16& b) {
return UPX_MAX(a, (
unsigned) b); }
480 inline unsigned UPX_MAX(
const BE16& a,
unsigned b) {
return UPX_MAX((
unsigned) a, b); }
481 inline unsigned UPX_MIN(
unsigned a,
const BE16& b) {
return UPX_MIN(a, (
unsigned) b); }
482 inline unsigned UPX_MIN(
const BE16& a,
unsigned b) {
return UPX_MIN((
unsigned) a, b); }
484 inline unsigned UPX_MAX(
unsigned a,
const BE32& b) {
return UPX_MAX(a, (
unsigned) b); }
485 inline unsigned UPX_MAX(
const BE32& a,
unsigned b) {
return UPX_MAX((
unsigned) a, b); }
486 inline unsigned UPX_MIN(
unsigned a,
const BE32& b) {
return UPX_MIN(a, (
unsigned) b); }
487 inline unsigned UPX_MIN(
const BE32& a,
unsigned b) {
return UPX_MIN((
unsigned) a, b); }
489 inline unsigned UPX_MAX(
unsigned a,
const LE16& b) {
return UPX_MAX(a, (
unsigned) b); }
490 inline unsigned UPX_MAX(
const LE16& a,
unsigned b) {
return UPX_MAX((
unsigned) a, b); }
491 inline unsigned UPX_MIN(
unsigned a,
const LE16& b) {
return UPX_MIN(a, (
unsigned) b); }
492 inline unsigned UPX_MIN(
const LE16& a,
unsigned b) {
return UPX_MIN((
unsigned) a, b); }
494 inline unsigned UPX_MAX(
unsigned a,
const LE32& b) {
return UPX_MAX(a, (
unsigned) b); }
495 inline unsigned UPX_MAX(
const LE32& a,
unsigned b) {
return UPX_MAX((
unsigned) a, b); }
496 inline unsigned UPX_MIN(
unsigned a,
const LE32& b) {
return UPX_MIN(a, (
unsigned) b); }
497 inline unsigned UPX_MIN(
const LE32& a,
unsigned b) {
return UPX_MIN((
unsigned) a, b); }
506 int __acc_cdecl_qsort be16_compare(
const void *,
const void *);
507 int __acc_cdecl_qsort be24_compare(
const void *,
const void *);
508 int __acc_cdecl_qsort be32_compare(
const void *,
const void *);
509 int __acc_cdecl_qsort be64_compare(
const void *,
const void *);
510 int __acc_cdecl_qsort le16_compare(
const void *,
const void *);
511 int __acc_cdecl_qsort le24_compare(
const void *,
const void *);
512 int __acc_cdecl_qsort le32_compare(
const void *,
const void *);
513 int __acc_cdecl_qsort le64_compare(
const void *,
const void *);
514 int __acc_cdecl_qsort be16_compare_signed(
const void *,
const void *);
515 int __acc_cdecl_qsort be24_compare_signed(
const void *,
const void *);
516 int __acc_cdecl_qsort be32_compare_signed(
const void *,
const void *);
517 int __acc_cdecl_qsort be64_compare_signed(
const void *,
const void *);
518 int __acc_cdecl_qsort le16_compare_signed(
const void *,
const void *);
519 int __acc_cdecl_qsort le24_compare_signed(
const void *,
const void *);
520 int __acc_cdecl_qsort le32_compare_signed(
const void *,
const void *);
521 int __acc_cdecl_qsort le64_compare_signed(
const void *,
const void *);
549 #include "bele_policy.h" 555 #include "bele_policy.h" 561 {
return &N_BELE_RTP::be_policy; }
563 {
return &N_BELE_RTP::le_policy; }