X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2FSDCCval.h;h=27950882065d6d31391d0ec78c9920b0d20a5906;hb=90bdb43b342189fcb94a398855d43f3f47f96738;hp=77ea58cd5802ddab6cb2eede172d2bfc8669c29f;hpb=29779804200986ce903b5086441b49265a122dc5;p=fw%2Fsdcc diff --git a/src/SDCCval.h b/src/SDCCval.h index 77ea58cd..27950882 100644 --- a/src/SDCCval.h +++ b/src/SDCCval.h @@ -20,10 +20,11 @@ You are forbidden to forbid anyone else to use, share and improve what you give them. Help stamp out software-hoarding! -------------------------------------------------------------------------*/ -#include "SDCCsymt.h" #ifndef SDCCVAL_H #define SDCCVAL_H +#include "SDCCsymt.h" + /* value wrapper */ typedef struct value { @@ -37,6 +38,14 @@ typedef struct value } value; +typedef struct literalList +{ + double literalValue; + unsigned count; + struct literalList *next; +} literalList; + + enum { INIT_NODE, @@ -49,6 +58,7 @@ typedef struct initList { int type; int lineno; + char *filename; union { struct ast *node; @@ -60,6 +70,16 @@ typedef struct initList } initList; +/* return values from checkConstantRange */ +typedef enum + { + CCR_OK, /* evaluate at runtime */ + CCR_OVL, + CCR_ALWAYS_FALSE, + CCR_ALWAYS_TRUE + } +CCR_RESULT; + #define IS_VARG(x) (x->vArgs) /* forward definitions for the symbol table related functions */ @@ -75,6 +95,14 @@ value *charVal (char *); value *symbolVal (symbol *); void printVal (value *); double floatFromVal (value *); + +/* convert a fixed16x16 type to double */ +double doubleFromFixed16x16(TYPE_TARGET_ULONG value); + +/* convert a double type to fixed16x16 */ +TYPE_TARGET_ULONG fixed16x16FromDouble(double value); + +CCR_RESULT checkConstantRange (sym_link *var, sym_link *lit, int op, bool exchangeOps); value *array2Ptr (value *); value *valUnaryPM (value *); value *valComplement (value *); @@ -89,18 +117,22 @@ value *valCompare (value *, value *, int); value *valBitwise (value *, value *, int); value *valLogicAndOr (value *, value *, int); value *valCastLiteral (sym_link *, double); -value *valueFromLit (float); +value *valueFromLit (double); initList *newiList (int, void *); initList *revinit (initList *); initList *copyIlist (initList *); double list2int (initList *); value *list2val (initList *); struct ast *list2expr (initList *); -void resolveIvalSym (initList *); +void resolveIvalSym (initList *, sym_link *); value *valFromType (sym_link *); value *constFloatVal (char *); +value *constFixed16x16Val (char *); int getNelements (sym_link *, initList *); value *valForArray (struct ast *); value *valForStructElem (struct ast *, struct ast *); value *valForCastAggr (struct ast *, sym_link *, struct ast *, int); +value *valForCastArr (struct ast * , sym_link *); +bool convertIListToConstList(initList *src, literalList **lList); +literalList *copyLiteralList(literalList *src); #endif