19990328 snapshot has problem loading FP constant on sparc

Brad Lucier lucier@math.purdue.edu
Wed Mar 31 23:54:00 GMT 1999


I read "How to submit a bug report" in the FAQ, and will try to include
the information requested there.

Here is crap.c:

extern double cos(double);
extern double sin(double);
extern double atan(double);

static  long   ___lp;  

typedef int jmp_buf[12 ];

typedef struct ___jmpbuf_struct
  {
    jmp_buf buf;
  } ___jmpbuf_struct;


typedef struct ___processor_state_struct
{
    long *stack,
        *stack_base,
        *stack_limit,
        *stack_trip,
        *stack_break,
        *fp;
    long *heap,
        *heap_limit,
        *hp;
    long r[20],
         pc,
         temp1,
         temp2,
         temp3,
         temp4;
    int na,
        np;
    int intr_enabled,
        intr_flag[3];
    long glo_list_head,
         glo_list_tail;
    long handler_break,
         handler_stack_limit,
         handler_heap_limit, handler_not_proc,
         handler_not_proc_glo, handler_wrong_nargs,
         handler_get_rest, handler_get_key,
         handler_get_key_rest, handler_force,
         handler_clam_conv_error, handler_cdef_conv_error,
         handler_return_to_c, initial_continuation;
    long executable_wills,
         non_executable_wills;
    ___jmpbuf_struct *catcher;
}                         ___processor_state_struct, *___processor_state;

