From d0b9848c54e6f85ab713f059dcd1ddef7e57caa6 Mon Sep 17 00:00:00 2001 From: Ash Wolf Date: Tue, 25 Oct 2022 20:30:28 +0100 Subject: a bunch of compiler stuff --- includes/compiler/CInt64.h | 88 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 includes/compiler/CInt64.h (limited to 'includes/compiler/CInt64.h') diff --git a/includes/compiler/CInt64.h b/includes/compiler/CInt64.h new file mode 100644 index 0000000..455bf3f --- /dev/null +++ b/includes/compiler/CInt64.h @@ -0,0 +1,88 @@ +#ifndef COMPILER_CINT64_H +#define COMPILER_CINT64_H + +#include "compiler/common.h" + +// make sure this is in the right place +extern const CInt64 cint64_negone; +extern const CInt64 cint64_zero; +extern const CInt64 cint64_one; +extern const CInt64 cint64_max; +extern const CInt64 cint64_min; + +inline int CInt64_IsNegative(const CInt64 *n) { + return (n->hi & 0x80000000) != 0; +} +inline void CInt64_SetLong(CInt64 *pN, SInt32 n) { + pN->lo = n; + pN->hi = (n < 0) ? 0xFFFFFFFF : 0; +} +inline void CInt64_SetULong(CInt64 *pN, UInt32 n) { + pN->lo = n; + pN->hi = 0; +} + +inline int CInt64_IsZero(CInt64 *n) { + //if (n->hi == 0 && n->lo == 0) + // return 1; + //else + // return 0; + return n->hi == 0 && n->lo == 0; +} +inline void CInt64_Extend32(CInt64 *n) { // assumed name + n->hi = (n->lo >> 31) ? 0xFFFFFFFF : 0; +} + +extern void CInt64_Init(); +extern CInt64 CInt64_Not(CInt64 input); +extern CInt64 CInt64_Inv(CInt64 input); +extern CInt64 CInt64_Add(CInt64 lhs, CInt64 rhs); +extern CInt64 CInt64_Neg(CInt64 input); +extern CInt64 CInt64_Sub(CInt64 lhs, CInt64 rhs); +extern CInt64 CInt64_MulU(CInt64 lhs, CInt64 rhs); +extern CInt64 CInt64_Mul(CInt64 lhs, CInt64 rhs); +extern void CInt64_DivMod(const CInt64 *lhs, const CInt64 *rhs, CInt64 *pDiv, CInt64 *pMod); +extern CInt64 CInt64_Div(CInt64 lhs, CInt64 rhs); +extern CInt64 CInt64_DivU(CInt64 lhs, CInt64 rhs); +extern CInt64 CInt64_Mod(CInt64 lhs, CInt64 rhs); +extern CInt64 CInt64_ModU(CInt64 lhs, CInt64 rhs); +extern CInt64 CInt64_Shl(CInt64 lhs, CInt64 rhs); +extern CInt64 CInt64_Shr(CInt64 lhs, CInt64 rhs); +extern CInt64 CInt64_ShrU(CInt64 lhs, CInt64 rhs); +extern int CInt64_UnsignedCompare(const CInt64 *lhs, const CInt64 *rhs); +extern int CInt64_SignedCompare(const CInt64 *lhs, const CInt64 *rhs); +extern Boolean CInt64_Less(CInt64 lhs, CInt64 rhs); +extern Boolean CInt64_LessU(CInt64 lhs, CInt64 rhs); +extern Boolean CInt64_Greater(CInt64 lhs, CInt64 rhs); +extern Boolean CInt64_GreaterU(CInt64 lhs, CInt64 rhs); +extern Boolean CInt64_LessEqual(CInt64 lhs, CInt64 rhs); +extern Boolean CInt64_LessEqualU(CInt64 lhs, CInt64 rhs); +extern Boolean CInt64_GreaterEqual(CInt64 lhs, CInt64 rhs); +extern Boolean CInt64_GreaterEqualU(CInt64 lhs, CInt64 rhs); +extern Boolean CInt64_Equal(CInt64 lhs, CInt64 rhs); +extern Boolean CInt64_NotEqual(CInt64 lhs, CInt64 rhs); +extern Boolean CInt64_IsInRange(CInt64 value, short len); +extern Boolean CInt64_IsInURange(CInt64 value, short len); +extern CInt64 CInt64_And(CInt64 lhs, CInt64 rhs); +extern CInt64 CInt64_Xor(CInt64 lhs, CInt64 rhs); +extern CInt64 CInt64_Or(CInt64 lhs, CInt64 rhs); +extern void CInt64_ConvertInt32(CInt64 *i); +extern void CInt64_ConvertUInt32(CInt64 *i); +extern void CInt64_ConvertInt16(CInt64 *i); +extern void CInt64_ConvertUInt16(CInt64 *i); +extern void CInt64_ConvertInt8(CInt64 *i); +extern void CInt64_ConvertUInt8(CInt64 *i); +extern void CInt64_ConvertUFromLongDouble(CInt64 *pResult, double value); +extern void CInt64_ConvertFromLongDouble(CInt64 *pResult, double value); +extern double CInt64_ConvertUToLongDouble(const CInt64 *value); +extern double CInt64_ConvertToLongDouble(const CInt64 *value); +extern char *CInt64_ScanOctString(CInt64 *pResult, char *str, Boolean *pFail); +extern char *CInt64_ScanDecString(CInt64 *pResult, char *str, Boolean *pFail); +extern char *CInt64_ScanHexString(CInt64 *pResult, char *str, Boolean *pFail); +extern char *CInt64_ScanBinString(CInt64 *pResult, char *str, Boolean *pFail); +extern char *CInt64_ScanAsmNumber(CInt64 *pResult, char *str, Boolean *pFail); +extern int CInt64_PrintDec(char *output, CInt64 value); +extern int CInt64_PrintHex(char *output, CInt64 value); +extern int CInt64_PrintBin(char *output, CInt64 value); + +#endif -- cgit v1.2.3