guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 20/437: fix PPC modi


From: Andy Wingo
Subject: [Guile-commits] 20/437: fix PPC modi
Date: Mon, 2 Jul 2018 05:13:37 -0400 (EDT)

wingo pushed a commit to branch lightning
in repository guile.

commit 50b6e40e0d3464f8cb04fb642de686873b0f98ab
Author: Paolo Bonzini <address@hidden>
Date:   Thu Jul 6 13:31:09 2006 +0000

    fix PPC modi
    
    2006-07-06  Paolo Bonzini  <address@hidden>
            Ludovic Courtes  <address@hidden>
    
        * 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: address@hidden/lightning--stable--1.2--patch-22
---
 ChangeLog             |  8 ++++++++
 Makefile.in           |  2 +-
 aclocal.m4            |  4 ++--
 doc/Makefile.in       | 11 +++++++----
 doc/lightningize.1    |  2 +-
 doc/version.texi      |  4 ++--
 lightning/Makefile.in |  2 +-
 lightning/ppc/core.h  | 25 +++++++++++++++----------
 opcode/Makefile.in    |  4 +---
 tests/Makefile.am     |  6 +++---
 tests/Makefile.in     | 24 +++++++++++++++---------
 tests/modi.c          | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/modi.ok         |  2 ++
 13 files changed, 110 insertions(+), 36 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index c7312df..b12f03f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2006-07-06  Paolo Bonzini  <address@hidden>
+           Ludovic Courtes  <address@hidden>
+
+       * 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  <address@hidden>
 
        * lightning/i386/asm.h: Fix test for extending the mprotect area
diff --git a/Makefile.in b/Makefile.in
index 810f772..c190be2 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -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,
diff --git a/aclocal.m4 b/aclocal.m4
index 965df90..aef181a 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -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 -*-
 
diff --git a/doc/Makefile.in b/doc/Makefile.in
index 2208eae..6dc7ee6 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -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 $@ address@hidden address@hidden $(@:.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 $@ address@hidden address@hidden $(@:.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:
diff --git a/doc/lightningize.1 b/doc/lightningize.1
index bfa8a7d..4a41c09 100644
--- a/doc/lightningize.1
+++ b/doc/lightningize.1
@@ -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
diff --git a/doc/version.texi b/doc/version.texi
index d71db0b..3e36765 100644
--- a/doc/version.texi
+++ b/doc/version.texi
@@ -1,4 +1,4 @@
address@hidden UPDATED 6 November 2004
address@hidden UPDATED-MONTH November 2004
address@hidden UPDATED 21 June 2005
address@hidden UPDATED-MONTH June 2005
 @set EDITION 1.2a
 @set VERSION 1.2a
diff --git a/lightning/Makefile.in b/lightning/Makefile.in
index 026cae5..5b01e64 100644
--- a/lightning/Makefile.in
+++ b/lightning/Makefile.in
@@ -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,
diff --git a/lightning/ppc/core.h b/lightning/ppc/core.h
index c62567b..1f687e9 100644
--- a/lightning/ppc/core.h
+++ b/lightning/ppc/core.h
@@ -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))
diff --git a/opcode/Makefile.in b/opcode/Makefile.in
index 2e435e8..f7d2ef1 100644
--- a/opcode/Makefile.in
+++ b/opcode/Makefile.in
@@ -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@
diff --git a/tests/Makefile.am b/tests/Makefile.am
index ba52a1a..bfee98e 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -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
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 245f98e..4c3427f 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -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)
 @address@hidden = $(top_builddir)/opcode/libdisass.a
+modi_SOURCES = modi.c
+modi_OBJECTS = modi.$(OBJEXT)
+modi_LDADD = $(LDADD)
address@hidden@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
 @address@hidden = $(top_builddir)/opcode/libdisass.a
address@hidden@TESTS = fib fibit fibdelay incr printf printf2 rpn add bp testfp 
funcfp rpnfp
address@hidden@TESTS = fib fibit fibdelay incr printf printf2 rpn add bp testfp 
funcfp rpnfp modi
 @address@hidden = $(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@ @address@hidden/$(DEPDIR)/address@hidden@
 @AMDEP_TRUE@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
 @AMDEP_TRUE@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
 @AMDEP_TRUE@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
 @AMDEP_TRUE@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
 @AMDEP_TRUE@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
diff --git a/tests/modi.c b/tests/modi.c
new file mode 100644
index 0000000..a5167bc
--- /dev/null
+++ b/tests/modi.c
@@ -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;
+}
diff --git a/tests/modi.ok b/tests/modi.ok
new file mode 100644
index 0000000..059dc63
--- /dev/null
+++ b/tests/modi.ok
@@ -0,0 +1,2 @@
+mod_eight (20420) = 4 (vs. 4)
+mod_eight (216096) = 0 (vs. 0)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]