butcher@g.gp.cs.cmu.edu (Lawrence Butcher) (04/12/89)
Source Code: void Update_Rect (x1, y1, x2, y2) register short x1, y1, x2, y2; { register unsigned char *From, *To; register unsigned char *ColorMap; register short Count; short Complete, Partial, Lines; for (; Complete-- != 0;) { for (Lines = Partial; Lines-- != 0; From += x1, To += x2) { for (Count = y1 >> 3; Count-- != 0;) { *To++ = ColorMap[*From++]; *To++ = ColorMap[*From++]; *To++ = ColorMap[*From++]; *To++ = ColorMap[*From++]; *To++ = ColorMap[*From++]; *To++ = ColorMap[*From++]; *To++ = ColorMap[*From++]; *To++ = ColorMap[*From++]; } } } } .s file: #NO_APP gcc_compiled.: .text .even .globl _Update_Rect _Update_Rect: link a6,#0 moveml #0x3f3c,sp@- movew a6@(10),a4 movew a6@(14),a3 movew a6@(18),d7 jra L2 L13: movew a5,d4 clrl d5 jra L5 L12: movew a3,d1 asrw #3,d1 clrl d3 clrl d2 jra L8 L11: moveb a0@+,d3 # not fatal moveb a2@(d3:l),a1@+ moveb a0@+,d2 # why not the same register? moveb a2@(d2:l),a1@+ moveb a0@+,d5 # why not the same register? moveb a2@(d5:l),a1@+ clrl d0 # why not the same register? moveb a0@+,d0 moveb a2@(d0:l),a1@+ clrl d0 # d0 already has the top 3 bytes zeroed moveb a0@+,d0 moveb a2@(d0:l),a1@+ clrl d0 moveb a0@+,d0 moveb a2@(d0:l),a1@+ clrl d0 moveb a0@+,d0 moveb a2@(d0:l),a1@+ clrl d0 moveb a0@+,d0 moveb a2@(d0:l),a1@+ L8: dbra d1,L11 addw a4,a0 addw d7,a1 L5: dbra d4,L12 L2: dbra d6,L13 moveml a6@(-40),#0x3cfc unlk a6 rts Lawrence.Butcher@cs.cmu.edu --