Commit b5075d29a88017705c252a0695f279f982f59a6f

Authored by bellard
1 parent 91caaa61

more imul tests


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@737 c046a42c-6fe2-441c-8c8c-71466251a162
tests/Makefile
... ... @@ -38,6 +38,10 @@ test:
38 38 endif
39 39 $(QEMU) test-i386 > test-i386.out
40 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 46 # generic Linux and CPU test
43 47 linux-test: linux-test.c
... ...
tests/test-i386.c
... ... @@ -401,6 +401,23 @@ void test_imull2(int op0, int op1)
401 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 421 #undef CC_MASK
405 422 #define CC_MASK (0)
406 423  
... ... @@ -452,6 +469,16 @@ void test_mul(void)
452 469 test_imull2(0x80000000, 0x80000000);
453 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 482 test_idivb(0x12341678, 0x127e);
456 483 test_idivb(0x43210123, -5);
457 484 test_idivb(0x12340004, -1);
... ...