static long ___H_makect(___processor_state ___ps)
{
    register long ___pc,
         ___temp;
    register unsigned long long ___temp64;
    register long ___start = ___lp + ((28) * 4 * (1 << 2));
    register long *___hp;
    register long *___fp;
    register long ___r0;
    register long ___r1;
    register long ___r2;
    register long ___r3;
    register long ___r4;
    register long ___r5;
    register long ___r7;
    double ___F64R1;
    double ___F64R4;
    double ___F64R5;
    double ___F64R6;
    double ___F64R7;
    ___hp = ___ps->hp;
    ___fp = ___ps->fp;
    ___r0 = ___ps->r[0];
    ___r1 = ___ps->r[1];
    ___r2 = ___ps->r[2];
    ___r3 = ___ps->r[3];
    ___r4 = ___ps->r[4];
    ___r5 = ___ps->r[5];
    ___r7 = ___ps->r[7];
    ___pc = ___ps->pc;
___jump:switch ((___pc -= ___start) / (4 * (1 << 2)))
    {
      case 28 - 28 + 0:
___L0_makect:
	if (___ps->na == 3)
	{
	}
	else
	{
	    ___ps->temp1 = ___start + ((28 - 28 + 0) * 4 * (1 << 2));
	    {
		___pc = ___ps->handler_wrong_nargs;
		goto ___jumpext;
	    }
	}
___L_makect:
	*(long *) (((long) (((long *) (___r2 - 1)) + 1)) + ((((long) (1L) << 2)) << (2 - 2))) = ___r1;
	if (!(___r1 > ((long) (1L) << 2)))
	{
	    goto ___L3_makect;
	}
	___r2 = (((___r1 >> (((long) (1L) << 2) >> 2)) & ~((1 << 2) - 1)));
	___F64R4 = (___r2 >> 2);
	___F64R5 = atan(1.);
	___F64R4 = (___F64R5 / ___F64R4);
	___F64R5 = (___r2 >> 2);
	___F64R5 = (___F64R4 * ___F64R5);
	___F64R5 = cos(___F64R5);
	*(double *) (((long) (((long *) (___r3 - 1)) + 1)) + ((((long) (0L) << 2)) << (3 - 2))) = ___F64R5;
	___F64R5 = *(double *) (((long) (((long *) (___r3 - 1)) + 1)) + ((((long) (0L) << 2)) << (3 - 2)));
	___F64R5 = (.5 * ___F64R5);
	*(double *) (((long) (((long *) (___r3 - 1)) + 1)) + ((___r2) << (3 - 2))) = ___F64R5;
	___r4 = ((___hp += 2 + 2, ((long) ___hp & 7) == 0 ? (*(___hp - 2 - 1) = (((2 << 2) << (3 + 5)) + (30 << 3) + 0), *(double *) ((___hp - 2 - 1) + 1) = ___F64R4, ((long) (___hp - 2 - 1) + 1)) : (*(___hp - 2 - 2) = (((2 << 2) << (3 + 5)) + (30 << 3) + 0), *(double *) ((___hp - 2 - 2) + 1) = ___F64R4, ((long) (___hp - 2 - 2) + 1))));
	___fp[-(1)] = (___r4);
	___r4 = (___r3);
	___r3 = (___r2);
	___r2 = (___r1);
	___r1 = (___fp[-(1)]);
	___r5 = (((long) (1L) << 2));
	if (___hp > ___ps->heap_limit)
	{
	    ___ps->temp1 = ___start + ((28 - 28 + 1) * 4 * (1 << 2));
	    {
		___pc = ___ps->handler_heap_limit;
		goto ___jumpext;
	    }
	}
      case 28 - 28 + 1:
___L1_makect:
	if ((___r5 == ___r3))
	{
	    goto ___L3_makect;
	}
___L2_makect:
	___F64R6 = (___r5 >> 2);
	___F64R1 = (*(double *) ((((long *) (___r1 - 1)) + 1)));
	___F64R6 = (___F64R1 * ___F64R6);
	___F64R7 = cos(___F64R6);
	___F64R7 = (.5 * ___F64R7);
	*(double *) (((long) (((long *) (___r4 - 1)) + 1)) + ((___r5) << (3 - 2))) = ___F64R7;
	___r7 = (((long) (___r2 - ___r5)));
	___F64R6 = sin(___F64R6);
	___F64R6 = (.5 * ___F64R6);
	*(double *) (((long) (((long *) (___r4 - 1)) + 1)) + ((___r7) << (3 - 2))) = ___F64R6;
	___r5 = (((long) (___r5 + ((long) (1L) << 2))));
	if (!(___r5 == ___r3))
	{
	    goto ___L2_makect;
	}
___L3_makect:
	___r1 = ((((long) -5 << 2) + 2));
	{
	    ___pc = ___r0;
	    goto ___jump;
	}
    } ___pc += ___start;
___jumpext:
    ___ps->pc = ___pc;
    ___ps->hp = ___hp;
    ___ps->r[1] = ___r1;
    ___ps->r[2] = ___r2;
    ___ps->r[3] = ___r3;
    ___ps->r[4] = ___r4;
    ___ps->r[5] = ___r5;
    ___ps->r[7] = ___r7;
    return ___pc;
}

and the compile command, with the output:

bessel-112% /opt/egcs-19990328/bin/gcc -v --save-temps -g -fPIC -O1 -mcpu=supersparc -mtune=ultrasparc -c crap.c
Reading specs from /opt/egcs-19990328/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.93.14/specs
gcc version egcs-2.93.14 19990328 (gcc2 ss-980929 experimental)
 /opt/egcs-19990328/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.93.14/cpp -lang-c -v -undef -D__GNUC__=2 -D__GNUC_MINOR__=93 -Dsparc -Dsun -Dunix -D__svr4__ -D__SVR4 -D__sparc__ -D__sun__ -D__unix__ -D__svr4__ -D__SVR4 -D__sparc -D__sun -D__unix -Asystem(unix) -Asystem(svr4) -D__OPTIMIZE__ -g -D__supersparc__ -D__sparc_v8__ -D__GCC_NEW_VARARGS__ -Acpu(sparc) -Amachine(sparc) crap.c crap.i
GNU CPP version egcs-2.93.14 19990328 (gcc2 ss-980929 experimental) (sparc)
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /opt/egcs-19990328/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.93.14/../../../../sparc-sun-solaris2.5.1/include
 /opt/egcs-19990328/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.93.14/include
 /usr/include
End of search list.
The following default directories have been omitted from the search path:
 /opt/egcs-19990328/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.93.14/../../../../include/g++-2
End of omitted list.
 /opt/egcs-19990328/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.93.14/cc1 crap.i -quiet -dumpbase crap.c -mcpu=supersparc -mtune=ultrasparc -g -O1 -version -fPIC -o crap.s
GNU C version egcs-2.93.14 19990328 (gcc2 ss-980929 experimental) (sparc-sun-solaris2.5.1) compiled by GNU C version egcs-2.93.14 19990328 (gcc2 ss-980929 experimental).
 /usr/ccs/bin/as -V -Qy -s -K PIC -o crap.o crap.s
/usr/ccs/bin/as: WorkShop Compilers 4.2 dev 13 May 1996

crap.i is

# 1 "crap.c"
extern double cos(double);
extern double sin(double);
extern double atan(double);

static  long   ___lp;  

typedef int jmp_buf[12 ];

typedef struct ___jmpbuf_struct
  {
    jmp_buf buf;
  } ___jmpbuf_struct;


typedef struct ___processor_state_struct
{
    long *stack,
        *stack_base,
        *stack_limit,
        *stack_trip,
        *stack_break,
        *fp;
    long *heap,
        *heap_limit,
        *hp;
    long r[20],
         pc,
         temp1,
         temp2,
         temp3,
         temp4;
    int na,
        np;
    int intr_enabled,
        intr_flag[3];
    long glo_list_head,
         glo_list_tail;
    long handler_break,
         handler_stack_limit,
         handler_heap_limit, handler_not_proc,
         handler_not_proc_glo, handler_wrong_nargs,
         handler_get_rest, handler_get_key,
         handler_get_key_rest, handler_force,
         handler_clam_conv_error, handler_cdef_conv_error,
         handler_return_to_c, initial_continuation;
    long executable_wills,
         non_executable_wills;
    ___jmpbuf_struct *catcher;
}                         ___processor_state_struct, *___processor_state;

