[kaffe] PS2/Linux patch take 3
Jim Pick
jim@kaffe.org
16 Jun 2002 11:11:27 -0700
Thanks,
I'll put your changes in, but I want to play around with it a bit more
before I put it in.
I'd like to take a look at the toolchain for the PS2 to see if perhaps
the configure script can figure out for itself that it needs these
changes, without having to do the --enable-ps2linux switch. Where can I
download it?
Cheers,
- Jim
On Sun, 2002-06-16 at 03:44, Dylan Schell wrote:
> Grrr, in order to keep my patch clean I removed some of the
> code that I thought was not needed. So here is version 3
>
> tested this time :-)
>
> Notes:
>
> - Is the #include <sigcontext.h> in config/mips/linux/md.h correct?
> On all the systems where I tried this, (i386/2.2.1, i386/2.4.18)
> <sigcontext.h> stops compilation and complains sigcontext should never
> be included directly, and that I should include <signal.h> instead.
>
> - I added maxArgs and isStatic to config/mips/mips.c to keep the
> linker happy, is there some header file i should be including instead?
> ----
>
> diff -r -c3 kaffe-1.0.7-rc1/config/mips/common.h kaffe-1.0.7-rc1-ps2/config/mips/common.h
> *** kaffe-1.0.7-rc1/config/mips/common.h Wed Mar 7 11:38:17 2001
> --- kaffe-1.0.7-rc1-ps2/config/mips/common.h Sun Jun 16 11:09:29 2002
> ***************
> *** 40,45 ****
> --- 40,48 ----
> #endif /* NEED_sysdepCallMethod */
>
>
> + #ifdef HAVE_PS2_LINUX
> + #undef HAVE_MIPSII_INSTRUCTIONS
> + #endif
> #if defined(HAVE_MIPSII_INSTRUCTIONS)
> /*
> * Do an atomic compare and exchange. The address 'A' is checked against
> diff -r -c3 kaffe-1.0.7-rc1/config/mips/linux/md.h kaffe-1.0.7-rc1-ps2/config/mips/linux/md.h
> *** kaffe-1.0.7-rc1/config/mips/linux/md.h Mon Sep 6 23:44:39 1999
> --- kaffe-1.0.7-rc1-ps2/config/mips/linux/md.h Sun Jun 16 11:06:05 2002
> ***************
> *** 21,26 ****
> --- 21,31 ----
> #define SP_OFFSET 1
> #define FP_OFFSET 10
>
> + #ifdef HAVE_PS2_LINUX
> + #undef FP_OFFSET
> + #define FP_OFFSET 36
> + #endif
> +
> #if defined(TRANSLATOR)
> #include "jit-md.h"
> #endif
> ***************
> *** 28,34 ****
> --- 33,43 ----
> /**/
> /* Signal handling */
> /**/
> + #ifdef HAVE_PS2_LINUX
> + #include <signal.h>
> + #else
> #include <sigcontext.h>
> + #endif
>
> /* Define the entry into a signal handler */
> #define EXCEPTIONPROTO int sig, int c1, int c2, int c3, int c4, int c5, int c6, int c7, struct sigcontext ctx
> diff -r -c3 kaffe-1.0.7-rc1/config/mips/mips.c kaffe-1.0.7-rc1-ps2/config/mips/mips.c
> *** kaffe-1.0.7-rc1/config/mips/mips.c Fri Oct 15 03:38:46 1999
> --- kaffe-1.0.7-rc1-ps2/config/mips/mips.c Sun Jun 16 12:29:00 2002
> ***************
> *** 20,25 ****
> --- 20,30 ----
> #include "support.h"
> #include "../../kaffe/kaffevm/thread.h"
>
> + #ifdef HAVE_PS2_LINUX
> + # include "jit.h"
> + int maxArgs;
> + int isStatic;
> + #endif
> extern int maxArgs;
> extern int isStatic;
>
> diff -r -c3 kaffe-1.0.7-rc1/config/mips/o32-sysdepCallMethod.h kaffe-1.0.7-rc1-ps2/config/mips/o32-sysdepCallMethod.h
> *** kaffe-1.0.7-rc1/config/mips/o32-sysdepCallMethod.h Thu Apr 15 20:19:31 1999
> --- kaffe-1.0.7-rc1-ps2/config/mips/o32-sysdepCallMethod.h Sun Jun 16 11:06:05 2002
> ***************
> *** 103,110 ****
> --- 103,120 ----
> register ARG_TYPE a2 asm("$6");
> register ARG_TYPE a3 asm("$7");
>
> + #ifdef HAVE_PS2_LINUX
> + union {
> + double d;
> + struct {
> + int hi;
> + int lo;
> + } fake_double;
> + } split;
> + #else
> register double d0 asm("$f12");
> register double d2 asm("$f14");
> + #endif
>
> register float f0 asm("$f12");
> register float f2 asm("$f14");
> ***************
> *** 129,135 ****
> --- 139,151 ----
> }
>
> if (calltype[2] == D) {
> + #ifdef HAVE_PS2_LINUX
> + split.d = callargs[2].d;
> + a2 = split.fake_double.hi;
> + a3 = split.fake_double.lo;
> + #else
> d2 = callargs[2].d;
> + #endif
> goto alldouble_2;
> }
>
> ***************
> *** 154,160 ****
> --- 170,183 ----
> case 2:
> if (calltype[0] == D) {
> alldouble_2:
> + #ifdef HAVE_PS2_LINUX
> + /* move double into a0/a1 */
> + split.d = callargs[0].d;
> + a0 = split.fake_double.hi;
> + a1 = split.fake_double.lo;
> + #else
> d0=callargs[0].d;
> + #endif
> } else {
> testfloat_2:
> if (calltype[0] != F) {
> ***************
> *** 183,189 ****
> --- 206,216 ----
> noargs:
> #endif
> /* Ensure that the assignments to f* registers won't be optimized away. */
> + #ifdef HAVE_PS2_LINUX
> + asm ("" :: "f" (f0), "f" (f2));
> + #else
> asm ("" :: "f" (f0), "f" (f2), "f" (d0), "f" (d2));
> + #endif
>
> switch(call->retsize) {
> case 0:
> diff -r -c3 kaffe-1.0.7-rc1/config/mips/threads.h kaffe-1.0.7-rc1-ps2/config/mips/threads.h
> *** kaffe-1.0.7-rc1/config/mips/threads.h Mon Mar 12 13:50:47 2001
> --- kaffe-1.0.7-rc1-ps2/config/mips/threads.h Sun Jun 16 11:06:05 2002
> ***************
> *** 27,32 ****
> --- 27,37 ----
> #define THREADSTACKSIZE (32 * 1024)
> #endif
>
> + #ifdef HAVE_PS2_LINUX
> + #undef THREADSTACKSIZE
> + #define THREADSTACKSIZE (128 * 1024)
> + #endif
> +
> /*
> * Stack offset.
> * This is the offset into the setjmp buffer where the stack pointer is
> diff -r -c3 kaffe-1.0.7-rc1/configure.in kaffe-1.0.7-rc1-ps2/configure.in
> *** kaffe-1.0.7-rc1/configure.in Sun Jun 2 07:03:49 2002
> --- kaffe-1.0.7-rc1-ps2/configure.in Sun Jun 16 11:06:05 2002
> ***************
> *** 831,836 ****
> --- 831,849 ----
> dnl -------------------------------------------------------------------------
>
> dnl =========================================================================
> + dnl Compile specifically for PS2/Linux
> + dnl -------------------------------------------------------------------------
> +
> + AC_ARG_ENABLE(ps2linux, [ --enable-ps2linux Compile Specifically For PS2])
> + AC_MSG_CHECKING([whether to enable PS2/Linux Specific patches])
> + AC_MSG_RESULT($enable_ps2linux)
> + if test "x$enable_ps2linux" = "xyes"; then
> + AC_DEFINE([HAVE_PS2_LINUX], 1, [Enable PS2 Linux patches])
> + fi
> +
> + dnl -------------------------------------------------------------------------
> +
> + dnl =========================================================================
> dnl Checks for typedefs, structures, and compiler characteristics.
> dnl -------------------------------------------------------------------------
>