diff --git a/src/coreclr/jit/emitriscv64.cpp b/src/coreclr/jit/emitriscv64.cpp index 9e9f9004170964..1c5be94198f8af 100644 --- a/src/coreclr/jit/emitriscv64.cpp +++ b/src/coreclr/jit/emitriscv64.cpp @@ -693,7 +693,7 @@ void emitter::emitIns_R_R_I( code |= ((imm >> 5) & 0x3f) << 25; code |= ((imm >> 12) & 0x1) << 31; // TODO-RISCV64: Move jump logic to emitIns_J - id->idAddr()->iiaSetInstrCount(imm / sizeof(code_t)); + id->idAddr()->iiaSetInstrCount(static_cast(imm / sizeof(code_t))); } else if (ins == INS_csrrs || ins == INS_csrrw || ins == INS_csrrc) { @@ -2748,48 +2748,48 @@ ssize_t emitter::emitOutputInstrJumpDistance(const BYTE* src, const insGroup* ig return distVal; } -static constexpr size_t NBitMask(uint8_t bits) +static inline constexpr unsigned WordMask(uint8_t bits) { - return (static_cast(1) << bits) - 1; + return static_cast((1ull << bits) - 1); } template -static ssize_t LowerNBitsOfWord(ssize_t word) +static unsigned LowerNBitsOfWord(ssize_t word) { static_assert(MaskSize < 32, "Given mask size is bigger than the word itself"); static_assert(MaskSize > 0, "Given mask size cannot be zero"); - static constexpr size_t kMask = NBitMask(MaskSize); + static constexpr unsigned kMask = WordMask(MaskSize); - return word & kMask; + return static_cast(word & kMask); } template -static ssize_t UpperNBitsOfWord(ssize_t word) +static unsigned UpperNBitsOfWord(ssize_t word) { - static constexpr size_t kShift = 32 - MaskSize; + static constexpr unsigned kShift = 32 - MaskSize; return LowerNBitsOfWord(word >> kShift); } template -static ssize_t UpperNBitsOfWordSignExtend(ssize_t word) +static unsigned UpperNBitsOfWordSignExtend(ssize_t word) { static constexpr unsigned kSignExtend = 1 << (31 - MaskSize); return UpperNBitsOfWord(word + kSignExtend); } -static ssize_t UpperWordOfDoubleWord(ssize_t immediate) +static unsigned UpperWordOfDoubleWord(ssize_t immediate) { - return immediate >> 32; + return static_cast(immediate >> 32); } -static ssize_t LowerWordOfDoubleWord(ssize_t immediate) +static unsigned LowerWordOfDoubleWord(ssize_t immediate) { - static constexpr size_t kWordMask = NBitMask(32); + static constexpr size_t kWordMask = WordMask(32); - return immediate & kWordMask; + return static_cast(immediate & kWordMask); } template @@ -2815,28 +2815,28 @@ static ssize_t UpperWordOfDoubleWordDoubleSignExtend(ssize_t doubleWord) return UpperWordOfDoubleWord(DoubleWordSignExtend(doubleWord)); } -/*static*/ unsigned emitter::TrimSignedToImm12(int imm12) +/*static*/ unsigned emitter::TrimSignedToImm12(ssize_t imm12) { assert(isValidSimm12(imm12)); return static_cast(LowerNBitsOfWord<12>(imm12)); } -/*static*/ unsigned emitter::TrimSignedToImm13(int imm13) +/*static*/ unsigned emitter::TrimSignedToImm13(ssize_t imm13) { assert(isValidSimm13(imm13)); return static_cast(LowerNBitsOfWord<13>(imm13)); } -/*static*/ unsigned emitter::TrimSignedToImm20(int imm20) +/*static*/ unsigned emitter::TrimSignedToImm20(ssize_t imm20) { assert(isValidSimm20(imm20)); return static_cast(LowerNBitsOfWord<20>(imm20)); } -/*static*/ unsigned emitter::TrimSignedToImm21(int imm21) +/*static*/ unsigned emitter::TrimSignedToImm21(ssize_t imm21) { assert(isValidSimm21(imm21)); @@ -2890,8 +2890,8 @@ BYTE* emitter::emitOutputInstr_OptsI8(BYTE* dst, const instrDesc* id, ssize_t im if (id->idReg2()) { // special for INT64_MAX or UINT32_MAX - dst += emitOutput_ITypeInstr(dst, INS_addi, reg1, REG_R0, NBitMask(12)); - const ssize_t shiftValue = (immediate == INT64_MAX) ? 1 : 32; + dst += emitOutput_ITypeInstr(dst, INS_addi, reg1, REG_R0, WordMask(12)); + const unsigned shiftValue = (immediate == INT64_MAX) ? 1 : 32; dst += emitOutput_ITypeInstr(dst, INS_srli, reg1, reg1, shiftValue); } else @@ -2904,10 +2904,10 @@ BYTE* emitter::emitOutputInstr_OptsI8(BYTE* dst, const instrDesc* id, ssize_t im BYTE* emitter::emitOutputInstr_OptsI32(BYTE* dst, ssize_t immediate, regNumber reg1) { - const ssize_t upperWord = UpperWordOfDoubleWord(immediate); + const unsigned upperWord = UpperWordOfDoubleWord(immediate); dst += emitOutput_UTypeInstr(dst, INS_lui, reg1, UpperNBitsOfWordSignExtend<20>(upperWord)); dst += emitOutput_ITypeInstr(dst, INS_addi, reg1, reg1, LowerNBitsOfWord<12>(upperWord)); - const ssize_t lowerWord = LowerWordOfDoubleWord(immediate); + const unsigned lowerWord = LowerWordOfDoubleWord(immediate); dst += emitOutput_ITypeInstr(dst, INS_slli, reg1, reg1, 11); dst += emitOutput_ITypeInstr(dst, INS_addi, reg1, reg1, LowerNBitsOfWord<11>(lowerWord >> 21)); dst += emitOutput_ITypeInstr(dst, INS_slli, reg1, reg1, 11); @@ -2966,7 +2966,7 @@ BYTE* emitter::emitOutputInstr_OptsRcNoReloc(BYTE* dst, instruction* ins, unsign const regNumber rsvdReg = codeGen->rsGetRsvdReg(); const instruction lastIns = (*ins == INS_jal) ? (*ins = INS_addi) : *ins; - const UINT32 high = immediate >> 11; + const ssize_t high = immediate >> 11; dst += emitOutput_UTypeInstr(dst, INS_lui, rsvdReg, UpperNBitsOfWordSignExtend<20>(high)); dst += emitOutput_ITypeInstr(dst, INS_addi, rsvdReg, rsvdReg, LowerNBitsOfWord<12>(high)); diff --git a/src/coreclr/jit/emitriscv64.h b/src/coreclr/jit/emitriscv64.h index 929e2af7dd5916..aef61a029cb576 100644 --- a/src/coreclr/jit/emitriscv64.h +++ b/src/coreclr/jit/emitriscv64.h @@ -141,10 +141,10 @@ BYTE* emitOutputInstr_OptsJCond(BYTE* dst, instrDesc* id, const insGroup* ig, in BYTE* emitOutputInstr_OptsJ(BYTE* dst, instrDesc* id, const insGroup* ig, instruction* ins); BYTE* emitOutputInstr_OptsC(BYTE* dst, instrDesc* id, const insGroup* ig, size_t* size); -static unsigned TrimSignedToImm12(int imm12); -static unsigned TrimSignedToImm13(int imm13); -static unsigned TrimSignedToImm20(int imm20); -static unsigned TrimSignedToImm21(int imm21); +static unsigned TrimSignedToImm12(ssize_t imm12); +static unsigned TrimSignedToImm13(ssize_t imm13); +static unsigned TrimSignedToImm20(ssize_t imm20); +static unsigned TrimSignedToImm21(ssize_t imm21); /************************************************************************/ /* Public inline informational methods */