1*03ce13f7SAndroid Build Coastguard Worker//===- subzero/src/IceTargetLoweringARM32.def - ARM32 X-macros --*- C++ -*-===// 2*03ce13f7SAndroid Build Coastguard Worker// 3*03ce13f7SAndroid Build Coastguard Worker// The Subzero Code Generator 4*03ce13f7SAndroid Build Coastguard Worker// 5*03ce13f7SAndroid Build Coastguard Worker// This file is distributed under the University of Illinois Open Source 6*03ce13f7SAndroid Build Coastguard Worker// License. See LICENSE.TXT for details. 7*03ce13f7SAndroid Build Coastguard Worker// 8*03ce13f7SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 9*03ce13f7SAndroid Build Coastguard Worker// 10*03ce13f7SAndroid Build Coastguard Worker// This file defines certain patterns for lowering to ARM32 target 11*03ce13f7SAndroid Build Coastguard Worker// instructions, in the form of x-macros. 12*03ce13f7SAndroid Build Coastguard Worker// 13*03ce13f7SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 14*03ce13f7SAndroid Build Coastguard Worker 15*03ce13f7SAndroid Build Coastguard Worker#ifndef SUBZERO_SRC_ICETARGETLOWERINGARM32_DEF 16*03ce13f7SAndroid Build Coastguard Worker#define SUBZERO_SRC_ICETARGETLOWERINGARM32_DEF 17*03ce13f7SAndroid Build Coastguard Worker 18*03ce13f7SAndroid Build Coastguard Worker// Patterns for lowering fcmp. These are expected to be used in the following 19*03ce13f7SAndroid Build Coastguard Worker// manner: 20*03ce13f7SAndroid Build Coastguard Worker// 21*03ce13f7SAndroid Build Coastguard Worker// Scalar: 22*03ce13f7SAndroid Build Coastguard Worker// mov reg, #0 23*03ce13f7SAndroid Build Coastguard Worker// movCC0 reg, #1 /* only if CC0 != kNone */ 24*03ce13f7SAndroid Build Coastguard Worker// movCC1 reg, #1 /* only if CC1 != kNone */ 25*03ce13f7SAndroid Build Coastguard Worker// 26*03ce13f7SAndroid Build Coastguard Worker// Vector: 27*03ce13f7SAndroid Build Coastguard Worker// vcCC0_V Cmp0, Src0, Src1 /* only if CC0_V != none */ 28*03ce13f7SAndroid Build Coastguard Worker// vcCC1_V Cmp1, Src1, Src0 /* only if CC1_V != none */ 29*03ce13f7SAndroid Build Coastguard Worker// vorr Cmp2, Cmp0, Cmp1 /* only if CC1_V != none */ 30*03ce13f7SAndroid Build Coastguard Worker// vmvn Reg3, Cmp? /* only if NEG_V = true */ 31*03ce13f7SAndroid Build Coastguard Worker// 32*03ce13f7SAndroid Build Coastguard Worker// If INV_V = true, then Src0 and Src1 should be swapped. 33*03ce13f7SAndroid Build Coastguard Worker// 34*03ce13f7SAndroid Build Coastguard Worker#define FCMPARM32_TABLE \ 35*03ce13f7SAndroid Build Coastguard Worker /*val , CC0 , CC1 , CC0_V, CC1_V, INV_V, NEG_V */ \ 36*03ce13f7SAndroid Build Coastguard Worker X(False, kNone, kNone, none , none , false, false) \ 37*03ce13f7SAndroid Build Coastguard Worker X(Oeq , EQ , kNone, eq , none , false, false) \ 38*03ce13f7SAndroid Build Coastguard Worker X(Ogt , GT , kNone, gt , none , false, false) \ 39*03ce13f7SAndroid Build Coastguard Worker X(Oge , GE , kNone, ge , none , false, false) \ 40*03ce13f7SAndroid Build Coastguard Worker X(Olt , MI , kNone, gt , none , true , false) \ 41*03ce13f7SAndroid Build Coastguard Worker X(Ole , LS , kNone, ge , none , true , false) \ 42*03ce13f7SAndroid Build Coastguard Worker X(One , MI , GT , gt , gt , false, false) \ 43*03ce13f7SAndroid Build Coastguard Worker X(Ord , VC , kNone, ge , gt , false, false) \ 44*03ce13f7SAndroid Build Coastguard Worker X(Ueq , EQ , VS , gt , gt , false, true) \ 45*03ce13f7SAndroid Build Coastguard Worker X(Ugt , HI , kNone, ge , none , true , true) \ 46*03ce13f7SAndroid Build Coastguard Worker X(Uge , PL , kNone, gt , none , true , true) \ 47*03ce13f7SAndroid Build Coastguard Worker X(Ult , LT , kNone, ge , none , false, true) \ 48*03ce13f7SAndroid Build Coastguard Worker X(Ule , LE , kNone, gt , none , false, true) \ 49*03ce13f7SAndroid Build Coastguard Worker X(Une , NE , kNone, eq , none , false, true) \ 50*03ce13f7SAndroid Build Coastguard Worker X(Uno , VS , kNone, ge , gt , false, true) \ 51*03ce13f7SAndroid Build Coastguard Worker X(True , AL , kNone, none , none , false, false) 52*03ce13f7SAndroid Build Coastguard Worker//#define X(val, CC0, CC1, CC0_V, CC1_V, INV_V, NEG_V) 53*03ce13f7SAndroid Build Coastguard Worker 54*03ce13f7SAndroid Build Coastguard Worker// Patterns for lowering icmp. 55*03ce13f7SAndroid Build Coastguard Worker#define ICMPARM32_TABLE \ 56*03ce13f7SAndroid Build Coastguard Worker /*val, is_signed, swapped64, C_32, C1_64, C2_64, C_V, INV_V, NEG_V */ \ 57*03ce13f7SAndroid Build Coastguard Worker X(Eq , false , false , EQ, EQ , NE , eq , false, false) \ 58*03ce13f7SAndroid Build Coastguard Worker X(Ne , false , false , NE, NE , EQ , eq , false, true) \ 59*03ce13f7SAndroid Build Coastguard Worker X(Ugt, false , false , HI, HI , LS , gt , false, false) \ 60*03ce13f7SAndroid Build Coastguard Worker X(Uge, false , false , CS, CS , CC , ge , false, false) \ 61*03ce13f7SAndroid Build Coastguard Worker X(Ult, false , false , CC, CC , CS , gt , true , false) \ 62*03ce13f7SAndroid Build Coastguard Worker X(Ule, false , false , LS, LS , HI , ge , true , false) \ 63*03ce13f7SAndroid Build Coastguard Worker X(Sgt, true , true , GT, LT , GE , gt , false, false) \ 64*03ce13f7SAndroid Build Coastguard Worker X(Sge, true , false , GE, GE , LT , ge , false, false) \ 65*03ce13f7SAndroid Build Coastguard Worker X(Slt, true , false , LT, LT , GE , gt , true , false) \ 66*03ce13f7SAndroid Build Coastguard Worker X(Sle, true , true , LE, GE , LT , ge , true , false) 67*03ce13f7SAndroid Build Coastguard Worker//#define X(val, is_signed, swapped64, C_32, C1_64, C2_64, C_V, INV_V, NEG_V) 68*03ce13f7SAndroid Build Coastguard Worker 69*03ce13f7SAndroid Build Coastguard Worker#endif // SUBZERO_SRC_ICETARGETLOWERINGARM32_DEF 70