Lower the fcmp instruction for <4 x float> operands.

Most fcmp conditions map directly to single x86 instructions. For
these, the lowering is table driven.

BUG=none
R=jvoung@chromium.org, stichnot@chromium.org

Review URL: https://codereview.chromium.org/413053002
diff --git a/src/IceTargetLoweringX8632.def b/src/IceTargetLoweringX8632.def
index b88091a..5dc1d13 100644
--- a/src/IceTargetLoweringX8632.def
+++ b/src/IceTargetLoweringX8632.def
@@ -15,25 +15,26 @@
 #ifndef SUBZERO_SRC_ICETARGETLOWERINGX8632_DEF
 #define SUBZERO_SRC_ICETARGETLOWERINGX8632_DEF
 
-#define FCMPX8632_TABLE                  \
-  /* val,  dflt, swap, C1,      C2 */    \
-  X(False, 0,    0,    Br_None, Br_None) \
-  X(Oeq,   0,    0,    Br_ne,   Br_p)    \
-  X(Ogt,   1,    0,    Br_a,    Br_None) \
-  X(Oge,   1,    0,    Br_ae,   Br_None) \
-  X(Olt,   1,    1,    Br_a,    Br_None) \
-  X(Ole,   1,    1,    Br_ae,   Br_None) \
-  X(One,   1,    0,    Br_ne,   Br_None) \
-  X(Ord,   1,    0,    Br_np,   Br_None) \
-  X(Ueq,   1,    0,    Br_e,    Br_None) \
-  X(Ugt,   1,    1,    Br_b,    Br_None) \
-  X(Uge,   1,    1,    Br_be,   Br_None) \
-  X(Ult,   1,    0,    Br_b,    Br_None) \
-  X(Ule,   1,    0,    Br_be,   Br_None) \
-  X(Une,   1,    0,    Br_ne,   Br_p)    \
-  X(Uno,   1,    0,    Br_p,    Br_None) \
-  X(True,  1,    0,    Br_None, Br_None) \
-//#define X(val, dflt, swap, C1, C2)
+#define FCMPX8632_TABLE                                              \
+  /*       <---- scalar comparison ---->  <- vector comparison -> */ \
+  /* val,  dflt, swap, C1,      C2,       swap,  predicate        */ \
+  X(False, 0,    0,    Br_None, Br_None,  0,     Cmpps_Invalid)      \
+  X(Oeq,   0,    0,    Br_ne,   Br_p,     0,     Cmpps_eq)           \
+  X(Ogt,   1,    0,    Br_a,    Br_None,  1,     Cmpps_lt)           \
+  X(Oge,   1,    0,    Br_ae,   Br_None,  1,     Cmpps_le)           \
+  X(Olt,   1,    1,    Br_a,    Br_None,  0,     Cmpps_lt)           \
+  X(Ole,   1,    1,    Br_ae,   Br_None,  0,     Cmpps_le)           \
+  X(One,   1,    0,    Br_ne,   Br_None,  0,     Cmpps_Invalid)      \
+  X(Ord,   1,    0,    Br_np,   Br_None,  0,     Cmpps_ord)          \
+  X(Ueq,   1,    0,    Br_e,    Br_None,  0,     Cmpps_Invalid)      \
+  X(Ugt,   1,    1,    Br_b,    Br_None,  0,     Cmpps_nle)          \
+  X(Uge,   1,    1,    Br_be,   Br_None,  0,     Cmpps_nlt)          \
+  X(Ult,   1,    0,    Br_b,    Br_None,  1,     Cmpps_nle)          \
+  X(Ule,   1,    0,    Br_be,   Br_None,  1,     Cmpps_nlt)          \
+  X(Une,   1,    0,    Br_ne,   Br_p,     0,     Cmpps_neq)          \
+  X(Uno,   1,    0,    Br_p,    Br_None,  0,     Cmpps_unord)        \
+  X(True,  1,    0,    Br_None, Br_None,  0,     Cmpps_Invalid)      \
+//#define X(val, dflt, swapS, C1, C2, swapV, pred)
 
 #define ICMPX8632_TABLE                     \
   /* val, C_32,  C1_64,   C2_64,   C3_64 */ \