未验证 提交 c96f5047 编写于 作者: W Will Smith 提交者: GitHub

ARM64 - Disasm is consistent with values of zero and commas (#74717)

上级 a17dcda9
......@@ -11763,6 +11763,15 @@ size_t emitter::emitOutputInstr(insGroup* ig, instrDesc* id, BYTE** dp)
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************
*
* Display a comma
*/
void emitter::emitDispComma()
{
printf(", ");
}
/*****************************************************************************
*
* Display the instruction name
......@@ -11796,6 +11805,12 @@ void emitter::emitDispImm(ssize_t imm, bool addComma, bool alwaysHex /* =false *
{
alwaysHex = true;
}
else if (imm == 0)
{
// Non-offset values of zero are never displayed as hex.
alwaysHex = false;
}
if (strictArmAsm)
{
printf("#");
......@@ -11841,7 +11856,7 @@ void emitter::emitDispImm(ssize_t imm, bool addComma, bool alwaysHex /* =false *
}
if (addComma)
printf(", ");
emitDispComma();
}
/*****************************************************************************
......@@ -12010,7 +12025,7 @@ void emitter::emitDispReg(regNumber reg, emitAttr attr, bool addComma)
printf(emitRegName(reg, size));
if (addComma)
printf(", ");
emitDispComma();
}
//------------------------------------------------------------------------
......@@ -12023,7 +12038,7 @@ void emitter::emitDispVectorReg(regNumber reg, insOpts opt, bool addComma)
emitDispArrangement(opt);
if (addComma)
printf(", ");
emitDispComma();
}
//------------------------------------------------------------------------
......@@ -12037,7 +12052,7 @@ void emitter::emitDispVectorRegIndex(regNumber reg, emitAttr elemsize, ssize_t i
printf("[%d]", (int)index);
if (addComma)
printf(", ");
emitDispComma();
}
//------------------------------------------------------------------------
......@@ -12060,7 +12075,7 @@ void emitter::emitDispVectorRegList(regNumber firstReg, unsigned listSize, insOp
if (addComma)
{
printf(", ");
emitDispComma();
}
}
......@@ -12082,7 +12097,7 @@ void emitter::emitDispVectorElemList(
const bool notLastRegister = (i != listSize - 1);
if (notLastRegister)
{
printf(", ");
emitDispComma();
}
currReg = (currReg == REG_V31) ? REG_V0 : REG_NEXT(currReg);
}
......@@ -12091,7 +12106,7 @@ void emitter::emitDispVectorElemList(
if (addComma)
{
printf(", ");
emitDispComma();
}
}
......@@ -12181,7 +12196,7 @@ void emitter::emitDispShiftedReg(regNumber reg, insOpts opt, ssize_t imm, emitAt
{
if (strictArmAsm)
{
printf(",");
emitDispComma();
}
emitDispShiftOpts(opt);
emitDispImm(imm, false);
......@@ -12263,7 +12278,7 @@ void emitter::emitDispAddrRI(regNumber reg, insOpts opt, ssize_t imm)
if (!insOptsPostIndex(opt) && (imm != 0))
{
printf(",");
emitDispComma();
emitDispImm(imm, false, true, true);
}
printf("]");
......@@ -12274,7 +12289,7 @@ void emitter::emitDispAddrRI(regNumber reg, insOpts opt, ssize_t imm)
}
else if (insOptsPostIndex(opt))
{
printf(",");
emitDispComma();
emitDispImm(imm, false, true, true);
}
}
......@@ -12303,7 +12318,7 @@ void emitter::emitDispAddrRI(regNumber reg, insOpts opt, ssize_t imm)
if (insOptsIndexed(opt))
{
printf(", ");
emitDispComma();
}
else
{
......@@ -13004,7 +13019,7 @@ void emitter::emitDispInsHelp(
cfi.immCFVal = (unsigned)emitGetInsSC(id);
emitDispImm(cfi.imm5, true);
emitDispFlags(cfi.flags);
printf(", ");
emitDispComma();
emitDispCond(cfi.cond);
break;
......@@ -13074,7 +13089,7 @@ void emitter::emitDispInsHelp(
emitDispReg(id->idReg2(), size, true);
cfi.immCFVal = (unsigned)emitGetInsSC(id);
emitDispFlags(cfi.flags);
printf(", ");
emitDispComma();
emitDispCond(cfi.cond);
break;
......@@ -13241,8 +13256,8 @@ void emitter::emitDispInsHelp(
}
if (ins == INS_fcmeq || ins == INS_fcmge || ins == INS_fcmgt || ins == INS_fcmle || ins == INS_fcmlt)
{
printf(", ");
emitDispImm(0, false);
emitDispComma();
emitDispFloatZero();
}
break;
......@@ -13265,7 +13280,7 @@ void emitter::emitDispInsHelp(
}
if (ins == INS_cmeq || ins == INS_cmge || ins == INS_cmgt || ins == INS_cmle || ins == INS_cmlt)
{
printf(", ");
emitDispComma();
emitDispImm(0, false);
}
break;
......@@ -13392,7 +13407,7 @@ void emitter::emitDispInsHelp(
{
emitDispReg(id->idReg1(), size, true);
emitDispReg(id->idReg2(), size, true);
emitDispImm(0, false);
emitDispFloatZero();
}
else if (emitInsIsVectorNarrow(ins))
{
......@@ -13407,7 +13422,7 @@ void emitter::emitDispInsHelp(
if (fmt == IF_DV_2L &&
(ins == INS_cmeq || ins == INS_cmge || ins == INS_cmgt || ins == INS_cmle || ins == INS_cmlt))
{
printf(", ");
emitDispComma();
emitDispImm(0, false);
}
break;
......
......@@ -25,6 +25,7 @@ void emitDispInsHelp(
instrDesc* id, bool isNew, bool doffs, bool asmfm, unsigned offset, BYTE* pCode, size_t sz, insGroup* ig);
void emitDispLargeJmp(
instrDesc* id, bool isNew, bool doffs, bool asmfm, unsigned offset, BYTE* pCode, size_t sz, insGroup* ig);
void emitDispComma();
void emitDispInst(instruction ins);
void emitDispImm(ssize_t imm, bool addComma, bool alwaysHex = false, bool isAddrOffset = false);
void emitDispFloatZero();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册