xref: /aosp_15_r20/external/swiftshader/third_party/subzero/src/IceInst.def (revision 03ce13f70fcc45d86ee91b7ee4cab1936a95046e)
1*03ce13f7SAndroid Build Coastguard Worker//===- subzero/src/IceInst.def - X-macros for ICE instructions  -*- 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 properties of ICE instructions in the form of x-macros.
11*03ce13f7SAndroid Build Coastguard Worker//
12*03ce13f7SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
13*03ce13f7SAndroid Build Coastguard Worker
14*03ce13f7SAndroid Build Coastguard Worker#ifndef SUBZERO_SRC_ICEINST_DEF
15*03ce13f7SAndroid Build Coastguard Worker#define SUBZERO_SRC_ICEINST_DEF
16*03ce13f7SAndroid Build Coastguard Worker
17*03ce13f7SAndroid Build Coastguard Worker// Floating point addition and multiplication are commutative.
18*03ce13f7SAndroid Build Coastguard Worker// 1) non-special values and infinities are required to commute.
19*03ce13f7SAndroid Build Coastguard Worker// 2) signed zeroes are handled by:
20*03ce13f7SAndroid Build Coastguard Worker//    From IEEE standard 754-2008:
21*03ce13f7SAndroid Build Coastguard Worker//      When the sum of two operands with opposite signs (or the difference of
22*03ce13f7SAndroid Build Coastguard Worker//      two operands with like signs) is exactly zero, the sign of that sum
23*03ce13f7SAndroid Build Coastguard Worker//      (or difference) shall be +0 in all rounding-direction attributes
24*03ce13f7SAndroid Build Coastguard Worker//      except roundTowardNegative; under that attribute, the sign of an exact
25*03ce13f7SAndroid Build Coastguard Worker//      zero sum (or difference) shall be −0.
26*03ce13f7SAndroid Build Coastguard Worker// 3) NaNs are handled by:
27*03ce13f7SAndroid Build Coastguard Worker//    http://grouper.ieee.org/groups/1788/email/msg03558.html
28*03ce13f7SAndroid Build Coastguard Worker//      clause of 754 at work is 6.2.3 NaN propagation:
29*03ce13f7SAndroid Build Coastguard Worker//      "If two or more inputs are NaN, then the payload of the resulting NaN
30*03ce13f7SAndroid Build Coastguard Worker//      should be identical to the payload of one of the input NaNs if
31*03ce13f7SAndroid Build Coastguard Worker//      representable in the destination format. This standard does not
32*03ce13f7SAndroid Build Coastguard Worker//      specify which of the input NaNs will provide the payload."
33*03ce13f7SAndroid Build Coastguard Worker
34*03ce13f7SAndroid Build Coastguard Worker#define ICEINSTARITHMETIC_TABLE                                                \
35*03ce13f7SAndroid Build Coastguard Worker  /* enum value, printable string, commutative */                              \
36*03ce13f7SAndroid Build Coastguard Worker  X(Add,         "add",            1)                                          \
37*03ce13f7SAndroid Build Coastguard Worker  X(Fadd,        "fadd",           1)                                          \
38*03ce13f7SAndroid Build Coastguard Worker  X(Sub,         "sub",            0)                                          \
39*03ce13f7SAndroid Build Coastguard Worker  X(Fsub,        "fsub",           0)                                          \
40*03ce13f7SAndroid Build Coastguard Worker  X(Mul,         "mul",            1)                                          \
41*03ce13f7SAndroid Build Coastguard Worker  X(Fmul,        "fmul",           1)                                          \
42*03ce13f7SAndroid Build Coastguard Worker  X(Udiv,        "udiv",           0)                                          \
43*03ce13f7SAndroid Build Coastguard Worker  X(Sdiv,        "sdiv",           0)                                          \
44*03ce13f7SAndroid Build Coastguard Worker  X(Fdiv,        "fdiv",           0)                                          \
45*03ce13f7SAndroid Build Coastguard Worker  X(Urem,        "urem",           0)                                          \
46*03ce13f7SAndroid Build Coastguard Worker  X(Srem,        "srem",           0)                                          \
47*03ce13f7SAndroid Build Coastguard Worker  X(Frem,        "frem",           0)                                          \
48*03ce13f7SAndroid Build Coastguard Worker  X(Shl,         "shl",            0)                                          \
49*03ce13f7SAndroid Build Coastguard Worker  X(Lshr,        "lshr",           0)                                          \
50*03ce13f7SAndroid Build Coastguard Worker  X(Ashr,        "ashr",           0)                                          \
51*03ce13f7SAndroid Build Coastguard Worker  X(And,         "and",            1)                                          \
52*03ce13f7SAndroid Build Coastguard Worker  X(Or,          "or",             1)                                          \
53*03ce13f7SAndroid Build Coastguard Worker  X(Xor,         "xor",            1)
54*03ce13f7SAndroid Build Coastguard Worker//#define X(tag, str, commutative)
55*03ce13f7SAndroid Build Coastguard Worker
56*03ce13f7SAndroid Build Coastguard Worker#define ICEINSTCAST_TABLE                                                      \
57*03ce13f7SAndroid Build Coastguard Worker  /* enum value, printable string */                                           \
58*03ce13f7SAndroid Build Coastguard Worker  X(Trunc,       "trunc")                                                      \
59*03ce13f7SAndroid Build Coastguard Worker  X(Zext,        "zext")                                                       \
60*03ce13f7SAndroid Build Coastguard Worker  X(Sext,        "sext")                                                       \
61*03ce13f7SAndroid Build Coastguard Worker  X(Fptrunc,     "fptrunc")                                                    \
62*03ce13f7SAndroid Build Coastguard Worker  X(Fpext,       "fpext")                                                      \
63*03ce13f7SAndroid Build Coastguard Worker  X(Fptoui,      "fptoui")                                                     \
64*03ce13f7SAndroid Build Coastguard Worker  X(Fptosi,      "fptosi")                                                     \
65*03ce13f7SAndroid Build Coastguard Worker  X(Uitofp,      "uitofp")                                                     \
66*03ce13f7SAndroid Build Coastguard Worker  X(Sitofp,      "sitofp")                                                     \
67*03ce13f7SAndroid Build Coastguard Worker  X(Bitcast,     "bitcast")
68*03ce13f7SAndroid Build Coastguard Worker//#define X(tag, str)
69*03ce13f7SAndroid Build Coastguard Worker
70*03ce13f7SAndroid Build Coastguard Worker#define ICEINSTFCMP_TABLE                                                      \
71*03ce13f7SAndroid Build Coastguard Worker  /* enum value, printable string */                                           \
72*03ce13f7SAndroid Build Coastguard Worker  X(False,       "false")                                                      \
73*03ce13f7SAndroid Build Coastguard Worker  X(Oeq,         "oeq")                                                        \
74*03ce13f7SAndroid Build Coastguard Worker  X(Ogt,         "ogt")                                                        \
75*03ce13f7SAndroid Build Coastguard Worker  X(Oge,         "oge")                                                        \
76*03ce13f7SAndroid Build Coastguard Worker  X(Olt,         "olt")                                                        \
77*03ce13f7SAndroid Build Coastguard Worker  X(Ole,         "ole")                                                        \
78*03ce13f7SAndroid Build Coastguard Worker  X(One,         "one")                                                        \
79*03ce13f7SAndroid Build Coastguard Worker  X(Ord,         "ord")                                                        \
80*03ce13f7SAndroid Build Coastguard Worker  X(Ueq,         "ueq")                                                        \
81*03ce13f7SAndroid Build Coastguard Worker  X(Ugt,         "ugt")                                                        \
82*03ce13f7SAndroid Build Coastguard Worker  X(Uge,         "uge")                                                        \
83*03ce13f7SAndroid Build Coastguard Worker  X(Ult,         "ult")                                                        \
84*03ce13f7SAndroid Build Coastguard Worker  X(Ule,         "ule")                                                        \
85*03ce13f7SAndroid Build Coastguard Worker  X(Une,         "une")                                                        \
86*03ce13f7SAndroid Build Coastguard Worker  X(Uno,         "uno")                                                        \
87*03ce13f7SAndroid Build Coastguard Worker  X(True,        "true")
88*03ce13f7SAndroid Build Coastguard Worker//#define X(tag, str)
89*03ce13f7SAndroid Build Coastguard Worker
90*03ce13f7SAndroid Build Coastguard Worker#define ICEINSTICMP_TABLE                                                      \
91*03ce13f7SAndroid Build Coastguard Worker  /* enum value, reverse, printable string */                                  \
92*03ce13f7SAndroid Build Coastguard Worker  X(Eq,          Eq,      "eq")                                                \
93*03ce13f7SAndroid Build Coastguard Worker  X(Ne,          Ne,      "ne")                                                \
94*03ce13f7SAndroid Build Coastguard Worker  X(Ugt,         Ult,     "ugt")                                               \
95*03ce13f7SAndroid Build Coastguard Worker  X(Uge,         Ule,     "uge")                                               \
96*03ce13f7SAndroid Build Coastguard Worker  X(Ult,         Ugt,     "ult")                                               \
97*03ce13f7SAndroid Build Coastguard Worker  X(Ule,         Uge,     "ule")                                               \
98*03ce13f7SAndroid Build Coastguard Worker  X(Sgt,         Slt,     "sgt")                                               \
99*03ce13f7SAndroid Build Coastguard Worker  X(Sge,         Sle,     "sge")                                               \
100*03ce13f7SAndroid Build Coastguard Worker  X(Slt,         Sgt,     "slt")                                               \
101*03ce13f7SAndroid Build Coastguard Worker  X(Sle,         Sge,     "sle")
102*03ce13f7SAndroid Build Coastguard Worker//#define X(tag, reverse, str)
103*03ce13f7SAndroid Build Coastguard Worker
104*03ce13f7SAndroid Build Coastguard Worker#endif // SUBZERO_SRC_ICEINST_DEF
105