📄 spe.h
字号:
}static inline uint16_t__ev_get_u16_internal (__ev64_opaque__ a, uint32_t pos){ union { __ev64_opaque__ v; uint16_t i[4]; } u; u.v = a; return u.i[pos];}static inline int16_t__ev_get_s16_internal (__ev64_opaque__ a, uint32_t pos){ union { __ev64_opaque__ v; int16_t i[4]; } u; u.v = a; return u.i[pos];}/* __ev_set_* functions. */#define __ev_set_u32 __ev_set_u32_internal#define __ev_set_s32 __ev_set_s32_internal#define __ev_set_fs __ev_set_fs_internal#define __ev_set_u16 __ev_set_u16_internal#define __ev_set_s16 __ev_set_s16_internal#define __ev_set_ufix32_u32 __ev_set_u32#define __ev_set_sfix32_s32 __ev_set_s32#define __ev_set_sfix32_fs __ev_set_sfix32_fs_internal#define __ev_set_ufix32_fs __ev_set_ufix32_fs_internal#define __ev_set_upper_u32(a, b) __ev_set_u32 (a, b, 0)#define __ev_set_lower_u32(a, b) __ev_set_u32 (a, b, 1)#define __ev_set_upper_s32(a, b) __ev_set_s32 (a, b, 0)#define __ev_set_lower_s32(a, b) __ev_set_s32 (a, b, 1)#define __ev_set_upper_fs(a, b) __ev_set_fs (a, b, 0)#define __ev_set_lower_fs(a, b) __ev_set_fs (a, b, 1)#define __ev_set_upper_ufix32_u32 __ev_set_upper_u32#define __ev_set_lower_ufix32_u32 __ev_set_lower_u32#define __ev_set_upper_sfix32_s32 __ev_set_upper_s32#define __ev_set_lower_sfix32_s32 __ev_set_lower_s32#define __ev_set_upper_sfix32_fs(a, b) __ev_set_sfix32_fs (a, b, 0)#define __ev_set_lower_sfix32_fs(a, b) __ev_set_sfix32_fs (a, b, 1)#define __ev_set_upper_ufix32_fs(a, b) __ev_set_ufix32_fs (a, b, 0)#define __ev_set_lower_ufix32_fs(a, b) __ev_set_ufix32_fs (a, b, 1)#define __ev_set_acc_vec64 __builtin_spe_evmrastatic inline __ev64_opaque____ev_set_acc_u64 (uint64_t a){ __ev64_opaque__ ev32; ev32 = __ev_create_u64 (a); __ev_mra (ev32); return ev32;}static inline __ev64_opaque____ev_set_acc_s64 (int64_t a){ __ev64_opaque__ ev32; ev32 = __ev_create_s64 (a); __ev_mra (ev32); return ev32;}static inline __ev64_opaque____ev_set_u32_internal (__ev64_opaque__ a, uint32_t b, uint32_t pos){ union { __ev64_opaque__ v; uint32_t i[2]; } u; u.v = a; u.i[pos] = b; return u.v;}static inline __ev64_opaque____ev_set_s32_internal (__ev64_opaque__ a, int32_t b, uint32_t pos){ union { __ev64_opaque__ v; int32_t i[2]; } u; u.v = a; u.i[pos] = b; return u.v;}static inline __ev64_opaque____ev_set_fs_internal (__ev64_opaque__ a, float b, uint32_t pos){ union { __ev64_opaque__ v; float f[2]; } u; u.v = a; u.f[pos] = b; return u.v;}static inline __ev64_opaque____ev_set_sfix32_fs_internal (__ev64_opaque__ a, float b, uint32_t pos){ __ev64_opaque__ v; float other; /* Get other half. */ other = __ev_get_fs_internal (a, pos ^ 1); /* Make an sfix32 with 'b'. */ v = __ev_create_sfix32_fs (b, b); /* Set other half to what it used to be. */ return __ev_set_fs_internal (v, other, pos ^ 1);}static inline __ev64_opaque____ev_set_ufix32_fs_internal (__ev64_opaque__ a, float b, uint32_t pos){ __ev64_opaque__ v; float other; /* Get other half. */ other = __ev_get_fs_internal (a, pos ^ 1); /* Make an ufix32 with 'b'. */ v = __ev_create_ufix32_fs (b, b); /* Set other half to what it used to be. */ return __ev_set_fs_internal (v, other, pos ^ 1);}static inline __ev64_opaque____ev_set_u16_internal (__ev64_opaque__ a, uint16_t b, uint32_t pos){ union { __ev64_opaque__ v; uint16_t i[4]; } u; u.v = a; u.i[pos] = b; return u.v;}static inline __ev64_opaque____ev_set_s16_internal (__ev64_opaque__ a, int16_t b, uint32_t pos){ union { __ev64_opaque__ v; int16_t i[4]; } u; u.v = a; u.i[pos] = b; return u.v;}/* Predicates. */#define __pred_all 0#define __pred_any 1#define __pred_upper 2#define __pred_lower 3#define __ev_any_gts(a, b) __builtin_spe_evcmpgts (__pred_any, (a), (b))#define __ev_all_gts(a, b) __builtin_spe_evcmpgts (__pred_all, (a), (b))#define __ev_upper_gts(a, b) __builtin_spe_evcmpgts (__pred_upper, (a), (b))#define __ev_lower_gts(a, b) __builtin_spe_evcmpgts (__pred_lower, (a), (b))#define __ev_select_gts __builtin_spe_evsel_gts#define __ev_any_gtu(a, b) __builtin_spe_evcmpgtu (__pred_any, (a), (b))#define __ev_all_gtu(a, b) __builtin_spe_evcmpgtu (__pred_all, (a), (b))#define __ev_upper_gtu(a, b) __builtin_spe_evcmpgtu (__pred_upper, (a), (b))#define __ev_lower_gtu(a, b) __builtin_spe_evcmpgtu (__pred_lower, (a), (b))#define __ev_select_gtu __builtin_spe_evsel_gtu#define __ev_any_lts(a, b) __builtin_spe_evcmplts (__pred_any, (a), (b))#define __ev_all_lts(a, b) __builtin_spe_evcmplts (__pred_all, (a), (b))#define __ev_upper_lts(a, b) __builtin_spe_evcmplts (__pred_upper, (a), (b))#define __ev_lower_lts(a, b) __builtin_spe_evcmplts (__pred_lower, (a), (b))#define __ev_select_lts(a, b, c, d) ((__v2si) __builtin_spe_evsel_lts ((a), (b), (c), (d)))#define __ev_any_ltu(a, b) __builtin_spe_evcmpltu (__pred_any, (a), (b))#define __ev_all_ltu(a, b) __builtin_spe_evcmpltu (__pred_all, (a), (b))#define __ev_upper_ltu(a, b) __builtin_spe_evcmpltu (__pred_upper, (a), (b))#define __ev_lower_ltu(a, b) __builtin_spe_evcmpltu (__pred_lower, (a), (b))#define __ev_select_ltu __builtin_spe_evsel_ltu#define __ev_any_eq(a, b) __builtin_spe_evcmpeq (__pred_any, (a), (b))#define __ev_all_eq(a, b) __builtin_spe_evcmpeq (__pred_all, (a), (b))#define __ev_upper_eq(a, b) __builtin_spe_evcmpeq (__pred_upper, (a), (b))#define __ev_lower_eq(a, b) __builtin_spe_evcmpeq (__pred_lower, (a), (b))#define __ev_select_eq __builtin_spe_evsel_eq#define __ev_any_fs_gt(a, b) __builtin_spe_evfscmpgt (__pred_any, (a), (b))#define __ev_all_fs_gt(a, b) __builtin_spe_evfscmpgt (__pred_all, (a), (b))#define __ev_upper_fs_gt(a, b) __builtin_spe_evfscmpgt (__pred_upper, (a), (b))#define __ev_lower_fs_gt(a, b) __builtin_spe_evfscmpgt (__pred_lower, (a), (b))#define __ev_select_fs_gt __builtin_spe_evsel_fsgt#define __ev_any_fs_lt(a, b) __builtin_spe_evfscmplt (__pred_any, (a), (b))#define __ev_all_fs_lt(a, b) __builtin_spe_evfscmplt (__pred_all, (a), (b))#define __ev_upper_fs_lt(a, b) __builtin_spe_evfscmplt (__pred_upper, (a), (b))#define __ev_lower_fs_lt(a, b) __builtin_spe_evfscmplt (__pred_lower, (a), (b))#define __ev_select_fs_lt __builtin_spe_evsel_fslt#define __ev_any_fs_eq(a, b) __builtin_spe_evfscmpeq (__pred_any, (a), (b))#define __ev_all_fs_eq(a, b) __builtin_spe_evfscmpeq (__pred_all, (a), (b))#define __ev_upper_fs_eq(a, b) __builtin_spe_evfscmpeq (__pred_upper, (a), (b))#define __ev_lower_fs_eq(a, b) __builtin_spe_evfscmpeq (__pred_lower, (a), (b))#define __ev_select_fs_eq __builtin_spe_evsel_fseq#define __ev_any_fs_tst_gt(a, b) __builtin_spe_evfststgt (__pred_any, (a), (b))#define __ev_all_fs_tst_gt(a, b) __builtin_spe_evfststgt (__pred_all, (a), (b))#define __ev_upper_fs_tst_gt(a, b) __builtin_spe_evfststgt (__pred_upper, (a), (b))#define __ev_lower_fs_tst_gt(a, b) __builtin_spe_evfststgt (__pred_lower, (a), (b))#define __ev_select_fs_tst_gt __builtin_spe_evsel_fststgt#define __ev_any_fs_tst_lt(a, b) __builtin_spe_evfststlt (__pred_any, (a), (b))#define __ev_all_fs_tst_lt(a, b) __builtin_spe_evfststlt (__pred_all, (a), (b))#define __ev_upper_fs_tst_lt(a, b) __builtin_spe_evfststlt (__pred_upper, (a), (b))#define __ev_lower_fs_tst_lt(a, b) __builtin_spe_evfststlt (__pred_lower, (a), (b))#define __ev_select_fs_tst_lt __builtin_spe_evsel_fststlt#define __ev_any_fs_tst_eq(a, b) __builtin_spe_evfststeq (__pred_any, (a), (b))#define __ev_all_fs_tst_eq(a, b) __builtin_spe_evfststeq (__pred_all, (a), (b))#define __ev_upper_fs_tst_eq(a, b) __builtin_spe_evfststeq (__pred_upper, (a), (b))#define __ev_lower_fs_tst_eq(a, b) __builtin_spe_evfststeq (__pred_lower, (a), (b))#define __ev_select_fs_tst_eq __builtin_spe_evsel_fststeq/* SPEFSCR accessor functions. */#define __SPEFSCR_SOVH 0x80000000#define __SPEFSCR_OVH 0x40000000#define __SPEFSCR_FGH 0x20000000#define __SPEFSCR_FXH 0x10000000#define __SPEFSCR_FINVH 0x08000000#define __SPEFSCR_FDBZH 0x04000000#define __SPEFSCR_FUNFH 0x02000000#define __SPEFSCR_FOVFH 0x01000000/* 2 unused bits. */#define __SPEFSCR_FINXS 0x00200000#define __SPEFSCR_FINVS 0x00100000#define __SPEFSCR_FDBZS 0x00080000#define __SPEFSCR_FUNFS 0x00040000#define __SPEFSCR_FOVFS 0x00020000#define __SPEFSCR_MODE 0x00010000#define __SPEFSCR_SOV 0x00008000#define __SPEFSCR_OV 0x00004000#define __SPEFSCR_FG 0x00002000#define __SPEFSCR_FX 0x00001000#define __SPEFSCR_FINV 0x00000800#define __SPEFSCR_FDBZ 0x00000400#define __SPEFSCR_FUNF 0x00000200#define __SPEFSCR_FOVF 0x00000100/* 1 unused bit. */#define __SPEFSCR_FINXE 0x00000040#define __SPEFSCR_FINVE 0x00000020#define __SPEFSCR_FDBZE 0x00000010#define __SPEFSCR_FUNFE 0x00000008#define __SPEFSCR_FOVFE 0x00000004#define __SPEFSCR_FRMC 0x00000003#define __ev_get_spefscr_sovh() (__builtin_spe_mfspefscr () & __SPEFSCR_SOVH)#define __ev_get_spefscr_ovh() (__builtin_spe_mfspefscr () & __SPEFSCR_OVH)#define __ev_get_spefscr_fgh() (__builtin_spe_mfspefscr () & __SPEFSCR_FGH)#define __ev_get_spefscr_fxh() (__builtin_spe_mfspefscr () & __SPEFSCR_FXH)#define __ev_get_spefscr_finvh() (__builtin_spe_mfspefscr () & __SPEFSCR_FINVH)#define __ev_get_spefscr_fdbzh() (__builtin_spe_mfspefscr () & __SPEFSCR_FDBZH)#define __ev_get_spefscr_funfh() (__builtin_spe_mfspefscr () & __SPEFSCR_FUNFH)#define __ev_get_spefscr_fovfh() (__builtin_spe_mfspefscr () & __SPEFSCR_FOVFH)#define __ev_get_spefscr_finxs() (__builtin_spe_mfspefscr () & __SPEFSCR_FINXS)#define __ev_get_spefscr_finvs() (__builtin_spe_mfspefscr () & __SPEFSCR_FINVS)#define __ev_get_spefscr_fdbzs() (__builtin_spe_mfspefscr () & __SPEFSCR_FDBZS)#define __ev_get_spefscr_funfs() (__builtin_spe_mfspefscr () & __SPEFSCR_FUNFS)#define __ev_get_spefscr_fovfs() (__builtin_spe_mfspefscr () & __SPEFSCR_FOVFS)#define __ev_get_spefscr_mode() (__builtin_spe_mfspefscr () & __SPEFSCR_MODE)#define __ev_get_spefscr_sov() (__builtin_spe_mfspefscr () & __SPEFSCR_SOV)#define __ev_get_spefscr_ov() (__builtin_spe_mfspefscr () & __SPEFSCR_OV)#define __ev_get_spefscr_fg() (__builtin_spe_mfspefscr () & __SPEFSCR_FG)#define __ev_get_spefscr_fx() (__builtin_spe_mfspefscr () & __SPEFSCR_FX)#define __ev_get_spefscr_finv() (__builtin_spe_mfspefscr () & __SPEFSCR_FINV)#define __ev_get_spefscr_fdbz() (__builtin_spe_mfspefscr () & __SPEFSCR_FDBZ)#define __ev_get_spefscr_funf() (__builtin_spe_mfspefscr () & __SPEFSCR_FUNF)#define __ev_get_spefscr_fovf() (__builtin_spe_mfspefscr () & __SPEFSCR_FOVF)#define __ev_get_spefscr_finxe() (__builtin_spe_mfspefscr () & __SPEFSCR_FINXE)#define __ev_get_spefscr_finve() (__builtin_spe_mfspefscr () & __SPEFSCR_FINVE)#define __ev_get_spefscr_fdbze() (__builtin_spe_mfspefscr () & __SPEFSCR_FDBZE)#define __ev_get_spefscr_funfe() (__builtin_spe_mfspefscr () & __SPEFSCR_FUNFE)#define __ev_get_spefscr_fovfe() (__builtin_spe_mfspefscr () & __SPEFSCR_FOVFE)#define __ev_get_spefscr_frmc() (__builtin_spe_mfspefscr () & __SPEFSCR_FRMC)static inline void__ev_clr_spefscr_field (int mask){ int i; i = __builtin_spe_mfspefscr (); i &= ~mask; __builtin_spe_mtspefscr (i);}#define __ev_clr_spefscr_sovh() __ev_clr_spefscr_field (__SPEFSCR_SOVH)#define __ev_clr_spefscr_sov() __ev_clr_spefscr_field (__SPEFSCR_SOV)#define __ev_clr_spefscr_finxs() __ev_clr_spefscr_field (__SPEFSCR_FINXS)#define __ev_clr_spefscr_finvs() __ev_clr_spefscr_field (__SPEFSCR_FINVS)#define __ev_clr_spefscr_fdbzs() __ev_clr_spefscr_field (__SPEFSCR_FDBZS)#define __ev_clr_spefscr_funfs() __ev_clr_spefscr_field (__SPEFSCR_FUNFS)#define __ev_clr_spefscr_fovfs() __ev_clr_spefscr_field (__SPEFSCR_FOVFS)/* Set rounding mode: rnd = 0 (nearest) rnd = 1 (zero) rnd = 2 (+inf) rnd = 3 (-inf). */static inline void__ev_set_spefscr_frmc (int rnd){ int i; i = __builtin_spe_mfspefscr (); i &= ~__SPEFSCR_FRMC; i |= rnd; __builtin_spe_mtspefscr (i);}/* The SPE PIM says these are declared in <spe.h>, although they are not provided by GCC: they must be taken from a separate library. */extern short int atosfix16 (const char *);extern int atosfix32 (const char *);extern long long atosfix64 (const char *);extern unsigned short atoufix16 (const char *);extern unsigned int atoufix32 (const char *);extern unsigned long long atoufix64 (const char *);extern short int strtosfix16 (const char *, char **);extern int strtosfix32 (const char *, char **);extern long long strtosfix64 (const char *, char **);extern unsigned short int strtoufix16 (const char *, char **);extern unsigned int strtoufix32 (const char *, char **);extern unsigned long long strtoufix64 (const char *, char **);#endif /* _SPE_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -