Byte code size optimizations
This commit is contained in:
parent
0c3e19741c
commit
92b2c34293
|
@ -1274,6 +1274,25 @@ __asm inp_load_local_8
|
||||||
|
|
||||||
#pragma bytecode(BC_LOAD_LOCAL_8, inp_load_local_8)
|
#pragma bytecode(BC_LOAD_LOCAL_8, inp_load_local_8)
|
||||||
|
|
||||||
|
__asm inp_load_local_u8
|
||||||
|
{
|
||||||
|
lda (ip), y
|
||||||
|
tax
|
||||||
|
iny
|
||||||
|
lda (ip), y
|
||||||
|
iny
|
||||||
|
sty tmpy
|
||||||
|
tay
|
||||||
|
lda (fp), y
|
||||||
|
sta $00, x
|
||||||
|
lda #0
|
||||||
|
sta $01, x
|
||||||
|
ldy tmpy
|
||||||
|
jmp startup.exec
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma bytecode(BC_LOAD_LOCAL_U8, inp_load_local_u8)
|
||||||
|
|
||||||
__asm inp_store_local_8
|
__asm inp_store_local_8
|
||||||
{
|
{
|
||||||
lda (ip), y
|
lda (ip), y
|
||||||
|
|
|
@ -37,6 +37,7 @@ enum ByteCode
|
||||||
BC_LEA_ACCU_INDEX,
|
BC_LEA_ACCU_INDEX,
|
||||||
|
|
||||||
BC_LOAD_LOCAL_8,
|
BC_LOAD_LOCAL_8,
|
||||||
|
BC_LOAD_LOCAL_U8,
|
||||||
BC_LOAD_LOCAL_16,
|
BC_LOAD_LOCAL_16,
|
||||||
BC_LOAD_LOCAL_32,
|
BC_LOAD_LOCAL_32,
|
||||||
|
|
||||||
|
|
|
@ -577,6 +577,7 @@ void ByteCodeInstruction::Assemble(ByteCodeGenerator* generator, ByteCodeBasicBl
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BC_LOAD_LOCAL_8:
|
case BC_LOAD_LOCAL_8:
|
||||||
|
case BC_LOAD_LOCAL_U8:
|
||||||
case BC_LOAD_LOCAL_16:
|
case BC_LOAD_LOCAL_16:
|
||||||
case BC_LOAD_LOCAL_32:
|
case BC_LOAD_LOCAL_32:
|
||||||
case BC_STORE_LOCAL_8:
|
case BC_STORE_LOCAL_8:
|
||||||
|
@ -4539,6 +4540,24 @@ bool ByteCodeBasicBlock::PeepHoleOptimizer(int phase)
|
||||||
progress = true;
|
progress = true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
else if (
|
||||||
|
mIns[i + 0].mCode == BC_LOAD_LOCAL_8 &&
|
||||||
|
mIns[i + 1].mCode == BC_LOAD_REG_8 && mIns[i + 1].mRegister == mIns[i + 0].mRegister && mIns[i + 1].mRegisterFinal)
|
||||||
|
{
|
||||||
|
mIns[i + 0].mCode = BC_LOAD_LOCAL_U8;
|
||||||
|
mIns[i + 0].mRegister = BC_REG_ACCU;
|
||||||
|
mIns[i + 0].mLive |= LIVE_ACCU;
|
||||||
|
mIns[i + 1].mCode = BC_NOP;
|
||||||
|
progress = true;
|
||||||
|
}
|
||||||
|
else if (
|
||||||
|
mIns[i + 0].mCode == BC_LOAD_LOCAL_U8 && mIns[i + 0].mRegister == BC_REG_ACCU &&
|
||||||
|
mIns[i + 1].mCode == BC_STORE_REG_16 && !(mIns[i + 1].mLive & LIVE_ACCU))
|
||||||
|
{
|
||||||
|
mIns[i + 0].mRegister = mIns[i + 1].mRegister;
|
||||||
|
mIns[i + 1].mCode = BC_NOP;
|
||||||
|
progress = true;
|
||||||
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
else if ((mIns[i].mCode == BC_LOAD_LOCAL_16 || mIns[i].mCode == BC_LOAD_ABS_16) && mIns[i + 1].mCode == BC_ADDR_REG && mIns[i].mRegister == mIns[i + 1].mRegister && mIns[i + 1].mRegisterFinal)
|
else if ((mIns[i].mCode == BC_LOAD_LOCAL_16 || mIns[i].mCode == BC_LOAD_ABS_16) && mIns[i + 1].mCode == BC_ADDR_REG && mIns[i].mRegister == mIns[i + 1].mRegister && mIns[i + 1].mRegisterFinal)
|
||||||
|
|
|
@ -38,6 +38,7 @@ enum ByteCode
|
||||||
BC_LEA_ACCU_INDEX,
|
BC_LEA_ACCU_INDEX,
|
||||||
|
|
||||||
BC_LOAD_LOCAL_8,
|
BC_LOAD_LOCAL_8,
|
||||||
|
BC_LOAD_LOCAL_U8,
|
||||||
BC_LOAD_LOCAL_16,
|
BC_LOAD_LOCAL_16,
|
||||||
BC_LOAD_LOCAL_32,
|
BC_LOAD_LOCAL_32,
|
||||||
|
|
||||||
|
|
|
@ -193,6 +193,10 @@ void ByteCodeDisassembler::Disassemble(FILE* file, const uint8* memory, int star
|
||||||
fprintf(file, "MOVB\t%s, %d(FP)", TempName(memory[start + i + 0], tbuffer, proc), memory[start + i + 1]);
|
fprintf(file, "MOVB\t%s, %d(FP)", TempName(memory[start + i + 0], tbuffer, proc), memory[start + i + 1]);
|
||||||
i += 2;
|
i += 2;
|
||||||
break;
|
break;
|
||||||
|
case BC_LOAD_LOCAL_U8:
|
||||||
|
fprintf(file, "MOVUB\t%s, %d(FP)", TempName(memory[start + i + 0], tbuffer, proc), memory[start + i + 1]);
|
||||||
|
i += 2;
|
||||||
|
break;
|
||||||
case BC_LOAD_LOCAL_16:
|
case BC_LOAD_LOCAL_16:
|
||||||
fprintf(file, "MOV\t%s, %d(FP)", TempName(memory[start + i + 0], tbuffer, proc), memory[start + i + 1]);
|
fprintf(file, "MOV\t%s, %d(FP)", TempName(memory[start + i + 0], tbuffer, proc), memory[start + i + 1]);
|
||||||
i += 2;
|
i += 2;
|
||||||
|
|
Loading…
Reference in New Issue