Hi all,
Here it is.
It enabled me to compile jit3 for linux on powerpc, but I haven't
got it work so far... it just hangs...
As you can probably see it's not so much of a patch, I just copied
some files from the darwin folder, made a few changes on the files so
that they build on my system, made trampolines.c follow the rest of
the files - though i have to figure out a way to restore the register
names to rN, instead of using just the numeral...
Feel free to fix whatever is broken...
Konstantinos
diff -ruN powerpc.orig/jit.h powerpc/jit.h
--- powerpc.orig/jit.h 2004-12-05 14:50:35.356884096 +0200
+++ powerpc/jit.h 2004-12-03 18:27:38.000000000 +0200
@@ -94,8 +94,8 @@
* Call a jitted java exception handler.
*/
#define CALL_KAFFE_EXCEPTION(frame, handler, object) \
- asm volatile ("mr r1, %0\n" \
- "\tmr r3, %1\n" \
+ asm volatile ("mr 1, %0\n" \
+ "\tmr 3, %1\n" \
"\tmtctr %2\n" \
"\tbctr\n" \
: : "r" (frame), "r" (object), "r" (handler) : "r3")
diff -ruN powerpc.orig/linux/jit3-md.h powerpc/linux/jit3-md.h
--- powerpc.orig/linux/jit3-md.h 1970-01-01 02:00:00.000000000 +0200
+++ powerpc/linux/jit3-md.h 2004-12-05 14:52:48.115701688 +0200
@@ -0,0 +1,39 @@
+/*
+ * powerpc/linux/jit3-md.h
+ * Linux i386 JIT configuration information.
+ *
+ * Copyright (c) 1996, 1997
+ * Transvirtual Technologies, Inc. All rights reserved.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file.
+ *
+ * Shamelessly copied from the darwin version in the hope that it works
+ */
+
+#include "powerpc/linux/jit-md.h"
+
+#define FLUSH_DCACHE linux_flush_cache
+static inline void linux_flush_cache(void *code_start, void *code_end)
+{
+ /*
+ * * The size of a block in the cache, we need to align the flushed
+ * * addresses to these blocks.
+ * */
+ static int cache_block_size = 32; // bytes
+ uintp curr, last;
+
+ curr = (uintp)code_start;
+ last = (uintp)code_end;
+ curr = (curr - cache_block_size) & ~(cache_block_size - 1);
+ last = (last + cache_block_size) & ~(cache_block_size - 1);
+ for( ; curr < last; curr += cache_block_size )
+ {
+ asm("dcbst 0, %0\n"
+ "sync\n"
+ "icbi 0, %0\n"
+ "sync\n"
+ "isync\n" : : "r" (curr));
+ }
+}
+
diff -ruN powerpc.orig/linux/jit-md.h powerpc/linux/jit-md.h
--- powerpc.orig/linux/jit-md.h 1970-01-01 02:00:00.000000000 +0200
+++ powerpc/linux/jit-md.h 2004-12-03 17:52:31.000000000 +0200
@@ -0,0 +1,20 @@
+/*
+ * powerpc/linux/jit-md.h
+ * Linux i386 JIT configuration information.
+ *
+ * Copyright (c) 1996, 1997
+ * Transvirtual Technologies, Inc. All rights reserved.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file.
+ */
+
+#ifndef __powerpc_linux_jit_md_h
+#define __powerpc_linux_jit_md_h
+
+/**/
+/* Include common information. */
+/**/
+#include "powerpc/jit.h"
+
+#endif
diff -ruN powerpc.orig/trampolines.c powerpc/trampolines.c
--- powerpc.orig/trampolines.c 2004-12-05 14:50:35.938795632 +0200
+++ powerpc/trampolines.c 2004-12-03 19:06:37.000000000 +0200
@@ -3,93 +3,114 @@
*
*/
+#if defined(TRAMPOLINE_FUNCTION)
+/*
+ * * If we have an explit function defined then use that.
+ * */
+TRAMPOLINE_FUNCTION()
+
+#else
+ /*
+ * * Otherwise we'll try to construct one.
+ * */
+#if !defined(START_ASM_FUNC)
+#define START_ASM_FUNC() ".text\n\t.align 2\n\t.global "
+#endif
+#if !defined(END_ASM_FUNC)
+#define END_ASM_FUNC() ""
+#endif
+#if defined(HAVE_UNDERSCORED_C_NAMES)
+#define C_FUNC_NAME(FUNC) "_" #FUNC
+#else
+#define C_FUNC_NAME(FUNC) #FUNC
+#endif
+
asm(
- ""
- ".text \n"
- ".align 2 \n"
- ".globl _powerpc_do_fixup_trampoline \n"
- " \n"
-"_powerpc_do_fixup_trampoline: \n"
+ START_ASM_FUNC() C_FUNC_NAME(powerpc_do_fixup_trampoline) " \n"
+C_FUNC_NAME(powerpc_do_fixup_trampoline) ": \n"
" \n"
"# Function prologue: establish a minimum stack frame. We don't \n"
- "# save lr - it was already saved at 8(r1) by the trampoline \n"
- "# code. However, we must save r3 and r4, as we will use them \n"
+ "# save lr - it was already saved at 8(1) by the trampoline \n"
+ "# code. However, we must save 3 and 4, as we will use them \n"
"# to call soft_fixup_trampoline(). \n"
- "stwu r1, -192(r1) \n"
- "stw r3, 56(r1) \n"
- "stw r4, 60(r1) \n"
- "stw r5, 64(r1) \n"
- "stw r6, 68(r1) \n"
- "stw r7, 72(r1) \n"
- "stw r8, 76(r1) \n"
- "stw r9, 80(r1) \n"
- "stw r10, 84(r1) \n"
- " \n"
- "stfd f1, 88(r1) \n"
- "stfd f2, 96(r1) \n"
- "stfd f3, 104(r1) \n"
- "stfd f4, 112(r1) \n"
- "stfd f5, 120(r1) \n"
- "stfd f6, 128(r1) \n"
- "stfd f7, 136(r1) \n"
- "stfd f8, 144(r1) \n"
- "stfd f9, 152(r1) \n"
- "stfd f10, 160(r1) \n"
- "stfd f11, 168(r1) \n"
- "stfd f12, 176(r1) \n"
- "stfd f13, 184(r1) \n"
+ "stwu 1, -192(1) \n"
+ "stw 3, 56(1) \n"
+ "stw 4, 60(1) \n"
+ "stw 5, 64(1) \n"
+ "stw 6, 68(1) \n"
+ "stw 7, 72(1) \n"
+ "stw 8, 76(1) \n"
+ "stw 9, 80(1) \n"
+ "stw 10, 84(1) \n"
+ " \n"
+ "stfd 1, 88(1) \n"
+ "stfd 2, 96(1) \n"
+ "stfd 3, 104(1) \n"
+ "stfd 4, 112(1) \n"
+ "stfd 5, 120(1) \n"
+ "stfd 6, 128(1) \n"
+ "stfd 7, 136(1) \n"
+ "stfd 8, 144(1) \n"
+ "stfd 9, 152(1) \n"
+ "stfd 10, 160(1) \n"
+ "stfd 11, 168(1) \n"
+ "stfd 12, 176(1) \n"
+ "stfd 13, 184(1) \n"
" \n"
"# Build function call to soft_fixup_trampoline(). This function\n"
"# requires two arguments: a 'Method *m' and a 'void **where'. \n"
"# They can be found immediately after the trampoline code which\n"
"# took us here - that is, at (lr) and 4(lr) \n"
- "mflr r4 \n"
- "lwz r3, 0(r4) \n"
- "lwz r4, 4(r4) \n"
+ "mflr 4 \n"
+ "lwz 3, 0(4) \n"
+ "lwz 4, 4(4) \n"
" \n"
"# Call soft_fixup_trampoline(). Return value will be in r3, \n"
"# which is the address of the translated native code. \n"
" \n"
- "bl _soft_fixup_trampoline \n"
+ "bl " C_FUNC_NAME(soft_fixup_trampoline) " \n"
" \n"
"# Save return value in ctr, so that we can jump there at the \n"
"# end of this function \n"
- "mtctr r3 \n"
+ "mtctr 3 \n"
" \n"
"# Restore r3 and r4 (the original arguments to the native \n"
"# method that we overwrote to call soft_fixup_trampoline) \n"
- "lwz r3, 56(r1) \n"
- "lwz r4, 60(r1) \n"
- "lwz r5, 64(r1) \n"
- "lwz r6, 68(r1) \n"
- "lwz r7, 72(r1) \n"
- "lwz r8, 76(r1) \n"
- "lwz r9, 80(r1) \n"
- "lwz r10, 84(r1) \n"
- " \n"
- "lfd f1, 88(r1) \n"
- "lfd f2, 96(r1) \n"
- "lfd f3, 104(r1) \n"
- "lfd f4, 112(r1) \n"
- "lfd f5, 120(r1) \n"
- "lfd f6, 128(r1) \n"
- "lfd f7, 136(r1) \n"
- "lfd f8, 144(r1) \n"
- "lfd f9, 152(r1) \n"
- "lfd f10, 160(r1) \n"
- "lfd f11, 168(r1) \n"
- "lfd f12, 176(r1) \n"
- "lfd f13, 184(r1) \n"
+ "lwz 3, 56(1) \n"
+ "lwz 4, 60(1) \n"
+ "lwz 5, 64(1) \n"
+ "lwz 6, 68(1) \n"
+ "lwz 7, 72(1) \n"
+ "lwz 8, 76(1) \n"
+ "lwz 9, 80(1) \n"
+ "lwz 10, 84(1) \n"
+ " \n"
+ "lfd 1, 88(1) \n"
+ "lfd 2, 96(1) \n"
+ "lfd 3, 104(1) \n"
+ "lfd 4, 112(1) \n"
+ "lfd 5, 120(1) \n"
+ "lfd 6, 128(1) \n"
+ "lfd 7, 136(1) \n"
+ "lfd 8, 144(1) \n"
+ "lfd 9, 152(1) \n"
+ "lfd 10, 160(1) \n"
+ "lfd 11, 168(1) \n"
+ "lfd 12, 176(1) \n"
+ "lfd 13, 184(1) \n"
" \n"
"# Restore previous stack pointer \n"
- "addi r1, r1, 192 \n"
+ "addi 1, 1, 192 \n"
" \n"
"# Restore Link Register before invoking native method, so that \n"
"# it returns to the right place. \n"
- "lwz r0, 8(r1) \n"
- "mtlr r0 \n"
+ "lwz 0, 8(1) \n"
+ "mtlr 0 \n"
" \n"
"# Jump to the native method address that we obtained as a \n"
"# return value of soft_fixup_trampoline() \n"
"bctr"
+ END_ASM_FUNC()
);
+
+#endif
_______________________________________________
kaffe mailing list
[EMAIL PROTECTED]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe