diff options
author | Ken Thompson <ken@golang.org> | 2008-08-09 17:29:26 -0700 |
---|---|---|
committer | Ken Thompson <ken@golang.org> | 2008-08-09 17:29:26 -0700 |
commit | a3933f0a22b62afc74a72e2baf31c84a75764df7 (patch) | |
tree | 14dcdb4b5e7599344af571ca8e89c3d71196f165 /src/cmd/gc/const.c | |
parent | 7969258dda2efeaef4f3c6b833f6084d1d8d3ede (diff) | |
download | golang-a3933f0a22b62afc74a72e2baf31c84a75764df7.tar.gz |
mp fixed arith
R=r
DELTA=149 (80 added, 62 deleted, 7 changed)
OCL=14029
CL=14029
Diffstat (limited to 'src/cmd/gc/const.c')
-rw-r--r-- | src/cmd/gc/const.c | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/src/cmd/gc/const.c b/src/cmd/gc/const.c index fff0e0c4a..2188178a6 100644 --- a/src/cmd/gc/const.c +++ b/src/cmd/gc/const.c @@ -323,16 +323,7 @@ evconst(Node *n) goto settrue; goto setfalse; } - *n = *nl; - - // second half of dance - if(wl == Wlitint) { - n->val.u.xval = xval; - } else - if(wl == Wlitfloat) { - n->val.u.fval = fval; - } - return; + goto ret; settrue: *n = *booltrue; @@ -343,6 +334,15 @@ setfalse: return; 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)) { default: yyerror("illegal combination of literals %O %d", n->op, wl); @@ -351,16 +351,16 @@ unary: case TUP(OPLUS, Wlitint): break; case TUP(OMINUS, Wlitint): - mpnegfix(nl->val.u.xval); + mpnegfix(xval); break; case TUP(OCOM, Wlitint): - mpcomfix(nl->val.u.xval); + mpcomfix(xval); break; case TUP(OPLUS, Wlitfloat): break; case TUP(OMINUS, Wlitfloat): - mpnegflt(nl->val.u.fval); + mpnegflt(fval); break; case TUP(ONOT, Wlitbool): @@ -368,7 +368,17 @@ unary: goto settrue; goto setfalse; } + +ret: *n = *nl; + + // second half of dance + if(wl == Wlitint) { + n->val.u.xval = xval; + } else + if(wl == Wlitfloat) { + n->val.u.fval = fval; + } } void |