added bcd test
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@26 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
7d13299d07
commit
55480af80e
|
@ -446,6 +446,8 @@ void test_bsx(void)
|
||||||
TEST_BSX(bsfl, "", 0x00340128);
|
TEST_BSX(bsfl, "", 0x00340128);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**********************************************/
|
||||||
|
|
||||||
void test_fops(double a, double b)
|
void test_fops(double a, double b)
|
||||||
{
|
{
|
||||||
printf("a=%f b=%f a+b=%f\n", a, b, a + b);
|
printf("a=%f b=%f a+b=%f\n", a, b, a + b);
|
||||||
|
@ -540,6 +542,77 @@ void test_floats(void)
|
||||||
test_fbcd(-123451234567890);
|
test_fbcd(-123451234567890);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**********************************************/
|
||||||
|
|
||||||
|
#define TEST_BCD(op, op0, cc_in, cc_mask)\
|
||||||
|
{\
|
||||||
|
int res, flags;\
|
||||||
|
res = op0;\
|
||||||
|
flags = cc_in;\
|
||||||
|
asm ("push %3\n\t"\
|
||||||
|
"popf\n\t"\
|
||||||
|
#op "\n\t"\
|
||||||
|
"pushf\n\t"\
|
||||||
|
"popl %1\n\t"\
|
||||||
|
: "=a" (res), "=g" (flags)\
|
||||||
|
: "0" (res), "1" (flags));\
|
||||||
|
printf("%-10s A=%08x R=%08x CCIN=%04x CC=%04x\n",\
|
||||||
|
#op, op0, res, cc_in, flags & cc_mask);\
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_bcd(void)
|
||||||
|
{
|
||||||
|
TEST_BCD(daa, 0x12340503, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
TEST_BCD(daa, 0x12340506, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
TEST_BCD(daa, 0x12340507, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
TEST_BCD(daa, 0x12340559, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
TEST_BCD(daa, 0x12340560, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
TEST_BCD(daa, 0x1234059f, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
TEST_BCD(daa, 0x123405a0, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
TEST_BCD(daa, 0x12340503, 0, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
TEST_BCD(daa, 0x12340506, 0, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
TEST_BCD(daa, 0x12340503, CC_C, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
TEST_BCD(daa, 0x12340506, CC_C, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
TEST_BCD(daa, 0x12340503, CC_C | CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
TEST_BCD(daa, 0x12340506, CC_C | CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
|
||||||
|
TEST_BCD(das, 0x12340503, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
TEST_BCD(das, 0x12340506, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
TEST_BCD(das, 0x12340507, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
TEST_BCD(das, 0x12340559, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
TEST_BCD(das, 0x12340560, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
TEST_BCD(das, 0x1234059f, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
TEST_BCD(das, 0x123405a0, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
TEST_BCD(das, 0x12340503, 0, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
TEST_BCD(das, 0x12340506, 0, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
TEST_BCD(das, 0x12340503, CC_C, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
TEST_BCD(das, 0x12340506, CC_C, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
TEST_BCD(das, 0x12340503, CC_C | CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
TEST_BCD(das, 0x12340506, CC_C | CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_A));
|
||||||
|
|
||||||
|
TEST_BCD(aaa, 0x12340205, CC_A, (CC_C | CC_A));
|
||||||
|
TEST_BCD(aaa, 0x12340306, CC_A, (CC_C | CC_A));
|
||||||
|
TEST_BCD(aaa, 0x1234040a, CC_A, (CC_C | CC_A));
|
||||||
|
TEST_BCD(aaa, 0x123405fa, CC_A, (CC_C | CC_A));
|
||||||
|
TEST_BCD(aaa, 0x12340205, 0, (CC_C | CC_A));
|
||||||
|
TEST_BCD(aaa, 0x12340306, 0, (CC_C | CC_A));
|
||||||
|
TEST_BCD(aaa, 0x1234040a, 0, (CC_C | CC_A));
|
||||||
|
TEST_BCD(aaa, 0x123405fa, 0, (CC_C | CC_A));
|
||||||
|
|
||||||
|
TEST_BCD(aas, 0x12340205, CC_A, (CC_C | CC_A));
|
||||||
|
TEST_BCD(aas, 0x12340306, CC_A, (CC_C | CC_A));
|
||||||
|
TEST_BCD(aas, 0x1234040a, CC_A, (CC_C | CC_A));
|
||||||
|
TEST_BCD(aas, 0x123405fa, CC_A, (CC_C | CC_A));
|
||||||
|
TEST_BCD(aas, 0x12340205, 0, (CC_C | CC_A));
|
||||||
|
TEST_BCD(aas, 0x12340306, 0, (CC_C | CC_A));
|
||||||
|
TEST_BCD(aas, 0x1234040a, 0, (CC_C | CC_A));
|
||||||
|
TEST_BCD(aas, 0x123405fa, 0, (CC_C | CC_A));
|
||||||
|
|
||||||
|
TEST_BCD(aam, 0x12340547, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_O | CC_A));
|
||||||
|
TEST_BCD(aad, 0x12340407, CC_A, (CC_C | CC_P | CC_Z | CC_S | CC_O | CC_A));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void *call_end __init_call = NULL;
|
static void *call_end __init_call = NULL;
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
|
@ -557,5 +630,6 @@ int main(int argc, char **argv)
|
||||||
test_jcc();
|
test_jcc();
|
||||||
test_lea();
|
test_lea();
|
||||||
test_floats();
|
test_floats();
|
||||||
|
test_bcd();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue