Fix float x+x optimisation

This commit is contained in:
drmortalwombat 2021-09-12 15:18:07 +02:00
parent dac1fa70b3
commit bb4680845e
4 changed files with 17 additions and 13 deletions

View File

@ -1400,7 +1400,7 @@ void InterInstruction::Disassemble(FILE* file)
fprintf(file, "MOVE");
break;
case IC_BINARY_OPERATOR:
fprintf(file, "BINOP");
fprintf(file, "BINOP%d", mOperator);
break;
case IC_UNARY_OPERATOR:
fprintf(file, "UNOP");

View File

@ -2384,6 +2384,8 @@ void NativeCodeBasicBlock::BinaryOperator(InterCodeProcedure* proc, const InterI
if (ins.mTType == IT_FLOAT)
{
int sreg0 = ins.mSTemp[0] < 0 ? -1 : BC_REG_TMP + proc->mTempOffset[ins.mSTemp[0]];
if (ins.mSTemp[1] < 0)
{
union { float f; unsigned int v; } cc;
@ -2406,6 +2408,8 @@ void NativeCodeBasicBlock::BinaryOperator(InterCodeProcedure* proc, const InterI
{
// cull previous store from accu to temp using direcrt forwarding
mIns.SetSize(mIns.Size() - 8);
if (sreg0 == BC_REG_TMP + proc->mTempOffset[ins.mSTemp[1]])
sreg0 = BC_REG_ACCU;
}
else
{
@ -2439,13 +2443,13 @@ void NativeCodeBasicBlock::BinaryOperator(InterCodeProcedure* proc, const InterI
}
else
{
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_TMP + proc->mTempOffset[ins.mSTemp[0]] + 0));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, sreg0 + 0));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_WORK + 0));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_TMP + proc->mTempOffset[ins.mSTemp[0]] + 1));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, sreg0 + 1));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_WORK + 1));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_TMP + proc->mTempOffset[ins.mSTemp[0]] + 2));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, sreg0 + 2));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_WORK + 2));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_TMP + proc->mTempOffset[ins.mSTemp[0]] + 3));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, sreg0 + 3));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_WORK + 3));
}

View File

@ -25,8 +25,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,24,0
PRODUCTVERSION 1,0,24,0
FILEVERSION 1,0,26,0
PRODUCTVERSION 1,0,26,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@ -43,12 +43,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "oscar64"
VALUE "FileDescription", "oscar64 compiler"
VALUE "FileVersion", "1.0.24.0"
VALUE "FileVersion", "1.0.26.0"
VALUE "InternalName", "oscar64.exe"
VALUE "LegalCopyright", "Copyright (C) 2021"
VALUE "OriginalFilename", "oscar64.exe"
VALUE "ProductName", "oscar64"
VALUE "ProductVersion", "1.0.24.0"
VALUE "ProductVersion", "1.0.26.0"
END
END
BLOCK "VarFileInfo"

View File

@ -504,15 +504,15 @@
{
"Name" = "8:Microsoft Visual Studio"
"ProductName" = "8:oscar64"
"ProductCode" = "8:{B20D936B-B9E1-4135-B9AA-8C367043CF71}"
"PackageCode" = "8:{63E1E188-3AB3-4767-B84A-CDB7F9FC9E10}"
"ProductCode" = "8:{4A0B4AAF-D32D-43EC-BA23-231C367E8BDC}"
"PackageCode" = "8:{D2AC90E7-B1B4-48F0-920C-74C28DC03786}"
"UpgradeCode" = "8:{9AB61EFF-ACAC-4079-9950-8D96615CD4EF}"
"AspNetVersion" = "8:2.0.50727.0"
"RestartWWWService" = "11:FALSE"
"RemovePreviousVersions" = "11:TRUE"
"DetectNewerInstalledVersion" = "11:TRUE"
"InstallAllUsers" = "11:FALSE"
"ProductVersion" = "8:1.0.24"
"ProductVersion" = "8:1.0.26"
"Manufacturer" = "8:oscar64"
"ARPHELPTELEPHONE" = "8:"
"ARPHELPLINK" = "8:"
@ -1026,7 +1026,7 @@
{
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_FB2E467BC172457785F4279BB0BFE8B6"
{
"SourcePath" = "8:..\\Release\\oscar64.exe"
"SourcePath" = "8:..\\Debug\\oscar64.exe"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_C95D3F098F884652A04D707B55B980EE"