static long ___H_makect(___processor_state ___ps)
{
    register long ___pc,
         ___temp;
    register unsigned long long ___temp64;
    register long ___start = ___lp + ((28) * 4 * (1 << 2));
    register long *___hp;
    register long *___fp;
    register long ___r0;
    register long ___r1;
    register long ___r2;
    register long ___r3;
    register long ___r4;
    register long ___r5;
    register long ___r7;
    double ___F64R1;
    double ___F64R4;
    double ___F64R5;
    double ___F64R6;
    double ___F64R7;
    ___hp = ___ps->hp;
    ___fp = ___ps->fp;
    ___r0 = ___ps->r[0];
    ___r1 = ___ps->r[1];
    ___r2 = ___ps->r[2];
    ___r3 = ___ps->r[3];
    ___r4 = ___ps->r[4];
    ___r5 = ___ps->r[5];
    ___r7 = ___ps->r[7];
    ___pc = ___ps->pc;
___jump:switch ((___pc -= ___start) / (4 * (1 << 2)))
    {
      case 28 - 28 + 0:
___L0_makect:
	if (___ps->na == 3)
	{
	}
	else
	{
	    ___ps->temp1 = ___start + ((28 - 28 + 0) * 4 * (1 << 2));
	    {
		___pc = ___ps->handler_wrong_nargs;
		goto ___jumpext;
	    }
	}
___L_makect:
	*(long *) (((long) (((long *) (___r2 - 1)) + 1)) + ((((long) (1L) << 2)) << (2 - 2))) = ___r1;
	if (!(___r1 > ((long) (1L) << 2)))
	{
	    goto ___L3_makect;
	}
	___r2 = (((___r1 >> (((long) (1L) << 2) >> 2)) & ~((1 << 2) - 1)));
	___F64R4 = (___r2 >> 2);
	___F64R5 = atan(1.);
	___F64R4 = (___F64R5 / ___F64R4);
	___F64R5 = (___r2 >> 2);
	___F64R5 = (___F64R4 * ___F64R5);
	___F64R5 = cos(___F64R5);
	*(double *) (((long) (((long *) (___r3 - 1)) + 1)) + ((((long) (0L) << 2)) << (3 - 2))) = ___F64R5;
	___F64R5 = *(double *) (((long) (((long *) (___r3 - 1)) + 1)) + ((((long) (0L) << 2)) << (3 - 2)));
	___F64R5 = (.5 * ___F64R5);
	*(double *) (((long) (((long *) (___r3 - 1)) + 1)) + ((___r2) << (3 - 2))) = ___F64R5;
	___r4 = ((___hp += 2 + 2, ((long) ___hp & 7) == 0 ? (*(___hp - 2 - 1) = (((2 << 2) << (3 + 5)) + (30 << 3) + 0), *(double *) ((___hp - 2 - 1) + 1) = ___F64R4, ((long) (___hp - 2 - 1) + 1)) : (*(___hp - 2 - 2) = (((2 << 2) << (3 + 5)) + (30 << 3) + 0), *(double *) ((___hp - 2 - 2) + 1) = ___F64R4, ((long) (___hp - 2 - 2) + 1))));
	___fp[-(1)] = (___r4);
	___r4 = (___r3);
	___r3 = (___r2);
	___r2 = (___r1);
	___r1 = (___fp[-(1)]);
	___r5 = (((long) (1L) << 2));
	if (___hp > ___ps->heap_limit)
	{
	    ___ps->temp1 = ___start + ((28 - 28 + 1) * 4 * (1 << 2));
	    {
		___pc = ___ps->handler_heap_limit;
		goto ___jumpext;
	    }
	}
      case 28 - 28 + 1:
___L1_makect:
	if ((___r5 == ___r3))
	{
	    goto ___L3_makect;
	}
___L2_makect:
	___F64R6 = (___r5 >> 2);
	___F64R1 = (*(double *) ((((long *) (___r1 - 1)) + 1)));
	___F64R6 = (___F64R1 * ___F64R6);
	___F64R7 = cos(___F64R6);
	___F64R7 = (.5 * ___F64R7);
	*(double *) (((long) (((long *) (___r4 - 1)) + 1)) + ((___r5) << (3 - 2))) = ___F64R7;
	___r7 = (((long) (___r2 - ___r5)));
	___F64R6 = sin(___F64R6);
	___F64R6 = (.5 * ___F64R6);
	*(double *) (((long) (((long *) (___r4 - 1)) + 1)) + ((___r7) << (3 - 2))) = ___F64R6;
	___r5 = (((long) (___r5 + ((long) (1L) << 2))));
	if (!(___r5 == ___r3))
	{
	    goto ___L2_makect;
	}
___L3_makect:
	___r1 = ((((long) -5 << 2) + 2));
	{
	    ___pc = ___r0;
	    goto ___jump;
	}
    } ___pc += ___start;
___jumpext:
    ___ps->pc = ___pc;
    ___ps->hp = ___hp;
    ___ps->r[1] = ___r1;
    ___ps->r[2] = ___r2;
    ___ps->r[3] = ___r3;
    ___ps->r[4] = ___r4;
    ___ps->r[5] = ___r5;
    ___ps->r[7] = ___r7;
    return ___pc;
}

and crap.s is

	.file	"crap.c"
.stabs "/home/c/lucier/programs/gambc30/bigtests/16-64/",100,0,0,.LLtext0
.stabs "crap.c",100,0,0,.LLtext0
.section	".text"
.LLtext0:
	.stabs	"gcc2_compiled.", 0x3c, 0, 0, 0
