From 1030dc837b10a03a02a85d5504cbeec168ce49e2 Mon Sep 17 00:00:00 2001 From: Bernie Innocenti Date: Mon, 03 May 2010 21:53:47 +0000 Subject: Import XaoS r489 (trunk after version 3.5) --- (limited to 'src/include/sffe_cmplx_asm.h') diff --git a/src/include/sffe_cmplx_asm.h b/src/include/sffe_cmplx_asm.h new file mode 100644 index 0000000..f14aae8 --- /dev/null +++ b/src/include/sffe_cmplx_asm.h @@ -0,0 +1,140 @@ +/*///////////////////////////////////////////////////////////////////////////////////// +// project : sFFe ( SegFault (or Segmentation Fault :) ) formula evalutaor ) +// author : Mateusz Malczak ( mateusz@malczak.info ) +// wpage : www.segfaultlabs.com/projects/sffe +/////////////////////////////////////////////////////////////////////////////////////// +// special build for XaoS, for more info visit +// http://www.segfaultlabs.com/projects/sfXaos +/////////////////////////////////////////////////////////////////////////////////////*/ +#ifndef SFFE_CMPLX_ASM_H +#define SFFE_CMPLX_ASM_H + +#include +#ifdef SFFE_CMPLX_ASM + +#include "sffe.h" + +#define sffnctscount 43 +#define sfvarscount 6 +#define cmplxset(c,r,i) ( c = cset(r,i) ) +#define real(c) (c).r +#define imag(c) (c).i + +#ifdef __ELF__ +#define sffecabs _sffecabs +#define sffecarg _sffecarg +#define sffecargs _sffecargs +#define sffecargc _sffecargc +#define sffecinv _sffecinv +#define sffecexp _sffecexp +#define sffecln _sffecln +#define sffeclog2 _sffeclog2 +#define sffeclog _sffeclog +#define sffecsin _sffecsin +#define sffeccos _sffeccos +#define sffectan _sffectan +#define sffeccot _sffeccot +#define sffecsinh _sffecsinh +#define sffeccosh _sffeccosh +#define sffectanh _sffectanh +#define sffeccoth _sffeccoth +#define sffeccpow _sffeccpow +#define sffecpowd _sffecpowd +#define sffecpowi _sffecpowi +#define sffecpowc _sffecpowc +#define sffecsqrt _sffecsqrt +#define sffecrtni _sffecrtni +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + /* written with asm in file cmplx.asm, compile with NASM */ + extern double sffecabs(const cmplx c); + extern double sffecarg(const cmplx c); + extern double sffecargs(const cmplx c); + extern double sffecargc(const cmplx c); + extern cmplx sffecinv(const cmplx c); + extern cmplx sffecexp(const cmplx c); + extern cmplx sffecln(const cmplx c); + extern cmplx sffeclog2(const cmplx c); + extern cmplx sffeclog(const cmplx c, unsigned int base); + extern cmplx sffecsin(const cmplx c); + extern cmplx sffeccos(const cmplx c); + extern cmplx sffectan(const cmplx c); + extern cmplx sffeccot(const cmplx c); + extern cmplx sffecsinh(const cmplx c); + extern cmplx sffeccosh(const cmplx c); + extern cmplx sffectanh(const cmplx c); + extern cmplx sffeccoth(const cmplx c); + /* power functions */ + extern cmplx sffeccpow(const cmplx b, const cmplx exp); + extern cmplx sffecpowd(const cmplx b, double exp); + extern cmplx sffecpowi(const cmplx b, int exp); + extern cmplx sffecpowc(double b, const cmplx exp); + extern cmplx sffecsqrt(const cmplx b); /* square root */ + extern cmplx sffecrtni(const cmplx b, int n, int i); /* i-th solution of N-th order root of a CN */ +/*complex numbers for mparser*/ + cmplx cset(double r, double i); + cmplx cadd(const cmplx c1, const cmplx c2); + cmplx csub(const cmplx c1, const cmplx c2); + cmplx cmul(const cmplx c1, const cmplx c2); + cmplx cdiv(const cmplx c1, const cmplx c2); + sfarg *sfadd(sfarg * const p); /* + */ + sfarg *sfsub(sfarg * const p); /* - */ + sfarg *sfmul(sfarg * const p); /* * */ + sfarg *sfdiv(sfarg * const p); /* / */ + sfarg *sfsin(sfarg * const p); /* sin */ + sfarg *sfcos(sfarg * const p); /* cos */ + sfarg *sftan(sfarg * const p); /* tan */ + sfarg *sfcot(sfarg * const p); /* ctan */ + sfarg *sfasin(sfarg * const p); /* asin */ + sfarg *sfacos(sfarg * const p); /* acos */ + sfarg *sfatan(sfarg * const p); /* atan */ + sfarg *sfacot(sfarg * const p); /* actan */ + sfarg *sfatan2(sfarg * const p); /* atan2 */ + sfarg *sfsinh(sfarg * const p); /* sinh */ + sfarg *sfcosh(sfarg * const p); /* cosh */ + sfarg *sftanh(sfarg * const p); /* tanh */ + sfarg *sfcoth(sfarg * const p); /* ctanh */ + sfarg *sfexp(sfarg * const p); /* exp */ + sfarg *sflog(sfarg * const p); /* log */ + sfarg *sflog2(sfarg * const p); /* log2 */ + sfarg *sflog10(sfarg * const p); /* log2 */ + sfarg *sflogN(sfarg * const p); /* logN */ + sfarg *sflogCN(sfarg * const p); /* logCN */ + sfarg *sfpow(sfarg * const p); /* csflx pow */ + sfarg *sfpowi(sfarg * const p); /* int pow */ + sfarg *sfpowd(sfarg * const p); /* double pow */ + sfarg *sfpowdc(sfarg * const p); /* double to csflx pow */ + sfarg *sfsqr(sfarg * const p); /* sqr */ + sfarg *sfsqrt(sfarg * const p); /* sqrt */ + sfarg *sfrtni(sfarg * const p); /* rtni *//*cos tu nie tak jak powinno byc ;( */ + sfarg *sfinv(sfarg * const p); /* cinv */ + sfarg *sfceil(sfarg * const p); /* ceil */ + sfarg *sffloor(sfarg * const p); /* floor */ + sfarg *sfabs(sfarg * const p); /* abs - |z| */ + sfarg *sfre(sfarg * const p); /* RE */ + sfarg *sfim(sfarg * const p); /* IM */ + sfarg *sfrabs(sfarg * const p); /* abs - real numbers */ + sfarg *sfrand(sfarg * const p); /* rand */ +/*const eval*/ + void sfcPI(sfNumber * cnst); + void sfcPI2(sfNumber * cnst); + void sfc2PI(sfNumber * cnst); + void sfcE(sfNumber * cnst); + void sfcI(sfNumber * cnst); + void sfcRND(sfNumber * cnst); +#ifdef __cplusplus +} +#endif +/* all available function (function pointer, number of parameters, name )*/ + extern const sffunction sfcmplxfunc[sffnctscount]; +/* all available buildin variables */ +extern const char sfcnames[sfvarscount][5]; +/* available variables function pointers */ +extern const cfptr sfcvals[sfvarscount]; + +#endif +#endif -- cgit v0.9.1