⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 match.a

📁 一些关于HTTP协议处理的文档,还包括了gzip包(它是用来解压缩HTTP传送的压缩数据)
💻 A
字号:
; match.a -- optional optimized asm version of longest match in deflate.c; Copyright (C) 1992-1993 Jean-loup Gailly; This is free software; you can redistribute it and/or modify it under the; terms of the GNU General Public License, see the file COPYING. ; $Id: match.a,v 1.1 1993/03/11 16:05:57 jloup Exp $;; Adapted for the Amiga by Carsten Steger <stegerc@informatik.tu-muenchen.de>; using the code in match.S.; The major change in this code consists of removing all unaligned; word accesses, because they cause 68000-based Amigas to crash.; For maximum speed, UNALIGNED_OK can be defined in Makefile.sasc.; The program will then only run on 68020-based Amigas, though.;; This code will run with registerized parameters too, unless SAS; changes parameter passing conventions between new releases of SAS/C.Cur_Match	reg	d0	; Must be in d0!Best_Len	reg	d1Loop_Counter	reg	d2Scan_Start	reg	d3Scan_End	reg	d4Limit		reg	d5Chain_Length	reg	d6Scan_Test	reg	d7Scan		reg	a0Match		reg	a1Prev_Address	reg	a2Scan_Ini	reg	a3Match_Ini	reg	a4MAX_MATCH	equ	258MIN_MATCH	equ	3WSIZE		equ	32768MAX_DIST	equ	WSIZE-MAX_MATCH-MIN_MATCH-1	xref	_max_chain_length	xref	_prev_length	xref	_prev	xref	_window	xref	_strstart	xref	_good_match	xref	_match_start	xref	_nice_match	section match,code	xdef	_match_init	xdef	@match_init	xdef	_longest_match	xdef	@longest_match_match_init:@match_init:	rts_longest_match:	move.l	4(sp),Cur_Match@longest_match:	ifd	UNALIGNED_OK	movem.l	d2-d6/a2-a4,-(sp)	else	movem.l	d2-d7/a2-a4,-(sp)	endc	move.l	_max_chain_length,Chain_Length	move.l	_prev_length,Best_Len	lea	_prev,Prev_Address	lea	_window+MIN_MATCH,Match_Ini	move.l	_strstart,Limit	move.l	Match_Ini,Scan_Ini	add.l	Limit,Scan_Ini	subi.w	#MAX_DIST,Limit	bhi.b	limit_ok	moveq	#0,Limitlimit_ok:	cmp.l	_good_match,Best_Len	bcs.b	length_ok	lsr.l	#2,Chain_Lengthlength_ok:	subq.l	#1,Chain_Length	ifd	UNALIGNED_OK	move.w	-MIN_MATCH(Scan_Ini),Scan_Start	move.w	-MIN_MATCH-1(Scan_Ini,Best_Len),Scan_End	else	move.b	-MIN_MATCH(Scan_Ini),Scan_Start	lsl.w	#8,Scan_Start	move.b	-MIN_MATCH+1(Scan_Ini),Scan_Start	move.b	-MIN_MATCH-1(Scan_Ini,Best_Len),Scan_End	lsl.w	#8,Scan_End	move.b	-MIN_MATCH(Scan_Ini,Best_Len),Scan_End	endc	bra.b	do_scanlong_loop:	ifd	UNALIGNED_OK	move.w	-MIN_MATCH-1(Scan_Ini,Best_Len),Scan_End	else	move.b	-MIN_MATCH-1(Scan_Ini,Best_Len),Scan_End	lsl.w	#8,Scan_End	move.b	-MIN_MATCH(Scan_Ini,Best_Len),Scan_End	endcshort_loop:	lsl.w	#1,Cur_Match	move.w	0(Prev_Address,Cur_Match),Cur_Match	cmp.w	Limit,Cur_Match	dbls	Chain_Length,do_scan	bra.b	returndo_scan:	move.l	Match_Ini,Match	add.l	Cur_Match,Match	ifd	UNALIGNED_OK	cmp.w	-MIN_MATCH-1(Match,Best_Len),Scan_End	bne.b	short_loop	cmp.w	-MIN_MATCH(Match),Scan_Start	bne.b	short_loop	else	move.b	-MIN_MATCH-1(Match,Best_Len),Scan_Test	lsl.w	#8,Scan_Test	move.b	-MIN_MATCH(Match,Best_Len),Scan_Test	cmp.w	Scan_Test,Scan_End	bne.b	short_loop	move.b	-MIN_MATCH(Match),Scan_Test	lsl.w	#8,Scan_Test	move.b	-MIN_MATCH+1(Match),Scan_Test	cmp.w	Scan_Test,Scan_Start	bne.b	short_loop	endc	move.w	#(MAX_MATCH-MIN_MATCH),Loop_Counter	move.l	Scan_Ini,Scanscan_loop:	cmpm.b	(Match)+,(Scan)+	dbne	Loop_Counter,scan_loop	sub.l	Scan_Ini,Scan	addq.l	#(MIN_MATCH-1),Scan	cmp.l	Best_Len,Scan	bls.b	short_loop	move.l	Scan,Best_Len	move.l	Cur_Match,_match_start	cmp.l	_nice_match,Best_Len	bcs.b	long_loopreturn:	move.l	Best_Len,d0	ifd	UNALIGNED_OK	movem.l	(sp)+,d2-d6/a2-a4	else	movem.l	(sp)+,d2-d7/a2-a4	endc	rts	end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -