[kaffe] NetBSD/m68k with jit
Kiyo Inaba
inaba at src.ricoh.co.jp
Mon Jun 21 00:36:02 PDT 2004
Hi,
As I reported this morning (JST), I made patches needed to make
NetBSD/m68k work again. For the time being it can only used with
gcc option '-O0', and with engine 'jit'. And even though it works
with 'HelloWorldApp.class' by directly invoking kaffe-bin, I can
not make the regression test work.
But, I hope this is still much better than nothing...
Kiyo
P.S. I made this patch against 1.1.5 tag because this is the base
for me to make this mod. Some minor patch mismatch may occur
if someone applies this to the CVS-head.
-------------------------------------------------------------------
diff -Naur kaffe-1.1.5-rc1.orig/ChangeLog kaffe-1.1.5-rc1/ChangeLog
--- kaffe-1.1.5-rc1.orig/ChangeLog Sun May 2 18:53:50 2004
+++ kaffe-1.1.5-rc1/ChangeLog Mon Jun 21 16:22:14 2004
@@ -1,3 +1,15 @@
+2004-06-27 Kiyo Inaba <inaba at src.ricoh.co.jp>
+ * config/m68k/common.h: ALIGNMENT_OF_SIZE is moved to each
+ ports.
+ * config/m68k/jit.h: packed attributes are added to fields of
+ _methodTrampoline.
+ * config/m68k/linux/md.h: ALIGNMENT_OF_SIZE is added. Some
+ comments are revised.
+ * config/m68k/netbsd1/config.frag: compiling option -O0 is
+ added, because O2 does not work for the time being.
+ * config/m68k/netbsd1/md.h: ALIGNMENT_OF_SIZE is added.
+ sysddepCallMethod macro for netbsd was added.
+
2004-04-30 Guilhem Lavaux <guilhem at kaffe.org>
Reported by Emil Mikulic <emikulic at dmr.ath.cx>
diff -Naur kaffe-1.1.5-rc1.orig/config/m68k/common.h kaffe-1.1.5-rc1/config/m68k/common.h
--- kaffe-1.1.5-rc1.orig/config/m68k/common.h Sat Dec 13 00:58:51 2003
+++ kaffe-1.1.5-rc1/config/m68k/common.h Mon Jun 21 16:04:58 2004
@@ -27,16 +27,10 @@
#include "atomicity.h"
/*
- * Alignment in structure is 2 bytes packed.
- */
-#define ALIGNMENT_OF_SIZE(S) (((S>1)?2:1))
-
-/*
* Do an atomic compare and exchange. The address 'A' is checked against
* value 'O' and if they match it's exchanged with value 'N'.
* We return '1' if the exchange is successful, otherwise 0.
*/
-
#define COMPARE_AND_EXCHANGE(A, O, N) (compare_and_swap((long int*) A, (long int) O, (long int) N))
diff -Naur kaffe-1.1.5-rc1.orig/config/m68k/jit.h kaffe-1.1.5-rc1/config/m68k/jit.h
--- kaffe-1.1.5-rc1.orig/config/m68k/jit.h Tue Mar 16 02:37:04 2004
+++ kaffe-1.1.5-rc1/config/m68k/jit.h Thu Jun 17 10:34:00 2004
@@ -52,9 +52,9 @@
typedef struct _methodTrampoline {
unsigned short call;
- int fixup;
- struct _methods* meth;
- void** where;
+ int fixup __attribute__ ((packed));
+ struct _methods* meth __attribute__ ((packed));
+ void** where __attribute__ ((packed));
} methodTrampoline;
extern void m68k_do_fixup_trampoline(void);
diff -Naur kaffe-1.1.5-rc1.orig/config/m68k/linux/md.h kaffe-1.1.5-rc1/config/m68k/linux/md.h
--- kaffe-1.1.5-rc1.orig/config/m68k/linux/md.h Thu Apr 29 02:03:55 2004
+++ kaffe-1.1.5-rc1/config/m68k/linux/md.h Mon Jun 21 16:16:02 2004
@@ -1,6 +1,6 @@
/*
* m68k/linux/md.h
- * Linux m68k configuration information.
+ * Linux/m68k configuration information.
*
* Copyright (c) 1996, 1997
* Transvirtual Technologies, Inc. All rights reserved.
@@ -17,9 +17,15 @@
#include "support.h"
/*
- * Redefine stack pointer offset.
+ * Alignment in structure is 2 bytes packed.
+ */
+#define ALIGNMENT_OF_SIZE(S) (((S>1)?2:1))
+
+/*
+ * Stack offset.
+ * This is the offset into the setjmp buffer where the stack pointer is
+ * stored.
*/
-#undef SP_OFFSET
#define SP_OFFSET 14
/**/
@@ -43,14 +49,8 @@
/*
* sysdepCallMethod supports:
*
- * Calling sequences for linux and netbsd1 are same, except for
- * the place of return values. The float/double values are in
- * fp0 (linux) or d0/d1 (netbsd1).
- *
- * Still I do not understand 'asm' statement well, and the
- * statement below is a 'because it works' version.
+ * Linux version
*/
-// Linux version
#define sysdepCallMethod(CALL) do { \
int extraargs[(CALL)->nrargs]; \
register int d0 asm ("d0"); \
diff -Naur kaffe-1.1.5-rc1.orig/config/m68k/netbsd1/config.frag kaffe-1.1.5-rc1/config/m68k/netbsd1/config.frag
--- kaffe-1.1.5-rc1.orig/config/m68k/netbsd1/config.frag Sat Jan 3 04:55:38 2004
+++ kaffe-1.1.5-rc1/config/m68k/netbsd1/config.frag Mon Jun 21 11:03:30 2004
@@ -1,7 +1,7 @@
#
# m68k/Netbsd1 configuration.
#
-CFLAGS="$CFLAGS -fno-omit-frame-pointer"
+CFLAGS="$CFLAGS -O0 -fno-omit-frame-pointer"
LDFLAGS="$LDFLAGS -lm68k"
if [ "$cross_compiling" = yes ]; then
ac_cv_c_char_unsigned=${ac_cv_c_char_unsigned='no'}
diff -Naur kaffe-1.1.5-rc1.orig/config/m68k/netbsd1/md.h kaffe-1.1.5-rc1/config/m68k/netbsd1/md.h
--- kaffe-1.1.5-rc1.orig/config/m68k/netbsd1/md.h Sat Dec 13 00:58:53 2003
+++ kaffe-1.1.5-rc1/config/m68k/netbsd1/md.h Mon Jun 21 16:16:30 2004
@@ -1,6 +1,6 @@
/*
* m68k/netbsd1/md.h
- * netbsd/m68k specific functions.
+ * netbsd/m68k configuration information.
*
* Copyright (c) 1996, 1997
* Transvirtual Technologies, Inc. All rights reserved.
@@ -16,12 +16,17 @@
#include "m68k/common.h"
#include "m68k/threads.h"
-#include "m68k/sysdepCallMethod.h"
/*
- * Redefine stack pointer offset.
+ * Alignment in structure is 4 bytes packed
+ */
+#define ALIGNMENT_OF_SIZE(S) ((S) < 4 ? (S) : 4)
+
+/*
+ * Stack offset.
+ * This is the offset into the setjmp buffer where the stack pointer is
+ * stored.
*/
-#undef SP_OFFSET
#define SP_OFFSET 2
/**/
@@ -38,4 +43,66 @@
#include "jit-md.h"
#endif
-#endif
+/*
+ * sysdepCallMethod supports:
+ *
+ * NetBSD version
+ * For NetBSD the 'extraargs' magic does not work, and I still
+ * have to use fully asm version. Also, with optimization A2
+ * register is contaminated when coming back from subroutine
+ * sysdepCallMethod calls, and I split the code into two parts.
+ */
+
+#define sysdepCallMethod(CALL) \
+ asm volatile (" \n\
+ 1: \n\
+ cmp.l #0,%0 \n\
+ beq 3f \n\
+ subq.l #1,%0 \n\
+ cmp.b #0,(%2,%0.l) \n\
+ beq 1b \n\
+ cmp.b #1,(%2,%0.l) \n\
+ beq 2f \n\
+ move.l 4(%1,%0.l*8),-(%/sp) \n\
+ 2: \n\
+ move.l (%1,%0.l*8),-(%/sp) \n\
+ jmp 1b \n\
+ 3: \n\
+ jsr (%3) \n\
+ " : \
+ : "r" ((CALL)->nrargs), \
+ "a" ((CALL)->args), \
+ "a" ((CALL)->callsize), \
+ "a" ((CALL)->function) \
+ : "d0", "d1", "fp0", "cc", "memory"); \
+ asm volatile (" \n\
+ cmp.b #2,%0 \n\
+ bne 5f \n\
+ cmp.b #0x44,%1 \n\
+ bne 4f \n\
+ fmove.d %/fp0,(%2) \n\
+ jmp 7f \n\
+ 4: \n\
+ move.l %/d1,4(%2) \n\
+ move.l %/d0,(%2) \n\
+ jmp 7f \n\
+ 5: \n\
+ cmp.b #1,%0 \n\
+ bne 7f \n\
+ cmp.b #0x46,%1 \n\
+ bne 6f \n\
+ fmove.s %/fp0,(%2) \n\
+ jmp 7f \n\
+ 6: \n\
+ move.l %/d0,(%2) \n\
+ 7: \
+ " : \
+ : "m" ((CALL)->retsize), \
+ "m" ((CALL)->rettype), \
+ "a" ((CALL)->ret) \
+ : "d0", "d1", "fp0", "cc", "memory"); \
+ asm volatile (" \n\
+ add.w %0,%/sp \n\
+ " : : "r" ((CALL)->argsize * sizeof(jint)) : "cc")
+
+#endif /* __m68k_netbsd1_md_h */
More information about the kaffe
mailing list