diff mbox

[PATCH_v2,9/9] target-openrisc: Correct carry flag check of l.addc and l.addic test cases

Message ID 1382400765-26377-10-git-send-email-sebastian@macke.de
State New
Headers show

Commit Message

Sebastian Macke Oct. 22, 2013, 12:12 a.m. UTC
The test cases did not correctly test for the carry flag.

Signed-off-by: Sebastian Macke <sebastian@macke.de>
---
 tests/tcg/openrisc/test_addc.c  |  8 +++++---
 tests/tcg/openrisc/test_addic.c | 10 ++++++----
 2 files changed, 11 insertions(+), 7 deletions(-)

Comments

Alex Bennée Oct. 22, 2013, 8:35 a.m. UTC | #1
sebastian@macke.de writes:

> The test cases did not correctly test for the carry flag.

Out of interest how are you building your test cases, cross-compiling or
from within the emulated environment?

I want to clean-up and resurrect the TCG tests but one of the challenges
is all the non-x86 targets need to be built somehow.

Cheers,
Sebastian Macke Oct. 22, 2013, 3:45 p.m. UTC | #2
Hi Alex,

I am using a cross-compiling toolchain. It's the easiest way as I have 
to compile the image for QEMU anyhow.
http://opencores.org/or1k/OpenRISC_GNU_tool_chain

Then it's just an "make && make test" in the corresponding 
tests/tcg/openrisc folder.

Inside the virtual machine it would be a little bit more complicated. 
You have to compile Linux with the initramfs containing the QEMU test 
sources. Another storage device is currently not supported by the 
OpenRISC QEMU emulator.

Sebastian


On 22/10/2013 1:35 AM, Alex Bennée wrote:
> sebastian@macke.de writes:
>
>> The test cases did not correctly test for the carry flag.
> Out of interest how are you building your test cases, cross-compiling or
> from within the emulated environment?
>
> I want to clean-up and resurrect the TCG tests but one of the challenges
> is all the non-x86 targets need to be built somehow.
>
> Cheers,
>
Max Filippov Oct. 22, 2013, 4:01 p.m. UTC | #3
On Tue, Oct 22, 2013 at 7:45 PM, Sebastian Macke <sebastian@macke.de> wrote:
> Hi Alex,
>
> I am using a cross-compiling toolchain. It's the easiest way as I have to
> compile the image for QEMU anyhow.
> http://opencores.org/or1k/OpenRISC_GNU_tool_chain
>
> Then it's just an "make && make test" in the corresponding
> tests/tcg/openrisc folder.
>
> Inside the virtual machine it would be a little bit more complicated. You
> have to compile Linux with the initramfs containing the QEMU test sources.
> Another storage device is currently not supported by the OpenRISC QEMU
> emulator.

It should be possible to use network, I did a quick check at the time of
openrisc port submission, it used to work.
Alex Bennée Oct. 22, 2013, 4:12 p.m. UTC | #4
jcmvbkbc@gmail.com writes:

> On Tue, Oct 22, 2013 at 7:45 PM, Sebastian Macke <sebastian@macke.de> wrote:
>> Hi Alex,
>>
>> I am using a cross-compiling toolchain. It's the easiest way as I have to
>> compile the image for QEMU anyhow.
>> http://opencores.org/or1k/OpenRISC_GNU_tool_chain
<snip>

I shall have a look.

>
> It should be possible to use network, I did a quick check at the time of
> openrisc port submission, it used to work.

Nah cross-compiling makes more sense. I was thinking of making configure
detect the various cross compilers at configure time and then optionally
enable each set of tcg tests depending on Cross Compile support.
Sebastian Macke Oct. 22, 2013, 4:15 p.m. UTC | #5
On 22/10/2013 9:01 AM, Max Filippov wrote:
> On Tue, Oct 22, 2013 at 7:45 PM, Sebastian Macke <sebastian@macke.de> wrote:
>> Hi Alex,
>>
>> I am using a cross-compiling toolchain. It's the easiest way as I have to
>> compile the image for QEMU anyhow.
>> http://opencores.org/or1k/OpenRISC_GNU_tool_chain
>>
>> Then it's just an "make && make test" in the corresponding
>> tests/tcg/openrisc folder.
>>
>> Inside the virtual machine it would be a little bit more complicated. You
>> have to compile Linux with the initramfs containing the QEMU test sources.
>> Another storage device is currently not supported by the OpenRISC QEMU
>> emulator.
> It should be possible to use network, I did a quick check at the time of
> openrisc port submission, it used to work.
>

This is true. Via a network file system it should be no problem. But 
this is a very complicated way to test the QEMU tcg part.
The image containing gcc I am currently using you can download under 
www.simulationcorner.net/vmlinux
Run it with "qemu-system-or32 -m 128 -kernel vmlinux -nographic"
Max Filippov Oct. 23, 2013, 6:52 a.m. UTC | #6
On Tue, Oct 22, 2013 at 8:15 PM, Sebastian Macke <sebastian@macke.de> wrote:
> On 22/10/2013 9:01 AM, Max Filippov wrote:
>>
>> On Tue, Oct 22, 2013 at 7:45 PM, Sebastian Macke <sebastian@macke.de>
>> wrote:
>>>
>>> Hi Alex,
>>>
>>> I am using a cross-compiling toolchain. It's the easiest way as I have to
>>> compile the image for QEMU anyhow.
>>> http://opencores.org/or1k/OpenRISC_GNU_tool_chain
>>>
>>> Then it's just an "make && make test" in the corresponding
>>> tests/tcg/openrisc folder.
>>>
>>> Inside the virtual machine it would be a little bit more complicated. You
>>> have to compile Linux with the initramfs containing the QEMU test
>>> sources.
>>> Another storage device is currently not supported by the OpenRISC QEMU
>>> emulator.
>>
>> It should be possible to use network, I did a quick check at the time of
>> openrisc port submission, it used to work.
>>
>
> This is true. Via a network file system it should be no problem. But this is
> a very complicated way to test the QEMU tcg part.
> The image containing gcc I am currently using you can download under
> www.simulationcorner.net/vmlinux
> Run it with "qemu-system-or32 -m 128 -kernel vmlinux -nographic"

I can think of an easier way: try using linux user emulation instead of
system emulation, it should make mostly little difference wrt TCG.
It should be "qemu-or32 linux-elf-file-to-run".
diff mbox

Patch

diff --git a/tests/tcg/openrisc/test_addc.c b/tests/tcg/openrisc/test_addc.c
index 05d18f8..a8f756a 100644
--- a/tests/tcg/openrisc/test_addc.c
+++ b/tests/tcg/openrisc/test_addc.c
@@ -7,9 +7,10 @@  int main(void)
 
     b = 0x01;
     c = 0xffffffff;
-    result = 1;
+    result = 0;
     __asm
-    ("l.addc   %0, %1, %2\n\t"
+    ("l.add r1, r1, r0\n\t" /* clear carry */
+     "l.addc   %0, %1, %2\n\t"
      : "=r"(a)
      : "r"(b), "r"(c)
     );
@@ -22,7 +23,8 @@  int main(void)
     c = 0xffffffff;
     result = 0x80000001;
     __asm
-    ("l.addc   %0, %1, %2\n\t"
+    ("l.add r1, r1, r0\n\t" /* clear carry */
+     "l.addc   %0, %1, %2\n\t"
      "l.movhi  %2, 0x7fff\n\t"
      "l.ori    %2, %2, 0xffff\n\t"
      "l.addc   %0, %1, %2\n\t"
diff --git a/tests/tcg/openrisc/test_addic.c b/tests/tcg/openrisc/test_addic.c
index 4ba7432..857aaa1 100644
--- a/tests/tcg/openrisc/test_addic.c
+++ b/tests/tcg/openrisc/test_addic.c
@@ -6,9 +6,10 @@  int main(void)
     int result;
 
     a = 1;
-    result = 0x1;
+    result = 0x0;
     __asm
-    ("l.addic %0, %0, 0xffff\n\t"
+    ("l.add r1, r1, r0\n\t" /* clear carry */
+     "l.addic %0, %0, 0xffff\n\t"
      : "+r"(a)
     );
     if (a != result) {
@@ -16,10 +17,11 @@  int main(void)
         return -1;
    }
 
-    a = 0x1;
+    a = -1;
     result = 0x201;
     __asm
-    ("l.addic %0, %0, 0xffff\n\t"
+    ("l.add r1, r1, r0\n\t"  /* clear carry */
+     "l.addic %0, %0, 0x1\n\t"
      "l.ori   %0, r0, 0x100\n\t"
      "l.addic %0, %0, 0x100\n\t"
      : "+r"(a)