@@ -42,7 +42,7 @@ void regMaskTP::AddRegNumInMask(regNumber reg)
42
42
{
43
43
SingleTypeRegSet value = genSingleTypeRegMask (reg);
44
44
#ifdef HAS_MORE_THAN_64_REGISTERS
45
- int index = getRegisterTypeIndex (reg);
45
+ int index = mapRegNumToRegTypeIndex (reg);
46
46
_registers[index ] |= encodeForRegisterIndex (index , value);
47
47
#else
48
48
low |= value;
@@ -118,7 +118,7 @@ void regMaskTP::AddRegNum(regNumber reg, var_types type)
118
118
void regMaskTP::AddRegsetForType (SingleTypeRegSet regsToAdd, var_types type)
119
119
{
120
120
#ifdef HAS_MORE_THAN_64_REGISTERS
121
- int index = getRegisterTypeIndex (type);
121
+ int index = mapTypeToRegTypeIndex (type);
122
122
_registers[index ] |= encodeForRegisterIndex (index , regsToAdd);
123
123
#else
124
124
low |= regsToAdd;
@@ -136,7 +136,7 @@ void regMaskTP::AddRegsetForType(SingleTypeRegSet regsToAdd, var_types type)
136
136
SingleTypeRegSet regMaskTP::GetRegSetForType (var_types type) const
137
137
{
138
138
#ifdef HAS_MORE_THAN_64_REGISTERS
139
- int index = regIndexForType (type);
139
+ int index = mapTypeToRegTypeIndex (type);
140
140
RegSet32 value = _registers[index ];
141
141
return decodeForRegisterIndex (index , value);
142
142
#else
@@ -154,7 +154,7 @@ bool regMaskTP::IsRegNumInMask(regNumber reg) const
154
154
{
155
155
SingleTypeRegSet value = genSingleTypeRegMask (reg);
156
156
#ifdef HAS_MORE_THAN_64_REGISTERS
157
- int index = getRegisterTypeIndex (reg);
157
+ int index = mapRegNumToRegTypeIndex (reg);
158
158
return (_registers[index ] & encodeForRegisterIndex (index , value)) != RBM_NONE;
159
159
#else
160
160
return (low & value) != RBM_NONE;
@@ -183,7 +183,7 @@ void regMaskTP::RemoveRegNumFromMask(regNumber reg)
183
183
{
184
184
SingleTypeRegSet value = genSingleTypeRegMask (reg);
185
185
#ifdef HAS_MORE_THAN_64_REGISTERS
186
- int index = getRegisterTypeIndex (reg);
186
+ int index = mapRegNumToRegTypeIndex (reg);
187
187
_registers[index ] &= ~encodeForRegisterIndex (index, value);
188
188
#else
189
189
low &= ~value;
@@ -209,14 +209,28 @@ void regMaskTP::RemoveRegNum(regNumber reg, var_types type)
209
209
void regMaskTP::RemoveRegsetForType (SingleTypeRegSet regsToRemove, var_types type)
210
210
{
211
211
#ifdef HAS_MORE_THAN_64_REGISTERS
212
- int index = getRegisterTypeIndex (type);
212
+ int index = mapTypeToRegTypeIndex (type);
213
213
_registers[index ] &= ~encodeForRegisterIndex (index, regsToRemove);
214
214
#else
215
215
low &= ~regsToRemove;
216
216
#endif
217
217
}
218
218
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)
220
234
{
221
235
static const BYTE _registerTypeIndex[] = {
222
236
#ifdef TARGET_ARM64
@@ -232,22 +246,22 @@ void regMaskTP::RemoveRegsetForType(SingleTypeRegSet regsToRemove, var_types typ
232
246
233
247
void regMaskTP::operator |=(const regNumber reg)
234
248
{
249
+ SingleTypeRegSet value = genSingleTypeRegMask (reg);
235
250
#ifdef HAS_MORE_THAN_64_REGISTERS
236
- int index = getRegisterTypeIndex (reg);
237
- RegBitSet64 value = genRegMask (reg);
251
+ int index = mapRegNumToRegTypeIndex (reg);
238
252
_registers[index ] |= encodeForRegisterIndex (index , value);
239
253
#else
240
- low |= genSingleTypeRegMask (reg) ;
254
+ low |= value ;
241
255
#endif
242
256
}
243
257
244
258
void regMaskTP::operator ^=(const regNumber reg)
245
259
{
260
+ SingleTypeRegSet value = genSingleTypeRegMask (reg);
246
261
#ifdef HAS_MORE_THAN_64_REGISTERS
247
- int index = getRegisterTypeIndex (reg);
248
- RegBitSet64 value = genRegMask (reg);
262
+ int index = mapRegNumToRegTypeIndex (reg);
249
263
_registers[index ] ^= encodeForRegisterIndex (index , value);
250
264
#else
251
- low ^= genSingleTypeRegMask (reg) ;
265
+ low ^= value ;
252
266
#endif
253
267
}
0 commit comments