1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-01 20:30:28 +02:00

first merge of x86-64 backend and related configury changes

Patches applied:

 * bonzini@gnu.org--2004b/lightning--x86-64--1.3--base-0
   tag of bonzini@gnu.org--2004b/lightning--stable--1.2--patch-28

 * bonzini@gnu.org--2004b/lightning--x86-64--1.3--patch-1
   start merging from mzscheme...

 * bonzini@gnu.org--2004b/lightning--x86-64--1.3--patch-2
   fix i386

 * bonzini@gnu.org--2004b/lightning--x86-64--1.3--patch-3
   fix distribution hiccups

 * bonzini@gnu.org--2004b/lightning--x86-64--1.3--patch-4
   adapt for usage outside distribution.

 * bonzini@gnu.org--2004b/lightning--x86-64--1.3--patch-6
   fixes for GNU Smalltalk

git-archimport-id: bonzini@gnu.org--2004b/lightning--stable--1.2--patch-30
This commit is contained in:
Paolo Bonzini 2006-10-30 08:48:47 +00:00
parent 065bc52d7f
commit 1f7feaffe2
29 changed files with 900 additions and 305 deletions

View file

@ -1,10 +1,59 @@
2006-10-30 Paolo Bonzini <bonzini@gnu.org>
* lightning/Makefile.am: Use "ln -sf".
* lightning/core-common.h: Define jit_negr_l if necessary.
2006-10-30 Paolo Bonzini <bonzini@gnu.org>
* lightning/i386/asm.h (MOVS*, MOVZ*): Use correct _r[124] macros.
2006-10-29 Paolo Bonzini <bonzini@gnu.org>
* configure.ac: Use lightning.m4 macros.
* lightning.m4: Refactor to use common code in configure.ac. Move...
* build-aux/lightning.m4: ... here.
* lightningize.in: Support suffixes.
* opcode/disass.in: Adapt to changes in configure.ac.
* lightning/ppc/funcs.h: Use __APPLE__ instead of _CALL_DARWIN.
* lightning/i386/core-32.h: Likewise.
2006-10-26 Paolo Bonzini <bonzini@gnu.org>
* configure.ac: Fix compilation test.
* lightning/Makefile.am: Symlink LIGHTNING_TARGET_FILES in
non-distribution mode.
* lightning/i386/Makefile.frag: Use LIGHTNING_TARGET_FILES.
2006-10-26 Paolo Bonzini <bonzini@gnu.org>
* configure.ac: Subst cpu.
* lightning/core-common.h: Make tests pass on i386.
* lightning/i386/asm-32.h: Make tests pass on i386.
* lightning/i386/asm-64.h: Make tests pass on i386.
* lightning/i386/asm-i386.h: Make tests pass on i386.
* lightning/i386/core-32.h: Make tests pass on i386.
* lightning/i386/core-64.h: Make tests pass on i386.
* lightning/i386/core-i386.h: Make tests pass on i386.
* tests/Makefile.am: Include files from cpu directory.
2006-10-26 Paolo Bonzini <bonzini@gnu.org>
* lightning/i386/asm.h: Move to asm-i386.h
* lightning/i386/asm-32.h: New, from Matthew Flatt.
* lightning/i386/asm-64.h: New, from Matthew Flatt.
* lightning/i386/core.h: Move to core-i386.h
* lightning/i386/core-32.h: New, from Matthew Flatt.
* lightning/i386/core-64.h: New, from Matthew Flatt.
* lightning/i386/fp.h: Move to fp-32.h
* lightning/i386/fp-64.h: New, dummy.
* lightning/i386/Makefile.frag: New.
* lightning/Makefile.am: Support per-target Makefile fragments.
* configure.ac: Support per-target Makefile fragments and CPU suffixes.
2006-10-16 Paolo Bonzini <bonzini@gnu.org>
* lightning/i386/funcs.h (jit_flush_code): Fix syntax error. :-(
* lightning/i386/i386.h (jit_flush_code): Fix syntax error. :-(
2006-07-06 Paolo Bonzini <bonzini@gnu.org>
Ludovic Courtes <ludovic.courtes@laas.fr>

View file

@ -1,5 +1,6 @@
# Automake requirements:
AUTOMAKE_OPTIONS = 1.7 gnu
AUTOMAKE_OPTIONS = 1.8 gnu
ACLOCAL_AMFLAGS = -I build-aux
SUBDIRS = . doc lightning opcode tests
EXTRA_DIST = build-aux/texi2dvi build-aux/help2man
@ -7,5 +8,5 @@ EXTRA_DIST = build-aux/texi2dvi build-aux/help2man
include_HEADERS = lightning.h
aclocaldir = $(datadir)/aclocal
dist_aclocal_DATA = lightning.m4
dist_aclocal_DATA = build-aux/lightning.m4
bin_SCRIPTS = lightningize

View file

@ -43,13 +43,14 @@ DIST_COMMON = README $(am__configure_deps) $(dist_aclocal_DATA) \
$(include_HEADERS) $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(srcdir)/config.h.in $(srcdir)/lightningize.in \
$(top_srcdir)/configure AUTHORS COPYING COPYING.DOC \
COPYING.LESSER ChangeLog INSTALL NEWS THANKS \
COPYING.LESSER ChangeLog INSTALL NEWS THANKS TODO \
build-aux/config.guess build-aux/config.sub build-aux/depcomp \
build-aux/install-sh build-aux/mdate-sh build-aux/missing \
build-aux/texinfo.tex
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__aclocal_m4_deps = $(top_srcdir)/build-aux/lightning.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
@ -159,6 +160,7 @@ build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
cpu = @cpu@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
@ -194,12 +196,13 @@ target_os = @target_os@
target_vendor = @target_vendor@
# Automake requirements:
AUTOMAKE_OPTIONS = 1.7 gnu
AUTOMAKE_OPTIONS = 1.8 gnu
ACLOCAL_AMFLAGS = -I build-aux
SUBDIRS = . doc lightning opcode tests
EXTRA_DIST = build-aux/texi2dvi build-aux/help2man
include_HEADERS = lightning.h
aclocaldir = $(datadir)/aclocal
dist_aclocal_DATA = lightning.m4
dist_aclocal_DATA = build-aux/lightning.m4
bin_SCRIPTS = lightningize
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive

1
aclocal.m4 vendored
View file

@ -848,3 +848,4 @@ AC_SUBST([am__tar])
AC_SUBST([am__untar])
]) # _AM_PROG_TAR
m4_include([build-aux/lightning.m4])

64
build-aux/lightning.m4 Normal file
View file

@ -0,0 +1,64 @@
dnl I'd like this to be edited in -*- Autoconf -*- mode...
dnl
# serial 2 LIGHTNING_CONFIGURE_IF_NOT_FOUND
m4_define([LIGHTNING_BACKENDS], [i386:-32 i386:-64 sparc ppc])
AC_DEFUN([LIGHTNING_CONFIGURE_LINKS], [
suffix=
case "$host_cpu" in
i?86) cpu=i386; suffix=-32 ;;
x86_64) cpu=i386; suffix=-64 ;;
sparc*) cpu=sparc ;;
powerpc) cpu=ppc ;;
*) ;;
esac
if test -n "$cpu" && test -d "$srcdir/lightning/$cpu"; then
$1
lightning_frag=`cd $srcdir && pwd`/lightning/$cpu/Makefile.frag
test -f $lightning_frag || lightning_frag=/dev/null
asm_src=lightning/$cpu/asm.h
test -f $srcdir/lightning/$cpu/asm$suffix.h && asm_src=lightning/$cpu/asm$suffix.h
AC_CONFIG_LINKS(lightning/asm.h:$asm_src, [], [asm_src=$asm_src])
fp_src=lightning/$cpu/fp.h
test -f $srcdir/lightning/$cpu/fp$suffix.h && fp_src=lightning/$cpu/fp$suffix.h
AC_CONFIG_LINKS(lightning/fp.h:$fp_src, [], [fp_src=$fp_src])
core_src=lightning/$cpu/core.h
test -f $srcdir/lightning/$cpu/core$suffix.h && core_src=lightning/$cpu/core$suffix.h
AC_CONFIG_LINKS(lightning/core.h:$core_src, [], [core_src=$core_src])
funcs_src=lightning/$cpu/funcs.h
test -f $srcdir/lightning/$cpu/funcs$suffix.h && funcs_src=lightning/$cpu/funcs$suffix.h
AC_CONFIG_LINKS(lightning/funcs.h:$funcs_src, [], [funcs_src=$funcs_src])
else
$2
lightning_frag=/dev/null
fi
AC_SUBST_FILE(lightning_frag)
])
AC_DEFUN([LIGHTNING_CONFIGURE_IF_NOT_FOUND], [
AC_REQUIRE([AC_PROG_LN_S])dnl
AC_REQUIRE([AC_CANONICAL_HOST])dnl
AC_CHECK_HEADER(lightning.h)
AM_CONDITIONAL(LIGHTNING_MAIN, (exit 1))
AM_CONDITIONAL(HAVE_INSTALLED_LIGHTNING, test "$ac_cv_header_lightning_h" = yes)
lightning=
if test "$ac_cv_header_lightning_h" = yes; then
lightning=yes
else
LIGHTNING_CONFIGURE_LINKS(lightning=yes, lightning=no)
fi
AS_IF([test "$lightning" = yes], [
AC_DEFINE(HAVE_LIGHTNING, 1, [Define if GNU lightning can be used])
$1
], [$2])
unset lightning
])dnl

View file

@ -6,14 +6,8 @@
/* Define if the test programs should disassemble the code they produce */
#undef LIGHTNING_DISASSEMBLE
/* Define if lightning is targeting the x86 architecture */
#undef LIGHTNING_I386
/* Define if lightning is targeting the PowerPC architecture */
#undef LIGHTNING_PPC
/* Define if lightning is targeting the SPARC architecture */
#undef LIGHTNING_SPARC
/* Used to pick the appropriate disassembler, for debugging */
#undef LIGHTNING_TARGET
/* Name of package */
#undef PACKAGE

161
configure vendored
View file

@ -655,16 +655,17 @@ LN_S
RANLIB
INSTALL_INFO
BACKENDS
cpu
LIGHTNING_MAIN_TRUE
LIGHTNING_MAIN_FALSE
REGRESSION_TESTING_TRUE
REGRESSION_TESTING_FALSE
DISASS_TRUE
DISASS_FALSE
LIGHTNING_MAIN_TRUE
LIGHTNING_MAIN_FALSE
LIBDISASS
LIBOBJS
LTLIBOBJS'
ac_subst_files=''
ac_subst_files='lightning_frag'
ac_precious_vars='build_alias
host_alias
target_alias
@ -3995,29 +3996,68 @@ fi
BACKENDS="i386 sparc ppc"
BACKENDS="i386:-32 i386:-64 sparc ppc"
case "$target_cpu" in
i?86) cpu=i386;
cat >>confdefs.h <<\_ACEOF
#define LIGHTNING_I386 1
_ACEOF
;;
sparc*) cpu=sparc;
cat >>confdefs.h <<\_ACEOF
#define LIGHTNING_SPARC 1
_ACEOF
;;
powerpc) cpu=ppc;
cat >>confdefs.h <<\_ACEOF
#define LIGHTNING_PPC 1
_ACEOF
;;
*) { { echo "$as_me:$LINENO: error: cpu $target_cpu not supported" >&5
echo "$as_me: error: cpu $target_cpu not supported" >&2;}
{ (exit 1); exit 1; }; } ;;
suffix=
case "$host_cpu" in
i?86) cpu=i386; suffix=-32 ;;
x86_64) cpu=i386; suffix=-64 ;;
sparc*) cpu=sparc ;;
powerpc) cpu=ppc ;;
*) ;;
esac
if test -n "$cpu" && test -d "$srcdir/lightning/$cpu"; then
cat >>confdefs.h <<_ACEOF
#define LIGHTNING_TARGET `echo "LIGHTNING_$cpu$suffix" | $as_tr_cpp`
_ACEOF
lightning_frag=`cd $srcdir && pwd`/lightning/$cpu/Makefile.frag
test -f $lightning_frag || lightning_frag=/dev/null
asm_src=lightning/$cpu/asm.h
test -f $srcdir/lightning/$cpu/asm$suffix.h && asm_src=lightning/$cpu/asm$suffix.h
ac_config_links="$ac_config_links lightning/asm.h:$asm_src"
fp_src=lightning/$cpu/fp.h
test -f $srcdir/lightning/$cpu/fp$suffix.h && fp_src=lightning/$cpu/fp$suffix.h
ac_config_links="$ac_config_links lightning/fp.h:$fp_src"
core_src=lightning/$cpu/core.h
test -f $srcdir/lightning/$cpu/core$suffix.h && core_src=lightning/$cpu/core$suffix.h
ac_config_links="$ac_config_links lightning/core.h:$core_src"
funcs_src=lightning/$cpu/funcs.h
test -f $srcdir/lightning/$cpu/funcs$suffix.h && funcs_src=lightning/$cpu/funcs$suffix.h
ac_config_links="$ac_config_links lightning/funcs.h:$funcs_src"
else
{ { echo "$as_me:$LINENO: error: cpu $target_cpu not supported" >&5
echo "$as_me: error: cpu $target_cpu not supported" >&2;}
{ (exit 1); exit 1; }; }
lightning_frag=/dev/null
fi
if :; then
LIGHTNING_MAIN_TRUE=
LIGHTNING_MAIN_FALSE='#'
else
LIGHTNING_MAIN_TRUE='#'
LIGHTNING_MAIN_FALSE=
fi
# Check whether --enable-disassembling was given.
@ -4053,8 +4093,10 @@ cat >>confdefs.h <<\_ACEOF
#define LIGHTNING_DISASSEMBLE 1
_ACEOF
LIBDISASS="libdisass.a"
else
LIBDISASS=
fi
LIBDISASS=""
if test "$enable_disassembling" != no; then
@ -4065,7 +4107,8 @@ else
DISASS_FALSE=
fi
test "$enable_disassembling" != no && LIBDISASS="libdisass.a"
test "$enable_disassembling" != no &&
# Check whether --enable-assertions was given.
if test "${enable_assertions+set}" = set; then
@ -4084,23 +4127,6 @@ _ACEOF
fi
if :; then
LIGHTNING_MAIN_TRUE=
LIGHTNING_MAIN_FALSE='#'
else
LIGHTNING_MAIN_TRUE='#'
LIGHTNING_MAIN_FALSE=
fi
cpu_dir=lightning/$cpu
ac_config_links="$ac_config_links lightning/asm.h:$cpu_dir/asm.h lightning/fp.h:$cpu_dir/fp.h lightning/core.h:$cpu_dir/core.h lightning/funcs.h:$cpu_dir/funcs.h"
ac_config_files="$ac_config_files Makefile doc/Makefile tests/Makefile opcode/Makefile lightning/Makefile"
ac_config_files="$ac_config_files lightningize"
@ -4216,6 +4242,13 @@ echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
Usually this means the macro was only invoked conditionally." >&2;}
{ (exit 1); exit 1; }; }
fi
if test -z "${LIGHTNING_MAIN_TRUE}" && test -z "${LIGHTNING_MAIN_FALSE}"; then
{ { echo "$as_me:$LINENO: error: conditional \"LIGHTNING_MAIN\" was never defined.
Usually this means the macro was only invoked conditionally." >&5
echo "$as_me: error: conditional \"LIGHTNING_MAIN\" was never defined.
Usually this means the macro was only invoked conditionally." >&2;}
{ (exit 1); exit 1; }; }
fi
if test -z "${REGRESSION_TESTING_TRUE}" && test -z "${REGRESSION_TESTING_FALSE}"; then
{ { echo "$as_me:$LINENO: error: conditional \"REGRESSION_TESTING\" was never defined.
Usually this means the macro was only invoked conditionally." >&5
@ -4230,13 +4263,6 @@ echo "$as_me: error: conditional \"DISASS\" was never defined.
Usually this means the macro was only invoked conditionally." >&2;}
{ (exit 1); exit 1; }; }
fi
if test -z "${LIGHTNING_MAIN_TRUE}" && test -z "${LIGHTNING_MAIN_FALSE}"; then
{ { echo "$as_me:$LINENO: error: conditional \"LIGHTNING_MAIN\" was never defined.
Usually this means the macro was only invoked conditionally." >&5
echo "$as_me: error: conditional \"LIGHTNING_MAIN\" was never defined.
Usually this means the macro was only invoked conditionally." >&2;}
{ (exit 1); exit 1; }; }
fi
: ${CONFIG_STATUS=./config.status}
ac_clean_files_save=$ac_clean_files
@ -4685,7 +4711,10 @@ cat >>$CONFIG_STATUS <<_ACEOF
# INIT-COMMANDS
#
AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
cpu_dir=$cpu_dir
asm_src=$asm_src
fp_src=$fp_src
core_src=$core_src
funcs_src=$funcs_src
_ACEOF
@ -4697,10 +4726,10 @@ do
case $ac_config_target in
"config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
"depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
"lightning/asm.h") CONFIG_LINKS="$CONFIG_LINKS lightning/asm.h:$cpu_dir/asm.h" ;;
"lightning/fp.h") CONFIG_LINKS="$CONFIG_LINKS lightning/fp.h:$cpu_dir/fp.h" ;;
"lightning/core.h") CONFIG_LINKS="$CONFIG_LINKS lightning/core.h:$cpu_dir/core.h" ;;
"lightning/funcs.h") CONFIG_LINKS="$CONFIG_LINKS lightning/funcs.h:$cpu_dir/funcs.h" ;;
"lightning/asm.h") CONFIG_LINKS="$CONFIG_LINKS lightning/asm.h:$asm_src" ;;
"lightning/fp.h") CONFIG_LINKS="$CONFIG_LINKS lightning/fp.h:$fp_src" ;;
"lightning/core.h") CONFIG_LINKS="$CONFIG_LINKS lightning/core.h:$core_src" ;;
"lightning/funcs.h") CONFIG_LINKS="$CONFIG_LINKS lightning/funcs.h:$funcs_src" ;;
"Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
"doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
"tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
@ -4765,6 +4794,11 @@ if test -n "$CONFIG_FILES"; then
_ACEOF
# Create sed commands to just substitute file output variables.
# Remaining file output variables are in a fragment that also has non-file
# output varibles.
ac_delim='%!_!# '
@ -4861,15 +4895,12 @@ LN_S!$LN_S$ac_delim
RANLIB!$RANLIB$ac_delim
INSTALL_INFO!$INSTALL_INFO$ac_delim
BACKENDS!$BACKENDS$ac_delim
REGRESSION_TESTING_TRUE!$REGRESSION_TESTING_TRUE$ac_delim
REGRESSION_TESTING_FALSE!$REGRESSION_TESTING_FALSE$ac_delim
DISASS_TRUE!$DISASS_TRUE$ac_delim
DISASS_FALSE!$DISASS_FALSE$ac_delim
cpu!$cpu$ac_delim
LIGHTNING_MAIN_TRUE!$LIGHTNING_MAIN_TRUE$ac_delim
LIGHTNING_MAIN_FALSE!$LIGHTNING_MAIN_FALSE$ac_delim
_ACEOF
if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 94; then
break
elif $ac_last_try; then
{ { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
@ -4889,6 +4920,10 @@ fi
cat >>$CONFIG_STATUS <<_ACEOF
cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
/^[ ]*@lightning_frag@[ ]*$/{
r $lightning_frag
d
}
_ACEOF
sed '
s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
@ -4908,12 +4943,16 @@ _ACEOF
ac_delim='%!_!# '
for ac_last_try in false false false false false :; do
cat >conf$$subs.sed <<_ACEOF
REGRESSION_TESTING_TRUE!$REGRESSION_TESTING_TRUE$ac_delim
REGRESSION_TESTING_FALSE!$REGRESSION_TESTING_FALSE$ac_delim
DISASS_TRUE!$DISASS_TRUE$ac_delim
DISASS_FALSE!$DISASS_FALSE$ac_delim
LIBDISASS!$LIBDISASS$ac_delim
LIBOBJS!$LIBOBJS$ac_delim
LTLIBOBJS!$LTLIBOBJS$ac_delim
_ACEOF
if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 3; then
if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 7; then
break
elif $ac_last_try; then
{ { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
@ -5534,7 +5573,7 @@ fi
# A small sanity check
echo "#include <stdio.h>" > confdefs.h # dummy input file
CPPFLAGS="$CPPFLAGS -I. -I$srcdir"
CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/lightning/$cpu"
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */

View file

@ -26,18 +26,16 @@ AC_PROG_MAKE_SET
AC_PATH_PROG(INSTALL_INFO, install-info, :, $PATH:/sbin)
AC_EXEEXT
BACKENDS="i386 sparc ppc"
BACKENDS="LIGHTNING_BACKENDS"
AC_SUBST(BACKENDS)
case "$target_cpu" in
i?86) cpu=i386; AC_DEFINE(LIGHTNING_I386, 1,
[Define if lightning is targeting the x86 architecture]) ;;
sparc*) cpu=sparc; AC_DEFINE(LIGHTNING_SPARC, 1,
[Define if lightning is targeting the SPARC architecture]) ;;
powerpc) cpu=ppc; AC_DEFINE(LIGHTNING_PPC, 1,
[Define if lightning is targeting the PowerPC architecture]) ;;
*) AC_MSG_ERROR([cpu $target_cpu not supported]) ;;
esac
LIGHTNING_CONFIGURE_LINKS(
[AC_DEFINE_UNQUOTED(LIGHTNING_TARGET, [AS_TR_CPP([LIGHTNING_$cpu$suffix])],
[Used to pick the appropriate disassembler, for debugging])],
[AC_MSG_ERROR([cpu $target_cpu not supported])])
AC_SUBST(cpu)
AM_CONDITIONAL(LIGHTNING_MAIN, :)
dnl ---------------------------- COMMAND LINE ---------------------------------
@ -56,10 +54,13 @@ fi
if test "$enable_disassembling" != no; then
AC_DEFINE(LIGHTNING_DISASSEMBLE, 1,
[Define if the test programs should disassemble the code they produce])
LIBDISASS="libdisass.a"
else
LIBDISASS=
fi
LIBDISASS=""
AM_CONDITIONAL(DISASS, test "$enable_disassembling" != no)
test "$enable_disassembling" != no && LIBDISASS="libdisass.a"
test "$enable_disassembling" != no &&
AC_SUBST(LIBDISASS)
AC_ARG_ENABLE( assertions,
[ --enable-assertions perform internal consistency checks],
@ -69,19 +70,8 @@ if test "$enable_assertions" != no; then
AC_DEFINE(_ASM_SAFETY, 1, [Define to enable assertions])
fi
AM_CONDITIONAL(LIGHTNING_MAIN, :)
dnl --------------------------- PRODUCE OUTPUT --------------------------------
cpu_dir=lightning/$cpu
AC_CONFIG_LINKS(lightning/asm.h:$cpu_dir/asm.h dnl
lightning/fp.h:$cpu_dir/fp.h dnl
lightning/core.h:$cpu_dir/core.h dnl
lightning/funcs.h:$cpu_dir/funcs.h, [],
[cpu_dir=$cpu_dir])
AC_SUBST(LIBDISASS)
AC_CONFIG_FILES(Makefile doc/Makefile tests/Makefile opcode/Makefile
lightning/Makefile)
AC_CONFIG_FILES(lightningize, chmod +x lightningize)
@ -90,6 +80,6 @@ AC_OUTPUT
# A small sanity check
echo "#include <stdio.h>" > confdefs.h # dummy input file
CPPFLAGS="$CPPFLAGS -I. -I$srcdir"
CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/lightning/$cpu"
AC_TRY_COMPILE([#include "lightning.h"], , ,
AC_MSG_WARN(the compiler that was found could not compile GNU lightning))

View file

@ -41,7 +41,8 @@ DIST_COMMON = $(dist_man1_MANS) $(lightning_TEXINFOS) \
$(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(srcdir)/stamp-vti $(srcdir)/version.texi
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__aclocal_m4_deps = $(top_srcdir)/build-aux/lightning.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
@ -132,6 +133,7 @@ build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
cpu = @cpu@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@

View file

@ -1,5 +1,5 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.28.
.TH LIGHTNINGIZE "1" "September 2006" "lightningize 1.2b" "User Commands"
.TH LIGHTNINGIZE "1" "October 2006" "lightningize 1.2b" "User Commands"
.SH NAME
lightningize \- manual page for lightningize 1.2b
.SH SYNOPSIS

View file

@ -1,58 +0,0 @@
dnl I'd like this to be edited in -*- Autoconf -*- mode...
dnl
# serial 1 LIGHTNING_CONFIGURE_IF_NOT_FOUND
AC_DEFUN([LIGHTNING_CONFIGURE_IF_NOT_FOUND], [
AC_REQUIRE([AC_PROG_LN_S])dnl
AC_REQUIRE([AC_CANONICAL_HOST])dnl
AC_CHECK_HEADER(lightning.h)
AM_CONDITIONAL(LIGHTNING_MAIN, (exit 1))
AM_CONDITIONAL(HAVE_INSTALLED_LIGHTNING, test "$ac_cv_header_lightning_h" = yes)
lightning=
if test "$ac_cv_header_lightning_h" = yes; then
lightning=yes
else
case "$host_cpu" in
i?86) cpu_subdir=i386 ;;
sparc*) cpu_subdir=sparc ;;
powerpc) cpu_subdir=ppc ;;
*) ;;
esac
test -n "$cpu_subdir" && test -d "$srcdir/lightning/$cpu_subdir" && \
lightning=yes
fi
ifdef([AC_HELP_STRING], [
dnl autoconf 2.50 style
if test -n "$cpu_subdir" && test -d "$srcdir/lightning/$cpu_subdir"; then
AC_CONFIG_LINKS(lightning/asm.h:lightning/$cpu_subdir/asm.h
lightning/core.h:lightning/$cpu_subdir/core.h
lightning/fp.h:lightning/$cpu_subdir/fp.h
lightning/funcs.h:lightning/$cpu_subdir/funcs.h, , [
cpu_subdir=$cpu_subdir
])
fi
], [
dnl autoconf 2.13 style
AC_OUTPUT_COMMANDS([
if test -n "$cpu_subdir" && test -d "$srcdir/lightning/$cpu_subdir"; then
for i in asm fp core funcs; do
echo linking $srcdir/lightning/$cpu_subdir/$i.h to lightning/$i.h
(cd lightning && $LN_S -f $srcdir/$cpu_subdir/$i.h $i.h)
done
fi
], [
LN_S='$LN_S'
cpu_subdir=$cpu_subdir
])
])
if test -n "$lightning"; then
AC_DEFINE(HAVE_LIGHTNING, 1, [Define if GNU lightning can be used])
lightning=
ifelse([$1], , :, [$1])
else
ifelse([$2], , :, [$2])
fi
])dnl

View file

@ -1,18 +1,32 @@
DISTCLEANFILES = asm.h core.h funcs.h fp.h
LIGHTNING_FILES = funcs-common.h core-common.h fp-common.h \
asm-common.h \
i386/asm.h i386/core.h i386/funcs.h i386/fp.h \
EXTRA_DIST = i386/Makefile.frag \
i386/asm-32.h i386/asm-64.h i386/asm-i386.h \
i386/core-32.h i386/core-64.h i386/core-i386.h \
i386/fp-32.h i386/fp-64.h \
i386/funcs.h \
sparc/asm.h sparc/core.h sparc/funcs.h sparc/fp.h \
ppc/asm.h ppc/core.h ppc/funcs.h ppc/fp.h
@lightning_frag@
LIGHTNING_FILES = funcs-common.h core-common.h fp-common.h asm-common.h \
asm.h core.h funcs.h fp.h $(LIGHTNING_TARGET_FILES)
if LIGHTNING_MAIN
lightningdir = $(includedir)/lightning
dist_pkgdata_DATA = Makefile.am
nobase_dist_lightning_HEADERS = $(LIGHTNING_FILES)
nodist_lightning_HEADERS = asm.h core.h funcs.h fp.h
dist_lightning_HEADERS = $(LIGHTNING_FILES)
else
dist_noinst_HEADERS = $(LIGHTNING_FILES)
all-am:
@set frob $(LIGHTNING_TARGET_FILES); shift; \
for i; \
do \
echo $(LN_S) -f $(srcdir)/$$i `basename $$i`; \
$(LN_S) -f $(srcdir)/$$i `basename $$i`; \
done
dist-hook:
cp -p $(srcdir)/lightning.h $(distdir)

View file

@ -39,12 +39,12 @@ build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
subdir = lightning
DIST_COMMON = $(am__dist_noinst_HEADERS_DIST) \
$(am__dist_pkgdata_DATA_DIST) \
$(am__nobase_dist_lightning_HEADERS_DIST) \
$(srcdir)/Makefile.am $(srcdir)/Makefile.in
DIST_COMMON = $(am__dist_lightning_HEADERS_DIST) \
$(am__dist_pkgdata_DATA_DIST) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__aclocal_m4_deps = $(top_srcdir)/build-aux/lightning.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
@ -60,21 +60,13 @@ am__vpath_adj = case $$p in \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
am__installdirs = "$(DESTDIR)$(pkgdatadir)" \
"$(DESTDIR)$(lightningdir)" "$(DESTDIR)$(lightningdir)"
"$(DESTDIR)$(lightningdir)"
dist_pkgdataDATA_INSTALL = $(INSTALL_DATA)
DATA = $(dist_pkgdata_DATA)
am__dist_noinst_HEADERS_DIST = funcs-common.h core-common.h \
fp-common.h asm-common.h i386/asm.h i386/core.h i386/funcs.h \
i386/fp.h sparc/asm.h sparc/core.h sparc/funcs.h sparc/fp.h \
ppc/asm.h ppc/core.h ppc/funcs.h ppc/fp.h
am__nobase_dist_lightning_HEADERS_DIST = funcs-common.h core-common.h \
fp-common.h asm-common.h i386/asm.h i386/core.h i386/funcs.h \
i386/fp.h sparc/asm.h sparc/core.h sparc/funcs.h sparc/fp.h \
ppc/asm.h ppc/core.h ppc/funcs.h ppc/fp.h
nobase_dist_lightningHEADERS_INSTALL = $(install_sh_DATA)
nodist_lightningHEADERS_INSTALL = $(INSTALL_HEADER)
HEADERS = $(dist_noinst_HEADERS) $(nobase_dist_lightning_HEADERS) \
$(nodist_lightning_HEADERS)
am__dist_lightning_HEADERS_DIST = funcs-common.h core-common.h \
fp-common.h asm-common.h asm.h core.h funcs.h fp.h
dist_lightningHEADERS_INSTALL = $(INSTALL_HEADER)
HEADERS = $(dist_lightning_HEADERS)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@ -144,6 +136,7 @@ build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
cpu = @cpu@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
@ -178,17 +171,20 @@ target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
DISTCLEANFILES = asm.h core.h funcs.h fp.h
LIGHTNING_FILES = funcs-common.h core-common.h fp-common.h \
asm-common.h \
i386/asm.h i386/core.h i386/funcs.h i386/fp.h \
EXTRA_DIST = i386/Makefile.frag \
i386/asm-32.h i386/asm-64.h i386/asm-i386.h \
i386/core-32.h i386/core-64.h i386/core-i386.h \
i386/fp-32.h i386/fp-64.h \
i386/funcs.h \
sparc/asm.h sparc/core.h sparc/funcs.h sparc/fp.h \
ppc/asm.h ppc/core.h ppc/funcs.h ppc/fp.h
LIGHTNING_FILES = funcs-common.h core-common.h fp-common.h asm-common.h \
asm.h core.h funcs.h fp.h $(LIGHTNING_TARGET_FILES)
@LIGHTNING_MAIN_TRUE@lightningdir = $(includedir)/lightning
@LIGHTNING_MAIN_TRUE@dist_pkgdata_DATA = Makefile.am
@LIGHTNING_MAIN_TRUE@nobase_dist_lightning_HEADERS = $(LIGHTNING_FILES)
@LIGHTNING_MAIN_TRUE@nodist_lightning_HEADERS = asm.h core.h funcs.h fp.h
@LIGHTNING_MAIN_FALSE@dist_noinst_HEADERS = $(LIGHTNING_FILES)
@LIGHTNING_MAIN_TRUE@dist_lightning_HEADERS = $(LIGHTNING_FILES)
all: all-am
.SUFFIXES:
@ -239,38 +235,19 @@ uninstall-dist_pkgdataDATA:
echo " rm -f '$(DESTDIR)$(pkgdatadir)/$$f'"; \
rm -f "$(DESTDIR)$(pkgdatadir)/$$f"; \
done
install-nobase_dist_lightningHEADERS: $(nobase_dist_lightning_HEADERS)
install-dist_lightningHEADERS: $(dist_lightning_HEADERS)
@$(NORMAL_INSTALL)
test -z "$(lightningdir)" || $(mkdir_p) "$(DESTDIR)$(lightningdir)"
@$(am__vpath_adj_setup) \
list='$(nobase_dist_lightning_HEADERS)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
$(am__vpath_adj) \
echo " $(nobase_dist_lightningHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(lightningdir)/$$f'"; \
$(nobase_dist_lightningHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(lightningdir)/$$f"; \
done
uninstall-nobase_dist_lightningHEADERS:
@$(NORMAL_UNINSTALL)
@$(am__vpath_adj_setup) \
list='$(nobase_dist_lightning_HEADERS)'; for p in $$list; do \
$(am__vpath_adj) \
echo " rm -f '$(DESTDIR)$(lightningdir)/$$f'"; \
rm -f "$(DESTDIR)$(lightningdir)/$$f"; \
done
install-nodist_lightningHEADERS: $(nodist_lightning_HEADERS)
@$(NORMAL_INSTALL)
test -z "$(lightningdir)" || $(mkdir_p) "$(DESTDIR)$(lightningdir)"
@list='$(nodist_lightning_HEADERS)'; for p in $$list; do \
@list='$(dist_lightning_HEADERS)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f=$(am__strip_dir) \
echo " $(nodist_lightningHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(lightningdir)/$$f'"; \
$(nodist_lightningHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(lightningdir)/$$f"; \
echo " $(dist_lightningHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(lightningdir)/$$f'"; \
$(dist_lightningHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(lightningdir)/$$f"; \
done
uninstall-nodist_lightningHEADERS:
uninstall-dist_lightningHEADERS:
@$(NORMAL_UNINSTALL)
@list='$(nodist_lightning_HEADERS)'; for p in $$list; do \
@list='$(dist_lightning_HEADERS)'; for p in $$list; do \
f=$(am__strip_dir) \
echo " rm -f '$(DESTDIR)$(lightningdir)/$$f'"; \
rm -f "$(DESTDIR)$(lightningdir)/$$f"; \
@ -360,7 +337,7 @@ check-am: all-am
check: check-am
all-am: Makefile $(DATA) $(HEADERS)
installdirs:
for dir in "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(lightningdir)" "$(DESTDIR)$(lightningdir)"; do \
for dir in "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(lightningdir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-am
@ -406,9 +383,8 @@ info: info-am
info-am:
install-data-am: install-dist_pkgdataDATA \
install-nobase_dist_lightningHEADERS \
install-nodist_lightningHEADERS
install-data-am: install-dist_lightningHEADERS \
install-dist_pkgdataDATA
install-exec-am:
@ -434,26 +410,32 @@ ps: ps-am
ps-am:
uninstall-am: uninstall-dist_pkgdataDATA uninstall-info-am \
uninstall-nobase_dist_lightningHEADERS \
uninstall-nodist_lightningHEADERS
uninstall-am: uninstall-dist_lightningHEADERS \
uninstall-dist_pkgdataDATA uninstall-info-am
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
ctags dist-hook distclean distclean-generic distclean-tags \
distdir dvi dvi-am html html-am info info-am install \
install-am install-data install-data-am \
install-dist_pkgdataDATA install-exec install-exec-am \
install-info install-info-am install-man \
install-nobase_dist_lightningHEADERS \
install-nodist_lightningHEADERS install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
pdf-am ps ps-am tags uninstall uninstall-am \
uninstall-dist_pkgdataDATA uninstall-info-am \
uninstall-nobase_dist_lightningHEADERS \
uninstall-nodist_lightningHEADERS
install-dist_lightningHEADERS install-dist_pkgdataDATA \
install-exec install-exec-am install-info install-info-am \
install-man install-strip installcheck installcheck-am \
installdirs maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
uninstall uninstall-am uninstall-dist_lightningHEADERS \
uninstall-dist_pkgdataDATA uninstall-info-am
@lightning_frag@
@LIGHTNING_MAIN_FALSE@all-am:
@LIGHTNING_MAIN_FALSE@ @set frob $(LIGHTNING_TARGET_FILES); shift; \
@LIGHTNING_MAIN_FALSE@ for i; \
@LIGHTNING_MAIN_FALSE@ do \
@LIGHTNING_MAIN_FALSE@ echo $(LN_S) $(srcdir)/$$i `basename $$i`; \
@LIGHTNING_MAIN_FALSE@ $(LN_S) $(srcdir)/$$i `basename $$i`; \
@LIGHTNING_MAIN_FALSE@ done
@LIGHTNING_MAIN_FALSE@dist-hook:
@LIGHTNING_MAIN_FALSE@ cp -p $(srcdir)/lightning.h $(distdir)
# Tell versions [3.59,3.63) of GNU make to not export all variables.

View file

@ -480,8 +480,12 @@ typedef union jit_code {
/* ALU */
#define jit_addi_l(d, rs, is) jit_addi_i((d), (rs), (is))
#define jit_addr_l(d, s1, s2) jit_addr_i((d), (s1), (s2))
#ifndef jit_addci_l
#define jit_addci_l(d, rs, is) jit_addci_i((d), (rs), (is))
#endif
#ifndef jit_addcr_l
#define jit_addcr_l(d, s1, s2) jit_addcr_i((d), (s1), (s2))
#endif
#define jit_addxi_l(d, rs, is) jit_addxi_i((d), (rs), (is))
#define jit_addxr_l(d, s1, s2) jit_addxr_i((d), (s1), (s2))
#define jit_andi_l(d, rs, is) jit_andi_i((d), (rs), (is))
@ -496,6 +500,9 @@ typedef union jit_code {
#define jit_modr_l(d, s1, s2) jit_modr_i((d), (s1), (s2))
#define jit_muli_l(d, rs, is) jit_muli_i((d), (rs), (is))
#define jit_mulr_l(d, s1, s2) jit_mulr_i((d), (s1), (s2))
#ifndef jit_negr_l
#define jit_negr_l(d, s1) jit_negr_i((d), (s1))
#endif
#define jit_ori_l(d, rs, is) jit_ori_i((d), (rs), (is))
#define jit_orr_l(d, s1, s2) jit_orr_i((d), (s1), (s2))
#define jit_rshi_l(d, rs, is) jit_rshi_i((d), (rs), (is))

View file

@ -0,0 +1 @@
LIGHTNING_TARGET_FILES += i386/asm-i386.h i386/core-i386.h

61
lightning/i386/asm-32.h Normal file
View file

@ -0,0 +1,61 @@
/******************************** -*- C -*- ****************************
*
* Run-time assembler for the i386
*
***********************************************************************/
/***********************************************************************
*
* Copyright 2006 Free Software Foundation, Inc.
*
* This file is part of GNU lightning.
*
* GNU lightning is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation; either version 2.1, or (at your option)
* any later version.
*
* GNU lightning is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with GNU lightning; see the file COPYING.LESSER; if not, write to the
* Free Software Foundation, 59 Temple Place - Suite 330, Boston,
* MA 02111-1307, USA.
*
***********************************************************************/
#ifndef __lightning_asm_h
#define __lightning_asm_h
/* OPCODE + i = immediate operand
* + r = register operand
* + m = memory operand (disp,base,index,scale)
* + sr/sm = a star preceding a register or memory
*/
#include "asm-i386.h"
#ifndef LIGHTNING_DEBUG
#define _r_D( R, D ) (_Mrm(_b00,_rN(R),_b101 ) ,_jit_I((long)(D)))
#define CALLm(D,B,I,S) ((_r0P(B) && _r0P(I)) ? _O_D32 (0xe8 ,(long)(D) ) : \
JITFAIL("illegal mode in direct jump"))
#define JCCim(CC,D,B,I,S) ((_r0P(B) && _r0P(I)) ? _OO_D32 (0x0f80|(CC) ,(long)(D) ) : \
JITFAIL("illegal mode in conditional jump"))
#define JMPm(D,B,I,S) ((_r0P(B) && _r0P(I)) ? _O_D32 (0xe9 ,(long)(D) ) : \
JITFAIL("illegal mode in direct jump"))
#endif
#endif /* __lightning_asm_h */

134
lightning/i386/asm-64.h Normal file
View file

@ -0,0 +1,134 @@
/******************************** -*- C -*- ****************************
*
* Run-time assembler for the x86-64
*
***********************************************************************/
/***********************************************************************
*
* Copyright 2006 Matthew Flatt
*
* This file is part of GNU lightning.
*
* GNU lightning is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation; either version 2.1, or (at your option)
* any later version.
*
* GNU lightning is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with GNU lightning; see the file COPYING.LESSER; if not, write to the
* Free Software Foundation, 59 Temple Place - Suite 330, Boston,
* MA 02111-1307, USA.
*
***********************************************************************/
#ifndef __lightning_asm_h
#define __lightning_asm_h
#include "asm-i386.h"
/* OPCODE + i = immediate operand
* + r = register operand
* + m = memory operand (disp,base,index,scale)
* + sr/sm = a star preceding a register or memory
*/
#ifndef LIGHTNING_DEBUG
#define _R12 0x4C
#define _R13 0x4D
#define JIT_CALLTMPSTART 0x48
#define JIT_REXTMP 0x4B
#define _qMrm(Md,R,M) _jit_B((_M(Md)<<6)|(_r((R & 0x7))<<3)|_m((M & 0x7)))
#define _r_D( R, D ) (_Mrm(_b00,_rN(R),_b100 ),_SIB(0,_b100,_b101) ,_jit_I((long)(D)))
#define _r_Q( R, D ) (_qMrm(_b00,_rN(R),_b100 ),_SIB(0,_b100,_b101) ,_jit_I((long)(D)))
#define _REX(R,X,B) ( _jit_B(0x48|((R&0x8)>>1)|((X&0x8)>>2)|((B&0x8)>>3)) )
#define _qO( OP, R,X,B ) ( _REX(R,X,B), _jit_B( OP ) )
#define _qOr( OP,R ) ( _REX(0,0,R), _jit_B( (OP)|_r(R&0x7)) )
#define _qOs( OP, B, R, M ) ( _REX(0, M, R), _Os(OP, B) )
#define ADDQrr(RS, RD) _qO_Mrm (0x01 ,_b11,_r8(RS),_r8(RD) )
#define ADDQir(IM, RD) _qOs_Mrm_sL (0x81 ,_b11,_b000 ,_r8(RD) ,IM )
#define ANDQrr(RS, RD) _qO_Mrm (0x21 ,_b11,_r8(RS),_r8(RD) )
#define ANDQir(IM, RD) _qOs_Mrm_sL (0x81 ,_b11,_b100 ,_r8(RD) ,IM )
#define CALLm(D,B,I,S) (MOVQir((D), JIT_REXTMP), CALLQsr(JIT_REXTMP))
#define CALLsr(R) _O_Mrm (0xff ,_b11,_b010,_r4(R) )
#define CALLQsr(R) _qO_Mrm (0xff ,_b11,_b010,_r8(R))
#define CMPQrr(RS, RD) _qO_Mrm (0x39 ,_b11,_r8(RS),_r8(RD) )
#define CMPQir(IM, RD) _qO_Mrm_L (0x81 ,_b11,_b111 ,_r8(RD) ,IM )
#define JCCim(CC,D,B,I,S) (!_jitl.long_jumps \
? _OO_D32(0x0f80|(CC), (long)(D) ) \
: (_O_D8(0x71^(CC), _jit_UL(_jit.x.pc) + 13), JMPm((long)D, 0, 0, 0)))
#define JMPm(D,B,I,S) (!_jitl.long_jumps \
? _O_D32(0xe9, (long)(D)) \
: (MOVQir((D), JIT_REXTMP), _qO_Mrm(0xff,_b11,_b100,_r8(JIT_REXTMP))))
#define LEAQmr(MD, MB, MI, MS, RD) _qO_r_X (0x8d ,_r8(RD) ,MD,MB,MI,MS )
#define MOVQmr(MD, MB, MI, MS, RD) _qO_r_X (0x8b ,_r8(RD) ,MD,MB,MI,MS )
#define MOVQrm(RS, MD, MB, MI, MS) _qO_r_X (0x89 ,_r8(RS) ,MD,MB,MI,MS )
#define MOVQrQm(RS, MD, MB, MI, MS) _qO_r_XB (0x89 ,_r8(RS) ,MD,MB,MI,MS )
#define MOVQir(IM, R) _qOr_Q (0xb8,_r8(R) ,IM )
#define MOVQrr(RS, RD) _qO_Mrm (0x89 ,_b11,_r8(RS),_r8(RD) )
#define NEGQr(RD) _qO_Mrm (0xf7 ,_b11,_b011 ,_r8(RD) )
#define ORQrr(RS, RD) _qO_Mrm (0x09 ,_b11,_r8(RS),_r8(RD) )
#define ORQir(IM, RD) _qOs_Mrm_sL (0x81 ,_b11,_b001 ,_r8(RD) ,IM )
#define POPQr(RD) _qOr (0x58,_r8(RD) )
#define PUSHQr(R) _qOr (0x50,_r8(R) )
#define SALQir SHLQir
#define SALQim SHLQim
#define SALQrr SHLQrr
#define SALQrm SHLQrm
#define SARQir(IM,RD) (((IM)==1) ? _qO_Mrm (0xd1 ,_b11,_b111,_r8(RD) ) : \
_qO_Mrm_B (0xc1 ,_b11,_b111,_r4(RD) ,_u8(IM) ) )
#define SARQrr(RS,RD) (((RS)==_CL) ? _qO_Mrm (0xd3 ,_b11,_b111,_r8(RD) ) : \
JITFAIL ("source register must be CL" ) )
#define SHLQir(IM,RD) (((IM)==1) ? _qO_Mrm (0xd1 ,_b11,_b100,_r8(RD) ) : \
_qO_Mrm_B (0xc1 ,_b11,_b100,_r8(RD) ,_u8(IM) ) )
#define SHLQrr(RS,RD) (((RS)==_CL) ? _qO_Mrm (0xd3 ,_b11,_b100,_r8(RD) ) : \
JITFAIL ("source register must be CL" ) )
#define SHRQir(IM,RD) (((IM)==1) ? _qO_Mrm (0xd1 ,_b11,_b101,_r8(RD) ) : \
_qO_Mrm_B (0xc1 ,_b11,_b101,_r8(RD) ,_u8(IM) ) )
#define SHRQrr(RS,RD) (((RS)==_CL) ? _qO_Mrm (0xd3 ,_b11,_b101,_r8(RD) ) : \
JITFAIL ("source register must be CL" ) )
#define SUBQrr(RS, RD) _qO_Mrm (0x29 ,_b11,_r8(RS),_r8(RD) )
#define SUBQir(IM, RD) _qOs_Mrm_sL (0x81 ,_b11,_b101 ,_r8(RD) ,IM )
#define TESTQrr(RS, RD) _qO_Mrm (0x85 ,_b11,_r8(RS),_r8(RD) )
#define TESTQir(IM, RD) _qO_Mrm_L (0xf7 ,_b11,_b000 ,_r8(RD) ,IM )
#define XORQrr(RS, RD) _qO_Mrm (0x31 ,_b11,_r8(RS),_r8(RD) )
#define XORQir(IM, RD) _qOs_Mrm_sL (0x81 ,_b11,_b110 ,_r8(RD) ,IM )
#endif
#endif /* __lightning_asm_h */

View file

@ -31,8 +31,8 @@
#ifndef __lightning_asm_h
#define __lightning_asm_h
#ifndef __lightning_asm_i386_h
#define __lightning_asm_i386_h
/* OPCODE + i = immediate operand
* + r = register operand
@ -147,7 +147,6 @@ typedef _uc jit_insn;
/* memory subformats - urgh! */
#define _r_D( R, D ) (_Mrm(_b00,_rN(R),_b101 ) ,_jit_L((long)(D)))
#define _r_0B( R, B ) (_Mrm(_b00,_rN(R),_r4(B)) )
#define _r_0BIS(R, B,I,S) (_Mrm(_b00,_rN(R),_b100 ),_SIB(_SCL(S),_r4(I),_r4(B)) )
#define _r_1B( R, D,B ) (_Mrm(_b01,_rN(R),_r4(B)) ,_jit_B((long)(D)))
@ -334,9 +333,6 @@ typedef _uc jit_insn;
#define BTSLrm(RS,MD,MB,MI,MS) _OO_r_X (0x0fab ,_r4(RS) ,MD,MB,MI,MS )
#define CALLm(D,B,I,S) ((_r0P(B) && _r0P(I)) ? _O_D32 (0xe8 ,(int)(D) ) : \
JITFAIL("illegal mode in direct jump"))
#define CALLsr(R) _O_Mrm (0xff ,_b11,_b010,_r4(R) )
#define CALLsm(D,B,I,S) _O_r_X (0xff ,_b010 ,(int)(D),B,I,S )
@ -482,9 +478,6 @@ typedef _uc jit_insn;
#define JNLESm(D,B,I,S) JCCSim(0xf,D,B,I,S)
#define JGSm(D,B,I,S) JCCSim(0xf,D,B,I,S)
#define JCCim(CC,D,B,I,S) ((_r0P(B) && _r0P(I)) ? _OO_D32 (0x0f80|(CC) ,(int)(D) ) : \
JITFAIL("illegal mode in conditional jump"))
#define JOm(D,B,I,S) JCCim(0x0,D,B,I,S)
#define JNOm(D,B,I,S) JCCim(0x1,D,B,I,S)
#define JCm(D,B,I,S) JCCim(0x2,D,B,I,S)
@ -520,9 +513,6 @@ typedef _uc jit_insn;
#define JMPSm(D,B,I,S) ((_r0P(B) && _r0P(I)) ? _O_D8 (0xeb ,(int)(D) ) : \
JITFAIL("illegal mode in short jump"))
#define JMPm(D,B,I,S) ((_r0P(B) && _r0P(I)) ? _O_D32 (0xe9 ,(int)(D) ) : \
JITFAIL("illegal mode in direct jump"))
#define JMPsr(R) _O_Mrm (0xff ,_b11,_b100,_r4(R) )
#define JMPsm(D,B,I,S) _O_r_X (0xff ,_b100 ,(int)(D),B,I,S )
@ -1062,5 +1052,5 @@ typedef _uc jit_insn;
/* Intel Corporation 1997. */
#endif
#endif /* __lightning_asm_h */
#endif /* __lightning_asm_i386_h */

80
lightning/i386/core-32.h Normal file
View file

@ -0,0 +1,80 @@
/******************************** -*- C -*- ****************************
*
* Platform-independent layer (i386 version)
*
***********************************************************************/
/***********************************************************************
*
* Copyright 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
* Written by Paolo Bonzini.
*
* This file is part of GNU lightning.
*
* GNU lightning is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation; either version 2.1, or (at your option)
* any later version.
*
* GNU lightning is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with GNU lightning; see the file COPYING.LESSER; if not, write to the
* Free Software Foundation, 59 Temple Place - Suite 330, Boston,
* MA 02111-1307, USA.
*
***********************************************************************/
#ifndef __lightning_core_h
#define __lightning_core_h
#include "core-i386.h"
#define JIT_CAN_16 1
struct jit_local_state {
int framesize;
int argssize;
};
#define jit_base_prolog() (PUSHLr(_EBP), MOVLrr(_ESP, _EBP), PUSHLr(_EBX), PUSHLr(_ESI), PUSHLr(_EDI))
#define jit_prolog(n) (_jitl.framesize = 8, jit_base_prolog())
/* The += allows for stack pollution */
#ifdef __APPLE__
/* Stack must stay 16-byte aligned: */
# define jit_prepare_i(ni) (((ni & 0x3) \
? SUBLir(4 * ((((ni) + 3) & ~(0x3)) - (ni)), JIT_SP) \
: (void)0), \
_jitl.argssize += (((ni) + 3) & ~(0x3)))
#else
# define jit_prepare_i(ni) (_jitl.argssize += (ni))
#endif
#define jit_pusharg_i(rs) PUSHLr(rs)
#define jit_finish(sub) ((void)jit_calli((sub)), ADDLir(sizeof(long) * _jitl.argssize, JIT_SP), _jitl.argssize = 0)
#define jit_finishr(reg) (jit_callr((reg)), ADDLir(sizeof(long) * _jitl.argssize, JIT_SP), _jitl.argssize = 0)
#define jit_arg_c() ((_jitl.framesize += sizeof(int)) - sizeof(int))
#define jit_arg_uc() ((_jitl.framesize += sizeof(int)) - sizeof(int))
#define jit_arg_s() ((_jitl.framesize += sizeof(int)) - sizeof(int))
#define jit_arg_us() ((_jitl.framesize += sizeof(int)) - sizeof(int))
#define jit_arg_i() ((_jitl.framesize += sizeof(int)) - sizeof(int))
#define jit_arg_ui() ((_jitl.framesize += sizeof(int)) - sizeof(int))
#define jit_arg_l() ((_jitl.framesize += sizeof(long)) - sizeof(long))
#define jit_arg_ul() ((_jitl.framesize += sizeof(long)) - sizeof(long))
#define jit_arg_p() ((_jitl.framesize += sizeof(long)) - sizeof(long))
#define jit_patch_long_at(jump_pc,v) (*_PSL((jump_pc) - sizeof(long)) = _jit_SL((jit_insn *)(v) - (jump_pc)))
#define jit_patch_at(jump_pc,v) jit_patch_long_at(jump_pc, v)
#define jit_ret() (POPLr(_EDI), POPLr(_ESI), POPLr(_EBX), POPLr(_EBP), RET_())
#endif /* __lightning_core_h */

202
lightning/i386/core-64.h Normal file
View file

@ -0,0 +1,202 @@
/******************************** -*- C -*- ****************************
*
* Platform-independent layer (i386 version)
*
***********************************************************************/
/***********************************************************************
*
* Copyright 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
* Written by Paolo Bonzini.
*
* This file is part of GNU lightning.
*
* GNU lightning is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation; either version 2.1, or (at your option)
* any later version.
*
* GNU lightning is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with GNU lightning; see the file COPYING.LESSER; if not, write to the
* Free Software Foundation, 59 Temple Place - Suite 330, Boston,
* MA 02111-1307, USA.
*
***********************************************************************/
#ifndef __lightning_core_h
#define __lightning_core_h
#include "core-i386.h"
struct jit_local_state {
int long_jumps;
int nextarg_geti;
int argssize;
};
/* 3-parameter operation */
#define jit_qopr_(d, s1, s2, op1d, op2d) \
( (s2 == d) ? op1d : \
( ((s1 == d) ? (void)0 : (void)MOVQrr(s1, d)), op2d ) \
)
/* 3-parameter operation, with immediate */
#define jit_qop_(d, s1, op2d) \
#define jit_bra_qr(s1, s2, op) (CMPQrr(s2, s1), op, _jit.x.pc)
#define _jit_bra_l(rs, is, op) (CMPQir(is, rs), op, _jit.x.pc)
#define jit_bra_l(rs, is, op) (_s32P((long)(is)) \
? _jit_bra_l(rs, is, op) \
: (jit_movi_l(JIT_REXTMP, is), jit_bra_qr(JIT_REXTMP, rs, op)))
/* When CMP with 0 can be replaced with TEST */
#define jit_bra_l0(rs, is, op, op0) \
( (is) == 0 ? (TESTQrr(rs, rs), op0, _jit.x.pc) : jit_bra_l(rs, is, op))
/* Used to implement ldc, stc, ... */
#define JIT_CAN_16 0
#define jit_reduceQ(op, is, rs) \
(_u8P(is) && jit_check8(rs) ? jit_reduce_(op##Bir(is, jit_reg8(rs))) : \
jit_reduce_(op##Qir(is, rs)) )
#define jit_addi_l(d, rs, is) jit_opi_((d), (rs), ADDQir((is), (d)), LEAQmr((is), (rs), 0, 0, (d)) )
#define jit_addr_l(d, s1, s2) jit_opo_((d), (s1), (s2), ADDQrr((s2), (d)), ADDQrr((s1), (d)), LEAQmr(0, (s1), (s2), 1, (d)) )
#define jit_andi_l(d, rs, is) jit_qop_ ((d), (rs), ANDQir((is), (d)) )
#define jit_andr_l(d, s1, s2) jit_qopr_((d), (s1), (s2), ANDQrr((s1), (d)), ANDQrr((s2), (d)) )
#define jit_orr_l(d, s1, s2) jit_qopr_((d), (s1), (s2), ORQrr((s1), (d)), ORQrr((s2), (d)) )
#define jit_subr_l(d, s1, s2) jit_qopr_((d), (s1), (s2), (SUBQrr((s1), (d)), NEGQr(d)), SUBQrr((s2), (d)) )
#define jit_xorr_l(d, s1, s2) jit_qopr_((d), (s1), (s2), XORQrr((s1), (d)), XORQrr((s2), (d)) )
/* These can sometimes use byte or word versions! */
#define jit_ori_i(d, rs, is) jit_op_ ((d), (rs), jit_reduce(OR, (is), (d)) )
#define jit_xori_i(d, rs, is) jit_op_ ((d), (rs), jit_reduce(XOR, (is), (d)) )
#define jit_ori_l(d, rs, is) jit_qop_ ((d), (rs), jit_reduceQ(OR, (is), (d)) )
#define jit_xori_l(d, rs, is) jit_qop_ ((d), (rs), jit_reduceQ(XOR, (is), (d)) )
#define jit_lshi_l(d, rs, is) ((is) <= 3 ? LEAQmr(0, 0, (rs), 1 << (is), (d)) : jit_qop_ ((d), (rs), SHLQir((is), (d)) ))
#define jit_rshi_l(d, rs, is) jit_qop_ ((d), (rs), SARQir((is), (d)) )
#define jit_rshi_ul(d, rs, is) jit_qop_ ((d), (rs), SHRQir((is), (d)) )
#define jit_lshr_l(d, r1, r2) jit_replace((r1), (r2), _ECX, jit_qop_ ((d), (r1), SHLQrr(_CL, (d)) ))
#define jit_rshr_l(d, r1, r2) jit_replace((r1), (r2), _ECX, jit_qop_ ((d), (r1), SARQrr(_CL, (d)) ))
#define jit_rshr_ul(d, r1, r2) jit_replace((r1), (r2), _ECX, jit_qop_ ((d), (r1), SHRQrr(_CL, (d)) ))
/* Stack */
#define jit_pushr_l(rs) PUSHQr(rs)
#define jit_popr_l(rs) POPQr(rs)
#define jit_base_prolog() (PUSHQr(_EBP), MOVQrr(_ESP, _EBP), PUSHQr(_EBX), PUSHQr(_R12), PUSHQr(_R13))
#define jit_prolog(n) (_jitl.nextarg_geti = 0, jit_base_prolog())
/* Stack isn't used for arguments: */
#define jit_prepare_i(ni) (_jitl.argssize = 0)
#define jit_pusharg_i(rs) (_jitl.argssize++, MOVQrr(rs, JIT_CALLTMPSTART + _jitl.argssize - 1))
#define jit_finish(sub) (jit_shift_args(), (void)jit_calli((sub)), jit_restore_locals())
#define jit_reg_is_arg(reg) ((reg == _EDI) || (reg ==_ESI) || (reg == _EDX))
#define jit_finishr(reg) ((jit_reg_is_arg((reg)) ? MOVQrr(reg, JIT_REXTMP) : (void)0), \
jit_shift_args(), \
jit_reg_is_arg((reg)) ? CALQsr((JIT_REXTMP)) : jit_callr((reg)), \
jit_restore_locals())
/* R12 and R13 are callee-save, instead of EDI and ESI. Can be improved. */
#define jit_shift_args() \
(MOVQrr(_ESI, _R12), MOVQrr(_EDI, _R13), \
(_jitl.argssize-- \
? (MOVQrr(JIT_CALLTMPSTART + _jitl.argssize, jit_arg_reg_order[0]), \
(_jitl.argssize-- \
? (MOVQrr(JIT_CALLTMPSTART + _jitl.argssize, jit_arg_reg_order[1]), \
(_jitl.argssize-- \
? MOVQrr(JIT_CALLTMPSTART, jit_arg_reg_order[2]) \
: (void)0)) \
: (void)0)) \
: (void)0))
#define jit_restore_locals() \
(MOVQrr(_R12, _ESI), MOVQrr(_R13, _EDI))
#define jit_retval_l(rd) ((void)jit_movr_l ((rd), _EAX))
#define jit_arg_i() (_jitl.nextarg_geti++)
#define jit_arg_l() (_jitl.nextarg_geti++)
#define jit_arg_p() (_jitl.nextarg_geti++)
#define jit_arg_reg(p) (jit_arg_reg_order[p])
static int jit_arg_reg_order[] = { _EDI, _ESI, _EDX, _ECX };
#define jit_negr_l(d, rs) jit_opi_((d), (rs), NEGQr(d), (XORQrr((d), (d)), SUBQrr((rs), (d))) )
#define jit_movr_l(d, rs) ((void)((rs) == (d) ? 0 : MOVQrr((rs), (d))))
#define jit_movi_l(d, is) ((is) \
? (_u32P((long)(is)) \
? MOVLir((is), (d)) \
: MOVQir((is), (d))) \
: XORLrr ((d), (d)) )
#define jit_bmsr_l(label, s1, s2) (TESTQrr((s1), (s2)), JNZm(label,0,0,0), _jit.x.pc)
#define jit_bmcr_l(label, s1, s2) (TESTQrr((s1), (s2)), JZm(label,0,0,0), _jit.x.pc)
#define jit_boaddr_l(label, s1, s2) (ADDQrr((s2), (s1)), JOm(label,0,0,0), _jit.x.pc)
#define jit_bosubr_l(label, s1, s2) (SUBQrr((s2), (s1)), JOm(label,0,0,0), _jit.x.pc)
#define jit_boaddr_ul(label, s1, s2) (ADDQrr((s2), (s1)), JCm(label,0,0,0), _jit.x.pc)
#define jit_bosubr_ul(label, s1, s2) (SUBQrr((s2), (s1)), JCm(label,0,0,0), _jit.x.pc)
#define jit_boaddi_l(label, rs, is) (ADDQir((is), (rs)), JOm(label,0,0,0), _jit.x.pc)
#define jit_bosubi_l(label, rs, is) (SUBQir((is), (rs)), JOm(label,0,0,0), _jit.x.pc)
#define jit_boaddi_ul(label, rs, is) (ADDQir((is), (rs)), JCm(label,0,0,0), _jit.x.pc)
#define jit_bosubi_ul(label, rs, is) (SUBQir((is), (rs)), JCm(label,0,0,0), _jit.x.pc)
#define jit_patch_long_at(jump_pc,v) (*_PSL((jump_pc) - sizeof(long)) = _jit_SL((jit_insn *)(v)))
#define jit_patch_short_at(jump_pc,v) (*_PSI((jump_pc) - sizeof(int)) = _jit_SI((jit_insn *)(v) - (jump_pc)))
#define jit_patch_at(jump_pc,v) (_jitl.long_jumps ? jit_patch_long_at((jump_pc)-3, v) : jit_patch_short_at(jump_pc, v))
#define jit_ret() (POPQr(_R13), POPQr(_R12), POPQr(_EBX), POPQr(_EBP), RET_())
#define _jit_ldi_l(d, is) MOVQmr((is), 0, 0, 0, (d))
#define jit_ldr_l(d, rs) MOVQmr(0, (rs), 0, 0, (d))
#define jit_ldxr_l(d, s1, s2) MOVQmr(0, (s1), (s2), 1, (d))
#define jit_ldxi_l(d, rs, is) MOVQmr((is), (rs), 0, 0, (d))
#define _jit_sti_l(id, rs) MOVQrm((rs), (id), 0, 0, 0)
#define jit_str_l(rd, rs) MOVQrm((rs), 0, (rd), 0, 0)
#define jit_stxr_l(d1, d2, rs) MOVQrm((rs), 0, (d1), (d2), 1)
#define jit_stxi_l(id, rd, rs) MOVQrm((rs), (id), (rd), 0, 0)
#define jit_ldi_l(d, is) (_u32P((long)(is)) ? _jit_ldi_l(d, is) : (jit_movi_l(d, is), jit_ldr_l(d, d)))
#define jit_sti_l(id, rs) (_u32P((long)(id)) ? _jit_sti_l(id, rs) : (jit_movi_l(JIT_REXTMP, id), MOVQrQm(rs, 0, JIT_REXTMP, 0, 0)))
#define jit_blti_l(label, rs, is) jit_bra_l0((rs), (is), JLm(label, 0,0,0), JSm(label, 0,0,0) )
#define jit_blei_l(label, rs, is) jit_bra_l ((rs), (is), JLEm(label,0,0,0) )
#define jit_bgti_l(label, rs, is) jit_bra_l ((rs), (is), JGm(label, 0,0,0) )
#define jit_bgei_l(label, rs, is) jit_bra_l0((rs), (is), JGEm(label,0,0,0), JNSm(label,0,0,0) )
#define jit_beqi_l(label, rs, is) jit_bra_l0((rs), (is), JEm(label, 0,0,0), JEm(label, 0,0,0) )
#define jit_bnei_l(label, rs, is) jit_bra_l0((rs), (is), JNEm(label,0,0,0), JNEm(label,0,0,0) )
#define jit_blti_ul(label, rs, is) jit_bra_l ((rs), (is), JBm(label, 0,0,0) )
#define jit_blei_ul(label, rs, is) jit_bra_l0((rs), (is), JBEm(label,0,0,0), JEm(label, 0,0,0) )
#define jit_bgti_ul(label, rs, is) jit_bra_l0((rs), (is), JAm(label, 0,0,0), JNEm(label,0,0,0) )
#define jit_bgei_ul(label, rs, is) jit_bra_l ((rs), (is), JAEm(label,0,0,0) )
#define jit_bmsi_l(label, rs, is) jit_bmsi_i(label, rs, is)
#define jit_bmci_l(label, rs, is) jit_bmci_i(label, rs, is)
#define jit_pushr_l(rs) jit_pushr_i(rs)
#define jit_popr_l(rs) jit_popr_i(rs)
#define jit_pusharg_l(rs) jit_pusharg_i(rs)
#define jit_retval_l(rd) ((void)jit_movr_l ((rd), _EAX))
#define jit_bltr_l(label, s1, s2) jit_bra_qr((s1), (s2), JLm(label, 0,0,0) )
#define jit_bler_l(label, s1, s2) jit_bra_qr((s1), (s2), JLEm(label,0,0,0) )
#define jit_bgtr_l(label, s1, s2) jit_bra_qr((s1), (s2), JGm(label, 0,0,0) )
#define jit_bger_l(label, s1, s2) jit_bra_qr((s1), (s2), JGEm(label,0,0,0) )
#define jit_beqr_l(label, s1, s2) jit_bra_qr((s1), (s2), JEm(label, 0,0,0) )
#define jit_bner_l(label, s1, s2) jit_bra_qr((s1), (s2), JNEm(label,0,0,0) )
#define jit_bltr_ul(label, s1, s2) jit_bra_qr((s1), (s2), JBm(label, 0,0,0) )
#define jit_bler_ul(label, s1, s2) jit_bra_qr((s1), (s2), JBEm(label,0,0,0) )
#define jit_bgtr_ul(label, s1, s2) jit_bra_qr((s1), (s2), JAm(label, 0,0,0) )
#define jit_bger_ul(label, s1, s2) jit_bra_qr((s1), (s2), JAEm(label,0,0,0) )
#endif /* __lightning_core_h */

View file

@ -24,15 +24,15 @@
*
* You should have received a copy of the GNU Lesser General Public License
* along with GNU lightning; see the file COPYING.LESSER; if not, write to the
* Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
* Free Software Foundation, 59 Temple Place - Suite 330, Boston,
* MA 02111-1307, USA.
*
***********************************************************************/
#ifndef __lightning_core_h
#define __lightning_core_h
#ifndef __lightning_core_i386_h
#define __lightning_core_i386_h
#define JIT_FP _EBP
#define JIT_SP _ESP
@ -43,10 +43,6 @@
#define JIT_R(i) (_EAX + (i))
#define JIT_V(i) ((i) == 0 ? _EBX : _ESI + (i) - 1)
struct jit_local_state {
int framesize;
int argssize;
};
/* 3-parameter operation */
#define jit_opr_(d, s1, s2, op1d, op2d) \
@ -56,7 +52,7 @@ struct jit_local_state {
/* 3-parameter operation, with immediate */
#define jit_op_(d, s1, op2d) \
((s1 == d) ? op2d : (MOVLrr(s1, d), op2d)) \
((s1 == d) ? op2d : (MOVLrr(s1, d), op2d))
/* 3-parameter operation, optimizable */
#define jit_opo_(d, s1, s2, op1d, op2d, op12d) \
@ -110,10 +106,15 @@ struct jit_local_state {
: jit_replace(_EBX, rs, _EAX, MOVBrm(_AL, dd, db, di, ds)))
/* Reduce arguments of XOR/OR/TEST */
#ifdef JIT_X86_64
# define JIT_CAN_16 0
#else
# define JIT_CAN_16 1
#endif
#define jit_reduce_(op) op
#define jit_reduce(op, is, rs) \
(_u8P(is) && jit_check8(rs) ? jit_reduce_(op##Bir(is, jit_reg8(rs))) : \
(_u16P(is) ? jit_reduce_(op##Wir(is, jit_reg16(rs))) : \
(_u16P(is) && JIT_CAN_16 ? jit_reduce_(op##Wir(is, jit_reg16(rs))) : \
jit_reduce_(op##Lir(is, rs)) ))
/* Helper macros for MUL/DIV/IDIV */
@ -207,6 +208,7 @@ struct jit_local_state {
#define jit_subxi_i(d, rs, is) jit_op_ ((d), (rs), SBBLir((is), (d)) )
#define jit_xorr_i(d, s1, s2) jit_opr_((d), (s1), (s2), XORLrr((s1), (d)), XORLrr((s2), (d)) )
/* These can sometimes use byte or word versions! */
#define jit_ori_i(d, rs, is) jit_op_ ((d), (rs), jit_reduce(OR, (is), (d)) )
#define jit_xori_i(d, rs, is) jit_op_ ((d), (rs), jit_reduce(XOR, (is), (d)) )
@ -260,39 +262,21 @@ struct jit_local_state {
/* Stack */
#define jit_pushr_i(rs) PUSHLr(rs)
#define jit_popr_i(rs) POPLr(rs)
#define jit_prolog(n) (_jitl.framesize = 8, PUSHLr(_EBP), MOVLrr(_ESP, _EBP), PUSHLr(_EBX), PUSHLr(_ESI), PUSHLr(_EDI))
/* The += allows for stack pollution */
#define jit_prepare_i(ni) (_jitl.argssize += (ni))
#define jit_prepare_f(nf) (_jitl.argssize += (nf))
#define jit_prepare_d(nd) (_jitl.argssize += 2 * (nd))
#define jit_pusharg_i(rs) PUSHLr(rs)
#define jit_finish(sub) (jit_calli((sub)), ADDLir(4 * _jitl.argssize, JIT_SP), _jitl.argssize = 0)
#define jit_finishr(reg) (jit_callr((reg)), ADDLir(4 * _jitl.argssize, JIT_SP), _jitl.argssize = 0)
#define jit_retval_i(rd) jit_movr_i ((rd), _EAX)
#define jit_arg_c() ((_jitl.framesize += sizeof(int)) - sizeof(int))
#define jit_arg_uc() ((_jitl.framesize += sizeof(int)) - sizeof(int))
#define jit_arg_s() ((_jitl.framesize += sizeof(int)) - sizeof(int))
#define jit_arg_us() ((_jitl.framesize += sizeof(int)) - sizeof(int))
#define jit_arg_i() ((_jitl.framesize += sizeof(int)) - sizeof(int))
#define jit_arg_ui() ((_jitl.framesize += sizeof(int)) - sizeof(int))
#define jit_arg_l() ((_jitl.framesize += sizeof(long)) - sizeof(long))
#define jit_arg_ul() ((_jitl.framesize += sizeof(long)) - sizeof(long))
#define jit_arg_p() ((_jitl.framesize += sizeof(long)) - sizeof(long))
#define jit_retval_i(rd) ((void)jit_movr_i ((rd), _EAX))
#define jit_arg_f() ((_jitl.framesize += sizeof(float)) - sizeof(float))
#define jit_arg_d() ((_jitl.framesize += sizeof(double)) - sizeof(double))
/* Unary */
#define jit_negr_i(d, rs) jit_opi_((d), (rs), NEGLr(d), (XORLrr((d), (d)), SUBLrr((rs), (d))) )
#define jit_negr_l(d, rs) jit_opi_((d), (rs), NEGLr(d), (XORLrr((d), (d)), SUBLrr((rs), (d))) )
#define jit_movr_i(d, rs) ((rs) == (d) ? 0 : MOVLrr((rs), (d)))
#define jit_movr_i(d, rs) ((void)((rs) == (d) ? 0 : MOVLrr((rs), (d))))
#define jit_movi_i(d, is) ((is) ? MOVLir((is), (d)) : XORLrr ((d), (d)) )
#define jit_movi_p(d, is) (MOVLir((is), (d)), _jit.x.pc)
#define jit_patch_movi(pa,pv) (*_PSL((pa) - 4) = _jit_SL((pv)))
#define jit_movi_p(d, is) (jit_movi_l(d, ((long)(is))), _jit.x.pc)
#define jit_patch_movi(pa,pv) (*_PSL((pa) - sizeof(long)) = _jit_SL((pv)))
#define jit_ntoh_ui(d, rs) jit_op_((d), (rs), BSWAPLr(d))
#define jit_ntoh_us(d, rs) jit_op_((d), (rs), RORWir(8, d))
@ -360,8 +344,6 @@ struct jit_local_state {
#define jit_calli(label) (CALLm( ((unsigned long) (label)), 0, 0, 0), _jit.x.pc)
#define jit_callr(reg) (CALLsr(reg))
#define jit_jmpr(reg) JMPsr(reg)
#define jit_patch_at(jump_pc,v) (*_PSL((jump_pc) - 4) = _jit_SL((v) - (jump_pc)))
#define jit_ret() (POPLr(_EDI), POPLr(_ESI), POPLr(_EBX), POPLr(_EBP), RET_())
/* Memory */
#define jit_ldi_c(d, is) MOVSBLmr((is), 0, 0, 0, (d))
@ -404,10 +386,12 @@ struct jit_local_state {
#define jit_stxr_i(d1, d2, rs) MOVLrm((rs), 0, (d1), (d2), 1)
#define jit_stxi_i(id, rd, rs) MOVLrm((rs), (id), (rd), 0, 0)
/* Extra */
#define jit_nop() NOP_()
#define _jit_alignment(pc, n) (((pc ^ _MASK(4)) + 1) & _MASK(n))
#define jit_align(n) NOPi(_jit_alignment(_jit_UL(_jit.x.pc), (n)))
#endif /* __lightning_core_h */
#endif /* __lightning_core_i386_h */

View file

@ -84,8 +84,8 @@
FST ST3
move FPR3 to FPR1
FLD ST1
FST ST4 Stack is rotated, so FPRn becomes STn+1 */
FLD ST3
FST ST2 Stack is rotated, so FPRn becomes STn+1 */
#define jit_movr_d(rd,s1) \
((s1) == (rd) ? 0 \

38
lightning/i386/fp-64.h Normal file
View file

@ -0,0 +1,38 @@
/******************************** -*- C -*- ****************************
*
* Run-time assembler & support macros for the i386 math coprocessor
*
***********************************************************************/
/***********************************************************************
*
* Copyright 2000, 2001, 2002, 2004 Free Software Foundation, Inc.
* Written by Paolo Bonzini.
*
* This file is part of GNU lightning.
*
* GNU lightning is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation; either version 2.1, or (at your option)
* any later version.
*
* GNU lightning is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with GNU lightning; see the file COPYING.LESSER; if not, write to the
* Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*
***********************************************************************/
#ifndef __lightning_fp_h
#define __lightning_fp_h
#warning SSE math not yet supported
#endif /* __lightning_fp_h */

View file

@ -34,6 +34,8 @@
#ifndef __lightning_funcs_h
#define __lightning_funcs_h
#include <string.h>
#if !defined(__GNUC__) && !defined(__GNUG__)
#error Go get GNU C, I do not know how to flush the cache
#error with this compiler.
@ -97,7 +99,7 @@ _jit_epilog(jit_state *jit)
frame_size += 15; /* the stack must be quad-word */
frame_size &= ~15; /* aligned */
#ifdef _CALL_DARWIN
#ifdef __APPLE__
LWZrm(0, frame_size + 8, 1); /* lwz r0, x+8(r1) (ret.addr.) */
#else
LWZrm(0, frame_size + 4, 1); /* lwz r0, x+4(r1) (ret.addr.) */
@ -150,7 +152,7 @@ _jit_prolog(jit_state *jit, int n)
ofs = frame_size - num_saved_regs * 4;
STMWrm(first_saved_reg, ofs, 1); /* stmw rI, ofs(r1) */
#ifdef _CALL_DARWIN
#ifdef __APPLE__
STWrm(0, frame_size + 8, 1); /* stw r0, x+8(r1) */
#else
STWrm(0, frame_size + 4, 1); /* stw r0, x+4(r1) */

View file

@ -33,10 +33,9 @@ VERSION=@VERSION@
# Directory names.
prefix=@prefix@
datarootdir=@datarootdir@
datadir=@datadir@
includedir=@includedir@
pkgdatadir=${datadir}/lightning
pkgincludedir=${includedir}/lightning
aclocaldir=${datadir}/aclocal
BACKENDS="@BACKENDS@"
@ -136,8 +135,13 @@ else
exit 1
fi
if test "$automake" = yes; then
if egrep "^$macro_name" $configure_ac >/dev/null 2>&1; then :
else
echo "Remember to add \`$macro_name' to \`$configure_ac' and reconfigure your package."
fi
if test -z "$automake"; then
else
if egrep "^$macro_name" $configure_ac >/dev/null 2>&1; then :
else
echo "Remember to add \`$macro_name' to \`$configure_ac'."
@ -186,9 +190,11 @@ for i in $file_base_names; do
files="$files lightning:$pkgincludedir/$i-common.h"
done
for j in $BACKENDS; do
dirs="$dirs lightning/$j"
dir=`expr $j : '\([^:]*\)' `
suffix=`expr $j : '.*:\(.*\)' `
dirs="$dirs lightning/$dir"
for i in $file_base_names; do
files="$files lightning/$j:$pkgincludedir/$j/$i.h"
files="$files lightning/$j:$pkgincludedir/$j/$i$suffix.h"
done
done

View file

@ -42,7 +42,8 @@ subdir = opcode
DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__aclocal_m4_deps = $(top_srcdir)/build-aux/lightning.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
@ -136,6 +137,7 @@ build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
cpu = @cpu@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@

View file

@ -34,6 +34,11 @@
#include "config.h"
#include "dis-asm.h"
#define LIGHTNING_I386_32 0
#define LIGHTNING_I386_64 1
#define LIGHTNING_PPC 2
#define LIGHTNING_SPARC 3
void disassemble(stream, from, to)
FILE *stream;
char *from, *to;
@ -50,14 +55,14 @@ void disassemble(stream, from, to)
while (pc < end) {
fprintf_vma(stream, pc);
putc('\t', stream);
#ifdef LIGHTNING_I386
#if LIGHTNING_TARGET == LIGHTNING_I386_32
pc += print_insn_i386(pc, &info);
#endif
#ifdef LIGHTNING_PPC
#elif LIGHTNING_TARGET == LIGHTNING_PPC
pc += print_insn_big_powerpc(pc, &info);
#endif
#ifdef LIGHTNING_SPARC
#elif LIGHTNING_TARGET == LIGHTNING_SPARC
pc += print_insn_sparc(pc, &info);
#else
# error disassembling not yet supported for your architecture
#endif
putc('\n', stream);
}

View file

@ -1,4 +1,4 @@
AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir)
AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_srcdir)/lightning/$(cpu)
check_PROGRAMS = fibit incr printf printf2 rpn fib fibdelay add bp testfp funcfp rpnfp modi ldxi
noinst_DATA = fibit.ok incr.ok printf.ok printf2.ok rpn.ok fib.ok fibdelay.ok testfp.ok funcfp.ok rpnfp.ok add.ok bp.ok modi.ok ldxi.ok

View file

@ -44,7 +44,8 @@ check_PROGRAMS = fibit$(EXEEXT) incr$(EXEEXT) printf$(EXEEXT) \
subdir = tests
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__aclocal_m4_deps = $(top_srcdir)/build-aux/lightning.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
@ -189,6 +190,7 @@ build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
cpu = @cpu@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
@ -222,7 +224,7 @@ target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir)
AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_srcdir)/lightning/$(cpu)
noinst_DATA = fibit.ok incr.ok printf.ok printf2.ok rpn.ok fib.ok fibdelay.ok testfp.ok funcfp.ok rpnfp.ok add.ok bp.ok modi.ok ldxi.ok
EXTRA_DIST = $(noinst_DATA) run-test
@DISASS_TRUE@LDADD = $(top_builddir)/opcode/libdisass.a