From 806539a2d623ee9c1357d8d0760916e8f7144532 Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Tue, 13 Feb 2024 20:49:11 +0100 Subject: [PATCH] add "tan" to intrinsic functions --- include/math.h | 1 + oscar64/Constexpr.cpp | 5 +++++ oscar64/Declaration.cpp | 2 ++ oscar64/InterCode.cpp | 3 ++- oscar64/InterCodeGenerator.cpp | 3 +++ 5 files changed, 13 insertions(+), 1 deletion(-) diff --git a/include/math.h b/include/math.h index 4c58d7f..ac4f42e 100644 --- a/include/math.h +++ b/include/math.h @@ -32,6 +32,7 @@ bool isfinite(float f); #pragma intrinsic(sin) #pragma intrinsic(cos) +#pragma intrinsic(tan) #pragma compile("math.c") diff --git a/oscar64/Constexpr.cpp b/oscar64/Constexpr.cpp index a5692e6..77555be 100644 --- a/oscar64/Constexpr.cpp +++ b/oscar64/Constexpr.cpp @@ -1099,6 +1099,11 @@ ConstexprInterpreter::Value ConstexprInterpreter::EvalCall(Expression* exp, Cons mResult = Value(exp->mLocation, TheFloatTypeDeclaration); mResult.PutFloat(cos(mParams[0].GetFloat())); } + else if (!strcmp(iname->mString, "tan")) + { + mResult = Value(exp->mLocation, TheFloatTypeDeclaration); + mResult.PutFloat(tan(mParams[0].GetFloat())); + } else mErrors->Error(exp->mLeft->mDecValue->mLocation, EERR_OBJECT_NOT_FOUND, "Unknown intrinsic function", iname); } diff --git a/oscar64/Declaration.cpp b/oscar64/Declaration.cpp index 8cc75a2..cc45292 100644 --- a/oscar64/Declaration.cpp +++ b/oscar64/Declaration.cpp @@ -946,6 +946,8 @@ Expression* Expression::ConstantFold(Errors * errors, LinkerSection * dataSectio d = sin(d); else if (!strcmp(iname->mString, "cos")) d = cos(d); + else if (!strcmp(iname->mString, "tan")) + d = tan(d); else return this; diff --git a/oscar64/InterCode.cpp b/oscar64/InterCode.cpp index 3e85194..ca24ff0 100644 --- a/oscar64/InterCode.cpp +++ b/oscar64/InterCode.cpp @@ -10409,9 +10409,10 @@ bool InterCodeBasicBlock::SimplifyIntegerNumeric(const GrowingInstructionPtrArra if (pins->mSrc[0].mTemp < 0 && ins->mSrc[0].mIntConst + pins->mSrc[0].mIntConst >= 0) { + int64 offset = ins->mSrc[0].mIntConst + pins->mSrc[0].mIntConst; ins->mSrc[0].Forward(pins->mSrc[1]); pins->mSrc[1].mFinal = false; - ins->mSrc[0].mIntConst += pins->mSrc[0].mIntConst; + ins->mSrc[0].mIntConst += offset; changed = true; } else if (pins->mSrc[1].mTemp < 0 && pins->mSrc[0].mTemp >= 0 && ins->mSrc[0].mIntConst && (ins->mSrc[0].mIntConst >= 256 || pins->mSrc[0].IsUByte())) diff --git a/oscar64/InterCodeGenerator.cpp b/oscar64/InterCodeGenerator.cpp index 49b85ca..e500477 100644 --- a/oscar64/InterCodeGenerator.cpp +++ b/oscar64/InterCodeGenerator.cpp @@ -3343,6 +3343,9 @@ InterCodeGenerator::ExValue InterCodeGenerator::TranslateExpression(Declaration* else if (!strcmp(iname->mString, "cos")) { } + else if (!strcmp(iname->mString, "tan")) + { + } else if (!strcmp(iname->mString, "malloc")) { vr = TranslateExpression(procType, proc, block, exp->mRight, destack, breakBlock, continueBlock, inlineMapper);