#include "common.h"
#include "SDCCpeeph.h"
#include "ralloc.h"
+#include "rtrack.h"
#include "gen.h"
#include "dbuf_string.h"
/*-----------------------------------------------------------------*/
/* emitcode - writes the code into a file : for now it is simple */
/*-----------------------------------------------------------------*/
-static void
+void
emitcode (const char *inst, const char *fmt,...)
{
va_list ap;
if (lbp && *lbp)
{
+ rtrackUpdate (lbp);
+
lineCurr = (lineCurr ?
connectLine (lineCurr, newLineNode (lb)) :
(lineHead = newLineNode (lb)));
if (!strncmp(x, "a", 2) || !strncmp(x, "acc", 4))
return;
+ /* if it is a literal mov try to get it cheaper */
+ if (*x == '#' &&
+ rtrackMoveALit(x))
+ return;
+
emitcode("mov", "a,%s", x);
}
if (!strncmp(x, "b", 2))
return;
+ /* if it is a literal mov try to get it cheaper */
+ if (*x == '#')
+ {
+ emitcode("mov","b,%s", rtrackGetLit(x));
+ return;
+ }
+
emitcode("mov","b,%s", x);
}
{
/* moving to accumulator first helps peepholes */
MOVA (aopGet (left, 0, FALSE, FALSE));
- emitcode ("mov", "b,%s", aopGet (right, 0, FALSE, FALSE));
+ MOVB (aopGet (right, 0, FALSE, FALSE));
}
else
{
if (lUnsigned && rUnsigned)
{
/* unsigned is easy */
- emitcode ("mov", "b,%s", aopGet (right, 0, FALSE, FALSE));
+ MOVB (aopGet (right, 0, FALSE, FALSE));
MOVA (aopGet (left, 0, FALSE, FALSE));
emitcode ("div", "ab");
aopPut (result, "a", 0);
if (lUnsigned && rUnsigned)
{
/* unsigned is easy */
- emitcode ("mov", "b,%s", aopGet (right, 0, FALSE, FALSE));
+ MOVB (aopGet (right, 0, FALSE, FALSE));
MOVA (aopGet (left, 0, FALSE, FALSE));
emitcode ("div", "ab");
aopPut (result, "b", 0);