1
0
mirror of https://github.com/Interlisp/maiko.git synced 2026-01-20 09:45:13 +00:00
Interlisp.maiko/src/bbtSPARC.s

1942 lines
31 KiB
ArmAsm
Executable File

! @(#) bbtSPARC.s Version 1.2 (4/22/92). copyright Venue & Fuji Xerox #
!
!************************************************************************/
!* */
!* (C) Copyright 1989-92 Venue. All Rights Reserved. */
!* Manufactured in the United States of America. */
!* */
!* The contents of this file are proprietary information */
!* belonging to Venue, and are provided to you under license. */
!* They may not be further distributed or disclosed to third */
!* parties without the specific permission of Venue. */
!* */
!************************************************************************/
! Argument stack offsets, for rational naming.
!
#define srcbase [%fp+68]
#define dstbase [%fp+72]
#define sx [%fp+76]
#define dx [%fp+80]
#define w [%fp+84]
#define height [%fp+88]
#define srcbpl [%fp+92]
#define dstbpl [%fp+96]
#define backwardflg [%fp+100]
#define src_comp [%fp+104]
#define op [%fp+108]
#define gray [%fp+112]
#define num_gray [%fp+116]
#define curr_gray_line [%fp+120]
!
!
!
#define num_lines_remaining [%fp-4]
#define fwd [%fp-8]
#define bb_fast [%fp-12]
#define temp
#define dstnumL
#define src32lbit
#define srcLshift
#define dst32lbit
#define srcRmask
#define dstold
#define dstdata
#define mask
#define x32byta
#define x32nbyt
#define x32ia
#define abc
#define dst32rbit
#define src32rbit [%fp-32]
#define OrigSrcAddr [%fp-36]
#define OrigDstAddr [%fp-20]
#define preloop_mask
#define postloop_mask
#define sdw_mask [%fp-24]
#define dst32addr [%fp-16]
#define src32addr [%fp-28]
#define shS
#define savedS
#define newS
#define srcRshift
!
! Computed intermediate values
!
! srcbpl_rshift_3 saved value of (srcbpl>>3)
! dstbpl_rshift_3 saved value of (dstbpl>>3)
! num_gray_1 saved value of (num_gray-1)
! ffff saved value of 0xFFFF
#define srcbpl_rshift_3 [%fp-52]
#define num_gray_1 [%fp-48]
#define dstbpl_rshift_3 [%fp-56]
#define ffff [%fp-44]
!
! Register Usage
!
! %i0 (arg srcbase)
! %i1 srcLshift (arg dstbase)
! %i2 srcRshift (arg sx)
! %i3 dx, newS (arg dx)
! %i4 (arg width)
! %i5 bb_fast (arg height)
! %i6
! %i7
!
! %o0
! %o1
! %o2
! %o3
! %04
! %o5
! %o6
! %o7
!
! %g0 [always zero]
! %g1
! %g2
! %g3
! %g4
! %g5
! %g6
! %g7
!
! %l0 srcRmask
! %l1 op (left shifted 2 by JDS as of 11/7/89)
! %l2 postloop_mask
! %l3 preloop_mask
! %l4 dst32rbit
! %l5 src32lbit
! %l6 dst32lbit
! %l7
!
! Definitions for register assignments, to make code clear.
! All are of the form R<varname>, to indicate the R<egister>
! version of the variable, in case there is also a storage place
! for it.
!
#define RsrcRmask %l0
#define Rop %l1
#define Rpostloop_mask %l2
#define Rpreloop_mask %l3
#define Rdst32rbit %l4
#define Rsrc32lbit %l5
#define Rdst32lbit %l6
#define RsrcRshift %i2
!
.seg "text" ! [internal]
.proc 4
.global _bitblt
_bitblt:
!#PROLOGUE# 0
!#PROLOGUE# 1
save %sp,-120,%sp
ld backwardflg,%o0
st %i5,num_lines_remaining
tst %o0
st %i4,w
bne L77003
st %i0,srcbase
mov 1,%o1
b L77004
st %o1,fwd
L77003:
st %g0,fwd
L77004:
ld dstbpl,%o3
ld srcbpl,%o2
or %o2,%o3,%o2
andcc %o2,31,%g0
bne,a L77007
mov 0,%i5 ! bb_fast = %i5
mov 1,%i5
L77007:
ld gray,%o5
st %i5,bb_fast
tst %o5 ! are we doing the gray case?
be,a LY53 ! no => LY53
ld fwd,%o5
tst %i3 ! dx
bge,a LY52
sra %i3,3,%o4
mov 7,%o7
sub %o7,%i3,%o7
sra %o7,3,%o7
b LY12
sub %i1,%o7,%i1
LY52: ! [internal]
add %i1,%o4,%i1
LY12: ! [internal]
and %i1,3,Rdst32lbit
sub %i1,Rdst32lbit,%i1
st %i1,dst32addr
ld w,%i1
ld dst32addr,%o2
sll Rdst32lbit,3,Rdst32lbit
and %i3,7,%i3
add Rdst32lbit,%i3,Rdst32lbit !dst32lbit
add Rdst32lbit,%i1,%i1
sub %i1,1,Rdst32rbit
tst Rdst32lbit
st %o2,OrigDstAddr ! OrigDstAddr?
be L77013
and Rdst32rbit,31,Rdst32rbit ! dst32rbit
mov 32,%o3
sub %o3,Rdst32lbit,%o3
mov -1,%i3
sll %i3,%o3,%i3
b L77014
xor %i3,-1,%i3 ! preloop_mask
L77013:
mov -1,%i3
L77014:
ld dstbpl,%o3
mov 31,%o2
sub %o2,Rdst32rbit,%o2
mov -1,Rpostloop_mask
sll Rpostloop_mask,%o2,Rpostloop_mask ! postloop_mask
mov %i3,Rpreloop_mask
and Rpreloop_mask,Rpostloop_mask,%o0
andcc %o3,31,%g0
sra %i1,5,%l7
st %o0,sdw_mask ! sdw_mask?
bne L77016
dec %l7 ! dstnumL seems to be in %l7.
b L77017
mov 1,%i3
L77016:
mov 0,%i3 ! bb_fast
L77017:
st %i3,bb_fast
b L77396
and %i2,15,Rsrc32lbit !srclbit
!
! Loop-advance, for either the forward or backward case
!
LY53: ! [internal]
tst %o5 ! going forward?
be,a LY51 ! No. => LY51
ld w,%o3
tst %i3
bge,a LY50
sra %i3,3,%o4
mov 7,%o7
sub %o7,%i3,%o7
sra %o7,3,%o7
b LY13
sub %i1,%o7,%i1
LY50: ! [internal]
add %i1,%o4,%i1
LY13: ! [internal]
and %i1,3,Rdst32lbit
sub %i1,Rdst32lbit,%i1
st %i1,dst32addr
ld w,%i1
ld dst32addr,%o2
sll Rdst32lbit,3,Rdst32lbit
and %i3,7,%i3
add Rdst32lbit,%i3,Rdst32lbit
add Rdst32lbit,%i1,%i1
sub %i1,1,Rdst32rbit
tst Rdst32lbit
st %o2,OrigDstAddr
be L77024
and Rdst32rbit,31,Rdst32rbit
mov 32,%o3
sub %o3,Rdst32lbit,%o3
mov -1,%i3
sll %i3,%o3,%i3
b L77025
xor %i3,-1,%i3
L77024:
mov -1,%i3
L77025:
mov 31,%o2
sub %o2,Rdst32rbit,%o2
mov -1,Rpostloop_mask
sll Rpostloop_mask,%o2,Rpostloop_mask
mov %i3,Rpreloop_mask
and Rpreloop_mask,Rpostloop_mask,%o0
tst %i2
sra %i1,5,%l7
st %o0,sdw_mask
bge L77027
dec %l7
ld srcbase,%i3
mov 7,%o3
sub %o3,%i2,%o3
sra %o3,3,%o3
b LY14
sub %i3,%o3,%i3
L77027:
ld srcbase,%i3
sra %i2,3,%o2
add %i3,%o2,%i3
LY14: ! [internal]
ld w,%o4
and %i3,3,Rsrc32lbit
sub %i3,Rsrc32lbit,%i3
sll Rsrc32lbit,3,Rsrc32lbit
and %i2,7,%i2
add Rsrc32lbit,%i2,Rsrc32lbit
add Rsrc32lbit,%o4,%o4
sub Rsrc32lbit,Rdst32lbit,%i1
and %i1,31,%i1
dec %o4
and %o4,31,%o4
tst %i1
sub Rdst32lbit,Rsrc32lbit,RsrcRshift
st %i3,src32addr
st %o4,src32rbit
be L77030
and RsrcRshift,31,RsrcRshift
mov -1,%i3
sll %i3,%i1,%i3
b L77031
xor %i3,-1,%i3
L77030:
mov -1,%i3
L77031:
ld src32addr,%o2
mov %i3,RsrcRmask
b L77396
st %o2,OrigSrcAddr
!
!
! Loop advance for the blt-backward case.
!
LY51: ! [internal]
add %i3,%o3,%i3
deccc %i3
bpos,a LY49
sra %i3,3,%o4
mov 7,%o7
sub %o7,%i3,%o7
sra %o7,3,%o7
b LY15
sub %i1,%o7,%i1
LY49: ! [internal]
add %i1,%o4,%i1
LY15: ! [internal]
and %i1,3,Rdst32rbit
sub %i1,Rdst32rbit,%i1
sll Rdst32rbit,3,Rdst32rbit
and %i3,7,%i3
add Rdst32rbit,%i3,Rdst32rbit
sub Rdst32rbit,%o3,Rdst32lbit
inc Rdst32lbit
and Rdst32lbit,31,Rdst32lbit
tst Rdst32lbit ! replaced by andCC
st %i1,OrigDstAddr
mov -1,Rpostloop_mask
be Ldstl0
st %i1,dst32addr
mov 32,%o1
sub %o1,Rdst32lbit,%o1
sll Rpostloop_mask,%o1,Rpostloop_mask
xor Rpostloop_mask,-1,Rpostloop_mask
Ldstl0: ld w,%o1
mov 31,%o3
sub %o3,Rdst32rbit,%o3
sub %o1,Rdst32rbit,%i3
mov -1,Rpreloop_mask
sll Rpreloop_mask,%o3,Rpreloop_mask
dec %i3
tst %i3
and Rpreloop_mask,Rpostloop_mask,%o0
ble L77037
st %o0,sdw_mask
b L77038
sra %i3,5,%i3
L77037:
mov 0,%i3
L77038:
mov %i3,%l7
add %i2,%o1,%i3
deccc %i3
bpos LY48
ld srcbase,%i1
mov 7,%o1
sub %o1,%i3,%o1
sra %o1,3,%o1
b LY16
sub %i1,%o1,%i1
LY48: ! [internal]
sra %i3,3,%o0
add %i1,%o0,%i1
LY16: ! [internal]
ld w,Rsrc32lbit
and %i1,3,%i2
sub %i1,%i2,%i1
sll %i2,3,%i2
and %i3,7,%i3
add %i2,%i3,%i2 !src32rbit
st %i2,src32rbit ! moved from below for clarity
sub %i2,Rsrc32lbit,Rsrc32lbit
inc Rsrc32lbit
and Rsrc32lbit,31,Rsrc32lbit
st %i1,src32addr
sub Rsrc32lbit,Rdst32lbit,%i1
and %i1,31,%i1
! st %i2,src32rbit
sub Rdst32lbit,Rsrc32lbit,RsrcRshift
tst %i1
be L77043
and RsrcRshift,31,RsrcRshift
mov -1,%i3
sll %i3,%i1,%i3
b L77044
xor %i3,-1,%i3
L77043:
mov 0,%i3
L77044:
ld src32addr,%o1
mov %i3,RsrcRmask ! srcRmask
st %o1,OrigSrcAddr
L77396:
ld srcbpl,%o3
ld num_lines_remaining,%i5
ld num_gray,%o0
ld dstbpl,%o5
ld op,Rop
sll Rop,2,Rop ! op << 2, for jump dispatch
sra %o3,3,%o3
st %o3,srcbpl_rshift_3 ! srcbpl >> 3, for later use.
ld num_lines_remaining,%o3
dec %o0
sethi %hi(0xffff),%o2
or %o2,%lo(0xffff),%o2 ! [internal]
sll %o0,1,%o0
dec %o3
sra %o5,3,%o5
tst %i5
st %o2,ffff
st %o0,num_gray_1
st %o3,num_lines_remaining
ble LY1
st %o5,dstbpl_rshift_3
LY8: ! [internal]
ld gray,%o4
tst %o4
be,a LY47
ld fwd,%o3
ld srcbase,%i5
ld ffff,%o0
lduh [%i5],%i5
sub Rsrc32lbit,Rdst32lbit,%i1
sll %i5,16,%o3
or %i5,%o3,%i5
ld src_comp,%o3
and %i1,15,%i1
sll %i5,%i1,%i5
srl %i5,16,%o7
and %o7,%o0,%o7
tst %o3
be L77051
or %i5,%o7,%i5
xor %i5,-1,%i5
L77051:
ld w,%o5
add Rdst32lbit,%o5,%o5
cmp %o5,32
bg,a LY46
ld dst32addr,%i4
b L77305
ld sdw_mask,%i0
LY46: ! [internal]
! cmp Rop,3
ld [%i4],%i4
! sll Rop,2,%o0
! bgu L77060
andn %i4,Rpreloop_mask,%i0
sethi %hi(L2000000),%o1
or %o1,%lo(L2000000),%o1 ! [internal]
ld [Rop+%o1],%o0
jmp %o0
! nop
b L77060
L2000000:
.word L77054
.word L77055
.word L77056
.word L77057
L77054:
mov %i5,%i4
L77055:
and %i4,%i5,%i4
L77056:
or %i4,%i5,%i4
L77057:
xor %i4,%i5,%i4
L77060:
ld dst32addr,%o7 ! o7 = dst32addr down to ~ LY45
and %i4,Rpreloop_mask,%i4
or %i4,%i0,%i4
st %i4,[%o7]
! ld dst32addr,%o7
! cmp Rop,3
inc 4,%o7
! sll Rop,2,%o0
! bgu L77079
! st %o7,dst32addr
sethi %hi(L2000001),%o1
or %o1,%lo(L2000001),%o1 ! [internal]
ld [Rop+%o1],%o0
jmp %o0
! nop
mov %l7,%i4
L2000001:
.word L77061
.word L77065
.word L77069
.word L77073
L77061:
! mov %l7,%i4
L77062:
deccc %i4
bneg,a LY45
cmp Rdst32rbit,31
! ld dst32addr,%o0
st %i5,[%o7]
! ld dst32addr,%o1
! inc 4,%o1
b L77062
inc 4,%o7
! st %o1,dst32addr
L77065:
! mov %l7,%i4
L77066:
deccc %i4
bneg,a LY45
cmp Rdst32rbit,31
ld [%o7],%o3
and %o3,%i5,%o3
st %o3,[%o7]
! ld dst32addr,%o7
! inc 4,%o7
b L77066
inc 4,%o7
! st %o7,dst32addr
L77069:
! mov %l7,%i4
L77070:
deccc %i4
bneg,a LY45
cmp Rdst32rbit,31
! ld dst32addr,%o0
ld [%o7],%o1
or %o1,%i5,%o1
st %o1,[%o7]
! ld dst32addr,%o4
! inc 4,%o4
b L77070
inc 4,%o7
! st %o4,dst32addr
L77073:
! sub %l7,1,%i4
! tst %i4
deccc %i4
bl,a LY45
cmp Rdst32rbit,31
!LY9: ! [internal]
! ld dst32addr,%o5
LY9a: deccc %i4
ld [%o7],%o1
xor %o1,%i5,%o1
st %o1,[%o7]
! ld dst32addr,%o2
! inc 4,%o2
bpos LY9a
inc 4,%o7
! st %o5,dst32addr
L77079:
cmp Rdst32rbit,31
LY45: ! [internal]
! be,a LY31
be LY31
st %o7,dst32addr ! end of dst32addr in o7
ld gray,%o2
b L77305
mov Rpostloop_mask,%i0
LY47: ! [internal]
tst %o3 !fwd
be,a LY44
ld src32rbit,%o7
cmp Rsrc32lbit,Rdst32lbit
ble,a LY43
cmp Rsrc32lbit,Rdst32lbit
ld w,%o4
add Rsrc32lbit,%o4,%o4
cmp %o4,32
ble,a LY43
cmp Rsrc32lbit,Rdst32lbit
ld src32addr,%o1
ld [%o1],%i3
inc 4,%o1
! st %o1,src32addr
ld [%o1],%o3
sll %i3,%i1,%i3
srl %o3,RsrcRshift,%i5
and %i5,RsrcRmask,%i5
or %i3,%i5,%i5
sll %o3,%i1,%i3
inc 4,%o1
andn %i3,RsrcRmask,%i3
b LY19
st %o1,src32addr
LY43: ! [internal]
bg LY42
ld src32addr,%o7
ld [%o7],%i3
inc 4,%o7
srl %i3,RsrcRshift,%i5
sll %i3,%i1,%i3
st %o7,src32addr
and %i5,RsrcRmask,%i5
b LY19
andn %i3,RsrcRmask,%i3
LY42: ! [internal]
ld [%o7],%i5
inc 4,%o7
st %o7,src32addr
sll %i5,%i1,%i5
LY19: ! [internal]
ld src_comp,%o1
tst %o1
be,a LY41
ld w,%o3
xor %i5,-1,%i5
ld w,%o3
LY41: ! [internal]
add Rdst32lbit,%o3,%o3
cmp %o3,32
bg,a LY40
ld dst32addr,%i4
b L77305
ld sdw_mask,%i0
LY40: ! [internal]
! cmp Rop,3
ld [%i4],%i4
! sll Rop,2,%o0
! bgu L77101
andn %i4,Rpreloop_mask,%i0
sethi %hi(L2000002),%o1
or %o1,%lo(L2000002),%o1 ! [internal]
ld [Rop+%o1],%o0
jmp %o0
! nop
b L77101
L2000002:
.word L77095
.word L77096
.word L77097
.word L77098
L77095:
! b L77101
mov %i5,%i4
L77096:
! b L77101
and %i4,%i5,%i4
L77097:
! b L77101
or %i4,%i5,%i4
L77098:
xor %i4,%i5,%i4
L77101:
ld dst32addr,%o4 ! o4 = dst32addr
and %i4,Rpreloop_mask,%i4
or %i4,%i0,%i4
st %i4,[%o4]
! ld dst32addr,%o4
cmp Rsrc32lbit,Rdst32lbit
inc 4,%o4
bne L77144
st %o4,dst32addr
ld src_comp,%o5
tst %o5
bne LY39
! cmp Rop,3
! bgu L77186
! sll Rop,2,%o0
ld src32addr,%o5 ! o5 = src32addr
sethi %hi(L2000004),%o1
or %o1,%lo(L2000004),%o1 ! [internal]
ld [Rop+%o1],%o0
jmp %o0
! nop
mov %l7,%i5
L2000004:
.word L77124
.word L77128
.word L77132
.word L77136
L77104:
! mov %l7,%i5
L77105:
deccc %i5
bneg,a LY37
st %o4,dst32addr
! cmp Rdst32rbit,31
! ld src32addr,%o7
! ld dst32addr,%o4
ld [%o5],%o7
xor %o7,-1,%o7
st %o7,[%o4]
! ld src32addr,%o3
! ld dst32addr,%o4
inc 4,%o4
! inc 4,%o5
! st %o3,src32addr
b L77105
inc 4,%o5
! st %o4,dst32addr
L77108:
! mov %l7,%i5
L77109:
deccc %i5
bneg,a LY37
st %o4,dst32addr
! cmp Rdst32rbit,31
! ld src32addr,%o5
! ld dst32addr,%o0
ld [%o5],%o7
ld [%o4],%o1
andn %o1,%o7,%o1
st %o1,[%o4]
! ld src32addr,%o4
! ld dst32addr,%o5
inc 4,%o4
! inc 4,%o5
! st %o4,src32addr
b L77109
inc 4,%o5
! st %o5,dst32addr
L77112:
! mov %l7,%i5
L77113:
deccc %i5
bneg,a LY37
st %o4,dst32addr
! cmp Rdst32rbit,31
! ld src32addr,%o7
! ld dst32addr,%o1
ld [%o5],%o7
ld [%o4],%o2
orn %o2,%o7,%o2
st %o2,[%o4]
! ld src32addr,%o5
! ld dst32addr,%o7
inc 4,%o5
! inc 4,%o4
! st %o5,src32addr
b L77113
inc 4,%o4
! st %o7,dst32addr
L77116:
! mov %l7,%i5
L77117:
deccc %i5
bneg,a LY37
st %o4,dst32addr
! cmp Rdst32rbit,31
! ld src32addr,%o0
! ld dst32addr,%o2
ld [%o5],%o0
ld [%o4],%o3
xnor %o3,%o0,%o3
st %o3,[%o4]
! ld src32addr,%o7
! ld dst32addr,%o0
inc 4,%o5
! inc 4,%o4
! st %o7,src32addr
b L77117
inc 4,%o4
! st %o0,dst32addr
LY39: ! [internal] o4 = dst32addr getting here
! bgu L77186
! sll Rop,2,%o0
! ld src32addr,%o5 ! o5 = src32addr when getting to LY39
sethi %hi(L2000003),%o1
or %o1,%lo(L2000003),%o1 ! [internal]
ld [Rop+%o1],%o0
jmp %o0
! nop
mov %l7,%i5
L2000003:
.word L77104
.word L77108
.word L77112
.word L77116
L77124:
! mov %l7,%i5
L77125:
deccc %i5
bneg,a LY37
st %o4,dst32addr
! cmp Rdst32rbit,31
! ld src32addr,%o2
! ld dst32addr,%o1
ld [%o5],%o2
st %o2,[%o4]
! ld src32addr,%o4
! ld dst32addr,%o5
inc 4,%o4
! inc 4,%o5
! st %o4,src32addr
b L77125
inc 4,%o5
! st %o5,dst32addr
L77128:
! mov %l7,%i5
L77129:
deccc %i5
bneg,a LY37
st %o4,dst32addr
! cmp Rdst32rbit,31
! ld src32addr,%o7
! ld dst32addr,%o1
ld [%o5],%o7
ld [%o4],%o2
and %o2,%o7,%o2
st %o2,[%o4]
! ld src32addr,%o5
! ld dst32addr,%o7
inc 4,%o5
! inc 4,%o4
! st %o5,src32addr
b L77129
inc 4,%o4
! st %o7,dst32addr
L77132:
! mov %l7,%i5
L77133:
deccc %i5
bneg,a LY37
st %o4,dst32addr
! cmp Rdst32rbit,31
! ld src32addr,%o0
! ld dst32addr,%o2
ld [%o5],%o0
ld [%o4],%o3
or %o3,%o0,%o3
st %o3,[%o4]
! ld src32addr,%o7
! ld dst32addr,%o0
inc 4,%o4
! inc 4,%o5
! st %o7,src32addr
b L77133
inc 4,%o5
! st %o0,dst32addr
L77136:
! sub %l7,1,%i5
! tst %i5
deccc %i5
bl,a LY37
st %o4,dst32addr
! cmp Rdst32rbit,31
LY10: ! [internal]
! ld src32addr,%o1
! ld dst32addr,%o3
ld [%o5],%o1
ld [%o4],%o2
deccc %i5
xor %o2,%o1,%o2
st %o2,[%o4]
! ld src32addr,%o0
! ld dst32addr,%o1
inc 4,%o4
! inc 4,%o5
! st %o0,src32addr
bpos LY10
inc 4,%o5
! st %o1,dst32addr
L77186:
! cmp Rdst32rbit,31
st %o4,dst32addr
LY37: ! [internal]
st %o5,src32addr
cmp Rdst32rbit,31
be,a LY31
ld gray,%o2
ld src32rbit,%o5
cmp %o5,Rdst32rbit
bg,a L77190
mov %i3,%i5
ld src32addr,%i5
ld [%i5],%i5
srl %i5,RsrcRshift,%i5
and %i5,RsrcRmask,%i5
b L77190
or %i3,%i5,%i5
L77144: ! o4 = dst32addr when getting here.
ld src_comp,%o2
tst %o2
bne LY38
! cmp Rop,3
! bgu L77186
! sll Rop,2,%o0
ld src32addr,%o5 ! o5 = src322addr
sethi %hi(L2000006),%o1
or %o1,%lo(L2000006),%o1 ! [internal]
ld [Rop+%o1],%o0
jmp %o0
! nop
mov %l7,%i4
L2000006:
.word L77166
.word L77170
.word L77174
.word L77178
L77146:
! mov %l7,%i4
L77147:
deccc %i4
bneg,a LY37
st %o4,dst32addr
! cmp Rdst32rbit,31
! ld src32addr,%o5
! ld dst32addr,%o3
ld [%o5],%o1
inc 4,%o5
srl %o1,RsrcRshift,%o7
or %i3,%o7,%o7
xor %o7,-1,%o7
! st %o5,src32addr
st %o7,[%o4]
sll %o1,%i1,%i3
! ld dst32addr,%o4
! inc 4,%o4
b L77147
inc 4,%o4
! st %o4,dst32addr
L77150:
! mov %l7,%i4
L77151:
deccc %i4
bneg,a LY37
st %o4,dst32addr
! cmp Rdst32rbit,31
! ld src32addr,%o0
! ld dst32addr,%o5
ld [%o5],%o7
inc 4,%o5
srl %o7,RsrcRshift,%o1
or %i3,%o1,%o1
sll %o7,%i1,%i3
! st %o0,src32addr
ld [%o4],%o7
xor %o1,-1,%o1
and %o7,%o1,%o7
st %o7,[%o4]
! ld dst32addr,%o2
! inc 4,%o2
b L77151
inc 4,%o4
! st %o2,dst32addr
L77154:
! mov %l7,%i4
L77155:
deccc %i4
bneg,a LY37
st %o4,dst32addr
! cmp Rdst32rbit,31
! ld src32addr,%o5
! ld dst32addr,%o3
ld [%o5],%o1
inc 4,%o5
srl %o1,RsrcRshift,%o7
or %i3,%o7,%o7
sll %o1,%i1,%i3
! st %o5,src32addr
ld [%o4],%o1
xor %o7,-1,%o7
or %o1,%o7,%o1
st %o1,[%o4]
! ld dst32addr,%o0
! inc 4,%o4
b L77155
inc 4,%o4
! st %o0,dst32addr
L77158:
! mov %l7,%i4
L77159:
deccc %i4
bneg,a LY37
st %o4,dst32addr
! cmp Rdst32rbit,31
! ld src32addr,%o3
! ld dst32addr,%o1
ld [%o5],%o2
inc 4,%o5
srl %o2,RsrcRshift,%o1
or %i3,%o1,%o1
sll %o2,%i1,%i3
! st %o3,src32addr
ld [%o4],%o2
xor %o1,-1,%o1
xor %o2,%o1,%o2
st %o2,[%o4]
! ld dst32addr,%o5
! inc 4,%o4
b L77159
inc 4,%o4
! st %o5,dst32addr
LY38: ! [internal]
! bgu L77186
! sll Rop,2,%o0
ld src32addr,%o5
sethi %hi(L2000005),%o1
or %o1,%lo(L2000005),%o1 ! [internal]
ld [Rop+%o1],%o0
jmp %o0
! nop
mov %l7,%i4
L2000005:
.word L77146
.word L77150
.word L77154
.word L77158
! b LY37
! st %o4,dst32addr
! cmp Rdst32rbit,31
L77166:
! mov %l7,%i4
L77167:
deccc %i4
bneg,a LY37
st %o4,dst32addr
! cmp Rdst32rbit,31
! ld src32addr,%o1
! ld dst32addr,%o5
ld [%o5],%o0
inc 4,%o5
srl %o0,RsrcRshift,%o2
or %i3,%o2,%o2
! st %o1,src32addr
st %o2,[%o4]
! ld dst32addr,%o7
sll %o0,%i1,%i3
! inc 4,%o4
b L77167
inc 4,%o4
! st %o7,dst32addr
L77170:
! mov %l7,%i4
L77171:
deccc %i4
bneg,a LY37
st %o4,dst32addr
! cmp Rdst32rbit,31
! ld src32addr,%o2
! ld dst32addr,%o7
ld [%o5],%o1
inc 4,%o5
srl %o1,RsrcRshift,%o3
or %i3,%o3,%o3
! st %o2,src32addr
ld [%o4],%o0
sll %o1,%i1,%i3
and %o0,%o3,%o0
st %o0,[%o4]
! ld dst32addr,%o3
! inc 4,%o4
b L77171
inc 4,%o4
! st %o3,dst32addr
L77174:
! mov %l7,%i4
L77175:
deccc %i4
bneg,a LY37
st %o4,dst32addr
! cmp Rdst32rbit,31
! ld src32addr,%o7
! ld dst32addr,%o3
ld [%o5],%o7
inc 4,%o5
srl %o7,RsrcRshift,%o0
or %i3,%o0,%o0
! st %o7,src32addr
ld [%o4],%o1
sll %o7,%i1,%i3
or %o1,%o0,%o1
st %o1,[%o4]
! ld dst32addr,%o0
! inc 4,%o4
b L77175
inc 4,%o4
! st %o0,dst32addr
L77178:
! mov %l7,%i4
L77179:
deccc %i4
bneg,a LY37
st %o4,dst32addr
! cmp Rdst32rbit,31
! ld src32addr,%o3
! ld dst32addr,%o0
ld [%o5],%o2
inc 4,%o5
srl %o2,RsrcRshift,%o3
or %i3,%o3,%o3
! st %o3,src32addr
ld [%o4],%o1
sll %o2,%i1,%i3
xor %o1,%o3,%o1
st %o1,[%o4]
! ld dst32addr,%o4
! inc 4,%o4
b L77179
inc 4,%o4
! st %o4,dst32addr
L77190:
ld src_comp,%o4
b LY17
tst %o4
LY44: ! [internal]
cmp %o7,Rdst32rbit
bge,a LY36
cmp %o7,Rdst32rbit
ld w,%o1
add Rdst32lbit,1,%o0
add Rsrc32lbit,%o1,%o1
cmp %o1,%o0
ble,a LY36
cmp %o7,Rdst32rbit
ld src32addr,%o3
ld [%o3],%i3
dec 4,%o3
st %o3,src32addr
ld [%o3],%o2
srl %i3,RsrcRshift,%i3
and %i3,RsrcRmask,%i3
sll %o2,%i1,%i5
or %i3,%i5,%i5
srl %o2,RsrcRshift,%i3
dec 4,%o3
and %i3,RsrcRmask,%i3
b LY21
st %o3,src32addr
LY36: ! [internal]
bl,a LY35
ld src32addr,%o3
ld src32addr,%o4
ld [%o4],%i3
dec 4,%o4
sll %i3,%i1,%i5
srl %i3,RsrcRshift,%i3
st %o4,src32addr
b LY21
and %i3,RsrcRmask,%i3
LY35: ! [internal]
ld [%o3],%i5
dec 4,%o3
srl %i5,RsrcRshift,%i5
and %i5,RsrcRmask,%i5
st %o3,src32addr
LY21: ! [internal]
ld src_comp,%o7
tst %o7
be,a LY34
ld w,%o1
xor %i5,-1,%i5
ld w,%o1
LY34: ! [internal]
add Rdst32lbit,%o1,%o1
cmp %o1,32
bg,a LY33
ld dst32addr,%i4
b L77305
ld sdw_mask,%i0
LY33: ! [internal]
! cmp Rop,3
ld [%i4],%i4
! sll Rop,2,%o0
! bgu L77212
andn %i4,Rpreloop_mask,%i0
sethi %hi(L2000007),%o1
or %o1,%lo(L2000007),%o1 ! [internal]
ld [Rop+%o1],%o0
jmp %o0
! nop
b L77212
L2000007:
.word L77206
.word L77207
.word L77208
.word L77209
L77206:
! b L77212
mov %i5,%i4
L77207:
! b L77212
and %i4,%i5,%i4
L77208:
! b L77212
or %i4,%i5,%i4
L77209:
xor %i4,%i5,%i4
L77212:
ld dst32addr,%o4 ! o4 = dst32addr
ld src32addr,%o5 ! o5 = src32addr
and %i4,Rpreloop_mask,%i4
or %i4,%i0,%i4
st %i4,[%o4]
! ld dst32addr,%o4
cmp Rsrc32lbit,Rdst32lbit
dec 4,%o4
bne L77255
st %o4,dst32addr
ld src_comp,%o3
tst %o3
bne LY32
! cmp Rop,3
! bgu L77297
! sll Rop,2,%o0
sethi %hi(L2000009),%o1
or %o1,%lo(L2000009),%o1 ! [internal]
ld [Rop+%o1],%o0
jmp %o0
! nop
mov %l7,%i5
L2000009:
.word L77235
.word L77239
.word L77243
.word L77247
L77215:
! mov %l7,%i5
L77216:
deccc %i5
bneg,a LY29
st %o4,dst32addr
! tst Rdst32lbit
! ld src32addr,%o4
! ld dst32addr,%o0
ld [%o5],%o1
xor %o1,-1,%o1
st %o1,[%o4]
! ld src32addr,%o1
! ld dst32addr,%o2
dec 4,%o5
! st %o1,src32addr
b L77216
dec 4,%o4
! st %o2,dst32addr
L77219:
! mov %l7,%i5
L77220:
deccc %i5
bneg,a LY29
st %o4,dst32addr
! tst Rdst32lbit
! ld src32addr,%o3
! ld dst32addr,%o5
ld [%o5],%o3
ld [%o4],%o7
andn %o7,%o3,%o7
st %o7,[%o4]
! ld src32addr,%o2
! ld dst32addr,%o3
dec 4,%o4
! st %o2,src32addr
b L77220
dec 4,%o5
! st %o3,dst32addr
L77223:
! mov %l7,%i5
L77224:
deccc %i5
bneg,a LY29
st %o4,dst32addr
! tst Rdst32lbit
! ld src32addr,%o4
! ld dst32addr,%o7
ld [%o5],%o1
ld [%o4],%o0
orn %o0,%o1,%o0
st %o0,[%o4]
! ld src32addr,%o3
! ld dst32addr,%o4
dec 4,%o5
! st %o3,src32addr
b L77224
dec 4,%o4
! st %o4,dst32addr
L77227:
! mov %l7,%i5
L77228:
deccc %i5
bneg,a LY29
st %o4,dst32addr
! tst Rdst32lbit
! ld src32addr,%o5
! ld dst32addr,%o0
ld [%o5],%o0
ld [%o4],%o1
xnor %o1,%o0,%o1
st %o1,[%o4]
! ld src32addr,%o4
! ld dst32addr,%o5
dec 4,%o4
! st %o4,src32addr
b L77228
dec 4,%o5
! st %o5,dst32addr
LY32: ! [internal]
! bgu L77297
! sll Rop,2,%o0
ld dst32addr,%o4
ld src32addr,%o5
sethi %hi(L2000008),%o1
or %o1,%lo(L2000008),%o1 ! [internal]
ld [Rop+%o1],%o0
jmp %o0
! nop
mov %l7,%i5
L2000008:
.word L77215
.word L77219
.word L77223
.word L77227
L77235:
! mov %l7,%i5
L77236:
deccc %i5
bneg,a LY29
st %o4,dst32addr
! tst Rdst32lbit
! ld src32addr,%o0
! ld dst32addr,%o7
ld [%o5],%o0
st %o0,[%o4]
! ld src32addr,%o2
! ld dst32addr,%o3
dec 4,%o4
! dec 4,%o5
! st %o2,src32addr
b L77236
dec 4,%o5
! st %o3,dst32addr
L77239:
! mov %l7,%i5
L77240:
deccc %i5
bneg,a LY29
st %o4,dst32addr
! tst Rdst32lbit
! ld src32addr,%o4
! ld dst32addr,%o7
ld [%o5],%o2
ld [%o4],%o0
and %o0,%o2,%o0
st %o0,[%o4]
! ld src32addr,%o3
! ld dst32addr,%o4
dec 4,%o5
! dec 4,%o4
! st %o3,src32addr
b L77240
dec 4,%o4
! st %o4,dst32addr
L77243:
! mov %l7,%i5
L77244:
deccc %i5
bneg,a LY29
st %o4,dst32addr
! tst Rdst32lbit
! ld src32addr,%o5
! ld dst32addr,%o0
ld [%o5],%o2
ld [%o4],%o1
or %o1,%o2,%o1
st %o1,[%o4]
! ld src32addr,%o4
! ld dst32addr,%o5
dec 4,%o4
! dec 4,%o5
! st %o4,src32addr
b L77244
dec 4,%o5
! st %o5,dst32addr
L77247:
! sub %l7,1,%i5
! tst %i5
deccc %i5
bl,a LY29
st %o4,dst32addr
! tst Rdst32lbit
LY11: ! [internal]
! ld src32addr,%o7
! ld dst32addr,%o1
ld [%o5],%o7
ld [%o4],%o2
deccc %i5
xor %o2,%o7,%o2
st %o2,[%o4]
! ld src32addr,%o5
! ld dst32addr,%o7
dec 4,%o5
! dec 4,%o4
! st %o5,src32addr
bpos LY11
dec 4,%o4
! st %o7,dst32addr
!L77297:
! tst Rdst32lbit
st %o4,dst32addr
LY29: ! [internal]
st %o5,src32addr
tst Rdst32lbit
be,a LY31
ld gray,%o2
cmp Rsrc32lbit,Rdst32lbit
bl,a L77301
mov %i3,%i5
ld src32addr,%i5
ld [%i5],%i5
sll %i5,%i1,%i5
b L77301
or %i3,%i5,%i5
L77255:
ld src_comp,%o0
tst %o0
bne LY30
! cmp Rop,3
! bgu L77297
! sll Rop,2,%o0
ld dst32addr,%o4
ld src32addr,%o5
sethi %hi(L2000011),%o1
or %o1,%lo(L2000011),%o1 ! [internal]
ld [Rop+%o1],%o0
jmp %o0
! nop
mov %l7,%i4
L2000011:
.word L77277
.word L77281
.word L77285
.word L77289
L77257:
! mov %l7,%i4
L77258:
deccc %i4
bneg,a LY29
st %o4,dst32addr
! tst Rdst32lbit
! ld src32addr,%o3
! ld dst32addr,%o1
ld [%o5],%o2
dec 4,%o5
sll %o2,%i1,%o3
or %i3,%o3,%o3
xor %o3,-1,%o3
! st %o3,src32addr
st %o3,[%o1]
srl %o2,RsrcRshift,%i3
! ld dst32addr,%o2
b L77258
dec 4,%o4
! st %o2,dst32addr
L77261:
! mov %l7,%i4
L77262:
deccc %i4
bneg,a LY29
st %o4,dst32addr
! tst Rdst32lbit
! ld src32addr,%o5
! ld dst32addr,%o3
ld [%o5],%o3
dec 4,%o5
sll %o4,%i1,%o7
or %i3,%o7,%o7
srl %o3,RsrcRshift,%i3
! st %o5,src32addr
ld [%o4],%o3
xor %o7,-1,%o7
and %o3,%o7,%o3
st %o3,[%o4]
! ld dst32addr,%o0
b L77262
dec 4,%o4
! st %o0,dst32addr
L77265:
! mov %l7,%i4
L77266:
deccc %i4
bneg,a LY29
st %o4,dst32addr
! tst Rdst32lbit
! ld src32addr,%o3
! ld dst32addr,%o1
ld [%o5],%o2
dec 4,%o5
sll %o2,%i1,%o3
or %i3,%o4,%o3
srl %o2,RsrcRshift,%i3
! st %o3,src32addr
ld [%o4],%o2
xor %o3,-1,%o3
or %o2,%o3,%o2
st %o2,[%o4]
! ld dst32addr,%o5
b L77266
dec 4,%o4
! st %o5,dst32addr
L77269:
! mov %l7,%i4
L77270:
deccc %i4
bneg,a LY29
st %o4,dst32addr
! tst Rdst32lbit
! ld src32addr,%o1
! ld dst32addr,%o7
ld [%o5],%o0
dec 4,%o5
sll %o0,%i1,%o2
or %i3,%o2,%o2
srl %o0,RsrcRshift,%i3
! st %o1,src32addr
ld [%o4],%o0
xor %o2,-1,%o2
xor %o0,%o2,%o0
st %o0,[%o4]
! ld dst32addr,%o3
b L77270
dec 4,%o4
! st %o3,dst32addr
LY30: ! [internal]
! bgu L77297
! sll Rop,2,%o0
ld dst32addr,%o4
ld src32addr,%o5
sethi %hi(L2000010),%o1
or %o1,%lo(L2000010),%o1 ! [internal]
ld [Rop+%o1],%o0
jmp %o0
! nop
mov %l7,%i4
L2000010:
.word L77257
.word L77261
.word L77265
.word L77269
! b LY29
! tst Rdst32lbit
L77277:
! mov %l7,%i4
L77278:
deccc %i4
bneg,a LY29
st %o4,dst32addr
! tst Rdst32lbit
! ld src32addr,%o7
! ld dst32addr,%o3
ld [%o5],%o7
dec 4,%o5
sll %o7,%i1,%o0
or %i3,%o0,%o0
! st %o7,src32addr
st %o0,[%o4]
! ld dst32addr,%o4
srl %o7,RsrcRshift,%i3
b L77278
dec 4,%o4
! st %o4,dst32addr
L77281:
! mov %l7,%i4
L77282:
deccc %i4
bneg,a LY29
st %o4,dst32addr
! tst Rdst32lbit
! ld src32addr,%o0
! ld dst32addr,%o4
ld [%o5],%o7
dec 4,%o5
sll %o7,%i1,%o1
or %i3,%o1,%o1
!st %o0,src32addr
ld [%o4],%o2
srl %o7,RsrcRshift,%i3
and %o2,%o1,%o2
st %o2,[%o4]
! ld dst32addr,%o1
b L77282
dec 4,%o4
! st %o1,dst32addr
L77285:
! mov %l7,%i4
L77286:
deccc %i4
bneg,a LY29
st %o4,dst32addr
! tst Rdst32lbit
! ld src32addr,%o4
! ld dst32addr,%o1
ld [%o5],%o3
dec 4,%o5
sll %o3,%i1,%o1
or %i3,%o1,%o1
! st %o4,src32addr
ld [%o4],%o2
srl %o3,RsrcRshift,%i3
or %o2,%o1,%o2
st %o2,[%o4]
! ld dst32addr,%o1
b L77286
dec 4,%o4
! st %o5,dst32addr
L77289:
! mov %l7,%i4
L77290:
deccc %i4
bneg,a LY29
st %o4,dst32addr
! tst Rdst32lbit
! ld src32addr,%o1
! ld dst32addr,%o5
ld [%o5],%o0
dec 4,%o5
sll %o0,%i1,%o2
or %i3,%o2,%o2
! st %o1,src32addr
ld [%o4],%o7
srl %o0,RsrcRshift,%i3
xor %o7,%o2,%o7
st %o7,[%o4]
! ld dst32addr,%o2
b L77290
dec 4,%o4
! st %o2,dst32addr
L77301:
ld src_comp,%o0
tst %o0
LY17: ! [internal]
be,a L77305
mov Rpostloop_mask,%i0
xor %i5,-1,%i5
mov Rpostloop_mask,%i0
L77305:
ld dst32addr,%i4
! cmp Rop,3
ld [%i4],%i4
! sll Rop,2,%o0
andn %i4,%i0,%o4
! bgu L77312
! st %o4,[%fp-40]
sethi %hi(L2000012),%o1
or %o1,%lo(L2000012),%o1 ! [internal]
ld [Rop+%o1],%o0
jmp %o0
! nop
b L77312
L2000012:
.word L77306
.word L77307
.word L77308
.word L77309
L77306:
! b L77312
mov %i5,%i4
L77307:
! b L77312
and %i4,%i5,%i4
L77308:
! b L77312
or %i4,%i5,%i4
L77309:
xor %i4,%i5,%i4
L77312:
! ld [%fp-40],%o7
ld dst32addr,%o1
and %i4,%i0,%i4
! or %i4,%o7,%i4
or %i4,%o4,%i4
st %i4,[%o1]
ld gray,%o2
LY31: ! [internal]
tst %o2
be,a LY28
ld fwd,%o7
ld bb_fast,%o3
tst %o3
be,a LY27
ld dstbpl,%o2
ld dstbpl_rshift_3,%o5
ld OrigDstAddr,%o4
add %o4,%o5,%o4
st %o4,dst32addr
b L77320
st %o4,OrigDstAddr
LY27: ! [internal]
ld OrigDstAddr,%o1
ld w,%l7
add Rdst32lbit,%o2,Rdst32lbit
sra Rdst32lbit,5,%o7
and Rdst32lbit,31,Rdst32lbit
sll %o7,2,%o7
add %o1,%o7,%o7
add Rdst32lbit,%l7,%l7
sub %l7,1,Rdst32rbit
tst Rdst32lbit
st %o1,dst32addr
st %o7,OrigDstAddr
and Rdst32rbit,31,Rdst32rbit
be L77318
st %o7,dst32addr
mov 32,%o0
sub %o0,Rdst32lbit,%o0
mov -1,%i5
sll %i5,%o0,%i5
b L77319
xor %i5,-1,%i5
L77318:
mov -1,%i5
L77319:
mov 31,%o7
sub %o7,Rdst32rbit,%o7
mov -1,Rpostloop_mask
sll Rpostloop_mask,%o7,Rpostloop_mask
mov %i5,Rpreloop_mask
and Rpreloop_mask,Rpostloop_mask,%o4
sra %l7,5,%l7
dec %l7
st %o4,sdw_mask
L77320:
ld curr_gray_line,%o0
ld num_gray,%o2
inc %o0
cmp %o0,%o2
bl L77322
st %o0,curr_gray_line
ld srcbase,%o4
ld num_gray_1,%o3
st %g0,curr_gray_line
sub %o4,%o3,%o4
b L77047
st %o4,srcbase
L77322:
ld srcbase,%o5
inc 2,%o5
b L77047
st %o5,srcbase
LY28: ! [internal]
tst %o7
be,a LY26
ld bb_fast,%o2
ld bb_fast,%o0
tst %o0
be,a LY25
ld dstbpl,%o7
ld dstbpl_rshift_3,%o2
ld OrigDstAddr,%o1
add %o1,%o2,%o1
st %o1,dst32addr
b L77331
st %o1,OrigDstAddr
LY25: ! [internal]
ld OrigDstAddr,%o5
ld w,%l7
add Rdst32lbit,%o7,Rdst32lbit
sra Rdst32lbit,5,%o3
and Rdst32lbit,31,Rdst32lbit
sll %o3,2,%o3
add %o5,%o3,%o3
add Rdst32lbit,%l7,%l7
sub %l7,1,Rdst32rbit
tst Rdst32lbit
st %o5,dst32addr
st %o3,OrigDstAddr
and Rdst32rbit,31,Rdst32rbit
be L77329
st %o3,dst32addr
mov 32,%o4
sub %o4,Rdst32lbit,%o4
mov -1,%i5
sll %i5,%o4,%i5
b L77330
xor %i5,-1,%i5
L77329:
mov -1,%i5
L77330:
mov 31,%o3
sub %o3,Rdst32rbit,%o3
mov -1,Rpostloop_mask
sll Rpostloop_mask,%o3,Rpostloop_mask
mov %i5,Rpreloop_mask
and Rpreloop_mask,Rpostloop_mask,%o1
sra %l7,5,%l7
dec %l7
st %o1,sdw_mask
L77331:
tst %o0
be,a LY24
ld srcbpl,%o3
ld srcbpl_rshift_3,%o7
ld OrigSrcAddr,%o5
add %o5,%o7,%o5
st %o5,src32addr
b L77047
st %o5,OrigSrcAddr
LY24: ! [internal]
ld OrigSrcAddr,%o2
add Rsrc32lbit,%o3,Rsrc32lbit
ld w,%o3
sra Rsrc32lbit,5,%o0
and Rsrc32lbit,31,Rsrc32lbit
add Rsrc32lbit,%o3,%o3
sub Rsrc32lbit,Rdst32lbit,%i1
sll %o0,2,%o0
add %o2,%o0,%o0
and %i1,31,%i1
dec %o3
and %o3,31,%o3
tst %i1
sub Rdst32lbit,Rsrc32lbit,RsrcRshift
st %o2,src32addr
st %o0,OrigSrcAddr
st %o3,src32rbit
and RsrcRshift,31,RsrcRshift
be L77335
st %o0,src32addr
mov -1,%i5
sll %i5,%i1,%i5
b L77336
xor %i5,-1,%i5
L77335:
mov -1,%i5
L77336:
b L77047
mov %i5,RsrcRmask
LY26: ! [internal]
tst %o2
be,a LY23
ld dstbpl,%i5
ld dstbpl_rshift_3,%o4
ld OrigDstAddr,%o3
add %o3,%o4,%o3
st %o3,dst32addr
b L77347
st %o3,OrigDstAddr
LY23: ! [internal]
ld OrigDstAddr,%o0
add Rdst32rbit,%i5,%i5
tst %i5
bge L77342
st %o0,dst32addr
mov 31,%l7
sub %l7,%i5,%l7
sra %l7,5,%l7
sll %l7,2,%l7
sub %o0,%l7,%o0
b L77343
st %o0,dst32addr
L77342:
sra Rdst32lbit,5,Rdst32lbit
sll Rdst32lbit,2,Rdst32lbit
add %o0,Rdst32lbit,Rdst32lbit
st Rdst32lbit,dst32addr
L77343:
ld w,Rdst32lbit
ld dst32addr,%o4
and %i5,31,Rdst32rbit
ld w,%i5
sub Rdst32rbit,Rdst32lbit,Rdst32lbit
inc Rdst32lbit
! and Rdst32lbit,31,Rdst32lbit
andcc Rdst32lbit,31,Rdst32lbit
be Ldst0b
mov -1,Rpostloop_mask
mov 32,%o3
sub %o3,Rdst32lbit,%o3
mov 31,%o5
sub %o5,Rdst32rbit,%o5
sll Rpostloop_mask,%o3,Rpostloop_mask
xor Rpostloop_mask,-1,Rpostloop_mask ! from below
Ldst0b: sub %i5,Rdst32rbit,%i5
mov -1,Rpreloop_mask
sll Rpreloop_mask,%o5,Rpreloop_mask
dec %i5
! xor Rpostloop_mask,-1,Rpostloop_mask
and Rpreloop_mask,Rpostloop_mask,%o2
tst %i5
st %o4,OrigDstAddr
ble L77345
st %o2,sdw_mask
b L77346
sra %i5,5,%i5
L77345:
mov 0,%i5
L77346:
mov %i5,%l7
L77347:
ld bb_fast,%o0
tst %o0
be,a LY22
ld srcbpl,%i1
ld srcbpl_rshift_3,%o2
ld OrigSrcAddr,%o1
add %o1,%o2,%o1
st %o1,src32addr
b L77047
st %o1,OrigSrcAddr
LY22: ! [internal]
ld src32rbit,%o7 ! src32rbit loaded
ld OrigSrcAddr,%o5
add %o7,%i1,%i1
tst %i1
bge L77351
st %o5,src32addr
mov 31,%i2
sub %i2,%i1,%i2
sra %i2,5,%i2
sll %i2,2,%i2
sub %o5,%i2,%o5
b L77352
st %o5,src32addr
L77351:
sra %i1,5,%o3
sll %o3,2,%o3
add %o5,%o3,%o3
st %o3,src32addr
L77352:
ld w,Rsrc32lbit
and %i1,31,%i1
sub %i1,Rsrc32lbit,Rsrc32lbit
inc Rsrc32lbit
and Rsrc32lbit,31,Rsrc32lbit
st %i1,src32rbit
sub Rsrc32lbit,Rdst32lbit,%i1
and %i1,31,%i1
tst %i1
sub Rdst32lbit,Rsrc32lbit,RsrcRshift
be L77354
and RsrcRshift,31,RsrcRshift
mov -1,%i5
sll %i5,%i1,%i5
b L77355
xor %i5,-1,%i5
L77354:
mov 0,%i5
L77355:
ld src32addr,%o5
mov %i5,RsrcRmask
st %o5,OrigSrcAddr
L77047:
ld num_lines_remaining,%i5
ld num_lines_remaining,%o3
tst %i5
dec %o3
bg LY8
st %o3,num_lines_remaining
LY1: ! [internal]
ret
restore %g0,0,%o0
.seg "data" ! [internal]