[kaffe] Unification of jit-m68k.def and jit3-m68k.def (step 1)

Kiyo Inaba inaba at src.ricoh.co.jp
Wed Sep 1 05:20:56 PDT 2004


Hi,

As I said, I am now unifing machine specific portion of jit file.
Attached is the result for step 1.

While doing this merge, I found several errors for both jit and jit3.
It can be a good co-product of this effort :-)

Kiyo

diff --exclude CVS -ur /proj/src/kaffe-snap-040812/ChangeLog /proj/src/kaffe-snap-040826/ChangeLog
--- /proj/src/kaffe-snap-040812/ChangeLog	2004-09-01 21:01:08.000000000 +0900
+++ /proj/src/kaffe-snap-040826/ChangeLog	2004-09-01 21:03:01.000000000 +0900
@@ -1,3 +1,9 @@
+2004-09-01  Kiyo Inaba <inaba at src.ricoh.co.jp>
+
+	* config/m68k/jit-m68k.def,
+	config/m68k/jit3-m68k.def: Unification of jit-m68k.def and
+	jit3-m68k.def, step 1.
+
 2004-08-24  Guilhem Lavaux <guilhem at kaffe.org>
 
 	* configure.ac: Configure boehm subdir. Append
diff --exclude CVS -ur /proj/src/kaffe-snap-040812/config/m68k/jit3-m68k.def /proj/src/kaffe-snap-040826/config/m68k/jit3-m68k.def
--- /proj/src/kaffe-snap-040812/config/m68k/jit3-m68k.def	2004-08-17 12:14:35.000000000 +0900
+++ /proj/src/kaffe-snap-040826/config/m68k/jit3-m68k.def	2004-09-01 20:32:47.000000000 +0900
@@ -5,7 +5,7 @@
  *	Transvirtual Technologies, Inc.  All rights reserved.
  *
  * Copyright (c) 2004
- *      Kaffe.org contributors, see ChangeLogs for details.  All rights reserved.
+ *	Kaffe.org contributors, see ChangeLogs for details.  All rights reserved.
  *
  * See the file "license.terms" for information on usage and redistribution 
  * of this file. 
@@ -15,7 +15,10 @@
 #include <string.h>
 #include "classMethod.h"
 #include "access.h"
+#include "gtypes.h"
+#if defined(JIT3)
 #include "soft.h"
+#endif
 
 #define	REG_d0			0
 #define	REG_d1			1
@@ -566,6 +569,7 @@
 	WOUT(0x2000 | ((dst & 7) << 9) | (MODE_d << 6) | (MODE_a << 3) | (src & 7));
 }
 
+#if defined(JIT3)
 static inline void
 op_movel_da(int src, int dst)
 {
@@ -574,6 +578,7 @@
 	assert_dreg(dst);
 	WOUT(0x2000 | ((dst & 7) << 9) | (MODE_a << 6) | (MODE_d << 3) | (src & 7));
 }
+#endif
 
 static inline void
 op_movel_dd(int src, int dst)
@@ -649,6 +654,7 @@
 	WOUT(0x2000 | ((dst & 7) << 9) | (MODE_predec << 6) | (MODE_a << 3) | (src & 7));
 }
 
+#if defined(JIT3)
 static inline void
 op_movel_pd(int src, int dst)
 {
@@ -666,6 +672,7 @@
 	assert_areg(dst);
 	WOUT(0x2000 | ((dst & 7) << 9) | (MODE_a << 6) | (MODE_postinc << 3) | (src & 7));
 }
+#endif
 
 static inline void
 op_movel_dp(int src, int dst)
@@ -736,6 +743,7 @@
 	LOUT(imm);
 }
 
+#if defined(JIT3)
 static inline void
 op_moveml_ro(int mask, int areg, int disp)
 {
@@ -775,6 +783,7 @@
 	WOUT(0x4CC0 | (MODE_postinc << 3) | (areg & 7));
 	WOUT(mask);
 }
