Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit b2190ab

Browse files
authored
Merge pull request #5936 from briansull/fullIntArgRegMask
Introduce the method fullIntArgRegMask() to replace many uses of RBM_ARG_REGS
2 parents 316fc8e + 4e0cd4e commit b2190ab

File tree

5 files changed

+46
-18
lines changed

5 files changed

+46
-18
lines changed

src/jit/codegenarm.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1609,7 +1609,7 @@ CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
16091609
break;
16101610

16111611
case GT_PINVOKE_PROLOG:
1612-
noway_assert(((gcInfo.gcRegGCrefSetCur|gcInfo.gcRegByrefSetCur) & ~RBM_ARG_REGS) == 0);
1612+
noway_assert(((gcInfo.gcRegGCrefSetCur|gcInfo.gcRegByrefSetCur) & ~fullIntArgRegMask()) == 0);
16131613

16141614
// the runtime side requires the codegen here to be consistent
16151615
emit->emitDisableRandomNops();

src/jit/codegenarm64.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3271,7 +3271,7 @@ CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
32713271
break;
32723272

32733273
case GT_PINVOKE_PROLOG:
3274-
noway_assert(((gcInfo.gcRegGCrefSetCur|gcInfo.gcRegByrefSetCur) & ~RBM_ARG_REGS) == 0);
3274+
noway_assert(((gcInfo.gcRegGCrefSetCur|gcInfo.gcRegByrefSetCur) & ~fullIntArgRegMask()) == 0);
32753275

32763276
// the runtime side requires the codegen here to be consistent
32773277
emit->emitDisableRandomNops();

src/jit/codegenxarch.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2640,7 +2640,7 @@ CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
26402640
#endif
26412641

26422642
case GT_PINVOKE_PROLOG:
2643-
noway_assert(((gcInfo.gcRegGCrefSetCur|gcInfo.gcRegByrefSetCur) & ~RBM_ARG_REGS) == 0);
2643+
noway_assert(((gcInfo.gcRegGCrefSetCur|gcInfo.gcRegByrefSetCur) & ~fullIntArgRegMask()) == 0);
26442644

26452645
// the runtime side requires the codegen here to be consistent
26462646
emit->emitDisableRandomNops();

src/jit/compiler.hpp

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3243,14 +3243,7 @@ __forceinline regMaskTP genMapArgNumToRegMask(unsigned argNum, var_types type)
32433243
inline
32443244
unsigned genMapIntRegNumToRegArgNum(regNumber regNum)
32453245
{
3246-
// First check for the Arm64 fixed return buffer argument register
3247-
// as it is not in the RBM_ARG_REGS set of registers
3248-
if (hasFixedRetBuffReg() && (regNum == theFixedRetBuffReg()))
3249-
{
3250-
return theFixedRetBuffArgNum();
3251-
}
3252-
3253-
assert (genRegMask(regNum) & RBM_ARG_REGS);
3246+
assert(genRegMask(regNum) & fullIntArgRegMask());
32543247

32553248
switch (regNum)
32563249
{
@@ -3277,8 +3270,16 @@ unsigned genMapIntRegNumToRegArgNum(regNumber regNum)
32773270
#endif
32783271
#endif
32793272
default:
3280-
assert(!"invalid register arg register");
3281-
return BAD_VAR_NUM;
3273+
// Check for the Arm64 fixed return buffer argument register
3274+
if (hasFixedRetBuffReg() && (regNum == theFixedRetBuffReg()))
3275+
{
3276+
return theFixedRetBuffArgNum();
3277+
}
3278+
else
3279+
{
3280+
assert(!"invalid register arg register");
3281+
return BAD_VAR_NUM;
3282+
}
32823283
}
32833284
}
32843285

src/jit/target.h

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1918,6 +1918,20 @@ inline regNumber theFixedRetBuffReg()
19181918
#endif
19191919
}
19201920

1921+
//-------------------------------------------------------------------------------------------
1922+
// theFixedRetBuffMask:
1923+
// Returns the regNumber to use for the fixed return buffer
1924+
//
1925+
inline regMaskTP theFixedRetBuffMask()
1926+
{
1927+
assert(hasFixedRetBuffReg()); // This predicate should be checked before calling this method
1928+
#ifdef _TARGET_ARM64_
1929+
return RBM_ARG_RET_BUFF;
1930+
#else
1931+
return 0;
1932+
#endif
1933+
}
1934+
19211935
//-------------------------------------------------------------------------------------------
19221936
// theFixedRetBuffArgNum:
19231937
// Returns the argNum to use for the fixed return buffer
@@ -1932,18 +1946,31 @@ inline unsigned theFixedRetBuffArgNum()
19321946
#endif
19331947
}
19341948

1949+
//-------------------------------------------------------------------------------------------
1950+
// fullIntArgRegMask:
1951+
// Returns the full mask of all possible integer registers
1952+
// Note this includes the fixed return buffer register on Arm64
1953+
//
1954+
inline regMaskTP fullIntArgRegMask()
1955+
{
1956+
if (hasFixedRetBuffReg())
1957+
{
1958+
return RBM_ARG_REGS | theFixedRetBuffMask();
1959+
}
1960+
else
1961+
{
1962+
return RBM_ARG_REGS;
1963+
}
1964+
}
1965+
19351966
//-------------------------------------------------------------------------------------------
19361967
// isValidIntArgReg:
19371968
// Returns true if the register is a valid integer argument register
19381969
// Note this method also returns true on Arm64 when 'reg' is the RetBuff register
19391970
//
19401971
inline bool isValidIntArgReg(regNumber reg)
19411972
{
1942-
if (hasFixedRetBuffReg() && (reg == theFixedRetBuffReg()))
1943-
{
1944-
return true;
1945-
}
1946-
return (genRegMask(reg) & RBM_ARG_REGS) != 0;
1973+
return (genRegMask(reg) & fullIntArgRegMask()) != 0;
19471974
}
19481975

19491976
//-------------------------------------------------------------------------------------------

0 commit comments

Comments
 (0)