* Removed all Id tags.
[cacao.git] / src / vm / jit / i386 / codegen.h
index 3646ee28035bae8c38725aff2d96b3773985623f..aa635ed5673c119c6d1a72d908db4758e1e284d1 100644 (file)
@@ -1,6 +1,6 @@
 /* src/vm/jit/i386/codegen.h - code generation macros and definitions for i386
 
-   Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
+   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
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   Contact: cacao@cacaojvm.org
-
-   Authors: Andreas Krall
-            Christian Thalinger
-
-   $Id: codegen.h 6081 2006-11-28 22:32:22Z twisti $
-
 */
 
 
     } while (0)
 
 
-/* gen_nullptr_check(objreg) */
-
-#define gen_nullptr_check(objreg) \
-    if (checknull) { \
-        M_TEST(objreg); \
-        M_BEQ(0); \
-           codegen_add_nullpointerexception_ref(cd); \
-    }
-
-#define gen_bound_check \
-    if (checkbounds) { \
-        M_ILD(REG_ITMP3, s1, OFFSET(java_arrayheader, size)); \
-        M_CMP(REG_ITMP3, s2); \
-        M_BAE(0); \
-        codegen_add_arrayindexoutofboundsexception_ref(cd, s2); \
-    }
-
-
 /* MCODECHECK(icnt) */
 
 #define MCODECHECK(icnt) \
 
 /* branch defines *************************************************************/
 
+#define BRANCH_UNCONDITIONAL_SIZE    5  /* size in bytes of a branch          */
+#define BRANCH_CONDITIONAL_SIZE      6  /* size in bytes of a branch          */
+
 #define BRANCH_NOPS \
     do { \
         M_NOP; \
         M_NOP; \
         M_NOP; \
         M_NOP; \
+        M_NOP; \
     } while (0)
 
 
     } while (0)
 
 
+/* stub defines ***************************************************************/
+
+#define COMPILERSTUB_CODESIZE    12
+
+
 /* macros to create code ******************************************************/
 
 #define M_ILD(a,b,disp)         emit_mov_membase_reg(cd, (b), (disp), (a))
 #define M_ALD(a,b,disp)         M_ILD(a,b,disp)
 #define M_ALD32(a,b,disp)       M_ILD32(a,b,disp)
 
+#define M_ALD_MEM(a,disp)       emit_mov_mem_reg(cd, (disp), (a))
+
+#define M_ALD_MEM_GET_OPC(p)    (*(p))
+#define M_ALD_MEM_GET_MOD(p)    (((*(p + 1)) >> 6) & 0x03)
+#define M_ALD_MEM_GET_REG(p)    (((*(p + 1)) >> 3) & 0x07)
+#define M_ALD_MEM_GET_RM(p)     (((*(p + 1))     ) & 0x07)
+#define M_ALD_MEM_GET_DISP(p)   (*((u4 *) (p + 2)))
+
 #define M_LLD(a,b,disp) \
     do { \
         M_ILD(GET_LOW_REG(a),b,disp); \
 #define M_BAE(a)                emit_jcc(cd, CC_AE, (a))
 #define M_BA(a)                 emit_jcc(cd, CC_A, (a))
 #define M_BNS(a)                emit_jcc(cd, CC_NS, (a))
+#define M_BS(a)                 emit_jcc(cd, CC_S, (a))
 
 #define M_JMP(a)                emit_jmp_reg(cd, (a))
 #define M_JMP_IMM(a)            emit_jmp_imm(cd, (a))