+#endif
 
 static inline void
 op_moveq_id(int imm, int dst)
@@ -880,8 +889,7 @@
 	WOUT(0x90C0 | ((dst & 7) << 9) | MODE_src_imm);
 	WOUT(disp);
 }
-#endif
-
+#else
 static inline void
 op_subal_ia(int imm, int dst)
 {
@@ -890,6 +898,7 @@
 	WOUT(0x91C0 | ((dst & 7) << 9) | MODE_src_imm);
 	LOUT(imm);
 }
+#endif
 
 static inline void
 op_subql_id(int imm, int dst)
@@ -1214,7 +1223,7 @@
 
 define_insn(unimplemented, unimplemented)
 {
-	abort();
+	ABORT();
 }
 
 define_insn(nop, nop)
@@ -1311,18 +1320,20 @@
 	op_moveal_aa(REG_a0, REG_sp);
 }
 
+#if defined(JIT3)
 define_insn(check_stack_limit, check_stack_limit_xRC)
 {
-        int r = rreg_ref(1);
-        label* l = const_label(2);
+	int r = rreg_ref(1);
+	label* l = const_label(2);
 
 	op_cmpal_aa(REG_sp, r);
 	op_blo_16(8);
-        l->type |= Llong|Labsolute;
-        l->at = CODEPC+2;
-        l->from = CODEPC+2;
+	l->type |= Llong|Labsolute;
+	l->at = CODEPC+2;
+	l->from = CODEPC+2;
 	op_jsr_32((uintp)soft_stackoverflow);
 }
+#endif
 
 /* --------------------------------------------------------------------- */
 
@@ -1745,14 +1756,13 @@
 
 define_insn(rem_int, remi_RRR)
 {
-	int d;
+	int d = rreg_int(2);
 	int n;
 	int x;
 
 	/* If register is global then we cannot trash 'd' - we'll pick d0
 	 * to trash instead (we can be assured d != d0).
 	 */
-	d = rreg_int(2);
 	if (isRegisterGlobal(d)) {
 		x = REG_d0;
 	}
@@ -1982,7 +1992,7 @@
 		op_exg_da(r2, r1);
 		break;
 	default:
-		abort();
+		ABORT();
 	}
 }
 #endif
@@ -2265,7 +2275,7 @@
 		op_blo_16(0);
 		break;
 	default:
-		abort();
+		ABORT();
 	}
 #else
 	l->type |= Llong | Lrelative | Lrangecheck;
@@ -2298,7 +2308,7 @@
 		op_blo_32(0);
 		break;
 	default:
-		abort();
+		ABORT();
 	}
 #endif
 }
@@ -2406,7 +2416,7 @@
 	int o = const_int(2) * 4;
 
 	if (o < 0) {
-		abort();
+		ABORT();
 	}
 	else if (o > 0) {
 		if (o <= 0x8) {
diff --exclude CVS -ur /proj/src/kaffe-snap-040812/config/m68k/jit-m68k.def /proj/src/kaffe-snap-040826/config/m68k/jit-m68k.def
--- /proj/src/kaffe-snap-040812/config/m68k/jit-m68k.def	2004-07-13 23:17:04.000000000 +0900
+++ /proj/src/kaffe-snap-040826/config/m68k/jit-m68k.def	2004-09-01 20:05:12.000000000 +0900
@@ -4,6 +4,9 @@
  * Copyright (c) 1996, 1997
  *	Transvirtual Technologies, Inc.  All rights reserved.
  *
+ * Copyright (c) 2004
+ *	Kaffe.org contributors, see ChangeLogs for details.  All rights reserved.
+ *
  * See the file "license.terms" for information on usage and redistribution 
  * of this file. 
  */
@@ -15,6 +18,9 @@
 #include "classMethod.h"
 #include "access.h"
 #include "gtypes.h"
+#if defined(JIT3)
+#include "soft.h"
+#endif
 
 #define	REG_d0			0
 #define	REG_d1			1
@@ -104,6 +110,7 @@
 	WOUT(0xD080 | (dst << 9) | (MODE_d << 3) | (src & 7));
 }
 
+#if !defined(HAVE_NO_ADDAW)
 static inline void
 op_addaw_ia(int imm, int dst)
 {
@@ -113,6 +120,7 @@
 	WOUT(0xD0C0 | ((dst & 7) << 9) | MODE_src_imm);
 	WOUT(imm);
 }
+#endif
 
 static inline void
 op_addal_ia(int imm, int dst)
@@ -196,6 +204,74 @@
 }
 
 static inline void
+op_blo_16(int disp)
+{
+	debug(("blo %+d\n", disp));
+	WOUT(0x6500);
+	WOUT(disp);
+}
+
+#if defined(HAVE_NO_LONG_BRANCHES)
+
+static inline void
+op_beq_16(int disp)
+{
+	debug(("beq %+d\n", disp));
+	WOUT(0x6700);
+	WOUT(disp);
+}
+
+static inline void
+op_bne_16(int disp)
+{
+	debug(("bne %+d\n", disp));
+	WOUT(0x6600);
+	WOUT(disp);
+}
+
+static inline void
+op_blt_16(int disp)
+{
+	debug(("blt %+d\n", disp));
+	WOUT(0x6D00);
+	WOUT(disp);
+}
+
+static inline void
+op_ble_16(int disp)
+{
+	debug(("ble %+d\n", disp));
+	WOUT(0x6F00);
+	WOUT(disp);
+}
+
+static inline void
+op_bgt_16(int disp)
+{
+	debug(("bgt %+d\n", disp));
+	WOUT(0x6E00);
+	WOUT(disp);
+}
+
+static inline void
+op_bge_16(int disp)
+{
+	debug(("bge %+d\n", disp));
+	WOUT(0x6C00);
+	WOUT(disp);
+}
+
+static inline void
+op_bra_16(int disp)
+{
+	debug(("bra %+d\n", disp));
+	WOUT(0x6000);
+	WOUT(disp);
+}
+
+#else
+
+static inline void
 op_beq_32(int disp)
 {
 	debug(("beq %+d\n", disp));
@@ -258,6 +334,7 @@
 	WOUT(0x60FF);
 	LOUT(disp);
 }
+#endif
 
 static inline void
 op_bsr_32(int disp)
@@ -492,6 +569,17 @@
 	WOUT(0x2000 | ((dst & 7) << 9) | (MODE_d << 6) | (MODE_a << 3) | (src & 7));
 }
 
+#if defined(JIT3)
+static inline void
+op_movel_da(int src, int dst)
+{
+	debug(("movel %s, %s\n", regname(src), regname(dst)));
+	assert_areg(src);
+	assert_dreg(dst);
+	WOUT(0x2000 | ((dst & 7) << 9) | (MODE_a << 6) | (MODE_d << 3) | (src & 7));
+}
+#endif
+
 static inline void
 op_movel_dd(int src, int dst)
 {
@@ -566,6 +654,26 @@
 	WOUT(0x2000 | ((dst & 7) << 9) | (MODE_predec << 6) | (MODE_a << 3) | (src & 7));
 }
 
+#if defined(JIT3)
+static inline void
+op_movel_pd(int src, int dst)
+{
+	debug(("movel +(%s), %s\n", regname(src), regname(dst)));
+	assert_areg(src);
+	assert_dreg(dst);
+	WOUT(0x2000 | ((dst & 7) << 9) | (MODE_d << 6) | (MODE_postinc << 3) | (src & 7));
+}
+
+static inline void
+op_movel_pa(int src, int dst)
+{
+	debug(("movel +(%s), %s\n", regname(src), regname(dst)));
+	assert_areg(src);
+	assert_areg(dst);
+	WOUT(0x2000 | ((dst & 7) << 9) | (MODE_a << 6) | (MODE_postinc << 3) | (src & 7));
+}
+#endif
+
 static inline void
 op_movel_dp(int src, int dst)
 {
@@ -635,6 +743,7 @@
 	LOUT(imm);
 }
 
