24 bit flat mode: get call via function pointer working
authorkvigor <kvigor@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Wed, 9 Feb 2000 22:07:41 +0000 (22:07 +0000)
committerkvigor <kvigor@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Wed, 9 Feb 2000 22:07:41 +0000 (22:07 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@92 4a8a32a2-be11-0410-ad9d-d568d2c75423

src/mcs51/gen.c

index 6f3190ff23142cea7592d74e77c72a467679af5a..de4432692718e6726a71a83bbb308cb8b28f4db9 100644 (file)
@@ -319,7 +319,7 @@ static asmop *aopForSym (iCode *ic,symbol *sym,bool result)
         sym->aop = aop = newAsmop(AOP_IMMD);    
         ALLOC_ATOMIC(aop->aopu.aop_immd,strlen(sym->rname)+1);
         strcpy(aop->aopu.aop_immd,sym->rname);
-        aop->size = 2;
+        aop->size = FPTRSIZE; 
         return aop;
     }
 
@@ -1741,11 +1741,17 @@ static void genPcall (iCode *ic)
     emitcode("push","acc");    
     emitcode("mov","a,#(%05d$ >> 8)",(rlbl->key+100));
     emitcode("push","acc");
+    
+    if (options.model == MODEL_FLAT24)
+    {
+       emitcode("mov","a,#(%05d$ >> 16)",(rlbl->key+100));
+       emitcode("push","acc");    
+    }
 
     /* now push the calling address */
     aopOp(IC_LEFT(ic),ic,FALSE);
 
-    pushSide(IC_LEFT(ic), 2);
+    pushSide(IC_LEFT(ic), FPTRSIZE);
 
     freeAsmop(IC_LEFT(ic),NULL,ic,TRUE);