some more parmBytes problem stack not adjusted
authorsandeep <sandeep@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Mon, 7 Feb 2000 18:28:19 +0000 (18:28 +0000)
committersandeep <sandeep@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Mon, 7 Feb 2000 18:28:19 +0000 (18:28 +0000)
when call made to reentrant support functions
eg (when _moduint/_muluint ...etc are called)

git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@84 4a8a32a2-be11-0410-ad9d-d568d2c75423

src/SDCCast.c
src/SDCCicode.c
src/SDCCsymt.h

index e26c925e67c4d592466d36844aac1d217210349f..d917e84ff3d9a606c43daca66c1cc0ec1a7330f1 100644 (file)
@@ -447,7 +447,7 @@ symbol *funcOfType (char *name, link *type, link *argType,
                    int nArgs , int rent)
 {
     symbol *sym;    
-       
+    int argStack = 0;  
     /* create the symbol */
     sym = newSymbol (name,0);
        
@@ -458,6 +458,7 @@ symbol *funcOfType (char *name, link *type, link *argType,
        args = sym->args = newValue();
 
        while (nArgs--) {
+           argStack += getSize(type);
            args->type = copyLinkChain(argType);
            args->etype = getSpec(args->type);
            if (!nArgs)
@@ -476,6 +477,7 @@ symbol *funcOfType (char *name, link *type, link *argType,
     /* save it */
     addSymChain(sym);
     sym->cdef = 1;
+    sym->argStack = (rent ? argStack : 0);
     allocVariables (sym);
     return sym;
     
index bdee802c7e4a71e4a40e00d67a6e16bb914126ee..fd7b49a1d3f0e9f4333cb5594742812f6184a01e 100644 (file)
@@ -1084,6 +1084,7 @@ operand *operandFromSymbol (symbol *sym)
        op->key = sym->key ;
        op->isvolatile = isOperandVolatile(op,TRUE);
        op->isGlobal   = isOperandGlobal(op);
+       op->parmBytes  = sym->argStack;
        return op;
     }
     
index 1b38daa5ad5b9cf4acb0600e9b86a115a7f2f328..b6bebde093b345f439b21712e9b729b632db2b1f 100644 (file)
@@ -228,6 +228,7 @@ typedef struct symbol {
     int      liveTo   ;            /* live to sequence number */    
     int      used     ;            /* no. of times this was used */
     int      recvSize ;            /* size of first argument  */
+    int      argStack ;            /* stacks used by parameters */
 
 } symbol ;