Commit b5075d29a88017705c252a0695f279f982f59a6f
1 parent
91caaa61
more imul tests
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@737 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
31 additions
and
0 deletions
tests/Makefile
@@ -38,6 +38,10 @@ test: | @@ -38,6 +38,10 @@ test: | ||
38 | endif | 38 | endif |
39 | $(QEMU) test-i386 > test-i386.out | 39 | $(QEMU) test-i386 > test-i386.out |
40 | @if diff -u test-i386.ref test-i386.out ; then echo "Auto Test OK"; fi | 40 | @if diff -u test-i386.ref test-i386.out ; then echo "Auto Test OK"; fi |
41 | +ifeq ($(ARCH),i386) | ||
42 | + $(QEMU) -no-code-copy test-i386 > test-i386.out | ||
43 | + @if diff -u test-i386.ref test-i386.out ; then echo "Auto Test OK (no code copy)"; fi | ||
44 | +endif | ||
41 | 45 | ||
42 | # generic Linux and CPU test | 46 | # generic Linux and CPU test |
43 | linux-test: linux-test.c | 47 | linux-test: linux-test.c |
tests/test-i386.c
@@ -401,6 +401,23 @@ void test_imull2(int op0, int op1) | @@ -401,6 +401,23 @@ void test_imull2(int op0, int op1) | ||
401 | "imull", s0, s1, res, flags & CC_MASK); | 401 | "imull", s0, s1, res, flags & CC_MASK); |
402 | } | 402 | } |
403 | 403 | ||
404 | +#define TEST_IMUL_IM(size, size1, op0, op1)\ | ||
405 | +{\ | ||
406 | + int res, flags;\ | ||
407 | + flags = 0;\ | ||
408 | + res = 0;\ | ||
409 | + asm ("push %3\n\t"\ | ||
410 | + "popf\n\t"\ | ||
411 | + "imul" size " $" #op0 ", %" size1 "2, %" size1 "0\n\t" \ | ||
412 | + "pushf\n\t"\ | ||
413 | + "popl %1\n\t"\ | ||
414 | + : "=r" (res), "=g" (flags)\ | ||
415 | + : "r" (op1), "1" (flags), "0" (res));\ | ||
416 | + printf("%-10s A=%08x B=%08x R=%08x CC=%04x\n",\ | ||
417 | + "imul" size, op0, op1, res, flags & CC_MASK);\ | ||
418 | +} | ||
419 | + | ||
420 | + | ||
404 | #undef CC_MASK | 421 | #undef CC_MASK |
405 | #define CC_MASK (0) | 422 | #define CC_MASK (0) |
406 | 423 | ||
@@ -452,6 +469,16 @@ void test_mul(void) | @@ -452,6 +469,16 @@ void test_mul(void) | ||
452 | test_imull2(0x80000000, 0x80000000); | 469 | test_imull2(0x80000000, 0x80000000); |
453 | test_imull2(0x10000, 0x10000); | 470 | test_imull2(0x10000, 0x10000); |
454 | 471 | ||
472 | + TEST_IMUL_IM("w", "w", 45, 0x1234); | ||
473 | + TEST_IMUL_IM("w", "w", -45, 23); | ||
474 | + TEST_IMUL_IM("w", "w", 0x8000, 0x80000000); | ||
475 | + TEST_IMUL_IM("w", "w", 0x7fff, 0x1000); | ||
476 | + | ||
477 | + TEST_IMUL_IM("l", "", 45, 0x1234); | ||
478 | + TEST_IMUL_IM("l", "", -45, 23); | ||
479 | + TEST_IMUL_IM("l", "", 0x8000, 0x80000000); | ||
480 | + TEST_IMUL_IM("l", "", 0x7fff, 0x1000); | ||
481 | + | ||
455 | test_idivb(0x12341678, 0x127e); | 482 | test_idivb(0x12341678, 0x127e); |
456 | test_idivb(0x43210123, -5); | 483 | test_idivb(0x43210123, -5); |
457 | test_idivb(0x12340004, -1); | 484 | test_idivb(0x12340004, -1); |