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