.section ".text",#alloc,#execinstr .align 8 .skip 16 ! block 0 .global main .type main,2 main: save %sp,-112,%sp sethi %hi(.L_tcovStruct),%l1 or %l1,%lo(.L_tcovStruct),%l1 ld [%l1+0],%l0 cmp %l0,0 bne .L_y0 nop ! block 5 mov %l1,%o0 call __bb_init_func nop ! block 1 .L_y0: .L2: st %i0,[%fp-4] st %i1,[%fp-8] st %i2,[%fp-12] ! block 2 .L3: add %fp,-4,%o0 add %fp,-8,%o1 call f90_init add %fp,-12,%o2 ld [%fp-4],%o0 ld [%fp-8],%o1 call __f90_init ld [%fp-12],%o2 call MAIN_ nop st %g0,[%fp-16] ! block 3 .L1: mov %g0,%i0 jmp %i7+8 restore ! block 4 .L4: jmp %i7+8 restore .size main,(.-main) .align 8 .align 8 .skip 16 ! block 0 .global MAIN_ .type MAIN_,2 MAIN_: save %sp,-408,%sp sethi %hi(.L_tcovStruct),%l1 or %l1,%lo(.L_tcovStruct),%l1 ld [%l1+0],%l0 cmp %l0,0 bne .L_y1 nop ! block 40 mov %l1,%o0 call __bb_init_func nop ! block 1 .L_y1: .L114: .L115: ! File f_diffusion.f: ! 1 program f_diffusion ! 2 parameter (ndim =2048, sideleft = 10.0, sideright = 40.0, ! 3 * sidetop = 20.0, sidebottom = 20.0) ! 4 c ! 5 c the compile option needed to bring in the LINPACK library are: ! 6 c f90 -o f_diffusion f_diffusion.f -xlic_lib=sunperf ! 7 c if you add additional options at the compile line, be sure ! 8 c that the -xlic_lib option is the final one ! 9 c ! 10 c or ! 11 c f90 -o f_diffusion f_diffusion.f sgeco.o sgesl.o blas.o ! 12 c ! 13 c ! 14 c set up a linear system A X = b with a maximum dimension on A ! 15 c given by the parameter ndim. The vector B is called the Right ! 16 c Hand Side (RHS, for short), the vector X is called the solution. ! 17 c ! 18 c Fortran is NOT case sensitive, so the Capital Letters are used ! 19 c only for emphasis ! 20 c ! 21 ! 22 real A(ndim,ndim) ! 23 c ! 24 c X stores the computed solution; this storage also holds B initially ! 25 real X(ndim) ! 26 c ! 27 c work is the required floating point workspace ! 28 real work(ndim) ! 29 c ! 30 c ipvt is the required integer workspace ! 31 integer ipvt(ndim), row, col ! 32 c -------------------------------------------------------------------- ! 33 c Two dimensional heat diffusion problem ! 34 c -------------------------------------------------------------------- ! 35 c2345678901234567890 ! 36 99999 continue sethi %hi(.L_tcovCounters),%l2 ldd [%l2+%lo(.L_tcovCounters)],%l0 addcc %l1,1,%l1 addx %l0,%g0,%l0 std %l0,[%l2+%lo(.L_tcovCounters)] .L112: ! 37 print*,'enter number of rows, K ' mov 8,%l0 st %l0,[%fp-32] sethi %hi(.SRC_LOC_1),%l0 or %l0,%lo(.SRC_LOC_1),%l0 st %l0,[%fp-28] add %fp,-32,%l4 call __f90_sslw mov %l4,%o0 sethi %hi(.STRING_0),%o1 or %o1,%lo(.STRING_0),%o1 mov 24,%o2 call __f90_slw_ch mov %l4,%o0 call __f90_eslw mov %l4,%o0 ! 38 print*,' suggested values are : 10, 20, 40 ...' mov 8,%l0 st %l0,[%fp-32] sethi %hi(.SRC_LOC_2),%l0 or %l0,%lo(.SRC_LOC_2),%l0 st %l0,[%fp-28] call __f90_sslw mov %l4,%o0 sethi %hi(.STRING_1),%l1 or %l1,%lo(.STRING_1),%l1 mov 39,%o2 mov %l4,%o0 call __f90_slw_ch mov %l1,%o1 call __f90_eslw mov %l4,%o0 ! 39 read*,K mov 8,%l0 st %l0,[%fp-56] sethi %hi(.SRC_LOC_3),%l0 or %l0,%lo(.SRC_LOC_3),%l0 st %l0,[%fp-52] add %fp,-64,%l2 call __f90_sslr mov %l2,%o0 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.k),%l3 or %l3,%lo(.XBkNwvCr2cr9iDU.MAIN.k),%l3 mov %l2,%o0 call __f90_slr_i4 mov %l3,%o1 st %o0,[%fp-68] call __f90_eslr mov %l2,%o0 ! 40 print*,'enter number of columns, M' mov 8,%l0 st %l0,[%fp-32] sethi %hi(.SRC_LOC_4),%l0 or %l0,%lo(.SRC_LOC_4),%l0 st %l0,[%fp-28] call __f90_sslw mov %l4,%o0 sethi %hi(.STRING_2),%o1 or %o1,%lo(.STRING_2),%o1 mov 26,%o2 call __f90_slw_ch mov %l4,%o0 call __f90_eslw mov %l4,%o0 ! 41 print*,' suggested values are : 10, 20, 40 ...' mov 8,%l0 st %l0,[%fp-32] sethi %hi(.SRC_LOC_5),%l0 or %l0,%lo(.SRC_LOC_5),%l0 st %l0,[%fp-28] call __f90_sslw mov %l4,%o0 mov 39,%o2 mov %l4,%o0 call __f90_slw_ch mov %l1,%o1 call __f90_eslw mov %l4,%o0 ! 42 read*,M mov 8,%l0 st %l0,[%fp-56] sethi %hi(.SRC_LOC_6),%l0 or %l0,%lo(.SRC_LOC_6),%l0 st %l0,[%fp-52] call __f90_sslr mov %l2,%o0 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.m),%l0 or %l0,%lo(.XBkNwvCr2cr9iDU.MAIN.m),%l0 mov %l2,%o0 call __f90_slr_i4 mov %l0,%o1 st %o0,[%fp-72] call __f90_eslr mov %l2,%o0 ! 43 N = K * M ld [%l3+0],%l2 ld [%l0+0],%l1 smul %l2,%l1,%l1 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.n),%l0 st %l1,[%l0+%lo(.XBkNwvCr2cr9iDU.MAIN.n)] ! 44 if (N .gt. ndim) then cmp %l1,2048 ble .L116 nop ! block 2 .L117: ! 45 print*, sethi %hi(.L_tcovCounters+8),%l2 ldd [%l2+%lo(.L_tcovCounters+8)],%l0 addcc %l1,1,%l1 addx %l0,%g0,%l0 std %l0,[%l2+%lo(.L_tcovCounters+8)] mov 8,%l0 st %l0,[%fp-32] sethi %hi(.SRC_LOC_7),%l0 or %l0,%lo(.SRC_LOC_7),%l0 st %l0,[%fp-28] call __f90_sslw mov %l4,%o0 sethi %hi(.STRING_3),%o1 or %o1,%lo(.STRING_3),%o1 mov 44,%o2 call __f90_slw_ch mov %l4,%o0 mov 2048,%o1 call __f90_slw_i4 mov %l4,%o0 call __f90_eslw mov %l4,%o0 ! 46 * ' enter values of K and M so their product < ',ndim ! 47 go to 99999 ba .L112 nop ! block 3 .L116: ! 48 endif ! 49 ! 50 c ! 51 c ------------------------------------- ! 52 c initialize entire matrix to zero using array sections ! 53 c ! 54 A(1:N,1:N) = 0.0 sethi %hi(.L_tcovCounters+16),%l2 ldd [%l2+%lo(.L_tcovCounters+16)],%l0 addcc %l1,1,%l1 addx %l0,%g0,%l0 std %l0,[%l2+%lo(.L_tcovCounters+16)] .L91: sethi %hi(.XBkNwvCr2cr9iDU.MAIN.a),%i5 or %i5,%lo(.XBkNwvCr2cr9iDU.MAIN.a),%i5 st %i5,[%fp-104] mov 2048,%l1 st %l1,[%fp-100] mov 1,%l3 st %l3,[%fp-80] st %g0,[%fp-84] mov 2048,%l0 st %l0,[%fp-96] mov 1,%l2 st %l2,[%fp-76] st %g0,[%fp-84] mov 4,%l5 st %l5,[%fp-92] sll %l1,2,%l0 st %l0,[%fp-88] smul %l0,%l2,%l1 sub %i5,%l1,%l0 smul %l5,%l3,%l1 sub %l0,%l1,%l0 st %l0,[%fp-84] st %i5,[%fp-136] mov 1,%l0 st %l0,[%fp-112] st %g0,[%fp-116] add %fp,-136,%l2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.n),%l1 ld [%l1+%lo(.XBkNwvCr2cr9iDU.MAIN.n)],%l0 sub %l0,1,%l0 add %l0,1,%l0 or %l0,0,%o1 mov 4,%o2 mov 2,%o3 mov 1,%o4 call __f90_dvset_extent mov %l2,%o0 ld [%fp-92],%l0 st %l0,[%fp-124] mov 1,%l0 st %l0,[%fp-108] st %g0,[%fp-116] ld [%l1+%lo(.XBkNwvCr2cr9iDU.MAIN.n)],%l0 sub %l0,1,%l0 add %l0,1,%l0 or %l0,0,%o1 mov 4,%o2 mov 2,%o3 mov 2,%o4 call __f90_dvset_extent mov %l2,%o0 ld [%fp-88],%l0 st %l0,[%fp-120] st %i5,[%fp-136] ld [%fp-108],%l1 smul %l0,%l1,%l1 sub %i5,%l1,%l2 ld [%fp-124],%l0 ld [%fp-112],%l1 smul %l0,%l1,%l1 sub %l2,%l1,%l0 st %l0,[%fp-116] sethi %hi(.L_cseg0),%l0 ld [%l0+%lo(.L_cseg0)],%f2 st %f2,[%fp-140] add %fp,-140,%l0 st %l0,[%fp-144] st %i5,[%fp-156] ld [%fp-128],%l0 cmp %l0,0 ble .L119 st %l0,[%fp-164] ! block 4 .L120: .L118: st %i5,[%fp-148] ld [%fp-132],%l0 cmp %l0,0 ble .L122 st %l0,[%fp-160] ! block 5 .L123: .L121: ld [%fp-144],%l0 ld [%l0+0],%f2 ld [%fp-148],%l0 st %f2,[%l0+0] ld [%fp-124],%l1 add %l0,%l1,%l0 st %l0,[%fp-148] ld [%fp-160],%l0 sub %l0,1,%l0 cmp %l0,0 bg .L121 st %l0,[%fp-160] ! block 6 .L124: .L122: ld [%fp-120],%l1 add %i5,%l1,%i5 ld [%fp-164],%l0 sub %l0,1,%l0 cmp %l0,0 bg .L118 st %l0,[%fp-164] ! block 7 .L125: .L119: ! 55 c ! 56 c set up the N by N block-structured matrix matrix ! 57 c we store in a full matrix for experimentation using the Linpack ! 58 c software SGECO, SGESL instead of the more efficient storage as ! 59 c just the nono-zero entries (whose notation is slightly complicated) ! 60 c ! 61 c for row=1, we have a very special "boundary case" ! 62 c234567890 ! 63 index = 1 sethi %hi(.L_tcovCounters+24),%l2 ldd [%l2+%lo(.L_tcovCounters+24)],%l0 addcc %l1,1,%l1 addx %l0,%g0,%l0 std %l0,[%l2+%lo(.L_tcovCounters+24)] mov 1,%l1 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.index),%l5 st %l1,[%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.index)] ! 64 A(index,index) = 4.0 sethi %hi(.L_cseg1),%l0 ld [%l0+%lo(.L_cseg1)],%f2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.a),%l6 or %l6,%lo(.XBkNwvCr2cr9iDU.MAIN.a),%l6 sll %l1,2,%l0 sll %l1,13,%l1 add %l0,%l1,%l1 add %l6,%l1,%l0 sethi 8,%l7 xor %l7,-4,%l7 st %f2,[%l0+%l7] ! 65 A(index,index+1) = -1.0 sethi %hi(.L_cseg2),%l3 ld [%l3+%lo(.L_cseg2)],%f2 ld [%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.index)],%l1 add %l1,1,%l0 sll %l0,11,%l0 add %l0,%l1,%l0 sll %l0,2,%l1 add %l6,%l1,%l0 st %f2,[%l0+%l7] ! 66 A(index,index+M) = -1.0 ld [%l3+%lo(.L_cseg2)],%f2 ld [%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.index)],%l2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.m),%l3 ld [%l3+%lo(.XBkNwvCr2cr9iDU.MAIN.m)],%l1 add %l2,%l1,%l0 sll %l0,11,%l0 add %l0,%l2,%l0 sll %l0,2,%l1 add %l6,%l1,%l0 st %f2,[%l0+%l7] ! 67 do i=2,M-1 ! block 8 .L92: ld [%l3+%lo(.XBkNwvCr2cr9iDU.MAIN.m)],%l0 sub %l0,1,%l1 st %l1,[%fp-168] mov 2,%l2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.i),%l0 cmp %l2,%l1 bg .L127 st %l2,[%l0+%lo(.XBkNwvCr2cr9iDU.MAIN.i)] ! block 9 .L_y2: sethi 8,%l5 xor %l5,-4,%l5 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.a),%l6 or %l6,%lo(.XBkNwvCr2cr9iDU.MAIN.a),%l6 sethi %hi(.L_cseg1),%l7 or %l7,%lo(.L_cseg1),%l7 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.index),%i0 or %i0,%lo(.XBkNwvCr2cr9iDU.MAIN.index),%i0 sethi %hi(.L_tcovCounters+32),%l4 or %l4,%lo(.L_tcovCounters+32),%l4 .L128: .L126: ! 68 index = index + 1 ldd [%l4+0],%l0 addcc %l1,1,%l3 addx %l0,%g0,%l2 std %l2,[%l4+0] ld [%i0+0],%l0 add %l0,1,%l1 st %l1,[%i0+0] ! 69 A(index,index) = 4.0 ld [%l7+0],%f2 sll %l1,2,%l0 sll %l1,13,%l1 add %l0,%l1,%l1 add %l6,%l1,%l0 st %f2,[%l0+%l5] ! 70 A(index,index-1) = -1.0 sethi %hi(.L_cseg2),%l3 ld [%l3+%lo(.L_cseg2)],%f2 ld [%i0+0],%l1 sub %l1,1,%l0 sll %l0,11,%l0 add %l0,%l1,%l0 sll %l0,2,%l1 add %l6,%l1,%l0 st %f2,[%l0+%l5] ! 71 A(index,index+1) = -1.0 ld [%l3+%lo(.L_cseg2)],%f2 ld [%i0+0],%l1 add %l1,1,%l0 sll %l0,11,%l0 add %l0,%l1,%l0 sll %l0,2,%l1 add %l6,%l1,%l0 st %f2,[%l0+%l5] ! 72 A(index,index+M) = -1.0 ld [%l3+%lo(.L_cseg2)],%f2 ld [%i0+0],%l2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.m),%l0 ld [%l0+%lo(.XBkNwvCr2cr9iDU.MAIN.m)],%l1 add %l2,%l1,%l0 sll %l0,11,%l0 add %l0,%l2,%l0 sll %l0,2,%l1 add %l6,%l1,%l0 st %f2,[%l0+%l5] sethi %hi(.XBkNwvCr2cr9iDU.MAIN.i),%l1 ld [%l1+%lo(.XBkNwvCr2cr9iDU.MAIN.i)],%l0 add %l0,1,%l2 st %l2,[%l1+%lo(.XBkNwvCr2cr9iDU.MAIN.i)] ld [%fp-168],%l0 cmp %l2,%l0 ble .L126 nop ! block 10 .L129: .L127: ! 73 end do ! 74 index = index + 1 sethi %hi(.L_tcovCounters+40),%l2 ldd [%l2+%lo(.L_tcovCounters+40)],%l0 addcc %l1,1,%l1 addx %l0,%g0,%l0 std %l0,[%l2+%lo(.L_tcovCounters+40)] sethi %hi(.XBkNwvCr2cr9iDU.MAIN.index),%l5 ld [%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.index)],%l0 add %l0,1,%l1 st %l1,[%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.index)] ! 75 A(index,index) = 4.0 sethi %hi(.L_cseg1),%l0 ld [%l0+%lo(.L_cseg1)],%f2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.a),%l6 or %l6,%lo(.XBkNwvCr2cr9iDU.MAIN.a),%l6 sll %l1,2,%l0 sll %l1,13,%l1 add %l0,%l1,%l1 add %l6,%l1,%l0 sethi 8,%l7 xor %l7,-4,%l7 st %f2,[%l0+%l7] ! 76 A(index,index-1) = -1.0 sethi %hi(.L_cseg2),%l3 ld [%l3+%lo(.L_cseg2)],%f2 ld [%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.index)],%l1 sub %l1,1,%l0 sll %l0,11,%l0 add %l0,%l1,%l0 sll %l0,2,%l1 add %l6,%l1,%l0 st %f2,[%l0+%l7] ! 77 A(index,index+M) = -1.0 ld [%l3+%lo(.L_cseg2)],%f2 ld [%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.index)],%l2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.m),%l0 ld [%l0+%lo(.XBkNwvCr2cr9iDU.MAIN.m)],%l1 add %l2,%l1,%l0 sll %l0,11,%l0 add %l0,%l2,%l0 sll %l0,2,%l1 add %l6,%l1,%l0 st %f2,[%l0+%l7] ! 78 c ! 79 c for row = 2 ... K-1, we have the standard pattern ! 80 c ! 81 c for col = 2 ... m-1, we have the standard pattern ! 82 c ! 83 do row = 2,k-1 ! block 11 .L93: sethi %hi(.XBkNwvCr2cr9iDU.MAIN.k),%l0 ld [%l0+%lo(.XBkNwvCr2cr9iDU.MAIN.k)],%l0 sub %l0,1,%l1 st %l1,[%fp-172] mov 2,%l2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.row),%l0 cmp %l2,%l1 bg .L131 st %l2,[%l0+%lo(.XBkNwvCr2cr9iDU.MAIN.row)] ! block 12 .L132: .L130: ! 84 index = index+1 sethi %hi(.L_tcovCounters+48),%l2 ldd [%l2+%lo(.L_tcovCounters+48)],%l0 addcc %l1,1,%l1 addx %l0,%g0,%l0 std %l0,[%l2+%lo(.L_tcovCounters+48)] sethi %hi(.XBkNwvCr2cr9iDU.MAIN.index),%l5 ld [%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.index)],%l0 add %l0,1,%l1 st %l1,[%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.index)] ! 85 c first grid point of each row is special ! 86 A(index,index) = 4.0 sethi %hi(.L_cseg1),%l0 ld [%l0+%lo(.L_cseg1)],%f2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.a),%l6 or %l6,%lo(.XBkNwvCr2cr9iDU.MAIN.a),%l6 sll %l1,2,%l0 sll %l1,13,%l1 add %l0,%l1,%l1 add %l6,%l1,%l0 sethi 8,%l7 xor %l7,-4,%l7 st %f2,[%l0+%l7] ! 87 A(index,index+1) = -1.0 sethi %hi(.L_cseg2),%l3 ld [%l3+%lo(.L_cseg2)],%f2 ld [%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.index)],%l1 add %l1,1,%l0 sll %l0,11,%l0 add %l0,%l1,%l0 sll %l0,2,%l1 add %l6,%l1,%l0 st %f2,[%l0+%l7] ! 88 A(index,index-M) = -1.0 ld [%l3+%lo(.L_cseg2)],%f2 ld [%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.index)],%l2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.m),%l4 ld [%l4+%lo(.XBkNwvCr2cr9iDU.MAIN.m)],%l1 sub %l2,%l1,%l0 sll %l0,11,%l0 add %l0,%l2,%l0 sll %l0,2,%l1 add %l6,%l1,%l0 st %f2,[%l0+%l7] ! 89 A(index,index+M) = -1.0 ld [%l3+%lo(.L_cseg2)],%f2 ld [%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.index)],%l2 ld [%l4+%lo(.XBkNwvCr2cr9iDU.MAIN.m)],%l1 add %l2,%l1,%l0 sll %l0,11,%l0 add %l0,%l2,%l0 sll %l0,2,%l1 add %l6,%l1,%l0 st %f2,[%l0+%l7] ! 90 do col = 2,m-1 ! block 13 .L94: ld [%l4+%lo(.XBkNwvCr2cr9iDU.MAIN.m)],%l0 sub %l0,1,%l1 st %l1,[%fp-176] mov 2,%l2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.col),%l0 cmp %l2,%l1 bg .L134 st %l2,[%l0+%lo(.XBkNwvCr2cr9iDU.MAIN.col)] ! block 14 .L_y3: sethi 8,%l6 xor %l6,-4,%l6 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.a),%l7 or %l7,%lo(.XBkNwvCr2cr9iDU.MAIN.a),%l7 sethi %hi(.L_cseg1),%i0 or %i0,%lo(.L_cseg1),%i0 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.index),%i1 or %i1,%lo(.XBkNwvCr2cr9iDU.MAIN.index),%i1 sethi %hi(.L_tcovCounters+56),%l4 or %l4,%lo(.L_tcovCounters+56),%l4 .L135: .L133: ! 91 index = index+1 ldd [%l4+0],%l0 addcc %l1,1,%l3 addx %l0,%g0,%l2 std %l2,[%l4+0] ld [%i1+0],%l0 add %l0,1,%l1 st %l1,[%i1+0] ! 92 A(index,index) = 4.0 ld [%i0+0],%f2 sll %l1,2,%l0 sll %l1,13,%l1 add %l0,%l1,%l1 add %l7,%l1,%l0 st %f2,[%l0+%l6] ! 93 A(index,index-1) = -1.0 sethi %hi(.L_cseg2),%l3 ld [%l3+%lo(.L_cseg2)],%f2 ld [%i1+0],%l1 sub %l1,1,%l0 sll %l0,11,%l0 add %l0,%l1,%l0 sll %l0,2,%l1 add %l7,%l1,%l0 st %f2,[%l0+%l6] ! 94 A(index,index+1) = -1.0 ld [%l3+%lo(.L_cseg2)],%f2 ld [%i1+0],%l1 add %l1,1,%l0 sll %l0,11,%l0 add %l0,%l1,%l0 sll %l0,2,%l1 add %l7,%l1,%l0 st %f2,[%l0+%l6] ! 95 A(index,index-M) = -1.0 ld [%l3+%lo(.L_cseg2)],%f2 ld [%i1+0],%l2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.m),%l5 ld [%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.m)],%l1 sub %l2,%l1,%l0 sll %l0,11,%l0 add %l0,%l2,%l0 sll %l0,2,%l1 add %l7,%l1,%l0 st %f2,[%l0+%l6] ! 96 A(index,index+M) = -1.0 ld [%l3+%lo(.L_cseg2)],%f2 ld [%i1+0],%l2 ld [%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.m)],%l1 add %l2,%l1,%l0 sll %l0,11,%l0 add %l0,%l2,%l0 sll %l0,2,%l1 add %l7,%l1,%l0 st %f2,[%l0+%l6] sethi %hi(.XBkNwvCr2cr9iDU.MAIN.col),%l1 ld [%l1+%lo(.XBkNwvCr2cr9iDU.MAIN.col)],%l0 add %l0,1,%l2 st %l2,[%l1+%lo(.XBkNwvCr2cr9iDU.MAIN.col)] ld [%fp-176],%l0 cmp %l2,%l0 ble .L133 nop ! block 15 .L136: .L134: ! 97 end do ! 98 c last grid point of each row is special ! 99 index = index+1 sethi %hi(.L_tcovCounters+64),%l2 ldd [%l2+%lo(.L_tcovCounters+64)],%l0 addcc %l1,1,%l1 addx %l0,%g0,%l0 std %l0,[%l2+%lo(.L_tcovCounters+64)] sethi %hi(.XBkNwvCr2cr9iDU.MAIN.index),%l5 ld [%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.index)],%l0 add %l0,1,%l1 st %l1,[%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.index)] ! 100 A(index,index) = 4.0 sethi %hi(.L_cseg1),%l0 ld [%l0+%lo(.L_cseg1)],%f2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.a),%l7 or %l7,%lo(.XBkNwvCr2cr9iDU.MAIN.a),%l7 sll %l1,2,%l0 sll %l1,13,%l1 add %l0,%l1,%l1 add %l7,%l1,%l0 sethi 8,%i0 xor %i0,-4,%i0 st %f2,[%l0+%i0] ! 101 A(index,index-1) = -1.0 sethi %hi(.L_cseg2),%l3 ld [%l3+%lo(.L_cseg2)],%f2 ld [%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.index)],%l1 sub %l1,1,%l0 sll %l0,11,%l0 add %l0,%l1,%l0 sll %l0,2,%l1 add %l7,%l1,%l0 st %f2,[%l0+%i0] ! 102 A(index,index+M) = -1.0 ld [%l3+%lo(.L_cseg2)],%f2 ld [%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.index)],%l2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.m),%l6 ld [%l6+%lo(.XBkNwvCr2cr9iDU.MAIN.m)],%l1 add %l2,%l1,%l0 sll %l0,11,%l0 add %l0,%l2,%l0 sll %l0,2,%l1 add %l7,%l1,%l0 st %f2,[%l0+%i0] ! 103 A(index,index-M) = -1.0 ld [%l3+%lo(.L_cseg2)],%f2 ld [%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.index)],%l2 ld [%l6+%lo(.XBkNwvCr2cr9iDU.MAIN.m)],%l1 sub %l2,%l1,%l0 sll %l0,11,%l0 add %l0,%l2,%l0 sll %l0,2,%l1 add %l7,%l1,%l0 st %f2,[%l0+%i0] sethi %hi(.XBkNwvCr2cr9iDU.MAIN.row),%l1 ld [%l1+%lo(.XBkNwvCr2cr9iDU.MAIN.row)],%l0 add %l0,1,%l2 st %l2,[%l1+%lo(.XBkNwvCr2cr9iDU.MAIN.row)] ld [%fp-172],%l0 cmp %l2,%l0 ble .L130 nop ! block 16 .L137: .L131: ! 104 end do ! 105 c ! 106 c last row is very special boundary case ! 107 index = index+1 sethi %hi(.L_tcovCounters+72),%l2 ldd [%l2+%lo(.L_tcovCounters+72)],%l0 addcc %l1,1,%l1 addx %l0,%g0,%l0 std %l0,[%l2+%lo(.L_tcovCounters+72)] sethi %hi(.XBkNwvCr2cr9iDU.MAIN.index),%l5 ld [%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.index)],%l0 add %l0,1,%l1 st %l1,[%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.index)] ! 108 A(index,index) = 4.0 sethi %hi(.L_cseg1),%l0 ld [%l0+%lo(.L_cseg1)],%f2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.a),%l6 or %l6,%lo(.XBkNwvCr2cr9iDU.MAIN.a),%l6 sll %l1,2,%l0 sll %l1,13,%l1 add %l0,%l1,%l1 add %l6,%l1,%l0 sethi 8,%l7 xor %l7,-4,%l7 st %f2,[%l0+%l7] ! 109 A(index,index-M) = -1.0 sethi %hi(.L_cseg2),%l3 ld [%l3+%lo(.L_cseg2)],%f2 ld [%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.index)],%l2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.m),%l4 ld [%l4+%lo(.XBkNwvCr2cr9iDU.MAIN.m)],%l1 sub %l2,%l1,%l0 sll %l0,11,%l0 add %l0,%l2,%l0 sll %l0,2,%l1 add %l6,%l1,%l0 st %f2,[%l0+%l7] ! 110 A(index,index+1) = -1.0 ld [%l3+%lo(.L_cseg2)],%f2 ld [%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.index)],%l1 add %l1,1,%l0 sll %l0,11,%l0 add %l0,%l1,%l0 sll %l0,2,%l1 add %l6,%l1,%l0 st %f2,[%l0+%l7] ! 111 do col=2,M-1 ! block 17 .L95: ld [%l4+%lo(.XBkNwvCr2cr9iDU.MAIN.m)],%l0 sub %l0,1,%l1 st %l1,[%fp-180] mov 2,%l2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.col),%l0 cmp %l2,%l1 bg .L139 st %l2,[%l0+%lo(.XBkNwvCr2cr9iDU.MAIN.col)] ! block 18 .L_y4: sethi 8,%l5 xor %l5,-4,%l5 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.a),%l6 or %l6,%lo(.XBkNwvCr2cr9iDU.MAIN.a),%l6 sethi %hi(.L_cseg1),%l7 or %l7,%lo(.L_cseg1),%l7 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.index),%i0 or %i0,%lo(.XBkNwvCr2cr9iDU.MAIN.index),%i0 sethi %hi(.L_tcovCounters+80),%l4 or %l4,%lo(.L_tcovCounters+80),%l4 .L140: .L138: ! 112 index = index+1 ldd [%l4+0],%l0 addcc %l1,1,%l3 addx %l0,%g0,%l2 std %l2,[%l4+0] ld [%i0+0],%l0 add %l0,1,%l1 st %l1,[%i0+0] ! 113 A(index,index) = 4.0 ld [%l7+0],%f2 sll %l1,2,%l0 sll %l1,13,%l1 add %l0,%l1,%l1 add %l6,%l1,%l0 st %f2,[%l0+%l5] ! 114 A(index,index-1) = -1.0 sethi %hi(.L_cseg2),%l3 ld [%l3+%lo(.L_cseg2)],%f2 ld [%i0+0],%l1 sub %l1,1,%l0 sll %l0,11,%l0 add %l0,%l1,%l0 sll %l0,2,%l1 add %l6,%l1,%l0 st %f2,[%l0+%l5] ! 115 A(index,index+1) = -1.0 ld [%l3+%lo(.L_cseg2)],%f2 ld [%i0+0],%l1 add %l1,1,%l0 sll %l0,11,%l0 add %l0,%l1,%l0 sll %l0,2,%l1 add %l6,%l1,%l0 st %f2,[%l0+%l5] ! 116 A(index,index-M) = -1.0 ld [%l3+%lo(.L_cseg2)],%f2 ld [%i0+0],%l2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.m),%l0 ld [%l0+%lo(.XBkNwvCr2cr9iDU.MAIN.m)],%l1 sub %l2,%l1,%l0 sll %l0,11,%l0 add %l0,%l2,%l0 sll %l0,2,%l1 add %l6,%l1,%l0 st %f2,[%l0+%l5] sethi %hi(.XBkNwvCr2cr9iDU.MAIN.col),%l1 ld [%l1+%lo(.XBkNwvCr2cr9iDU.MAIN.col)],%l0 add %l0,1,%l2 st %l2,[%l1+%lo(.XBkNwvCr2cr9iDU.MAIN.col)] ld [%fp-180],%l0 cmp %l2,%l0 ble .L138 nop ! block 19 .L141: .L139: ! 117 end do ! 118 index = index+1 sethi %hi(.L_tcovCounters+88),%l2 ldd [%l2+%lo(.L_tcovCounters+88)],%l0 addcc %l1,1,%l1 addx %l0,%g0,%l0 std %l0,[%l2+%lo(.L_tcovCounters+88)] sethi %hi(.XBkNwvCr2cr9iDU.MAIN.index),%l5 ld [%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.index)],%l0 add %l0,1,%l1 st %l1,[%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.index)] ! 119 A(index,index) = 4.0 sethi %hi(.L_cseg1),%l0 ld [%l0+%lo(.L_cseg1)],%f2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.a),%l6 or %l6,%lo(.XBkNwvCr2cr9iDU.MAIN.a),%l6 sll %l1,2,%l0 sll %l1,13,%l1 add %l0,%l1,%l1 add %l6,%l1,%l0 sethi 8,%l7 xor %l7,-4,%l7 st %f2,[%l0+%l7] ! 120 A(index,index-1) = -1.0 sethi %hi(.L_cseg2),%l3 ld [%l3+%lo(.L_cseg2)],%f2 ld [%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.index)],%l1 sub %l1,1,%l0 sll %l0,11,%l0 add %l0,%l1,%l0 sll %l0,2,%l1 add %l6,%l1,%l0 st %f2,[%l0+%l7] ! 121 A(index,index-M) = -1.0 ld [%l3+%lo(.L_cseg2)],%f2 ld [%l5+%lo(.XBkNwvCr2cr9iDU.MAIN.index)],%l2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.m),%l0 ld [%l0+%lo(.XBkNwvCr2cr9iDU.MAIN.m)],%l1 sub %l2,%l1,%l0 sll %l0,11,%l0 add %l0,%l2,%l0 sll %l0,2,%l1 add %l6,%l1,%l0 st %f2,[%l0+%l7] ! 122 c ! 123 c ------------------------------------ ! 124 c set up the RHS vector - mostly zeros ! 125 X(1:N) = 0.0 ! block 20 .L96: sethi %hi(.XBkNwvCr2cr9iDU.MAIN.x),%i3 or %i3,%lo(.XBkNwvCr2cr9iDU.MAIN.x),%i3 st %i3,[%fp-200] mov 2048,%l0 st %l0,[%fp-196] mov 1,%l1 st %l1,[%fp-184] st %g0,[%fp-188] mov 4,%l0 st %l0,[%fp-192] smul %l0,%l1,%l1 sub %i3,%l1,%l0 st %l0,[%fp-188] st %i3,[%fp-220] mov 1,%l0 st %l0,[%fp-204] st %g0,[%fp-208] add %fp,-220,%o0 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.n),%l0 ld [%l0+%lo(.XBkNwvCr2cr9iDU.MAIN.n)],%l0 sub %l0,1,%l0 add %l0,1,%l0 or %l0,0,%o1 mov 4,%o2 mov 1,%o3 call __f90_dvset_extent mov 1,%o4 ld [%fp-192],%l0 st %l0,[%fp-212] st %i3,[%fp-220] ld [%fp-204],%l1 smul %l0,%l1,%l1 sub %i3,%l1,%l0 st %l0,[%fp-208] sethi %hi(.L_cseg0),%l0 ld [%l0+%lo(.L_cseg0)],%f2 st %f2,[%fp-224] add %fp,-224,%l0 st %l0,[%fp-228] ld [%fp-216],%i4 cmp %i4,0 ble .L143 st %i3,[%fp-236] ! block 21 .L144: .L142: ld [%fp-228],%l0 ld [%l0+0],%f2 st %f2,[%i3+0] ld [%fp-212],%l1 add %i3,%l1,%i3 sub %i4,1,%i4 cmp %i4,0 bg .L142 nop ! block 22 .L145: .L143: ! 126 c boundary conditions 10 + 20 ! 127 X(1) = sideleft + sidebottom sethi %hi(.L_tcovCounters+96),%l2 ldd [%l2+%lo(.L_tcovCounters+96)],%l0 addcc %l1,1,%l1 addx %l0,%g0,%l0 std %l0,[%l2+%lo(.L_tcovCounters+96)] sethi %hi(.L_cseg3),%l0 ld [%l0+%lo(.L_cseg3)],%f2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.x),%l0 st %f2,[%l0+%lo(.XBkNwvCr2cr9iDU.MAIN.x)] ! 128 do index = 2,m-1 ! block 23 .L97: sethi %hi(.XBkNwvCr2cr9iDU.MAIN.m),%l0 ld [%l0+%lo(.XBkNwvCr2cr9iDU.MAIN.m)],%l0 sub %l0,1,%l1 st %l1,[%fp-244] mov 2,%l2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.index),%l0 cmp %l2,%l1 bg .L147 st %l2,[%l0+%lo(.XBkNwvCr2cr9iDU.MAIN.index)] ! block 24 .L_y5: sethi %hi(.XBkNwvCr2cr9iDU.MAIN.index),%l5 or %l5,%lo(.XBkNwvCr2cr9iDU.MAIN.index),%l5 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.x),%l6 or %l6,%lo(.XBkNwvCr2cr9iDU.MAIN.x),%l6 sethi %hi(.L_cseg4),%l7 or %l7,%lo(.L_cseg4),%l7 sethi %hi(.L_tcovCounters+104),%l4 or %l4,%lo(.L_tcovCounters+104),%l4 .L148: .L146: ! 129 c boundary condition on bottom row = 20 degrees ! 130 X(index) = sidebottom ldd [%l4+0],%l0 addcc %l1,1,%l3 addx %l0,%g0,%l2 std %l2,[%l4+0] ld [%l7+0],%f2 ld [%l5+0],%l0 sll %l0,2,%l1 add %l6,%l1,%l0 st %f2,[%l0-4] ld [%l5+0],%l0 add %l0,1,%l1 st %l1,[%l5+0] ld [%fp-244],%l0 cmp %l1,%l0 ble .L146 nop ! block 25 .L149: .L147: ! 131 end do ! 132 c boundary conditions 20 + 40 degrees ! 133 X(M) = sideright + sidetop sethi %hi(.L_tcovCounters+112),%l2 ldd [%l2+%lo(.L_tcovCounters+112)],%l0 addcc %l1,1,%l1 addx %l0,%g0,%l0 std %l0,[%l2+%lo(.L_tcovCounters+112)] sethi %hi(.L_cseg5),%l0 ld [%l0+%lo(.L_cseg5)],%f2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.x),%l2 or %l2,%lo(.XBkNwvCr2cr9iDU.MAIN.x),%l2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.m),%l3 ld [%l3+%lo(.XBkNwvCr2cr9iDU.MAIN.m)],%l0 sll %l0,2,%l1 add %l2,%l1,%l0 st %f2,[%l0-4] ! 134 index = M ld [%l3+%lo(.XBkNwvCr2cr9iDU.MAIN.m)],%l1 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.index),%l0 st %l1,[%l0+%lo(.XBkNwvCr2cr9iDU.MAIN.index)] ! 135 do row= 2,k-1 ! block 26 .L98: sethi %hi(.XBkNwvCr2cr9iDU.MAIN.k),%l0 ld [%l0+%lo(.XBkNwvCr2cr9iDU.MAIN.k)],%l0 sub %l0,1,%l1 st %l1,[%fp-248] mov 2,%l2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.row),%l0 cmp %l2,%l1 bg .L151 st %l2,[%l0+%lo(.XBkNwvCr2cr9iDU.MAIN.row)] ! block 27 .L_y6: sethi %hi(.XBkNwvCr2cr9iDU.MAIN.m),%l5 or %l5,%lo(.XBkNwvCr2cr9iDU.MAIN.m),%l5 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.x),%l6 or %l6,%lo(.XBkNwvCr2cr9iDU.MAIN.x),%l6 sethi %hi(.L_cseg6),%l7 or %l7,%lo(.L_cseg6),%l7 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.index),%i0 or %i0,%lo(.XBkNwvCr2cr9iDU.MAIN.index),%i0 sethi %hi(.L_tcovCounters+120),%l4 or %l4,%lo(.L_tcovCounters+120),%l4 .L152: .L150: ! 136 index = index + 1 ldd [%l4+0],%l0 addcc %l1,1,%l3 addx %l0,%g0,%l2 std %l2,[%l4+0] ld [%i0+0],%l0 add %l0,1,%l1 st %l1,[%i0+0] ! 137 c boundary condition on the right side = 40 degrees ! 138 X(index) = sideleft ld [%l7+0],%f2 sll %l1,2,%l1 add %l6,%l1,%l0 st %f2,[%l0-4] ! 139 index = index+M-1; ld [%i0+0],%l2 ld [%l5+0],%l1 add %l2,%l1,%l0 sub %l0,1,%l1 st %l1,[%i0+0] ! 140 c boundary condition on left side = 10 degrees ! 141 X(index) = sideright sethi %hi(.L_cseg7),%l0 ld [%l0+%lo(.L_cseg7)],%f2 sll %l1,2,%l1 add %l6,%l1,%l0 st %f2,[%l0-4] sethi %hi(.XBkNwvCr2cr9iDU.MAIN.row),%l1 ld [%l1+%lo(.XBkNwvCr2cr9iDU.MAIN.row)],%l0 add %l0,1,%l2 st %l2,[%l1+%lo(.XBkNwvCr2cr9iDU.MAIN.row)] ld [%fp-248],%l0 cmp %l2,%l0 ble .L150 nop ! block 28 .L153: .L151: ! 142 end do ! 143 c very top row ! 144 index = index + 1 sethi %hi(.L_tcovCounters+128),%l2 ldd [%l2+%lo(.L_tcovCounters+128)],%l0 addcc %l1,1,%l1 addx %l0,%g0,%l0 std %l0,[%l2+%lo(.L_tcovCounters+128)] sethi %hi(.XBkNwvCr2cr9iDU.MAIN.index),%l1 ld [%l1+%lo(.XBkNwvCr2cr9iDU.MAIN.index)],%l0 add %l0,1,%l2 st %l2,[%l1+%lo(.XBkNwvCr2cr9iDU.MAIN.index)] ! 145 X(index) = sideleft + sidetop; sethi %hi(.L_cseg3),%l0 ld [%l0+%lo(.L_cseg3)],%f2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.x),%l0 or %l0,%lo(.XBkNwvCr2cr9iDU.MAIN.x),%l0 sll %l2,2,%l1 add %l0,%l1,%l0 st %f2,[%l0-4] ! 146 do col = 2,m-1 ! block 29 .L99: sethi %hi(.XBkNwvCr2cr9iDU.MAIN.m),%l0 ld [%l0+%lo(.XBkNwvCr2cr9iDU.MAIN.m)],%l0 sub %l0,1,%l1 st %l1,[%fp-252] mov 2,%l2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.col),%l0 cmp %l2,%l1 bg .L155 st %l2,[%l0+%lo(.XBkNwvCr2cr9iDU.MAIN.col)] ! block 30 .L_y7: sethi %hi(.XBkNwvCr2cr9iDU.MAIN.col),%l5 or %l5,%lo(.XBkNwvCr2cr9iDU.MAIN.col),%l5 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.x),%l6 or %l6,%lo(.XBkNwvCr2cr9iDU.MAIN.x),%l6 sethi %hi(.L_cseg4),%l7 or %l7,%lo(.L_cseg4),%l7 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.index),%i0 or %i0,%lo(.XBkNwvCr2cr9iDU.MAIN.index),%i0 sethi %hi(.L_tcovCounters+136),%l4 or %l4,%lo(.L_tcovCounters+136),%l4 .L156: .L154: ! 147 index = index + 1 ldd [%l4+0],%l0 addcc %l1,1,%l3 addx %l0,%g0,%l2 std %l2,[%l4+0] ld [%i0+0],%l0 add %l0,1,%l1 st %l1,[%i0+0] ! 148 c boundary condition on the top = 20 degrees ! 149 X(index) = sidetop ld [%l7+0],%f2 sll %l1,2,%l1 add %l6,%l1,%l0 st %f2,[%l0-4] ld [%l5+0],%l0 add %l0,1,%l1 st %l1,[%l5+0] ld [%fp-252],%l0 cmp %l1,%l0 ble .L154 nop ! block 31 .L157: .L155: ! 150 end do ! 151 c boundary conditions 40 + 20 ! 152 index = index + 1; sethi %hi(.L_tcovCounters+144),%l2 ldd [%l2+%lo(.L_tcovCounters+144)],%l0 addcc %l1,1,%l1 addx %l0,%g0,%l0 std %l0,[%l2+%lo(.L_tcovCounters+144)] sethi %hi(.XBkNwvCr2cr9iDU.MAIN.index),%l1 ld [%l1+%lo(.XBkNwvCr2cr9iDU.MAIN.index)],%l0 add %l0,1,%l2 st %l2,[%l1+%lo(.XBkNwvCr2cr9iDU.MAIN.index)] ! 153 X(index) = sidetop + sideright sethi %hi(.L_cseg5),%l0 ld [%l0+%lo(.L_cseg5)],%f2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.x),%l0 or %l0,%lo(.XBkNwvCr2cr9iDU.MAIN.x),%l0 sll %l2,2,%l1 add %l0,%l1,%l0 st %f2,[%l0-4] ! 154 c ! 155 c the software is efficient in its use of memory - and will take as ! 156 c input the vector of the Right Hand Hand, and overwrite with the ! 157 c solution vector, X. ! 158 c ----------------------------------------- ! 159 c compute the lu decomposition of the matrix A using sgeco from the ! 160 c LINPACK collection of stable, efficient mathematical software ! 161 c ! 162 c the matrix A is a by nm1 by nm1 and its "declared dimension", ! 163 c which allocates the actual storage in memory is given by ndim ! 164 c ! 165 call sgeco (A,ndim,N,ipvt,rcond,work) sethi %hi(.XBkNwvCr2cr9iDU.MAIN.a),%o0 or %o0,%lo(.XBkNwvCr2cr9iDU.MAIN.a),%o0 sethi %hi(.L_cseg8),%o1 or %o1,%lo(.L_cseg8),%o1 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.n),%o2 or %o2,%lo(.XBkNwvCr2cr9iDU.MAIN.n),%o2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.ipvt),%o3 or %o3,%lo(.XBkNwvCr2cr9iDU.MAIN.ipvt),%o3 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.rcond),%l2 or %l2,%lo(.XBkNwvCr2cr9iDU.MAIN.rcond),%l2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.work),%o5 or %o5,%lo(.XBkNwvCr2cr9iDU.MAIN.work),%o5 call sgeco_ mov %l2,%o4 ! 166 c ! 167 c ! 168 print*,' called sgeco - condition = ',1.0/rcond mov 8,%l0 st %l0,[%fp-32] sethi %hi(.SRC_LOC_8),%l0 or %l0,%lo(.SRC_LOC_8),%l0 st %l0,[%fp-28] add %fp,-32,%l3 call __f90_sslw mov %l3,%o0 sethi %hi(.STRING_4),%o1 or %o1,%lo(.STRING_4),%o1 mov 28,%o2 call __f90_slw_ch mov %l3,%o0 sethi %hi(.L_cseg9),%l1 ld [%l1+%lo(.L_cseg9)],%f3 ld [%l2+0],%f2 fdivs %f3,%f2,%f2 mov %l3,%o0 st %f2,[%sp+72] call __f90_slw_r4 ld [%sp+72],%o1 call __f90_eslw mov %l3,%o0 ! 169 c ! 170 c the test below might seem impossible to satisfy, but we'll see ! 171 c this is not so. this will be out jumping off point to discuss ! 172 c the availabe precision due to the finite word size for any computer ! 173 if (1.0 + rcond .le. 1.) then ld [%l1+%lo(.L_cseg9)],%f3 ld [%l2+0],%f2 fadds %f3,%f2,%f2 fcmpes %f2,%f3 nop fbug .L158 nop ! block 32 .L159: ! 174 print*,' Numerically singular matrix ' sethi %hi(.L_tcovCounters+152),%l2 ldd [%l2+%lo(.L_tcovCounters+152)],%l0 addcc %l1,1,%l1 addx %l0,%g0,%l0 std %l0,[%l2+%lo(.L_tcovCounters+152)] mov 8,%l0 st %l0,[%fp-32] sethi %hi(.SRC_LOC_9),%l0 or %l0,%lo(.SRC_LOC_9),%l0 st %l0,[%fp-28] call __f90_sslw mov %l3,%o0 sethi %hi(.STRING_5),%o1 or %o1,%lo(.STRING_5),%o1 mov 30,%o2 call __f90_slw_ch mov %l3,%o0 call __f90_eslw mov %l3,%o0 ! block 33 .L158: ! 175 c ! 176 c in a normal problem solving situation you would "stop" when a ! 177 c numerical singular matrix is detected. for cs 575, we will ! 178 c proceed to gain insight into the effects on accuracy ! 179 c ! 180 c a large condition number (effectively a small rcond = 1/cond) ! 181 c indicates extreme sensitivity in the matrix A - user beware! ! 182 c ! 183 endif ! 184 c ------------------------------------- ! 185 c using the LU factors of A (computed above by sgeco) and the ! 186 c RHS (stored in X initially) - compute the solution for A X = RHS ! 187 c ! 188 call sgesl (a, ndim, N, ipvt, X, 0) sethi %hi(.L_tcovCounters+160),%l2 ldd [%l2+%lo(.L_tcovCounters+160)],%l0 addcc %l1,1,%l1 addx %l0,%g0,%l0 std %l0,[%l2+%lo(.L_tcovCounters+160)] sethi %hi(.XBkNwvCr2cr9iDU.MAIN.a),%o0 or %o0,%lo(.XBkNwvCr2cr9iDU.MAIN.a),%o0 sethi %hi(.L_cseg8),%o1 or %o1,%lo(.L_cseg8),%o1 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.n),%o2 or %o2,%lo(.XBkNwvCr2cr9iDU.MAIN.n),%o2 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.ipvt),%o3 or %o3,%lo(.XBkNwvCr2cr9iDU.MAIN.ipvt),%o3 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.x),%o4 or %o4,%lo(.XBkNwvCr2cr9iDU.MAIN.x),%o4 sethi %hi(.L_cseg0),%o5 or %o5,%lo(.L_cseg0),%o5 call sgesl_ nop ! 189 c ! 190 print*,' the solution is x = ' mov 8,%l0 st %l0,[%fp-32] sethi %hi(.SRC_LOC_10),%l0 or %l0,%lo(.SRC_LOC_10),%l0 st %l0,[%fp-28] add %fp,-32,%l0 call __f90_sslw mov %l0,%o0 sethi %hi(.STRING_6),%o1 or %o1,%lo(.STRING_6),%o1 mov 21,%o2 call __f90_slw_ch mov %l0,%o0 call __f90_eslw mov %l0,%o0 ! 191 do row= k,1,-1 ! block 34 .L100: sethi %hi(.XBkNwvCr2cr9iDU.MAIN.k),%l0 ld [%l0+%lo(.XBkNwvCr2cr9iDU.MAIN.k)],%l1 st %l1,[%fp-256] sethi %hi(.XBkNwvCr2cr9iDU.MAIN.row),%l0 cmp %l1,1 bl .L161 st %l1,[%l0+%lo(.XBkNwvCr2cr9iDU.MAIN.row)] ! block 35 .L162: .L160: ! 192 print *, ' row =', row sethi %hi(.L_tcovCounters+168),%l2 ldd [%l2+%lo(.L_tcovCounters+168)],%l0 addcc %l1,1,%l1 addx %l0,%g0,%l0 std %l0,[%l2+%lo(.L_tcovCounters+168)] mov 8,%l0 st %l0,[%fp-32] sethi %hi(.SRC_LOC_11),%l0 or %l0,%lo(.SRC_LOC_11),%l0 st %l0,[%fp-28] add %fp,-32,%l1 call __f90_sslw mov %l1,%o0 sethi %hi(.STRING_7),%o1 or %o1,%lo(.STRING_7),%o1 mov 6,%o2 call __f90_slw_ch mov %l1,%o0 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.row),%l0 ld [%l0+%lo(.XBkNwvCr2cr9iDU.MAIN.row)],%o1 call __f90_slw_i4 mov %l1,%o0 call __f90_eslw mov %l1,%o0 ! 193 print 10, (X((row-1)*M + i), i=1,M) mov 8,%l0 st %l0,[%fp-296] sethi %hi(.SRC_LOC_12),%l0 or %l0,%lo(.SRC_LOC_12),%l0 st %l0,[%fp-292] sethi %hi(MAIN.t$3_),%l0 or %l0,%lo(MAIN.t$3_),%l0 st %l0,[%fp-284] add %fp,-312,%l0 st %l0,[%fp-280] call __f90_ssfw add %fp,-304,%o0 mov 1,%l1 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.i),%l0 st %l1,[%l0+%lo(.XBkNwvCr2cr9iDU.MAIN.i)] sethi %hi(.XBkNwvCr2cr9iDU.MAIN.m),%l0 ld [%l0+%lo(.XBkNwvCr2cr9iDU.MAIN.m)],%l0 cmp %l1,%l0 bg .L101 st %l0,[%fp-4] ! block 36 .L_y8: sethi %hi(.XBkNwvCr2cr9iDU.MAIN.i),%l3 or %l3,%lo(.XBkNwvCr2cr9iDU.MAIN.i),%l3 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.m),%l5 or %l5,%lo(.XBkNwvCr2cr9iDU.MAIN.m),%l5 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.row),%l6 or %l6,%lo(.XBkNwvCr2cr9iDU.MAIN.row),%l6 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.x),%l7 or %l7,%lo(.XBkNwvCr2cr9iDU.MAIN.x),%l7 add %fp,-304,%l4 .L163: .L102: ld [%l6+0],%l0 sub %l0,1,%l2 ld [%l5+0],%l1 smul %l2,%l1,%l2 ld [%l3+0],%l1 add %l2,%l1,%l0 sll %l0,2,%l1 add %l7,%l1,%l0 ld [%l0-4],%f2 mov %l4,%o0 st %f2,[%sp+72] call __f90_sfw_r4 ld [%sp+72],%o1 ld [%l3+0],%l0 add %l0,1,%l1 st %l1,[%l3+0] ld [%fp-4],%l0 cmp %l1,%l0 ble .L102 nop ! block 37 .L164: .L101: call __f90_esfw add %fp,-304,%o0 sethi %hi(.XBkNwvCr2cr9iDU.MAIN.row),%l1 ld [%l1+%lo(.XBkNwvCr2cr9iDU.MAIN.row)],%l0 add %l0,-1,%l0 cmp %l0,1 bge .L160 st %l0,[%l1+%lo(.XBkNwvCr2cr9iDU.MAIN.row)] ! block 38 .L165: .L161: .L103: ! 194 end do ! 195 10 format (10f8.4) ! 196 stop sethi %hi(.L_tcovCounters+176),%l2 ldd [%l2+%lo(.L_tcovCounters+176)],%l0 addcc %l1,1,%l1 addx %l0,%g0,%l0 std %l0,[%l2+%lo(.L_tcovCounters+176)] call __f90_stop nop jmp %i7+8 restore ! block 39 .L113: .L166: jmp %i7+8 restore .size MAIN_,(.-MAIN_) .align 8 .section ".data",#alloc,#write .align 4 .SRC_LOC_1: .word 0x13,0x25 .word .SOURCE_FILE_1 .type .SRC_LOC_1,#object .size .SRC_LOC_1,12 .section ".rodata",#alloc .STRING_0: .ascii "enter number of rows, K " .type .STRING_0,#object .size .STRING_0,24 .section ".data",#alloc,#write .align 4 .SRC_LOC_2: .word 0x13,0x26 .word .SOURCE_FILE_1 .type .SRC_LOC_2,#object .size .SRC_LOC_2,12 .section ".rodata",#alloc .STRING_1: .ascii " suggested values are : 10, 20, 40 ..." .type .STRING_1,#object .size .STRING_1,39 .section ".data",#alloc,#write .align 4 .SRC_LOC_3: .word 0x14,0x27 .word .SOURCE_FILE_1 .type .SRC_LOC_3,#object .size .SRC_LOC_3,12 .section ".bss",#alloc,#write .align 4 .global .XBkNwvCr2cr9iDU.MAIN.k .XBkNwvCr2cr9iDU.MAIN.k: .skip 4 .type .XBkNwvCr2cr9iDU.MAIN.k,#object .size .XBkNwvCr2cr9iDU.MAIN.k,4 .section ".data",#alloc,#write .align 4 .SRC_LOC_4: .word 0x13,0x28 .word .SOURCE_FILE_1 .type .SRC_LOC_4,#object .size .SRC_LOC_4,12 .section ".rodata",#alloc .STRING_2: .ascii "enter number of columns, M" .type .STRING_2,#object .size .STRING_2,26 .section ".data",#alloc,#write .align 4 .SRC_LOC_5: .word 0x13,0x29 .word .SOURCE_FILE_1 .type .SRC_LOC_5,#object .size .SRC_LOC_5,12 .align 4 .SRC_LOC_6: .word 0x14,0x2a .word .SOURCE_FILE_1 .type .SRC_LOC_6,#object .size .SRC_LOC_6,12 .section ".bss",#alloc,#write .align 4 .global .XBkNwvCr2cr9iDU.MAIN.m .XBkNwvCr2cr9iDU.MAIN.m: .skip 4 .type .XBkNwvCr2cr9iDU.MAIN.m,#object .size .XBkNwvCr2cr9iDU.MAIN.m,4 .align 4 .global .XBkNwvCr2cr9iDU.MAIN.n .XBkNwvCr2cr9iDU.MAIN.n: .skip 4 .type .XBkNwvCr2cr9iDU.MAIN.n,#object .size .XBkNwvCr2cr9iDU.MAIN.n,4 .section ".data",#alloc,#write .align 4 .SRC_LOC_7: .word 0x13,0x2d .word .SOURCE_FILE_1 .type .SRC_LOC_7,#object .size .SRC_LOC_7,12 .section ".rodata",#alloc .STRING_3: .ascii " enter values of K and M so their product < " .type .STRING_3,#object .size .STRING_3,44 .section ".bss",#alloc,#write .align 4 .global .XBkNwvCr2cr9iDU.MAIN.a .XBkNwvCr2cr9iDU.MAIN.a: .skip 16777216 .type .XBkNwvCr2cr9iDU.MAIN.a,#object .size .XBkNwvCr2cr9iDU.MAIN.a,16777216 .align 4 .global .XBkNwvCr2cr9iDU.MAIN.index .XBkNwvCr2cr9iDU.MAIN.index: .skip 4 .type .XBkNwvCr2cr9iDU.MAIN.index,#object .size .XBkNwvCr2cr9iDU.MAIN.index,4 .align 4 .global .XBkNwvCr2cr9iDU.MAIN.i .XBkNwvCr2cr9iDU.MAIN.i: .skip 4 .type .XBkNwvCr2cr9iDU.MAIN.i,#object .size .XBkNwvCr2cr9iDU.MAIN.i,4 .align 4 .global .XBkNwvCr2cr9iDU.MAIN.row .XBkNwvCr2cr9iDU.MAIN.row: .skip 4 .type .XBkNwvCr2cr9iDU.MAIN.row,#object .size .XBkNwvCr2cr9iDU.MAIN.row,4 .align 4 .global .XBkNwvCr2cr9iDU.MAIN.col .XBkNwvCr2cr9iDU.MAIN.col: .skip 4 .type .XBkNwvCr2cr9iDU.MAIN.col,#object .size .XBkNwvCr2cr9iDU.MAIN.col,4 .align 4 .global .XBkNwvCr2cr9iDU.MAIN.x .XBkNwvCr2cr9iDU.MAIN.x: .skip 8192 .type .XBkNwvCr2cr9iDU.MAIN.x,#object .size .XBkNwvCr2cr9iDU.MAIN.x,8192 .align 4 .global .XBkNwvCr2cr9iDU.MAIN.work .XBkNwvCr2cr9iDU.MAIN.work: .skip 8192 .type .XBkNwvCr2cr9iDU.MAIN.work,#object .size .XBkNwvCr2cr9iDU.MAIN.work,8192 .align 4 .global .XBkNwvCr2cr9iDU.MAIN.rcond .XBkNwvCr2cr9iDU.MAIN.rcond: .skip 4 .type .XBkNwvCr2cr9iDU.MAIN.rcond,#object .size .XBkNwvCr2cr9iDU.MAIN.rcond,4 .align 4 .global .XBkNwvCr2cr9iDU.MAIN.ipvt .XBkNwvCr2cr9iDU.MAIN.ipvt: .skip 8192 .type .XBkNwvCr2cr9iDU.MAIN.ipvt,#object .size .XBkNwvCr2cr9iDU.MAIN.ipvt,8192 .section ".data",#alloc,#write .align 4 .SRC_LOC_8: .word 0x13,0xa8 .word .SOURCE_FILE_1 .type .SRC_LOC_8,#object .size .SRC_LOC_8,12 .section ".rodata",#alloc .STRING_4: .ascii " called sgeco - condition = " .type .STRING_4,#object .size .STRING_4,28 .section ".data",#alloc,#write .align 4 .SRC_LOC_9: .word 0x13,0xae .word .SOURCE_FILE_1 .type .SRC_LOC_9,#object .size .SRC_LOC_9,12 .section ".rodata",#alloc .STRING_5: .ascii " Numerically singular matrix " .type .STRING_5,#object .size .STRING_5,30 .section ".data",#alloc,#write .align 4 .SRC_LOC_10: .word 0x13,0xbe .word .SOURCE_FILE_1 .type .SRC_LOC_10,#object .size .SRC_LOC_10,12 .section ".rodata",#alloc .STRING_6: .ascii " the solution is x = " .type .STRING_6,#object .size .STRING_6,21 .section ".data",#alloc,#write .align 4 .SRC_LOC_11: .word 0x13,0xc0 .word .SOURCE_FILE_1 .type .SRC_LOC_11,#object .size .SRC_LOC_11,12 .section ".rodata",#alloc .STRING_7: .ascii " row =" .type .STRING_7,#object .size .STRING_7,6 .section ".data",#alloc,#write .align 4 .SRC_LOC_12: .word 0x13,0xc1 .word .SOURCE_FILE_1 .type .SRC_LOC_12,#object .size .SRC_LOC_12,12 .align 4 MAIN.t$3_: .word 0x23464d54,0x4,0xc,0x8 .word 0x2 .skip 4 .word 0xa,0x2d,0x8,0x4 .word 0x3,0x3 .skip 4 .word 0x7,0x1,0x4,0x28313066 .word 0x382e3429 .skip 4 .type MAIN.t$3_,#object .size MAIN.t$3_,76 .section ".rodata",#alloc .align 4 .L_cseg0: .skip 4 .type .L_cseg0,#object .size .L_cseg0,4 .align 4 .L_cseg1: .word 0x40800000 .type .L_cseg1,#object .size .L_cseg1,4 .align 4 .L_cseg2: .word 0xbf800000 .type .L_cseg2,#object .size .L_cseg2,4 .align 4 .L_cseg3: .word 0x41f00000 .type .L_cseg3,#object .size .L_cseg3,4 .align 4 .L_cseg4: .word 0x41a00000 .type .L_cseg4,#object .size .L_cseg4,4 .align 4 .L_cseg5: .word 0x42700000 .type .L_cseg5,#object .size .L_cseg5,4 .align 4 .L_cseg6: .word 0x41200000 .type .L_cseg6,#object .size .L_cseg6,4 .align 4 .L_cseg7: .word 0x42200000 .type .L_cseg7,#object .size .L_cseg7,4 .align 4 .L_cseg8: .word 0x800 .type .L_cseg8,#object .size .L_cseg8,4 .align 4 .L_cseg9: .word 0x3f800000 .type .L_cseg9,#object .size .L_cseg9,4 .section ".data",#alloc,#write Ddata.data: .skip 0 .type Ddata.data,#object .size Ddata.data,0 .section ".bss",#alloc,#write Bbss.bss: .skip 0 .type Bbss.bss,#object .size Bbss.bss,0 .section ".rodata",#alloc Drodata.rodata: .skip 0 .type Drodata.rodata,#object .size Drodata.rodata,0 .section ".data",#alloc,#write .align 4 happiness: .word 0x6f0 .type happiness,#object .size happiness,4 .align 4 MAIN.t$2_: .word 0x31302831,0x3066382e,0x34290000 .skip 4 .type MAIN.t$2_,#object .size MAIN.t$2_,16 .section ".rodata",#alloc .SOURCE_FILE_1: .ascii "f_diffusion.f" .skip 1 .type .SOURCE_FILE_1,#object .size .SOURCE_FILE_1,14 .align 4 CONST_ARG_1: .word 0x800 .type CONST_ARG_1,#object .size CONST_ARG_1,4 .align 4 CONST_ARG_2: .word 0x800 .type CONST_ARG_2,#object .size CONST_ARG_2,4 .align 4 CONST_ARG_3: .skip 4 .type CONST_ARG_3,#object .size CONST_ARG_3,4 .section ".data",#alloc,#write .L_tcovFileName: .ascii "/home/ma/575.01/masc0670/diffusion/f_diffusion.d\000" .type .L_tcovFileName,#object .size .L_tcovFileName,49 .align 8 .L_tcovCounters: .skip 184 .type .L_tcovCounters,#object .size .L_tcovCounters,184 .align 4 .L_tcovStruct: .skip 4 .word .L_tcovFileName .word .L_tcovCounters .word 0x17 .skip 4 .type .L_tcovStruct,#object .size .L_tcovStruct,20 .file "f_diffusion.f" .xstabs ".stab.index","V=8.0 ; DBG_GEN=3.4.2 ; R=1.0;g;G=.XAkNwvCr2cr9iDU.",60,0,0,1034800555 .xstabs ".stab.index","/home/ma/575.01/masc0670/diffusion/;/opt/SUNWspro/bin/../WS6U2/bin/f90 -S -a -qoption f90comp -h.XAkNwvCr2cr9iDU. f_diffusion.f",52,0,0,0 .global __fsr_init_value __fsr_init_value = 0x34