* as/mcs51/asx8051.dsp: removed define SDK
authorMaartenBrock <MaartenBrock@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sat, 19 Jan 2008 13:06:10 +0000 (13:06 +0000)
committerMaartenBrock <MaartenBrock@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sat, 19 Jan 2008 13:06:10 +0000 (13:06 +0000)
* as/mcs51/i51mch.c (machine): fixed bug 1865114

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

ChangeLog
as/mcs51/asx8051.dsp
as/mcs51/i51mch.c

index 0cf9255a09edd74292a8e308c01a4b4f9d132cb3..089faa18b65ac4bec4bedb635a16faf7006d79ee 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2008-01-19 Maarten Brock <sourceforge.brock AT dse.nl>
+
+       * as/mcs51/asx8051.dsp: removed define SDK
+       * as/mcs51/i51mch.c (machine): fixed bug 1865114
+
 2008-01-13 Borut Razem <borut.razem AT siol.net>
 
        * support/scripts/sdcc.nsi: added Uninstall/reinstall page, ...
index fdd57547ba9365a7f4339cd13b803722ae005a49..f6698da802d6b9efe79af85ee9c8fa20dd099319 100644 (file)
@@ -41,8 +41,8 @@ RSC=rc.exe
 # PROP Intermediate_Dir "Debug"\r
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "INDEXLIB" /D "MLH_MAP" /D "SDK" /FR /FD /GZ /c\r
-# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "." /I "../../support/Util" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "INDEXLIB" /D "MLH_MAP" /D "SDK" /FR /FD /GZ /c\r
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "INDEXLIB" /D "MLH_MAP" /FR /FD /GZ /c\r
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "." /I "../../support/Util" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "INDEXLIB" /D "MLH_MAP" /FR /FD /GZ /c\r
 # ADD BASE RSC /l 0x409 /d "_DEBUG"\r
 # ADD RSC /l 0x409 /d "_DEBUG"\r
 BSC32=bscmake.exe\r
@@ -66,8 +66,8 @@ LINK32=link.exe
 # PROP Intermediate_Dir "Release"\r
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "INDEXLIB" /D "MLH_MAP" /D "SDK" /FD /c\r
-# ADD CPP /nologo /ML /W3 /GX /O2 /I "." /I "../../support/Util" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "INDEXLIB" /D "MLH_MAP" /D "SDK" /FD /c\r
+# ADD BASE CPP /nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "INDEXLIB" /D "MLH_MAP" /FD /c\r
+# ADD CPP /nologo /ML /W3 /GX /O2 /I "." /I "../../support/Util" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "INDEXLIB" /D "MLH_MAP" /FD /c\r
 # ADD BASE RSC /l 0x409 /d "NDEBUG"\r
 # ADD RSC /l 0x409 /d "NDEBUG"\r
 BSC32=bscmake.exe\r
index f4f4215533e5938d5fa85ccada19fe3760ae3c05..9e7b2900766053cb7b3b529a4e2d551e4260028c 100644 (file)
@@ -25,10 +25,11 @@ machine(struct mne *mp)
 {
         register unsigned op;
         register int t, t1, v1;
-        struct expr e, e1;
+        struct expr e, e1, e2;
 
         clrexpr(&e);
         clrexpr(&e1);
+        clrexpr(&e2);
 
         op = mp->m_valu;
         switch (mp->m_type) {
@@ -57,7 +58,7 @@ machine(struct mne *mp)
                 break;
 
         case S_JMP16:
-                /* LCALl or LJMP. In Flat24 mode, this is a 24 bit
+                /* LCALL or LJMP. In Flat24 mode, this is a 24 bit
                  * destination; in 8051 mode, this is a 16 bit
                  * destination.
                  */
@@ -413,16 +414,12 @@ machine(struct mne *mp)
                 t = addr(&e);
                 if ((t != S_DIR) && (t != S_EXT))
                         aerr();
-                outab(op);
-                outrb(&e, R_PAG0);
-
                 comma();
                 expr(&e1, 0);
+                outab(op);
+                outrb(&e, R_PAG0);
                 if (e1.e_base.e_ap == NULL || e1.e_base.e_ap == dot.s_area) {
-                        if ( e1.e_addr == dot.s_addr)
-                                v1 = -3;
-                        else
-                                v1 = e1.e_addr - dot.s_addr - 1;
+                        v1 = e1.e_addr - dot.s_addr - 1;
                         if (pass==2 && ((v1 < -128) || (v1 > 127)))
                                 aerr();
                         outab(v1);
@@ -435,13 +432,10 @@ machine(struct mne *mp)
 
         case S_BR:
                 /* Relative branch */
-                outab(op);
                 expr(&e1, 0);
+                outab(op);
                 if (e1.e_base.e_ap == NULL || e1.e_base.e_ap == dot.s_area) {
-                        if ( e1.e_addr == dot.s_addr)
-                                v1 = -2;
-                        else
-                                v1 = e1.e_addr - dot.s_addr - 1;
+                        v1 = e1.e_addr - dot.s_addr - 1;
                         if (pass == 2 && ((v1 < -128) || (v1 > 127)))
                                 aerr();
                         outab(v1);
@@ -457,6 +451,8 @@ machine(struct mne *mp)
                 t = addr(&e);
                 comma();
                 t1 = addr(&e1);
+                comma();
+                expr(&e2, 0);
                 switch (t) {
                 case S_A:
                         if (t1 == S_IMMED) {
@@ -490,51 +486,42 @@ machine(struct mne *mp)
                 }
 
                 /* branch destination */
-                comma();
-                expr(&e1, 0);
-                if (e1.e_base.e_ap == NULL || e1.e_base.e_ap == dot.s_area) {
-                        if ( e1.e_addr == dot.s_addr)
-                                v1 = -3;
-                        else
-                                v1 = e1.e_addr - dot.s_addr - 1;
+                if (e2.e_base.e_ap == NULL || e2.e_base.e_ap == dot.s_area) {
+                        v1 = e2.e_addr - dot.s_addr - 1;
                         if (pass == 2 && ((v1 < -128) || (v1 > 127)))
                                 aerr();
                         outab(v1);
                 } else {
-                        outrb(&e1, R_PCR);
+                        outrb(&e2, R_PCR);
                 }
-                if (e1.e_mode != S_USER)
+                if (e2.e_mode != S_USER)
                         rerr();
                 break;
 
         case S_DJNZ:
                 /* Dir,dest;  Reg,dest */
                 t = addr(&e);
+                comma();
+                expr(&e1, 0);
                 switch (t) {
 
                 case S_DIR:
                 case S_EXT:
                         outab(op + 5);
                         outrb(&e, R_PAG0);
-                        v1 = -3;
                         break;
 
                 case S_REG:
                         outab(op + 8 + e.e_addr);
-                        v1 = -2;
                         break;
 
                 default:
                         aerr();
-                        v1 = 0;
                 }
 
                 /* branch destination */
-                comma();
-                expr(&e1, 0);
                 if (e1.e_base.e_ap == NULL || e1.e_base.e_ap == dot.s_area) {
-                        if ( e1.e_addr != dot.s_addr)
-                                v1 = e1.e_addr - dot.s_addr - 1;
+                        v1 = e1.e_addr - dot.s_addr - 1;
                         if (pass == 2 && ((v1 < -128) || (v1 > 127)))
                                 aerr();
                         outab(v1);