mirror of
https://github.com/golang/go
synced 2024-11-25 22:57:58 -07:00
mp fixed arith
R=r DELTA=149 (80 added, 62 deleted, 7 changed) OCL=14029 CL=14029
This commit is contained in:
parent
baf0747dd3
commit
272ae659db
@ -22,7 +22,9 @@ OFILES=\
|
|||||||
export.$O\
|
export.$O\
|
||||||
walk.$O\
|
walk.$O\
|
||||||
const.$O\
|
const.$O\
|
||||||
mparith.$O\
|
mparith1.$O\
|
||||||
|
mparith2.$O\
|
||||||
|
mparith3.$O\
|
||||||
sysimport.$O\
|
sysimport.$O\
|
||||||
compat.$O\
|
compat.$O\
|
||||||
|
|
||||||
|
@ -323,16 +323,7 @@ evconst(Node *n)
|
|||||||
goto settrue;
|
goto settrue;
|
||||||
goto setfalse;
|
goto setfalse;
|
||||||
}
|
}
|
||||||
*n = *nl;
|
goto ret;
|
||||||
|
|
||||||
// second half of dance
|
|
||||||
if(wl == Wlitint) {
|
|
||||||
n->val.u.xval = xval;
|
|
||||||
} else
|
|
||||||
if(wl == Wlitfloat) {
|
|
||||||
n->val.u.fval = fval;
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
|
|
||||||
settrue:
|
settrue:
|
||||||
*n = *booltrue;
|
*n = *booltrue;
|
||||||
@ -343,6 +334,15 @@ setfalse:
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
unary:
|
unary:
|
||||||
|
if(wl == Wlitint) {
|
||||||
|
xval = mal(sizeof(*xval));
|
||||||
|
mpmovefixfix(xval, nl->val.u.xval);
|
||||||
|
} else
|
||||||
|
if(wl == Wlitfloat) {
|
||||||
|
fval = mal(sizeof(*fval));
|
||||||
|
mpmovefltflt(fval, nl->val.u.fval);
|
||||||
|
}
|
||||||
|
|
||||||
switch(TUP(n->op, wl)) {
|
switch(TUP(n->op, wl)) {
|
||||||
default:
|
default:
|
||||||
yyerror("illegal combination of literals %O %d", n->op, wl);
|
yyerror("illegal combination of literals %O %d", n->op, wl);
|
||||||
@ -351,16 +351,16 @@ unary:
|
|||||||
case TUP(OPLUS, Wlitint):
|
case TUP(OPLUS, Wlitint):
|
||||||
break;
|
break;
|
||||||
case TUP(OMINUS, Wlitint):
|
case TUP(OMINUS, Wlitint):
|
||||||
mpnegfix(nl->val.u.xval);
|
mpnegfix(xval);
|
||||||
break;
|
break;
|
||||||
case TUP(OCOM, Wlitint):
|
case TUP(OCOM, Wlitint):
|
||||||
mpcomfix(nl->val.u.xval);
|
mpcomfix(xval);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TUP(OPLUS, Wlitfloat):
|
case TUP(OPLUS, Wlitfloat):
|
||||||
break;
|
break;
|
||||||
case TUP(OMINUS, Wlitfloat):
|
case TUP(OMINUS, Wlitfloat):
|
||||||
mpnegflt(nl->val.u.fval);
|
mpnegflt(fval);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TUP(ONOT, Wlitbool):
|
case TUP(ONOT, Wlitbool):
|
||||||
@ -368,7 +368,17 @@ unary:
|
|||||||
goto settrue;
|
goto settrue;
|
||||||
goto setfalse;
|
goto setfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret:
|
||||||
*n = *nl;
|
*n = *nl;
|
||||||
|
|
||||||
|
// second half of dance
|
||||||
|
if(wl == Wlitint) {
|
||||||
|
n->val.u.xval = xval;
|
||||||
|
} else
|
||||||
|
if(wl == Wlitfloat) {
|
||||||
|
n->val.u.fval = fval;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -78,8 +78,6 @@ typedef struct Mpflt Mpflt;
|
|||||||
struct Mpflt
|
struct Mpflt
|
||||||
{
|
{
|
||||||
double val;
|
double val;
|
||||||
long a[Mpprec];
|
|
||||||
uchar neg;
|
|
||||||
uchar ovf;
|
uchar ovf;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -471,46 +469,54 @@ void ungetc(int);
|
|||||||
void mkpackage(char*);
|
void mkpackage(char*);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* mparith.c
|
* mparith1.c
|
||||||
*/
|
*/
|
||||||
void mpmovefixfix(Mpint *a, Mpint *b);
|
|
||||||
void mpmovefixflt(Mpflt *a, Mpint *b);
|
|
||||||
void mpmovefltfix(Mpint *a, Mpflt *b);
|
|
||||||
void mpmovefltflt(Mpflt *a, Mpflt *b);
|
|
||||||
void mpmovecfix(Mpint *a, vlong v);
|
|
||||||
void mpmovecflt(Mpflt *a, double f);
|
|
||||||
|
|
||||||
int mpcmpfixfix(Mpint *a, Mpint *b);
|
int mpcmpfixfix(Mpint *a, Mpint *b);
|
||||||
int mpcmpfltflt(Mpflt *a, Mpflt *b);
|
|
||||||
int mpcmpfixc(Mpint *b, vlong c);
|
int mpcmpfixc(Mpint *b, vlong c);
|
||||||
int mpcmpfltc(Mpint *b, double c);
|
int mpcmpfltflt(Mpflt *a, Mpflt *b);
|
||||||
int mptestfixfix(Mpint *a);
|
int mpcmpfltc(Mpflt *b, double c);
|
||||||
int mptestfltflt(Mpflt *a);
|
|
||||||
|
|
||||||
void mpaddfixfix(Mpint *a, Mpint *b);
|
|
||||||
void mpaddfltflt(Mpflt *a, Mpflt *b);
|
|
||||||
void mpsubfixfix(Mpint *a, Mpint *b);
|
void mpsubfixfix(Mpint *a, Mpint *b);
|
||||||
void mpsubfltflt(Mpflt *a, Mpflt *b);
|
void mpsubfltflt(Mpflt *a, Mpflt *b);
|
||||||
void mpmulfixfix(Mpint *a, Mpint *b);
|
void mpaddcfix(Mpint *a, vlong c);
|
||||||
void mpmulfltflt(Mpflt *a, Mpflt *b);
|
void mpaddcflt(Mpflt *a, double c);
|
||||||
|
void mpmulcfix(Mpint *a, vlong c);
|
||||||
|
void mpmulcflt(Mpflt *a, double c);
|
||||||
void mpdivfixfix(Mpint *a, Mpint *b);
|
void mpdivfixfix(Mpint *a, Mpint *b);
|
||||||
void mpdivfltflt(Mpflt *a, Mpflt *b);
|
void mpmodfixfix(Mpint *a, Mpint *b);
|
||||||
void mpnegfix(Mpint *a);
|
void mpatofix(Mpint *a, char *s);
|
||||||
void mpnegflt(Mpflt *a);
|
void mpatoflt(Mpflt *a, char *s);
|
||||||
|
void mpmovefltfix(Mpint *a, Mpflt *b);
|
||||||
|
void mpmovefixflt(Mpflt *a, Mpint *b);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* mparith2.c
|
||||||
|
*/
|
||||||
|
void mpmovefixfix(Mpint *a, Mpint *b);
|
||||||
|
void mpmovecfix(Mpint *a, vlong v);
|
||||||
|
int mptestfix(Mpint *a);
|
||||||
|
void mpaddfixfix(Mpint *a, Mpint *b);
|
||||||
|
void mpmulfixfix(Mpint *a, Mpint *b);
|
||||||
|
void mpdivmodfixfix(Mpint *q, Mpint *r, Mpint *n, Mpint *d);
|
||||||
|
void mpnegfix(Mpint *a);
|
||||||
void mpandfixfix(Mpint *a, Mpint *b);
|
void mpandfixfix(Mpint *a, Mpint *b);
|
||||||
void mplshfixfix(Mpint *a, Mpint *b);
|
void mplshfixfix(Mpint *a, Mpint *b);
|
||||||
void mpmodfixfix(Mpint *a, Mpint *b);
|
|
||||||
void mporfixfix(Mpint *a, Mpint *b);
|
void mporfixfix(Mpint *a, Mpint *b);
|
||||||
void mprshfixfix(Mpint *a, Mpint *b);
|
void mprshfixfix(Mpint *a, Mpint *b);
|
||||||
void mpxorfixfix(Mpint *a, Mpint *b);
|
void mpxorfixfix(Mpint *a, Mpint *b);
|
||||||
void mpcomfix(Mpint *a);
|
void mpcomfix(Mpint *a);
|
||||||
|
|
||||||
double mpgetflt(Mpflt *a);
|
|
||||||
vlong mpgetfix(Mpint *a);
|
vlong mpgetfix(Mpint *a);
|
||||||
|
|
||||||
void mpatofix(Mpint *a, char *s);
|
/*
|
||||||
void mpatoflt(Mpflt *a, char *s);
|
* mparith3.c
|
||||||
|
*/
|
||||||
|
void mpmovefltflt(Mpflt *a, Mpflt *b);
|
||||||
|
void mpmovecflt(Mpflt *a, double f);
|
||||||
|
int mptestflt(Mpflt *a);
|
||||||
|
void mpaddfltflt(Mpflt *a, Mpflt *b);
|
||||||
|
void mpmulfltflt(Mpflt *a, Mpflt *b);
|
||||||
|
void mpdivfltflt(Mpflt *a, Mpflt *b);
|
||||||
|
void mpnegflt(Mpflt *a);
|
||||||
|
double mpgetflt(Mpflt *a);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* subr.c
|
* subr.c
|
||||||
|
@ -1076,11 +1076,11 @@ lexinit(void)
|
|||||||
mpatofix(minintval[TINT32], "-0x80000000");
|
mpatofix(minintval[TINT32], "-0x80000000");
|
||||||
mpatofix(maxintval[TINT64], "0x7fffffffffffffff");
|
mpatofix(maxintval[TINT64], "0x7fffffffffffffff");
|
||||||
mpatofix(minintval[TINT64], "-0x8000000000000000");
|
mpatofix(minintval[TINT64], "-0x8000000000000000");
|
||||||
|
|
||||||
mpatofix(maxintval[TUINT8], "0xff");
|
mpatofix(maxintval[TUINT8], "0xff");
|
||||||
mpatofix(maxintval[TUINT16], "0xffff");
|
mpatofix(maxintval[TUINT16], "0xffff");
|
||||||
mpatofix(maxintval[TUINT32], "0xffffffff");
|
mpatofix(maxintval[TUINT32], "0xffffffff");
|
||||||
mpatofix(maxintval[TUINT64], "0x7fffffffffffffff");
|
mpatofix(maxintval[TUINT64], "0xffffffffffffffff");
|
||||||
mpatofix(minintval[TUINT64], "-0x8000000000000000");
|
|
||||||
|
|
||||||
mpatoflt(maxfltval[TFLOAT32], "3.40282347e+38");
|
mpatoflt(maxfltval[TFLOAT32], "3.40282347e+38");
|
||||||
mpatoflt(minfltval[TFLOAT32], "-3.40282347e+38");
|
mpatoflt(minfltval[TFLOAT32], "-3.40282347e+38");
|
||||||
|
Loading…
Reference in New Issue
Block a user