@@ -126,32 +126,12 @@ GTNODE(UMOD , GenTreeOp ,0,GTK_BINOP)
126
126
GTNODE (OR , GenTreeOp ,1 ,(GTK_BINOP |GTK_LOGOP ))
127
127
GTNODE (XOR , GenTreeOp ,1 ,(GTK_BINOP |GTK_LOGOP ))
128
128
GTNODE (AND , GenTreeOp ,1 ,(GTK_BINOP |GTK_LOGOP ))
129
- GTNODE (AND_NOT , GenTreeOp ,0 ,GTK_BINOP )
130
129
131
130
GTNODE (LSH , GenTreeOp ,0 ,GTK_BINOP )
132
131
GTNODE (RSH , GenTreeOp ,0 ,GTK_BINOP )
133
132
GTNODE (RSZ , GenTreeOp ,0 ,GTK_BINOP )
134
133
GTNODE (ROL , GenTreeOp ,0 ,GTK_BINOP )
135
134
GTNODE (ROR , GenTreeOp ,0 ,GTK_BINOP )
136
- GTNODE (INC_SATURATE , GenTreeOp ,0 ,GTK_UNOP ) // saturating increment, used in division by a constant (LowerUnsignedDivOrMod)
137
-
138
- // Returns high bits (top N bits of the 2N bit result of an NxN multiply)
139
- // GT_MULHI is used in division by a constant (LowerUnsignedDivOrMod). We turn
140
- // the div into a MULHI + some adjustments. In codegen, we only use the
141
- // results of the high register, and we drop the low results.
142
- GTNODE (MULHI , GenTreeOp ,1 ,GTK_BINOP )
143
-
144
- // A mul that returns the 2N bit result of an NxN multiply. This op is used for
145
- // multiplies that take two ints and return a long result. For 32 bit targets,
146
- // all other multiplies with long results are morphed into helper calls.
147
- // It is similar to GT_MULHI, the difference being that GT_MULHI drops the lo
148
- // part of the result, whereas GT_MUL_LONG keeps both parts of the result.
149
- // MUL_LONG is also used on ARM64, where 64 bit multiplication is more expensive.
150
- #if !defined(TARGET_64BIT )
151
- GTNODE (MUL_LONG , GenTreeMultiRegOp ,1 ,GTK_BINOP )
152
- #elif defined(TARGET_ARM64 )
153
- GTNODE (MUL_LONG , GenTreeOp ,1 ,GTK_BINOP )
154
- #endif
155
135
156
136
GTNODE (ASG , GenTreeOp ,0 ,(GTK_BINOP |GTK_NOTLIR ))
157
137
GTNODE (EQ , GenTreeOp ,0 ,(GTK_BINOP |GTK_RELOP ))
@@ -220,6 +200,31 @@ GTNODE(SIMD , GenTreeSIMD ,0,(GTK_BINOP|GTK_EXOP)) // SIM
220
200
GTNODE (HWINTRINSIC , GenTreeHWIntrinsic ,0 ,(GTK_BINOP |GTK_EXOP )) // hardware intrinsics
221
201
#endif // FEATURE_HW_INTRINSICS
222
202
203
+ //-----------------------------------------------------------------------------
204
+ // Backend-specific arithmetic nodes:
205
+ //-----------------------------------------------------------------------------
206
+
207
+ GTNODE (INC_SATURATE , GenTreeOp ,0 ,GTK_UNOP ) // saturating increment, used in division by a constant (LowerUnsignedDivOrMod)
208
+
209
+ // Returns high bits (top N bits of the 2N bit result of an NxN multiply)
210
+ // GT_MULHI is used in division by a constant (LowerUnsignedDivOrMod). We turn
211
+ // the div into a MULHI + some adjustments. In codegen, we only use the
212
+ // results of the high register, and we drop the low results.
213
+ GTNODE (MULHI , GenTreeOp ,1 ,GTK_BINOP )
214
+
215
+ // A mul that returns the 2N bit result of an NxN multiply. This op is used for
216
+ // multiplies that take two ints and return a long result. For 32 bit targets,
217
+ // all other multiplies with long results are morphed into helper calls.
218
+ // It is similar to GT_MULHI, the difference being that GT_MULHI drops the lo
219
+ // part of the result, whereas GT_MUL_LONG keeps both parts of the result.
220
+ // MUL_LONG is also used on ARM64, where 64 bit multiplication is more expensive.
221
+ #if !defined(TARGET_64BIT )
222
+ GTNODE (MUL_LONG , GenTreeMultiRegOp ,1 ,GTK_BINOP )
223
+ #elif defined(TARGET_ARM64 )
224
+ GTNODE (MUL_LONG , GenTreeOp ,1 ,GTK_BINOP )
225
+ #endif
226
+ // AndNot - emitted on ARM/ARM64 as the BIC instruction. Also used for creating AndNot HWINTRINSIC vector nodes in a cross-ISA manner.
227
+ GTNODE (AND_NOT , GenTreeOp ,0 ,GTK_BINOP )
223
228
//-----------------------------------------------------------------------------
224
229
// LIR specific compare and conditional branch/set nodes:
225
230
//-----------------------------------------------------------------------------
0 commit comments