+#if defined(JIT3)
 static inline void
 op_moveml_ro(int mask, int areg, int disp)
 {
@@ -643,6 +752,7 @@
 	assert_areg(areg);
 	WOUT(0x48C0 | (MODE_inddisp << 3) | (areg & 7));
 	WOUT(mask);
+	WOUT(disp);
 }
 
 static inline void
@@ -653,7 +763,27 @@
 	assert_areg(areg);
 	WOUT(0x4CC0 | (MODE_inddisp << 3) | (areg & 7));
 	WOUT(mask);
+	WOUT(disp);
+}
+
+static inline void
+op_moveml_rp(int mask, int areg)
+{
+	debug(("moveml 0x%04x, -(%s)\n", mask, regname(areg)));
+	assert_areg(areg);
+	WOUT(0x48C0 | (MODE_predec << 3) | (areg & 7));
+	WOUT(mask);
+}
+
+static inline void
+op_moveml_pr(int areg, int mask)
+{
+	debug(("moveml +(%s), 0x%04x\n", regname(areg), mask));
+	assert_areg(areg);
+	WOUT(0x4CC0 | (MODE_postinc << 3) | (areg & 7));
+	WOUT(mask);
 }
+#endif
 
 static inline void
 op_moveq_id(int imm, int dst)
@@ -749,6 +879,7 @@
 	WOUT(0x9080 | (dst << 9) | (MODE_d << 3) | src);
 }
 
+#if !defined(HAVE_NO_SUBAW)
 static inline void
 op_subaw_ia(int disp, int dst)
 {
@@ -758,6 +889,16 @@
 	WOUT(0x90C0 | ((dst & 7) << 9) | MODE_src_imm);
 	WOUT(disp);
 }
+#else
+static inline void
+op_subal_ia(int imm, int dst)
+{
+	debug(("subal #%d, %s\n", imm, regname(dst)));
+	assert_areg(dst);
+	WOUT(0x91C0 | ((dst & 7) << 9) | MODE_src_imm);
+	LOUT(imm);
+}
+#endif
 
 static inline void
 op_subql_id(int imm, int dst)
@@ -1014,8 +1155,8 @@
 	debug(("fmovemx 0x%02x, %d(%s)\n", mask, disp, regname(base)));
 	assert_s16(disp);
 	assert_areg(base);
-	WOUT((0xF000 | (COPROCID << 9) | (MODE_inddisp << 3) | (base & 7)));
-	WOUT((0xD000 | mask));
+	WOUT(0xF000 | (COPROCID << 9) | (MODE_inddisp << 3) | (base & 7));
+	WOUT(0xD000 | mask);
 }
 
 static inline void
@@ -1024,8 +1165,8 @@
 	debug(("fmovemx %d(%s), 0x%02x\n", disp, regname(base), mask));
 	assert_s16(disp);
 	assert_areg(base);
-	WOUT((0xF000 | (COPROCID << 9) | (MODE_inddisp << 3) | (base & 7)));
-	WOUT((0xE000 | mask));
+	WOUT(0xF000 | (COPROCID << 9) | (MODE_inddisp << 3) | (base & 7));
+	WOUT(0xE000 | mask);
 }
 
 static inline void
