亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? utility_mmx.asm

?? 一個基于Ti公司的dm642 DSP的H264編解碼算法例程
?? ASM
字號:
;/*****************************************************************************
; *
; *  T264 AVC CODEC
; *
; *  Copyright(C) 2004-2005 llcc <lcgate1@yahoo.com.cn>
; *               2004-2005 visionany <visionany@yahoo.com.cn>
; *				  2004-2005 Cloud Wu <sywu@sohu.com> 
; *		2004		CloudWu	create this file	
; *  This program is free software ; you can redistribute it and/or modify
; *  it under the terms of the GNU General Public License as published by
; *  the Free Software Foundation ; either version 2 of the License, or
; *  (at your option) any later version.
; *
; *  This program is distributed in the hope that it will be useful,
; *  but WITHOUT ANY WARRANTY ; without even the implied warranty of
; *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
; *  GNU General Public License for more details.
; *
; *  You should have received a copy of the GNU General Public License
; *  along with this program ; if not, write to the Free Software
; *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
; *
; ****************************************************************************/

bits 32

; ideal from xvid
; modify by Thomascatlee@163.com
; for GCC
%macro cglobal 1
	%ifdef NOPREFIX
		global %1
	%else
		global _%1
		%define %1 _%1
	%endif
%endmacro

; %1 = src, %2 = dest MMX reg ,%3 MMX temp register
%macro expand8to16_4_mmx 3
    movd	%2,[%1]
	movq	%3,%2
	PXOR	%3,%2
	PUNPCKLBW %2,%3
%endmacro

; %1 = src, %2 = dst
%macro contract16to8_4_mmx 2
    movq	mm0,[%1]
    packuswb mm0, mm1
    movd	[%2],mm0
%endmacro

; %1 = src, %2 = dst
%macro contract16to8_8_mmx 2
    movq	mm0,[%1]
	movq	mm1,[%1 + 8]	;fetch next 4 int16
    packuswb mm0, mm1
    movq	[%2],mm0
    ;movd   %3, %4
%endmacro

; %1 = src, %2 = pred, %3 =dst
%macro contract16to8add_4_mmx 3
    movq	mm0,[%1]
	movd	mm2,[%2]
    packuswb mm0, mm1
	movq	mm1,[%1 + 8]	;fetch next 4 int16
    packuswb mm0, mm1
    movq	[%3],mm0
%endmacro


section .text

;======================================================
;
; uint32_t 
; contract16to8_4x4_mmx(uint16_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride);
;
;======================================================

align 16

cglobal contract16to8_4x4_mmx
contract16to8_4x4_mmx    
    push ebx
    push esi
    push edi
    
    mov esi, [esp + 4 + 12]     ; src
    mov edi, [esp + 12 + 12]    ; dst
	contract16to8_8_mmx esi , edi 

	mov ebx, [esp + 8 + 12]		;src_stride 
	shl	ebx, 2					;as is int16_t
	add esi, ebx		;[esp + 8 + 12]		; src + src_stride * 2
	mov ebx, [esp + 16 + 12]	;dst_stride
	shl	ebx, 1					;as we process 8 elements
	add edi, ebx				;dst + dst_stride 
	contract16to8_8_mmx esi , edi 

    pop edi
    pop esi
    pop ebx

    ret

;======================================================
;
; void 
; contract16to8add_4x4_mmx(uint16_t* src,uint8_t* pred, int32_t pred_stride,uint8_t* dst, int32_t dst_stride);
;
;======================================================

align 16

cglobal contract16to8add_4x4_mmx
contract16to8add_4x4_mmx    
    push ebx
    push esi
    push edi
	push edx
	push ecx	
 	push eax	
   
    mov esi, [esp + 4 + 24]     ; src
    mov ebx, [esp + 8 + 24]		; pred
	mov	eax, [esp + 12 + 24]    ; pred_stride
	mov	edi, [esp + 16 + 24]    ; dst
	mov	edx, [esp + 20 + 24]    ; dst_stride
	
	mov	ecx,2

.Loop		
	expand8to16_4_mmx	ebx , mm0 , mm1	;now int16 pred is in mm0
	
	movq	mm2,[esi]
	PADDSW  mm2,mm0		;save 4 int16 result

	add	esi,8			;advance 4 int16
	add ebx,eax
	expand8to16_4_mmx	ebx , mm0 , mm1	;now int16 pred is in mm0

	movq	mm3,[esi]
	PADDSW  mm3,mm0		;save 4 int16 result
	
	PACKUSWB mm2,mm3	
	movd	[edi],mm2
	add		edi,edx		;add dst_stride
	psrlq	mm2,32		;right shift 32bits
	movd	[edi],mm2

	add		ebx,eax
	add		edi,edx		;add dst_stride	
	add		esi,8		;advance 4 int16

	sub		ecx,1
	jnz		.Loop

	pop	eax
	pop ecx	
	pop edx
    pop edi
    pop esi
    pop ebx

    retn 20

