From 593009b8cdc16f694485bbc90e3604fca8105e3a Mon Sep 17 00:00:00 2001 From: Grzegorz Czarnecki Date: Mon, 18 Dec 2023 15:46:16 +0100 Subject: [PATCH 01/10] Bugfix --- src/coreclr/jit/emit.h | 4 +-- src/coreclr/jit/emitriscv64.cpp | 51 ++++++++++++++++++++------------- 2 files changed, 33 insertions(+), 22 deletions(-) diff --git a/src/coreclr/jit/emit.h b/src/coreclr/jit/emit.h index 87c57113a6513a..c6134353ed3f61 100644 --- a/src/coreclr/jit/emit.h +++ b/src/coreclr/jit/emit.h @@ -993,15 +993,15 @@ class emitter #elif defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64) struct { - unsigned int iiaEncodedInstr; // instruction's binary encoding. regNumber _idReg3 : REGNUM_BITS; regNumber _idReg4 : REGNUM_BITS; + unsigned int iiaEncodedInstr; // instruction's binary encoding. }; struct { - int iiaJmpOffset; // temporary saving the offset of jmp or data. emitLclVarAddr iiaLclVar; + int iiaJmpOffset; // temporary saving the offset of jmp or data. }; void iiaSetInstrEncode(unsigned int encode) diff --git a/src/coreclr/jit/emitriscv64.cpp b/src/coreclr/jit/emitriscv64.cpp index 5945cc61d73eb0..7ac03670f30e09 100644 --- a/src/coreclr/jit/emitriscv64.cpp +++ b/src/coreclr/jit/emitriscv64.cpp @@ -659,7 +659,9 @@ void emitter::emitIns_R_R( void emitter::emitIns_R_R_I( instruction ins, emitAttr attr, regNumber reg1, regNumber reg2, ssize_t imm, insOpts opt /* = INS_OPTS_NONE */) { - code_t code = emitInsCode(ins); + code_t code = emitInsCode(ins); + instrDesc* id = emitNewInstr(attr); + if ((INS_addi <= ins && INS_srai >= ins) || (INS_addiw <= ins && INS_sraiw >= ins) || (INS_lb <= ins && INS_lhu >= ins) || INS_ld == ins || INS_lw == ins || INS_jalr == ins || INS_fld == ins || INS_flw == ins) @@ -688,6 +690,8 @@ void emitter::emitIns_R_R_I( code |= ((imm >> 1) & 0xf) << 8; 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)); } else if (ins == INS_csrrs || ins == INS_csrrw || ins == INS_csrrc) { @@ -702,7 +706,6 @@ void emitter::emitIns_R_R_I( { NYI_RISCV64("illegal ins within emitIns_R_R_I!"); } - instrDesc* id = emitNewInstr(attr); id->idIns(ins); id->idReg1(reg1); @@ -2124,22 +2127,22 @@ void emitter::emitOutputInstrJumpDistanceHelper(const insGroup* ig, UNATIVE_OFFSET& dstOffs, const BYTE*& dstAddr) const { - // TODO-RISCV64-BUG: iiaEncodedInstrCount is not set by the riscv impl making distinguishing the jumps to label and - // an instruction-count based jumps impossible - if (jmp->idAddr()->iiaHasInstrCount()) - { - assert(ig != nullptr); - int instrCount = jmp->idAddr()->iiaGetInstrCount(); - unsigned insNum = emitFindInsNum(ig, jmp); - if (instrCount < 0) - { - // Backward branches using instruction count must be within the same instruction group. - assert(insNum + 1 >= static_cast(-instrCount)); - } - dstOffs = ig->igOffs + emitFindOffset(ig, (insNum + 1 + instrCount)); - dstAddr = emitOffsetToPtr(dstOffs); - return; - } + // TODO-RISCV64: Currently the iiaEncodedInstrCount is not set by any of the emitIns_* methods + assert(!jmp->idAddr()->iiaHasInstrCount()); + // if (jmp->idAddr()->iiaHasInstrCount()) + // { + // assert(ig != nullptr); + // int instrCount = jmp->idAddr()->iiaGetInstrCount(); + // unsigned insNum = emitFindInsNum(ig, jmp); + // if (instrCount < 0) + // { + // // Backward branches using instruction count must be within the same instruction group. + // assert(insNum + 1 >= static_cast(-instrCount)); + // } + // dstOffs = ig->igOffs + emitFindOffset(ig, insNum + 1 + instrCount); + // dstAddr = emitOffsetToPtr(dstOffs); + // return; + // } dstOffs = jmp->idAddr()->iiaIGlabel->igOffs; dstAddr = emitOffsetToPtr(dstOffs); } @@ -2997,10 +3000,18 @@ void emitter::emitDispBranchOffset(const instrDesc* id, const insGroup* ig) cons printf("pc%s%d instructions", signFn(instrCount), instrCount); return; } - unsigned insNum = emitFindInsNum(ig, id); + unsigned insNum = emitFindInsNum(ig, id); + + if (ig->igInsCnt >= insNum + 1 + instrCount) + { + // TODO-RISCV64-BUG: This should be a labeled offset but does not contain a label + printf("pc%s%d instructions", signFn(instrCount), instrCount); + return; + } + UNATIVE_OFFSET srcOffs = ig->igOffs + emitFindOffset(ig, insNum + 1); UNATIVE_OFFSET dstOffs = ig->igOffs + emitFindOffset(ig, insNum + 1 + instrCount); - ssize_t relOffs = static_cast(emitOffsetToPtr(dstOffs) - emitOffsetToPtr(dstOffs)); + ssize_t relOffs = static_cast(emitOffsetToPtr(dstOffs) - emitOffsetToPtr(srcOffs)); printf("pc%s%d (%d instructions)", signFn(relOffs), static_cast(relOffs), instrCount); } From c238b82cf939c19ed55ce9e027fcaf4def6ba064 Mon Sep 17 00:00:00 2001 From: Grzegorz Czarnecki Date: Mon, 18 Dec 2023 15:53:20 +0100 Subject: [PATCH 02/10] Fixed comparation sign --- src/coreclr/jit/emitarm64.cpp | 148 +++++++++++++++++----------------- 1 file changed, 74 insertions(+), 74 deletions(-) diff --git a/src/coreclr/jit/emitarm64.cpp b/src/coreclr/jit/emitarm64.cpp index 709ab8659be71f..a091ce7e1a3174 100644 --- a/src/coreclr/jit/emitarm64.cpp +++ b/src/coreclr/jit/emitarm64.cpp @@ -2674,7 +2674,7 @@ emitter::code_t emitter::emitInsCodeSve(instruction ins, insFormat fmt) const static code_t insCodes2[] = { - #define INST1(id, nm, info, fmt, e1 ) + #define INST1(id, nm, info, fmt, e1 ) #define INST2(id, nm, info, fmt, e1, e2 ) e2, #define INST3(id, nm, info, fmt, e1, e2, e3 ) e2, #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) e2, @@ -2690,8 +2690,8 @@ emitter::code_t emitter::emitInsCodeSve(instruction ins, insFormat fmt) const static code_t insCodes3[] = { - #define INST1(id, nm, info, fmt, e1 ) - #define INST2(id, nm, info, fmt, e1, e2 ) + #define INST1(id, nm, info, fmt, e1 ) + #define INST2(id, nm, info, fmt, e1, e2 ) #define INST3(id, nm, info, fmt, e1, e2, e3 ) e3, #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) e3, #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) e3, @@ -2706,9 +2706,9 @@ emitter::code_t emitter::emitInsCodeSve(instruction ins, insFormat fmt) const static code_t insCodes4[] = { - #define INST1(id, nm, info, fmt, e1 ) - #define INST2(id, nm, info, fmt, e1, e2 ) - #define INST3(id, nm, info, fmt, e1, e2, e3 ) + #define INST1(id, nm, info, fmt, e1 ) + #define INST2(id, nm, info, fmt, e1, e2 ) + #define INST3(id, nm, info, fmt, e1, e2, e3 ) #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) e4, #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) e4, #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) e4, @@ -2722,10 +2722,10 @@ emitter::code_t emitter::emitInsCodeSve(instruction ins, insFormat fmt) const static code_t insCodes5[] = { - #define INST1(id, nm, info, fmt, e1 ) - #define INST2(id, nm, info, fmt, e1, e2 ) - #define INST3(id, nm, info, fmt, e1, e2, e3 ) - #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) + #define INST1(id, nm, info, fmt, e1 ) + #define INST2(id, nm, info, fmt, e1, e2 ) + #define INST3(id, nm, info, fmt, e1, e2, e3 ) + #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) e5, #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) e5, #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) e5, @@ -2738,11 +2738,11 @@ emitter::code_t emitter::emitInsCodeSve(instruction ins, insFormat fmt) const static code_t insCodes6[] = { - #define INST1(id, nm, info, fmt, e1 ) - #define INST2(id, nm, info, fmt, e1, e2 ) - #define INST3(id, nm, info, fmt, e1, e2, e3 ) - #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) - #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) + #define INST1(id, nm, info, fmt, e1 ) + #define INST2(id, nm, info, fmt, e1, e2 ) + #define INST3(id, nm, info, fmt, e1, e2, e3 ) + #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) + #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) e6, #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) e6, #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) e6, @@ -2754,12 +2754,12 @@ emitter::code_t emitter::emitInsCodeSve(instruction ins, insFormat fmt) const static code_t insCodes7[] = { - #define INST1(id, nm, info, fmt, e1 ) - #define INST2(id, nm, info, fmt, e1, e2 ) - #define INST3(id, nm, info, fmt, e1, e2, e3 ) - #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) - #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) - #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) + #define INST1(id, nm, info, fmt, e1 ) + #define INST2(id, nm, info, fmt, e1, e2 ) + #define INST3(id, nm, info, fmt, e1, e2, e3 ) + #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) + #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) + #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) e7, #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) e7, #define INST9(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9 ) e7, @@ -2770,13 +2770,13 @@ emitter::code_t emitter::emitInsCodeSve(instruction ins, insFormat fmt) const static code_t insCodes8[] = { - #define INST1(id, nm, info, fmt, e1 ) - #define INST2(id, nm, info, fmt, e1, e2 ) - #define INST3(id, nm, info, fmt, e1, e2, e3 ) - #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) - #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) - #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) - #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) + #define INST1(id, nm, info, fmt, e1 ) + #define INST2(id, nm, info, fmt, e1, e2 ) + #define INST3(id, nm, info, fmt, e1, e2, e3 ) + #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) + #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) + #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) + #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) e8, #define INST9(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9 ) e8, #define INST11(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 ) e8, @@ -2786,14 +2786,14 @@ emitter::code_t emitter::emitInsCodeSve(instruction ins, insFormat fmt) const static code_t insCodes9[] = { - #define INST1(id, nm, info, fmt, e1 ) - #define INST2(id, nm, info, fmt, e1, e2 ) - #define INST3(id, nm, info, fmt, e1, e2, e3 ) - #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) - #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) - #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) - #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) - #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) + #define INST1(id, nm, info, fmt, e1 ) + #define INST2(id, nm, info, fmt, e1, e2 ) + #define INST3(id, nm, info, fmt, e1, e2, e3 ) + #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) + #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) + #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) + #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) + #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) #define INST9(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9 ) e9, #define INST11(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 ) e9, #define INST13(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13 ) e9, @@ -2802,15 +2802,15 @@ emitter::code_t emitter::emitInsCodeSve(instruction ins, insFormat fmt) const static code_t insCodes10[] = { - #define INST1(id, nm, info, fmt, e1 ) - #define INST2(id, nm, info, fmt, e1, e2 ) - #define INST3(id, nm, info, fmt, e1, e2, e3 ) - #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) - #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) - #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) - #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) - #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) - #define INST9(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9 ) + #define INST1(id, nm, info, fmt, e1 ) + #define INST2(id, nm, info, fmt, e1, e2 ) + #define INST3(id, nm, info, fmt, e1, e2, e3 ) + #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) + #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) + #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) + #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) + #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) + #define INST9(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9 ) #define INST11(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 ) e10, #define INST13(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13 ) e10, #include "instrsarm64sve.h" @@ -2818,15 +2818,15 @@ emitter::code_t emitter::emitInsCodeSve(instruction ins, insFormat fmt) const static code_t insCodes11[] = { - #define INST1(id, nm, info, fmt, e1 ) - #define INST2(id, nm, info, fmt, e1, e2 ) - #define INST3(id, nm, info, fmt, e1, e2, e3 ) - #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) - #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) - #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) - #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) - #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) - #define INST9(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9 ) + #define INST1(id, nm, info, fmt, e1 ) + #define INST2(id, nm, info, fmt, e1, e2 ) + #define INST3(id, nm, info, fmt, e1, e2, e3 ) + #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) + #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) + #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) + #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) + #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) + #define INST9(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9 ) #define INST11(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 ) e11, #define INST13(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13 ) e11, #include "instrsarm64sve.h" @@ -2834,32 +2834,32 @@ emitter::code_t emitter::emitInsCodeSve(instruction ins, insFormat fmt) const static code_t insCodes12[] = { - #define INST1(id, nm, info, fmt, e1 ) - #define INST2(id, nm, info, fmt, e1, e2 ) - #define INST3(id, nm, info, fmt, e1, e2, e3 ) - #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) - #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) - #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) - #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) - #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) - #define INST9(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9 ) - #define INST11(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 ) + #define INST1(id, nm, info, fmt, e1 ) + #define INST2(id, nm, info, fmt, e1, e2 ) + #define INST3(id, nm, info, fmt, e1, e2, e3 ) + #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) + #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) + #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) + #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) + #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) + #define INST9(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9 ) + #define INST11(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 ) #define INST13(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13 ) e12, #include "instrsarm64sve.h" }; const static code_t insCodes13[] = { - #define INST1(id, nm, info, fmt, e1 ) - #define INST2(id, nm, info, fmt, e1, e2 ) - #define INST3(id, nm, info, fmt, e1, e2, e3 ) - #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) - #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) - #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) - #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) - #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) - #define INST9(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9 ) - #define INST11(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 ) + #define INST1(id, nm, info, fmt, e1 ) + #define INST2(id, nm, info, fmt, e1, e2 ) + #define INST3(id, nm, info, fmt, e1, e2, e3 ) + #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) + #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) + #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) + #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) + #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) + #define INST9(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9 ) + #define INST11(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 ) #define INST13(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13 ) e13, #include "instrsarm64sve.h" }; From c5f212a1c8c53a6f2e4a21e9a928069d71f0aa9f Mon Sep 17 00:00:00 2001 From: Grzegorz Czarnecki Date: Mon, 18 Dec 2023 15:54:53 +0100 Subject: [PATCH 03/10] Revert "Fixed comparation sign" This reverts commit c238b82cf939c19ed55ce9e027fcaf4def6ba064. --- src/coreclr/jit/emitarm64.cpp | 148 +++++++++++++++++----------------- 1 file changed, 74 insertions(+), 74 deletions(-) diff --git a/src/coreclr/jit/emitarm64.cpp b/src/coreclr/jit/emitarm64.cpp index a091ce7e1a3174..709ab8659be71f 100644 --- a/src/coreclr/jit/emitarm64.cpp +++ b/src/coreclr/jit/emitarm64.cpp @@ -2674,7 +2674,7 @@ emitter::code_t emitter::emitInsCodeSve(instruction ins, insFormat fmt) const static code_t insCodes2[] = { - #define INST1(id, nm, info, fmt, e1 ) + #define INST1(id, nm, info, fmt, e1 ) #define INST2(id, nm, info, fmt, e1, e2 ) e2, #define INST3(id, nm, info, fmt, e1, e2, e3 ) e2, #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) e2, @@ -2690,8 +2690,8 @@ emitter::code_t emitter::emitInsCodeSve(instruction ins, insFormat fmt) const static code_t insCodes3[] = { - #define INST1(id, nm, info, fmt, e1 ) - #define INST2(id, nm, info, fmt, e1, e2 ) + #define INST1(id, nm, info, fmt, e1 ) + #define INST2(id, nm, info, fmt, e1, e2 ) #define INST3(id, nm, info, fmt, e1, e2, e3 ) e3, #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) e3, #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) e3, @@ -2706,9 +2706,9 @@ emitter::code_t emitter::emitInsCodeSve(instruction ins, insFormat fmt) const static code_t insCodes4[] = { - #define INST1(id, nm, info, fmt, e1 ) - #define INST2(id, nm, info, fmt, e1, e2 ) - #define INST3(id, nm, info, fmt, e1, e2, e3 ) + #define INST1(id, nm, info, fmt, e1 ) + #define INST2(id, nm, info, fmt, e1, e2 ) + #define INST3(id, nm, info, fmt, e1, e2, e3 ) #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) e4, #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) e4, #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) e4, @@ -2722,10 +2722,10 @@ emitter::code_t emitter::emitInsCodeSve(instruction ins, insFormat fmt) const static code_t insCodes5[] = { - #define INST1(id, nm, info, fmt, e1 ) - #define INST2(id, nm, info, fmt, e1, e2 ) - #define INST3(id, nm, info, fmt, e1, e2, e3 ) - #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) + #define INST1(id, nm, info, fmt, e1 ) + #define INST2(id, nm, info, fmt, e1, e2 ) + #define INST3(id, nm, info, fmt, e1, e2, e3 ) + #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) e5, #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) e5, #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) e5, @@ -2738,11 +2738,11 @@ emitter::code_t emitter::emitInsCodeSve(instruction ins, insFormat fmt) const static code_t insCodes6[] = { - #define INST1(id, nm, info, fmt, e1 ) - #define INST2(id, nm, info, fmt, e1, e2 ) - #define INST3(id, nm, info, fmt, e1, e2, e3 ) - #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) - #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) + #define INST1(id, nm, info, fmt, e1 ) + #define INST2(id, nm, info, fmt, e1, e2 ) + #define INST3(id, nm, info, fmt, e1, e2, e3 ) + #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) + #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) e6, #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) e6, #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) e6, @@ -2754,12 +2754,12 @@ emitter::code_t emitter::emitInsCodeSve(instruction ins, insFormat fmt) const static code_t insCodes7[] = { - #define INST1(id, nm, info, fmt, e1 ) - #define INST2(id, nm, info, fmt, e1, e2 ) - #define INST3(id, nm, info, fmt, e1, e2, e3 ) - #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) - #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) - #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) + #define INST1(id, nm, info, fmt, e1 ) + #define INST2(id, nm, info, fmt, e1, e2 ) + #define INST3(id, nm, info, fmt, e1, e2, e3 ) + #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) + #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) + #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) e7, #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) e7, #define INST9(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9 ) e7, @@ -2770,13 +2770,13 @@ emitter::code_t emitter::emitInsCodeSve(instruction ins, insFormat fmt) const static code_t insCodes8[] = { - #define INST1(id, nm, info, fmt, e1 ) - #define INST2(id, nm, info, fmt, e1, e2 ) - #define INST3(id, nm, info, fmt, e1, e2, e3 ) - #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) - #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) - #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) - #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) + #define INST1(id, nm, info, fmt, e1 ) + #define INST2(id, nm, info, fmt, e1, e2 ) + #define INST3(id, nm, info, fmt, e1, e2, e3 ) + #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) + #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) + #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) + #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) e8, #define INST9(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9 ) e8, #define INST11(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 ) e8, @@ -2786,14 +2786,14 @@ emitter::code_t emitter::emitInsCodeSve(instruction ins, insFormat fmt) const static code_t insCodes9[] = { - #define INST1(id, nm, info, fmt, e1 ) - #define INST2(id, nm, info, fmt, e1, e2 ) - #define INST3(id, nm, info, fmt, e1, e2, e3 ) - #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) - #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) - #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) - #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) - #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) + #define INST1(id, nm, info, fmt, e1 ) + #define INST2(id, nm, info, fmt, e1, e2 ) + #define INST3(id, nm, info, fmt, e1, e2, e3 ) + #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) + #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) + #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) + #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) + #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) #define INST9(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9 ) e9, #define INST11(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 ) e9, #define INST13(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13 ) e9, @@ -2802,15 +2802,15 @@ emitter::code_t emitter::emitInsCodeSve(instruction ins, insFormat fmt) const static code_t insCodes10[] = { - #define INST1(id, nm, info, fmt, e1 ) - #define INST2(id, nm, info, fmt, e1, e2 ) - #define INST3(id, nm, info, fmt, e1, e2, e3 ) - #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) - #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) - #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) - #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) - #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) - #define INST9(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9 ) + #define INST1(id, nm, info, fmt, e1 ) + #define INST2(id, nm, info, fmt, e1, e2 ) + #define INST3(id, nm, info, fmt, e1, e2, e3 ) + #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) + #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) + #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) + #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) + #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) + #define INST9(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9 ) #define INST11(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 ) e10, #define INST13(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13 ) e10, #include "instrsarm64sve.h" @@ -2818,15 +2818,15 @@ emitter::code_t emitter::emitInsCodeSve(instruction ins, insFormat fmt) const static code_t insCodes11[] = { - #define INST1(id, nm, info, fmt, e1 ) - #define INST2(id, nm, info, fmt, e1, e2 ) - #define INST3(id, nm, info, fmt, e1, e2, e3 ) - #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) - #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) - #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) - #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) - #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) - #define INST9(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9 ) + #define INST1(id, nm, info, fmt, e1 ) + #define INST2(id, nm, info, fmt, e1, e2 ) + #define INST3(id, nm, info, fmt, e1, e2, e3 ) + #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) + #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) + #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) + #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) + #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) + #define INST9(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9 ) #define INST11(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 ) e11, #define INST13(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13 ) e11, #include "instrsarm64sve.h" @@ -2834,32 +2834,32 @@ emitter::code_t emitter::emitInsCodeSve(instruction ins, insFormat fmt) const static code_t insCodes12[] = { - #define INST1(id, nm, info, fmt, e1 ) - #define INST2(id, nm, info, fmt, e1, e2 ) - #define INST3(id, nm, info, fmt, e1, e2, e3 ) - #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) - #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) - #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) - #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) - #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) - #define INST9(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9 ) - #define INST11(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 ) + #define INST1(id, nm, info, fmt, e1 ) + #define INST2(id, nm, info, fmt, e1, e2 ) + #define INST3(id, nm, info, fmt, e1, e2, e3 ) + #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) + #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) + #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) + #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) + #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) + #define INST9(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9 ) + #define INST11(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 ) #define INST13(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13 ) e12, #include "instrsarm64sve.h" }; const static code_t insCodes13[] = { - #define INST1(id, nm, info, fmt, e1 ) - #define INST2(id, nm, info, fmt, e1, e2 ) - #define INST3(id, nm, info, fmt, e1, e2, e3 ) - #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) - #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) - #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) - #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) - #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) - #define INST9(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9 ) - #define INST11(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 ) + #define INST1(id, nm, info, fmt, e1 ) + #define INST2(id, nm, info, fmt, e1, e2 ) + #define INST3(id, nm, info, fmt, e1, e2, e3 ) + #define INST4(id, nm, info, fmt, e1, e2, e3, e4 ) + #define INST5(id, nm, info, fmt, e1, e2, e3, e4, e5 ) + #define INST6(id, nm, info, fmt, e1, e2, e3, e4, e5, e6 ) + #define INST7(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7 ) + #define INST8(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8 ) + #define INST9(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9 ) + #define INST11(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 ) #define INST13(id, nm, info, fmt, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13 ) e13, #include "instrsarm64sve.h" }; From f9adbefbe7829e0e6b0e505c69b29ddba2b14708 Mon Sep 17 00:00:00 2001 From: Grzegorz Czarnecki Date: Mon, 18 Dec 2023 15:55:08 +0100 Subject: [PATCH 04/10] Fixed comparation sign --- src/coreclr/jit/emitriscv64.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreclr/jit/emitriscv64.cpp b/src/coreclr/jit/emitriscv64.cpp index 7ac03670f30e09..9c30ff31fc591b 100644 --- a/src/coreclr/jit/emitriscv64.cpp +++ b/src/coreclr/jit/emitriscv64.cpp @@ -3002,7 +3002,7 @@ void emitter::emitDispBranchOffset(const instrDesc* id, const insGroup* ig) cons } unsigned insNum = emitFindInsNum(ig, id); - if (ig->igInsCnt >= insNum + 1 + instrCount) + if (ig->igInsCnt < insNum + 1 + instrCount) { // TODO-RISCV64-BUG: This should be a labeled offset but does not contain a label printf("pc%s%d instructions", signFn(instrCount), instrCount); From 661aebac763242d8ad3441eae5a168812caf9eed Mon Sep 17 00:00:00 2001 From: Grzegorz Czarnecki Date: Mon, 18 Dec 2023 15:58:31 +0100 Subject: [PATCH 05/10] Reverted changes in emitOutputInstrJumpDistanceHelper --- src/coreclr/jit/emitriscv64.cpp | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/coreclr/jit/emitriscv64.cpp b/src/coreclr/jit/emitriscv64.cpp index 9c30ff31fc591b..b3045974ec0dd8 100644 --- a/src/coreclr/jit/emitriscv64.cpp +++ b/src/coreclr/jit/emitriscv64.cpp @@ -2127,22 +2127,22 @@ void emitter::emitOutputInstrJumpDistanceHelper(const insGroup* ig, UNATIVE_OFFSET& dstOffs, const BYTE*& dstAddr) const { - // TODO-RISCV64: Currently the iiaEncodedInstrCount is not set by any of the emitIns_* methods - assert(!jmp->idAddr()->iiaHasInstrCount()); - // if (jmp->idAddr()->iiaHasInstrCount()) - // { - // assert(ig != nullptr); - // int instrCount = jmp->idAddr()->iiaGetInstrCount(); - // unsigned insNum = emitFindInsNum(ig, jmp); - // if (instrCount < 0) - // { - // // Backward branches using instruction count must be within the same instruction group. - // assert(insNum + 1 >= static_cast(-instrCount)); - // } - // dstOffs = ig->igOffs + emitFindOffset(ig, insNum + 1 + instrCount); - // dstAddr = emitOffsetToPtr(dstOffs); - // return; - // } + // TODO-RISCV64-BUG: Currently the iiaEncodedInstrCount is not set by the riscv impl making distinguishing the jump + // to label and an instruction-count based jumps impossible + if (jmp->idAddr()->iiaHasInstrCount()) + { + assert(ig != nullptr); + int instrCount = jmp->idAddr()->iiaGetInstrCount(); + unsigned insNum = emitFindInsNum(ig, jmp); + if (instrCount < 0) + { + // Backward branches using instruction count must be within the same instruction group. + assert(insNum + 1 >= static_cast(-instrCount)); + } + dstOffs = ig->igOffs + emitFindOffset(ig, insNum + 1 + instrCount); + dstAddr = emitOffsetToPtr(dstOffs); + return; + } dstOffs = jmp->idAddr()->iiaIGlabel->igOffs; dstAddr = emitOffsetToPtr(dstOffs); } From 6a8dffaf72577383261200634327ae383436bb97 Mon Sep 17 00:00:00 2001 From: Grzegorz Czarnecki Date: Mon, 18 Dec 2023 16:10:04 +0100 Subject: [PATCH 06/10] Fixed misspell --- src/coreclr/jit/emitriscv64.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreclr/jit/emitriscv64.cpp b/src/coreclr/jit/emitriscv64.cpp index b3045974ec0dd8..6ab61f8d3c1e35 100644 --- a/src/coreclr/jit/emitriscv64.cpp +++ b/src/coreclr/jit/emitriscv64.cpp @@ -3004,7 +3004,7 @@ void emitter::emitDispBranchOffset(const instrDesc* id, const insGroup* ig) cons if (ig->igInsCnt < insNum + 1 + instrCount) { - // TODO-RISCV64-BUG: This should be a labeled offset but does not contain a label + // TODO-RISCV64-BUG: This should be a labeled offset but does not contain a iiaIGlabel printf("pc%s%d instructions", signFn(instrCount), instrCount); return; } From 9e095a592828af44d69a48f15b6e86966f07afbf Mon Sep 17 00:00:00 2001 From: Grzegorz Czarnecki Date: Mon, 18 Dec 2023 16:43:54 +0100 Subject: [PATCH 07/10] Fixes after review --- src/coreclr/jit/emitriscv64.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/coreclr/jit/emitriscv64.cpp b/src/coreclr/jit/emitriscv64.cpp index 6ab61f8d3c1e35..fac65fda898975 100644 --- a/src/coreclr/jit/emitriscv64.cpp +++ b/src/coreclr/jit/emitriscv64.cpp @@ -2992,27 +2992,25 @@ bool emitter::emitDispBranchInstrType(unsigned opcode2) const void emitter::emitDispBranchOffset(const instrDesc* id, const insGroup* ig) const { - static const auto signFn = [](int offset) { return offset >= 0 ? "+" : ""; }; - int instrCount = id->idAddr()->iiaGetInstrCount(); if (ig == nullptr) { - printf("pc%s%d instructions", signFn(instrCount), instrCount); + printf("pc%+d instructions", instrCount); return; } unsigned insNum = emitFindInsNum(ig, id); if (ig->igInsCnt < insNum + 1 + instrCount) { - // TODO-RISCV64-BUG: This should be a labeled offset but does not contain a iiaIGlabel - printf("pc%s%d instructions", signFn(instrCount), instrCount); + // TODO-RISCV64-BUG: This should be a labeled offset but does not contain an iiaIGlabel + printf("pc%+d instructions", instrCount); return; } UNATIVE_OFFSET srcOffs = ig->igOffs + emitFindOffset(ig, insNum + 1); UNATIVE_OFFSET dstOffs = ig->igOffs + emitFindOffset(ig, insNum + 1 + instrCount); ssize_t relOffs = static_cast(emitOffsetToPtr(dstOffs) - emitOffsetToPtr(srcOffs)); - printf("pc%s%d (%d instructions)", signFn(relOffs), static_cast(relOffs), instrCount); + printf("pc%+d (%d instructions)", static_cast(relOffs), instrCount); } void emitter::emitDispBranchLabel(const instrDesc* id) const From bdf048941dce848a4f90734a16ec0f0168ecacbf Mon Sep 17 00:00:00 2001 From: Grzegorz Czarnecki Date: Wed, 20 Dec 2023 10:09:08 +0100 Subject: [PATCH 08/10] Reverted changes from la --- src/coreclr/jit/emit.h | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/coreclr/jit/emit.h b/src/coreclr/jit/emit.h index c6134353ed3f61..9495605fd9594c 100644 --- a/src/coreclr/jit/emit.h +++ b/src/coreclr/jit/emit.h @@ -936,7 +936,7 @@ class emitter // TODO-Cleanup: We should really add a DEBUG-only tag to this union so we can add asserts // about reading what we think is here, to avoid unexpected corruption issues. -#if !defined(TARGET_ARM64) && !defined(TARGET_LOONGARCH64) && !defined(TARGET_RISCV64) +#if !defined(TARGET_ARM64) && !defined(TARGET_LOONGARCH64) emitLclVarAddr iiaLclVar; #endif BasicBlock* iiaBBlabel; @@ -990,18 +990,18 @@ class emitter regNumber _idReg3 : REGNUM_BITS; regNumber _idReg4 : REGNUM_BITS; }; -#elif defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64) +#elif defined(TARGET_LOONGARCH64) struct { + unsigned int iiaEncodedInstr; // instruction's binary encoding. regNumber _idReg3 : REGNUM_BITS; regNumber _idReg4 : REGNUM_BITS; - unsigned int iiaEncodedInstr; // instruction's binary encoding. }; struct { - emitLclVarAddr iiaLclVar; int iiaJmpOffset; // temporary saving the offset of jmp or data. + emitLclVarAddr iiaLclVar; }; void iiaSetInstrEncode(unsigned int encode) @@ -1021,6 +1021,22 @@ class emitter { return iiaJmpOffset; } +#elif defined(TARGET_RISCV64) + struct + { + regNumber _idReg3 : REGNUM_BITS; + regNumber _idReg4 : REGNUM_BITS; + unsigned int iiaEncodedInstr; // instruction's binary encoding. + }; + + void iiaSetInstrEncode(unsigned int encode) + { + iiaEncodedInstr = encode; + } + unsigned int iiaGetInstrEncode() const + { + return iiaEncodedInstr; + } #endif // defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64) } _idAddrUnion; From c1a0c4a96eb62c4a14f15b07f1c426b3f1523a1d Mon Sep 17 00:00:00 2001 From: Grzegorz Czarnecki Date: Wed, 20 Dec 2023 10:23:32 +0100 Subject: [PATCH 09/10] Fixed format bug --- src/coreclr/jit/emit.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreclr/jit/emit.h b/src/coreclr/jit/emit.h index 9495605fd9594c..af8012e1dba020 100644 --- a/src/coreclr/jit/emit.h +++ b/src/coreclr/jit/emit.h @@ -1139,7 +1139,7 @@ class emitter } #elif defined(TARGET_LOONGARCH64) - unsigned idCodeSize() const + unsigned idCodeSize() const { return _idCodeSize; } From 50f99d3cc67685ed2834150ae41e98f55014a2f9 Mon Sep 17 00:00:00 2001 From: Grzegorz Czarnecki Date: Wed, 20 Dec 2023 10:24:15 +0100 Subject: [PATCH 10/10] Fixed comment --- src/coreclr/jit/emit.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreclr/jit/emit.h b/src/coreclr/jit/emit.h index af8012e1dba020..148339bae4fc5a 100644 --- a/src/coreclr/jit/emit.h +++ b/src/coreclr/jit/emit.h @@ -1037,7 +1037,7 @@ class emitter { return iiaEncodedInstr; } -#endif // defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64) +#endif // defined(TARGET_RISCV64) } _idAddrUnion;