-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
First version of standard math.h handling added
- Loading branch information
zik.saleeba
committed
Jun 13, 2010
1 parent
93d360f
commit fc9d00d
Showing
5 changed files
with
148 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,138 @@ | ||
/* stdio.h library for large systems - small embedded systems use clibrary.c instead */ | ||
#include "../picoc.h" | ||
|
||
#ifndef BUILTIN_MINI_STDLIB | ||
|
||
void MathSin(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) | ||
{ | ||
ReturnValue->Val->FP = sin(Param[0]->Val->FP); | ||
} | ||
|
||
void MathCos(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) | ||
{ | ||
ReturnValue->Val->FP = cos(Param[0]->Val->FP); | ||
} | ||
|
||
void MathTan(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) | ||
{ | ||
ReturnValue->Val->FP = tan(Param[0]->Val->FP); | ||
} | ||
|
||
void MathAsin(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) | ||
{ | ||
ReturnValue->Val->FP = asin(Param[0]->Val->FP); | ||
} | ||
|
||
void MathAcos(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) | ||
{ | ||
ReturnValue->Val->FP = acos(Param[0]->Val->FP); | ||
} | ||
|
||
void MathAtan(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) | ||
{ | ||
ReturnValue->Val->FP = atan(Param[0]->Val->FP); | ||
} | ||
|
||
void MathSinh(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) | ||
{ | ||
ReturnValue->Val->FP = sinh(Param[0]->Val->FP); | ||
} | ||
|
||
void MathCosh(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) | ||
{ | ||
ReturnValue->Val->FP = cosh(Param[0]->Val->FP); | ||
} | ||
|
||
void MathTanh(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) | ||
{ | ||
ReturnValue->Val->FP = tanh(Param[0]->Val->FP); | ||
} | ||
|
||
void MathExp(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) | ||
{ | ||
ReturnValue->Val->FP = exp(Param[0]->Val->FP); | ||
} | ||
|
||
void MathFabs(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) | ||
{ | ||
ReturnValue->Val->FP = fabs(Param[0]->Val->FP); | ||
} | ||
|
||
void MathLog(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) | ||
{ | ||
ReturnValue->Val->FP = log(Param[0]->Val->FP); | ||
} | ||
|
||
void MathLog10(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) | ||
{ | ||
ReturnValue->Val->FP = log10(Param[0]->Val->FP); | ||
} | ||
|
||
void MathPow(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) | ||
{ | ||
ReturnValue->Val->FP = pow(Param[0]->Val->FP, Param[1]->Val->FP); | ||
} | ||
|
||
void MathSqrt(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) | ||
{ | ||
ReturnValue->Val->FP = sqrt(Param[0]->Val->FP); | ||
} | ||
|
||
void MathRound(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) | ||
{ | ||
ReturnValue->Val->FP = floor(Param[0]->Val->FP + 0.5); /* XXX - fix for soft float */ | ||
} | ||
|
||
void MathCeil(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) | ||
{ | ||
ReturnValue->Val->FP = ceil(Param[0]->Val->FP); | ||
} | ||
|
||
void MathFloor(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) | ||
{ | ||
ReturnValue->Val->FP = floor(Param[0]->Val->FP); | ||
} | ||
|
||
/* all math.h functions */ | ||
struct LibraryFunction MathFunctions[] = | ||
{ | ||
{ MathSin, "float sin(float);" }, | ||
{ MathCos, "float cos(float);" }, | ||
{ MathTan, "float tan(float);" }, | ||
{ MathAsin, "float asin(float);" }, | ||
{ MathAcos, "float acos(float);" }, | ||
{ MathAtan, "float atan(float);" }, | ||
{ MathSinh, "float sinh(float);" }, | ||
{ MathCosh, "float cosh(float);" }, | ||
{ MathTanh, "float tanh(float);" }, | ||
{ MathExp, "float exp(float);" }, | ||
{ MathFabs, "float fabs(float);" }, | ||
{ MathLog, "float log(float);" }, | ||
{ MathLog10, "float log10(float);" }, | ||
{ MathPow, "float pow(float,float);" }, | ||
{ MathSqrt, "float sqrt(float);" }, | ||
{ MathRound, "float round(float);" }, | ||
{ MathCeil, "float ceil(float);" }, | ||
{ MathFloor, "float floor(float);" }, | ||
{ NULL, NULL } | ||
}; | ||
|
||
/* creates various system-dependent definitions */ | ||
void MathSetupFunc(void) | ||
{ | ||
#if 0 | ||
VariableDefinePlatformVar(NULL, "EOF", &IntType, (union AnyValue *)&EOFValue, FALSE); | ||
VariableDefinePlatformVar(NULL, "SEEK_SET", &IntType, (union AnyValue *)&SEEK_SETValue, FALSE); | ||
VariableDefinePlatformVar(NULL, "SEEK_CUR", &IntType, (union AnyValue *)&SEEK_CURValue, FALSE); | ||
VariableDefinePlatformVar(NULL, "SEEK_END", &IntType, (union AnyValue *)&SEEK_ENDValue, FALSE); | ||
VariableDefinePlatformVar(NULL, "BUFSIZ", &IntType, (union AnyValue *)&BUFSIZValue, FALSE); | ||
VariableDefinePlatformVar(NULL, "FILENAME_MAX", &IntType, (union AnyValue *)&FILENAME_MAXValue, FALSE); | ||
VariableDefinePlatformVar(NULL, "_IOFBF", &IntType, (union AnyValue *)&_IOFBFValue, FALSE); | ||
VariableDefinePlatformVar(NULL, "_IOLBF", &IntType, (union AnyValue *)&_IOLBFValue, FALSE); | ||
VariableDefinePlatformVar(NULL, "_IONBF", &IntType, (union AnyValue *)&_IONBFValue, FALSE); | ||
VariableDefinePlatformVar(NULL, "L_tmpnam", &IntType, (union AnyValue *)&L_tmpnamValue, FALSE); | ||
VariableDefinePlatformVar(NULL, "GETS_MAX", &IntType, (union AnyValue *)&GETS_MAXValue, FALSE); | ||
#endif | ||
} | ||
|
||
#endif /* !BUILTIN_MINI_STDLIB */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters