brooks@maddog.llnl.gov (11/05/88)
Bug report for GCC 1.30 on NS32K, Sequent Balance.
First half of double register move clobbers register
used in address computation for move of the second
half. The bug is apparently in output_move_double,
which does not check that the target of the move
to a register might clobber registers used in
address computation, and a check of the other machine
descriptions reveals no equivalent checking being done
in them either. For the NS32K a cheap trick workaround
is to use the stack to save the first word moved, move
the second word, then pop the first word back off the stack.
I would have submitted patches, but am not well enough acquainted
with the rtx biz to perform the patch without a not of effort.
I do not hit the bug without the optimizer, and do not hit the
bug on the SUN, but perhaps this is just an accident.
Anyone knowing how to patch output_move_double() to check
for use of target registers in the address computation of
the source operand that could provide a patch would be
appreciated. We have not been able to work around the
bug.
Search for BUG in the file below for a pointer to the bad
assembler output. The bug hitter input code, compiled with gcc -O -S, is:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
extern struct _iobuf {
int _cnt;
char *_ptr;
char *_base;
int _bufsiz;
short _flag;
char _file;
} _iob[20 ];
struct _iobuf *fopen();
struct _iobuf *fdopen();
struct _iobuf *freopen();
long ftell();
char *gets();
char *fgets();
char *sprintf();
extern double fabs(), floor(), ceil(), fmod(), ldexp(), frexp();
extern double sqrt(), hypot(), atof();
extern double sin(), cos(), tan(), asin(), acos(), atan(), atan2();
extern double exp(), log(), log10(), pow();
extern double sinh(), cosh(), tanh();
extern double gamma();
extern double j0(), j1(), jn(), y0(), y1(), yn();
void ranset();
extern long ranseed;
double ranf();
double simpint();
float fmean();
float fstdev();
double dmean();
double dstdev();
extern int randi();
extern double randiranf();
extern void srandi();
extern void randifwrite();
extern void randifread();
extern int prandi();
extern double prandiranf();
extern void psrandi();
extern void fwriteprandi();
extern void freadprandi();
char *malloc();
char *calloc();
typedef enum { INT, DOUBLE, PINT, PDOUBLE, PPINT, PPDOUBLE, PPPINT, PPPDOUBLE} TYPE;
typedef union {
int *pi;
int **ppi;
int ***pppi;
int ****ppppi;
double *pd;
double **ppd;
double ***pppd;
double ****ppppd;
} PTRUNION;
typedef struct symtab {
char *name;
TYPE type;
PTRUNION valptr;
int *dim1;
int *dim2;
int *dim3;
struct symtab *next;
} SYMTAB;
char *strcpy();
SYMTAB *lookup();
extern void addtab();
extern int *mllc3d();
extern int *mllc2d();
extern struct _iobuf *yyin;
extern struct _iobuf *yyout;
extern int warningMessages;
struct bins {
double p;
double a;
double b;
};
struct line {
int nbins;
double avoigt;
double knucut;
double knu0;
double deltaknud;
double knucuty;
double knucutprimex;
double probatknucut;
struct bins *bin;
};
typedef struct line LINE;
LINE *genline( );
double knuinline( );
double pknuinline( );
double fofknu( );
typedef unsigned char PCP_LOCK_TYPE;
int mtime();
char *malloc();
char *sprintf();
char *sbrk();
void propagate();
struct _iobuf *quefptr;
struct _iobuf *outfptr;
struct _iobuf *pltfptr;
struct _iobuf *matfptr;
int mirror = 0;
int nlines;
int nlevels;
int natoms;
int timesteps;
double timelimit;
int nbundles;
double **coll;
int parallelism = 1;
double **rho;
int *atomoflevel;
int ssgnlines;
int *ssgupper;
int *ssglower;
double *ssgsigmadown;
double *ssgsigmaup;
double *aspont;
double *avoigt;
double *sigmadown;
double *sigmaup;
int *upper;
int *lower;
double *nu0;
double *nucut;
double *deltanud;
int *ngroups;
int *jnuenable;
int nubins = 20;
double nulolim = 96.0;
double nuhilim = 104.0;
int *dumplsenable;
int emitatleastone = 0;
LINE **lptr;
int nzones;
double **n;
double *zonewidth;
double totalwidth;
static int mtxelts;
static PCP_LOCK_TYPE lmtxelts;
static int symbols;
static PCP_LOCK_TYPE lsymbols;
struct mtxelt {
int col;
double value;
struct mtxelt *next;
};
typedef struct mtxelt MTXELT;
static MTXELT *freemtxelts[1 ];
struct symbol {
double sym;
unsigned short iz;
unsigned short in;
struct symbol *next;
};
typedef struct symbol SYMBOL;
static SYMBOL *freesymbols[1 ];
struct zone {
double ledge;
double redge;
double *n;
double *intphif;
double intf;
double *jnu;
double *cntwght;
SYMBOL ***symintphif;
SYMBOL **symintf;
unsigned char access;
};
double *lnudist;
unsigned char *llnudist;
double lbelow = 0.0;
unsigned char llbelow = 0 ;
double labove = 0.0;
unsigned char llabove = 0 ;
double *rnudist;
unsigned char *lrnudist;
double rbelow = 0.0;
unsigned char lrbelow = 0 ;
double rabove = 0.0;
unsigned char lrabove = 0 ;
unsigned char lcheckio = 0 ;
struct zone *zones;
int dim;
double *B, *X, *G;
int *ls_index;
int *zl_index;
MTXELT ***SA;
int nblocks;
int *blocksizes;
static int zoneofx(x)
double x;
{
register int _TINDEX = 0; register int _TSIZE = 1 ;
int middle;
int lower = 0;
int upper = nzones;
while(lower != upper - 1) {
middle = (lower + upper) / 2;
if((zones[middle].ledge) <= x) {
lower = middle;
}
else if((zones[middle].redge) > x) {
upper = middle;
}
}
return(lower);
}
struct PBUNDLE {
double num;
double x;
double mu;
double t;
double initnum;
double knu;
short zx;
unsigned short bzx;
struct PBUNDLE *next;
unsigned short id;
unsigned char l;
unsigned char sym;
};
typedef struct PBUNDLE PBUNDLE;
struct DISTRIBUTION {
PBUNDLE *head;
PBUNDLE *tail;
int count;
};
typedef struct DISTRIBUTION DISTRIBUTION;
PBUNDLE *getfromdist(dptr)
DISTRIBUTION *dptr;
{
PBUNDLE *pptr;
;
if(dptr->count > 1) {
pptr = dptr->head;
dptr->head = dptr->head->next;
pptr->next = 0 ;
dptr->count -= 1;
}
else if(dptr->count == 1) {
pptr = dptr->head;
dptr->head = 0 ;
dptr->tail = 0 ;
dptr->count = 0;
}
else {
;
;
pptr = 0 ;
}
return(pptr);
}
void addtodist(pptr, dptr)
PBUNDLE *pptr;
DISTRIBUTION *dptr;
{
;
;
;
;
if(dptr->count == 0) {
;
;
dptr->head = pptr;
dptr->tail = pptr;
}
else {
;
dptr->tail->next = pptr;
dptr->tail = pptr;
}
dptr->count += 1;
}
DISTRIBUTION pdist[128 ];
DISTRIBUTION cdist[128 ];
DISTRIBUTION spare[128 ];
DISTRIBUTION outleft[128 ];
DISTRIBUTION outright[128 ];
DISTRIBUTION sdist[128 ];
PBUNDLE *allopbundle(p)
int p;
{
PBUNDLE *array;
int i;
;
if(spare[p].count == 0) {
if((array = (PBUNDLE *)sbrk(2048 * sizeof(PBUNDLE))) == (PBUNDLE *)-1) {
perror("allopbundle");
exit(1);
}
for(i = 0; i <2048 ; i += 1) {
array[i].next = 0 ;
addtodist(array + i, spare + p);
}
}
return(getfromdist(spare + p));
}
int bcounter[128 ];
void addpbundle(num, sym, knu, x, zx, bzx, mu, t, p, l)
double num;
int sym;
double knu;
double x;
int zx;
int bzx;
double mu;
double t;
int p;
int l;
{
register PBUNDLE *tptr;
tptr = allopbundle(p);
tptr->num = num;
tptr->initnum = num;
tptr->knu = knu;
tptr->x = x;
tptr->zx = zx;
tptr->bzx = bzx;
tptr->mu = mu;
tptr->t = t;
tptr->next = 0 ;
tptr->sym = sym;
tptr->id = bcounter[p]++;
tptr->l = l;
addtodist(tptr, pdist + p);
}
void propagate(tstart, tcensus)
double tstart, tcensus;
{
register int _TINDEX = 0; register int _TSIZE = 1 ;
double incctnfpa;
int l;
double r;
PBUNDLE *pbptr;
double distocensus;
double distoboundary;
double distocollision;
double newnum;
double absconstant;
double incintf;
int p;
for(p = 0; p < parallelism; p += 1) {
while((pbptr = getfromdist(pdist + p)) != 0 ) {
int inu;
if((pbptr->knu >= nulolim) && (pbptr->knu < nuhilim)) {
inu = nubins * ((pbptr->knu - nulolim) / (nuhilim - nulolim));
}
else {
inu = -1;
}
if(pbptr->sym == 1 && pbptr->initnum == (double)0.0) {
;
;
pbptr->num = pbptr->initnum = zones[pbptr->zx].cntwght[pbptr->l];
}
while(1) {
distocensus = 2.99792458e+10 * (tcensus - pbptr->t);
# 1914 "imc.c"
if(pbptr->mu > (double)0.0) {
distoboundary = ((zones[pbptr->zx].redge) - pbptr->x) / pbptr->mu;
}
else if(pbptr->mu < (double)0.0) {
distoboundary = ((zones[pbptr->zx].ledge) - pbptr->x) / pbptr->mu;
}
else {
distoboundary = (double)1.0e+30 ;
}
absconstant = 0.0;
for(l = 0; l < nlines; l += 1) {
absconstant += ((rho[atomoflevel[lower[l]]][pbptr->zx] * sigmaup[l] * zones[pbptr->zx].n[lower[l]])
- (rho[atomoflevel[upper[l]]][pbptr->zx] * sigmadown[l] * zones[pbptr->zx].n[upper[l]])) * fofknu(pbptr->knu, *(lptr[l]));
}
if(distocensus <= distoboundary) {
if(distocensus > 0) {
newnum = (double)exp(-absconstant * distocensus) * pbptr->num;
if(absconstant == 0) {
incintf = distocensus * pbptr->num;
}
else if(fabs(absconstant * distocensus) < 1.0e-3 ) {
incintf = pbptr->num * -((-absconstant * distocensus) + (-absconstant * distocensus)*(-absconstant * distocensus)/2 + (-absconstant * distocensus)*(-absconstant * distocensus)*(-absconstant * distocensus)/6 + (-absconstant * distocensus)*(-absconstant * distocensus)*(-absconstant * distocensus)*(-absconstant * distocensus)/24 + (-absconstant * distocensus)*(-absconstant * distocensus)*(-absconstant * distocensus)*(-absconstant * distocensus)*(-absconstant * distocensus)/120) / absconstant;
}
else {
incintf = (pbptr->num - newnum) / absconstant;
}
}
else if(distocensus == 0) {
newnum = pbptr->num;
incintf = 0.0;
}
else {
fprintf((&_iob[2]) , "Distocensus was negative = %g\n", distocensus);
newnum = pbptr->num;
incintf = 0.0;
}
1 ;
if(pbptr->sym == 1 ) {
addsymbol(pbptr->bzx, upper[pbptr->l], incintf, zones[pbptr->zx].symintf);
for(l = 0; l < nlines; l += 1) {
addsymbol(pbptr->bzx, upper[pbptr->l], fofknu(pbptr->knu, *(lptr[l])) * incintf, zones[pbptr->zx].symintphif[l]);
}
if(jnuenable[pbptr->zx] && inu >= 0 && inu < nubins) {
zones[pbptr->zx].jnu[inu] += incintf * zones[pbptr->bzx].n[upper[pbptr->l]];
}
}
else {
zones[pbptr->zx].intf += incintf;
for(l = 0; l < nlines; l += 1) {
zones[pbptr->zx].intphif[l] += fofknu(pbptr->knu, *(lptr[l])) * incintf;
}
if(jnuenable[pbptr->zx] && inu >= 0 && inu < nubins) {
zones[pbptr->zx].jnu[inu] += incintf;
}
}
1 ;
pbptr->num = newnum;
pbptr->x += distocensus * pbptr->mu;
pbptr->t = tcensus;
if(pbptr->num / pbptr->initnum < 1.0e-5 ) {
addtodist(pbptr, sdist + p);
}
else {
addtodist(pbptr, cdist + p);
}
break;
}
else {
if(distoboundary > 0) {
newnum = (double)exp(-absconstant * distoboundary) * pbptr->num;
if(absconstant == 0) {
incintf = distoboundary * pbptr->num;
}
else if(fabs(absconstant * distoboundary) < 1.0e-3 ) {
incintf = pbptr->num * -((-absconstant * distoboundary) + (-absconstant * distoboundary)*(-absconstant * distoboundary)/2 + (-absconstant * distoboundary)*(-absconstant * distoboundary)*(-absconstant * distoboundary)/6 + (-absconstant * distoboundary)*(-absconstant * distoboundary)*(-absconstant * distoboundary)*(-absconstant * distoboundary)/24 + (-absconstant * distoboundary)*(-absconstant * distoboundary)*(-absconstant * distoboundary)*(-absconstant * distoboundary)*(-absconstant * distoboundary)/1
20) / absconstant;
}
else {
incintf = (pbptr->num - newnum) / absconstant;
}
}
else if(distoboundary == 0) {
newnum = pbptr->num;
incintf = 0.0;
}
else {
fprintf((&_iob[2]) , "distoboundary was negative = %g\n", distoboundary);
newnum = pbptr->num;
incintf = 0.0;
}
1 ;
if(pbptr->sym == 1 ) {
addsymbol(pbptr->bzx, upper[pbptr->l], incintf, zones[pbptr->zx].symintf);
for(l = 0; l < nlines; l += 1) {
addsymbol(pbptr->bzx, upper[pbptr->l], fofknu(pbptr->knu, *(lptr[l])) * incintf, zones[pbptr->zx].symintphif[l]);
}
if(jnuenable[pbptr->zx] && inu >= 0 && inu < nubins) {
zones[pbptr->zx].jnu[inu] += incintf * zones[pbptr->bzx].n[upper[pbptr->l]];
}
}
else {
zones[pbptr->zx].intf += incintf;
for(l = 0; l < nlines; l += 1) {
zones[pbptr->zx].intphif[l] += fofknu(pbptr->knu, *(lptr[l])) * incintf;
}
if(jnuenable[pbptr->zx] && inu >= 0 && inu < nubins) {
zones[pbptr->zx].jnu[inu] += incintf;
}
}
1 ;
pbptr->num = newnum;
if(pbptr->mu > (double)0.0) {
pbptr->x = (zones[pbptr->zx].redge) ;
(pbptr->zx) += 1;
}
else if(pbptr->mu < (double)0.0) {
pbptr->x = (zones[pbptr->zx].ledge) ;
(pbptr->zx) -= 1;
}
else {
fprintf((&_iob[2]) , "propagate: We made it to the boundary but mu == 0.0 ???\n");
exit(1);
}
pbptr->t += distoboundary / 2.99792458e+10 ;
if(pbptr->num / pbptr->initnum < 1.0e-5 ) {
addtodist(pbptr, sdist + p);
break;
}
else if(pbptr->zx == -1) {
if(mirror) {
;
pbptr->mu = -pbptr->mu;
pbptr->zx = 0;
}
else {
addtodist(pbptr, outleft + p);
break;
}
}
else if(pbptr->zx == nzones) {
addtodist(pbptr, outright + p);
break;
}
}
}
}
}
}
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
The incorrect assembly code output is (see the (BUG) pointer a few lines
after the definition of _propagate):
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
#NO_APP
.globl _mirror
.data
.align 2
_mirror:
.long 0
.globl _parallelism
.align 2
_parallelism:
.long 1
.globl _nubins
.align 2
_nubins:
.long 20
.globl _nulolim
.align 2
_nulolim:
.double 0d9.60000000000000000000e+01
.globl _nuhilim
.align 2
_nuhilim:
.double 0d1.04000000000000000000e+02
.globl _emitatleastone
.align 2
_emitatleastone:
.long 0
.globl _lbelow
.align 2
_lbelow:
.double 0d0.00000000000000000000e+00
.globl _llbelow
.align 0
_llbelow:
.byte 0
.globl _labove
.align 2
_labove:
.double 0d0.00000000000000000000e+00
.globl _llabove
.align 0
_llabove:
.byte 0
.globl _rbelow
.align 2
_rbelow:
.double 0d0.00000000000000000000e+00
.globl _lrbelow
.align 0
_lrbelow:
.byte 0
.globl _rabove
.align 2
_rabove:
.double 0d0.00000000000000000000e+00
.globl _lrabove
.align 0
_lrabove:
.byte 0
.globl _lcheckio
.align 0
_lcheckio:
.byte 0
.text
.align 1
_zoneofx:
enter [r3,r4],0
movl 8(fp),f0
movqd 0,r2
movd _nzones,r3
movd _zones,r4
br L2
L8:
movd r2,r1
addd r3,r1
cmpqd 0,r1
ble L4
addqd 1,r1
L4:
ashd -1,r1
movd r1,r0
muld 52,r0
cmpl 0(r0)[r4:b],f0
bgt L5
movd r1,r2
br L2
L5:
movd r1,r0
muld 52,r0
cmpl 8(r0)[r4:b],f0
ble L2
movd r1,r3
L2:
movd r3,r0
addqd -1,r0
cmpd r2,r0
bne L8
movd r2,r0
exit [r3,r4]
ret 0
.align 1
.globl _getfromdist
_getfromdist:
enter [],0
movd 8(fp),r0
cmpqd 1,8(r0)
bge L10
movd 0(r0),r1
movd 52(r1),0(r0)
movqd 0,52(r1)
addqd -1,8(r0)
br L11
L10:
cmpqd 1,8(r0)
bne L12
movd 0(r0),r1
movqd 0,0(r0)
movqd 0,4(r0)
movqd 0,8(r0)
br L11
L12:
movqd 0,r1
L11:
movd r1,r0
exit []
ret 0
.align 1
.globl _addtodist
_addtodist:
enter [],0
movd 8(fp),r2
movd 12(fp),r1
cmpqd 0,8(r1)
bne L15
movd r2,0(r1)
br L17
L15:
movd 4(r1),r0
movd r2,52(r0)
L17:
movd r2,4(r1)
addqd 1,8(r1)
exit []
ret 0
.align 0
LC0:
.ascii "allopbundle\0"
.align 2
LC1:
.long _spare
.align 1
.globl _allopbundle
_allopbundle:
enter [r3,r4,r5,r6],0
movd 8(fp),r6
addr @0[r6:q],r0
addr 0(r0)[r6:d],r0
cmpqd 0,_spare+8[r0:b]
bne L19
movd 122880,tos
bsr _sbrk
movd r0,r4
adjspb -4
cmpqd -1,r4
bne L20
addr LC0,tos
bsr _perror
movqd 1,tos
bsr _exit
adjspb -8
L20:
movqd 0,r3
addr @0[r6:q],r0
addr 0(r0)[r6:d],r0
movd LC1,r5
addd r0,r5
L24:
movd r3,r0
muld 60,r0
addd r4,r0
movqd 0,52(r0)
movd r5,tos
movd r0,tos
bsr _addtodist
adjspb -8
addqd 1,r3
cmpd r3,2047
ble L24
L19:
addr @0[r6:q],r0
addr 0(r0)[r6:d],r0
addr _spare,r1
addd r1,r0
movd r0,tos
bsr _getfromdist
adjspb -4
exit [r3,r4,r5,r6]
ret 0
.align 1
.globl _addpbundle
_addpbundle:
enter [r3,r4,r5],0
movd 8(fp),r4
movd 12(fp),r5
movd 60(fp),r3
movd r3,tos
bsr _allopbundle
movd r4,0(r0)
movd r5,4(r0)
movd r4,32(r0)
movd r5,36(r0)
movd 20(fp),40(r0)
movd 24(fp),44(r0)
movd 28(fp),8(r0)
movd 32(fp),12(r0)
movw 36(fp),48(r0)
movw 40(fp),50(r0)
movd 44(fp),16(r0)
movd 48(fp),20(r0)
movd 52(fp),24(r0)
movd 56(fp),28(r0)
movqd 0,52(r0)
movb 16(fp),59(r0)
addr _bcounter[r3:d],r1
movw 0(r1),56(r0)
addqd 1,0(r1)
movb 64(fp),58(r0)
addr @0[r3:q],r1
addr 0(r1)[r3:d],r1
addr _pdist,r2
addd r2,r1
movd r1,tos
movd r0,tos
bsr _addtodist
adjspb -12
exit [r3,r4,r5]
ret 0
.align 0
LC2:
.ascii "Distocensus was negative = %g\12\0"
.align 0
LC3:
.ascii "distoboundary was negative = %g\12\0"
.align 0
LC4:
.ascii "propagate: We made it to the boundary but mu == 0.0 ???\12\0"
.align 1
.globl _propagate
_propagate:
enter [r3,r4,r5,r6,r7],48
movl f4,tos
movl f6,tos
movqd 0,-36(fp)
cmpd -36(fp),_parallelism
bge L107
br L30
L100:
cmpl 40(r6),_nulolim
blt L32
cmpl 40(r6),_nuhilim
bge L32
movdl _nubins,f0
movl 40(r6),f2
subl _nulolim,f2
movl _nuhilim,f4
subl _nulolim,f4
divl f4,f2
mull f2,f0
truncld f0,r7
br L33
L32:
movqd -1,r7
L33:
cmpqb 1,59(r6)
bne L34
cmpl 0d0.00000000000000000000e+00,32(r6)
bne L34
movxwd 48(r6),r0
muld 52,r0
movzbd 58(r6),r1
movd 36(_zones(sb))[r0:b],r0
movd 0(r0)[r1:q],r0 <<== (BUG) Clobbers r0 which is needed in the
next instructio. Changing the order won't help
because both r0 and r1 are needed.
movd 4(r0)[r1:q],r1
movd r0,32(r6)
movd r1,36(r6)
movd r0,0(r6)
movd r1,4(r6)
L34:
movd -36(fp),r4
addr @0[r4:d],-40(fp)
addr @0[r4:q],-44(fp)
movd -40(fp),r0
addd -44(fp),r0
addr _sdist,r4
addd r4,r0
movd r0,-48(fp)
L35:
movl 16(fp),f0
subl 24(r6),f0
mull 0d2.99792458000000000000e+10,f0
movl f0,-8(fp)
cmpl 0d0.00000000000000000000e+00,16(r6)
bge L37
movxwd 48(r6),r0
muld 52,r0
movl 8(_zones(sb))[r0:b],f0
br L108
L37:
cmpl 0d0.00000000000000000000e+00,16(r6)
ble L39
movxwd 48(r6),r0
muld 52,r0
movl 0(_zones(sb))[r0:b],f0
L108:
subl 8(r6),f0
divl 16(r6),f0
movl f0,-16(fp)
br L38
L39:
movd 966823146,-16(fp)
movd 1177108057,-12(fp)
L38:
movqd 0,-32(fp)
movqd 0,-28(fp)
movqd 0,r5
cmpd r5,_nlines
bge L106
L44:
movd 0(_lptr(sb))[r5:d],r0
adjspd 64
addr tos,r2
addr 0(r0),r1
movd 16,r0
movsd
movd 44(r6),tos
movd 40(r6),tos
bsr _fofknu
movd 0(_lower(sb))[r5:d],r4
movd _atomoflevel,r3
movd 0(r3)[r4:d],r2
movd _rho,r1
movxwd 48(r6),r0
movd 0(r1)[r2:d],r2
movl 0(r2)[r0:q],f2
mull 0(_sigmaup(sb))[r5:q],f2
movd r0,r2
muld 52,r2
movd 16(_zones(sb))[r2:b],r2
mull 0(r2)[r4:q],f2
movd 0(_upper(sb))[r5:d],r4
movd 0(r3)[r4:d],r3
movd 0(r1)[r3:d],r1
movl 0(r1)[r0:q],f4
mull 0(_sigmadown(sb))[r5:q],f4
mull 0(r2)[r4:q],f4
subl f4,f2
mull f0,f2
addl f2,-32(fp)
adjspw -72
addqd 1,r5
cmpd r5,_nlines
blt L44
L106:
cmpl -8(fp),-16(fp)
bgt L45
cmpl 0d0.00000000000000000000e+00,-8(fp)
bge L46
negl -32(fp),f0
mull -8(fp),f0
movl f0,tos
bsr _exp
mull 0(r6),f0
movl f0,-24(fp)
adjspb -8
cmpl 0d0.00000000000000000000e+00,-32(fp)
bne L47
movl -8(fp),f4
mull 0(r6),f4
br L51
L47:
movl -32(fp),f6
mull -8(fp),f6
movl f6,tos
bsr _fabs
adjspb -8
cmpl f0,0d1.00000000000000000000e-03
bge L49
negl -32(fp),f4
mull -8(fp),f4
movl f4,f0
mull f4,f0
movl f0,f2
divl 0d2.00000000000000000000e+00,f2
addl f4,f2
mull f4,f0
movl f0,f6
divl 0d6.00000000000000000000e+00,f6
addl f6,f2
mull f4,f0
movl f0,f6
divl 0d2.40000000000000000000e+01,f6
addl f6,f2
mull f4,f0
divl 0d1.20000000000000000000e+02,f0
addl f0,f2
negl f2,f2
movl f2,f4
mull 0(r6),f4
divl -32(fp),f4
br L51
L49:
movl 0(r6),f4
subl -24(fp),f4
divl -32(fp),f4
br L51
L46:
cmpl 0d0.00000000000000000000e+00,-8(fp)
bne L52
movd 0(r6),-24(fp)
movd 4(r6),-20(fp)
movl 0d0.00000000000000000000e+00,f4
br L51
L52:
movd -4(fp),tos
movd -8(fp),tos
addr LC2,tos
addr __iob+40,tos
bsr _fprintf
movd 0(r6),-24(fp)
movd 4(r6),-20(fp)
movl 0d0.00000000000000000000e+00,f4
adjspb -16
L51:
cmpqb 1,59(r6)
bne L54
movxwd 48(r6),r0
muld 52,r0
movd 44(_zones(sb))[r0:b],tos
movl f4,tos
movzbd 58(r6),r0
movd 0(_upper(sb))[r0:d],tos
movzwd 50(r6),tos
bsr _addsymbol
movqd 0,r5
adjspb -20
cmpd r5,_nlines
bge L105
L58:
movxwd 48(r6),r0
muld 52,r0
movd 40(_zones(sb))[r0:b],r0
movd 0(r0)[r5:d],tos
movd 0(_lptr(sb))[r5:d],r0
adjspd 64
addr tos,r2
addr 0(r0),r1
movd 16,r0
movsd
movd 44(r6),tos
movd 40(r6),tos
bsr _fofknu
adjspw -72
mull f4,f0
movl f0,tos
movzbd 58(r6),r0
movd 0(_upper(sb))[r0:d],tos
movzwd 50(r6),tos
bsr _addsymbol
adjspb -20
addqd 1,r5
cmpd r5,_nlines
blt L58
L105:
movxwd 48(r6),r1
cmpqd 0,0(_jnuenable(sb))[r1:d]
beq L60
cmpqd 0,r7
bgt L60
cmpd r7,_nubins
bge L60
movd _zones,r0
muld 52,r1
movd 32(r1)[r0:b],r1
movzwd 50(r6),r2
muld 52,r2
movzbd 58(r6),r3
movd 0(_upper(sb))[r3:d],r3
movd 16(r2)[r0:b],r0
movl f4,f0
mull 0(r0)[r3:q],f0
addl f0,0(r1)[r7:q]
br L60
L54:
movxwd 48(r6),r0
muld 52,r0
addl f4,24(_zones(sb))[r0:b]
movqd 0,r5
cmpd r5,_nlines
bge L104
L64:
movd 0(_lptr(sb))[r5:d],r0
adjspd 64
addr tos,r2
addr 0(r0),r1
movd 16,r0
movsd
movd 44(r6),tos
movd 40(r6),tos
bsr _fofknu
movxwd 48(r6),r0
muld 52,r0
movd 20(_zones(sb))[r0:b],r0
mull f4,f0
addl f0,0(r0)[r5:q]
adjspw -72
addqd 1,r5
cmpd r5,_nlines
blt L64
L104:
movxwd 48(r6),r0
cmpqd 0,0(_jnuenable(sb))[r0:d]
beq L60
cmpqd 0,r7
bgt L60
cmpd r7,_nubins
bge L60
muld 52,r0
movd 32(_zones(sb))[r0:b],r0
addl f4,0(r0)[r7:q]
L60:
movd -24(fp),0(r6)
movd -20(fp),4(r6)
movl -8(fp),f0
mull 16(r6),f0
addl f0,8(r6)
movd 16(fp),24(r6)
movd 20(fp),28(r6)
movl 0(r6),f0
divl 32(r6),f0
cmpl f0,0d1.00000000000000000000e-05
bge L66
movd -48(fp),tos
br L109
L66:
movd -40(fp),r0
addd -44(fp),r0
addr _cdist,r4
br L110
L45:
cmpl 0d0.00000000000000000000e+00,-16(fp)
bge L69
negl -32(fp),f0
mull -16(fp),f0
movl f0,tos
bsr _exp
mull 0(r6),f0
movl f0,-24(fp)
adjspb -8
cmpl 0d0.00000000000000000000e+00,-32(fp)
bne L70
movl -16(fp),f4
mull 0(r6),f4
br L74
L70:
movl -32(fp),f6
mull -16(fp),f6
movl f6,tos
bsr _fabs
adjspb -8
cmpl f0,0d1.00000000000000000000e-03
bge L72
negl -32(fp),f4
mull -16(fp),f4
movl f4,f0
mull f4,f0
movl f0,f2
divl 0d2.00000000000000000000e+00,f2
addl f4,f2
mull f4,f0
movl f0,f6
divl 0d6.00000000000000000000e+00,f6
addl f6,f2
mull f4,f0
movl f0,f6
divl 0d2.40000000000000000000e+01,f6
addl f6,f2
mull f4,f0
divl 0d1.20000000000000000000e+02,f0
addl f0,f2
negl f2,f2
movl f2,f4
mull 0(r6),f4
divl -32(fp),f4
br L74
L72:
movl 0(r6),f4
subl -24(fp),f4
divl -32(fp),f4
br L74
L69:
cmpl 0d0.00000000000000000000e+00,-16(fp)
bne L75
movd 0(r6),-24(fp)
movd 4(r6),-20(fp)
movl 0d0.00000000000000000000e+00,f4
br L74
L75:
movd -12(fp),tos
movd -16(fp),tos
addr LC3,tos
addr __iob+40,tos
bsr _fprintf
movd 0(r6),-24(fp)
movd 4(r6),-20(fp)
movl 0d0.00000000000000000000e+00,f4
adjspb -16
L74:
cmpqb 1,59(r6)
bne L77
movxwd 48(r6),r0
muld 52,r0
movd 44(_zones(sb))[r0:b],tos
movl f4,tos
movzbd 58(r6),r0
movd 0(_upper(sb))[r0:d],tos
movzwd 50(r6),tos
bsr _addsymbol
movqd 0,r5
adjspb -20
cmpd r5,_nlines
bge L103
L81:
movxwd 48(r6),r0
muld 52,r0
movd 40(_zones(sb))[r0:b],r0
movd 0(r0)[r5:d],tos
movd 0(_lptr(sb))[r5:d],r0
adjspd 64
addr tos,r2
addr 0(r0),r1
movd 16,r0
movsd
movd 44(r6),tos
movd 40(r6),tos
bsr _fofknu
adjspw -72
mull f4,f0
movl f0,tos
movzbd 58(r6),r0
movd 0(_upper(sb))[r0:d],tos
movzwd 50(r6),tos
bsr _addsymbol
adjspb -20
addqd 1,r5
cmpd r5,_nlines
blt L81
L103:
movxwd 48(r6),r1
cmpqd 0,0(_jnuenable(sb))[r1:d]
beq L83
cmpqd 0,r7
bgt L83
cmpd r7,_nubins
bge L83
movd _zones,r0
muld 52,r1
movd 32(r1)[r0:b],r1
movzwd 50(r6),r2
muld 52,r2
movzbd 58(r6),r3
movd 0(_upper(sb))[r3:d],r3
movd 16(r2)[r0:b],r0
movl f4,f0
mull 0(r0)[r3:q],f0
addl f0,0(r1)[r7:q]
br L83
L77:
movxwd 48(r6),r0
muld 52,r0
addl f4,24(_zones(sb))[r0:b]
movqd 0,r5
cmpd r5,_nlines
bge L102
L87:
movd 0(_lptr(sb))[r5:d],r0
adjspd 64
addr tos,r2
addr 0(r0),r1
movd 16,r0
movsd
movd 44(r6),tos
movd 40(r6),tos
bsr _fofknu
movxwd 48(r6),r0
muld 52,r0
movd 20(_zones(sb))[r0:b],r0
mull f4,f0
addl f0,0(r0)[r5:q]
adjspw -72
addqd 1,r5
cmpd r5,_nlines
blt L87
L102:
movxwd 48(r6),r0
cmpqd 0,0(_jnuenable(sb))[r0:d]
beq L83
cmpqd 0,r7
bgt L83
cmpd r7,_nubins
bge L83
muld 52,r0
movd 32(_zones(sb))[r0:b],r0
addl f4,0(r0)[r7:q]
L83:
movd -24(fp),0(r6)
movd -20(fp),4(r6)
cmpl 0d0.00000000000000000000e+00,16(r6)
bge L89
movxwd 48(r6),r0
muld 52,r0
movd 8(_zones(sb))[r0:b],8(r6)
movd 12(_zones(sb))[r0:b],12(r6)
addqw 1,48(r6)
br L90
L89:
cmpl 0d0.00000000000000000000e+00,16(r6)
ble L91
movxwd 48(r6),r0
muld 52,r0
movd 0(_zones(sb))[r0:b],8(r6)
movd 4(_zones(sb))[r0:b],12(r6)
addqw -1,48(r6)
br L90
L91:
addr LC4,tos
addr __iob+40,tos
bsr _fprintf
movqd 1,tos
bsr _exit
adjspb -12
L90:
movl -16(fp),f0
divl 0d2.99792458000000000000e+10,f0
addl f0,24(r6)
movl 0(r6),f0
divl 32(r6),f0
cmpl f0,0d1.00000000000000000000e-05
bge L93
movd -40(fp),r0
addd -44(fp),r0
addr _sdist,r4
br L110
L93:
cmpqw -1,48(r6)
bne L95
cmpqd 0,_mirror
beq L96
negl 16(r6),16(r6)
movqw 0,48(r6)
br L35
L96:
movd -40(fp),r0
addd -44(fp),r0
addr _outleft,r4
br L110
L95:
movxwd 48(r6),r0
cmpd r0,_nzones
bne L35
movd -40(fp),r0
addd -44(fp),r0
addr _outright,r4
L110:
addd r4,r0
movd r0,tos
L109:
movd r6,tos
bsr _addtodist
adjspb -8
L30:
movd -36(fp),r4
addr @0[r4:q],r0
addr 0(r0)[r4:d],r0
addr _pdist,r4
addd r4,r0
movd r0,tos
bsr _getfromdist
movd r0,r6
adjspb -4
cmpqd 0,r6
bne L100
addqd 1,-36(fp)
cmpd -36(fp),_parallelism
blt L30
L107:
movl tos,f6
movl tos,f4
exit [r3,r4,r5,r6,r7]
ret 0
.comm _bcounter,512
.comm _sdist,1536
.comm _outright,1536
.comm _outleft,1536
.comm _spare,1536
.comm _cdist,1536
.comm _pdist,1536
.comm _blocksizes,4
.comm _nblocks,4
.comm _SA,4
.comm _zl_index,4
.comm _ls_index,4
.comm _G,4
.comm _X,4
.comm _B,4
.comm _dim,4
.comm _zones,4
.comm _lrnudist,4
.comm _rnudist,4
.comm _llnudist,4
.comm _lnudist,4
.lcomm _freesymbols,4
.lcomm _freemtxelts,4
.lcomm _lsymbols,4
.lcomm _symbols,4
.lcomm _lmtxelts,4
.lcomm _mtxelts,4
.comm _totalwidth,8
.comm _zonewidth,4
.comm _n,4
.comm _nzones,4
.comm _lptr,4
.comm _dumplsenable,4
.comm _jnuenable,4
.comm _ngroups,4
.comm _deltanud,4
.comm _nucut,4
.comm _nu0,4
.comm _lower,4
.comm _upper,4
.comm _sigmaup,4
.comm _sigmadown,4
.comm _avoigt,4
.comm _aspont,4
.comm _ssgsigmaup,4
.comm _ssgsigmadown,4
.comm _ssglower,4
.comm _ssgupper,4
.comm _ssgnlines,4
.comm _atomoflevel,4
.comm _rho,4
.comm _coll,4
.comm _nbundles,4
.comm _timelimit,8
.comm _timesteps,4
.comm _natoms,4
.comm _nlevels,4
.comm _nlines,4
.comm _matfptr,4
.comm _pltfptr,4
.comm _outfptr,4
.comm _quefptr,4brooks@lll-crg.llnl.gov (Eugene D. Brooks III) (11/05/88)
Bug report for GCC 1.30 on NS32K, Sequent Balance.
First half of double register move clobbers register
used in address computation for move of the second
half. The bug is apparently in output_move_double,
which does not check that the target of the move
(if a register pair) might clobber registers used in
address computation, and a check of the other machine
descriptions reveals no equivalent checking being done
in them either.
For the NS32K a cheap trick workaround is to use the stack
to save the first word moved, move the second word, then
pop the first word back off the stack. Anyone know how
to get output_move_double() to accomplish this? I am not
well versed in GCC internals.
I do not hit the bug without the optimizer, and do not hit the
bug on the SUN, but perhaps this is just an accident.
Search for BUG in the file below for a pointer to the bad
assembler output. The bug hitter input code, compiled with gcc -O -S, is:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
extern struct _iobuf {
int _cnt;
char *_ptr;
char *_base;
int _bufsiz;
short _flag;
char _file;
} _iob[20 ];
struct _iobuf *fopen();
struct _iobuf *fdopen();
struct _iobuf *freopen();
long ftell();
char *gets();
char *fgets();
char *sprintf();
extern double fabs(), floor(), ceil(), fmod(), ldexp(), frexp();
extern double sqrt(), hypot(), atof();
extern double sin(), cos(), tan(), asin(), acos(), atan(), atan2();
extern double exp(), log(), log10(), pow();
extern double sinh(), cosh(), tanh();
extern double gamma();
extern double j0(), j1(), jn(), y0(), y1(), yn();
void ranset();
extern long ranseed;
double ranf();
double simpint();
float fmean();
float fstdev();
double dmean();
double dstdev();
extern int randi();
extern double randiranf();
extern void srandi();
extern void randifwrite();
extern void randifread();
extern int prandi();
extern double prandiranf();
extern void psrandi();
extern void fwriteprandi();
extern void freadprandi();
char *malloc();
char *calloc();
typedef enum { INT, DOUBLE, PINT, PDOUBLE, PPINT, PPDOUBLE, PPPINT, PPPDOUBLE} TYPE;
typedef union {
int *pi;
int **ppi;
int ***pppi;
int ****ppppi;
double *pd;
double **ppd;
double ***pppd;
double ****ppppd;
} PTRUNION;
typedef struct symtab {
char *name;
TYPE type;
PTRUNION valptr;
int *dim1;
int *dim2;
int *dim3;
struct symtab *next;
} SYMTAB;
char *strcpy();
SYMTAB *lookup();
extern void addtab();
extern int *mllc3d();
extern int *mllc2d();
extern struct _iobuf *yyin;
extern struct _iobuf *yyout;
extern int warningMessages;
struct bins {
double p;
double a;
double b;
};
struct line {
int nbins;
double avoigt;
double knucut;
double knu0;
double deltaknud;
double knucuty;
double knucutprimex;
double probatknucut;
struct bins *bin;
};
typedef struct line LINE;
LINE *genline( );
double knuinline( );
double pknuinline( );
double fofknu( );
typedef unsigned char PCP_LOCK_TYPE;
int mtime();
char *malloc();
char *sprintf();
char *sbrk();
void propagate();
struct _iobuf *quefptr;
struct _iobuf *outfptr;
struct _iobuf *pltfptr;
struct _iobuf *matfptr;
int mirror = 0;
int nlines;
int nlevels;
int natoms;
int timesteps;
double timelimit;
int nbundles;
double **coll;
int parallelism = 1;
double **rho;
int *atomoflevel;
int ssgnlines;
int *ssgupper;
int *ssglower;
double *ssgsigmadown;
double *ssgsigmaup;
double *aspont;
double *avoigt;
double *sigmadown;
double *sigmaup;
int *upper;
int *lower;
double *nu0;
double *nucut;
double *deltanud;
int *ngroups;
int *jnuenable;
int nubins = 20;
double nulolim = 96.0;
double nuhilim = 104.0;
int *dumplsenable;
int emitatleastone = 0;
LINE **lptr;
int nzones;
double **n;
double *zonewidth;
double totalwidth;
static int mtxelts;
static PCP_LOCK_TYPE lmtxelts;
static int symbols;
static PCP_LOCK_TYPE lsymbols;
struct mtxelt {
int col;
double value;
struct mtxelt *next;
};
typedef struct mtxelt MTXELT;
static MTXELT *freemtxelts[1 ];
struct symbol {
double sym;
unsigned short iz;
unsigned short in;
struct symbol *next;
};
typedef struct symbol SYMBOL;
static SYMBOL *freesymbols[1 ];
struct zone {
double ledge;
double redge;
double *n;
double *intphif;
double intf;
double *jnu;
double *cntwght;
SYMBOL ***symintphif;
SYMBOL **symintf;
unsigned char access;
};
double *lnudist;
unsigned char *llnudist;
double lbelow = 0.0;
unsigned char llbelow = 0 ;
double labove = 0.0;
unsigned char llabove = 0 ;
double *rnudist;
unsigned char *lrnudist;
double rbelow = 0.0;
unsigned char lrbelow = 0 ;
double rabove = 0.0;
unsigned char lrabove = 0 ;
unsigned char lcheckio = 0 ;
struct zone *zones;
int dim;
double *B, *X, *G;
int *ls_index;
int *zl_index;
MTXELT ***SA;
int nblocks;
int *blocksizes;
static int zoneofx(x)
double x;
{
register int _TINDEX = 0; register int _TSIZE = 1 ;
int middle;
int lower = 0;
int upper = nzones;
while(lower != upper - 1) {
middle = (lower + upper) / 2;
if((zones[middle].ledge) <= x) {
lower = middle;
}
else if((zones[middle].redge) > x) {
upper = middle;
}
}
return(lower);
}
struct PBUNDLE {
double num;
double x;
double mu;
double t;
double initnum;
double knu;
short zx;
unsigned short bzx;
struct PBUNDLE *next;
unsigned short id;
unsigned char l;
unsigned char sym;
};
typedef struct PBUNDLE PBUNDLE;
struct DISTRIBUTION {
PBUNDLE *head;
PBUNDLE *tail;
int count;
};
typedef struct DISTRIBUTION DISTRIBUTION;
PBUNDLE *getfromdist(dptr)
DISTRIBUTION *dptr;
{
PBUNDLE *pptr;
;
if(dptr->count > 1) {
pptr = dptr->head;
dptr->head = dptr->head->next;
pptr->next = 0 ;
dptr->count -= 1;
}
else if(dptr->count == 1) {
pptr = dptr->head;
dptr->head = 0 ;
dptr->tail = 0 ;
dptr->count = 0;
}
else {
;
;
pptr = 0 ;
}
return(pptr);
}
void addtodist(pptr, dptr)
PBUNDLE *pptr;
DISTRIBUTION *dptr;
{
;
;
;
;
if(dptr->count == 0) {
;
;
dptr->head = pptr;
dptr->tail = pptr;
}
else {
;
dptr->tail->next = pptr;
dptr->tail = pptr;
}
dptr->count += 1;
}
DISTRIBUTION pdist[128 ];
DISTRIBUTION cdist[128 ];
DISTRIBUTION spare[128 ];
DISTRIBUTION outleft[128 ];
DISTRIBUTION outright[128 ];
DISTRIBUTION sdist[128 ];
PBUNDLE *allopbundle(p)
int p;
{
PBUNDLE *array;
int i;
;
if(spare[p].count == 0) {
if((array = (PBUNDLE *)sbrk(2048 * sizeof(PBUNDLE))) == (PBUNDLE *)-1) {
perror("allopbundle");
exit(1);
}
for(i = 0; i <2048 ; i += 1) {
array[i].next = 0 ;
addtodist(array + i, spare + p);
}
}
return(getfromdist(spare + p));
}
int bcounter[128 ];
void addpbundle(num, sym, knu, x, zx, bzx, mu, t, p, l)
double num;
int sym;
double knu;
double x;
int zx;
int bzx;
double mu;
double t;
int p;
int l;
{
register PBUNDLE *tptr;
tptr = allopbundle(p);
tptr->num = num;
tptr->initnum = num;
tptr->knu = knu;
tptr->x = x;
tptr->zx = zx;
tptr->bzx = bzx;
tptr->mu = mu;
tptr->t = t;
tptr->next = 0 ;
tptr->sym = sym;
tptr->id = bcounter[p]++;
tptr->l = l;
addtodist(tptr, pdist + p);
}
void propagate(tstart, tcensus)
double tstart, tcensus;
{
register int _TINDEX = 0; register int _TSIZE = 1 ;
double incctnfpa;
int l;
double r;
PBUNDLE *pbptr;
double distocensus;
double distoboundary;
double distocollision;
double newnum;
double absconstant;
double incintf;
int p;
for(p = 0; p < parallelism; p += 1) {
while((pbptr = getfromdist(pdist + p)) != 0 ) {
int inu;
if((pbptr->knu >= nulolim) && (pbptr->knu < nuhilim)) {
inu = nubins * ((pbptr->knu - nulolim) / (nuhilim - nulolim));
}
else {
inu = -1;
}
if(pbptr->sym == 1 && pbptr->initnum == (double)0.0) {
;
;
pbptr->num = pbptr->initnum = zones[pbptr->zx].cntwght[pbptr->l];
}
while(1) {
distocensus = 2.99792458e+10 * (tcensus - pbptr->t);
# 1914 "imc.c"
if(pbptr->mu > (double)0.0) {
distoboundary = ((zones[pbptr->zx].redge) - pbptr->x) / pbptr->mu;
}
else if(pbptr->mu < (double)0.0) {
distoboundary = ((zones[pbptr->zx].ledge) - pbptr->x) / pbptr->mu;
}
else {
distoboundary = (double)1.0e+30 ;
}
absconstant = 0.0;
for(l = 0; l < nlines; l += 1) {
absconstant += ((rho[atomoflevel[lower[l]]][pbptr->zx] * sigmaup[l] * zones[pbptr->zx].n[lower[l]])
- (rho[atomoflevel[upper[l]]][pbptr->zx] * sigmadown[l] * zones[pbptr->zx].n[upper[l]])) * fofknu(pbptr->knu, *(lptr[l]));
}
if(distocensus <= distoboundary) {
if(distocensus > 0) {
newnum = (double)exp(-absconstant * distocensus) * pbptr->num;
if(absconstant == 0) {
incintf = distocensus * pbptr->num;
}
else if(fabs(absconstant * distocensus) < 1.0e-3 ) {
incintf = pbptr->num * -((-absconstant * distocensus) + (-absconstant * distocensus)*(-absconstant * distocensus)/2 + (-absconstant * distocensus)*(-absconstant * distocensus)*(-absconstant * distocensus)/6 + (-absconstant * distocensus)*(-absconstant * distocensus)*(-absconstant * distocensus)*(-absconstant * distocensus)/24 + (-absconstant * distocensus)*(-absconstant * distocensus)*(-absconstant * distocensus)*(-absconstant * distocensus)*(-absconstant * distocensus)/120) / absconstant;
}
else {
incintf = (pbptr->num - newnum) / absconstant;
}
}
else if(distocensus == 0) {
newnum = pbptr->num;
incintf = 0.0;
}
else {
fprintf((&_iob[2]) , "Distocensus was negative = %g\n", distocensus);
newnum = pbptr->num;
incintf = 0.0;
}
1 ;
if(pbptr->sym == 1 ) {
addsymbol(pbptr->bzx, upper[pbptr->l], incintf, zones[pbptr->zx].symintf);
for(l = 0; l < nlines; l += 1) {
addsymbol(pbptr->bzx, upper[pbptr->l], fofknu(pbptr->knu, *(lptr[l])) * incintf, zones[pbptr->zx].symintphif[l]);
}
if(jnuenable[pbptr->zx] && inu >= 0 && inu < nubins) {
zones[pbptr->zx].jnu[inu] += incintf * zones[pbptr->bzx].n[upper[pbptr->l]];
}
}
else {
zones[pbptr->zx].intf += incintf;
for(l = 0; l < nlines; l += 1) {
zones[pbptr->zx].intphif[l] += fofknu(pbptr->knu, *(lptr[l])) * incintf;
}
if(jnuenable[pbptr->zx] && inu >= 0 && inu < nubins) {
zones[pbptr->zx].jnu[inu] += incintf;
}
}
1 ;
pbptr->num = newnum;
pbptr->x += distocensus * pbptr->mu;
pbptr->t = tcensus;
if(pbptr->num / pbptr->initnum < 1.0e-5 ) {
addtodist(pbptr, sdist + p);
}
else {
addtodist(pbptr, cdist + p);
}
break;
}
else {
if(distoboundary > 0) {
newnum = (double)exp(-absconstant * distoboundary) * pbptr->num;
if(absconstant == 0) {
incintf = distoboundary * pbptr->num;
}
else if(fabs(absconstant * distoboundary) < 1.0e-3 ) {
incintf = pbptr->num * -((-absconstant * distoboundary) + (-absconstant * distoboundary)*(-absconstant * distoboundary)/2 + (-absconstant * distoboundary)*(-absconstant * distoboundary)*(-absconstant * distoboundary)/6 + (-absconstant * distoboundary)*(-absconstant * distoboundary)*(-absconstant * distoboundary)*(-absconstant * distoboundary)/24 + (-absconstant * distoboundary)*(-absconstant * distoboundary)*(-absconstant * distoboundary)*(-absconstant * distoboundary)*(-absconstant * distoboundary)/1
20) / absconstant;
}
else {
incintf = (pbptr->num - newnum) / absconstant;
}
}
else if(distoboundary == 0) {
newnum = pbptr->num;
incintf = 0.0;
}
else {
fprintf((&_iob[2]) , "distoboundary was negative = %g\n", distoboundary);
newnum = pbptr->num;
incintf = 0.0;
}
1 ;
if(pbptr->sym == 1 ) {
addsymbol(pbptr->bzx, upper[pbptr->l], incintf, zones[pbptr->zx].symintf);
for(l = 0; l < nlines; l += 1) {
addsymbol(pbptr->bzx, upper[pbptr->l], fofknu(pbptr->knu, *(lptr[l])) * incintf, zones[pbptr->zx].symintphif[l]);
}
if(jnuenable[pbptr->zx] && inu >= 0 && inu < nubins) {
zones[pbptr->zx].jnu[inu] += incintf * zones[pbptr->bzx].n[upper[pbptr->l]];
}
}
else {
zones[pbptr->zx].intf += incintf;
for(l = 0; l < nlines; l += 1) {
zones[pbptr->zx].intphif[l] += fofknu(pbptr->knu, *(lptr[l])) * incintf;
}
if(jnuenable[pbptr->zx] && inu >= 0 && inu < nubins) {
zones[pbptr->zx].jnu[inu] += incintf;
}
}
1 ;
pbptr->num = newnum;
if(pbptr->mu > (double)0.0) {
pbptr->x = (zones[pbptr->zx].redge) ;
(pbptr->zx) += 1;
}
else if(pbptr->mu < (double)0.0) {
pbptr->x = (zones[pbptr->zx].ledge) ;
(pbptr->zx) -= 1;
}
else {
fprintf((&_iob[2]) , "propagate: We made it to the boundary but mu == 0.0 ???\n");
exit(1);
}
pbptr->t += distoboundary / 2.99792458e+10 ;
if(pbptr->num / pbptr->initnum < 1.0e-5 ) {
addtodist(pbptr, sdist + p);
break;
}
else if(pbptr->zx == -1) {
if(mirror) {
;
pbptr->mu = -pbptr->mu;
pbptr->zx = 0;
}
else {
addtodist(pbptr, outleft + p);
break;
}
}
else if(pbptr->zx == nzones) {
addtodist(pbptr, outright + p);
break;
}
}
}
}
}
}
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
The incorrect assembly code output is (see the (BUG) pointer a few lines
after the definition of _propagate):
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
#NO_APP
.globl _mirror
.data
.align 2
_mirror:
.long 0
.globl _parallelism
.align 2
_parallelism:
.long 1
.globl _nubins
.align 2
_nubins:
.long 20
.globl _nulolim
.align 2
_nulolim:
.double 0d9.60000000000000000000e+01
.globl _nuhilim
.align 2
_nuhilim:
.double 0d1.04000000000000000000e+02
.globl _emitatleastone
.align 2
_emitatleastone:
.long 0
.globl _lbelow
.align 2
_lbelow:
.double 0d0.00000000000000000000e+00
.globl _llbelow
.align 0
_llbelow:
.byte 0
.globl _labove
.align 2
_labove:
.double 0d0.00000000000000000000e+00
.globl _llabove
.align 0
_llabove:
.byte 0
.globl _rbelow
.align 2
_rbelow:
.double 0d0.00000000000000000000e+00
.globl _lrbelow
.align 0
_lrbelow:
.byte 0
.globl _rabove
.align 2
_rabove:
.double 0d0.00000000000000000000e+00
.globl _lrabove
.align 0
_lrabove:
.byte 0
.globl _lcheckio
.align 0
_lcheckio:
.byte 0
.text
.align 1
_zoneofx:
enter [r3,r4],0
movl 8(fp),f0
movqd 0,r2
movd _nzones,r3
movd _zones,r4
br L2
L8:
movd r2,r1
addd r3,r1
cmpqd 0,r1
ble L4
addqd 1,r1
L4:
ashd -1,r1
movd r1,r0
muld 52,r0
cmpl 0(r0)[r4:b],f0
bgt L5
movd r1,r2
br L2
L5:
movd r1,r0
muld 52,r0
cmpl 8(r0)[r4:b],f0
ble L2
movd r1,r3
L2:
movd r3,r0
addqd -1,r0
cmpd r2,r0
bne L8
movd r2,r0
exit [r3,r4]
ret 0
.align 1
.globl _getfromdist
_getfromdist:
enter [],0
movd 8(fp),r0
cmpqd 1,8(r0)
bge L10
movd 0(r0),r1
movd 52(r1),0(r0)
movqd 0,52(r1)
addqd -1,8(r0)
br L11
L10:
cmpqd 1,8(r0)
bne L12
movd 0(r0),r1
movqd 0,0(r0)
movqd 0,4(r0)
movqd 0,8(r0)
br L11
L12:
movqd 0,r1
L11:
movd r1,r0
exit []
ret 0
.align 1
.globl _addtodist
_addtodist:
enter [],0
movd 8(fp),r2
movd 12(fp),r1
cmpqd 0,8(r1)
bne L15
movd r2,0(r1)
br L17
L15:
movd 4(r1),r0
movd r2,52(r0)
L17:
movd r2,4(r1)
addqd 1,8(r1)
exit []
ret 0
.align 0
LC0:
.ascii "allopbundle\0"
.align 2
LC1:
.long _spare
.align 1
.globl _allopbundle
_allopbundle:
enter [r3,r4,r5,r6],0
movd 8(fp),r6
addr @0[r6:q],r0
addr 0(r0)[r6:d],r0
cmpqd 0,_spare+8[r0:b]
bne L19
movd 122880,tos
bsr _sbrk
movd r0,r4
adjspb -4
cmpqd -1,r4
bne L20
addr LC0,tos
bsr _perror
movqd 1,tos
bsr _exit
adjspb -8
L20:
movqd 0,r3
addr @0[r6:q],r0
addr 0(r0)[r6:d],r0
movd LC1,r5
addd r0,r5
L24:
movd r3,r0
muld 60,r0
addd r4,r0
movqd 0,52(r0)
movd r5,tos
movd r0,tos
bsr _addtodist
adjspb -8
addqd 1,r3
cmpd r3,2047
ble L24
L19:
addr @0[r6:q],r0
addr 0(r0)[r6:d],r0
addr _spare,r1
addd r1,r0
movd r0,tos
bsr _getfromdist
adjspb -4
exit [r3,r4,r5,r6]
ret 0
.align 1
.globl _addpbundle
_addpbundle:
enter [r3,r4,r5],0
movd 8(fp),r4
movd 12(fp),r5
movd 60(fp),r3
movd r3,tos
bsr _allopbundle
movd r4,0(r0)
movd r5,4(r0)
movd r4,32(r0)
movd r5,36(r0)
movd 20(fp),40(r0)
movd 24(fp),44(r0)
movd 28(fp),8(r0)
movd 32(fp),12(r0)
movw 36(fp),48(r0)
movw 40(fp),50(r0)
movd 44(fp),16(r0)
movd 48(fp),20(r0)
movd 52(fp),24(r0)
movd 56(fp),28(r0)
movqd 0,52(r0)
movb 16(fp),59(r0)
addr _bcounter[r3:d],r1
movw 0(r1),56(r0)
addqd 1,0(r1)
movb 64(fp),58(r0)
addr @0[r3:q],r1
addr 0(r1)[r3:d],r1
addr _pdist,r2
addd r2,r1
movd r1,tos
movd r0,tos
bsr _addtodist
adjspb -12
exit [r3,r4,r5]
ret 0
.align 0
LC2:
.ascii "Distocensus was negative = %g\12\0"
.align 0
LC3:
.ascii "distoboundary was negative = %g\12\0"
.align 0
LC4:
.ascii "propagate: We made it to the boundary but mu == 0.0 ???\12\0"
.align 1
.globl _propagate
_propagate:
enter [r3,r4,r5,r6,r7],48
movl f4,tos
movl f6,tos
movqd 0,-36(fp)
cmpd -36(fp),_parallelism
bge L107
br L30
L100:
cmpl 40(r6),_nulolim
blt L32
cmpl 40(r6),_nuhilim
bge L32
movdl _nubins,f0
movl 40(r6),f2
subl _nulolim,f2
movl _nuhilim,f4
subl _nulolim,f4
divl f4,f2
mull f2,f0
truncld f0,r7
br L33
L32:
movqd -1,r7
L33:
cmpqb 1,59(r6)
bne L34
cmpl 0d0.00000000000000000000e+00,32(r6)
bne L34
movxwd 48(r6),r0
muld 52,r0
movzbd 58(r6),r1
movd 36(_zones(sb))[r0:b],r0
movd 0(r0)[r1:q],r0 <<== (BUG) Clobbers r0 which is needed in the
next instructio. Changing the order won't help
because both r0 and r1 are needed.
movd 4(r0)[r1:q],r1
movd r0,32(r6)
movd r1,36(r6)
movd r0,0(r6)
movd r1,4(r6)
L34:
movd -36(fp),r4
addr @0[r4:d],-40(fp)
addr @0[r4:q],-44(fp)
movd -40(fp),r0
addd -44(fp),r0
addr _sdist,r4
addd r4,r0
movd r0,-48(fp)
L35:
movl 16(fp),f0
subl 24(r6),f0
mull 0d2.99792458000000000000e+10,f0
movl f0,-8(fp)
cmpl 0d0.00000000000000000000e+00,16(r6)
bge L37
movxwd 48(r6),r0
muld 52,r0
movl 8(_zones(sb))[r0:b],f0
br L108
L37:
cmpl 0d0.00000000000000000000e+00,16(r6)
ble L39
movxwd 48(r6),r0
muld 52,r0
movl 0(_zones(sb))[r0:b],f0
L108:
subl 8(r6),f0
divl 16(r6),f0
movl f0,-16(fp)
br L38
L39:
movd 966823146,-16(fp)
movd 1177108057,-12(fp)
L38:
movqd 0,-32(fp)
movqd 0,-28(fp)
movqd 0,r5
cmpd r5,_nlines
bge L106
L44:
movd 0(_lptr(sb))[r5:d],r0
adjspd 64
addr tos,r2
addr 0(r0),r1
movd 16,r0
movsd
movd 44(r6),tos
movd 40(r6),tos
bsr _fofknu
movd 0(_lower(sb))[r5:d],r4
movd _atomoflevel,r3
movd 0(r3)[r4:d],r2
movd _rho,r1
movxwd 48(r6),r0
movd 0(r1)[r2:d],r2
movl 0(r2)[r0:q],f2
mull 0(_sigmaup(sb))[r5:q],f2
movd r0,r2
muld 52,r2
movd 16(_zones(sb))[r2:b],r2
mull 0(r2)[r4:q],f2
movd 0(_upper(sb))[r5:d],r4
movd 0(r3)[r4:d],r3
movd 0(r1)[r3:d],r1
movl 0(r1)[r0:q],f4
mull 0(_sigmadown(sb))[r5:q],f4
mull 0(r2)[r4:q],f4
subl f4,f2
mull f0,f2
addl f2,-32(fp)
adjspw -72
addqd 1,r5
cmpd r5,_nlines
blt L44
L106:
cmpl -8(fp),-16(fp)
bgt L45
cmpl 0d0.00000000000000000000e+00,-8(fp)
bge L46
negl -32(fp),f0
mull -8(fp),f0
movl f0,tos
bsr _exp
mull 0(r6),f0
movl f0,-24(fp)
adjspb -8
cmpl 0d0.00000000000000000000e+00,-32(fp)
bne L47
movl -8(fp),f4
mull 0(r6),f4
br L51
L47:
movl -32(fp),f6
mull -8(fp),f6
movl f6,tos
bsr _fabs
adjspb -8
cmpl f0,0d1.00000000000000000000e-03
bge L49
negl -32(fp),f4
mull -8(fp),f4
movl f4,f0
mull f4,f0
movl f0,f2
divl 0d2.00000000000000000000e+00,f2
addl f4,f2
mull f4,f0
movl f0,f6
divl 0d6.00000000000000000000e+00,f6
addl f6,f2
mull f4,f0
movl f0,f6
divl 0d2.40000000000000000000e+01,f6
addl f6,f2
mull f4,f0
divl 0d1.20000000000000000000e+02,f0
addl f0,f2
negl f2,f2
movl f2,f4
mull 0(r6),f4
divl -32(fp),f4
br L51
L49:
movl 0(r6),f4
subl -24(fp),f4
divl -32(fp),f4
br L51
L46:
cmpl 0d0.00000000000000000000e+00,-8(fp)
bne L52
movd 0(r6),-24(fp)
movd 4(r6),-20(fp)
movl 0d0.00000000000000000000e+00,f4
br L51
L52:
movd -4(fp),tos
movd -8(fp),tos
addr LC2,tos
addr __iob+40,tos
bsr _fprintf
movd 0(r6),-24(fp)
movd 4(r6),-20(fp)
movl 0d0.00000000000000000000e+00,f4
adjspb -16
L51:
cmpqb 1,59(r6)
bne L54
movxwd 48(r6),r0
muld 52,r0
movd 44(_zones(sb))[r0:b],tos
movl f4,tos
movzbd 58(r6),r0
movd 0(_upper(sb))[r0:d],tos
movzwd 50(r6),tos
bsr _addsymbol
movqd 0,r5
adjspb -20
cmpd r5,_nlines
bge L105
L58:
movxwd 48(r6),r0
muld 52,r0
movd 40(_zones(sb))[r0:b],r0
movd 0(r0)[r5:d],tos
movd 0(_lptr(sb))[r5:d],r0
adjspd 64
addr tos,r2
addr 0(r0),r1
movd 16,r0
movsd
movd 44(r6),tos
movd 40(r6),tos
bsr _fofknu
adjspw -72
mull f4,f0
movl f0,tos
movzbd 58(r6),r0
movd 0(_upper(sb))[r0:d],tos
movzwd 50(r6),tos
bsr _addsymbol
adjspb -20
addqd 1,r5
cmpd r5,_nlines
blt L58
L105:
movxwd 48(r6),r1
cmpqd 0,0(_jnuenable(sb))[r1:d]
beq L60
cmpqd 0,r7
bgt L60
cmpd r7,_nubins
bge L60
movd _zones,r0
muld 52,r1
movd 32(r1)[r0:b],r1
movzwd 50(r6),r2
muld 52,r2
movzbd 58(r6),r3
movd 0(_upper(sb))[r3:d],r3
movd 16(r2)[r0:b],r0
movl f4,f0
mull 0(r0)[r3:q],f0
addl f0,0(r1)[r7:q]
br L60
L54:
movxwd 48(r6),r0
muld 52,r0
addl f4,24(_zones(sb))[r0:b]
movqd 0,r5
cmpd r5,_nlines
bge L104
L64:
movd 0(_lptr(sb))[r5:d],r0
adjspd 64
addr tos,r2
addr 0(r0),r1
movd 16,r0
movsd
movd 44(r6),tos
movd 40(r6),tos
bsr _fofknu
movxwd 48(r6),r0
muld 52,r0
movd 20(_zones(sb))[r0:b],r0
mull f4,f0
addl f0,0(r0)[r5:q]
adjspw -72
addqd 1,r5
cmpd r5,_nlines
blt L64
L104:
movxwd 48(r6),r0
cmpqd 0,0(_jnuenable(sb))[r0:d]
beq L60
cmpqd 0,r7
bgt L60
cmpd r7,_nubins
bge L60
muld 52,r0
movd 32(_zones(sb))[r0:b],r0
addl f4,0(r0)[r7:q]
L60:
movd -24(fp),0(r6)
movd -20(fp),4(r6)
movl -8(fp),f0
mull 16(r6),f0
addl f0,8(r6)
movd 16(fp),24(r6)
movd 20(fp),28(r6)
movl 0(r6),f0
divl 32(r6),f0
cmpl f0,0d1.00000000000000000000e-05
bge L66
movd -48(fp),tos
br L109
L66:
movd -40(fp),r0
addd -44(fp),r0
addr _cdist,r4
br L110
L45:
cmpl 0d0.00000000000000000000e+00,-16(fp)
bge L69
negl -32(fp),f0
mull -16(fp),f0
movl f0,tos
bsr _exp
mull 0(r6),f0
movl f0,-24(fp)
adjspb -8
cmpl 0d0.00000000000000000000e+00,-32(fp)
bne L70
movl -16(fp),f4
mull 0(r6),f4
br L74
L70:
movl -32(fp),f6
mull -16(fp),f6
movl f6,tos
bsr _fabs
adjspb -8
cmpl f0,0d1.00000000000000000000e-03
bge L72
negl -32(fp),f4
mull -16(fp),f4
movl f4,f0
mull f4,f0
movl f0,f2
divl 0d2.00000000000000000000e+00,f2
addl f4,f2
mull f4,f0
movl f0,f6
divl 0d6.00000000000000000000e+00,f6
addl f6,f2
mull f4,f0
movl f0,f6
divl 0d2.40000000000000000000e+01,f6
addl f6,f2
mull f4,f0
divl 0d1.20000000000000000000e+02,f0
addl f0,f2
negl f2,f2
movl f2,f4
mull 0(r6),f4
divl -32(fp),f4
br L74
L72:
movl 0(r6),f4
subl -24(fp),f4
divl -32(fp),f4
br L74
L69:
cmpl 0d0.00000000000000000000e+00,-16(fp)
bne L75
movd 0(r6),-24(fp)
movd 4(r6),-20(fp)
movl 0d0.00000000000000000000e+00,f4
br L74
L75:
movd -12(fp),tos
movd -16(fp),tos
addr LC3,tos
addr __iob+40,tos
bsr _fprintf
movd 0(r6),-24(fp)
movd 4(r6),-20(fp)
movl 0d0.00000000000000000000e+00,f4
adjspb -16
L74:
cmpqb 1,59(r6)
bne L77
movxwd 48(r6),r0
muld 52,r0
movd 44(_zones(sb))[r0:b],tos
movl f4,tos
movzbd 58(r6),r0
movd 0(_upper(sb))[r0:d],tos
movzwd 50(r6),tos
bsr _addsymbol
movqd 0,r5
adjspb -20
cmpd r5,_nlines
bge L103
L81:
movxwd 48(r6),r0
muld 52,r0
movd 40(_zones(sb))[r0:b],r0
movd 0(r0)[r5:d],tos
movd 0(_lptr(sb))[r5:d],r0
adjspd 64
addr tos,r2
addr 0(r0),r1
movd 16,r0
movsd
movd 44(r6),tos
movd 40(r6),tos
bsr _fofknu
adjspw -72
mull f4,f0
movl f0,tos
movzbd 58(r6),r0
movd 0(_upper(sb))[r0:d],tos
movzwd 50(r6),tos
bsr _addsymbol
adjspb -20
addqd 1,r5
cmpd r5,_nlines
blt L81
L103:
movxwd 48(r6),r1
cmpqd 0,0(_jnuenable(sb))[r1:d]
beq L83
cmpqd 0,r7
bgt L83
cmpd r7,_nubins
bge L83
movd _zones,r0
muld 52,r1
movd 32(r1)[r0:b],r1
movzwd 50(r6),r2
muld 52,r2
movzbd 58(r6),r3
movd 0(_upper(sb))[r3:d],r3
movd 16(r2)[r0:b],r0
movl f4,f0
mull 0(r0)[r3:q],f0
addl f0,0(r1)[r7:q]
br L83
L77:
movxwd 48(r6),r0
muld 52,r0
addl f4,24(_zones(sb))[r0:b]
movqd 0,r5
cmpd r5,_nlines
bge L102
L87:
movd 0(_lptr(sb))[r5:d],r0
adjspd 64
addr tos,r2
addr 0(r0),r1
movd 16,r0
movsd
movd 44(r6),tos
movd 40(r6),tos
bsr _fofknu
movxwd 48(r6),r0
muld 52,r0
movd 20(_zones(sb))[r0:b],r0
mull f4,f0
addl f0,0(r0)[r5:q]
adjspw -72
addqd 1,r5
cmpd r5,_nlines
blt L87
L102:
movxwd 48(r6),r0
cmpqd 0,0(_jnuenable(sb))[r0:d]
beq L83
cmpqd 0,r7
bgt L83
cmpd r7,_nubins
bge L83
muld 52,r0
movd 32(_zones(sb))[r0:b],r0
addl f4,0(r0)[r7:q]
L83:
movd -24(fp),0(r6)
movd -20(fp),4(r6)
cmpl 0d0.00000000000000000000e+00,16(r6)
bge L89
movxwd 48(r6),r0
muld 52,r0
movd 8(_zones(sb))[r0:b],8(r6)
movd 12(_zones(sb))[r0:b],12(r6)
addqw 1,48(r6)
br L90
L89:
cmpl 0d0.00000000000000000000e+00,16(r6)
ble L91
movxwd 48(r6),r0
muld 52,r0
movd 0(_zones(sb))[r0:b],8(r6)
movd 4(_zones(sb))[r0:b],12(r6)
addqw -1,48(r6)
br L90
L91:
addr LC4,tos
addr __iob+40,tos
bsr _fprintf
movqd 1,tos
bsr _exit
adjspb -12
L90:
movl -16(fp),f0
divl 0d2.99792458000000000000e+10,f0
addl f0,24(r6)
movl 0(r6),f0
divl 32(r6),f0
cmpl f0,0d1.00000000000000000000e-05
bge L93
movd -40(fp),r0
addd -44(fp),r0
addr _sdist,r4
br L110
L93:
cmpqw -1,48(r6)
bne L95
cmpqd 0,_mirror
beq L96
negl 16(r6),16(r6)
movqw 0,48(r6)
br L35
L96:
movd -40(fp),r0
addd -44(fp),r0
addr _outleft,r4
br L110
L95:
movxwd 48(r6),r0
cmpd r0,_nzones
bne L35
movd -40(fp),r0
addd -44(fp),r0
addr _outright,r4
L110:
addd r4,r0
movd r0,tos
L109:
movd r6,tos
bsr _addtodist
adjspb -8
L30:
movd -36(fp),r4
addr @0[r4:q],r0
addr 0(r0)[r4:d],r0
addr _pdist,r4
addd r4,r0
movd r0,tos
bsr _getfromdist
movd r0,r6
adjspb -4
cmpqd 0,r6
bne L100
addqd 1,-36(fp)
cmpd -36(fp),_parallelism
blt L30
L107:
movl tos,f6
movl tos,f4
exit [r3,r4,r5,r6,r7]
ret 0
.comm _bcounter,512
.comm _sdist,1536
.comm _outright,1536
.comm _outleft,1536
.comm _spare,1536
.comm _cdist,1536
.comm _pdist,1536
.comm _blocksizes,4
.comm _nblocks,4
.comm _SA,4
.comm _zl_index,4
.comm _ls_index,4
.comm _G,4
.comm _X,4
.comm _B,4
.comm _dim,4
.comm _zones,4
.comm _lrnudist,4
.comm _rnudist,4
.comm _llnudist,4
.comm _lnudist,4
.lcomm _freesymbols,4
.lcomm _freemtxelts,4
.lcomm _lsymbols,4
.lcomm _symbols,4
.lcomm _lmtxelts,4
.lcomm _mtxelts,4
.comm _totalwidth,8
.comm _zonewidth,4
.comm _n,4
.comm _nzones,4
.comm _lptr,4
.comm _dumplsenable,4
.comm _jnuenable,4
.comm _ngroups,4
.comm _deltanud,4
.comm _nucut,4
.comm _nu0,4
.comm _lower,4
.comm _upper,4
.comm _sigmaup,4
.comm _sigmadown,4
.comm _avoigt,4
.comm _aspont,4
.comm _ssgsigmaup,4
.comm _ssgsigmadown,4
.comm _ssglower,4
.comm _ssgupper,4
.comm _ssgnlines,4
.comm _atomoflevel,4
.comm _rho,4
.comm _coll,4
.comm _nbundles,4
.comm _timelimit,8
.comm _timesteps,4
.comm _natoms,4
.comm _nlevels,4
.comm _nlines,4
.comm _matfptr,4
.comm _pltfptr,4
.comm _outfptr,4
.comm _quefptr,4