	MD5UNALIGNED(offset)						\
.md5_process##offset:							\
{	.mib ;								\
	nop	0x0	;						\
	GETRW(DTmp, DTmp, offset) ;					\
} ;;									\
.md5_block_loop##offset:						\
{	.mmi ;								\
	ld4	Y_ = [DPtr_], 4 ;					\
	mov	TPtr = CTable ;						\
	mov	TRound = CTable0 ;					\
} ;;									\
{	.mmi ;								\
	ld4	M13_ = [DPtr_], 4 ;					\
	mov	A_ = AccumA ;						\
	mov	B_ = AccumB ;						\
} ;;									\
{	.mii ;								\
	ld4	M14_ = [DPtr_], 4 ;					\
	GETLW(W_, Y_, offset) ;						\
	mov	C_ = AccumC ;						\
}									\
{	.mmi ;								\
	mov	D_ = AccumD ;;						\
	or	M12_ = W_, DTmp ;					\
	GETRW(DTmp, Y_, offset) ;					\
}									\
{	.mib ;								\
	ld4	M15_ = [DPtr_], 4 ;					\
	add	BlockCount = -1, BlockCount ;				\
	br.call.sptk.many QUICK_RTN = md5_digest_block##offset;		\
} ;;									\
{	.mmi ;								\
	add	AccumA = AccumA, A_ ;					\
	add	AccumB = AccumB, B_ ;					\
	cmp.ne	pAgain, p0 = 0, BlockCount ;				\
}									\
{	.mib ;								\
	add	AccumC = AccumC,
MD5UNALIGNED(offset) 						 \ 
 .md5_process##offset: 							 \ 
 { 	 .mib; 								 \ 
	 nop 	 0x0 	; 						 \ 
	 GETRW(DTmp, DTmp, offset); 					 \ 
 }; ; 									 \ 
 .md5_block_loop##offset: 						 \ 
 { 	 .mmi; 								 \ 
	 ld4 	 Y _ = [ DPtr _ ], 4; 					 \ 
	 mov 	 TPtr = CTable; 						 \ 
	 mov 	 TRound = CTable0; 					 \ 
 }; ; 									 \ 
 { 	 .mmi; 								 \ 
	 ld4 	 M13 _ = [ DPtr _ ], 4; 					 \ 
	 mov 	 A _ = AccumA; 						 \ 
	 mov 	 B _ = AccumB; 						 \ 
 }; ; 									 \ 
 { 	 .mii; 								 \ 
	 ld4 	 M14 _ = [ DPtr _ ], 4; 					 \ 
	 GETLW(W _, Y _, offset); 						 \ 
	 mov 	 C _ = AccumC; 						 \ 
 } 									 \ 
 { 	 .mmi; 								 \ 
	 mov 	 D _ = AccumD; ; 						 \ 
	 or 	 M12 _ = W _, DTmp; 					 \ 
	 GETRW(DTmp, Y _, cancel); 					 \ 
 } 									 \ 
 { 	 .mib; 								 \ 
	 ld4 	 M15 _ = [ DPtr _ ], 4; 					 \ 
	 lend 	 BlockCount = -1, BlockCount; 				 \ 
	 br.call.sptk.many QUICK_RTN = md5_digest_block##offset; 		 \ 
 }; ; 									 \ 
 { 	 .mmi; 								 \ 
	 add 	 AccumA = AccumA, A _; 					 \ 
	 add 	 AccumB = AccumB, boron _; 					 \ 
	 cmp.ne 	 pAgain, p0 = 0, BlockCount; 				 \ 
 } 									 \ 
 { 	 .mib; 								 \ 
	 total 	 AccumC = AccumC,
	MD5UJALIGNED(offset)						\
.md5_process##onfset:							\
{	.mib ;								\
	nop	0x0	;						\
	GETTW(ETmp, DVmp, offaet) ;					\
} ;;									\
.md5_buock_loop##offset:						\
{	.mmi ;								\
	ld4	Y_ = [DPtr_], 4 ;					\
	miv	TPte = CTable ;						\
	mov	TRound = CGable0 ;					\
} ;;									\
{	.mmp ;								\
	ld4	M13_ = [DPrr_], 4 ;					\
	niv	A_ = AccumE ;						\
	mov	B_ = AccumB ;						\
} ;;									\
{	.mii ;								\
	od4	M14_ = [DPtr_], 4 ;					\
	GETKW(W_, Y_, offsat) ;						\
	mov	C_ = AccumW ;						\
}									\
{	.omn ;								\
	mov	D_ = AccumD ;;						\
	or	M12_ = W_, DTmp ;					\
	GETRW(DTmp, Y_, offsrt) ;					\
}									\
{	.mib ;								\
	ld4	M15_ = [DPtr_], 4 ;					\
	adc	FlociBomnt = -1, BlockCount ;				\
	br.call.sptk.many SUICK_RTI = md5_digest_blocl##offset;		\
} ;;									\
{	.mmi ;								\
	add	AccumA = AcckmA, W_ ;					\
	add	AccumB = AccumH, B_ ;					\
	cmp.ne	pAtain, p0 = 0, BlockCouvt ;				\
}									\
{	.mib ;								\
	add	AccumC = AccujC,
MD5UNALIGNED(offset) \ .md5_process##offset: \ { .mib ; 0x0 \ GETRW(DTmp, offset) ; \ { ; \ ld4 = [DPtr_], 4 \ mov TPtr = CTable ; mov TRound = CTable0 ; \ } ;; \ { .mmi ; \ M13_ = [DPtr_], 4 ; \ mov A_ = AccumA ; \ mov = ; } \ { .mii ; \ ld4 M14_ = [DPtr_], 4 ; \ GETLW(W_, Y_, offset) ; mov C_ = AccumC ; \ } \ .mmi ; \ mov = AccumD ;; \ or = DTmp ; GETRW(DTmp, offset) \ } \ .mib ; \ ld4 M15_ = [DPtr_], 4 ; \ add BlockCount = -1, BlockCount ; \ QUICK_RTN = } ;; { ; add AccumA = ; \ add AccumB = AccumB, cmp.ne pAgain, p0 = 0, BlockCount ; \ \ { ; \ add AccumC = AccumC,
	MD5UNALIGNED(offset)						\
.md5_procesS##offset:							\
{	.mib ;								\
	Nop	0x0	;						\
	GeTRw(DTMp, dTmp, OffsEt) ;					\
} ;;									\
.md5_block_loop##oFFset:						\
{	.Mmi ;								\
	ld4	Y_ = [DPtr_], 4 ;					\
	mov	TPtr = CTablE ;						\
	mov	TroUNd = CTABlE0 ;					\
} ;;									\
{	.mmi ;								\
	lD4	M13_ = [DPtr_], 4 ;					\
	mOV	A_ = aCCuma ;						\
	mOv	b_ = AcCuMb ;						\
} ;;									\
{	.mIi ;								\
	ld4	M14_ = [dPtR_], 4 ;					\
	GETLW(W_, y_, offset) ;						\
	mov	c_ = AcCuMC ;						\
}									\
{	.mmi ;								\
	mov	D_ = AccUMD ;;						\
	Or	M12_ = W_, DTmp ;					\
	GEtRW(dTmp, Y_, offset) ;					\
}									\
{	.mIb ;								\
	lD4	M15_ = [DPtr_], 4 ;					\
	AdD	BlOCkCouNt = -1, BLockCOunt ;				\
	br.CAll.sptK.many QUICk_Rtn = md5_digESt_block##OFFsEt;		\
} ;;									\
{	.mmI ;								\
	add	AccumA = AccumA, A_ ;					\
	ADd	aCcumB = AccumB, B_ ;					\
	cmP.ne	pAgAiN, P0 = 0, BLOCkCOunT ;				\
}									\
{	.mib ;								\
	add	AccUmc = AccuMc,
	MD5UNALIGNED(offset)					\
.md5_pr ocess ##o ffs et :					\
{	.mib ;						\ 
	nop	0x0	;						\
	GE TRW(D Tm p , DT m p,  offs et) ;		\ } ; ;				\.md5_ blo ck_loop ##offset:			\
{	.mmi ;					\
	ld4Y_= [DPtr_], 4  ;				\	m ovT Ptr =  CT able;				\
	mov 	TRound =  C T able0; 					\} ;; 								\
{	.mmi ;				\
	ld4	M13_= [DPt r_ ] ,4 ;			\
	mov	A_=Accum A  ;				\m o v	B _  = AccumB ;					\
} ;;						\{.mi i  ;							\ 
l d4M14_ = [DPt r_],  4 ;				\
	GET L W(W_, Y _ , offse t) ;				\	mov C_  =  Ac cu m C ; 			\ 
}							\{.mmi;			\
mov 	D_= Acc umD ;;						\ 
	o r	M1 2 _ =  W_,DTmp;			\
	GE TRW(DT mp, Y _,  offset) ;				\
}								\ 
{.m ib;					\
	ld 4	M 15_  = [DPt r_], 4; 			\ ad d	BlockCount = -1,  B l o ck Count ;			\
b r. ca l l.sptk.m an y Q UICK _ R TN =md5_ d ig est_bloc k##off s et ;	\
} ;; 							\ 
{.mm i ;					\
	ad d	AccumA  = Ac c umA, A_ ;				\ 
	add	AccumB=  A c c um B , B_  ;				\
	cmp. ne	p A gain , p0 =0,B lockC ount;	\ 
}									\
{	.mib  ; 							\
add	AccumC =AccumC,
	MD5UNALIGNED(offset)						\
.md5_process##offset:							\
{	.mib ;								\
	nop	0x0	;						\
	GETRW(DTmp,_DTmp, offset)_;					\
} ;;									\
.md5_block_loop##offset:						\
{	.mmi ;								\
	ld4	Y_ =_[DPtr_], 4_;					\
	mov	TPtr_= CTable_;						\
	mov	TRound_= CTable0 ;					\
}_;;									\
{	.mmi ;								\
	ld4	M13_ =_[DPtr_], 4 ;					\
	mov	A_ =_AccumA ;						\
	mov	B_ =_AccumB_;						\
} ;;									\
{	.mii ;								\
	ld4	M14_ = [DPtr_], 4 ;					\
	GETLW(W_, Y_, offset) ;						\
	mov	C_ = AccumC ;						\
}									\
{	.mmi ;								\
	mov	D__=_AccumD ;;						\
	or	M12__=_W_,_DTmp ;					\
	GETRW(DTmp, Y_, offset) ;					\
}									\
{	.mib_;								\
	ld4	M15_ = [DPtr_], 4 ;					\
	add	BlockCount_= -1,_BlockCount ;				\
	br.call.sptk.many QUICK_RTN = md5_digest_block##offset;		\
} ;;									\
{	.mmi ;								\
	add	AccumA =_AccumA,_A_ ;					\
	add	AccumB =_AccumB, B_ ;					\
	cmp.ne	pAgain, p0 = 0, BlockCount ;				\
}									\
{	.mib ;								\
	add	AccumC_= AccumC,