]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Implement vector FP unordered compares on amd64.
authorJulian Seward <jseward@acm.org>
Sat, 5 Nov 2005 02:33:25 +0000 (02:33 +0000)
committerJulian Seward <jseward@acm.org>
Sat, 5 Nov 2005 02:33:25 +0000 (02:33 +0000)
git-svn-id: svn://svn.valgrind.org/vex/trunk@1439

VEX/priv/host-amd64/hdefs.c
VEX/priv/host-amd64/isel.c

index d361b2333cb6e7e17985790d4121173ad3e0aa61..3ba3472cdccb8fa7e7991cceca8e722f72137d5a 100644 (file)
@@ -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),
index 66588dda70db884b16149b9d57cc59fe15ffe15c..58548886ab225e90efcbca53a6a5b9ca776fe4bc 100644 (file)
@@ -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;