mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-23 21:10:29 +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:
parent
b7c8db4ba4
commit
90a187a12e
6 changed files with 190 additions and 4 deletions
|
@ -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>
|
2012-12-02 Paulo Andrade <pcpa@gnu.org>
|
||||||
|
|
||||||
* lib/jit_x86-cpu.c, lib/jit_x86-sse.c, lib/jit_x86-x87.c:
|
* lib/jit_x86-cpu.c, lib/jit_x86-sse.c, lib/jit_x86-x87.c:
|
||||||
|
|
|
@ -31,10 +31,11 @@ EXTRA_DIST = \
|
||||||
bp.tst bp.ok \
|
bp.tst bp.ok \
|
||||||
divi.tst divi.ok \
|
divi.tst divi.ok \
|
||||||
fib.tst fib.ok \
|
fib.tst fib.ok \
|
||||||
|
rpn.tst rpn.ok \
|
||||||
check.sh \
|
check.sh \
|
||||||
all.tst
|
all.tst
|
||||||
|
|
||||||
TESTS = 3to2 add allocai bp divi fib
|
TESTS = 3to2 add allocai bp divi fib rpn
|
||||||
|
|
||||||
CLEANFILES = $(TESTS)
|
CLEANFILES = $(TESTS)
|
||||||
|
|
||||||
|
|
6
check/rpn.ok
Normal file
6
check/rpn.ok
Normal 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
170
check/rpn.tst
Normal 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
|
|
@ -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
|
* This is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -1053,10 +1053,10 @@ _subxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
|
||||||
static void
|
static void
|
||||||
_imulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
|
_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(0x0f);
|
||||||
ic(0xaf);
|
ic(0xaf);
|
||||||
mrm(0x03, r7(r1), r7(r0));
|
mrm(0x03, r7(r0), r7(r1));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue