/* src/vm/jit/alpha/codegen.h - code generation macros and definitions for Alpha
- Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
- C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
- E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
- J. Wenninger, Institut f. Computersprachen - TU Wien
+ Copyright (C) 1996-2005, 2006, 2007
+ CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
+ Copyright (C) 2008 Theobroma Systems Ltd.
This file is part of CACAO.
#include "config.h"
#include "vm/types.h"
-#include "vm/jit/jit.h"
+#include "vm/jit/jit.hpp"
/* additional functions and macros to generate code ***************************/
}
-/* M_INTMOVE:
- generates an integer-move from register a to b.
- if a and b are the same int-register, no code will be generated.
-*/
-
-#define M_INTMOVE(a,b) \
- do { \
- if ((a) != (b)) \
- M_MOV(a, b); \
- } while (0)
-
-
-/* M_FLTMOVE:
- generates a floating-point-move from register a to b.
- if a and b are the same float-register, no code will be generated
-*/
-
-#define M_FLTMOVE(a,b) \
- do { \
- if ((a) != (b)) \
- M_FMOV(a, b); \
- } while (0)
-
-
#define ICONST(d,c) emit_iconst(cd, (d), (c))
#define LCONST(d,c) emit_lconst(cd, (d), (c))
} while (0)
-/* stub defines ***************************************************************/
-
-#define COMPILERSTUB_CODESIZE 1 * 4
-
-
/* macros to create code ******************************************************/
/* M_MEM - memory instruction format *******************************************
cd->mcodeptr += 4; \
} while (0)
+#define M_OP3_GET_Opcode(x) ( (((x) >> 26) & 0x3f ))
+
/* 3-address-floating-point-operation: M_FOP3
op .... opcode
#define M_ALD_INTERN(a,b,disp) M_LLD_INTERN(a,b,disp)
#define M_ALD(a,b,disp) M_LLD(a,b,disp) /* addr load */
+#define M_ALD_DSEG(a,disp) M_LLD(a,REG_PV,disp)
#define M_BST(a,b,disp) M_MEM(0x0e,a,b,disp) /* 8 store */
#define M_SST(a,b,disp) M_MEM(0x0d,a,b,disp) /* 16 store */
#define M_FCMPLTS(a,b,c) M_FOP3 (0x16, 0x5a6, a,b,c) /* c = a<b */
#define M_FMOV(fa,fb) M_FOP3 (0x17, 0x020, fa,fa,fb) /* b = a */
+#define M_DMOV(fa,fb) M_FMOV (fa,fb)
#define M_FMOVN(fa,fb) M_FOP3 (0x17, 0x021, fa,fa,fb) /* b = -a */
#define M_FNOP M_FMOV (31,31)
#define M_FBEQZ(fa,disp) M_BRA (0x31,fa,disp) /* br a == 0.0*/
-/* macros for special commands (see an Alpha-manual for description) **********/
+/* macros for special commands (see an Alpha-manual for description) **********/
#define M_TRAPB M_MEM (0x18,0,0,0x0000) /* trap barrier*/
#define M_CMOVLE_IMM(a,b,c) M_OP3 (0x11,0x64, a,b,c,1) /* a<=0 ? c=b */
#define M_CMOVGT_IMM(a,b,c) M_OP3 (0x11,0x66, a,b,c,1) /* a> 0 ? c=b */
+// 0x04 seems to be the first undefined instruction which does not
+// call PALcode.
+#define M_UNDEFINED M_OP3(0x04, 0, 0, 0, 0, 0)
+
/* macros for unused commands (see an Alpha-manual for description) ***********/
#define M_ANDNOT(a,b,c,const) M_OP3 (0x11,0x08, a,b,c,const) /* c = a &~ b */