Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: arch.h 5330 2006-09-05 18:43:12Z edwin $
-
*/
#define PATCHER_NOPS \
do { M_TPFL; M_TPF; M_TPF } while (0);
+#define PATCHER_CALL_SIZE (3*2)
/* stub defines ***************************************************************/
-#define COMPILERSTUB_CODESIZE (6+6+6+2)
+#define COMPILERSTUB_CODESIZE (6+6+2)
/* coldfire instruction format:
-#define PATCHER_CALL_SIZE 6
#define M_NOP OPWORD(0x139,6,1) /* 0x4371 do not use as it syncs pipeline */
#define M_ILLEGAL OPWORD(0x12b,7,4) /* 0x4afc */
#define M_IPUSH_IMM(a) OPWORD_IMM32(0x121,7,1, (a)) /* pea.l */
+#if 0
#define M_PUSHALL OPWORD_IMM16(0x123,2,REG_SP,0xFFFF) /* A0-A7, D0-D7 pushed onto stack */
#define M_POPALL OPWORD_IMM16(0x133,2,REG_SP,0xFFFF) /* A0-A7, D0-D7 poped off stack */
+#endif
/* M_XLD(a,b,c)....M_XLD(destinationreg, addressbase, offset) */
#define M_ILD(a,b,c) OPWORD_IMM16( ( (2<<6) | ((a) << 3) | 0), 5, (b), (c))
#if !defined(ENABLE_SOFTFLOAT)
#define M_FST(a,b,c) OPWORD_IMM32( 0x3c8, 5, (b), ( (( (0x19 <<10) | ((a)<<7) | 0 )<<16) | (((int16_t)(c)) & 0x0000ffff)) )
#define M_DST(a,b,c) OPWORD_IMM32( 0x3c8, 5, (b), ( (( (0x1d <<10) | ((a)<<7) | 0 )<<16) | (((int16_t)(c)) & 0x0000ffff)) )
+ #define M_FSTORE(a,b,c) OPWORD_IMM32( 0x3c8, 5, (b), ( ( (0xf << 12) | (1 << (7-(a))) ) <<16) | (((int16_t)(c)) & 0x0000ffff))
+ #define M_FLOAD(a,b,c) OPWORD_IMM32( 0x3c8, 5, (b), ( ( (0xd << 12) | (1 << (7-(a))) ) <<16) | (((int16_t)(c)) & 0x0000ffff))
#endif
/*M_XADD_IMM(a,b)...M_XADD_IMM(offset, reg) */
/* M_OP(source, dest) ... dest (OP) source -> dest*/
#define M_ISUB(a,b) OPWORD ( ( (9<<6) | ((b)<<3) | 2), 0, (a)) /* sub.l */
+#define M_ISUBX(a,b) OPWORD ( ( (9<<6) | ((b)<<3) | 6), 0, (a)) /* subx.l */
#define M_IADD(a,b) OPWORD ( ( (0xd<<6) | ((b)<<3) | 2), 0, (a)) /* add.l */
#define M_IADDX(a,b) OPWORD ( ( (0xd<<6) | ((b)<<3) | 6), 0, (a)) /* addx.l */
/* M_OP(dest) */
#define M_INEG(a) OPWORD(0x112, 0, (a)) /* neg.l */
+#define M_INEGX(a) OPWORD(0x102, 0, (a)) /* neg.l */
/* only generate opcode when condition true */
#define OPWORD_COND(c, u,v,w) \
#define M_FDIV(a,b) OPWORD_IMM16(0x3c8, 0, 0, ((a) << 10) | ((b) << 7) | 0x60 ) /* fsdiv */
#define M_DDIV(a,b) OPWORD_IMM16(0x3c8, 0, 0, ((a) << 10) | ((b) << 7) | 0x64 ) /* fddiv */
- #define M_D2F(a,b) OPWORD_IMM16(0x3c8, 0, 0, ((a) << 10) | ((b) << 7) | 0x40 ) /* fmove.s */
- #define M_F2D(a,b) OPWORD_IMM16(0x3c8, 0, 0, ((a) << 10) | ((b) << 7) | 0x44 ) /* fmove.d */
+ #define M_D2F(a,b) OPWORD_IMM16(0x3c8, 0, 0, ((a) << 10) | ((b) << 7) | 0x44 ) /* fsmoved */
+ #define M_F2D(a,b) OPWORD_IMM16(0x3c8, 0, 0, ((a) << 10) | ((b) << 7) | 0x40 ) /* fdmoved */
#define M_FNEG(a,b) OPWORD_IMM16(0x3c8, 0, 0, ((a) << 10) | ((b) << 7) | 0x5a ) /* fneg.s */
#define M_DNEG(a,b) OPWORD_IMM16(0x3c8, 0, 0, ((a) << 10) | ((b) << 7) | 0x5e ) /* fneg.d */