📄 spe.h
字号:
static inline float__ev_get_sfix32_fs_internal (__ev64_opaque__ a, uint32_t pos){ __ev64_fs__ v; v = __builtin_spe_evfscfsf ((__v2sf) a); return __ev_get_fs_internal ((__ev64_opaque__) v, pos);}static inline float__ev_get_ufix32_fs_internal (__ev64_opaque__ a, uint32_t pos){ __ev64_fs__ v; v = __builtin_spe_evfscfuf ((__v2sf) a); return __ev_get_fs_internal ((__ev64_opaque__) v, pos);}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(a, b, c) __ev_set_u32_internal ((__ev64_opaque__) a, b, c)#define __ev_set_s32(a, b, c) __ev_set_s32_internal ((__ev64_opaque__) a, b, c)#define __ev_set_fs(a, b, c) __ev_set_fs_internal ((__ev64_opaque__) a, b, c)#define __ev_set_u16(a, b, c) __ev_set_u16_internal ((__ev64_opaque__) a, b, c)#define __ev_set_s16(a, b, c) __ev_set_s16_internal ((__ev64_opaque__) a, b, c)#define __ev_set_ufix32_u32 __ev_set_u32#define __ev_set_sfix32_s32 __ev_set_s32#define __ev_set_sfix32_fs(a, b, c) __ev_set_sfix32_fs_internal ((__ev64_opaque__) (a), b, c)#define __ev_set_ufix32_fs(a, b, c) __ev_set_ufix32_fs_internal ((__ev64_opaque__) (a), b, c)#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(a) __builtin_spe_evmra ((__ev64_opaque__)(a))static 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, (__v2si) (a), (__v2si) (b))#define __ev_all_gts(a, b) __builtin_spe_evcmpgts (__pred_all, (__v2si) (a), (__v2si) (b))#define __ev_upper_gts(a, b) __builtin_spe_evcmpgts (__pred_upper, (__v2si) (a), (__v2si) (b))#define __ev_lower_gts(a, b) __builtin_spe_evcmpgts (__pred_lower, (__v2si) (a), (__v2si) (b))#define __ev_select_gts(a, b, c, d) ((__v2si) __builtin_spe_evsel_gts ((__v2si) (a), (__v2si) (b), (__v2si) (c), (__v2si) (d)))#define __ev_any_gtu(a, b) __builtin_spe_evcmpgtu (__pred_any, (__v2si) (a), (__v2si) (b))#define __ev_all_gtu(a, b) __builtin_spe_evcmpgtu (__pred_all, (__v2si) (a), (__v2si) (b))#define __ev_upper_gtu(a, b) __builtin_spe_evcmpgtu (__pred_upper, (__v2si) (a), (__v2si) (b))#define __ev_lower_gtu(a, b) __builtin_spe_evcmpgtu (__pred_lower, (__v2si) (a), (__v2si) (b))#define __ev_select_gtu(a, b, c, d) ((__v2si) __builtin_spe_evsel_gtu ((__v2si) (a), (__v2si) (b), (__v2si) (c), (__v2si) (d)))#define __ev_any_lts(a, b) __builtin_spe_evcmplts (__pred_any, (__v2si) (a), (__v2si) (b))#define __ev_all_lts(a, b) __builtin_spe_evcmplts (__pred_all, (__v2si) (a), (__v2si) (b))#define __ev_upper_lts(a, b) __builtin_spe_evcmplts (__pred_upper, (__v2si) (a), (__v2si) (b))#define __ev_lower_lts(a, b) __builtin_spe_evcmplts (__pred_lower, (__v2si) (a), (__v2si) (b))#define __ev_select_lts(a, b, c, d) ((__v2si) __builtin_spe_evsel_lts ((__v2si) (a), (__v2si) (b), (__v2si) (c), (__v2si) (d)))#define __ev_any_ltu(a, b) __builtin_spe_evcmpltu (__pred_any, (__v2si) (a), (__v2si) (b))#define __ev_all_ltu(a, b) __builtin_spe_evcmpltu (__pred_all, (__v2si) (a), (__v2si) (b))#define __ev_upper_ltu(a, b) __builtin_spe_evcmpltu (__pred_upper, (__v2si) (a), (__v2si) (b))#define __ev_lower_ltu(a, b) __builtin_spe_evcmpltu (__pred_lower, (__v2si) (a), (__v2si) (b))#define __ev_select_ltu(a, b, c, d) ((__v2si) __builtin_spe_evsel_ltu ((__v2si) (a), (__v2si) (b), (__v2si) (c), (__v2si) (d)))#define __ev_any_eq(a, b) __builtin_spe_evcmpeq (__pred_any, (__v2si) (a), (__v2si) (b))#define __ev_all_eq(a, b) __builtin_spe_evcmpeq (__pred_all, (__v2si) (a), (__v2si) (b))#define __ev_upper_eq(a, b) __builtin_spe_evcmpeq (__pred_upper, (__v2si) (a), (__v2si) (b))#define __ev_lower_eq(a, b) __builtin_spe_evcmpeq (__pred_lower, (__v2si) (a), (__v2si) (b))#define __ev_select_eq(a, b, c, d) ((__v2si) __builtin_spe_evsel_eq ((__v2si) (a), (__v2si) (b), (__v2si) (c), (__v2si) (d)))#define __ev_any_fs_gt(a, b) __builtin_spe_evfscmpgt (__pred_any, (__v2sf) (a), (__v2sf) (b))#define __ev_all_fs_gt(a, b) __builtin_spe_evfscmpgt (__pred_all, (__v2sf) (a), (__v2sf) (b))#define __ev_upper_fs_gt(a, b) __builtin_spe_evfscmpgt (__pred_upper, (__v2sf) (a), (__v2sf) (b))#define __ev_lower_fs_gt(a, b) __builtin_spe_evfscmpgt (__pred_lower, (__v2sf) (a), (__v2sf) (b))#define __ev_select_fs_gt(a, b, c, d) ((__v2si) __builtin_spe_evsel_fsgt ((__v2sf) (a), (__v2sf) (b), (__v2sf) (c), (__v2sf) (d)))#define __ev_any_fs_lt(a, b) __builtin_spe_evfscmplt (__pred_any, (__v2sf) (a), (__v2sf) (b))#define __ev_all_fs_lt(a, b) __builtin_spe_evfscmplt (__pred_all, (__v2sf) (a), (__v2sf) (b))#define __ev_upper_fs_lt(a, b) __builtin_spe_evfscmplt (__pred_upper, (__v2sf) (a), (__v2sf) (b))#define __ev_lower_fs_lt(a, b) __builtin_spe_evfscmplt (__pred_lower, (__v2sf) (a), (__v2sf) (b))#define __ev_select_fs_lt(a, b, c, d) ((__v2si) __builtin_spe_evsel_fslt ((__v2sf) (a), (__v2sf) (b), (__v2sf) (c), (__v2sf) (d)))#define __ev_any_fs_eq(a, b) __builtin_spe_evfscmpeq (__pred_any, (__v2sf) (a), (__v2sf) (b))#define __ev_all_fs_eq(a, b) __builtin_spe_evfscmpeq (__pred_all, (__v2sf) (a), (__v2sf) (b))#define __ev_upper_fs_eq(a, b) __builtin_spe_evfscmpeq (__pred_upper, (__v2sf) (a), (__v2sf) (b))#define __ev_lower_fs_eq(a, b) __builtin_spe_evfscmpeq (__pred_lower, (__v2sf) (a), (__v2sf) (b))#define __ev_select_fs_eq(a, b, c, d) ((__v2si) __builtin_spe_evsel_fseq ((__v2sf) (a), (__v2sf) (b), (__v2sf) (c), (__v2sf) (d)))#define __ev_any_fs_tst_gt(a, b) __builtin_spe_evfststgt (__pred_any, (__v2sf) (a), (__v2sf) (b))#define __ev_all_fs_tst_gt(a, b) __builtin_spe_evfststgt (__pred_all, (__v2sf) (a), (__v2sf) (b))#define __ev_upper_fs_tst_gt(a, b) __builtin_spe_evfststgt (__pred_upper, (__v2sf) (a), (__v2sf) (b))#define __ev_lower_fs_tst_gt(a, b) __builtin_spe_evfststgt (__pred_lower, (__v2sf) (a), (__v2sf) (b))#define __ev_select_fs_tst_gt(a, b, c, d) ((__v2si) __builtin_spe_evsel_fststgt ((__v2sf) (a), (__v2sf) (b), (__v2sf) (c), (__v2sf) (d)))#define __ev_any_fs_tst_lt(a, b) __builtin_spe_evfststlt (__pred_any, (__v2sf) (a), (__v2sf) (b))#define __ev_all_fs_tst_lt(a, b) __builtin_spe_evfststlt (__pred_all, (__v2sf) (a), (__v2sf) (b))#define __ev_upper_fs_tst_lt(a, b) __builtin_spe_evfststlt (__pred_upper, (__v2sf) (a), (__v2sf) (b))#define __ev_lower_fs_tst_lt(a, b) __builtin_spe_evfststlt (__pred_lower, (__v2sf) (a), (__v2sf) (b))#define __ev_select_fs_tst_lt(a, b, c, d) ((__v2si) __builtin_spe_evsel_fststlt ((__v2sf) (a), (__v2sf) (b), (__v2sf) (c), (__v2sf) (d)))#define __ev_any_fs_tst_eq(a, b) __builtin_spe_evfststeq (__pred_any, (__v2sf) (a), (__v2sf) (b))#define __ev_all_fs_tst_eq(a, b) __builtin_spe_evfststeq (__pred_all, (__v2sf) (a), (__v2sf) (b))#define __ev_upper_fs_tst_eq(a, b) __builtin_spe_evfststeq (__pred_upper, (__v2sf) (a), (__v2sf) (b))#define __ev_lower_fs_tst_eq(a, b) __builtin_spe_evfststeq (__pred_lower, (__v2sf) (a), (__v2sf) (b))#define __ev_select_fs_tst_eq(a, b, c, d) ((__v2si) __builtin_spe_evsel_fststeq ((__v2sf) (a), (__v2sf) (b), (__v2sf) (c), (__v2sf) (d)))/* SPEFSCR accesor 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;}#endif /* _SPE_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -