From db167ecd5f82f89d98c89e7181d07e1da8cefc7e Mon Sep 17 00:00:00 2001 From: johanknol Date: Sun, 20 Jan 2002 15:23:49 +0000 Subject: [PATCH] fixed bug #505806 git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@1827 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- sdccconf_in.h | 1 + src/xa51/gen.c | 25 ++++++++++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/sdccconf_in.h b/sdccconf_in.h index 1b635184..bcc31660 100644 --- a/sdccconf_in.h +++ b/sdccconf_in.h @@ -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 diff --git a/src/xa51/gen.c b/src/xa51/gen.c index 1c4e3f88..ef5c986c 100755 --- a/src/xa51/gen.c +++ b/src/xa51/gen.c @@ -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; -- 2.30.2