@@ -1094,11 +1235,12 @@
 
 define_insn(prologue, prologue_xxC)
 {
-	Method* meth = const_method(2);
+	Method* meth;
 	int framesize;
 
 #ifdef KAFFE_VMDEBUG
 	if (jit_debug) {
+		meth = const_method(2);
 		printf("\n%s.%s %s\n", meth->class->name->data,
 			meth->name->data, METHOD_SIGD(meth));
 	}
@@ -1124,10 +1266,31 @@
 	/* Be careful not to dealocate our current frame even for
 	   an instant.  */
 	op_moveal_aa(REG_fp, REG_a0);
+
+#if !defined(HAVE_NO_SUBAW)
 	op_subaw_ia(framesize, REG_a0);
+#else
+	op_subal_ia(framesize, REG_a0);
+#endif
+
 	op_moveal_aa(REG_a0, REG_sp);
 }
 
+#if defined(JIT3)
+define_insn(check_stack_limit, check_stack_limit_xRC)
+{
+	int r = rreg_ref(1);
+	label* l = const_label(2);
+
+	op_cmpal_aa(REG_sp, r);
+	op_blo_16(8);
+	l->type |= Llong|Labsolute;
+	l->at = CODEPC+2;
+	l->from = CODEPC+2;
+	op_jsr_32((uintp)soft_stackoverflow);
+}
+#endif
+
 /* --------------------------------------------------------------------- */
 
 define_insn(spill_int, spilli_RCx)
@@ -1348,9 +1511,11 @@
 	if (o >= 1 && o <= 8) {
 		op_addql_ia(o, rw);
 	}
+#if !defined(HAVE_NO_ADDAW)
 	else if (o >= -0x8000 && o < 0x8000) {
 		op_addaw_ia(o, rw);
 	}
+#endif
 	else {
 		op_addal_ia(o, rw);
 	}
@@ -1722,6 +1887,7 @@
 	op_cmpal_aa(r2, r1);
 }
 
+#if !defined(HAVE_NO_SWAP_ANY)
 define_insn(swap_any, swap_RxR)
 {
 	int r1, r2, type = 0;
@@ -1759,6 +1925,7 @@
 		ABORT();
 	}
 }
+#endif
 
 /* --------------------------------------------------------------------- */
 
@@ -2007,6 +2174,40 @@
 	label* l = const_label(1);
 	int bt = const_int(2);
 
+#if defined(HAVE_NO_LONG_BRANCHES)
+	l->type |= Llong16 | Lrelative | Lrangecheck;
+	l->at = CODEPC+2;
+	l->from = CODEPC+2;
+
+	switch (bt) {
+	case ba:
+		op_bra_16(0);
+		break;
+	case beq:
+		op_beq_16(0);
+		break;
+	case bne:
+		op_bne_16(0);
+		break;
+	case blt:
+		op_blt_16(0);
+		break;
+	case ble:
+		op_ble_16(0);
+		break;
+	case bgt:
+		op_bgt_16(0);
+		break;
+	case bge:
+		op_bge_16(0);
+		break;
+	case bult:
+		op_blo_16(0);
+		break;
+	default:
+		abort();
+	}
+#else
 	l->type |= Llong | Lrelative | Lrangecheck;
 	l->at = CODEPC+2;
 	l->from = CODEPC+2;
@@ -2039,6 +2240,7 @@
 	default:
 		ABORT();
 	}
+#endif
 }
 
 define_insn(branch_indirect, branch_indirect_xRC)
@@ -2145,9 +2347,11 @@
 		if (o <= 0x8) {
 			op_addql_ia(o, REG_sp);
 		}
+#if !defined(HAVE_NO_ADDAW)
 		else if (o < 0x8000) {
 			op_addaw_ia(o, REG_sp);
 		}
+#endif
 		else {
 			op_addal_ia(o, REG_sp);
 		}
@@ -2233,7 +2437,11 @@
 
 define_insn(returnarg_long, returnargl_xxR)
 {
+#if !defined(JIT3)
 	SlotInfo *r;
+#else
+	REGSLOT *r;
+#endif
 	int rl, rh;
 
 	r = seq_slot(s, 2);




More information about the kaffe mailing list