fixed bug #505806
authorjohanknol <johanknol@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 20 Jan 2002 15:23:49 +0000 (15:23 +0000)
committerjohanknol <johanknol@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 20 Jan 2002 15:23:49 +0000 (15:23 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@1827 4a8a32a2-be11-0410-ad9d-d568d2c75423

sdccconf_in.h
src/xa51/gen.c

index 1b6351847300989da29f03db2830e12d105a8991..bcc316601fa75c704c49eec205a066eafd053345 100644 (file)
@@ -35,6 +35,7 @@
 #undef OPT_DISABLE_Z80
 #undef OPT_DISABLE_AVR
 #undef OPT_DISABLE_DS390
+#undef OPT_DISABLE_TININative
 #undef OPT_DISABLE_PIC
 #undef OPT_DISABLE_I186
 #undef OPT_DISABLE_TLCS900H
index 1c4e3f882d345502620ff573a529ad9e1eca4faf..ef5c986c2e6e967dc5a541ac1d3bab5b798cd1c9 100755 (executable)
@@ -951,12 +951,27 @@ static void genPointerGet (iCode * ic, iCode *pi) {
       }
       return;
     case AOP_DIR:
+      if (AOP_SIZE(result)==1) {
+       instr=MOVB;
+      } else {
+       instr=MOVW;
+      }
       emitcode (instr, "%s,%s", AOP_NAME(result)[0], AOP_NAME(left)[0]);
       if (AOP_SIZE(result) > 2) {
+       if (AOP_SIZE(result)==3) {
+         instr=MOVB;
+       } else {
+         instr=MOVW;
+       }
        emitcode (instr, "%s,%s+2", AOP_NAME(result)[1], AOP_NAME(left)[0]);
       }
       return;
     case AOP_REG:
+      if (AOP_SIZE(result)==1) {
+       instr=MOVB;
+      } else {
+       instr=MOVW;
+      }
       emitcode (instr, "%s,[%s]", AOP_NAME(result)[0], AOP_NAME(left)[0]);
       if (AOP_SIZE(result) > 2) {
        // result is generic pointer
@@ -966,7 +981,7 @@ static void genPointerGet (iCode * ic, iCode *pi) {
          emitcode ("mov.b", "%s,#0x%02x", AOP_NAME(result)[1], 
                    PTR_TYPE(SPEC_OCLS(opetype)));
        } else {
-         emitcode (instr, "%s,[%s]", AOP_NAME(result)[1], AOP_NAME(left)[1]);
+         emitcode ("mov.b", "%s,[%s]", AOP_NAME(result)[1], AOP_NAME(left)[1]);
        }
       }
       return;
@@ -981,7 +996,11 @@ static void genPointerGet (iCode * ic, iCode *pi) {
          emitcode ("mov", "%s,r0", AOP_NAME(result)[0]);
        }
       } else {
-       emitcode (instr, "%s,%s", AOP_NAME(result)[0], AOP_NAME(left)[0]);
+       if (AOP_SIZE(result)==3) {
+         emitcode ("mov.b", "%s,%s", AOP_NAME(result)[0], AOP_NAME(left)[0]);
+       } else {
+         emitcode ("mov.w", "%s,%s", AOP_NAME(result)[0], AOP_NAME(left)[0]);
+       }
       }
       if (AOP_SIZE(result) > 2) {
        if (AOP_TYPE(result)==AOP_STK) {
@@ -993,7 +1012,7 @@ static void genPointerGet (iCode * ic, iCode *pi) {
            emitcode ("mov", "%s,r0", AOP_NAME(result)[1]);
          }
        } else {
-         emitcode (instr, "%s,%s", AOP_NAME(result)[1], AOP_NAME(left)[1]);
+         emitcode ("mov", "%s,%s", AOP_NAME(result)[1], AOP_NAME(left)[1]);
        }
       }
       return;