17f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*
27f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
37f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *
47f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
57f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * you may not use this file except in compliance with the License.
67f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * You may obtain a copy of the License at
77f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *
87f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
97f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *
107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * See the License for the specific language governing permissions and
147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * limitations under the License.
157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project */
167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- includes ----------------------------------------------------------- */
187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/Memory.h"
207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/Functions.h"
217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*
227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include <string.h>
237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project*/
247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- related objects  --------------------------------------------------- */
257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- typedefs ----------------------------------------------------------- */
277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- constants ---------------------------------------------------------- */
297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ external functions } ----------------------------------------- */
357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*
407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid* bbs_memcpy( void* dstA, const void* srcA, uint32 sizeA )
417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( sizeA & 1 )
437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		bbs_ERROR0( "bbs_memcpy( .... ): sizeA must be even" );
457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		return NULL;
467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return bbs_memcpy16( dstA, srcA, sizeA >> 1 );
487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project*/
507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid* bbs_memcpy16( void* dstA, const void* srcA, uint32 sizeA )
537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#ifdef HW_TMS320C5x
557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( ( ( int32 ) dstA >> 16 ) == ( ( ( int32 ) dstA + sizeA ) >> 16 ) &&
567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		( ( int32 ) srcA >> 16 ) == ( ( ( int32 ) srcA + sizeA ) >> 16 ) )
577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		/* fast version, works only if pointers do not cross page boundary. */
597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		uint16* dstL = ( uint16* )dstA;
607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		const uint16* srcL = ( uint16* )srcA;
617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		uint16 iL;
627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		for( iL = sizeA; iL--; )
637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			*dstL++ = *srcL++;
657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	else
687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		/* safe version */
707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		uint32 iL;
717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		for( iL = 0; iL < sizeA; iL++ )
727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			*( uint16* ) ( ( int32 ) dstA + iL ) = *( uint16* ) ( ( int32 ) srcA + iL );
747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return dstA;
777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#else
787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint16* dstL = ( uint16* )dstA;
797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	const uint16* srcL = ( uint16* )srcA;
807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( ; sizeA >= 4; sizeA -= 4 )
827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		dstL[ 0 ] = srcL[ 0 ];
847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		dstL[ 1 ] = srcL[ 1 ];
857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		dstL[ 2 ] = srcL[ 2 ];
867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		dstL[ 3 ] = srcL[ 3 ];
877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		dstL += 4;
887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		srcL += 4;
897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( ; sizeA > 0; sizeA-- )
927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		*dstL++ = *srcL++;
947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return dstA;
977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#endif
987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid* bbs_memcpy32( void* dstA, const void* srcA, uint32 sizeA )
1037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
1047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#ifdef HW_TMS320C5x
1057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( ( ( int32 ) dstA >> 16 ) == ( ( ( int32 ) dstA + ( sizeA << 1 ) ) >> 16 ) &&
1067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		( ( int32 ) srcA >> 16 ) == ( ( ( int32 ) srcA + ( sizeA << 1 ) ) >> 16 ) )
1077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
1087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		/* fast version, works only if pointers do not cross page boundary. */
1097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		uint32* dstL = ( uint32* )dstA;
1107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		const uint32* srcL = ( uint32* )srcA;
1117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		uint16 iL;
1127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		for( iL = sizeA; iL--; )
1137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
1147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			*dstL++ = *srcL++;
1157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
1167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
1177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	else
1187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
1197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		/* safe version */
1207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		uint32 iL;
1217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		sizeA <<= 1;
1227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		for( iL = 0; iL < sizeA; iL += 2 )
1237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
1247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			*( uint32* ) ( ( int32 ) dstA + iL ) = *( uint32* ) ( ( int32 ) srcA + iL );
1257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
1267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
1277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return dstA;
1287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*
1297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint16* dstL = ( uint16* )dstA;
1307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	const uint16* srcL = ( uint16* )srcA;
1317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	// copying with base object-size of 16bit
1337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	// is more efficient on 16 bit architecture
1347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	sizeA <<= 1;
1357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( ; sizeA >= 4; sizeA -= 4 )
1377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
1387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		dstL[ 0 ] = srcL[ 0 ];
1397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		dstL[ 1 ] = srcL[ 1 ];
1407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		dstL[ 2 ] = srcL[ 2 ];
1417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		dstL[ 3 ] = srcL[ 3 ];
1427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		dstL += 4;
1437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		srcL += 4;
1447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
1457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( ; sizeA > 0; sizeA-- )
1477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
1487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		*dstL++ = *srcL++;
1497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
1507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return dstA;
1527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project*/
1537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#else	/* 32bit architectures */
1547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32* dstL = ( uint32* )dstA;
1567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	const uint32* srcL = ( uint32* )srcA;
1577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( ; sizeA >= 4; sizeA -= 4 )
1597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
1607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		dstL[ 0 ] = srcL[ 0 ];
1617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		dstL[ 1 ] = srcL[ 1 ];
1627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		dstL[ 2 ] = srcL[ 2 ];
1637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		dstL[ 3 ] = srcL[ 3 ];
1647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		dstL += 4;
1657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		srcL += 4;
1667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
1677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( ; sizeA > 0; sizeA-- )
1697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
1707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		*dstL++ = *srcL++;
1717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
1727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return dstA;
1747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#endif
1767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
1777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid* bbs_memset16( void* dstA, uint16 valA, uint32 sizeA )
1817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
1827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 iL;
1837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint16* dstL = ( uint16* )dstA;
1847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* to be optimized */
1857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( iL = 0; iL < sizeA; iL++ )
1867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
1877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		*dstL++ = valA;
1887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
1897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return dstA;
1907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
1917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid* bbs_memset32( void* dstA, uint32 valA, uint32 sizeA )
1957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
1967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 iL;
1977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32* dstL = ( uint32* )dstA;
1987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* to be optimized */
1997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( iL = 0; iL < sizeA; iL++ )
2007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
2017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		*dstL++ = valA;
2027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
2037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return dstA;
2047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
2057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
2077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
208