From 3bcfb3e000b40dd2c1cbc97d7d86e4e5b2c70a36 Mon Sep 17 00:00:00 2001 From: Julian Seward Date: Sat, 5 Nov 2005 02:33:25 +0000 Subject: [PATCH] Implement vector FP unordered compares on amd64. git-svn-id: svn://svn.valgrind.org/vex/trunk@1439 --- VEX/priv/host-amd64/hdefs.c | 4 ++++ VEX/priv/host-amd64/isel.c | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/VEX/priv/host-amd64/hdefs.c b/VEX/priv/host-amd64/hdefs.c index d361b2333c..3ba3472cdc 100644 --- a/VEX/priv/host-amd64/hdefs.c +++ b/VEX/priv/host-amd64/hdefs.c @@ -3135,6 +3135,7 @@ Int emit_AMD64Instr ( UChar* buf, Int nbuf, AMD64Instr* i ) case Asse_CMPEQF: *p++ = 0xC2; xtra = 0x100; break; case Asse_CMPLTF: *p++ = 0xC2; xtra = 0x101; break; case Asse_CMPLEF: *p++ = 0xC2; xtra = 0x102; break; + case Asse_CMPUNF: *p++ = 0xC2; xtra = 0x103; break; default: goto bad; } p = doAMode_R(p, vreg2ireg(i->Ain.Sse32Fx4.dst), @@ -3163,6 +3164,7 @@ Int emit_AMD64Instr ( UChar* buf, Int nbuf, AMD64Instr* i ) case Asse_CMPEQF: *p++ = 0xC2; xtra = 0x100; break; case Asse_CMPLTF: *p++ = 0xC2; xtra = 0x101; break; case Asse_CMPLEF: *p++ = 0xC2; xtra = 0x102; break; + case Asse_CMPUNF: *p++ = 0xC2; xtra = 0x103; break; default: goto bad; } p = doAMode_R(p, vreg2ireg(i->Ain.Sse64Fx2.dst), @@ -3191,6 +3193,7 @@ Int emit_AMD64Instr ( UChar* buf, Int nbuf, AMD64Instr* i ) case Asse_CMPEQF: *p++ = 0xC2; xtra = 0x100; break; case Asse_CMPLTF: *p++ = 0xC2; xtra = 0x101; break; case Asse_CMPLEF: *p++ = 0xC2; xtra = 0x102; break; + case Asse_CMPUNF: *p++ = 0xC2; xtra = 0x103; break; default: goto bad; } p = doAMode_R(p, vreg2ireg(i->Ain.Sse32FLo.dst), @@ -3219,6 +3222,7 @@ Int emit_AMD64Instr ( UChar* buf, Int nbuf, AMD64Instr* i ) case Asse_CMPEQF: *p++ = 0xC2; xtra = 0x100; break; case Asse_CMPLTF: *p++ = 0xC2; xtra = 0x101; break; case Asse_CMPLEF: *p++ = 0xC2; xtra = 0x102; break; + case Asse_CMPUNF: *p++ = 0xC2; xtra = 0x103; break; default: goto bad; } p = doAMode_R(p, vreg2ireg(i->Ain.Sse64FLo.dst), diff --git a/VEX/priv/host-amd64/isel.c b/VEX/priv/host-amd64/isel.c index 66588dda70..58548886ab 100644 --- a/VEX/priv/host-amd64/isel.c +++ b/VEX/priv/host-amd64/isel.c @@ -3305,6 +3305,7 @@ static HReg iselVecExpr_wrk ( ISelEnv* env, IRExpr* e ) case Iop_CmpEQ32Fx4: op = Asse_CMPEQF; goto do_32Fx4; case Iop_CmpLT32Fx4: op = Asse_CMPLTF; goto do_32Fx4; case Iop_CmpLE32Fx4: op = Asse_CMPLEF; goto do_32Fx4; + case Iop_CmpUN32Fx4: op = Asse_CMPUNF; goto do_32Fx4; case Iop_Add32Fx4: op = Asse_ADDF; goto do_32Fx4; case Iop_Div32Fx4: op = Asse_DIVF; goto do_32Fx4; case Iop_Max32Fx4: op = Asse_MAXF; goto do_32Fx4; @@ -3324,6 +3325,7 @@ static HReg iselVecExpr_wrk ( ISelEnv* env, IRExpr* e ) case Iop_CmpEQ64Fx2: op = Asse_CMPEQF; goto do_64Fx2; case Iop_CmpLT64Fx2: op = Asse_CMPLTF; goto do_64Fx2; case Iop_CmpLE64Fx2: op = Asse_CMPLEF; goto do_64Fx2; + case Iop_CmpUN64Fx2: op = Asse_CMPUNF; goto do_64Fx2; case Iop_Add64Fx2: op = Asse_ADDF; goto do_64Fx2; case Iop_Div64Fx2: op = Asse_DIVF; goto do_64Fx2; case Iop_Max64Fx2: op = Asse_MAXF; goto do_64Fx2; @@ -3343,6 +3345,7 @@ static HReg iselVecExpr_wrk ( ISelEnv* env, IRExpr* e ) case Iop_CmpEQ32F0x4: op = Asse_CMPEQF; goto do_32F0x4; case Iop_CmpLT32F0x4: op = Asse_CMPLTF; goto do_32F0x4; case Iop_CmpLE32F0x4: op = Asse_CMPLEF; goto do_32F0x4; + case Iop_CmpUN32F0x4: op = Asse_CMPUNF; goto do_32F0x4; case Iop_Add32F0x4: op = Asse_ADDF; goto do_32F0x4; case Iop_Div32F0x4: op = Asse_DIVF; goto do_32F0x4; case Iop_Max32F0x4: op = Asse_MAXF; goto do_32F0x4; @@ -3361,6 +3364,7 @@ static HReg iselVecExpr_wrk ( ISelEnv* env, IRExpr* e ) case Iop_CmpEQ64F0x2: op = Asse_CMPEQF; goto do_64F0x2; case Iop_CmpLT64F0x2: op = Asse_CMPLTF; goto do_64F0x2; case Iop_CmpLE64F0x2: op = Asse_CMPLEF; goto do_64F0x2; + case Iop_CmpUN64F0x2: op = Asse_CMPUNF; goto do_64F0x2; case Iop_Add64F0x2: op = Asse_ADDF; goto do_64F0x2; case Iop_Div64F0x2: op = Asse_DIVF; goto do_64F0x2; case Iop_Max64F0x2: op = Asse_MAXF; goto do_64F0x2; -- 2.47.3