Revision 55480af8 tests/test-i386.c
b/tests/test-i386.c | ||
---|---|---|
446 | 446 |
TEST_BSX(bsfl, "", 0x00340128); |
447 | 447 |
} |
448 | 448 |
|
449 |
/**********************************************/ |
|
450 |
|
|
449 | 451 |
void test_fops(double a, double b) |
450 | 452 |
{ |
451 | 453 |
printf("a=%f b=%f a+b=%f\n", a, b, a + b); |
... | ... | |
540 | 542 |
test_fbcd(-123451234567890); |
541 | 543 |
} |
542 | 544 |
|
545 |
/**********************************************/ |
|
546 |
|
|
547 |
#define TEST_BCD(op, op0, cc_in, cc_mask)\ |
|
548 |
{\ |
|
549 |
int res, flags;\ |
|
550 |
res = op0;\ |
|
551 |
flags = cc_in;\ |
|
552 |
asm ("push %3\n\t"\ |
|
553 |
"popf\n\t"\ |
|
554 |
#op "\n\t"\ |
|
555 |
"pushf\n\t"\ |
|
556 |
"popl %1\n\t"\ |
|
557 |
: "=a" (res), "=g" (flags)\ |
|
558 |
: "0" (res), "1" (flags));\ |
|
559 |
printf("%-10s A=%08x R=%08x CCIN=%04x CC=%04x\n",\ |
|
560 |
#op, op0, res, cc_in, flags & cc_mask);\ |
|
561 |
} |
|
562 |
|
|
563 |
void test_bcd(void) |
|
564 |
{ |
|
565 |
TEST_BCD(daa, 0x12340503, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
566 |
TEST_BCD(daa, 0x12340506, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
567 |
TEST_BCD(daa, 0x12340507, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
568 |
TEST_BCD(daa, 0x12340559, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
569 |
TEST_BCD(daa, 0x12340560, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
570 |
TEST_BCD(daa, 0x1234059f, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
571 |
TEST_BCD(daa, 0x123405a0, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
572 |
TEST_BCD(daa, 0x12340503, 0, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
573 |
TEST_BCD(daa, 0x12340506, 0, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
574 |
TEST_BCD(daa, 0x12340503, CC_C, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
575 |
TEST_BCD(daa, 0x12340506, CC_C, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
576 |
TEST_BCD(daa, 0x12340503, CC_C | CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
577 |
TEST_BCD(daa, 0x12340506, CC_C | CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
578 |
|
|
579 |
TEST_BCD(das, 0x12340503, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
580 |
TEST_BCD(das, 0x12340506, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
581 |
TEST_BCD(das, 0x12340507, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
582 |
TEST_BCD(das, 0x12340559, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
583 |
TEST_BCD(das, 0x12340560, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
584 |
TEST_BCD(das, 0x1234059f, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
585 |
TEST_BCD(das, 0x123405a0, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
586 |
TEST_BCD(das, 0x12340503, 0, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
587 |
TEST_BCD(das, 0x12340506, 0, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
588 |
TEST_BCD(das, 0x12340503, CC_C, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
589 |
TEST_BCD(das, 0x12340506, CC_C, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
590 |
TEST_BCD(das, 0x12340503, CC_C | CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
591 |
TEST_BCD(das, 0x12340506, CC_C | CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A)); |
|
592 |
|
|
593 |
TEST_BCD(aaa, 0x12340205, CC_A, (CC_C | CC_A)); |
|
594 |
TEST_BCD(aaa, 0x12340306, CC_A, (CC_C | CC_A)); |
|
595 |
TEST_BCD(aaa, 0x1234040a, CC_A, (CC_C | CC_A)); |
|
596 |
TEST_BCD(aaa, 0x123405fa, CC_A, (CC_C | CC_A)); |
|
597 |
TEST_BCD(aaa, 0x12340205, 0, (CC_C | CC_A)); |
|
598 |
TEST_BCD(aaa, 0x12340306, 0, (CC_C | CC_A)); |
|
599 |
TEST_BCD(aaa, 0x1234040a, 0, (CC_C | CC_A)); |
|
600 |
TEST_BCD(aaa, 0x123405fa, 0, (CC_C | CC_A)); |
|
601 |
|
|
602 |
TEST_BCD(aas, 0x12340205, CC_A, (CC_C | CC_A)); |
|
603 |
TEST_BCD(aas, 0x12340306, CC_A, (CC_C | CC_A)); |
|
604 |
TEST_BCD(aas, 0x1234040a, CC_A, (CC_C | CC_A)); |
|
605 |
TEST_BCD(aas, 0x123405fa, CC_A, (CC_C | CC_A)); |
|
606 |
TEST_BCD(aas, 0x12340205, 0, (CC_C | CC_A)); |
|
607 |
TEST_BCD(aas, 0x12340306, 0, (CC_C | CC_A)); |
|
608 |
TEST_BCD(aas, 0x1234040a, 0, (CC_C | CC_A)); |
|
609 |
TEST_BCD(aas, 0x123405fa, 0, (CC_C | CC_A)); |
|
610 |
|
|
611 |
TEST_BCD(aam, 0x12340547, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_O | CC_A)); |
|
612 |
TEST_BCD(aad, 0x12340407, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_O | CC_A)); |
|
613 |
} |
|
614 |
|
|
615 |
|
|
543 | 616 |
static void *call_end __init_call = NULL; |
544 | 617 |
|
545 | 618 |
int main(int argc, char **argv) |
... | ... | |
557 | 630 |
test_jcc(); |
558 | 631 |
test_lea(); |
559 | 632 |
test_floats(); |
633 |
test_bcd(); |
|
560 | 634 |
return 0; |
561 | 635 |
} |
Also available in: Unified diff