|  | //===- subzero/src/IceTargetLoweringARM32.def - ARM32 X-macros --*- C++ -*-===// | 
|  | // | 
|  | //                        The Subzero Code Generator | 
|  | // | 
|  | // This file is distributed under the University of Illinois Open Source | 
|  | // License. See LICENSE.TXT for details. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  | // | 
|  | // This file defines certain patterns for lowering to ARM32 target | 
|  | // instructions, in the form of x-macros. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #ifndef SUBZERO_SRC_ICETARGETLOWERINGARM32_DEF | 
|  | #define SUBZERO_SRC_ICETARGETLOWERINGARM32_DEF | 
|  |  | 
|  | // Patterns for lowering fcmp. These are expected to be used in the following | 
|  | // manner: | 
|  | // | 
|  | // Scalar: | 
|  | //   mov reg, #0 | 
|  | //   movCC0 reg, #1 /* only if CC0 != kNone */ | 
|  | //   movCC1 reg, #1 /* only if CC1 != kNone */ | 
|  | // | 
|  | // Vector: | 
|  | //   vcCC0_V Cmp0, Src0, Src1 /* only if CC0_V != none */ | 
|  | //   vcCC1_V Cmp1, Src1, Src0 /* only if CC1_V != none */ | 
|  | //   vorr    Cmp2, Cmp0, Cmp1 /* only if CC1_V != none */ | 
|  | //   vmvn    Reg3, Cmp?       /* only if NEG_V = true */ | 
|  | // | 
|  | //   If INV_V = true, then Src0 and Src1 should be swapped. | 
|  | // | 
|  | #define FCMPARM32_TABLE                                                        \ | 
|  | /*val  , CC0  , CC1  , CC0_V, CC1_V, INV_V, NEG_V */                         \ | 
|  | X(False, kNone, kNone, none , none , false, false)                           \ | 
|  | X(Oeq  , EQ   , kNone, eq   , none , false, false)                           \ | 
|  | X(Ogt  , GT   , kNone, gt   , none , false, false)                           \ | 
|  | X(Oge  , GE   , kNone, ge   , none , false, false)                           \ | 
|  | X(Olt  , MI   , kNone, gt   , none , true , false)                           \ | 
|  | X(Ole  , LS   , kNone, ge   , none , true , false)                           \ | 
|  | X(One  , MI   , GT   , gt   , gt   , false, false)                           \ | 
|  | X(Ord  , VC   , kNone, ge   , gt   , false, false)                           \ | 
|  | X(Ueq  , EQ   , VS   , gt   , gt   , false, true)                            \ | 
|  | X(Ugt  , HI   , kNone, ge   , none , true , true)                            \ | 
|  | X(Uge  , PL   , kNone, gt   , none , true , true)                            \ | 
|  | X(Ult  , LT   , kNone, ge   , none , false, true)                            \ | 
|  | X(Ule  , LE   , kNone, gt   , none , false, true)                            \ | 
|  | X(Une  , NE   , kNone, eq   , none , false, true)                            \ | 
|  | X(Uno  , VS   , kNone, ge   , gt   , false, true)                            \ | 
|  | X(True , AL   , kNone, none , none , false, false) | 
|  | //#define X(val, CC0, CC1, CC0_V, CC1_V, INV_V, NEG_V) | 
|  |  | 
|  | // Patterns for lowering icmp. | 
|  | #define ICMPARM32_TABLE                                                       \ | 
|  | /*val, is_signed, swapped64, C_32, C1_64, C2_64, C_V, INV_V, NEG_V */       \ | 
|  | X(Eq , false    , false    , EQ,   EQ   , NE   , eq , false, false)         \ | 
|  | X(Ne , false    , false    , NE,   NE   , EQ   , eq , false, true)          \ | 
|  | X(Ugt, false    , false    , HI,   HI   , LS   , gt , false, false)         \ | 
|  | X(Uge, false    , false    , CS,   CS   , CC   , ge , false, false)         \ | 
|  | X(Ult, false    , false    , CC,   CC   , CS   , gt , true , false)         \ | 
|  | X(Ule, false    , false    , LS,   LS   , HI   , ge , true , false)         \ | 
|  | X(Sgt, true     , true     , GT,   LT   , GE   , gt , false, false)         \ | 
|  | X(Sge, true     , false    , GE,   GE   , LT   , ge , false, false)         \ | 
|  | X(Slt, true     , false    , LT,   LT   , GE   , gt , true , false)         \ | 
|  | X(Sle, true     , true     , LE,   GE   , LT   , ge , true , false) | 
|  | //#define X(val, is_signed, swapped64, C_32, C1_64, C2_64, C_V, INV_V, NEG_V) | 
|  |  | 
|  | #endif // SUBZERO_SRC_ICETARGETLOWERINGARM32_DEF |