which included commits to RCS files with non-trunk default branches. git-svn-id: svn://10.65.10.50/trunk@5403 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			92 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			ArmAsm
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			ArmAsm
		
	
	
		
			Executable File
		
	
	
	
	
.text
 | 
						|
 | 
						|
.globl  _crc32          ; (ulg val, uch *buf, extent bufsize)
 | 
						|
.globl  _get_crc_table  ; ulg *get_crc_table(void)
 | 
						|
 | 
						|
_crc32:
 | 
						|
        move.l  8(sp),d0
 | 
						|
        bne    valid
 | 
						|
        moveq  #0,d0
 | 
						|
        rts
 | 
						|
valid:  movem.l d2/d3,-(sp)
 | 
						|
	jsr     _get_crc_table
 | 
						|
        move.l  d0,a0 
 | 
						|
        move.l  12(sp),d0 
 | 
						|
        move.l  16(sp),a1 
 | 
						|
        move.l  20(sp),d1 
 | 
						|
        not.l   d0 
 | 
						|
 | 
						|
        move.l  d1,d2 
 | 
						|
        lsr.l   #3,d1 
 | 
						|
        bra     decr8
 | 
						|
loop8:  moveq  #0,d3 
 | 
						|
	move.b (a1)+,d3 
 | 
						|
	eor.b  d0,d3
 | 
						|
	lsl.w  #2,d3
 | 
						|
	move.l 0(a0,d3.w),d3
 | 
						|
	lsr.l  #8,d0
 | 
						|
	eor.l  d3,d0  
 | 
						|
        moveq  #0,d3 
 | 
						|
	move.b (a1)+,d3 
 | 
						|
	eor.b  d0,d3 
 | 
						|
	lsl.w  #2,d3 
 | 
						|
	move.l 0(a0,d3.w),d3 
 | 
						|
	lsr.l  #8,d0 
 | 
						|
	eor.l  d3,d0  
 | 
						|
        moveq  #0,d3 
 | 
						|
	move.b (a1)+,d3 
 | 
						|
	eor.b  d0,d3 
 | 
						|
	lsl.w  #2,d3 
 | 
						|
	move.l 0(a0,d3.w),d3 
 | 
						|
	lsr.l  #8,d0 
 | 
						|
	eor.l  d3,d0  
 | 
						|
        moveq  #0,d3 
 | 
						|
	move.b (a1)+,d3 
 | 
						|
	eor.b  d0,d3 
 | 
						|
	lsl.w  #2,d3 
 | 
						|
	move.l 0(a0,d3.w),d3 
 | 
						|
	lsr.l  #8,d0 
 | 
						|
	eor.l  d3,d0  
 | 
						|
        moveq  #0,d3 
 | 
						|
	move.b (a1)+,d3 
 | 
						|
	eor.b  d0,d3 
 | 
						|
	lsl.w  #2,d3 
 | 
						|
	move.l 0(a0,d3.w),d3 
 | 
						|
	lsr.l  #8,d0 
 | 
						|
	eor.l  d3,d0  
 | 
						|
        moveq  #0,d3 
 | 
						|
	move.b (a1)+,d3 
 | 
						|
	eor.b  d0,d3 
 | 
						|
	lsl.w  #2,d3 
 | 
						|
	move.l 0(a0,d3.w),d3 
 | 
						|
	lsr.l  #8,d0 
 | 
						|
	eor.l  d3,d0  
 | 
						|
        moveq  #0,d3 
 | 
						|
	move.b (a1)+,d3 
 | 
						|
	eor.b  d0,d3 
 | 
						|
	lsl.w  #2,d3 
 | 
						|
	move.l 0(a0,d3.w),d3 
 | 
						|
	lsr.l  #8,d0 
 | 
						|
	eor.l  d3,d0  
 | 
						|
        moveq  #0,d3 
 | 
						|
	move.b	(a1)+,d3 
 | 
						|
	eor.b  d0,d3 
 | 
						|
	lsl.w  #2,d3 
 | 
						|
	move.l 0(a0,d3.w),d3 
 | 
						|
	lsr.l  #8,d0 
 | 
						|
	eor.l  d3,d0  
 | 
						|
decr8:  dbra   d1,loop8
 | 
						|
	and.w   #7,d2 
 | 
						|
        bra     decr1
 | 
						|
loop1:  moveq  #0,d3 
 | 
						|
	move.b (a1)+,d3 
 | 
						|
	eor.b  d0,d3 
 | 
						|
	lsl.w  #2,d3 
 | 
						|
	move.l 0(a0,d3.w),d3 
 | 
						|
	lsr.l  #8,d0 
 | 
						|
	eor.l  d3,d0  
 | 
						|
decr1:  dbra   d2,loop1
 | 
						|
done:   movem.l (sp)+,d2/d3 
 | 
						|
        not.l   d0 
 | 
						|
        rts
 |