Add left alignment in padding for printf
This commit is contained in:
parent
358def836d
commit
58c99a5dca
110
include/stdio.c
110
include/stdio.c
|
@ -156,7 +156,10 @@ inline int nformi(const sinfo * si, char * str, int v, bool s)
|
||||||
u = -v;
|
u = -v;
|
||||||
}
|
}
|
||||||
|
|
||||||
char i = 10;
|
char b = si->width;
|
||||||
|
if (b < 10)
|
||||||
|
b = 10;
|
||||||
|
char i = b;
|
||||||
while (u > 0)
|
while (u > 0)
|
||||||
{
|
{
|
||||||
int c = u % si->base;
|
int c = u % si->base;
|
||||||
|
@ -168,7 +171,7 @@ inline int nformi(const sinfo * si, char * str, int v, bool s)
|
||||||
u /= si->base;
|
u /= si->base;
|
||||||
}
|
}
|
||||||
|
|
||||||
char digits = si->precision != 255 ? 10 - si->precision : 9;
|
char digits = si->precision != 255 ? b - si->precision : b - 1;
|
||||||
|
|
||||||
while (i > digits)
|
while (i > digits)
|
||||||
sp[--i] = '0';
|
sp[--i] = '0';
|
||||||
|
@ -184,12 +187,21 @@ inline int nformi(const sinfo * si, char * str, int v, bool s)
|
||||||
else if (si->sign)
|
else if (si->sign)
|
||||||
sp[--i] = '+';
|
sp[--i] = '+';
|
||||||
|
|
||||||
while (i > 10 - si->width)
|
|
||||||
sp[--i] = si->fill;
|
|
||||||
|
|
||||||
char j = 0;
|
char j = 0;
|
||||||
while (i < 10)
|
if (si->left)
|
||||||
sp[j++] = sp[i++];
|
{
|
||||||
|
while (i < b)
|
||||||
|
sp[j++] = sp[i++];
|
||||||
|
while (j < si->width)
|
||||||
|
sp[j++] = si->fill;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
while (i + si->width > b)
|
||||||
|
sp[--i] = si->fill;
|
||||||
|
while (i < b)
|
||||||
|
sp[j++] = sp[i++];
|
||||||
|
}
|
||||||
|
|
||||||
return j;
|
return j;
|
||||||
}
|
}
|
||||||
|
@ -207,7 +219,11 @@ int nforml(const sinfo * si, char * str, long v, bool s)
|
||||||
u = -v;
|
u = -v;
|
||||||
}
|
}
|
||||||
|
|
||||||
char i = 16;
|
char b = si->width;
|
||||||
|
if (b < 16)
|
||||||
|
b = 16;
|
||||||
|
char i = b;
|
||||||
|
|
||||||
while (u > 0)
|
while (u > 0)
|
||||||
{
|
{
|
||||||
int c = u % si->base;
|
int c = u % si->base;
|
||||||
|
@ -219,7 +235,7 @@ int nforml(const sinfo * si, char * str, long v, bool s)
|
||||||
u /= si->base;
|
u /= si->base;
|
||||||
}
|
}
|
||||||
|
|
||||||
char digits = si->precision != 255 ? 16 - si->precision : 15;
|
char digits = si->precision != 255 ? b - si->precision : b - 1;
|
||||||
|
|
||||||
while (i > digits)
|
while (i > digits)
|
||||||
sp[--i] = '0';
|
sp[--i] = '0';
|
||||||
|
@ -235,12 +251,21 @@ int nforml(const sinfo * si, char * str, long v, bool s)
|
||||||
else if (si->sign)
|
else if (si->sign)
|
||||||
sp[--i] = '+';
|
sp[--i] = '+';
|
||||||
|
|
||||||
while (i > 16 - si->width)
|
|
||||||
sp[--i] = si->fill;
|
|
||||||
|
|
||||||
char j = 0;
|
char j = 0;
|
||||||
while (i < 16)
|
if (si->left)
|
||||||
sp[j++] = sp[i++];
|
{
|
||||||
|
while (i < b)
|
||||||
|
sp[j++] = sp[i++];
|
||||||
|
while (j < si->width)
|
||||||
|
sp[j++] = si->fill;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
while (i + si->width > b)
|
||||||
|
sp[--i] = si->fill;
|
||||||
|
while (i < b)
|
||||||
|
sp[j++] = sp[i++];
|
||||||
|
}
|
||||||
|
|
||||||
return j;
|
return j;
|
||||||
}
|
}
|
||||||
|
@ -371,10 +396,18 @@ int nformf(const sinfo * si, char * str, float f, char type)
|
||||||
|
|
||||||
if (d < si->width)
|
if (d < si->width)
|
||||||
{
|
{
|
||||||
for(char i=1; i<=d; i++)
|
if (si->left)
|
||||||
sp[si->width - i] = sp[d - i];
|
{
|
||||||
for(char i=0; i<si->width-d; i++)
|
for(char i=d; i<si->width; i++)
|
||||||
sp[i] = ' ';
|
sp[i] = ' ';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(char i=1; i<=d; i++)
|
||||||
|
sp[si->width - i] = sp[d - i];
|
||||||
|
for(char i=0; i<si->width-d; i++)
|
||||||
|
sp[i] = ' ';
|
||||||
|
}
|
||||||
d = si->width;
|
d = si->width;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -407,7 +440,7 @@ char * sformat(char * buff, const char * fmt, int * fps, bool print)
|
||||||
c = *p++;
|
c = *p++;
|
||||||
|
|
||||||
si.base = 10;
|
si.base = 10;
|
||||||
si.width = 1;
|
si.width = 0;
|
||||||
si.precision = 255;
|
si.precision = 255;
|
||||||
si.fill = ' ';
|
si.fill = ' ';
|
||||||
si.sign = false;
|
si.sign = false;
|
||||||
|
@ -422,6 +455,8 @@ char * sformat(char * buff, const char * fmt, int * fps, bool print)
|
||||||
si.fill = '0';
|
si.fill = '0';
|
||||||
else if (c == '#')
|
else if (c == '#')
|
||||||
si.prefix = true;
|
si.prefix = true;
|
||||||
|
else if (c == '-')
|
||||||
|
si.left = true;
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
c = *p++;
|
c = *p++;
|
||||||
|
@ -497,12 +532,47 @@ char * sformat(char * buff, const char * fmt, int * fps, bool print)
|
||||||
else if (c == 's')
|
else if (c == 's')
|
||||||
{
|
{
|
||||||
char * sp = (char *)*fps++;
|
char * sp = (char *)*fps++;
|
||||||
|
|
||||||
|
char n = 0;
|
||||||
|
if (si.width)
|
||||||
|
{
|
||||||
|
while (sp[n])
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!si.left)
|
||||||
|
{
|
||||||
|
while (n < si.width)
|
||||||
|
{
|
||||||
|
bp[bi++] = si.fill;
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (print)
|
if (print)
|
||||||
|
{
|
||||||
|
if (bi)
|
||||||
|
{
|
||||||
|
bp[bi] = 0;
|
||||||
|
puts(bp);
|
||||||
|
bi = 0;
|
||||||
|
}
|
||||||
puts(sp);
|
puts(sp);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
while (char c = *sp++)
|
while (char c = *sp++)
|
||||||
*bp++ = c;
|
bp[bi++] = c;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (si.left)
|
||||||
|
{
|
||||||
|
while (n < si.width)
|
||||||
|
{
|
||||||
|
bp[bi++] = si.fill;
|
||||||
|
n++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (c == 'c')
|
else if (c == 'c')
|
||||||
|
|
|
@ -8177,6 +8177,34 @@ void InterCodeBasicBlock::SingleBlockLoopOptimisation(const NumberSet& aliasedPa
|
||||||
|
|
||||||
for (int i = 0; i < mInstructions.Size(); i++)
|
for (int i = 0; i < mInstructions.Size(); i++)
|
||||||
{
|
{
|
||||||
|
if (i + 1 < mInstructions.Size())
|
||||||
|
{
|
||||||
|
InterInstruction* ins0 = mInstructions[i + 0];
|
||||||
|
InterInstruction* ins1 = mInstructions[i + 1];
|
||||||
|
if (ins0->mCode == IC_BINARY_OPERATOR && ins0->mOperator == IA_ADD && ins1->mCode == IC_BINARY_OPERATOR && ins1->mOperator == IA_ADD)
|
||||||
|
{
|
||||||
|
if (ins0->mDst.mTemp == ins1->mSrc[1].mTemp && IsIntegerType(ins1->mDst.mType) && ins1->mSrc[1].mFinal)
|
||||||
|
{
|
||||||
|
if (ins0->mSrc[0].mTemp >= 0 && ins0->mSrc[1].mTemp >= 0 && ins1->mSrc[0].mTemp >= 0)
|
||||||
|
{
|
||||||
|
if ((dep[ins0->mSrc[1].mTemp] == DEP_INDEX || dep[ins0->mSrc[1].mTemp] == DEP_INDEX_EXTENDED) &&
|
||||||
|
(dep[ins0->mSrc[0].mTemp] == DEP_UNKNOWN || dep[ins0->mSrc[0].mTemp] == DEP_VARIABLE) &&
|
||||||
|
(dep[ins1->mSrc[0].mTemp] == DEP_UNKNOWN || dep[ins1->mSrc[0].mTemp] == DEP_VARIABLE))
|
||||||
|
{
|
||||||
|
InterOperand op = ins0->mSrc[1];
|
||||||
|
ins0->mSrc[1] = ins1->mSrc[0];
|
||||||
|
ins1->mSrc[0] = op;
|
||||||
|
if (dep[ins0->mSrc[0].mTemp] == DEP_UNKNOWN && dep[ins0->mSrc[1].mTemp] == DEP_UNKNOWN)
|
||||||
|
ins0->mInvariant = true;
|
||||||
|
dep[ins0->mDst.mTemp] = DEP_UNKNOWN;
|
||||||
|
dep[ins1->mDst.mTemp] = DEP_UNKNOWN;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
InterInstruction* ins = mInstructions[i];
|
InterInstruction* ins = mInstructions[i];
|
||||||
int t = ins->mDst.mTemp;
|
int t = ins->mDst.mTemp;
|
||||||
if (t >= 0)
|
if (t >= 0)
|
||||||
|
@ -9971,6 +9999,23 @@ void InterCodeProcedure::Close(void)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
BuildLoopPrefix();
|
||||||
|
DisassembleDebug("added dominators");
|
||||||
|
|
||||||
|
BuildDataFlowSets();
|
||||||
|
|
||||||
|
ResetVisited();
|
||||||
|
mEntryBlock->SingleBlockLoopOptimisation(mParamAliasedSet);
|
||||||
|
|
||||||
|
DisassembleDebug("single block loop opt 3");
|
||||||
|
|
||||||
|
BuildDataFlowSets();
|
||||||
|
|
||||||
|
BuildTraces(false);
|
||||||
|
DisassembleDebug("Rebuilt traces");
|
||||||
|
#endif
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
ResetVisited();
|
ResetVisited();
|
||||||
if (mEntryBlock->CheckStaticStack())
|
if (mEntryBlock->CheckStaticStack())
|
||||||
|
|
|
@ -217,7 +217,8 @@ int main2(int argc, const char** argv)
|
||||||
|
|
||||||
// Add runtime module
|
// Add runtime module
|
||||||
|
|
||||||
compiler->mCompilationUnits->AddUnit(loc, crtPath, nullptr);
|
if (crtPath[0])
|
||||||
|
compiler->mCompilationUnits->AddUnit(loc, crtPath, nullptr);
|
||||||
|
|
||||||
if (compiler->ParseSource() && compiler->GenerateCode())
|
if (compiler->ParseSource() && compiler->GenerateCode())
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue