You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
3.8 KiB
128 lines
3.8 KiB
/* *************************************************************************
|
|
** INTEL Corporation Proprietary Information
|
|
**
|
|
** This listing is supplied under the terms of a license
|
|
** agreement with INTEL Corporation and may not be copied
|
|
** nor disclosed except in accordance with the terms of
|
|
** that agreement.
|
|
**
|
|
** Copyright (c) 1995, 1996 Intel Corporation.
|
|
** All Rights Reserved.
|
|
**
|
|
** *************************************************************************
|
|
*/
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// $Author: AKASAI $
|
|
// $Date: 15 Mar 1996 09:00:42 $
|
|
// $Archive: S:\h26x\src\dec\d1cpysp.cpv $
|
|
// $Header: S:\h26x\src\dec\d1cpysp.cpv 1.3 15 Mar 1996 09:00:42 AKASAI $
|
|
// $Log: S:\h26x\src\dec\d1cpysp.cpv $
|
|
//
|
|
// Rev 1.3 15 Mar 1996 09:00:42 AKASAI
|
|
//
|
|
// Added 1996 to copyright.
|
|
//
|
|
// Rev 1.2 14 Mar 1996 16:58:08 AKASAI
|
|
// Changed code, basically a re-write for optimization of code
|
|
// space and to use DWORD reads.
|
|
// Added pragma for gather MB processing into one code segment.
|
|
//
|
|
// Rev 1.1 01 Nov 1995 13:38:38 AKASAI
|
|
//
|
|
// Made changes to enable Log, Header... fields.
|
|
//
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// ROUTINE NAME: BlockCopySpecial
|
|
// FILE NAME: d1cpysp.cpp
|
|
//
|
|
// BlockCopySpecial reads reference in DWORDS and writes DWORDS. Read of
|
|
// DWORD is ok because LoopFilter buffer should be DWORD aligned.
|
|
//
|
|
// Input U8 *reference (Loop Filtered Buffer)
|
|
// Output U8 *output (Output buffer)
|
|
//
|
|
// Registers used: eax, ebx, ecx, edx, edi
|
|
//
|
|
// Assumption: reference uses pitch of 8 and output use pitch of PITCH
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
#include "precomp.h"
|
|
|
|
#pragma code_seg("IACODE2")
|
|
__declspec(naked)
|
|
void BlockCopySpecial (U32 uDstBlock,U32 uSrcBlock)
|
|
{
|
|
__asm {
|
|
mov eax, [esp+8] // eax gets Base addr of uSrcBlock
|
|
push edi
|
|
mov edi, [esp+8] // edi gets Base addr of uDstBlock
|
|
push ebx
|
|
|
|
mov ebx, PITCH
|
|
|
|
mov ecx, [eax] // ref[0][0]
|
|
mov edx, 4[eax] // ref[0][4]
|
|
mov 0[edi], ecx // row 0, bytes 0-3
|
|
|
|
mov ecx, [eax+8] // ref[1][0]
|
|
mov 4[edi], edx // row 0, bytes 4-7
|
|
add edi, ebx
|
|
mov edx, 4[eax+8] // ref[1][4]
|
|
mov 0[edi], ecx // row 1, bytes 0-3
|
|
|
|
mov ecx, [eax+16] // ref[2][0]
|
|
mov 4[edi], edx // row 1, bytes 4-7
|
|
add edi, ebx
|
|
mov edx, 4[eax+16] // ref[2][4]
|
|
; agi
|
|
mov 0[edi], ecx // row 2, bytes 0-3
|
|
|
|
mov ecx, [eax+24] // ref[3][0]
|
|
mov 4[edi], edx // row 2, bytes 4-7
|
|
add edi, ebx
|
|
mov edx, 4[eax+24] // ref[3][4]
|
|
; agi
|
|
mov 0[edi], ecx // row 3, bytes 0-3
|
|
|
|
mov ecx, [eax+32] // ref[4][0]
|
|
mov 4[edi],edx // row 3, bytes 4-7
|
|
add edi, ebx
|
|
mov edx, 4[eax+32] // ref[4][4]
|
|
; agi
|
|
mov 0[edi], ecx // row 4, bytes 0-3
|
|
|
|
mov ecx, [eax+40] // ref[5][0]
|
|
mov 4[edi], edx // row 4, bytes 4-7
|
|
add edi, ebx
|
|
mov edx, 4[eax+40] // ref[5][4]
|
|
; agi
|
|
mov 0[edi], ecx // row 5, bytes 0-3
|
|
|
|
mov ecx, [eax+48] // ref[6][0]
|
|
mov 4[edi], edx // row 5, bytes 4-7
|
|
add edi, ebx
|
|
mov edx, 4[eax+48] // ref[6][4]
|
|
; agi
|
|
mov 0[edi], ecx // row 6, bytes 0-3
|
|
|
|
mov ecx, [eax+56] // ref[7][0]
|
|
mov 4[edi], edx // row 6, bytes 4-7
|
|
add edi, ebx
|
|
mov edx, 4[eax+56] // ref[7][4]
|
|
; agi
|
|
mov 0[edi], ecx // row 7, bytes 0-3
|
|
|
|
mov 4[edi], edx // row 7, bytes 4-7
|
|
|
|
pop ebx
|
|
pop edi
|
|
ret
|
|
|
|
} // end of asm
|
|
} // End of BlockCopySpecial
|
|
#pragma code_seg()
|
|
|