X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Fcalc%2Fcast.h;h=4922616d07066ce30eac02c8a165d663c0189932;hb=cd0567b4052ee24259bc6b8a9858af9d26f3de48;hp=c6f14aa0e2e491b099c6468c07fb07c62ac3ff53;hpb=52ed5940ed0ab3cafd36fbded2e83c92563e7b2b;p=m6w6%2Fext-psi diff --git a/src/calc/cast.h b/src/calc/cast.h index c6f14aa..4922616 100644 --- a/src/calc/cast.h +++ b/src/calc/cast.h @@ -23,7 +23,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *******************************************************************************/ -#include "php_psi_stdinc.h" #include #include "token.h" @@ -57,6 +56,18 @@ static inline void psi_calc_cast(token_t in_type, impl_val *in_val, token_t out_ case PSI_T_UINT64: out_val->i8 = in_val->u64; break; +# if HAVE_INT128 + case PSI_T_INT128: + out_val->i8 = in_val->i128; + break; +# endif + +# if HAVE_UINT128 + case PSI_T_UINT128: + out_val->i8 = in_val->u128; + break; +# endif + case PSI_T_FLOAT: out_val->i8 = in_val->fval; break; @@ -100,6 +111,18 @@ static inline void psi_calc_cast(token_t in_type, impl_val *in_val, token_t out_ case PSI_T_UINT64: out_val->u8 = in_val->u64; break; +# if HAVE_INT128 + case PSI_T_INT128: + out_val->u8 = in_val->i128; + break; +# endif + +# if HAVE_UINT128 + case PSI_T_UINT128: + out_val->u8 = in_val->u128; + break; +# endif + case PSI_T_FLOAT: out_val->u8 = in_val->fval; break; @@ -143,6 +166,18 @@ static inline void psi_calc_cast(token_t in_type, impl_val *in_val, token_t out_ case PSI_T_UINT64: out_val->i16 = in_val->u64; break; +# if HAVE_INT128 + case PSI_T_INT128: + out_val->i16 = in_val->i128; + break; +# endif + +# if HAVE_UINT128 + case PSI_T_UINT128: + out_val->i16 = in_val->u128; + break; +# endif + case PSI_T_FLOAT: out_val->i16 = in_val->fval; break; @@ -186,6 +221,18 @@ static inline void psi_calc_cast(token_t in_type, impl_val *in_val, token_t out_ case PSI_T_UINT64: out_val->u16 = in_val->u64; break; +# if HAVE_INT128 + case PSI_T_INT128: + out_val->u16 = in_val->i128; + break; +# endif + +# if HAVE_UINT128 + case PSI_T_UINT128: + out_val->u16 = in_val->u128; + break; +# endif + case PSI_T_FLOAT: out_val->u16 = in_val->fval; break; @@ -229,6 +276,18 @@ static inline void psi_calc_cast(token_t in_type, impl_val *in_val, token_t out_ case PSI_T_UINT64: out_val->i32 = in_val->u64; break; +# if HAVE_INT128 + case PSI_T_INT128: + out_val->i32 = in_val->i128; + break; +# endif + +# if HAVE_UINT128 + case PSI_T_UINT128: + out_val->i32 = in_val->u128; + break; +# endif + case PSI_T_FLOAT: out_val->i32 = in_val->fval; break; @@ -272,6 +331,18 @@ static inline void psi_calc_cast(token_t in_type, impl_val *in_val, token_t out_ case PSI_T_UINT64: out_val->u32 = in_val->u64; break; +# if HAVE_INT128 + case PSI_T_INT128: + out_val->u32 = in_val->i128; + break; +# endif + +# if HAVE_UINT128 + case PSI_T_UINT128: + out_val->u32 = in_val->u128; + break; +# endif + case PSI_T_FLOAT: out_val->u32 = in_val->fval; break; @@ -315,6 +386,18 @@ static inline void psi_calc_cast(token_t in_type, impl_val *in_val, token_t out_ case PSI_T_UINT64: out_val->i64 = in_val->u64; break; +# if HAVE_INT128 + case PSI_T_INT128: + out_val->i64 = in_val->i128; + break; +# endif + +# if HAVE_UINT128 + case PSI_T_UINT128: + out_val->i64 = in_val->u128; + break; +# endif + case PSI_T_FLOAT: out_val->i64 = in_val->fval; break; @@ -358,6 +441,18 @@ static inline void psi_calc_cast(token_t in_type, impl_val *in_val, token_t out_ case PSI_T_UINT64: out_val->u64 = in_val->u64; break; +# if HAVE_INT128 + case PSI_T_INT128: + out_val->u64 = in_val->i128; + break; +# endif + +# if HAVE_UINT128 + case PSI_T_UINT128: + out_val->u64 = in_val->u128; + break; +# endif + case PSI_T_FLOAT: out_val->u64 = in_val->fval; break; @@ -375,6 +470,122 @@ static inline void psi_calc_cast(token_t in_type, impl_val *in_val, token_t out_ break; } break; +#if HAVE_INT128 + case PSI_T_INT128: + switch (in_type) { + case PSI_T_INT8: + out_val->i128 = in_val->i8; + break; + case PSI_T_UINT8: + out_val->i128 = in_val->u8; + break; + case PSI_T_INT16: + out_val->i128 = in_val->i16; + break; + case PSI_T_UINT16: + out_val->i128 = in_val->u16; + break; + case PSI_T_INT32: + out_val->i128 = in_val->i32; + break; + case PSI_T_UINT32: + out_val->i128 = in_val->u32; + break; + case PSI_T_INT64: + out_val->i128 = in_val->i64; + break; + case PSI_T_UINT64: + out_val->i128 = in_val->u64; + break; +# if HAVE_INT128 + case PSI_T_INT128: + out_val->i128 = in_val->i128; + break; +# endif + +# if HAVE_UINT128 + case PSI_T_UINT128: + out_val->i128 = in_val->u128; + break; +# endif + + case PSI_T_FLOAT: + out_val->i128 = in_val->fval; + break; + case PSI_T_DOUBLE: + out_val->i128 = in_val->dval; + break; +# if HAVE_LONG_DOUBLE + case PSI_T_LONG_DOUBLE: + out_val->i128 = in_val->ldval; + break; +# endif + + default: + assert(0); + break; + } + break; +#endif + +#if HAVE_UINT128 + case PSI_T_UINT128: + switch (in_type) { + case PSI_T_INT8: + out_val->u128 = in_val->i8; + break; + case PSI_T_UINT8: + out_val->u128 = in_val->u8; + break; + case PSI_T_INT16: + out_val->u128 = in_val->i16; + break; + case PSI_T_UINT16: + out_val->u128 = in_val->u16; + break; + case PSI_T_INT32: + out_val->u128 = in_val->i32; + break; + case PSI_T_UINT32: + out_val->u128 = in_val->u32; + break; + case PSI_T_INT64: + out_val->u128 = in_val->i64; + break; + case PSI_T_UINT64: + out_val->u128 = in_val->u64; + break; +# if HAVE_INT128 + case PSI_T_INT128: + out_val->u128 = in_val->i128; + break; +# endif + +# if HAVE_UINT128 + case PSI_T_UINT128: + out_val->u128 = in_val->u128; + break; +# endif + + case PSI_T_FLOAT: + out_val->u128 = in_val->fval; + break; + case PSI_T_DOUBLE: + out_val->u128 = in_val->dval; + break; +# if HAVE_LONG_DOUBLE + case PSI_T_LONG_DOUBLE: + out_val->u128 = in_val->ldval; + break; +# endif + + default: + assert(0); + break; + } + break; +#endif + case PSI_T_FLOAT: switch (in_type) { case PSI_T_INT8: @@ -401,6 +612,18 @@ static inline void psi_calc_cast(token_t in_type, impl_val *in_val, token_t out_ case PSI_T_UINT64: out_val->fval = in_val->u64; break; +# if HAVE_INT128 + case PSI_T_INT128: + out_val->fval = in_val->i128; + break; +# endif + +# if HAVE_UINT128 + case PSI_T_UINT128: + out_val->fval = in_val->u128; + break; +# endif + case PSI_T_FLOAT: out_val->fval = in_val->fval; break; @@ -444,6 +667,18 @@ static inline void psi_calc_cast(token_t in_type, impl_val *in_val, token_t out_ case PSI_T_UINT64: out_val->dval = in_val->u64; break; +# if HAVE_INT128 + case PSI_T_INT128: + out_val->dval = in_val->i128; + break; +# endif + +# if HAVE_UINT128 + case PSI_T_UINT128: + out_val->dval = in_val->u128; + break; +# endif + case PSI_T_FLOAT: out_val->dval = in_val->fval; break; @@ -488,6 +723,18 @@ static inline void psi_calc_cast(token_t in_type, impl_val *in_val, token_t out_ case PSI_T_UINT64: out_val->ldval = in_val->u64; break; +# if HAVE_INT128 + case PSI_T_INT128: + out_val->ldval = in_val->i128; + break; +# endif + +# if HAVE_UINT128 + case PSI_T_UINT128: + out_val->ldval = in_val->u128; + break; +# endif + case PSI_T_FLOAT: out_val->ldval = in_val->fval; break;