;======================================================
;
; void 
; expand8to16sub_4x4_mmx(uint8_t* pred,int32_t pred_stride,int8_t* src,int32_t src_stride,uint16_t* dst);
;
;======================================================

align 16

cglobal expand8to16sub_4x4_mmx
expand8to16sub_4x4_mmx    
    push ebx
    push esi
    push edi
	push edx
	push ecx	
 	push eax	
   
    mov esi, [esp + 4 + 24]     ; pred 
    mov ebx, [esp + 8 + 24]		; pred_stride
	mov	eax, [esp + 12 + 24]    ; src
	mov	edx, [esp + 16 + 24]    ; src_stride
	mov	edi, [esp + 20 + 24]    ; dst
	
	mov	ecx,4

.Loop		
	expand8to16_4_mmx	esi , mm0 , mm1	;now int16 pred is in mm0
	expand8to16_4_mmx	eax , mm2 , mm1	;now int16 src is in mm2	
	;movq	mm2,[esi]
	PSUBSW  mm2,mm0		;save 4 int16 result <src - pred>
	movq	[edi],mm2

	add	esi,ebx	;8			;	advance pred_stride
	add eax,edx				; + src_stride
	
	add		edi,8		;add 4 int16

	sub		ecx,1
	jnz		.Loop

	pop	eax
	pop ecx	
	pop edx
    pop edi
    pop esi
    pop ebx

    retn 20

	
;======================================================
;
; uint32_t 
; contract16to8_mmx(int16_t* src, int32_t quarter_width, int32_t quarter_height, uint8_t* dst, int32_t dst_stride);
;
;======================================================

align 16

cglobal contract16to8_mmx
contract16to8_mmx
    push esi
    push edi

    mov esi, [esp + 4 + 8]      ; src
    ;mov edx, [esp + 8 + 8]      ; quarter_width
    mov ecx, [esp + 12 + 8]     ; quarter_height
	mov edi, [esp + 16 + 8]     ; dst
	mov ebx, [esp + 20 + 8]     ; dst_stride
	mov	eax,edx
	shl	eax,2	;4 * quarter_width
	shl	ecx,2	;quarter_height * 4

.LoopFirst
	mov	edx,[esp + 8 + 8]
.LoopSecond
	contract16to8_4_mmx	esi,edi
	add	esi,8	; 4 int16
	add	edi,4	; 4 uint8
	sub	edx,1
	jnz	.LoopSecond
	sub	edi,eax	;4
	add edi,ebx			;dst+dst_stride

	sub	ecx,1
	jnz	.LoopFirst		;outer
	
	EMMS
    pop edi
    pop esi

    ret
 
;======================================================
;
; void 
; contract16to8add_mmx(int16_t* src, int32_t quarter_width, int32_t quarter_height, uint8_t* pred, uint8_t* dst, int32_t dst_stride)
;
;======================================================

align 16

cglobal contract16to8add_mmx
contract16to8add_mmx
    push esi
    push edi
	push ebp
	push edx
	push ecx	
	push ebx
 	push eax	
    
	mov esi, [esp + 4 + 28]      ; src
    mov eax, [esp + 8 + 28]      ; quarter_width
    mov ecx, [esp + 12 + 28]     ; quarter_height
	mov ebx, [esp + 16 + 28]     ; pred
	mov edi, [esp + 20 + 28]     ; dst

	mov ebp, [esp + 24 + 28]     ; dst_stride	

.LoopFirst
	mov	edx,[esp + 12 + 28]		;quarter_height

.LoopSecond
	push ebp					;dst_stride
	mov eax, [esp + 12 + 28]	;quarter_width
	push edi
	shl	eax,2				;quarter_width * 4
	push eax
	push ebx
	push esi
	call contract16to8add_4x4_mmx
	
	add	esi,32	; 4x4 int16
	add	ebx,4	; 4 uint8
	add	edi,4	; 4 uint8

	sub	edx,1	
	jnz	.LoopSecond
	
	mov eax, [esp + 8 + 28]
	shl eax,2	;4 * quaterwidth
	sub	edi,eax	;update dest
	mov eax, [esp + 24 + 28]
	shl eax,2	;4 * dst_stride
	add edi,eax	;add 4*dst_stride

	mov eax, [esp + 8 + 28]	;quaterwidth
	shl eax,2				;4 * quaterwidth
	sub ebx,eax
	shl eax,2
	add	ebx,eax	;update pred

	sub	ecx,1
	jnz	.LoopFirst		;outer
	
	EMMS

	pop	eax
	pop	ebx
	pop ecx	
	pop edx
	pop ebp
    pop edi
    pop esi
ret

;======================================================
;
; void 
; expand8to16sub_mmx(uint8_t* pred, int32_t quarter_width, int32_t quarter_height, uint8_t* dst , int16_t* src, int32_t src_stride)
;
;======================================================

align 16

cglobal expand8to16sub_mmx
expand8to16sub_mmx
    push esi
    push edi
	push ebp
	push edx
	push ecx	
	push ebx
 	push eax	
    
	mov esi, [esp + 20 + 28]      ; src
    mov eax, [esp + 8 + 28]      ; quarter_width
    mov ecx, [esp + 12 + 28]     ; quarter_height
	mov ebx, [esp + 4 + 28]     ; pred
	mov edi, [esp + 16 + 28]     ; dst

	mov ebp, [esp + 24 + 28]     ; src_stride	

.LoopFirst
	mov	edx,[esp + 12 + 28]		;quarter_height

.LoopSecond
	mov eax, [esp + 8 + 28]		;quarter_width	
	push edi					;dst
	push ebp					;src_stride
	push esi					;src
	shl	eax,2					;quarter_width * 4
	push eax					;pred-stride
	push ebx					;pred
	call expand8to16sub_4x4_mmx
	
	add	esi,4	;32	; 4x4 int16
	add	ebx,4	; 4 uint8
	add	edi,32	;4	; 16 int16

	sub	edx,1	
	jnz	.LoopSecond
	
	mov eax, [esp + 8 + 28]
	shl eax,2	;4 * quaterwidth
	sub	esi,eax	;update dest
	mov eax, [esp + 24 + 28]	;src_stride
	shl eax,2	;4 * src_stride
	add esi,eax	;add 4*src_stride

	mov eax, [esp + 8 + 28]	;quaterwidth
	shl eax,2				;4 * quaterwidth
	sub ebx,eax
	shl eax,2
	add	ebx,eax	;update pred

	sub	ecx,1
	jnz	.LoopFirst		;outer
	
	EMMS

	pop	eax
	pop	ebx
	pop ecx	
	pop edx
	pop ebp
    pop edi
    pop esi