.stabs "int:t(0,1)=r(0,1);0020000000000;0017777777777;",128,0,0,0
.stabs "char:t(0,2)=r(0,2);0;127;",128,0,0,0
.stabs "long int:t(0,3)=r(0,1);0020000000000;0017777777777;",128,0,0,0
.stabs "unsigned int:t(0,4)=r(0,1);0000000000000;0037777777777;",128,0,0,0
.stabs "long unsigned int:t(0,5)=r(0,1);0000000000000;0037777777777;",128,0,0,0
.stabs "long long int:t(0,6)=r(0,1);01000000000000000000000;0777777777777777777777;",128,0,0,0
.stabs "long long unsigned int:t(0,7)=r(0,1);0000000000000;01777777777777777777777;",128,0,0,0
.stabs "short int:t(0,8)=r(0,8);-32768;32767;",128,0,0,0
.stabs "short unsigned int:t(0,9)=r(0,9);0;65535;",128,0,0,0
.stabs "signed char:t(0,10)=r(0,10);-128;127;",128,0,0,0
.stabs "unsigned char:t(0,11)=r(0,11);0;255;",128,0,0,0
.stabs "float:t(0,12)=r(0,1);4;0;",128,0,0,0
.stabs "double:t(0,13)=r(0,1);8;0;",128,0,0,0
.stabs "long double:t(0,14)=r(0,1);16;0;",128,0,0,0
.stabs "complex int:t(0,15)=s8real:(0,1),0,32;imag:(0,1),32,32;;",128,0,0,0
.stabs "complex float:t(0,16)=r(0,16);4;0;",128,0,0,0
.stabs "complex double:t(0,17)=r(0,17);8;0;",128,0,0,0
.stabs "complex long double:t(0,18)=r(0,18);16;0;",128,0,0,0
.stabs "void:t(0,19)=(0,19)",128,0,0,0
.stabs "jmp_buf:t(0,20)=(0,21)=ar(0,1);0;11;(0,1)",128,0,7,0
.stabs "___jmpbuf_struct:T(0,22)=s48buf:(0,20),0,384;;",128,0,0,0
.stabs "___jmpbuf_struct:t(0,23)=(0,22)",128,0,12,0
.stabs "___processor_state_struct:T(0,24)=s236stack:(0,25)=*(0,3),0,32;stack_base:(0,25),32,32;stack_limit:(0,25),64,32;stack_trip:(0,25),96,32;stack_break:(0,25),128,32;fp:(0,25),160,32;heap:(0,25),192,32;heap_limit:(0,25),224,32;hp:(0,25),256,32;r:(0,26)=ar(0,1);0;19;(0,3),288,640;pc:(0,3),928,32;temp1:(0,3),960,32;temp2:(0,3),992,32;temp3:(0,3),1024,32;temp4:(0,3),1056,32;na:(0,1),1088,32;np:(0,1),1120,32;intr_enabled:(0,1),1152,32;intr_flag:(0,27)=ar(0,1);0;2;(0,1),1184,96;glo_list_head:(0,3),1280,32;glo_list_tail:(0,3),1312,32;handler_break:(0,3),1344,32;handler_stack_limit:(0,3),1376,32;\\",128,0,0,0
.stabs "handler_heap_limit:(0,3),1408,32;handler_not_proc:(0,3),1440,32;handler_not_proc_glo:(0,3),1472,32;handler_wrong_nargs:(0,3),1504,32;handler_get_rest:(0,3),1536,32;handler_get_key:(0,3),1568,32;handler_get_key_rest:(0,3),1600,32;handler_force:(0,3),1632,32;handler_clam_conv_error:(0,3),1664,32;handler_cdef_conv_error:(0,3),1696,32;handler_return_to_c:(0,3),1728,32;initial_continuation:(0,3),1760,32;executable_wills:(0,3),1792,32;non_executable_wills:(0,3),1824,32;catcher:(0,28)=*(0,23),1856,32;;",128,0,0,0
.stabs "___processor_state_struct:t(0,29)=(0,24)",128,0,49,0
.stabs "___processor_state:t(0,30)=(0,31)=*(0,24)",128,0,49,0
	.align 32
.LLGETPC0:
	retl
	add %o7,%l7,%l7
.section	".rodata"
	.align 8
.LLC0:
	.uaword	0x3ff00000 ! ~1.00000000000000000000e0
	.uaword	0x0
	.align 8
.LLC1:
	.uaword	0x3fe00000 ! ~5.00000000000000000000e-1
	.uaword	0x0
.section	".text"
	.align 32
.stabs "___H_makect:f(0,3)",36,0,52,___H_makect
.stabs "___ps:P(0,30)",64,0,51,17
	.type	 ___H_makect,#function
	.proc	04
___H_makect:
.stabn 68,0,52,.LM1-___H_makect
.LM1:
	!#PROLOGUE# 0
	save	%sp, -136, %sp
	sethi	%hi(_GLOBAL_OFFSET_TABLE_-4), %l7
	call	.LLGETPC0
	add	%l7, %lo(_GLOBAL_OFFSET_TABLE_+4), %l7
	mov	%i0, %l1
.stabn 68,0,53,.LM2-___H_makect
.LM2:
.LLBB2:
.stabn 68,0,56,.LM3-___H_makect
.LM3:
	sethi	%hi(___lp), %o0
	or	%o0, %lo(___lp), %o0
	ld	[%l7+%o0], %o0
	ld	[%o0], %o0
	add	%o0, 448, %i1
.stabn 68,0,71,.LM4-___H_makect
.LM4:
	ld	[%l1+32], %l2
.stabn 68,0,72,.LM5-___H_makect
.LM5:
	ld	[%l1+20], %i3
.stabn 68,0,73,.LM6-___H_makect
.LM6:
	ld	[%l1+36], %i4
.stabn 68,0,74,.LM7-___H_makect
.LM7:
	ld	[%l1+40], %l5
.stabn 68,0,75,.LM8-___H_makect
.LM8:
	ld	[%l1+44], %l4
.stabn 68,0,76,.LM9-___H_makect
.LM9:
	ld	[%l1+48], %l6
.stabn 68,0,77,.LM10-___H_makect
.LM10:
	ld	[%l1+52], %l3
.stabn 68,0,78,.LM11-___H_makect
.LM11:
	ld	[%l1+56], %l0
.stabn 68,0,79,.LM12-___H_makect
.LM12:
	ld	[%l1+64], %i2
.stabn 68,0,80,.LM13-___H_makect
.LM13:
	ld	[%l1+116], %i0
.LL3:
.stabn 68,0,81,.LM14-___H_makect
.LM14:
	sub	%i0, %i1, %i0
	cmp	%i0, 0
	bge	.LL23
	mov	%i0, %o0
	add	%i0, 15, %o0
.LL23:
	sra	%o0, 4, %o0
	cmp	%o0, 0
	be	.LL6
	cmp	%o0, 1
	be	.LL24
	add	%i0, %i1, %i0
	b	.LL25
	st	%i0, [%l1+116]
.LL6:
.stabn 68,0,85,.LM15-___H_makect
.LM15:
	ld	[%l1+136], %o0
	cmp	%o0, 3
	be	.LL10
	cmp	%l5, 4
.stabn 68,0,90,.LM16-___H_makect
.LM16:
	st	%i1, [%l1+120]
.stabn 68,0,93,.LM17-___H_makect
.LM17:
	b	.LL9
	ld	[%l1+188], %i0
.LL10:
.stabn 68,0,98,.LM18-___H_makect
.LM18:
	ble	.LL12
	st	%l5, [%l4+7]
.stabn 68,0,102,.LM19-___H_makect
.LM19:
	sra	%l5, 1, %l4
	and	%l4, -4, %l4
.stabn 68,0,103,.LM20-___H_makect
.LM20:
	sra	%l4, 2, %o0
	st	%o0, [%fp-36]
	ld	[%fp-36], %f3
	fitod	%f3, %f2
	std	%f2, [%fp-24]
.stabn 68,0,104,.LM21-___H_makect
.LM21:
	sethi	%hi(.LLC0), %o0
	or	%o0, %lo(.LLC0), %o0
	ld	[%l7+%o0], %o0
	call	atan, 0
	ldd	[%o0], %o0
.stabn 68,0,105,.LM22-___H_makect
.LM22:
	ldd	[%fp-24], %f4
	fdivd	%f0, %f4, %f4
	std	%f4, [%fp-24]
.stabn 68,0,106,.LM23-___H_makect
.LM23:
	ld	[%fp-36], %f5
	fitod	%f5, %f0
.stabn 68,0,108,.LM24-___H_makect
.LM24:
	ldd	[%fp-24], %f2
	fmuld	%f0, %f2, %f2
	std	%f2, [%fp-16]
	call	cos, 0
	ldd	[%fp-16], %o0
.stabn 68,0,109,.LM25-___H_makect
.LM25:
	st	%f0, [%l6+3]
	st	%f1, [%l6+7]
.stabn 68,0,111,.LM26-___H_makect
.LM26:
	sethi	%hi(.LLC1), %o0
	or	%o0, %lo(.LLC1), %o0
	ld	[%l7+%o0], %o0
	ldd	[%o0], %f2
	fmuld	%f0, %f2, %f0
.stabn 68,0,112,.LM27-___H_makect
.LM27:
	sll	%l4, 1, %o0
	add	%o0, %l6, %o0
	st	%f0, [%o0+3]
.stabn 68,0,113,.LM28-___H_makect
.LM28:
	add	%l2, 16, %l2
	andcc	%l2, 7, %g0
	bne	.LL13
	st	%f1, [%o0+7]
	mov	2288, %o0
	st	%o0, [%l2-12]
	ldd	[%fp-24], %o0
	std	%o0, [%l2-8]
	b	.LL14
	add	%l2, -11, %l3
.LL13:
	mov	2288, %o0
	st	%o0, [%l2-16]
	ldd	[%fp-24], %o2
	st	%o2, [%l2-12]
	st	%o3, [%l2-8]
	add	%l2, -15, %l3
.LL14:
.stabn 68,0,114,.LM29-___H_makect
.LM29:
	st	%l3, [%i3-4]
.stabn 68,0,115,.LM30-___H_makect
.LM30:
	mov	%l6, %l3
.stabn 68,0,116,.LM31-___H_makect
.LM31:
	mov	%l4, %l6
.stabn 68,0,117,.LM32-___H_makect
.LM32:
	mov	%l5, %l4
.stabn 68,0,118,.LM33-___H_makect
.LM33:
	ld	[%i3-4], %l5
.stabn 68,0,120,.LM34-___H_makect
.LM34:
	ld	[%l1+28], %o0
	cmp	%l2, %o0
	bleu	.LL24
	mov	4, %l0
.stabn 68,0,122,.LM35-___H_makect
.LM35:
	add	%i1, 16, %o0
	st	%o0, [%l1+120]
.stabn 68,0,125,.LM36-___H_makect
.LM36:
	b	.LL9
	ld	[%l1+176], %i0
.LL19:
.stabn 68,0,135,.LM37-___H_makect
.LM37:
	st	%o0, [%fp-16]
	ld	[%fp-16], %f3
	fitod	%f3, %f2
	std	%f2, [%fp-32]
.stabn 68,0,136,.LM38-___H_makect
.LM38:
	ld	[%l5+3], %f2
	ld	[%l5+7], %f3
.stabn 68,0,137,.LM39-___H_makect
.LM39:
	ldd	[%fp-32], %f4
	fmuld	%f4, %f2, %f4
	std	%f4, [%fp-32]
.stabn 68,0,138,.LM40-___H_makect
.LM40:
	call	cos, 0
	ldd	[%fp-32], %o0
.stabn 68,0,139,.LM41-___H_makect
.LM41:
	sethi	%hi(.LLC1), %o0
	ldd	[%o0+%lo(.LLC1)], %f2
	fmuld	%f0, %f2, %f0
.stabn 68,0,140,.LM42-___H_makect
.LM42:
	sll	%l0, 1, %o0
	add	%o0, %l3, %o0
	st	%f0, [%o0+3]
	st	%f1, [%o0+7]
.stabn 68,0,141,.LM43-___H_makect
.LM43:
	sub	%l4, %l0, %i2
.stabn 68,0,142,.LM44-___H_makect
.LM44:
	call	sin, 0
	ldd	[%fp-32], %o0
.stabn 68,0,143,.LM45-___H_makect
.LM45:
	sethi	%hi(.LLC1), %o0
	ldd	[%o0+%lo(.LLC1)], %f2
	fmuld	%f0, %f2, %f0
	std	%f0, [%fp-32]
.stabn 68,0,144,.LM46-___H_makect
.LM46:
	sll	%i2, 1, %o0
	add	%o0, %l3, %o0
	ldd	[%fp-32], %o2
	st	%o2, [%o0+3]
	st	%o3, [%o0+7]
.stabn 68,0,145,.LM47-___H_makect
.LM47:
	add	%l0, 4, %l0
.stabn 68,0,146,.LM48-___H_makect
.LM48:
.LL24:
	cmp	%l0, %l6
	bne	.LL19
	sra	%l0, 2, %o0
.LL12:
.stabn 68,0,151,.LM49-___H_makect
.LM49:
	mov	-18, %l5
.stabn 68,0,154,.LM50-___H_makect
.LM50:
	b	.LL3
	mov	%i4, %i0
.LL9:
.stabn 68,0,158,.LM51-___H_makect
.LM51:
	st	%i0, [%l1+116]
.stabn 68,0,159,.LM52-___H_makect
.LM52:
.LL25:
	st	%l2, [%l1+32]
.stabn 68,0,160,.LM53-___H_makect
.LM53:
	st	%l5, [%l1+40]
.stabn 68,0,161,.LM54-___H_makect
.LM54:
	st	%l4, [%l1+44]
.stabn 68,0,162,.LM55-___H_makect
.LM55:
	st	%l6, [%l1+48]
.stabn 68,0,163,.LM56-___H_makect
.LM56:
	st	%l3, [%l1+52]
.stabn 68,0,164,.LM57-___H_makect
.LM57:
	st	%l0, [%l1+56]
.stabn 68,0,165,.LM58-___H_makect
.LM58:
	st	%i2, [%l1+64]
.stabn 68,0,166,.LM59-___H_makect
.LM59:
.stabn 68,0,167,.LM60-___H_makect
.LM60:
.LLBE2:
	ret
	restore
.LLfe1:
	.size	 ___H_makect,.LLfe1-___H_makect
.stabs "___pc:r(0,3)",64,0,53,24
.stabs "___start:r(0,3)",64,0,56,25
.stabs "___hp:r(0,25)",64,0,57,18
.stabs "___fp:r(0,25)",64,0,58,27
.stabs "___r0:r(0,3)",64,0,59,28
.stabs "___r1:r(0,3)",64,0,60,21
.stabs "___r2:r(0,3)",64,0,61,20
.stabs "___r3:r(0,3)",64,0,62,22
.stabs "___r4:r(0,3)",64,0,63,19
.stabs "___r5:r(0,3)",64,0,64,16
.stabs "___r7:r(0,3)",64,0,65,26
.stabs "___F64R1:r(0,13)",64,0,66,34
.stabs "___F64R4:(0,13)",128,0,67,-24
.stabs "___F64R5:r(0,13)",64,0,68,32
.stabs "___F64R6:(0,13)",128,0,69,-32
.stabs "___F64R7:r(0,13)",64,0,70,32
.stabn 192,0,0,.LLBB2-___H_makect
.stabn 224,0,0,.LLBE2-___H_makect
.LLscope0:
.stabs "",36,0,0,.LLscope0-___H_makect
.stabs "___lp:S(0,3)",40,0,5,___lp
	.local	___lp
	.common	___lp,4,4
	.text
	.stabs "",100,0,0,Letext
Letext:
	.ident	"GCC: (GNU) egcs-2.93.14 19990328 (gcc2 ss-980929 experimental)"

The previous analysis applies; search for

.LM45:

.LM41:

after which the floating point constant 0.5 is loaded incorrectly.

Brad Lucier    lucier@math.purdue.edu



More information about the Gcc-bugs mailing list