diff options
Diffstat (limited to 'src/jit/gtlist.h')
-rw-r--r-- | src/jit/gtlist.h | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/jit/gtlist.h b/src/jit/gtlist.h index 92265a7359..2d9255b6ce 100644 --- a/src/jit/gtlist.h +++ b/src/jit/gtlist.h @@ -145,6 +145,17 @@ GTNODE(LT , "<" ,GenTreeOp ,0,GTK_BINOP|GTK_RE GTNODE(LE , "<=" ,GenTreeOp ,0,GTK_BINOP|GTK_RELOP) GTNODE(GE , ">=" ,GenTreeOp ,0,GTK_BINOP|GTK_RELOP) GTNODE(GT , ">" ,GenTreeOp ,0,GTK_BINOP|GTK_RELOP) +#ifndef LEGACY_BACKEND +// These are similar to GT_EQ/GT_NE but they generate "test" instead of "cmp" instructions. +// Currently these are generated during lowering for code like ((x & y) eq|ne 0) only on +// XArch but ARM could too use these for the same purpose as there is a "tst" instruction. +// Note that the general case of comparing a register against 0 is handled directly by +// codegen which emits a "test reg, reg" instruction, that would be more difficult to do +// during lowering because the source operand is used twice so it has to be a lclvar. +// Because of this there is no need to also add GT_TEST_LT/LE/GE/GT opers. +GTNODE(TEST_EQ , "testEQ" ,GenTreeOp ,0,GTK_BINOP|GTK_RELOP) +GTNODE(TEST_NE , "testNE" ,GenTreeOp ,0,GTK_BINOP|GTK_RELOP) +#endif GTNODE(COMMA , "comma" ,GenTreeOp ,0,GTK_BINOP|GTK_NOTLIR) @@ -269,7 +280,7 @@ GTNODE(EMITNOP , "emitnop" ,GenTree ,0,GTK_LEAF|GTK_NOV GTNODE(PINVOKE_PROLOG ,"pinvoke_prolog",GenTree ,0,GTK_LEAF|GTK_NOVALUE) // pinvoke prolog seq GTNODE(PINVOKE_EPILOG ,"pinvoke_epilog",GenTree ,0,GTK_LEAF|GTK_NOVALUE) // pinvoke epilog seq GTNODE(PUTARG_REG , "putarg_reg" ,GenTreeOp ,0,GTK_UNOP) // operator that places outgoing arg in register -GTNODE(PUTARG_STK , "putarg_stk" ,GenTreePutArgStk ,0,GTK_UNOP) // operator that places outgoing arg in stack +GTNODE(PUTARG_STK , "putarg_stk" ,GenTreePutArgStk ,0,GTK_UNOP|GTK_NOVALUE) // operator that places outgoing arg in stack GTNODE(RETURNTRAP , "returnTrap" ,GenTreeOp ,0,GTK_UNOP|GTK_NOVALUE) // a conditional call to wait on gc GTNODE(SWAP , "swap" ,GenTreeOp ,0,GTK_BINOP|GTK_NOVALUE) // op1 and op2 swap (registers) GTNODE(IL_OFFSET , "il_offset" ,GenTreeStmt ,0,GTK_LEAF|GTK_NOVALUE) // marks an IL offset for debugging purposes |