+// #define BETTER_FAR_FAR_ASSIGN
+#ifdef BETTER_FAR_FAR_ASSIGN
+ if ((IS_SYMOP(result) && OP_SYMBOL(result) && OP_SYMBOL(result)->rname)
+ && (IS_TRUE_SYMOP(result)
+ || (IS_ITEMP(result) && OP_SYMBOL(result)->isspilt && OP_SYMBOL(result)->usl.spillLoc->rname)))
+ {
+ D(emitcode(";","genFarFarAssign ('390 auto-toggle fun)"););
+ emitcode("mov", "dps, #21"); /* Select DPTR2 & auto-toggle. */
+ if (IS_TRUE_SYMOP(result))
+ {
+ emitcode ("mov", "dptr,#%s", OP_SYMBOL(result)->rname);
+ }
+ else
+ {
+ emitcode ("mov", "dptr,#%s", OP_SYMBOL(result)->usl.spillLoc->rname);
+ }
+ /* DP2 = result, DP1 = right, DP1 is current. */
+ while (size)
+ {
+ emitcode("movx", "a,@dptr");
+ emitcode("movx", "@dptr,a");
+ if (--size)
+ {
+ emitcode("inc", "dptr");
+ emitcode("inc", "dptr");
+ }
+ }
+ emitcode("mov", "dps, #0");
+ }
+ else
+#endif
+ {
+ D (emitcode (";", "genFarFarAssign (improved)"););