@@ -1016,6 +1016,52 @@ inline regNumber genFirstRegNumFromMaskAndToggle(SingleTypeRegSet& mask)
1016
1016
return regNum;
1017
1017
}
1018
1018
1019
+ // ------------------------------------------------------------------------------
1020
+ // mapTypeToRegTypeIndex : Maps the type to the index used to store relevant mask
1021
+ // in regMaskTP. 0= IntRegisterType, 1= FloatRegisterType, 2= PredicateRegisterType
1022
+ // Arguments:
1023
+ // vt - the register type
1024
+ //
1025
+ // Return Value:
1026
+ // The index depending on the register type.
1027
+ //
1028
+
1029
+ /* static */ int regMaskTP::mapTypeToRegTypeIndex (var_types vt)
1030
+ {
1031
+ int type = varTypeRegister[TypeGet (vt)];
1032
+ #ifdef HAS_MORE_THAN_64_REGISTERS
1033
+ assert (type <= 3 );
1034
+ #endif
1035
+
1036
+ #ifndef FEATURE_MASKED_HW_INTRINSICS
1037
+ assert (type != VTR_MASK);
1038
+ #endif
1039
+ return (type - 1 );
1040
+ }
1041
+
1042
+ // ------------------------------------------------------------------------------
1043
+ // mapTypeToRegTypeIndex : Maps the regNumber to the index used to store relevant mask
1044
+ // in regMaskTP.
1045
+ // Arguments:
1046
+ // reg - the register number
1047
+ //
1048
+ // Return Value:
1049
+ // The index depending on the register type.
1050
+ //
1051
+ /* static */ int regMaskTP::mapRegNumToRegTypeIndex (regNumber reg)
1052
+ {
1053
+ static const BYTE _registerTypeIndex[] = {
1054
+ #ifdef TARGET_ARM64
1055
+ #define REGDEF (name, rnum, mask, xname, wname, regTypeTag ) regTypeTag,
1056
+ #else
1057
+ #define REGDEF (name, rnum, mask, sname, regTypeTag ) regTypeTag,
1058
+ #endif
1059
+ #include " register.h"
1060
+ };
1061
+
1062
+ return _registerTypeIndex[reg];
1063
+ }
1064
+
1019
1065
/* ****************************************************************************
1020
1066
*
1021
1067
* Return the size in bytes of the given type.
0 commit comments