Skip to content

Commit c192d95

Browse files
committed
AddRegNumInMask/AddRegNum
1 parent a38460a commit c192d95

File tree

2 files changed

+51
-7
lines changed

2 files changed

+51
-7
lines changed

src/coreclr/jit/regMaskTPOps.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,43 @@ struct regMaskTP;
3535
}
3636

3737

38+
// ----------------------------------------------------------
39+
// AddRegNumForType: Adds `reg` to the mask.
40+
//
41+
void regMaskTP::AddRegNumInMask(regNumber reg)
42+
{
43+
SingleTypeRegSet value = genSingleTypeRegMask(reg);
44+
#ifdef HAS_MORE_THAN_64_REGISTERS
45+
int index = getRegisterTypeIndex(reg);
46+
_registers[index] |= encodeForRegisterIndex(index, value);
47+
#else
48+
low |= value;
49+
#endif
50+
}
51+
52+
#ifdef TARGET_ARM
53+
// ----------------------------------------------------------
54+
// AddRegNumForType: Adds `reg` to the mask. It is same as AddRegNumInMask(reg) except
55+
// that it takes `type` as an argument and adds `reg` to the mask for that type.
56+
//
57+
void regMaskTP::AddRegNumInMask(regNumber reg, var_types type)
58+
{
59+
low |= genSingleTypeRegMask(reg, type);
60+
}
61+
#endif
62+
63+
// This is similar to AddRegNumInMask(reg, regType) for all platforms
64+
// except Arm. For Arm, it calls getRegMask() instead of genRegMask()
65+
// to create a mask that needs to be added.
66+
void regMaskTP::AddRegNum(regNumber reg, var_types type)
67+
{
68+
#ifdef TARGET_ARM
69+
low |= getRegMask(reg, type);
70+
#else
71+
AddRegNumInMask(reg);
72+
#endif
73+
}
74+
3875
//------------------------------------------------------------------------
3976
// RemoveRegNumFromMask: Removes `reg` from the mask
4077
//

src/coreclr/jit/target.h

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,14 @@ struct regMaskTP
275275

276276
public:
277277

278+
void AddRegNumInMask(regNumber reg);
279+
#ifdef TARGET_ARM
280+
void AddRegNumInMask(regNumber reg, var_types type);
281+
#endif
282+
void AddRegNum(regNumber reg, var_types type);
283+
void RemoveRegNumFromMask(regNumber reg);
284+
bool IsRegNumInMask(regNumber reg);
285+
278286
regMaskTP(regMaskSmall lowMask, RegSet32 highMask)
279287
: low(lowMask)
280288
#ifdef HAS_MORE_THAN_64_REGISTERS
@@ -339,9 +347,6 @@ struct regMaskTP
339347
}
340348
#endif
341349

342-
void RemoveRegNumFromMask(regNumber reg);
343-
bool IsRegNumInMask(regNumber reg);
344-
345350
bool IsEmpty() const
346351
{
347352
return low == RBM_NONE;
@@ -935,8 +940,9 @@ inline SingleTypeRegSet genSingleTypeRegMask(regNumber regNum, var_types type)
935940

936941
inline regMaskTP genRegMask(regNumber reg)
937942
{
938-
// TODO: Populate regMaskTP based on reg
939-
return genSingleTypeRegMask(reg);
943+
regMaskTP result;
944+
result.AddRegNumInMask(reg);
945+
return result;
940946
}
941947

942948
/*****************************************************************************
@@ -970,8 +976,9 @@ inline regMaskTP genRegMaskFloat(regNumber reg ARM_ARG(var_types type /* = TYP_D
970976
//
971977
inline regMaskTP genRegMask(regNumber regNum, var_types type)
972978
{
973-
// TODO: Populate regMaskTP based on regNum/type
974-
return genSingleTypeRegMask(regNum ARM_ARG(type));
979+
regMaskTP result;
980+
result.AddRegNumInMask(regNum ARM_ARG(type));
981+
return result;
975982
}
976983

977984
/*****************************************************************************

0 commit comments

Comments
 (0)