@@ -149,6 +149,8 @@ static std::vector<MCInst> loadFP64RegBits32(const MCSubtargetInfo &STI,
149149 MCInstBuilder (RISCV::FCVT_D_W).addReg (Reg).addReg (ScratchIntReg));
150150 return Instrs;
151151}
152+ =======
153+ >>>>>>>
152154
153155static MCInst nop () {
154156 // ADDI X0, X0, 0
@@ -771,13 +773,8 @@ class ExegesisRISCVTarget : public ExegesisTarget {
771773
772774 bool matchesArch (Triple::ArchType Arch) const override ;
773775
774- <<<<<<<
775776 std::vector<MCInst> setRegTo (const MCSubtargetInfo &STI, MCRegister Reg,
776777 const APInt &Value) const override ;
777- =======
778- std::vector<MCInst> setRegTo (const MCSubtargetInfo &STI, unsigned Reg,
779- const APInt &Value) const override ;
780- >>>>>>>
781778
782779 MCRegister getDefaultLoopCounterRegister (const Triple &) const override ;
783780
@@ -894,21 +891,43 @@ bool ExegesisRISCVTarget::matchesArch(Triple::ArchType Arch) const {
894891 return Arch == Triple::riscv32 || Arch == Triple::riscv64;
895892}
896893
897- <<<<<<<
898894std::vector<MCInst> ExegesisRISCVTarget::setRegTo (const MCSubtargetInfo &STI,
899895 MCRegister Reg,
900896 const APInt &Value) const {
901897 if (RISCV::GPRRegClass.contains (Reg))
902898 return loadIntReg (STI, Reg, Value);
903899 if (RISCV::FPR16RegClass.contains (Reg))
904900 return loadFPRegBits (STI, Reg, Value, RISCV::FMV_H_X);
901+ <<<<<<<
905902 if (RISCV::FPR32RegClass.contains (Reg))
906903 return loadFPRegBits (STI, Reg, Value, RISCV::FMV_W_X);
904+ =======
905+ if (RISCV::FPR32RegClass.contains (Reg) &&
906+ STI.hasFeature (RISCV::FeatureStdExtF))
907+ return loadFPImmediate (32 , STI, Reg, Value);
908+ >>>>>>>
909+ <<<<<<<
907910 if (RISCV::FPR64RegClass.contains (Reg)) {
908911 if (STI.hasFeature (RISCV::Feature64Bit))
909912 return loadFPRegBits (STI, Reg, Value, RISCV::FMV_D_X);
910913 return loadFP64RegBits32 (STI, Reg, Value);
911914 }
915+ =======
916+ if (RISCV::FPR64RegClass.contains (Reg) &&
917+ STI.hasFeature (RISCV::FeatureStdExtD))
918+ return loadFPImmediate (64 , STI, Reg, Value);
919+ >>>>>>>
920+ // MERGEME: does this check really required?
921+ if (Reg == RISCV::X0) {
922+ if (Value == 0U )
923+ return {nop ()};
924+ errs () << " Cannot write non-zero values to X0\n " ;
925+ return {};
926+ }
927+ if (RISCV::GPRNoX0RegClass.contains (Reg))
928+ return loadIntImmediate (STI, Reg, Value);
929+ // MERGEME: remove redundant case already presented upper.
930+ // should we skip VectorRegList?
912931 if (Reg == RISCV::FRM || Reg == RISCV::VL || Reg == RISCV::VLENB ||
913932 Reg == RISCV::VTYPE || RISCV::GPRPairRegClass.contains (Reg) ||
914933 RISCV::VRRegClass.contains (Reg) || isVectorRegList (Reg)) {
@@ -925,47 +944,14 @@ std::vector<MCInst> ExegesisRISCVTarget::setRegTo(const MCSubtargetInfo &STI,
925944 << " , results will be unreliable\n " ;
926945 return {};
927946}
928- =======
929- std::vector<MCInst> ExegesisRISCVTarget::setRegTo (const MCSubtargetInfo &STI,
930- unsigned Reg,
931- const APInt &Value) const {
932- if (Reg == RISCV::X0) {
933- if (Value == 0U )
934- // NOP
935- return {MCInstBuilder (RISCV::ADDI)
936- .addReg (RISCV::X0)
937- .addReg (RISCV::X0)
938- .addImm (0U )};
939- errs () << " Cannot write non-zero values to X0\n " ;
940- return {};
941- }
942-
943- if (RISCV::GPRNoX0RegClass.contains (Reg))
944- return loadIntImmediate (STI, Reg, Value);
945- if (RISCV::FPR32RegClass.contains (Reg) &&
946- STI.hasFeature (RISCV::FeatureStdExtF))
947- return loadFPImmediate (32 , STI, Reg, Value);
948- if (RISCV::FPR64RegClass.contains (Reg) &&
949- STI.hasFeature (RISCV::FeatureStdExtD))
950- return loadFPImmediate (64 , STI, Reg, Value);
951- return {};
952- }
953- >>>>>>>
954947
955- <<<<<<<
956948const MCPhysReg DefaultLoopCounterReg = RISCV::X31; // t6
957949const MCPhysReg ScratchMemoryReg = RISCV::X10; // a0
958950
959951MCRegister
960952ExegesisRISCVTarget::getDefaultLoopCounterRegister (const Triple &) const {
961953 return DefaultLoopCounterReg;
962954}
963- =======
964- unsigned
965- ExegesisRISCVTarget::getDefaultLoopCounterRegister (const Triple &TT) const {
966- return RISCV::X5;
967- }
968- >>>>>>>
969955
970956<<<<<<<
971957void ExegesisRISCVTarget::decrementLoopCounterAndJump (
0 commit comments