From 5c9c85389404a2fce04cc7e875b51c3acf17d31c Mon Sep 17 00:00:00 2001 From: Julian Seward Date: Tue, 13 May 2008 08:51:17 +0000 Subject: [PATCH] Merge r1826 (amd64 support for FUCOMPP). (#161378, #160136) git-svn-id: svn://svn.valgrind.org/vex/branches/VEX_3_3_BRANCH@1842 --- VEX/priv/guest-amd64/toIR.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/VEX/priv/guest-amd64/toIR.c b/VEX/priv/guest-amd64/toIR.c index 28083742ae..7bf474eb7e 100644 --- a/VEX/priv/guest-amd64/toIR.c +++ b/VEX/priv/guest-amd64/toIR.c @@ -5159,19 +5159,20 @@ ULong dis_FPU ( /*OUT*/Bool* decode_ok, get_ST(0), get_ST(r_src)) ); break; -//.. case 0xE9: /* FUCOMPP %st(0),%st(1) */ -//.. DIP("fucompp %%st(0),%%st(1)\n"); -//.. /* This forces C1 to zero, which isn't right. */ -//.. put_C3210( -//.. binop( Iop_And32, -//.. binop(Iop_Shl32, -//.. binop(Iop_CmpF64, get_ST(0), get_ST(1)), -//.. mkU8(8)), -//.. mkU32(0x4500) -//.. )); -//.. fp_pop(); -//.. fp_pop(); -//.. break; + case 0xE9: /* FUCOMPP %st(0),%st(1) */ + DIP("fucompp %%st(0),%%st(1)\n"); + /* This forces C1 to zero, which isn't right. */ + put_C3210( + unop(Iop_32Uto64, + binop( Iop_And32, + binop(Iop_Shl32, + binop(Iop_CmpF64, get_ST(0), get_ST(1)), + mkU8(8)), + mkU32(0x4500) + ))); + fp_pop(); + fp_pop(); + break; default: goto decode_fail; -- 2.47.2