default:
@echo "Run 'make' with one of the following parameters:"
@echo ""
- @echo "freebsd-x86"
- @echo "freebsd-amd64"
- @echo "linux-x86"
- @echo "linux-amd64"
+ @echo "freebsd-x86-32"
+ @echo "freebsd-x86-64"
+ @echo "linux-x86-32"
+ @echo "linux-x86-64"
@echo "linux-ppc"
@echo "linux-arm"
- @echo "openbsd-x86"
- @echo "openbsd-amd64"
- @echo "macosx-x86"
+ @echo "openbsd-x86-32"
+ @echo "openbsd-x86-64"
+ @echo "macosx-x86-32"
@echo "macosx-ppc"
- @echo "solaris-x86"
- @echo "solaris-amd64"
+ @echo "solaris-x86-32"
+ @echo "solaris-x86-64"
@echo "windows-ce-arm"
- @echo "windows-ce-x86"
- @echo "windows-nt-x86"
+ @echo "windows-nt-x86-32"
@echo ""
@echo "Additional modifiers:"
@echo ""
@echo "NO_UI=1 don't link with X11 libraries (ignored on Mac OS X)"
@echo "X11=1 force link with X11 libraries instead of Cocoa (only on Mac OS X)"
-openbsd-x86:
- $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.openbsd.x86
+openbsd-x86-32:
+ $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.openbsd.x86.32
-openbsd-amd64:
- $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.openbsd.amd64
+openbsd-x86-64:
+ $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.openbsd.x86.64
-freebsd-x86:
- $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.freebsd.x86
+freebsd-x86-32:
+ $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.freebsd.x86.32
-freebsd-amd64:
- $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.freebsd.amd64
+freebsd-x86-64:
+ $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.freebsd.x86.64
macosx-freetype:
ln -sf libfreetype.6.dylib \
macosx-ppc: macosx-freetype
$(MAKE) $(EXECUTABLE) macosx.app CONFIG=vm/Config.macosx.ppc
-macosx-x86: macosx-freetype
- $(MAKE) $(EXECUTABLE) macosx.app CONFIG=vm/Config.macosx.x86
+macosx-x86-32: macosx-freetype
+ $(MAKE) $(EXECUTABLE) macosx.app CONFIG=vm/Config.macosx.x86.32
-linux-x86:
- $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.linux.x86
+linux-x86-32:
+ $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.linux.x86.32
-linux-amd64:
- $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.linux.amd64
+linux-x86-64:
+ $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.linux.x86.64
linux-ppc:
$(MAKE) $(EXECUTABLE) CONFIG=vm/Config.linux.ppc
linux-arm:
$(MAKE) $(EXECUTABLE) CONFIG=vm/Config.linux.arm
-solaris-x86:
- $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.solaris.x86
+solaris-x86-32:
+ $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.solaris.x86.32
-solaris-amd64:
- $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.solaris.amd64
+solaris-x86-64:
+ $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.solaris.x86.64
-windows-nt-x86:
- $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.windows.nt.x86
+windows-nt-x86-32:
+ $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.windows.nt.x86.32
windows-ce-arm:
$(MAKE) $(EXECUTABLE) CONFIG=vm/Config.windows.ce.arm
-windows-ce-x86:
- $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.windows.ce.x86
-
macosx.app: factor
mkdir -p $(BUNDLE)/Contents/MacOS
cp $(EXECUTABLE) $(BUNDLE)/Contents/MacOS/factor
-BOOT_ARCH = arm
PLAF_DLL_OBJS += vm/cpu-arm.o
-BOOT_ARCH = ppc
PLAF_DLL_OBJS += vm/cpu-ppc.o
-BOOT_ARCH = amd64
PLAF_DLL_OBJS += vm/cpu-x86.64.o
+++ /dev/null
-#include "asm.h"
-
-/* Callable from C as
-void *native_stack_pointer(void) */
- .globl MANGLE(native_stack_pointer)
-MANGLE(native_stack_pointer):
- mov %rsp,%rax
- ret
+++ /dev/null
-#define FACTOR_CPU_STRING "x86.64"
-
-register CELL ds asm("r14");
-register CELL rs asm("r15");
-void **primitives;
-
-INLINE void flush_icache(CELL start, CELL len) {}
-
-void *native_stack_pointer(void);
-
-typedef CELL F_COMPILED_FRAME;
-
-#define PREVIOUS_FRAME(frame) (frame + 1)
-#define RETURN_ADDRESS(frame) (*(frame))
-
-INLINE void execute(CELL word)
-{
- F_WORD *untagged = untag_object(word);
- untagged->xt(word);
-}
#define ARG1 %edx
#define XT_REG %ecx
#define STACK_REG %esp
-#define DS_REG %edi
+#define DS_REG %esi
#define CELL_SIZE 4
#define PUSH_NONVOLATILE \
- push %ebx \
+ push %ebx ; \
push %ebp
#define POP_NONVOLATILE \
- pop %ebp \
+ pop %ebp ; \
pop %ebx
#define QUOT_XT_OFFSET 5
register CELL rs asm("edi");
#define FASTCALL __attribute__ ((regparm (2)))
-
-void set_callstack(F_STACK_FRAME *to, F_STACK_FRAME *from, CELL length, void *memcpy);
#define CELL_SIZE 8
#define PUSH_NONVOLATILE \
- push %rbx \
- push %rbp \
- push %r12 \
- push %r13 \
- push %r16 \
+ push %rbx ; \
+ push %rbp ; \
+ push %r12 ; \
+ push %r13 ; \
+ push %r16 ; \
push %rax /* Alignment */
#define POP_NONVOLATILE \
- pop %rax /* Alignment */ \
- pop %r16 \
- pop %r13 \
- pop %r12 \
- pop %rbp \
+ pop %rax ; /* Alignment */ \
+ pop %r16 ; \
+ pop %r13 ; \
+ pop %r12 ; \
+ pop %rbp ; \
pop %rbx
#define QUOT_XT_OFFSET 13
call MANGLE(save_callstack_bottom)
mov (STACK_REG),ARG0 /* Pass quot as arg 1 */
- mov QUOT_XT_OFFSET(STACK_REG),XT_REG
+ mov QUOT_XT_OFFSET(ARG0),XT_REG
call *XT_REG /* Call quot-xt */
POP ARG0
ret
DEF(FASTCALL void,undefined,(CELL word)):
- mov STACK_REG,ARG1 /* Pass callstack pointer as arg 2 (not fastcall) */
+ mov STACK_REG,ARG1 /* Pass callstack pointer */
jmp MANGLE(undefined_error) /* This throws an error */
DEF(FASTCALL void,dosym,(CELL word)):
DEF(FASTCALL void,docol_profiling,(CELL word)):
add $CELL_SIZE,PROFILING_OFFSET(%eax) /* Increment profile-count slot */
DEF(FASTCALL void,docol,(CELL word)):
- mov WORD_XT_OFFSET(ARG0),ARG0 /* Load word-def slot */
+ mov WORD_DEF_OFFSET(ARG0),ARG0 /* Load word-def slot */
JUMP_QUOT
/* We must pass the XT to the quotation in ECX. */
FASTCALL void dosym(CELL word);
FASTCALL void docol_profiling(CELL word);
FASTCALL void docol(CELL word);
+
+void set_callstack(F_STACK_FRAME *to, F_STACK_FRAME *from, CELL length, void *memcpy);
#if defined(WINDOWS)
#if defined(WINCE)
#include "os-windows-ce.h"
- #elif defined (__i386)
- #include "os-windows-nt.h"
#else
- #error "Unsupported Windows flavor"
+ #include "os-windows-nt.h"
#endif
#include "os-windows.h"
#include "os-unix-ucontext.h"
#if defined(FACTOR_X86)
- #include "os-freebsd-x86.h"
+ #include "os-freebsd-x86.32.h"
#else
#error "Unsupported FreeBSD flavor"
#endif
#include "os-openbsd.h"
#if defined(FACTOR_X86)
- #include "os-openbsd-x86.h"
+ #include "os-openbsd-x86.32.h"
#elif defined(FACTOR_AMD64)
- #include "os-openbsd-amd64.h"
+ #include "os-openbsd-x86.64.h"
#else
#error "Unsupported OpenBSD flavor"
#endif
#endif
#if defined(FACTOR_X86)
- #include "cpu-x86.h"
#include "cpu-x86.32.h"
-#elif defined(FACTOR_AMD64)
#include "cpu-x86.h"
+#elif defined(FACTOR_AMD64)
#include "cpu-x86.64.h"
+ #include "cpu-x86.h"
#elif defined(FACTOR_PPC)
#include "cpu-ppc.h"
#elif defined(FACTOR_ARM)
}
/* This function is called from the undefined function in cpu_*.S */
-void undefined_error(CELL word, F_STACK_FRAME *callstack_top)
+FASTCALL void undefined_error(CELL word, F_STACK_FRAME *callstack_top)
{
stack_chain->callstack_top = callstack_top;
general_error(ERROR_UNDEFINED_WORD,word,F,NULL);
}
/* called before entry into Factor code. */
-void save_callstack_bottom(F_STACK_FRAME *callstack_bottom)
+FASTCALL void save_callstack_bottom(F_STACK_FRAME *callstack_bottom)
{
stack_chain->callstack_bottom = callstack_bottom;
}