right = left;
left = t;
}
+ /* save EA bit in F1 */
+ lbl = newiTempLabel(NULL);
+ emitcode ("setb","F1");
+ emitcode ("jbc","EA,%05d$",lbl->key+100);
+ emitcode ("clr","F1");
+ emitcode("","%05d$:",lbl->key+100);
+
/* load up MB with right */
if (!umult) {
emitcode("clr","F0");
}
freeAsmop (result, NULL, ic, TRUE);
+
+ /* restore EA bit in F1 */
+ lbl = newiTempLabel(NULL);
+ emitcode ("jnb","F1,%05d$",lbl->key+100);
+ emitcode ("setb","EA");
+ emitcode("","%05d$:",lbl->key+100);
return ;
}
int umult = SPEC_USIGN(retype) | SPEC_USIGN(letype);
symbol *lbl;
+ /* save EA bit in F1 */
+ lbl = newiTempLabel(NULL);
+ emitcode ("setb","F1");
+ emitcode ("jbc","EA,%05d$",lbl->key+100);
+ emitcode ("clr","F1");
+ emitcode("","%05d$:",lbl->key+100);
+
/* load up MA with left */
if (!umult) {
emitcode("clr","F0");
aopPut(AOP(result),"a",1);
}
freeAsmop (result, NULL, ic, TRUE);
+ /* restore EA bit in F1 */
+ lbl = newiTempLabel(NULL);
+ emitcode ("jnb","F1,%05d$",lbl->key+100);
+ emitcode ("setb","EA");
+ emitcode("","%05d$:",lbl->key+100);
return ;
}
symbol *lbl;
/* load up MA with left */
+ /* save EA bit in F1 */
+ lbl = newiTempLabel(NULL);
+ emitcode ("setb","F1");
+ emitcode ("jbc","EA,%05d$",lbl->key+100);
+ emitcode ("clr","F1");
+ emitcode("","%05d$:",lbl->key+100);
+
if (!umult) {
lbl = newiTempLabel(NULL);
emitcode ("mov","b,%s",aopGet(AOP(left),0,FALSE,FALSE,TRUE));
aopPut(AOP(result),"mb",1);
aopPut(AOP(result),"mb",0);
freeAsmop (result, NULL, ic, TRUE);
+
+ /* restore EA bit in F1 */
+ lbl = newiTempLabel(NULL);
+ emitcode ("jnb","F1,%05d$",lbl->key+100);
+ emitcode ("setb","EA");
+ emitcode("","%05d$:",lbl->key+100);
return ;
}
fprintf (stderr,
"*** error: ds390 port only supports the 10 bit stack mode.\n");
}
+
+ /* generate native code 16*16 mul/div */
+ if (options.useAccelerator)
+ port->support.muldiv=2;
+ else
+ port->support.muldiv=1;
/* Fixup the memory map for the stack; it is now in
* far space and requires a FPOINTER to access it.
fputs ("ma = 0xD3\t\t; ma register unknown to assembler\n", of);
fputs ("mb = 0xD4\t\t; mb register unknown to assembler\n", of);
fputs ("mc = 0xD5\t\t; mc register unknown to assembler\n", of);
+ fputs ("F1 = 0xD1\t\t; F1 user flag unknown to assembler\n", of);
}
/* Generate interrupt vector table. */