xref: /aosp_15_r20/external/swiftshader/third_party/subzero/src/IceTargetLoweringARM32.def (revision 03ce13f70fcc45d86ee91b7ee4cab1936a95046e)
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