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:
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>
|
||||
|
||||
* 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 \
|
||||
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
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
|
||||
* 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
|
||||
_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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue