Skip to content

Commit 5f63e60

Browse files
committed
misc cleanup
1 parent 7542417 commit 5f63e60

File tree

2 files changed

+37
-19
lines changed

2 files changed

+37
-19
lines changed

src/coreclr/jit/regMaskTPOps.cpp

+27-13
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ void regMaskTP::AddRegNumInMask(regNumber reg)
4242
{
4343
SingleTypeRegSet value = genSingleTypeRegMask(reg);
4444
#ifdef HAS_MORE_THAN_64_REGISTERS
45-
int index = getRegisterTypeIndex(reg);
45+
int index = mapRegNumToRegTypeIndex(reg);
4646
_registers[index] |= encodeForRegisterIndex(index, value);
4747
#else
4848
low |= value;
@@ -118,7 +118,7 @@ void regMaskTP::AddRegNum(regNumber reg, var_types type)
118118
void regMaskTP::AddRegsetForType(SingleTypeRegSet regsToAdd, var_types type)
119119
{
120120
#ifdef HAS_MORE_THAN_64_REGISTERS
121-
int index = getRegisterTypeIndex(type);
121+
int index = mapTypeToRegTypeIndex(type);
122122
_registers[index] |= encodeForRegisterIndex(index, regsToAdd);
123123
#else
124124
low |= regsToAdd;
@@ -136,7 +136,7 @@ void regMaskTP::AddRegsetForType(SingleTypeRegSet regsToAdd, var_types type)
136136
SingleTypeRegSet regMaskTP::GetRegSetForType(var_types type) const
137137
{
138138
#ifdef HAS_MORE_THAN_64_REGISTERS
139-
int index = regIndexForType(type);
139+
int index = mapTypeToRegTypeIndex(type);
140140
RegSet32 value = _registers[index];
141141
return decodeForRegisterIndex(index, value);
142142
#else
@@ -154,7 +154,7 @@ bool regMaskTP::IsRegNumInMask(regNumber reg) const
154154
{
155155
SingleTypeRegSet value = genSingleTypeRegMask(reg);
156156
#ifdef HAS_MORE_THAN_64_REGISTERS
157-
int index = getRegisterTypeIndex(reg);
157+
int index = mapRegNumToRegTypeIndex(reg);
158158
return (_registers[index] & encodeForRegisterIndex(index, value)) != RBM_NONE;
159159
#else
160160
return (low & value) != RBM_NONE;
@@ -183,7 +183,7 @@ void regMaskTP::RemoveRegNumFromMask(regNumber reg)
183183
{
184184
SingleTypeRegSet value = genSingleTypeRegMask(reg);
185185
#ifdef HAS_MORE_THAN_64_REGISTERS
186-
int index = getRegisterTypeIndex(reg);
186+
int index = mapRegNumToRegTypeIndex(reg);
187187
_registers[index] &= ~encodeForRegisterIndex(index, value);
188188
#else
189189
low &= ~value;
@@ -209,14 +209,28 @@ void regMaskTP::RemoveRegNum(regNumber reg, var_types type)
209209
void regMaskTP::RemoveRegsetForType(SingleTypeRegSet regsToRemove, var_types type)
210210
{
211211
#ifdef HAS_MORE_THAN_64_REGISTERS
212-
int index = getRegisterTypeIndex(type);
212+
int index = mapTypeToRegTypeIndex(type);
213213
_registers[index] &= ~encodeForRegisterIndex(index, regsToRemove);
214214
#else
215215
low &= ~regsToRemove;
216216
#endif
217217
}
218218

219-
/* static */ int regMaskTP::getRegisterTypeIndex(regNumber reg)
219+
template <class T>
220+
/* static */ int regMaskTP::mapTypeToRegTypeIndex(T vt)
221+
{
222+
int type = varTypeRegister[TypeGet(vt)];
223+
#ifdef HAS_MORE_THAN_64_REGISTERS
224+
assert(type <= 3);
225+
#endif
226+
227+
#ifndef FEATURE_MASKED_HW_INTRINSICS
228+
assert(type != VTR_MASK);
229+
#endif
230+
return (type - 1);
231+
}
232+
233+
/* static */ int regMaskTP::mapRegNumToRegTypeIndex(regNumber reg)
220234
{
221235
static const BYTE _registerTypeIndex[] = {
222236
#ifdef TARGET_ARM64
@@ -232,22 +246,22 @@ void regMaskTP::RemoveRegsetForType(SingleTypeRegSet regsToRemove, var_types typ
232246

233247
void regMaskTP::operator|=(const regNumber reg)
234248
{
249+
SingleTypeRegSet value = genSingleTypeRegMask(reg);
235250
#ifdef HAS_MORE_THAN_64_REGISTERS
236-
int index = getRegisterTypeIndex(reg);
237-
RegBitSet64 value = genRegMask(reg);
251+
int index = mapRegNumToRegTypeIndex(reg);
238252
_registers[index] |= encodeForRegisterIndex(index, value);
239253
#else
240-
low |= genSingleTypeRegMask(reg);
254+
low |= value;
241255
#endif
242256
}
243257

244258
void regMaskTP::operator^=(const regNumber reg)
245259
{
260+
SingleTypeRegSet value = genSingleTypeRegMask(reg);
246261
#ifdef HAS_MORE_THAN_64_REGISTERS
247-
int index = getRegisterTypeIndex(reg);
248-
RegBitSet64 value = genRegMask(reg);
262+
int index = mapRegNumToRegTypeIndex(reg);
249263
_registers[index] ^= encodeForRegisterIndex(index, value);
250264
#else
251-
low ^= genSingleTypeRegMask(reg);
265+
low ^= value;
252266
#endif
253267
}

src/coreclr/jit/target.h

+10-6
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,9 @@ struct regMaskTP
269269
regMaskSmall low;
270270
#endif
271271

272-
FORCEINLINE static int getRegisterTypeIndex(regNumber reg);
272+
FORCEINLINE static int mapRegNumToRegTypeIndex(regNumber reg);
273+
template<class T>
274+
FORCEINLINE static int mapTypeToRegTypeIndex(T type);
273275
FORCEINLINE static RegSet32 encodeForRegisterIndex(int index, regMaskSmall value);
274276
FORCEINLINE static regMaskSmall decodeForRegisterIndex(int index, RegSet32 value);
275277

@@ -302,6 +304,9 @@ struct regMaskTP
302304

303305
regMaskTP(regMaskSmall regMask)
304306
: low(regMask)
307+
#ifdef HAS_MORE_THAN_64_REGISTERS
308+
, high(RBM_NONE)
309+
#endif
305310
{
306311
}
307312

@@ -382,7 +387,11 @@ struct regMaskTP
382387

383388
SingleTypeRegSet GetPredicateRegSet() const
384389
{
390+
#ifdef HAS_MORE_THAN_64_REGISTERS
391+
return getHigh();
392+
#else
385393
return getLow();
394+
#endif
386395
}
387396

388397
void operator|=(const regMaskTP& second)
@@ -401,11 +410,6 @@ struct regMaskTP
401410
#endif
402411
}
403412

404-
void operator^=(const regNumber reg)
405-
{
406-
low ^= genSingleTypeRegMask(reg);
407-
}
408-
409413
void operator&=(const regMaskTP& second)
410414
{
411415
low &= second.getLow();

0 commit comments

Comments
 (0)