Skip to content

Commit

Permalink
RemoveRegsetForType()
Browse files Browse the repository at this point in the history
  • Loading branch information
kunalspathak committed May 29, 2024
1 parent 147a88b commit d14f56a
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 10 deletions.
6 changes: 4 additions & 2 deletions src/coreclr/jit/lsrabuild.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -851,9 +851,11 @@ regMaskTP LinearScan::getKillSetForCall(GenTreeCall* call)
if (!compiler->compFloatingPointUsed)
{
#if defined(TARGET_XARCH)
killMask &= ~(RBM_FLT_CALLEE_TRASH | RBM_MSK_CALLEE_TRASH);

killMask.RemoveRegsetForType(RBM_FLT_CALLEE_TRASH.getLow(), FloatRegisterType);
killMask.RemoveRegsetForType(RBM_MSK_CALLEE_TRASH.getLow(), MaskRegisterType);
#else
killMask &= ~RBM_FLT_CALLEE_TRASH;
killMask.RemoveRegsetForType(RBM_FLT_CALLEE_TRASH, FloatRegisterType);
#endif // TARGET_XARCH
}
#ifdef TARGET_ARM
Expand Down
18 changes: 14 additions & 4 deletions src/coreclr/jit/regMaskTPOps.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -112,16 +112,16 @@ void regMaskTP::AddRegNum(regNumber reg, var_types type)
// AddRegsetForType: Add regs of `type` in mask.
//
// Parameters:
// maskToAdd - Register to check
// regsToAdd - Register to check
// type - type of register
//
void regMaskTP::AddRegsetForType(SingleTypeRegSet regs, var_types type)
void regMaskTP::AddRegsetForType(SingleTypeRegSet regsToAdd, var_types type)
{
#ifdef HAS_MORE_THAN_64_REGISTERS
int index = getRegisterTypeIndex(type);
_registers[index] |= encodeForRegisterIndex(index, regs);
_registers[index] |= encodeForRegisterIndex(index, regsToAdd);
#else
low |= regs;
low |= regsToAdd;
#endif
}

Expand Down Expand Up @@ -187,6 +187,16 @@ void regMaskTP::RemoveRegNum(regNumber reg, var_types type)
#endif
}

void regMaskTP::RemoveRegsetForType(SingleTypeRegSet regsToRemove, var_types type)
{
#ifdef HAS_MORE_THAN_64_REGISTERS
int index = getRegisterTypeIndex(type);
_registers[index] &= ~encodeForRegisterIndex(index, regsToRemove);
#else
low &= ~regsToRemove;
#endif
}

/* static */ int regMaskTP::getRegisterTypeIndex(regNumber reg)
{
static const BYTE _registerTypeIndex[] = {
Expand Down
10 changes: 6 additions & 4 deletions src/coreclr/jit/target.h
Original file line number Diff line number Diff line change
Expand Up @@ -283,11 +283,13 @@ struct regMaskTP
void AddGprRegs(SingleTypeRegSet gprRegs);
void AddRegNum(regNumber reg, var_types type);
void AddRegNumInMask(regNumber reg);
void AddRegsetForType(SingleTypeRegSet maskToAdd, var_types type);
void AddRegsetForType(SingleTypeRegSet regsToAdd, var_types type);
bool IsRegNumInMask(regNumber reg) const;
bool IsRegNumPresent(regNumber reg, var_types type) const;
void RemoveRegNum(regNumber reg, var_types type);
void RemoveRegNumFromMask(regNumber reg);
bool IsRegNumInMask(regNumber reg) const;
bool IsRegNumPresent(regNumber reg, var_types type) const;
void RemoveRegNumFromMask(regNumber reg);
void RemoveRegsetForType(SingleTypeRegSet regsToRemove, var_types type);


regMaskTP(regMaskSmall lowMask, RegSet32 highMask)
: low(lowMask)
Expand Down

0 comments on commit d14f56a

Please sign in to comment.