Commit 75175024757fd716dc0f8d50d9a8837b6d88143d
1 parent
8f2b1fb0
fcmovx support
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@464 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
40 additions
and
0 deletions
tests/test-i386.c
@@ -658,6 +658,43 @@ void test_fenv(void) | @@ -658,6 +658,43 @@ void test_fenv(void) | ||
658 | TEST_ENV(&float_env32, ""); | 658 | TEST_ENV(&float_env32, ""); |
659 | } | 659 | } |
660 | 660 | ||
661 | + | ||
662 | +#define TEST_FCMOV(a, b, eflags, CC)\ | ||
663 | +{\ | ||
664 | + double res;\ | ||
665 | + asm("push %3\n"\ | ||
666 | + "popf\n"\ | ||
667 | + "fcmov" CC " %2, %0\n"\ | ||
668 | + : "=t" (res)\ | ||
669 | + : "0" (a), "u" (b), "g" (eflags));\ | ||
670 | + printf("fcmov%s eflags=0x%04x-> %f\n", \ | ||
671 | + CC, eflags, res);\ | ||
672 | +} | ||
673 | + | ||
674 | +void test_fcmov(void) | ||
675 | +{ | ||
676 | + double a, b; | ||
677 | + int eflags, i; | ||
678 | + | ||
679 | + a = 1.0; | ||
680 | + b = 2.0; | ||
681 | + for(i = 0; i < 4; i++) { | ||
682 | + eflags = 0; | ||
683 | + if (i & 1) | ||
684 | + eflags |= CC_C; | ||
685 | + if (i & 2) | ||
686 | + eflags |= CC_Z; | ||
687 | + TEST_FCMOV(a, b, eflags, "b"); | ||
688 | + TEST_FCMOV(a, b, eflags, "e"); | ||
689 | + TEST_FCMOV(a, b, eflags, "be"); | ||
690 | + TEST_FCMOV(a, b, eflags, "nb"); | ||
691 | + TEST_FCMOV(a, b, eflags, "ne"); | ||
692 | + TEST_FCMOV(a, b, eflags, "nbe"); | ||
693 | + } | ||
694 | + TEST_FCMOV(a, b, 0, "u"); | ||
695 | + TEST_FCMOV(a, b, CC_P, "nu"); | ||
696 | +} | ||
697 | + | ||
661 | void test_floats(void) | 698 | void test_floats(void) |
662 | { | 699 | { |
663 | test_fops(2, 3); | 700 | test_fops(2, 3); |
@@ -675,6 +712,9 @@ void test_floats(void) | @@ -675,6 +712,9 @@ void test_floats(void) | ||
675 | test_fbcd(1234567890123456); | 712 | test_fbcd(1234567890123456); |
676 | test_fbcd(-123451234567890); | 713 | test_fbcd(-123451234567890); |
677 | test_fenv(); | 714 | test_fenv(); |
715 | + if (TEST_CMOV) { | ||
716 | + test_fcmov(); | ||
717 | + } | ||
678 | } | 718 | } |
679 | 719 | ||
680 | /**********************************************/ | 720 | /**********************************************/ |