diff --git a/ChangeLog b/ChangeLog index 52276fca7..b65011aa4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2012-12-02 Paulo Andrade + + * 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 * lib/jit_x86-cpu.c, lib/jit_x86-sse.c, lib/jit_x86-x87.c: diff --git a/check/Makefile.am b/check/Makefile.am index c88f069ae..bb4ec40b5 100644 --- a/check/Makefile.am +++ b/check/Makefile.am @@ -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) diff --git a/check/rpn.ok b/check/rpn.ok new file mode 100644 index 000000000..b686c135f --- /dev/null +++ b/check/rpn.ok @@ -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 diff --git a/check/rpn.tst b/check/rpn.tst new file mode 100644 index 000000000..fe12557be --- /dev/null +++ b/check/rpn.tst @@ -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 diff --git a/lib/jit_ppc.c b/lib/jit_ppc.c index 70af328a6..4a2e26920 100644 --- a/lib/jit_ppc.c +++ b/lib/jit_ppc.c @@ -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 diff --git a/lib/jit_x86-cpu.c b/lib/jit_x86-cpu.c index 71fcb963d..9be3721f1 100644 --- a/lib/jit_x86-cpu.c +++ b/lib/jit_x86-cpu.c @@ -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