mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-25 06:00:18 +02:00
fix PPC modi
2006-07-06 Paolo Bonzini <bonzini@gnu.org> Ludovic Courtes <ludovic.courtes@laas.fr> * lightning/ppc/core.h (_jit_mod): Replace with... (_jit_mod_big, _jit_mod_small): ... these. (jit_modi_i, jit_modi_ui): Rewrite. * tests/modi.c, tests/modi.ok: New tests. git-archimport-id: bonzini@gnu.org--2004b/lightning--stable--1.2--patch-22
This commit is contained in:
parent
0c068368cc
commit
50b6e40e0d
13 changed files with 110 additions and 36 deletions
|
@ -1,3 +1,11 @@
|
|||
2006-07-06 Paolo Bonzini <bonzini@gnu.org>
|
||||
Ludovic Courtes <ludovic.courtes@laas.fr>
|
||||
|
||||
* lightning/ppc/core.h (_jit_mod): Replace with...
|
||||
(_jit_mod_big, _jit_mod_small): ... these.
|
||||
(jit_modi_i, jit_modi_ui): Rewrite.
|
||||
* tests/modi.c, tests/modi.ok: New tests.
|
||||
|
||||
2006-05-18 Matthew Flatt <mflatt@cs.utah.edu>
|
||||
|
||||
* lightning/i386/asm.h: Fix test for extending the mprotect area
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Makefile.in generated by automake 1.9.5 from Makefile.am.
|
||||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
|
|
4
aclocal.m4
vendored
4
aclocal.m4
vendored
|
@ -1,4 +1,4 @@
|
|||
# generated automatically by aclocal 1.9.5 -*- Autoconf -*-
|
||||
# generated automatically by aclocal 1.9.6 -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
||||
# 2005 Free Software Foundation, Inc.
|
||||
|
@ -28,7 +28,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
|
|||
# Call AM_AUTOMAKE_VERSION so it can be traced.
|
||||
# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
|
||||
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
|
||||
[AM_AUTOMAKE_VERSION([1.9.5])])
|
||||
[AM_AUTOMAKE_VERSION([1.9.6])])
|
||||
|
||||
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Makefile.in generated by automake 1.9.5 from Makefile.am.
|
||||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
|
@ -207,9 +207,11 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
|||
restore=: && backupdir="$(am__leading_dot)am$$$$" && \
|
||||
am__cwd=`pwd` && cd $(srcdir) && \
|
||||
rm -rf $$backupdir && mkdir $$backupdir && \
|
||||
for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
|
||||
if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
|
||||
done; \
|
||||
if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
|
||||
for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
|
||||
if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
|
||||
done; \
|
||||
else :; fi && \
|
||||
cd "$$am__cwd"; \
|
||||
if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
|
||||
-o $@ $<; \
|
||||
|
@ -270,6 +272,7 @@ mostlyclean-vti:
|
|||
maintainer-clean-vti:
|
||||
-rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
|
||||
.dvi.ps:
|
||||
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
|
||||
$(DVIPS) -o $@ $<
|
||||
|
||||
uninstall-info-am:
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.28.
|
||||
.TH LIGHTNINGIZE "1" "November 2004" "lightningize 1.2a" "User Commands"
|
||||
.TH LIGHTNINGIZE "1" "July 2006" "lightningize 1.2a" "User Commands"
|
||||
.SH NAME
|
||||
lightningize \- manual page for lightningize 1.2a
|
||||
.SH SYNOPSIS
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
@set UPDATED 6 November 2004
|
||||
@set UPDATED-MONTH November 2004
|
||||
@set UPDATED 21 June 2005
|
||||
@set UPDATED-MONTH June 2005
|
||||
@set EDITION 1.2a
|
||||
@set VERSION 1.2a
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Makefile.in generated by automake 1.9.5 from Makefile.am.
|
||||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
|
|
|
@ -81,19 +81,24 @@ struct jit_local_state {
|
|||
#define jit_ubooli2(d, rs, is, jmp) (jit_chk_imu (is, CMPLWIri(rs, is), CMPLWrr(rs, JIT_AUX)), MFCRr((d)), EXTRWIrrii((d), (d), 1, (jmp)), XORIrri((d), (d), 1))
|
||||
#define jit_uboolr2(d, s1, s2, jmp) ( CMPLWrr (s1, s2), MFCRr((d)), EXTRWIrrii((d), (d), 1, (jmp)), XORIrri((d), (d), 1))
|
||||
|
||||
/* modulus with immediate
|
||||
* movei r26, imm
|
||||
/* modulus with big immediate with small immediate
|
||||
* movei r24, imm movei r24, imm
|
||||
* mtlr r31
|
||||
* divw r31, rs, r26 (or divwu)
|
||||
* mullw r31, r31, r26
|
||||
* sub rs, rs, r26
|
||||
* divw r31, rs, r24 (or divwu) divw r24, rs, r24
|
||||
* mullw r31, r31, r24 mulli r24, r24, imm
|
||||
* sub d, rs, r31 sub d, rs, r24
|
||||
* mflr r31
|
||||
*/
|
||||
*
|
||||
*
|
||||
* jit_mod_big expects immediate in JIT_AUX. */
|
||||
|
||||
#define _jit_mod(div, rs, imm) (MOVEIri(JIT_AUX, (imm)), MTLRr(31), (div), \
|
||||
MULLWrrr(31, 31, JIT_AUX), SUBrrr((rs), (rs), JIT_AUX), \
|
||||
#define _jit_mod_big(div, d, rs) (MTLRr(31), div(31, (rs), JIT_AUX), \
|
||||
MULLWrrr(31, 31, JIT_AUX), SUBrrr((d), (rs), 31), \
|
||||
MFLRr(31))
|
||||
|
||||
#define _jit_mod_small(div, d, rs, imm) (MOVEIri(JIT_AUX, (imm)), div(JIT_AUX, (rs), JIT_AUX), \
|
||||
MULLIrri(JIT_AUX, JIT_AUX, (imm)), SUBrrr((d), (rs), JIT_AUX))
|
||||
|
||||
/* Patch a movei instruction made of a LIS at lis_pc and an ORI at ori_pc. */
|
||||
#define jit_patch_movei(lis_pc, ori_pc, dest) \
|
||||
(*(lis_pc) &= ~_MASK(16), *(lis_pc) |= _HI(dest), \
|
||||
|
@ -220,8 +225,8 @@ struct jit_local_state {
|
|||
#define jit_lti_ui(d, rs, is) jit_ubooli ((d), (rs), (is), _lt )
|
||||
#define jit_ltr_i(d, s1, s2) jit_sboolr ((d), (s1), (s2), _lt )
|
||||
#define jit_ltr_ui(d, s1, s2) jit_uboolr ((d), (s1), (s2), _lt )
|
||||
#define jit_modi_i(d, rs, is) _jit_mod(jit_divi_i (31, (rs), JIT_AUX), (rs), (is))
|
||||
#define jit_modi_ui(d, rs, is) _jit_mod(jit_divi_ui(31, (rs), JIT_AUX), (rs), (is))
|
||||
#define jit_modi_i(d, rs, is) jit_chk_ims ((is), _jit_mod_small(jit_divr_i , (d), (rs), (is)), _jit_mod_big(jit_divr_i , (d), (rs)))
|
||||
#define jit_modi_ui(d, rs, is) jit_chk_imu15((is), _jit_mod_small(jit_divr_ui, (d), (rs), (is)), _jit_mod_big(jit_divr_ui, (d), (rs)))
|
||||
#define jit_modr_i(d, s1, s2) (DIVWrrr(JIT_AUX, (s1), (s2)), MULLWrrr(JIT_AUX, JIT_AUX, (s2)), SUBrrr((d), (s1), JIT_AUX))
|
||||
#define jit_modr_ui(d, s1, s2) (DIVWUrrr(JIT_AUX, (s1), (s2)), MULLWrrr(JIT_AUX, JIT_AUX, (s2)), SUBrrr((d), (s1), JIT_AUX))
|
||||
#define jit_movi_i(d, is) MOVEIri((d), (is))
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Makefile.in generated by automake 1.9.5 from Makefile.am.
|
||||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
|
@ -15,8 +15,6 @@
|
|||
@SET_MAKE@
|
||||
|
||||
|
||||
SOURCES = $(libdisass_a_SOURCES)
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir)
|
||||
|
||||
noinst_PROGRAMS = fibit incr printf printf2 rpn fib fibdelay add bp testfp funcfp rpnfp
|
||||
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
|
||||
noinst_PROGRAMS = fibit incr printf printf2 rpn fib fibdelay add bp testfp funcfp rpnfp modi
|
||||
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
|
||||
EXTRA_DIST = $(noinst_DATA) run-test
|
||||
|
||||
if DISASS
|
||||
|
@ -9,6 +9,6 @@ LDADD = $(top_builddir)/opcode/libdisass.a
|
|||
endif
|
||||
|
||||
if REGRESSION_TESTING
|
||||
TESTS = fib fibit fibdelay incr printf printf2 rpn add bp testfp funcfp rpnfp
|
||||
TESTS = fib fibit fibdelay incr printf printf2 rpn add bp testfp funcfp rpnfp modi
|
||||
TESTS_ENVIRONMENT=$(srcdir)/run-test
|
||||
endif
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Makefile.in generated by automake 1.9.5 from Makefile.am.
|
||||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
|
@ -15,8 +15,6 @@
|
|||
@SET_MAKE@
|
||||
|
||||
|
||||
SOURCES = add.c bp.c fib.c fibdelay.c fibit.c funcfp.c incr.c printf.c printf2.c rpn.c rpnfp.c testfp.c
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
@ -43,7 +41,7 @@ target_triplet = @target@
|
|||
noinst_PROGRAMS = fibit$(EXEEXT) incr$(EXEEXT) printf$(EXEEXT) \
|
||||
printf2$(EXEEXT) rpn$(EXEEXT) fib$(EXEEXT) fibdelay$(EXEEXT) \
|
||||
add$(EXEEXT) bp$(EXEEXT) testfp$(EXEEXT) funcfp$(EXEEXT) \
|
||||
rpnfp$(EXEEXT)
|
||||
rpnfp$(EXEEXT) modi$(EXEEXT)
|
||||
subdir = tests
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
|
@ -83,6 +81,10 @@ incr_SOURCES = incr.c
|
|||
incr_OBJECTS = incr.$(OBJEXT)
|
||||
incr_LDADD = $(LDADD)
|
||||
@DISASS_TRUE@incr_DEPENDENCIES = $(top_builddir)/opcode/libdisass.a
|
||||
modi_SOURCES = modi.c
|
||||
modi_OBJECTS = modi.$(OBJEXT)
|
||||
modi_LDADD = $(LDADD)
|
||||
@DISASS_TRUE@modi_DEPENDENCIES = $(top_builddir)/opcode/libdisass.a
|
||||
printf_SOURCES = printf.c
|
||||
printf_OBJECTS = printf.$(OBJEXT)
|
||||
printf_LDADD = $(LDADD)
|
||||
|
@ -111,10 +113,10 @@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
|||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
SOURCES = add.c bp.c fib.c fibdelay.c fibit.c funcfp.c incr.c printf.c \
|
||||
printf2.c rpn.c rpnfp.c testfp.c
|
||||
DIST_SOURCES = add.c bp.c fib.c fibdelay.c fibit.c funcfp.c incr.c \
|
||||
SOURCES = add.c bp.c fib.c fibdelay.c fibit.c funcfp.c incr.c modi.c \
|
||||
printf.c printf2.c rpn.c rpnfp.c testfp.c
|
||||
DIST_SOURCES = add.c bp.c fib.c fibdelay.c fibit.c funcfp.c incr.c \
|
||||
modi.c printf.c printf2.c rpn.c rpnfp.c testfp.c
|
||||
DATA = $(noinst_DATA)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
|
@ -214,10 +216,10 @@ target_cpu = @target_cpu@
|
|||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir)
|
||||
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
|
||||
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
|
||||
EXTRA_DIST = $(noinst_DATA) run-test
|
||||
@DISASS_TRUE@LDADD = $(top_builddir)/opcode/libdisass.a
|
||||
@REGRESSION_TESTING_TRUE@TESTS = fib fibit fibdelay incr printf printf2 rpn add bp testfp funcfp rpnfp
|
||||
@REGRESSION_TESTING_TRUE@TESTS = fib fibit fibdelay incr printf printf2 rpn add bp testfp funcfp rpnfp modi
|
||||
@REGRESSION_TESTING_TRUE@TESTS_ENVIRONMENT = $(srcdir)/run-test
|
||||
all: all-am
|
||||
|
||||
|
@ -276,6 +278,9 @@ funcfp$(EXEEXT): $(funcfp_OBJECTS) $(funcfp_DEPENDENCIES)
|
|||
incr$(EXEEXT): $(incr_OBJECTS) $(incr_DEPENDENCIES)
|
||||
@rm -f incr$(EXEEXT)
|
||||
$(LINK) $(incr_LDFLAGS) $(incr_OBJECTS) $(incr_LDADD) $(LIBS)
|
||||
modi$(EXEEXT): $(modi_OBJECTS) $(modi_DEPENDENCIES)
|
||||
@rm -f modi$(EXEEXT)
|
||||
$(LINK) $(modi_LDFLAGS) $(modi_OBJECTS) $(modi_LDADD) $(LIBS)
|
||||
printf$(EXEEXT): $(printf_OBJECTS) $(printf_DEPENDENCIES)
|
||||
@rm -f printf$(EXEEXT)
|
||||
$(LINK) $(printf_LDFLAGS) $(printf_OBJECTS) $(printf_LDADD) $(LIBS)
|
||||
|
@ -305,6 +310,7 @@ distclean-compile:
|
|||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fibit.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/funcfp.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/incr.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/modi.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf2.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpn.Po@am__quote@
|
||||
|
|
52
tests/modi.c
Normal file
52
tests/modi.c
Normal file
|
@ -0,0 +1,52 @@
|
|||
/******************************** -*- C -*- ****************************
|
||||
*
|
||||
* Test jit_modi_i
|
||||
*
|
||||
***********************************************************************/
|
||||
|
||||
|
||||
/* Contributed by Ludovic Courtes. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "lightning.h"
|
||||
|
||||
typedef int (* mod_t) (int);
|
||||
|
||||
mod_t
|
||||
generate_modi (int operand)
|
||||
{
|
||||
static char buffer[1024];
|
||||
mod_t result;
|
||||
int arg;
|
||||
|
||||
result = (mod_t)(jit_set_ip (buffer).iptr);
|
||||
jit_leaf (1);
|
||||
arg = jit_arg_i ();
|
||||
jit_getarg_i (JIT_R1, arg);
|
||||
|
||||
jit_modi_i (JIT_R2, JIT_R1, operand);
|
||||
jit_movr_i (JIT_RET, JIT_R2);
|
||||
|
||||
jit_ret ();
|
||||
jit_flush_code (buffer, jit_get_ip ().ptr);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
mod_t mod_eight = generate_modi (8);
|
||||
|
||||
printf ("mod_eight (%i) = %i (vs. %i)\n",
|
||||
20420, mod_eight (20420), (20420 % 8));
|
||||
printf ("mod_eight (%i) = %i (vs. %i)\n",
|
||||
216096, mod_eight (216096), (216096 % 8));
|
||||
|
||||
return 0;
|
||||
}
|
2
tests/modi.ok
Normal file
2
tests/modi.ok
Normal file
|
@ -0,0 +1,2 @@
|
|||
mod_eight (20420) = 4 (vs. 4)
|
||||
mod_eight (216096) = 0 (vs. 0)
|
Loading…
Add table
Add a link
Reference in a new issue