mirror of https://gitee.com/openkylin/qemu.git
more FPU context save tests
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@651 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
bf08806145
commit
6b2b6112f8
|
@ -612,30 +612,21 @@ void test_fbcd(double a)
|
|||
a, bcd[4], bcd[3], bcd[2], bcd[1], bcd[0], b);
|
||||
}
|
||||
|
||||
#define TEST_ENV(env, prefix)\
|
||||
#define TEST_ENV(env, save, restore)\
|
||||
{\
|
||||
memset((env), 0xaa, sizeof(*(env)));\
|
||||
asm("fld1\n"\
|
||||
prefix "fnstenv %1\n"\
|
||||
prefix "fldenv %1\n"\
|
||||
: "=t" (res) : "m" (*(env)));\
|
||||
printf("res=%f\n", res);\
|
||||
for(i=0;i<5;i++)\
|
||||
asm volatile ("fldl %0" : : "m" (dtab[i]));\
|
||||
asm(save " %0\n" : : "m" (*(env)));\
|
||||
asm(restore " %0\n": : "m" (*(env)));\
|
||||
for(i=0;i<5;i++)\
|
||||
asm volatile ("fstpl %0" : "=m" (rtab[i]));\
|
||||
for(i=0;i<5;i++)\
|
||||
printf("res[%d]=%f\n", i, rtab[i]);\
|
||||
printf("fpuc=%04x fpus=%04x fptag=%04x\n",\
|
||||
(env)->fpuc,\
|
||||
(env)->fpus & 0xff00,\
|
||||
(env)->fptag);\
|
||||
memset((env), 0xaa, sizeof(*(env)));\
|
||||
asm("fld1\n"\
|
||||
prefix "fnsave %1\n"\
|
||||
prefix "frstor %1\n"\
|
||||
: "=t" (res) : "m" (*(env)));\
|
||||
printf("res=%f\n", res);\
|
||||
printf("fpuc=%04x fpus=%04x fptag=%04x\n",\
|
||||
(env)->fpuc,\
|
||||
(env)->fpus & 0xff00,\
|
||||
(env)->fptag);\
|
||||
printf("ST(0) = %Lf\n",\
|
||||
(env)->fpregs[0]);\
|
||||
}
|
||||
|
||||
void test_fenv(void)
|
||||
|
@ -657,10 +648,17 @@ void test_fenv(void)
|
|||
uint16_t ignored[4];
|
||||
long double fpregs[8];
|
||||
} float_env16;
|
||||
double res;
|
||||
double dtab[8];
|
||||
double rtab[8];
|
||||
int i;
|
||||
|
||||
TEST_ENV(&float_env16, "data16 ");
|
||||
TEST_ENV(&float_env32, "");
|
||||
for(i=0;i<8;i++)
|
||||
dtab[i] = i + 1;
|
||||
|
||||
TEST_ENV(&float_env16, "data16 fnstenv", "data16 fldenv");
|
||||
TEST_ENV(&float_env16, "data16 fnsave", "data16 frstor");
|
||||
TEST_ENV(&float_env32, "fnstenv", "fldenv");
|
||||
TEST_ENV(&float_env32, "fnsave", "frstor");
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue