diff options
author | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2006-04-23 21:54:01 +0000 |
---|---|---|
committer | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2006-04-23 21:54:01 +0000 |
commit | 465e983875be3d7c8cb8f53628e090f15417b4f7 (patch) | |
tree | 9dcf9393b1ee0092dfb51661621b685fed85df36 /target-i386/op.c | |
parent | b854608e0c10eb31d545d1fa7db2412522a315f5 (diff) |
SSE3 support (Joachim Henke)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1839 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'target-i386/op.c')
-rw-r--r-- | target-i386/op.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/target-i386/op.c b/target-i386/op.c index 93cc3c42e9..20eeaa4409 100644 --- a/target-i386/op.c +++ b/target-i386/op.c @@ -1911,6 +1911,53 @@ void OPPROTO op_fistll_ST0_A0(void) FORCE_RET(); } +void OPPROTO op_fistt_ST0_A0(void) +{ +#if defined(__sparc__) && !defined(__sparc_v9__) + register CPU86_LDouble d asm("o0"); +#else + CPU86_LDouble d; +#endif + int val; + + d = ST0; + val = floatx_to_int32_round_to_zero(d, &env->fp_status); + if (val != (int16_t)val) + val = -32768; + stw(A0, val); + FORCE_RET(); +} + +void OPPROTO op_fisttl_ST0_A0(void) +{ +#if defined(__sparc__) && !defined(__sparc_v9__) + register CPU86_LDouble d asm("o0"); +#else + CPU86_LDouble d; +#endif + int val; + + d = ST0; + val = floatx_to_int32_round_to_zero(d, &env->fp_status); + stl(A0, val); + FORCE_RET(); +} + +void OPPROTO op_fisttll_ST0_A0(void) +{ +#if defined(__sparc__) && !defined(__sparc_v9__) + register CPU86_LDouble d asm("o0"); +#else + CPU86_LDouble d; +#endif + int64_t val; + + d = ST0; + val = floatx_to_int64_round_to_zero(d, &env->fp_status); + stq(A0, val); + FORCE_RET(); +} + void OPPROTO op_fbld_ST0_A0(void) { helper_fbld_ST0_A0(); |