Update of /cvsroot/sbcl/sbcl/src/runtime
In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv19758/src/runtime
Modified Files:
GNUmakefile alpha-arch.c hppa-arch.c mips-arch.c ppc-arch.c
sparc-arch.c x86-64-arch.c x86-arch.c
Added Files:
funcall.c
Log Message:
1.0.4.21: merge redundant funcallN definitions in the runtime
* We need only two implementations, not one per arch: put them into
a new file "funcall.c".
--- NEW FILE: funcall.c ---
/* funcall0 -- funcall3: we can get by with just two sets of these:
* for platforms where the control stack is the C-stack, and all others.
*/
/*
* This software is part of the SBCL system. See the README file for
* more information.
*
* This software is derived from the CMU CL system, which was
* written at Carnegie Mellon University and released into the
* public domain. The software is in the public domain and is
* provided with absolutely no warranty. See the COPYING and CREDITS
* files for more information.
*/
#include <stdio.h>
#include "sbcl.h"
#include "runtime.h"
/* This is implemented in assembly language and called from C: */
extern lispobj call_into_lisp(lispobj fun, lispobj *args, int nargs);
#ifdef LISP_FEATURE_C_STACK_IS_CONTROL_STACK
/* These functions are an interface to the Lisp call-in facility.
* Since this is C we can know nothing about the calling environment.
* The control stack might be the C stack if called from the monitor
* or the Lisp stack if called as a result of an interrupt or maybe
* even a separate stack. The args are most likely on that stack but
* could be in registers depending on what the compiler likes. So we
* copy the args into a portable vector and let the assembly language
* call-in function figure it out. */
lispobj
funcall0(lispobj function)
{
lispobj *args = NULL;
FSHOW((stderr, "/entering funcall0(0x%lx)\n", (long)function));
return call_into_lisp(function, args, 0);
}
lispobj
funcall1(lispobj function, lispobj arg0)
{
lispobj args[1];
args[0] = arg0;
return call_into_lisp(function, args, 1);
}
lispobj
funcall2(lispobj function, lispobj arg0, lispobj arg1)
{
lispobj args[2];
args[0] = arg0;
args[1] = arg1;
return call_into_lisp(function, args, 2);
}
lispobj
funcall3(lispobj function, lispobj arg0, lispobj arg1, lispobj arg2)
{
lispobj args[3];
args[0] = arg0;
args[1] = arg1;
args[2] = arg2;
return call_into_lisp(function, args, 3);
}
#else
lispobj
funcall0(lispobj function)
{
lispobj *args = current_control_stack_pointer;
return call_into_lisp(function, args, 0);
}
lispobj
funcall1(lispobj function, lispobj arg0)
{
lispobj *args = current_control_stack_pointer;
current_control_stack_pointer += 1;
args[0] = arg0;
return call_into_lisp(function, args, 1);
}
lispobj
funcall2(lispobj function, lispobj arg0, lispobj arg1)
{
lispobj *args = current_control_stack_pointer;
current_control_stack_pointer += 2;
args[0] = arg0;
args[1] = arg1;
return call_into_lisp(function, args, 2);
}
lispobj
funcall3(lispobj function, lispobj arg0, lispobj arg1, lispobj arg2)
{
lispobj *args = current_control_stack_pointer;
current_control_stack_pointer += 3;
args[0] = arg0;
args[1] = arg1;
args[2] = arg2;
return call_into_lisp(function, args, 3);
}
#endif
Index: GNUmakefile
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/runtime/GNUmakefile,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -d -r1.29 -r1.30
--- GNUmakefile 15 Dec 2006 01:48:59 -0000 1.29
+++ GNUmakefile 4 Apr 2007 13:11:18 -0000 1.30
@@ -39,8 +39,8 @@
include Config
COMMON_SRC = alloc.c backtrace.c breakpoint.c coreparse.c \
- dynbind.c gc-common.c globals.c interr.c interrupt.c largefile.c \
- monitor.c os-common.c parse.c print.c purify.c \
+ dynbind.c funcall.c gc-common.c globals.c interr.c interrupt.c \
+ largefile.c monitor.c os-common.c parse.c print.c purify.c \
pthread-futex.c pthread-lutex.c \
regnames.c run-program.c runtime.c save.c search.c \
thread.c time.c util.c validate.c vars.c wrap.c
Index: alpha-arch.c
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/runtime/alpha-arch.c,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -d -r1.25 -r1.26
--- alpha-arch.c 2 Apr 2007 15:20:44 -0000 1.25
+++ alpha-arch.c 4 Apr 2007 13:11:18 -0000 1.26
@@ -348,46 +348,3 @@
{
undoably_install_low_level_interrupt_handler(SIGTRAP, sigtrap_handler);
}
-
-extern lispobj call_into_lisp(lispobj fun, lispobj *args, int nargs);
-
-lispobj funcall0(lispobj function)
-{
- lispobj *args = current_control_stack_pointer;
-
- return call_into_lisp(function, args, 0);
-}
-
-lispobj funcall1(lispobj function, lispobj arg0)
-{
- lispobj *args = current_control_stack_pointer;
-
- current_control_stack_pointer += 1;
- args[0] = arg0;
-
- return call_into_lisp(function, args, 1);
-}
-
-lispobj funcall2(lispobj function, lispobj arg0, lispobj arg1)
-{
- lispobj *args = current_control_stack_pointer;
-
- current_control_stack_pointer += 2;
- args[0] = arg0;
- args[1] = arg1;
-
- return call_into_lisp(function, args, 2);
-}
-
-lispobj funcall3(lispobj function, lispobj arg0, lispobj arg1, lispobj arg2)
-{
- lispobj *args = current_control_stack_pointer;
-
- current_control_stack_pointer += 3;
- args[0] = arg0;
- args[1] = arg1;
- args[2] = arg2;
-
- return call_into_lisp(function, args, 3);
-}
-
Index: hppa-arch.c
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/runtime/hppa-arch.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- hppa-arch.c 2 Apr 2007 15:20:45 -0000 1.12
+++ hppa-arch.c 4 Apr 2007 13:11:18 -0000 1.13
@@ -396,44 +396,3 @@
/* FIXME: beyond 2.4.19-pa4 this shouldn't be necessary. */
undoably_install_low_level_interrupt_handler(SIGBUS,sigbus_handler);
}
-
-
-lispobj funcall0(lispobj function)
-{
- lispobj *args = current_control_stack_pointer;
-
- return call_into_lisp(function, args, 0);
-}
-
-lispobj funcall1(lispobj function, lispobj arg0)
-{
- lispobj *args = current_control_stack_pointer;
-
- current_control_stack_pointer += 1;
- args[0] = arg0;
-
- return call_into_lisp(function, args, 1);
-}
-
-lispobj funcall2(lispobj function, lispobj arg0, lispobj arg1)
-{
- lispobj *args = current_control_stack_pointer;
-
- current_control_stack_pointer += 2;
- args[0] = arg0;
- args[1] = arg1;
-
- return call_into_lisp(function, args, 2);
-}
-
-lispobj funcall3(lispobj function, lispobj arg0, lispobj arg1, lispobj arg2)
-{
- lispobj *args = current_control_stack_pointer;
-
- current_control_stack_pointer += 3;
- args[0] = arg0;
- args[1] = arg1;
- args[2] = arg2;
-
- return call_into_lisp(function, args, 3);
-}
Index: mips-arch.c
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/runtime/mips-arch.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -d -r1.26 -r1.27
--- mips-arch.c 2 Apr 2007 15:20:52 -0000 1.26
+++ mips-arch.c 4 Apr 2007 13:11:18 -0000 1.27
@@ -469,52 +469,6 @@
undoably_install_low_level_interrupt_handler(SIGFPE,sigfpe_handler);
}
-extern lispobj call_into_lisp(lispobj fun, lispobj *args, int nargs);
-
-lispobj
-funcall0(lispobj function)
-{
- lispobj *args = current_control_stack_pointer;
-
- return call_into_lisp(function, args, 0);
-}
-
-lispobj
-funcall1(lispobj function, lispobj arg0)
-{
- lispobj *args = current_control_stack_pointer;
-
- current_control_stack_pointer += 1;
- args[0] = arg0;
-
- return call_into_lisp(function, args, 1);
-}
-
-lispobj
-funcall2(lispobj function, lispobj arg0, lispobj arg1)
-{
- lispobj *args = current_control_stack_pointer;
-
- current_control_stack_pointer += 2;
- args[0] = arg0;
- args[1] = arg1;
-
- return call_into_lisp(function, args, 2);
-}
-
-lispobj
-funcall3(lispobj function, lispobj arg0, lispobj arg1, lispobj arg2)
-{
- lispobj *args = current_control_stack_pointer;
-
- current_control_stack_pointer += 3;
- args[0] = arg0;
- args[1] = arg1;
- args[2] = arg2;
-
- return call_into_lisp(function, args, 3);
-}
-
#ifdef LISP_FEATURE_LINKAGE_TABLE
/* Linkage tables for MIPS
Index: ppc-arch.c
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/runtime/ppc-arch.c,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -d -r1.23 -r1.24
--- ppc-arch.c 2 Apr 2007 15:20:52 -0000 1.23
+++ ppc-arch.c 4 Apr 2007 13:11:19 -0000 1.24
@@ -472,49 +472,6 @@
undoably_install_low_level_interrupt_handler(SIGTRAP,sigtrap_handler);
}
-
-extern lispobj call_into_lisp(lispobj fun, lispobj *args, int nargs);
-
-lispobj funcall0(lispobj function)
-{
- lispobj *args = current_control_stack_pointer;
-
- return call_into_lisp(function, args, 0);
-}
-
-lispobj funcall1(lispobj function, lispobj arg0)
-{
- lispobj *args = current_control_stack_pointer;
-
- current_control_stack_pointer += 1;
- args[0] = arg0;
-
- return call_into_lisp(function, args, 1);
-}
-
-lispobj funcall2(lispobj function, lispobj arg0, lispobj arg1)
-{
- lispobj *args = current_control_stack_pointer;
-
- current_control_stack_pointer += 2;
- args[0] = arg0;
- args[1] = arg1;
-
- return call_into_lisp(function, args, 2);
-}
-
-lispobj funcall3(lispobj function, lispobj arg0, lispobj arg1, lispobj arg2)
-{
- lispobj *args = current_control_stack_pointer;
-
- current_control_stack_pointer += 3;
- args[0] = arg0;
- args[1] = arg1;
- args[2] = arg2;
-
- return call_into_lisp(function, args, 3);
-}
-
void
ppc_flush_icache(os_vm_address_t address, os_vm_size_t length)
{
Index: sparc-arch.c
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/runtime/sparc-arch.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- sparc-arch.c 2 Apr 2007 15:20:54 -0000 1.21
+++ sparc-arch.c 4 Apr 2007 13:11:19 -0000 1.22
@@ -367,48 +367,6 @@
}
-extern lispobj call_into_lisp(lispobj fun, lispobj *args, int nargs);
-
-lispobj funcall0(lispobj function)
-{
- lispobj *args = current_control_stack_pointer;
-
- return call_into_lisp(function, args, 0);
-}
-
-lispobj funcall1(lispobj function, lispobj arg0)
-{
- lispobj *args = current_control_stack_pointer;
-
- current_control_stack_pointer += 1;
- args[0] = arg0;
-
- return call_into_lisp(function, args, 1);
-}
-
-lispobj funcall2(lispobj function, lispobj arg0, lispobj arg1)
-{
- lispobj *args = current_control_stack_pointer;
-
- current_control_stack_pointer += 2;
- args[0] = arg0;
- args[1] = arg1;
-
- return call_into_lisp(function, args, 2);
-}
-
-lispobj funcall3(lispobj function, lispobj arg0, lispobj arg1, lispobj arg2)
-{
- lispobj *args = current_control_stack_pointer;
-
- current_control_stack_pointer += 3;
- args[0] = arg0;
- args[1] = arg1;
- args[2] = arg2;
-
- return call_into_lisp(function, args, 3);
-}
-
#ifdef LISP_FEATURE_LINKAGE_TABLE
/* This a naive port from CMUCL/sparc, which was mostly stolen from the
Index: x86-64-arch.c
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/runtime/x86-64-arch.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- x86-64-arch.c 2 Apr 2007 15:20:54 -0000 1.19
+++ x86-64-arch.c 4 Apr 2007 13:11:19 -0000 1.20
@@ -377,53 +377,6 @@
SHOW("returning from arch_install_interrupt_handlers()");
}
-/* This is implemented in assembly language and called from C: */
-extern lispobj
-call_into_lisp(lispobj fun, lispobj *args, int nargs);
-
-/* These functions are an interface to the Lisp call-in facility.
- * Since this is C we can know nothing about the calling environment.
- * The control stack might be the C stack if called from the monitor
- * or the Lisp stack if called as a result of an interrupt or maybe
- * even a separate stack. The args are most likely on that stack but
- * could be in registers depending on what the compiler likes. So we
- * copy the args into a portable vector and let the assembly language
- * call-in function figure it out. */
-
-lispobj
-funcall0(lispobj function)
-{
- lispobj *args = NULL;
-
- FSHOW((stderr, "/entering funcall0(0x%lx)\n", (long)function));
- return call_into_lisp(function, args, 0);
-}
-lispobj
-funcall1(lispobj function, lispobj arg0)
-{
- lispobj args[1];
- args[0] = arg0;
- return call_into_lisp(function, args, 1);
-}
-lispobj
-funcall2(lispobj function, lispobj arg0, lispobj arg1)
-{
- lispobj args[2];
- args[0] = arg0;
- args[1] = arg1;
- return call_into_lisp(function, args, 2);
-}
-lispobj
-funcall3(lispobj function, lispobj arg0, lispobj arg1, lispobj arg2)
-{
- lispobj args[3];
- args[0] = arg0;
- args[1] = arg1;
- args[2] = arg2;
- return call_into_lisp(function, args, 3);
-}
-
-
#ifdef LISP_FEATURE_LINKAGE_TABLE
/* FIXME: It might be cleaner to generate these from the lisp side of
* things.
Index: x86-arch.c
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/runtime/x86-arch.c,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -d -r1.49 -r1.50
--- x86-arch.c 2 Apr 2007 15:20:55 -0000 1.49
+++ x86-arch.c 4 Apr 2007 13:11:19 -0000 1.50
@@ -342,52 +342,6 @@
SHOW("returning from arch_install_interrupt_handlers()");
}
-/* This is implemented in assembly language and called from C: */
-extern lispobj
-call_into_lisp(lispobj fun, lispobj *args, int nargs);
-
-/* These functions are an interface to the Lisp call-in facility.
- * Since this is C we can know nothing about the calling environment.
- * The control stack might be the C stack if called from the monitor
- * or the Lisp stack if called as a result of an interrupt or maybe
- * even a separate stack. The args are most likely on that stack but
- * could be in registers depending on what the compiler likes. So we
- * copy the args into a portable vector and let the assembly language
- * call-in function figure it out. */
-
-lispobj
-funcall0(lispobj function)
-{
- lispobj *args = NULL;
-
- FSHOW((stderr, "/entering funcall0(0x%lx)\n", (long)function));
- return call_into_lisp(function, args, 0);
-}
-lispobj
-funcall1(lispobj function, lispobj arg0)
-{
- lispobj args[1];
- args[0] = arg0;
- return call_into_lisp(function, args, 1);
-}
-lispobj
-funcall2(lispobj function, lispobj arg0, lispobj arg1)
-{
- lispobj args[2];
- args[0] = arg0;
- args[1] = arg1;
- return call_into_lisp(function, args, 2);
-}
-lispobj
-funcall3(lispobj function, lispobj arg0, lispobj arg1, lispobj arg2)
-{
- lispobj args[3];
- args[0] = arg0;
- args[1] = arg1;
- args[2] = arg2;
- return call_into_lisp(function, args, 3);
-}
-
#ifdef LISP_FEATURE_LINKAGE_TABLE
/* FIXME: It might be cleaner to generate these from the lisp side of
* things.
|