ret

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91在线无精精品入口| 91丨porny丨中文| 亚洲精品写真福利| 国产精品久久久一本精品| 久久久无码精品亚洲日韩按摩| 精品久久久久一区| 久久精品网站免费观看| 国产欧美久久久精品影院| 国产一区二区三区四| 日本欧美在线看| 另类小说综合欧美亚洲| 精品一区二区三区香蕉蜜桃 | 成人精品高清在线| 99久久精品免费看国产免费软件| 高清不卡在线观看av| 色综合久久久久网| 欧美精品一级二级| 日韩欧美不卡在线观看视频| 久久综合色一综合色88| 国产精品久久久久四虎| 亚洲一区二区av在线| 视频一区中文字幕国产| 久久国产剧场电影| 91在线一区二区三区| 欧美日韩免费观看一区二区三区| 欧美日本在线观看| 久久天天做天天爱综合色| 亚洲天堂成人在线观看| 日本中文字幕一区二区有限公司| 久久超碰97人人做人人爱| 99久久久精品| 精品裸体舞一区二区三区| 国产精品视频第一区| 日本欧美大码aⅴ在线播放| 高清在线观看日韩| 在线电影欧美成精品| 国产精品久久久久久久久免费樱桃 | 日产国产高清一区二区三区 | 亚洲欧洲综合另类| 丝袜美腿成人在线| 丰满岳乱妇一区二区三区| 欧美精选午夜久久久乱码6080| 国产日韩影视精品| 日本不卡123| av在线播放一区二区三区| 5566中文字幕一区二区电影| 国产精品区一区二区三区| 天天色综合成人网| 94色蜜桃网一区二区三区| 久久久天堂av| 精品一区二区三区在线视频| 在线精品观看国产| 亚洲欧美中日韩| 国产福利电影一区二区三区| 日韩一区二区三区观看| 五月天丁香久久| 日本道精品一区二区三区| 国产精品高潮呻吟| 国产99久久久国产精品免费看| 日韩一区二区视频在线观看| 亚洲va韩国va欧美va| 91浏览器在线视频| 国产精品天干天干在线综合| 国产精一品亚洲二区在线视频| 日韩一级欧美一级| 五月激情综合婷婷| 欧美精品乱码久久久久久| 一区二区在线观看av| 91亚洲大成网污www| 亚洲人成网站色在线观看| 91在线云播放| 一级日本不卡的影视| 色噜噜狠狠成人中文综合| 亚洲伦在线观看| 色一区在线观看| 亚洲成人精品一区二区| 欧美日韩1区2区| 午夜日韩在线观看| 日韩欧美国产高清| 国产综合成人久久大片91| 久久久久国产精品厨房| 粉嫩aⅴ一区二区三区四区五区| 国产日韩在线不卡| 一本久道久久综合中文字幕| 亚洲精品国久久99热| 欧美亚洲一区二区三区四区| 亚洲www啪成人一区二区麻豆| 91精品国产综合久久香蕉麻豆| 日本不卡一二三区黄网| 26uuu国产在线精品一区二区| 国产一区二区三区| 亚洲天堂中文字幕| 欧美日韩成人高清| 另类专区欧美蜜桃臀第一页| 久久免费午夜影院| 成人av影视在线观看| 夜夜揉揉日日人人青青一国产精品 | 日韩天堂在线观看| 国产91精品在线观看| 一区二区在线观看视频在线观看| 欧美性受xxxx黑人xyx性爽| 日韩成人伦理电影在线观看| 久久午夜羞羞影院免费观看| 成人ar影院免费观看视频| 亚洲bt欧美bt精品| 国产午夜精品久久久久久免费视| 色一情一伦一子一伦一区| 奇米影视7777精品一区二区| 中文字幕+乱码+中文字幕一区| 欧美日韩性生活| 成人精品小蝌蚪| 日韩国产欧美一区二区三区| 国产精品福利电影一区二区三区四区| 欧美日韩在线直播| 丁香六月综合激情| 日本视频中文字幕一区二区三区| 中文字幕av不卡| 欧美xingq一区二区| 在线观看视频一区| 成人avav影音| 激情欧美一区二区| 亚洲图片欧美综合| 国产精品久久一卡二卡| 日韩丝袜情趣美女图片| 欧美综合一区二区三区| 成人av电影观看| 国产综合色在线视频区| 亚洲一级二级在线| 中文字幕在线不卡一区二区三区 | 99久久国产综合色|国产精品| 久久精品国产免费| 亚洲午夜精品在线| 1024精品合集| 国产精品久久久久久久久动漫 | 免费av成人在线| 视频一区二区三区中文字幕| 国产精品第一页第二页第三页| 精品区一区二区| 欧美成人精品高清在线播放 | 日本一区二区成人在线| 久久综合狠狠综合久久综合88| 91精品蜜臀在线一区尤物| 欧美无砖专区一中文字| 在线观看视频一区二区| 色美美综合视频| 色菇凉天天综合网| 91国偷自产一区二区三区成为亚洲经典 | 99久久久精品| 六月婷婷色综合| 免费在线观看成人| 日韩国产在线观看一区| 亚洲bt欧美bt精品| 亚洲一二三四久久| 一区二区三区在线影院| 亚洲欧洲日韩av| 亚洲激情图片小说视频| 亚洲精品久久久蜜桃| 亚洲欧洲成人精品av97| 国产精品福利一区| 亚洲六月丁香色婷婷综合久久 | 欧美成人激情免费网| 日韩一区二区在线看| 日韩一区二区三区精品视频| 欧美日韩精品欧美日韩精品一| 欧美日韩国产天堂| 日韩欧美成人激情| 日本一区二区三区dvd视频在线| 国产精品国产三级国产aⅴ无密码| 亚洲人亚洲人成电影网站色| 国产欧美一区二区精品婷婷| 欧美激情一二三区| 亚洲精品高清在线观看| 亚洲gay无套男同| 久久精品二区亚洲w码| 国产成人啪午夜精品网站男同| 国产成人av自拍| 在线免费不卡视频| 日韩欧美国产麻豆| 中文字幕在线不卡国产视频| 亚洲国产日韩a在线播放| 麻豆视频观看网址久久| 成人av在线一区二区三区| 欧美日本免费一区二区三区| 亚洲精品在线电影| 亚洲最新视频在线观看| 久久精品国产精品青草| 成人免费看视频| 欧美日韩免费高清一区色橹橹| 久久综合九色综合欧美亚洲| 一区二区三区在线免费视频| 国内精品久久久久影院色| 91天堂素人约啪| 精品黑人一区二区三区久久| 亚洲精品久久久蜜桃| 精品视频全国免费看| 91麻豆精品久久久久蜜臀| 欧美高清在线精品一区| 蜜桃视频在线观看一区二区| 91免费看`日韩一区二区| 久久久噜噜噜久久中文字幕色伊伊|