.data .align 2 _sccsid: .data 2 L12: .ascii "@(#)process.s 1.1 (cmd@ukc) 15/9/85" .data .long L12 .comm _pixel,1024 .comm _gap,4096 .text LL0: .align 1 .globl _process .text .data 1 L55: .ascii "%3d %3d %4d %8.0f\0" .text .data 1 L61: .ascii "pixel file write error\0" .text .set L30,0xe00 .data .text _process: .word L30 /* * main process function - this has been optimised. variables are * allocated as follows: * * r11 count changed to * r10 j * r9 i * r8 z_real * r7 z_imag * r6 z2_real * r5 z2_imag r1 * r4 c_real -12(fp) * r3 c_imag -16(fp) * r2 float_pixels -20(fp) * -4(fp) total */ subl2 $20,sp /* room for total */ clrf -4(fp) /* total = 0.0 */ cvtlf _npixel,-20(fp) /* float_pixels = npixel */ clrl r10 /* for (j = 0; j < npixel; j++) */ jbr L37 L2000001: cvtdf _side,r0 /* r0 = (float) side */ cvtlf r10,r1 /* r1 = (float) j */ mulf2 r1,r0 /* side * j */ divf2 -20(fp),r0 /* ... / float_pixels */ cvtfd r0,r0 addd3 _start_real,r0,_gap[r10] /* gap[j] = start_real + ... */ incl r10 L37: cmpl r10,_npixel jlss L2000001 movl $1,r9 /* for (i = 1; i <= npixel; i++) */ jbr L40 L2000007: cvtlf r9,r0 /* (float) i */ cvtdf _side,r1 /* (float) side */ mulf2 r1,r0 /* side * i */ divf2 -20(fp),r0 /* ... / float_pixels */ cvtfd r0,r0 subd3 r0,_start_imag,r0 cvtdf r0,-16(fp) /* put c_imag in r3 */ clrl r10 /* for (j = 0; ... */ jbr L43 L2000005: cvtdf _gap[r10],r8 movf r8,-12(fp) /* c_real in r4 */ movf -16(fp),r7 /* z_imag in r7 */ clrl r11 /* for (count = 0; ... */ jbr L46 L2000003: /* * this next bit has been heavily optimised. */ mulf3 r8,r8,r6 /* z2_real = z_real * z_real */ mulf3 r7,r7,r1 /* z2_imag = z_imag * z_imag */ addf3 r6,r1,r0 /* z2_real + z2_imag */ cmpf r0,$0f4.0 /* ... > 4.0 */ jgtr L45 /* break */ mulf3 r7,r8,r0 /* z_real * z_imag */ mulf2 $0f2.0,r0 /* ... * 2.0 */ addf3 r0,-16(fp),r7 /* z_imag = ... + c_imag */ subf3 r1,r6,r0 /* z2_real - z2_imag */ addf3 r0,-12(fp),r8 /* z_real = ... + c_real */ incl r11 L46: cmpl r11,_niter jlss L2000003 L45: cvtlw r11,_pixel[r10] /* pixel[j] = count */ incl _hist[r11] /* hist[count] += 1 */ cvtlf r11,r0 /* total += (float) count */ addf2 r0,-4(fp) incl r10 L43: cmpl r10,_npixel /* end of loop with j */ jlss L2000005 pushl _pixfd /* fwrite(pixel, ... */ pushl $1 ashl $1,_npixel,-(sp) pushal _pixel calls $4,_fwrite movl _pixfd,r0 /* if (ferror(pixfd)) */ jbc $5,16(r0),L38 pushal L61 calls $1,_perror /* perror() */ ret /* return */ L38: incl r9 L40: cmpl r9,_npixel jleq L2000007 /* outermost loop */ ret