]> git.gag.com Git - fw/sdcc/blobdiff - src/ds390/gen.c
Fix bug 706781
[fw/sdcc] / src / ds390 / gen.c
index d417b07fc9afe1de751f7ed6112b74f7b547de3f..d4a79b53236193c7f5fb1e170c4408a755f27514 100644 (file)
@@ -3812,11 +3812,21 @@ bool aopOp3(iCode * ic)
 //            AOP_IS_DPTRn(IC_LEFT(ic)) ? "true" : "false",
 //            AOP_IS_DPTRn(IC_RIGHT(ic)) ? "true" : "false",
 //            AOP_IS_DPTRn(IC_RESULT(ic)) ? "true" : "false");
-//      );      
-
+//      );
     
-    // Right uses DPTR unless left or result is an AOP_STR.
-    aopOp (IC_RIGHT(ic),ic,FALSE, AOP_IS_STR(IC_LEFT(ic)) || AOP_IS_STR(IC_RESULT(ic)));
+    // Right uses DPTR unless left or result is an AOP_STR; however,
+    // if right is an AOP_STR, it must use DPTR regardless.
+    if ((AOP_IS_STR(IC_LEFT(ic)) || AOP_IS_STR(IC_RESULT(ic)))
+     && !AOP_IS_STR(IC_RIGHT(ic)))
+    {
+       useDp2 = TRUE;
+    }
+    else
+    {
+       useDp2 = FALSE;
+    }
+       
+    aopOp (IC_RIGHT(ic),ic,FALSE, useDp2);
     
     // if the right used DPTR, left MUST use DPTR2.
     // if the right used DPTR2, left MUST use DPTR.