Use emitDataConst in genSSE2BitwiseOp
authorMike Danes <onemihaid@hotmail.com>
Sat, 28 Oct 2017 07:57:05 +0000 (10:57 +0300)
committerMike Danes <onemihaid@hotmail.com>
Sat, 28 Oct 2017 07:57:05 +0000 (10:57 +0300)
src/jit/codegen.h
src/jit/codegenxarch.cpp

index d0eed0e01f61530337581925d047b28499cbe006..9032aa554482b69c1519c2d80d0e409a2b15926b 100644 (file)
@@ -51,15 +51,14 @@ public:
 private:
 #if defined(_TARGET_XARCH_) && !FEATURE_STACK_FP_X87
     // Bit masks used in negating a float or double number.
-    // The below gentrees encapsulate the data offset to the bitmasks as GT_CLS_VAR nodes.
     // This is to avoid creating more than one data constant for these bitmasks when a
     // method has more than one GT_NEG operation on floating point values.
-    GenTreePtr negBitmaskFlt;
-    GenTreePtr negBitmaskDbl;
+    CORINFO_FIELD_HANDLE negBitmaskFlt;
+    CORINFO_FIELD_HANDLE negBitmaskDbl;
 
     // Bit masks used in computing Math.Abs() of a float or double number.
-    GenTreePtr absBitmaskFlt;
-    GenTreePtr absBitmaskDbl;
+    CORINFO_FIELD_HANDLE absBitmaskFlt;
+    CORINFO_FIELD_HANDLE absBitmaskDbl;
 
     // Bit mask used in U8 -> double conversion to adjust the result.
     CORINFO_FIELD_HANDLE u8ToDblBitmask;
index a0274f5186b88c8798cca99cf7cda106da4172d5..c6337288cf26304d2de528dd30e5c4e54b1be95b 100644 (file)
@@ -7263,12 +7263,12 @@ void CodeGen::genSSE2BitwiseOp(GenTreePtr treeNode)
     var_types targetType = treeNode->TypeGet();
     assert(varTypeIsFloating(targetType));
 
-    float       f;
-    double      d;
-    GenTreePtr* bitMask  = nullptr;
-    instruction ins      = INS_invalid;
-    void*       cnsAddr  = nullptr;
-    bool        dblAlign = false;
+    float                 f;
+    double                d;
+    CORINFO_FIELD_HANDLE* bitMask  = nullptr;
+    instruction           ins      = INS_invalid;
+    void*                 cnsAddr  = nullptr;
+    bool                  dblAlign = false;
 
     switch (treeNode->OperGet())
     {
@@ -7331,7 +7331,7 @@ void CodeGen::genSSE2BitwiseOp(GenTreePtr treeNode)
     if (*bitMask == nullptr)
     {
         assert(cnsAddr != nullptr);
-        *bitMask = genMakeConst(cnsAddr, targetType, treeNode, dblAlign);
+        *bitMask = compiler->eeFindJitDataOffs(getEmitter()->emitDataConst(cnsAddr, genTypeSize(targetType), dblAlign));
     }
 
     // We need an additional register for bitmask.
@@ -7352,7 +7352,7 @@ void CodeGen::genSSE2BitwiseOp(GenTreePtr treeNode)
         operandReg = tmpReg;
     }
 
-    inst_RV_TT(ins_Load(targetType, false), tmpReg, *bitMask);
+    getEmitter()->emitIns_R_C(ins_Load(targetType, false), emitTypeSize(targetType), tmpReg, *bitMask, 0);
     assert(ins != INS_invalid);
     inst_RV_RV(ins, targetReg, operandReg, targetType);
 }