1. in [57kqv]c, gpseudo should set Prog.reg to NOPROF (if pragma profile off) only on ATEXT (prevents `missing opcode' messages from ?l) 2. in qc, remove ancient code, never invoked now, that implemented vlong as double Reference: /n/sources/patch/applied/ccs-profileflg Date: Sat Jan 13 09:11:06 CET 2007 Signed-off-by: forsyth@vitanuova.com --- /sys/src/cmd/5c/txt.c Sat Jan 13 09:07:34 2007 +++ /sys/src/cmd/5c/txt.c Sat Jan 13 09:07:31 2007 @@ -1133,7 +1133,8 @@ p->from.type = D_OREG; p->from.sym = s; p->from.name = D_EXTERN; - p->reg = (profileflg ? 0 : NOPROF); + if(a == ATEXT) + p->reg = (profileflg ? 0 : NOPROF); if(s->class == CSTATIC) p->from.name = D_STATIC; naddr(n, &p->to); --- /sys/src/cmd/7c/txt.c Sat Jan 13 09:07:50 2007 +++ /sys/src/cmd/7c/txt.c Sat Jan 13 09:07:47 2007 @@ -1178,7 +1178,8 @@ p->as = a; p->from.type = D_OREG; p->from.sym = s; - p->reg = (profileflg ? 0 : NOPROF); + if(a == ATEXT) + p->reg = (profileflg ? 0 : NOPROF); p->from.name = D_EXTERN; if(s->class == CSTATIC) p->from.name = D_STATIC; --- /sys/src/cmd/kc/txt.c Sat Jan 13 09:08:08 2007 +++ /sys/src/cmd/kc/txt.c Sat Jan 13 09:08:05 2007 @@ -1164,7 +1164,8 @@ p->as = a; p->from.type = D_OREG; p->from.sym = s; - p->reg = (profileflg ? 0 : NOPROF); + if(a == ATEXT) + p->reg = (profileflg ? 0 : NOPROF); p->from.name = D_EXTERN; if(s->class == CSTATIC) p->from.name = D_STATIC; --- /sys/src/cmd/qc/txt.c Sat Jan 13 09:08:29 2007 +++ /sys/src/cmd/qc/txt.c Sat Jan 13 09:08:25 2007 @@ -297,7 +297,6 @@ case TFLOAT: case TDOUBLE: - case TVLONG: if(o != Z && o->op == OREGISTER) { i = o->reg; if(i >= NREG && i < NREG+NREG) @@ -664,7 +663,6 @@ case TFLOAT: a = AFMOVS; break; - case TVLONG: case TDOUBLE: a = AFMOVD; break; @@ -689,11 +687,9 @@ a = AGOK; switch(ft) { case TDOUBLE: - case TVLONG: case TFLOAT: switch(tt) { case TDOUBLE: - case TVLONG: a = AFMOVD; if(ft == TFLOAT) a = AFMOVS; /* AFMOVSD */ @@ -733,7 +729,6 @@ case TIND: switch(tt) { case TDOUBLE: - case TVLONG: case TFLOAT: goto fxtofl; case TINT: @@ -752,7 +747,6 @@ case TSHORT: switch(tt) { case TDOUBLE: - case TVLONG: case TFLOAT: goto fxtofl; case TINT: @@ -773,7 +767,6 @@ case TUSHORT: switch(tt) { case TDOUBLE: - case TVLONG: case TFLOAT: goto fxtofl; case TINT: @@ -794,7 +787,6 @@ case TCHAR: switch(tt) { case TDOUBLE: - case TVLONG: case TFLOAT: goto fxtofl; case TINT: @@ -815,7 +807,6 @@ case TUCHAR: switch(tt) { case TDOUBLE: - case TVLONG: case TFLOAT: fxtofl: /* @@ -931,7 +922,7 @@ if(et == TFLOAT) a = AFADDS; else - if(et == TDOUBLE || et == TVLONG) + if(et == TDOUBLE) a = AFADD; break; @@ -941,7 +932,7 @@ if(et == TFLOAT) a = AFSUBS; else - if(et == TDOUBLE || et == TVLONG) + if(et == TDOUBLE) a = AFSUB; break; @@ -989,7 +980,7 @@ a = AFMULS; break; } else - if(et == TDOUBLE || et == TVLONG) { + if(et == TDOUBLE) { a = AFMUL; break; } @@ -1002,7 +993,7 @@ a = AFDIVS; break; } else - if(et == TDOUBLE || et == TVLONG) { + if(et == TDOUBLE) { a = AFDIV; break; } @@ -1030,7 +1021,7 @@ case ONEG: a = ANEG; - if(et == TFLOAT || et == TDOUBLE || et == TVLONG) + if(et == TFLOAT || et == TDOUBLE) a = AFNEG; break; @@ -1082,7 +1073,7 @@ if(et == TFLOAT) p->as = AFCMPU; else - if(et == TDOUBLE || et == TVLONG) + if(et == TDOUBLE) p->as = AFCMPU; if(f1 != Z) naddr(f1, &p->from); @@ -1172,7 +1163,8 @@ p->as = a; p->from.type = D_OREG; p->from.sym = s; - p->reg = (profileflg ? 0 : NOPROF); + if(a == ATEXT) + p->reg = (profileflg ? 0 : NOPROF); p->from.name = D_EXTERN; if(s->class == CSTATIC) p->from.name = D_STATIC; --- /sys/src/cmd/vc/txt.c Sat Jan 13 09:08:52 2007 +++ /sys/src/cmd/vc/txt.c Sat Jan 13 09:08:49 2007 @@ -1336,7 +1336,8 @@ p->as = a; p->from.type = D_OREG; p->from.sym = s; - p->reg = (profileflg ? 0 : NOPROF); + if(a == ATEXT) + p->reg = (profileflg ? 0 : NOPROF); p->from.name = D_EXTERN; if(s->class == CSTATIC) p->from.name = D_STATIC;