From c5e9815da4e67d42d2a0f8dce4282e8e6d691b88 Mon Sep 17 00:00:00 2001 From: bellard Date: Wed, 5 Mar 2003 22:24:26 +0000 Subject: [PATCH] added bcd tests git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@22 c046a42c-6fe2-441c-8c8c-71466251a162 --- tests/Makefile | 5 +---- tests/test-i386.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/tests/Makefile b/tests/Makefile index 7decbf5426..5fc813c236 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -2,7 +2,7 @@ CC=gcc CFLAGS=-Wall -O2 -g LDFLAGS= -TESTS=hello test1 test2 sha1 test-i386 +TESTS=hello test2 sha1 test-i386 TESTS+=op-i386.o #op-i386.o op-ppc.o op-arm.o op-mips.o op-sparc.o GEMU=../gemu @@ -12,9 +12,6 @@ all: $(TESTS) hello: hello.c $(CC) -nostdlib $(CFLAGS) -static $(LDFLAGS) -o $@ $< -test1: test1.c - $(CC) $(CFLAGS) -static $(LDFLAGS) -o $@ $< - test2: test2.c $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< diff --git a/tests/test-i386.c b/tests/test-i386.c index bef997a1aa..86a0709353 100644 --- a/tests/test-i386.c +++ b/tests/test-i386.c @@ -490,6 +490,9 @@ void test_fcvt(double a) la = a; printf("(float)%f = %f\n", a, fa); printf("(long double)%f = %Lf\n", a, la); + printf("a=%016Lx\n", *(long long *)&a); + printf("la=%016Lx %04x\n", *(long long *)&la, + *(unsigned short *)((char *)(&la) + 8)); printf("a=%f floor(a)=%f\n", a, floor(a)); printf("a=%f ceil(a)=%f\n", a, ceil(a)); printf("a=%f rint(a)=%f\n", a, rint(a)); @@ -511,6 +514,17 @@ void test_fconst(void) TEST(z); } +void test_fbcd(double a) +{ + unsigned short bcd[5]; + double b; + + asm("fbstp %0" : "=m" (bcd[0]) : "t" (a) : "st"); + asm("fbld %1" : "=t" (b) : "m" (bcd[0])); + printf("a=%f bcd=%04x%04x%04x%04x%04x b=%f\n", + a, bcd[4], bcd[3], bcd[2], bcd[1], bcd[0], b); +} + void test_floats(void) { test_fops(2, 3); @@ -522,6 +536,8 @@ void test_floats(void) test_fcvt(-1.0/9.0); test_fcvt(1e30); test_fconst(); + test_fbcd(1234567890123456); + test_fbcd(-123451234567890); } static void *call_end __init_call = NULL;