Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[LoongArch64] coreclr-jit directory #62843

Merged
merged 58 commits into from
Apr 8, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
7d92540
Part6-1: add the coreclr-jit directory for LoongArch64. (#59561)
shushanhf Dec 15, 2021
98a8b9d
[LoongArch64] add jit/CMakeLists.txt from #62889.
Dec 18, 2021
a25b864
Merge branch 'main' into main_loongarch64
Jan 7, 2022
0b561c4
[LoongArch64] update LoongArch64 after merge from main.
Jan 7, 2022
a5424e8
[LoongArch64] Fix the error for "IsLoongArch64".
Jan 10, 2022
3be6cbc
[LoongArch64] Fix the cross-compiling error.
Jan 10, 2022
8ded978
[LoongArch64] Fixed the compiling errors after merge.
shushanhf Jan 10, 2022
eba508b
[LoongArch64] revert `src/coreclr/jit/ICorJitInfo_API_names.h`.
Jan 10, 2022
e1b9986
[LoongArch64] workround the compiling error on windows.
Jan 10, 2022
d513348
[LoongArch64] amend the code-format.
shushanhf Jan 11, 2022
1e92895
[LoongArch64] update by `git apply format.patch`.
shushanhf Jan 11, 2022
7ac3768
Merge branch 'main' into main_loongarch64
shushanhf Jan 12, 2022
38ac452
Merge branch 'main' into main_loongarch64
Jan 14, 2022
348a7f6
[LoongArch64] Delete the interface getArgType2.
Jan 14, 2022
a399695
[LoongArch64] update code by `git apply format.patch`
shushanhf Jan 14, 2022
b2b53d2
[LoongArch64] Fixed the error when passing float-arg by integer-reg.
shushanhf Jan 14, 2022
b5b60cb
[Loongarch64] amend patch formate by 'git apply format.patch'
Jan 18, 2022
8ef00ba
[LoongArch64] update the version of the `LICENSE description`.
Jan 19, 2022
cadce2c
[LoongArch64] amend the CodeGen::genFnPrologCalleeRegArgs for the SC_…
shushanhf Feb 10, 2022
19e10c0
Merge branch 'main' into main_loongarch64
shushanhf Feb 15, 2022
3c79267
[LoongArch64]: update the crossgen2 within the JIT.
shushanhf Feb 15, 2022
7192df1
[LoongArch64] git-apply the `format.patch`.
shushanhf Feb 15, 2022
619c8e8
[LoongArch64] Fix the compiling error after merge-main.
Feb 15, 2022
789c16f
[LoongArch64] amend the code for reviewing by @BruceForstall.
shushanhf Feb 16, 2022
377c2fd
[LoongArch64] apply the `format.patch`.
shushanhf Feb 16, 2022
f3f9636
[LoongArch64] round 2 amend for reviewing by @BruceForstall.
shushanhf Feb 17, 2022
967402e
[LoongArch64] round 3 amend for reviewing by @BruceForstall.
shushanhf Feb 17, 2022
b9bd532
[LoongArch64] amend the format.
Feb 17, 2022
0b9467c
Merge branch 'main' into main_loongarch64
shushanhf Feb 19, 2022
6789232
[LoongArch64] round 4 amending for reviewing.
shushanhf Feb 19, 2022
5f896d5
[LoongArch64] add compiling the `clrjit_unix_loongarch64_*`.
Feb 21, 2022
a49a864
Merge branch 'main' into main_loongarch64
shushanhf Feb 23, 2022
d4a47ff
[LoongArch64] delete unused code and amend the format.
shushanhf Feb 23, 2022
34420c3
Merge branch 'main' into main_loongarch64
Feb 24, 2022
df5b3d3
[LoongArch64] apply the format and fix compiling warning.
Feb 24, 2022
ff81f27
Merge branch 'main' into main_loongarch64
shushanhf Feb 28, 2022
b912e84
[LoongArch64] round 1 amend for reviewing by @kunalspathak.
shushanhf Feb 25, 2022
c40d0b8
[LoongArch64] merge fast-tail-call from main.
shushanhf Feb 28, 2022
20de75f
[LoongArch64] temp commit for windows compiling error.
shushanhf Feb 26, 2022
d86e6b4
[LoongArch64] amend format for reviewing.
shushanhf Mar 1, 2022
a235523
[LoongArch64] amend the coding for LA-ABI's flags.
shushanhf Mar 4, 2022
d8027a7
Merge branch 'main' into main_loongarch64
shushanhf Mar 16, 2022
9cc28ad
[LoongArch64] amend some missed CRs.
shushanhf Mar 15, 2022
38b91f2
[LoongArch64] amend some code for CR.
shushanhf Mar 17, 2022
5e84a3e
[LoongArch64] amend some code for CR round2.
shushanhf Mar 18, 2022
66e4953
[LoongArch64] amend the output format of `emitDisInsName`.
shushanhf Mar 19, 2022
f31afd9
Merge branch 'main' into main_loongarch64
shushanhf Mar 23, 2022
7280c46
[LoongArch64] remove the optimization for type-cast
shushanhf Mar 23, 2022
e1b5f9d
[LoongArch64] ament the code for CR.
shushanhf Mar 25, 2022
81120de
[LoongArch64] amend some code for CR.
shushanhf Mar 30, 2022
f369343
[LoongArch64] amend some code for CR round2.
shushanhf Mar 31, 2022
36ae7b1
Merge branch 'main' into main_loongarch64
shushanhf Apr 1, 2022
93e27c0
[LoongArch64] amend some code for CR round3.
shushanhf Apr 1, 2022
c0bbc8a
[LoongArch64] amend some code for CR round4.
shushanhf Apr 1, 2022
d57ddb5
[LoongArch64] amend some code for CR round5.
shushanhf Apr 1, 2022
ae3fbc0
[LoongArch64] amend some code after refacting.
shushanhf Apr 2, 2022
3a61745
Merge branch 'main' into main_loongarch64
shushanhf Apr 6, 2022
4b8a596
[LoongArch64] amend the compare and fix the error
shushanhf Apr 8, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/coreclr/gcinfo/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,10 @@ if (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64)
create_gcinfo_lib(TARGET gcinfo_win_x64 OS win ARCH x64)
endif (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64)

if (CLR_CMAKE_TARGET_ARCH_LOONGARCH64)
create_gcinfo_lib(TARGET gcinfo_unix_loongarch64 OS unix ARCH loongarch64)
endif (CLR_CMAKE_TARGET_ARCH_LOONGARCH64)

create_gcinfo_lib(TARGET gcinfo_universal_arm OS universal ARCH arm)
create_gcinfo_lib(TARGET gcinfo_win_x86 OS win ARCH x86)

Expand Down
5 changes: 5 additions & 0 deletions src/coreclr/inc/clrconfigvalues.h
Original file line number Diff line number Diff line change
Expand Up @@ -745,7 +745,12 @@ RETAIL_CONFIG_DWORD_INFO(INTERNAL_GDBJitEmitDebugFrame, W("GDBJitEmitDebugFrame"
//
// Hardware Intrinsic ISAs
//
#if defined(TARGET_LOONGARCH64)
//TODO: should implement LoongArch64's features.
RETAIL_CONFIG_DWORD_INFO(EXTERNAL_EnableHWIntrinsic, W("EnableHWIntrinsic"), 0, "Allows Base+ hardware intrinsics to be disabled")
#else
RETAIL_CONFIG_DWORD_INFO(EXTERNAL_EnableHWIntrinsic, W("EnableHWIntrinsic"), 1, "Allows Base+ hardware intrinsics to be disabled")
#endif // defined(TARGET_LOONGARCH64)

#if defined(TARGET_AMD64) || defined(TARGET_X86)
RETAIL_CONFIG_DWORD_INFO(EXTERNAL_EnableAES, W("EnableAES"), 1, "Allows AES+ hardware intrinsics to be disabled")
Expand Down
11 changes: 4 additions & 7 deletions src/coreclr/inc/crosscomp.h
Original file line number Diff line number Diff line change
Expand Up @@ -399,7 +399,7 @@ enum

#define CONTEXT_UNWOUND_TO_CALL 0x20000000

typedef struct DECLSPEC_ALIGN(16) _T_CONTEXT {
typedef struct DECLSPEC_ALIGN(8) _T_CONTEXT {

//
// Control flags.
Expand All @@ -414,8 +414,8 @@ typedef struct DECLSPEC_ALIGN(16) _T_CONTEXT {
DWORD64 Ra;
DWORD64 Tp;
DWORD64 Sp;
DWORD64 A0;//DWORD64 V0;
DWORD64 A1;//DWORD64 V1;
DWORD64 A0;
DWORD64 A1;
DWORD64 A2;
DWORD64 A3;
DWORD64 A4;
Expand Down Expand Up @@ -447,7 +447,7 @@ typedef struct DECLSPEC_ALIGN(16) _T_CONTEXT {
//
// Floating Point Registers
//
//TODO: support the SIMD.
//TODO-LoongArch64: support the SIMD.
DWORD64 F[32];
DWORD Fcsr;
} T_CONTEXT, *PT_CONTEXT;
Expand All @@ -469,7 +469,6 @@ typedef struct _T_RUNTIME_FUNCTION {
};
} T_RUNTIME_FUNCTION, *PT_RUNTIME_FUNCTION;


//
// Define exception dispatch context structure.
//
Expand All @@ -489,8 +488,6 @@ typedef struct _T_DISPATCHER_CONTEXT {
PBYTE NonVolatileRegisters;
} T_DISPATCHER_CONTEXT, *PT_DISPATCHER_CONTEXT;



//
// Nonvolatile context pointer record.
//
Expand Down
4 changes: 4 additions & 0 deletions src/coreclr/inc/palclr.h
Original file line number Diff line number Diff line change
Expand Up @@ -606,4 +606,8 @@

#include "palclr_win.h"

#ifndef IMAGE_FILE_MACHINE_LOONGARCH64
#define IMAGE_FILE_MACHINE_LOONGARCH64 0x6264 // LOONGARCH64.
#endif

#endif // defined(HOST_WINDOWS)
13 changes: 12 additions & 1 deletion src/coreclr/inc/targetosarch.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,27 +41,38 @@ class TargetArchitecture
static const bool IsArm64 = false;
static const bool IsArm32 = true;
static const bool IsArmArch = true;
static const bool IsLoongArch64 = false;
#elif defined(TARGET_ARM64)
static const bool IsX86 = false;
static const bool IsX64 = false;
static const bool IsArm64 = true;
static const bool IsArm32 = false;
static const bool IsArmArch = true;
static const bool IsLoongArch64 = false;
#elif defined(TARGET_AMD64)
static const bool IsX86 = false;
static const bool IsX64 = true;
static const bool IsArm64 = false;
static const bool IsArm32 = false;
static const bool IsArmArch = false;
static const bool IsLoongArch64 = false;
#elif defined(TARGET_X86)
static const bool IsX86 = true;
static const bool IsX64 = false;
static const bool IsArm64 = false;
static const bool IsArm32 = false;
static const bool IsArmArch = false;
static const bool IsLoongArch64 = false;
#elif defined(TARGET_LOONGARCH64)
static const bool IsX86 = false;
static const bool IsX64 = false;
static const bool IsArm64 = false;
static const bool IsArm32 = false;
static const bool IsArmArch = false;
static const bool IsLoongArch64 = true;
#else
#error Unknown architecture
#endif
};

#endif // targetosarch_h
#endif // targetosarch_h
28 changes: 28 additions & 0 deletions src/coreclr/jit/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ function(create_standalone_jit)
elseif(TARGETDETAILS_ARCH STREQUAL "s390x")
set(JIT_ARCH_SOURCES ${JIT_S390X_SOURCES})
set(JIT_ARCH_HEADERS ${JIT_S390X_HEADERS})
elseif(TARGETDETAILS_ARCH STREQUAL "loongarch64")
set(JIT_ARCH_SOURCES ${JIT_LOONGARCH64_SOURCES})
set(JIT_ARCH_HEADERS ${JIT_LOONGARCH64_HEADERS})
else()
clr_unknown_arch()
endif()
Expand Down Expand Up @@ -233,6 +236,15 @@ set( JIT_S390X_SOURCES
# Not supported as JIT target
)

set( JIT_LOONGARCH64_SOURCES
codegenloongarch64.cpp
emitloongarch64.cpp
lowerloongarch64.cpp
lsraloongarch64.cpp
targetloongarch64.cpp
unwindloongarch64.cpp
)

# We include the headers here for better experience in IDEs.
set( JIT_HEADERS
../inc/corinfo.h
Expand Down Expand Up @@ -379,6 +391,13 @@ set ( JIT_S390X_HEADERS
# Not supported as JIT target
)

set( JIT_LOONGARCH64_HEADERS
emitloongarch64.h
emitfmtsloongarch64.h
instrsloongarch64.h
registerloongarch64.h
)

convert_to_absolute_path(JIT_SOURCES ${JIT_SOURCES})
convert_to_absolute_path(JIT_HEADERS ${JIT_HEADERS})
convert_to_absolute_path(JIT_RESOURCES ${JIT_RESOURCES})
Expand All @@ -397,6 +416,8 @@ convert_to_absolute_path(JIT_ARMV6_SOURCES ${JIT_ARMV6_SOURCES})
convert_to_absolute_path(JIT_ARMV6_HEADERS ${JIT_ARMV6_HEADERS})
convert_to_absolute_path(JIT_S390X_SOURCES ${JIT_S390X_SOURCES})
convert_to_absolute_path(JIT_S390X_HEADERS ${JIT_S390X_HEADERS})
convert_to_absolute_path(JIT_LOONGARCH64_SOURCES ${JIT_LOONGARCH64_SOURCES})
convert_to_absolute_path(JIT_LOONGARCH64_HEADERS ${JIT_LOONGARCH64_HEADERS})

if(CLR_CMAKE_TARGET_ARCH_AMD64)
set(JIT_ARCH_SOURCES ${JIT_AMD64_SOURCES})
Expand All @@ -416,6 +437,9 @@ elseif(CLR_CMAKE_TARGET_ARCH_ARM64)
elseif(CLR_CMAKE_TARGET_ARCH_S390X)
set(JIT_ARCH_SOURCES ${JIT_S390X_SOURCES})
set(JIT_ARCH_HEADERS ${JIT_S390X_HEADERS})
elseif(CLR_CMAKE_TARGET_ARCH_LOONGARCH64)
set(JIT_ARCH_SOURCES ${JIT_LOONGARCH64_SOURCES})
set(JIT_ARCH_HEADERS ${JIT_LOONGARCH64_HEADERS})
else()
clr_unknown_arch()
endif()
Expand Down Expand Up @@ -558,6 +582,10 @@ if (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64)
create_standalone_jit(TARGET clrjit_win_x64_${ARCH_HOST_NAME} OS win ARCH x64 DESTINATIONS .)
endif (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64)

if (CLR_CMAKE_TARGET_ARCH_LOONGARCH64)
create_standalone_jit(TARGET clrjit_unix_loongarch64_${ARCH_HOST_NAME} OS unix ARCH loongarch64 DESTINATIONS .)
shushanhf marked this conversation as resolved.
Show resolved Hide resolved
endif (CLR_CMAKE_TARGET_ARCH_LOONGARCH64)

create_standalone_jit(TARGET clrjit_universal_arm_${ARCH_HOST_NAME} OS universal ARCH arm DESTINATIONS .)
target_compile_definitions(clrjit_universal_arm_${ARCH_HOST_NAME} PRIVATE ARM_SOFTFP CONFIGURABLE_ARM_ABI)
create_standalone_jit(TARGET clrjit_win_x86_${ARCH_HOST_NAME} OS win ARCH x86 DESTINATIONS .)
Expand Down
65 changes: 58 additions & 7 deletions src/coreclr/jit/codegen.h
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,16 @@ class CodeGen final : public CodeGenInterface

void genJumpToThrowHlpBlk(emitJumpKind jumpKind, SpecialCodeKind codeKind, BasicBlock* failBlk = nullptr);

#ifdef TARGET_LOONGARCH64
void genSetRegToIcon(regNumber reg, ssize_t val, var_types type);
void genJumpToThrowHlpBlk_la(SpecialCodeKind codeKind,
instruction ins,
regNumber reg1,
BasicBlock* failBlk = nullptr,
regNumber reg2 = REG_R0);
#else
void genCheckOverflow(GenTree* tree);
#endif

//-------------------------------------------------------------------------
//
Expand All @@ -251,7 +260,11 @@ class CodeGen final : public CodeGenInterface
//

void genEstablishFramePointer(int delta, bool reportUnwindData);
#if defined(TARGET_LOONGARCH64)
void genFnPrologCalleeRegArgs();
#else
void genFnPrologCalleeRegArgs(regNumber xtraReg, bool* pXtraRegClobbered, RegState* regState);
#endif
void genEnregisterIncomingStackArgs();
#if defined(TARGET_ARM64)
void genEnregisterOSRArgsAndLocals(regNumber initReg, bool* pInitRegZeroed);
Expand All @@ -263,7 +276,7 @@ class CodeGen final : public CodeGenInterface
void genClearStackVec3ArgUpperBits();
#endif // UNIX_AMD64_ABI && FEATURE_SIMD

#if defined(TARGET_ARM64)
#if defined(TARGET_ARM64) || defined(TARGET_LOONGARCH64)
bool genInstrWithConstant(instruction ins,
emitAttr attr,
regNumber reg1,
Expand Down Expand Up @@ -323,6 +336,7 @@ class CodeGen final : public CodeGenInterface
void genRestoreCalleeSavedRegistersHelp(regMaskTP regsToRestoreMask, int lowestCalleeSavedOffset, int spDelta);

void genPushCalleeSavedRegisters(regNumber initReg, bool* pInitRegZeroed);

#else
void genPushCalleeSavedRegisters();
#endif
Expand Down Expand Up @@ -408,7 +422,25 @@ class CodeGen final : public CodeGenInterface

FuncletFrameInfoDsc genFuncletInfo;

#endif // TARGET_AMD64
#elif defined(TARGET_LOONGARCH64)

// A set of information that is used by funclet prolog and epilog generation.
// It is collected once, before funclet prologs and epilogs are generated,
// and used by all funclet prologs and epilogs, which must all be the same.
struct FuncletFrameInfoDsc
{
regMaskTP fiSaveRegs; // Set of callee-saved registers saved in the funclet prolog (includes RA)
int fiFunction_CallerSP_to_FP_delta; // Delta between caller SP and the frame pointer in the parent function
// (negative)
int fiSP_to_FPRA_save_delta; // FP/RA register save offset from SP (positive)
int fiSP_to_PSP_slot_delta; // PSP slot offset from SP (positive)
int fiCallerSP_to_PSP_slot_delta; // PSP slot offset from Caller SP (negative)
int fiFrameType; // Funclet frame types are numbered. See genFuncletProlog() for details.
int fiSpDelta1; // Stack pointer delta 1 (negative)
};

FuncletFrameInfoDsc genFuncletInfo;
#endif // TARGET_LOONGARCH64

#if defined(TARGET_XARCH)

Expand Down Expand Up @@ -598,6 +630,10 @@ class CodeGen final : public CodeGenInterface
void genArm64EmitterUnitTests();
#endif

#if defined(DEBUG) && defined(TARGET_LOONGARCH64)
void genLoongArch64EmitterUnitTests();
#endif

#if defined(DEBUG) && defined(LATE_DISASM) && defined(TARGET_AMD64)
void genAmd64EmitterUnitTests();
#endif
Expand Down Expand Up @@ -1234,8 +1270,6 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
void genCodeForStoreLclFld(GenTreeLclFld* tree);
void genCodeForStoreLclVar(GenTreeLclVar* tree);
void genCodeForReturnTrap(GenTreeOp* tree);
void genCodeForJcc(GenTreeCC* tree);
void genCodeForSetcc(GenTreeCC* setcc);
void genCodeForStoreInd(GenTreeStoreInd* tree);
void genCodeForSwap(GenTreeOp* tree);
void genCodeForCpObj(GenTreeObj* cpObjNode);
Expand Down Expand Up @@ -1324,7 +1358,11 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
void genTableBasedSwitch(GenTree* tree);
void genCodeForArrIndex(GenTreeArrIndex* treeNode);
void genCodeForArrOffset(GenTreeArrOffs* treeNode);
#if defined(TARGET_LOONGARCH64)
instruction genGetInsForOper(GenTree* treeNode);
#else
instruction genGetInsForOper(genTreeOps oper, var_types type);
#endif
bool genEmitOptimizedGCWriteBarrier(GCInfo::WriteBarrierForm writeBarrierForm, GenTree* addr, GenTree* data);
GenTree* getCallTarget(const GenTreeCall* call, CORINFO_METHOD_HANDLE* methHnd);
regNumber getCallIndirectionCellReg(const GenTreeCall* call);
Expand All @@ -1333,7 +1371,11 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
void genJmpMethod(GenTree* jmp);
BasicBlock* genCallFinally(BasicBlock* block);
void genCodeForJumpTrue(GenTreeOp* jtrue);
#ifdef TARGET_ARM64
#if defined(TARGET_LOONGARCH64)
// TODO: refactor for LA.
void genCodeForJumpCompare(GenTreeOp* tree);
#endif
#if defined(TARGET_ARM64)
void genCodeForJumpCompare(GenTreeOp* tree);
void genCodeForMadd(GenTreeOp* tree);
void genCodeForBfiz(GenTreeOp* tree);
Expand All @@ -1349,6 +1391,10 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
void genMultiRegStoreToSIMDLocal(GenTreeLclVar* lclNode);
void genMultiRegStoreToLocal(GenTreeLclVar* lclNode);

#if defined(TARGET_LOONGARCH64)
void genMultiRegCallStoreToLocal(GenTree* treeNode);
#endif

// Codegen for multi-register struct returns.
bool isStructReturn(GenTree* treeNode);
#ifdef FEATURE_SIMD
Expand All @@ -1364,9 +1410,9 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
void genFloatReturn(GenTree* treeNode);
#endif // TARGET_X86

#if defined(TARGET_ARM64)
#if defined(TARGET_ARM64) || defined(TARGET_LOONGARCH64)
void genSimpleReturn(GenTree* treeNode);
#endif // TARGET_ARM64
#endif // TARGET_ARM64 || TARGET_LOONGARCH64

void genReturn(GenTree* treeNode);

Expand Down Expand Up @@ -1656,6 +1702,7 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
instruction genMapShiftInsToShiftByConstantIns(instruction ins, int shiftByValue);
#endif // TARGET_XARCH

#ifndef TARGET_LOONGARCH64
// Maps a GenCondition code to a sequence of conditional jumps or other conditional instructions
// such as X86's SETcc. A sequence of instructions rather than just a single one is required for
// certain floating point conditions.
Expand Down Expand Up @@ -1699,6 +1746,10 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

void inst_JCC(GenCondition condition, BasicBlock* target);
void inst_SETCC(GenCondition condition, var_types type, regNumber dstReg);

void genCodeForJcc(GenTreeCC* tree);
void genCodeForSetcc(GenTreeCC* setcc);
#endif // !TARGET_LOONGARCH64
};

// A simple phase that just invokes a method on the codegen instance
Expand Down
Loading