1
Fork 0
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:
Paolo Bonzini 2006-07-06 13:31:09 +00:00
parent 0c068368cc
commit 50b6e40e0d
13 changed files with 110 additions and 36 deletions

View file

@ -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

View file

@ -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
View file

@ -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 -*-

View file

@ -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:

View file

@ -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

View file

@ -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

View file

@ -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,

View file

@ -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))

View file

@ -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@

View file

@ -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

View file

@ -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
View 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
View file

@ -0,0 +1,2 @@
mod_eight (20420) = 4 (vs. 4)
mod_eight (216096) = 0 (vs. 0)