1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-23 13:00:34 +02:00

Correct integer multiplication and add extra test case.

* lib/jit_ppc.c: Assign copyright ownership to FSF.

	* lib/jit_x86-cpu.c: Correct integer multiplication that was
	generating code with reversed register arguments.

	* check/rpn.ok, check/rpn.tst: New test case file.
This commit is contained in:
pcpa 2012-12-03 00:07:29 -02:00
parent b7c8db4ba4
commit 90a187a12e
6 changed files with 190 additions and 4 deletions

View file

@ -1,3 +1,12 @@
2012-12-02 Paulo Andrade <pcpa@gnu.org>
* lib/jit_ppc.c: Assign copyright ownership to FSF.
* lib/jit_x86-cpu.c: Correct integer multiplication that was
generating code with reversed register arguments.
* check/rpn.ok, check/rpn.tst: New test case file.
2012-12-02 Paulo Andrade <pcpa@gnu.org>
* lib/jit_x86-cpu.c, lib/jit_x86-sse.c, lib/jit_x86-x87.c:

View file

@ -31,10 +31,11 @@ EXTRA_DIST = \
bp.tst bp.ok \
divi.tst divi.ok \
fib.tst fib.ok \
rpn.tst rpn.ok \
check.sh \
all.tst
TESTS = 3to2 add allocai bp divi fib
TESTS = 3to2 add allocai bp divi fib rpn
CLEANFILES = $(TESTS)

6
check/rpn.ok Normal file
View file

@ -0,0 +1,6 @@
C: 0 10 20 30 40 50 60 70 80 90 100
F: 32 50 68 86 104 122 140 158 176 194 212
F: 32 50 68 86 104 122 140 158 176 194 212
C: 0 10 20 30 40 50 60 70 80 90 100

170
check/rpn.tst Normal file
View file

@ -0,0 +1,170 @@
.data 256
.$($int = 4)
C:
.c "\nC:"
F:
.c "\nF:"
format:
.c "%3d "
newline:
.c "\n"
.code
jmpi main
c2f:
prolog
arg $in
allocai $(32 * $int) $index
getarg %r2 $in
// 32x9*5/+
movi %r0 32
// x9*5/+
stxi_i $index %fp %r0
. $($index = $index + $int)
movr %r0 %r2
// 9*5/+
stxi_i $index %fp %r0
. $($index = $index + $int)
movi %r0 9
// *5/+
. $($index = $index - $int)
ldxi_i %r1 %fp $index
mulr %r0 %r1 %r0
// 5/+
stxi_i $index %fp %r0
. $($index = $index + $int)
movi %r0 5
// /+
. $($index = $index - $int)
ldxi_i %r1 %fp $index
divr %r0 %r1 %r0
// +
. $($index = $index - $int)
ldxi_i %r1 %fp $index
addr %r0 %r1 %r0
retr %r0
epilog
f2c:
prolog
arg $in
allocai $(32 * $int) $index
getarg %r2 $in
// x32-5*9/
stxi_i $index %fp %r0
. $($index = $index + $int)
movr %r0 %r2
// 32-5*9/
stxi_i $index %fp %r0
. $($index = $index + $int)
movi %r0 32
// -5*9/
. $($index = $index - $int)
ldxi_i %r1 %fp $index
subr %r0 %r1 %r0
// 5*9/
stxi_i $index %fp %r0
. $($index = $index + $int)
movi %r0 5
// *9/
. $($index = $index - $int)
ldxi_i %r1 %fp $index
mulr %r0 %r1 %r0
// 9/
stxi_i $index %fp %r0
. $($index = $index + $int)
movi %r0 9
// /
. $($index = $index - $int)
ldxi_i %r1 %fp $index
divr %r0 %r1 %r0
retr %r0
epilog
//-----------------------------------------------------------------------
main:
prolog
prepare 1
pushargi C
finishi @printf
movi %v0 0
loopC:
prepare 1
pushargi format
pushargr %v0
finishi @printf
addi %v0 %v0 10
blei loopC %v0 100
prepare 1
pushargi F
finishi @printf
movi %v0 0
loopC2F:
prepare 0
pushargr %v0
finishi c2f
retval %r0
prepare 2
pushargi format
pushargr %r0
finishi @printf
addi %v0 %v0 10
blei loopC2F %v0 100
prepare 1
pushargi newline
finishi @printf
prepare 1
pushargi F
finishi @printf
movi %v0 32
loopF:
prepare 2
pushargi format
pushargr %v0
finishi @printf
addi %v0 %v0 18
blei loopF %v0 212
prepare 1
pushargi C
finishi @printf
movi %v0 32
loopF2C:
prepare 0
pushargr %v0
finishi f2c
retval %r0
prepare 2
pushargi format
pushargr %r0
finishi @printf
addi %v0 %v0 18
blei loopF2C %v0 212
prepare 1
pushargi newline
finishi @printf
ret
epilog

View file

@ -1,5 +1,5 @@
/*
* Copyright (C) 2011 Paulo Cesar Pereira de Andrade.
* Copyright (C) 2012 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View file

@ -1053,10 +1053,10 @@ _subxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
static void
_imulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
{
rex(0, 1, r1, _NOREG, r0);
rex(0, 1, r0, _NOREG, r1);
ic(0x0f);
ic(0xaf);
mrm(0x03, r7(r1), r7(r0));
mrm(0x03, r7(r0), r7(r1));
}
static void