Ignore:
Timestamp:
Sep 8, 2014, 2:23:36 PM (5 years ago)
Author:
linmengl
Message:

long stream addition for i128

File:
1 edited

Legend:

Unmodified
Added
Removed
  • parabix-LLVM/llvm_git/lib/Target/X86/X86ParabixISelLowering.h

    r4078 r4136  
    150150    }
    151151
     152    SDValue ADD(SDValue A, SDValue B) {
     153      MVT VT = A.getSimpleValueType();
     154      return DAG->getNode(ISD::ADD, dl, VT, A, B);
     155    }
     156
    152157    SDValue AND(SDValue A, SDValue B) {
    153158      MVT VT = A.getSimpleValueType();
     
    245250
    246251      return SRL(A, BUILD_VECTOR(VT, Pool));
     252    }
     253
     254    //C can be ISD::SETNE, ISD::SETLT, etc.
     255    SDValue SETCC(SDValue A, SDValue B, ISD::CondCode C) {
     256      MVT OpVT = A.getSimpleValueType();
     257      MVT VT = MVT::getVectorVT(MVT::i1, OpVT.getVectorNumElements());
     258
     259      return DAG->getNode(ISD::SETCC, dl, VT, A, B, DAG->getCondCode(C));
    247260    }
    248261
     
    281294    }
    282295
     296    //X86 specific function
    283297    SDValue PEXT64(SDValue A, SDValue B) {
    284298      assert(A.getSimpleValueType() == MVT::i64 &&
     
    290304                              DAG->getConstant(Intrinsic::x86_bmi_pext_64, MVT::i32),
    291305                              A,B);
     306      return V;
     307    }
     308
     309    //X86 specific function
     310    //Collect sign bit of each 64-bit field into i32
     311    SDValue SignMask2x64(SDValue A) {
     312      assert(A.getSimpleValueType().getSizeInBits() == 128 &&
     313             "SignMask get wrong sized type.");
     314      if (A.getSimpleValueType() != MVT::v2f64)
     315        A = BITCAST(A, MVT::v2f64);
     316
     317      SDValue V = DAG->getNode(ISD::INTRINSIC_WO_CHAIN, dl,
     318                               MVT::i32,
     319                               DAG->getConstant(Intrinsic::x86_sse2_movmsk_pd, MVT::i32),
     320                               A);
     321      return V;
     322    }
     323
     324    //X86 specific function
     325    //Collect sign bit of each 64-bit field into i32
     326    SDValue SignMask4x64(SDValue A) {
     327      assert(A.getSimpleValueType().getSizeInBits() == 256 &&
     328             "SignMask get wrong sized type.");
     329      if (A.getSimpleValueType() != MVT::v4f64)
     330        A = BITCAST(A, MVT::v4f64);
     331
     332      SDValue V = DAG->getNode(ISD::INTRINSIC_WO_CHAIN, dl,
     333                               MVT::i32,
     334                               DAG->getConstant(Intrinsic::x86_avx_movmsk_pd_256, MVT::i32),
     335                               A);
    292336      return V;
    293337    }
     
    311355      return BITCAST(R, VT);
    312356    }
     357
     358    SDValue MatchStar(SDValue M, SDValue C) {
     359      assert(M.getSimpleValueType().SimpleTy == C.getSimpleValueType().SimpleTy &&
     360             "MatchStar operands of different type");
     361      return OR(XOR(ADD(AND(M, C), C), C), M);
     362    }
    313363  };
    314364}
Note: See TracChangeset for help on using the changeset viewer.