// MACH.C - Code Generation
// Copyright (C) 199x Landon Dyer, 2011 Reboot and Friends
// RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986
-// Source Utilised with the Kind Permission of Landon Dyer
+// Source utilised with the kind permission of Landon Dyer
//
#include "mach.h"
#include "token.h"
#include "procln.h"
#include "riscasm.h"
+#include "rmac.h"
#define DEF_KW
#include "kwtab.h"
}
else
{
- fixup(FU_QUICK, sloc, a0expr);
+ AddFixup(FU_QUICK, sloc, a0expr);
D_word(inst);
}
}
else
{
- fixup(FU_WORD | FU_PCREL | FU_ISBRA, sloc, a1expr);
+ AddFixup(FU_WORD | FU_PCREL | FU_ISBRA, sloc, a1expr);
D_word(0);
}
int siz = (int)size;
// Try to optimize to MOVEQ
- if (siz == SIZL && am0 == IMMED && am1 == DREG
+ if (optim_flag && siz == SIZL && am0 == IMMED && am1 == DREG
&& (a0exattr & (TDB|DEFINED)) == DEFINED && a0exval + 0x80 < 0x100)
{
m_moveq((WORD)0x7000, (WORD)0);
+ if (sbra_flag)
+ warn("move.l #size,dx converted to moveq");
}
else
{
// Arrange for future fixup
if (!(a0exattr & DEFINED))
{
- fixup(FU_BYTE | FU_SEXT, sloc + 1, a0expr);
+ AddFixup(FU_BYTE | FU_SEXT, sloc + 1, a0expr);
a0exval = 0;
}
else if (a0exval + 0x100 >= 0x200)
// Optimize branch instr. size
if (siz == SIZN)
{
- if (v != 0 && v + 0x80 < 0x100)
+ if (optim_flag && v != 0 && v + 0x80 < 0x100)
{
// Fits in .B
inst |= v & 0xFF;
D_word(inst);
+ if (sbra_flag)
+ warn("Bcc.w/BSR.w converted to .s");
return 0;
}
else
if (siz == SIZB)
{
// .B
- fixup(FU_BBRA | FU_PCREL | FU_SEXT, sloc, a0expr);
+ AddFixup(FU_BBRA | FU_PCREL | FU_SEXT, sloc, a0expr);
D_word(inst);
return 0;
}
{
// .W
D_word(inst);
- fixup(FU_WORD | FU_PCREL | FU_LBRA | FU_ISBRA, sloc, a0expr);
+ AddFixup(FU_WORD | FU_PCREL | FU_LBRA | FU_ISBRA, sloc, a0expr);
D_word(0);
}
}
else
{
- fixup(FU_QUICK, sloc, a0expr);
+ AddFixup(FU_QUICK, sloc, a0expr);
D_word(inst);
}