📄 cgen-ops.h
字号:
SEMOPS_INLINE UQISUBWORDSIUQI (SI in, int byte){ assert (byte >= 0 && byte <= 3); return (UQI) (in >> (8 * (3 - byte))) & 0xFF;}SEMOPS_INLINE QISUBWORDDIQI (DI in, int byte){ assert (byte >= 0 && byte <= 7); return (UQI) (in >> (8 * (7 - byte))) & 0xFF;}SEMOPS_INLINE HISUBWORDDIHI (DI in, int word){ assert (word >= 0 && word <= 3); return (UHI) (in >> (16 * (3 - word))) & 0xFFFF;}SEMOPS_INLINE HISUBWORDSIHI (SI in, int word){ if (word == 0) return (USI) in >> 16; else return in;}SEMOPS_INLINE SISUBWORDSFSI (SF in){ union { SF in; SI out; } x; x.in = in; return x.out;}SEMOPS_INLINE DISUBWORDDFDI (DF in){ union { DF in; DI out; } x; x.in = in; return x.out;}SEMOPS_INLINE UQISUBWORDDIUQI (DI in, int byte){ assert (byte >= 0 && byte <= 7); return (UQI) (in >> (8 * (7 - byte)));}SEMOPS_INLINE SISUBWORDDISI (DI in, int word){ if (word == 0) return (UDI) in >> 32; else return in;}SEMOPS_INLINE SISUBWORDDFSI (DF in, int word){ /* Note: typedef UDI DF; */ if (word == 0) return (UDI) in >> 32; else return in;}SEMOPS_INLINE SISUBWORDXFSI (XF in, int word){ /* Note: typedef struct { SI parts[3]; } XF; */ union { XF in; SI out[3]; } x; x.in = in; return x.out[word];}SEMOPS_INLINE SISUBWORDTFSI (TF in, int word){ /* Note: typedef struct { SI parts[4]; } TF; */ union { TF in; SI out[4]; } x; x.in = in; return x.out[word];}SEMOPS_INLINE DIJOINSIDI (SI x0, SI x1){ if (CURRENT_TARGET_BYTE_ORDER == BIG_ENDIAN) return MAKEDI (x0, x1); else return MAKEDI (x1, x0);}SEMOPS_INLINE DFJOINSIDF (SI x0, SI x1){ union { SI in[2]; DF out; } x; if (CURRENT_TARGET_BYTE_ORDER == BIG_ENDIAN) x.in[0] = x0, x.in[1] = x1; else x.in[1] = x0, x.in[0] = x1; return x.out;}SEMOPS_INLINE XFJOINSIXF (SI x0, SI x1, SI x2){ union { SI in[3]; XF out; } x; if (CURRENT_TARGET_BYTE_ORDER == BIG_ENDIAN) x.in[0] = x0, x.in[1] = x1, x.in[2] = x2; else x.in[2] = x0, x.in[1] = x1, x.in[0] = x2; return x.out;}SEMOPS_INLINE TFJOINSITF (SI x0, SI x1, SI x2, SI x3){ union { SI in[4]; TF out; } x; if (CURRENT_TARGET_BYTE_ORDER == BIG_ENDIAN) x.in[0] = x0, x.in[1] = x1, x.in[2] = x2, x.in[3] = x3; else x.in[3] = x0, x.in[2] = x1, x.in[1] = x2, x.in[0] = x3; return x.out;}#elseQI SUBWORDSIQI (SI);HI SUBWORDSIHI (HI);SI SUBWORDSFSI (SF);SF SUBWORDSISF (SI);DI SUBWORDDFDI (DF);DF SUBWORDDIDF (DI);QI SUBWORDDIQI (DI, int);HI SUBWORDDIHI (DI, int);SI SUBWORDDISI (DI, int);SI SUBWORDDFSI (DF, int);SI SUBWORDXFSI (XF, int);SI SUBWORDTFSI (TF, int);UQI SUBWORDSIUQI (SI);UQI SUBWORDDIUQI (DI);DI JOINSIDI (SI, SI);DF JOINSIDF (SI, SI);XF JOINSIXF (SI, SI, SI);TF JOINSITF (SI, SI, SI, SI);#endif /* SUBWORD,JOIN *//* Semantic support utilities. */#ifdef SEMOPS_DEFINE_INLINESEMOPS_INLINE SIADDCSI (SI a, SI b, BI c){ SI res = ADDSI (a, ADDSI (b, c)); return res;}SEMOPS_INLINE BIADDCFSI (SI a, SI b, BI c){ SI tmp = ADDSI (a, ADDSI (b, c)); BI res = ((USI) tmp < (USI) a) || (c && tmp == a); return res;}SEMOPS_INLINE BIADDOFSI (SI a, SI b, BI c){ SI tmp = ADDSI (a, ADDSI (b, c)); BI res = (((a < 0) == (b < 0)) && ((a < 0) != (tmp < 0))); return res;}SEMOPS_INLINE SISUBCSI (SI a, SI b, BI c){ SI res = SUBSI (a, ADDSI (b, c)); return res;}SEMOPS_INLINE BISUBCFSI (SI a, SI b, BI c){ BI res = ((USI) a < (USI) b) || (c && a == b); return res;}SEMOPS_INLINE BISUBOFSI (SI a, SI b, BI c){ SI tmp = SUBSI (a, ADDSI (b, c)); BI res = (((a < 0) != (b < 0)) && ((a < 0) != (tmp < 0))); return res;}SEMOPS_INLINE HIADDCHI (HI a, HI b, BI c){ HI res = ADDHI (a, ADDHI (b, c)); return res;}SEMOPS_INLINE BIADDCFHI (HI a, HI b, BI c){ HI tmp = ADDHI (a, ADDHI (b, c)); BI res = ((UHI) tmp < (UHI) a) || (c && tmp == a); return res;}SEMOPS_INLINE BIADDOFHI (HI a, HI b, BI c){ HI tmp = ADDHI (a, ADDHI (b, c)); BI res = (((a < 0) == (b < 0)) && ((a < 0) != (tmp < 0))); return res;}SEMOPS_INLINE HISUBCHI (HI a, HI b, BI c){ HI res = SUBHI (a, ADDHI (b, c)); return res;}SEMOPS_INLINE BISUBCFHI (HI a, HI b, BI c){ BI res = ((UHI) a < (UHI) b) || (c && a == b); return res;}SEMOPS_INLINE BISUBOFHI (HI a, HI b, BI c){ HI tmp = SUBHI (a, ADDHI (b, c)); BI res = (((a < 0) != (b < 0)) && ((a < 0) != (tmp < 0))); return res;}SEMOPS_INLINE QIADDCQI (QI a, QI b, BI c){ QI res = ADDQI (a, ADDQI (b, c)); return res;}SEMOPS_INLINE BIADDCFQI (QI a, QI b, BI c){ QI tmp = ADDQI (a, ADDQI (b, c)); BI res = ((UQI) tmp < (UQI) a) || (c && tmp == a); return res;}SEMOPS_INLINE BIADDOFQI (QI a, QI b, BI c){ QI tmp = ADDQI (a, ADDQI (b, c)); BI res = (((a < 0) == (b < 0)) && ((a < 0) != (tmp < 0))); return res;}SEMOPS_INLINE QISUBCQI (QI a, QI b, BI c){ QI res = SUBQI (a, ADDQI (b, c)); return res;}SEMOPS_INLINE BISUBCFQI (QI a, QI b, BI c){ BI res = ((UQI) a < (UQI) b) || (c && a == b); return res;}SEMOPS_INLINE BISUBOFQI (QI a, QI b, BI c){ QI tmp = SUBQI (a, ADDQI (b, c)); BI res = (((a < 0) != (b < 0)) && ((a < 0) != (tmp < 0))); return res;}#elseSI ADDCSI (SI, SI, BI);UBI ADDCFSI (SI, SI, BI);UBI ADDOFSI (SI, SI, BI);SI SUBCSI (SI, SI, BI);UBI SUBCFSI (SI, SI, BI);UBI SUBOFSI (SI, SI, BI);HI ADDCHI (HI, HI, BI);UBI ADDCFHI (HI, HI, BI);UBI ADDOFHI (HI, HI, BI);HI SUBCHI (HI, HI, BI);UBI SUBCFHI (HI, HI, BI);UBI SUBOFHI (HI, HI, BI);QI ADDCQI (QI, QI, BI);UBI ADDCFQI (QI, QI, BI);UBI ADDOFQI (QI, QI, BI);QI SUBCQI (QI, QI, BI);UBI SUBCFQI (QI, QI, BI);UBI SUBOFQI (QI, QI, BI);#endif#endif /* CGEN_SEM_OPS_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -