>I sent a corrected piece of code using two 16 bit 64k lookup tables
>as follows.
>
>a0 points to RG table and a1 to B.
>
>m33RGB    move.w    (a4)+,d2     get B0
>          move.w    (a4)+,d3     get RG
>          move.w    (a0,d3.w),d3 use lookup table to sort RG
>          move.w    (a1,d2.w),d2 also sort B
>          or.w      d2,d3        combine RGB
>m33done   move.w    d3,d6        left pixel done, now do right
>          swap      d6
>          ...                    inline repeat of above for right pixel
>          move.l    d6,(a3)+     two pixels to window save area
>
>BORG in         BBBBBBBBOOOOOOOO   RRRRRRRRGGGGGGGG
>                76543210           7654321076543210
>After Lookup    0000000000BBBBB0   GGGGGRRRRR00000G
>                          76543    7654376543     2
>After OR        GGGGGRRRRRBBBBBG
>                7654376543765432

Using just G2 it would be quicker to do:

m33RGB    move.l    (a4)+,d3     get BORG
          roxr.b    #3,d3        get G7-3, G2 to eXtend flag
          rol.w     #5,d3        get R7-3
          rol.l     #5,d3        get B7-3
          roxl.w    #1,d3        get G2 from eXtend flag

Comparison of clocks (if I have got them correct) for 68040:

move (An)+,Dn       2 (x 2)
move d8(An,Xn),Dn   9 (x 2)
or   Dn,Dn          2 (x 1)  total 24

move (An)+,Dn       2 (x 1)
roxr/l #n,Dn        6 (x 2)
rol    #n,Dn        4 (x 2)  total 22

and it wouldn't require 128K of tables :-)

Regards,
Dave.


Reply via email to