Fix disassembler choking on long names
This commit is contained in:
parent
6331ec5707
commit
1ee7845bb4
|
@ -59,7 +59,7 @@ const char* ByteCodeDisassembler::AddrName(int addr, char* buffer, Linker* linke
|
|||
LinkerObject* obj = linker->FindObjectByAddr(addr);
|
||||
if (obj && obj->mIdent)
|
||||
{
|
||||
sprintf_s(buffer, 40, "%s + %d", obj->mIdent->mString, addr - obj->mAddress);
|
||||
sprintf_s(buffer, 160, "%s + %d", obj->mIdent->mString, addr - obj->mAddress);
|
||||
return buffer;
|
||||
}
|
||||
}
|
||||
|
@ -76,7 +76,7 @@ void ByteCodeDisassembler::Disassemble(FILE* file, const uint8* memory, int bank
|
|||
else if (ident)
|
||||
fprintf(file, "%s:\n", ident->mString);
|
||||
|
||||
char tbuffer[100], abuffer[100];
|
||||
char tbuffer[160], abuffer[160];
|
||||
#if 0
|
||||
for (int i = 0; i < proc->mTemporaries.Size(); i++)
|
||||
printf("T%d = $%.2x\n", i, BC_REG_TMP + proc->mTempOffset[i]);
|
||||
|
@ -674,7 +674,7 @@ void NativeCodeDisassembler::Disassemble(FILE* file, const uint8* memory, int ba
|
|||
else if (ident)
|
||||
fprintf(file, "%s:\n", ident->mString);
|
||||
|
||||
char tbuffer[100], abuffer[100];
|
||||
char tbuffer[160], abuffer[160];
|
||||
|
||||
int ip = start;
|
||||
while (ip < start + size)
|
||||
|
@ -756,7 +756,7 @@ const char* NativeCodeDisassembler::AddrName(int addr, char* buffer, Linker* lin
|
|||
LinkerObject* obj = linker->FindObjectByAddr(addr);
|
||||
if (obj && obj->mIdent)
|
||||
{
|
||||
sprintf_s(buffer, 40, "; (%s + %d)", obj->mIdent->mString, addr - obj->mAddress);
|
||||
sprintf_s(buffer, 160, "; (%s + %d)", obj->mIdent->mString, addr - obj->mAddress);
|
||||
return buffer;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13172,7 +13172,7 @@ bool NativeCodeBasicBlock::MoveLoadImmStoreAbsoluteUp(int at)
|
|||
}
|
||||
j--;
|
||||
}
|
||||
else if (mIns[j - 1].mType == ASMIT_STA && mIns[j - 1].mMode == mIns[at + 1].mMode && mIns[j - 1].mLinkerObject == mIns[at + 1].mLinkerObject && mIns[j - 1].mAddress != mIns[at + 1].mAddress)
|
||||
else if (mIns[j - 1].mType == ASMIT_STA && mIns[j - 1].mMode == mIns[at + 1].mMode && !(mIns[j - 1].mLinkerObject == mIns[at + 1].mLinkerObject && mIns[j - 1].mAddress == mIns[at + 1].mAddress))
|
||||
j--;
|
||||
else
|
||||
return false;
|
||||
|
@ -16785,7 +16785,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
|
|||
for (int i = 2; i + 1 < mIns.Size(); i++)
|
||||
{
|
||||
if (mIns[i + 0].mType == ASMIT_LDA && (mIns[i + 0].mMode == ASMIM_IMMEDIATE || mIns[i + 0].mMode == ASMIM_ZERO_PAGE) &&
|
||||
mIns[i + 1].mType == ASMIT_STA && (mIns[i + 1].mMode == ASMIM_ABSOLUTE || mIns[i + 1].mMode == ASMIM_ZERO_PAGE))
|
||||
mIns[i + 1].mType == ASMIT_STA && (mIns[i + 1].mMode == ASMIM_ABSOLUTE || mIns[i + 1].mMode == ASMIM_ZERO_PAGE) && !(mIns[i + 1].mFlags & NCIF_VOLATILE))
|
||||
{
|
||||
if (MoveLoadImmStoreAbsoluteUp(i + 0))
|
||||
changed = true;
|
||||
|
@ -17291,6 +17291,23 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
|
|||
mIns[i + 1].mType = ASMIT_STA;
|
||||
progress = true;
|
||||
}
|
||||
else if (
|
||||
mIns[i + 0].mType == ASMIT_ROL && mIns[i + 0].mMode == ASMIM_IMPLIED &&
|
||||
mIns[i + 1].mType == ASMIT_LSR && mIns[i + 1].mMode == ASMIM_IMPLIED && !(mIns[i + 1].mLive & (LIVE_CPU_REG_A | LIVE_CPU_REG_Z)))
|
||||
{
|
||||
mIns[i + 0].mType = ASMIT_NOP; mIns[i + 0].mMode = ASMIM_IMPLIED;
|
||||
mIns[i + 1].mType = ASMIT_NOP; mIns[i + 1].mMode = ASMIM_IMPLIED;
|
||||
progress = true;
|
||||
}
|
||||
else if (
|
||||
mIns[i + 0].mType == ASMIT_ROR && mIns[i + 0].mMode == ASMIM_IMPLIED &&
|
||||
mIns[i + 1].mType == ASMIT_ASL && mIns[i + 1].mMode == ASMIM_IMPLIED && !(mIns[i + 1].mLive & (LIVE_CPU_REG_A | LIVE_CPU_REG_Z)))
|
||||
{
|
||||
mIns[i + 0].mType = ASMIT_NOP; mIns[i + 0].mMode = ASMIM_IMPLIED;
|
||||
mIns[i + 1].mType = ASMIT_NOP; mIns[i + 1].mMode = ASMIM_IMPLIED;
|
||||
progress = true;
|
||||
}
|
||||
|
||||
else if (
|
||||
mIns[i + 0].mType == ASMIT_TXA &&
|
||||
mIns[i + 1].mType == ASMIT_TAX)
|
||||
|
@ -18974,7 +18991,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
|
|||
else if (
|
||||
mIns[i + 0].IsShift() && mIns[i + 0].mMode == ASMIM_ZERO_PAGE &&
|
||||
mIns[i + 1].mType == ASMIT_CLC &&
|
||||
mIns[i + 2].mType == ASMIT_LDA && (mIns[i + 2].mMode == ASMIM_IMMEDIATE || mIns[i + 2].mMode == ASMIM_IMMEDIATE_ADDRESS) &&
|
||||
mIns[i + 2].mType == ASMIT_LDA && (mIns[i + 2].mMode == ASMIM_IMMEDIATE || mIns[i + 2].mMode == ASMIM_IMMEDIATE_ADDRESS || mIns[i + 2].mMode == ASMIM_ZERO_PAGE && mIns[i + 2].mAddress != mIns[i + 0].mAddress) &&
|
||||
mIns[i + 3].mType == ASMIT_ADC && mIns[i + 3].mMode == ASMIM_ZERO_PAGE && mIns[i + 3].mAddress == mIns[i + 0].mAddress &&
|
||||
!(mIns[i + 3].mLive & LIVE_MEM))
|
||||
{
|
||||
|
|
|
@ -3347,6 +3347,7 @@ void Parser::ParsePragma(void)
|
|||
int flags = 0;
|
||||
Expression* exp;
|
||||
Declaration* dstart = nullptr, * dend = nullptr;
|
||||
LinkerSectionType type = LST_DATA;
|
||||
|
||||
ConsumeToken(TK_COMMA);
|
||||
|
||||
|
@ -3357,22 +3358,46 @@ void Parser::ParsePragma(void)
|
|||
mErrors->Error(mScanner->mLocation, EERR_PRAGMA_PARAMETER, "Integer number for flags expected");
|
||||
|
||||
if (ConsumeTokenIf(TK_COMMA))
|
||||
{
|
||||
if (mScanner->mToken != TK_COMMA)
|
||||
{
|
||||
exp = ParseExpression();
|
||||
if (exp->mDecValue && exp->mDecValue->mType == DT_VARIABLE)
|
||||
dstart = exp->mDecValue;
|
||||
}
|
||||
|
||||
if (ConsumeTokenIf(TK_COMMA))
|
||||
{
|
||||
if (mScanner->mToken != TK_COMMA)
|
||||
{
|
||||
exp = ParseExpression();
|
||||
if (exp->mDecValue && exp->mDecValue->mType == DT_VARIABLE)
|
||||
dend = exp->mDecValue;
|
||||
}
|
||||
|
||||
if (ConsumeTokenIf(TK_COMMA))
|
||||
{
|
||||
if (mScanner->mToken == TK_IDENT)
|
||||
{
|
||||
if (!strcmp(mScanner->mTokenIdent->mString, "bss"))
|
||||
type = LST_BSS;
|
||||
else if (!strcmp(mScanner->mTokenIdent->mString, "data"))
|
||||
type = LST_DATA;
|
||||
else
|
||||
mErrors->Error(mScanner->mLocation, EERR_PRAGMA_PARAMETER, "Unknown section type");
|
||||
}
|
||||
else
|
||||
mErrors->Error(mScanner->mLocation, EERR_PRAGMA_PARAMETER, "Identifier expected");
|
||||
|
||||
mScanner->NextToken();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LinkerSection* lsec = mCompilationUnits->mLinker->FindSection(sectionIdent);
|
||||
if (!lsec)
|
||||
lsec = mCompilationUnits->mLinker->AddSection(sectionIdent, LST_DATA);
|
||||
lsec = mCompilationUnits->mLinker->AddSection(sectionIdent, type);
|
||||
|
||||
if (dstart)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue