Revision b5075d29

b/tests/Makefile
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
b/tests/test-i386.c
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 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);

Also available in: Unified diff