Add wasm tacle-bench targets
This commit is contained in:
166
targets/wasm-tacle/sequential/ammunition/ammunition_libc.c
Executable file
166
targets/wasm-tacle/sequential/ammunition/ammunition_libc.c
Executable file
@ -0,0 +1,166 @@
|
||||
/*
|
||||
Include section
|
||||
*/
|
||||
|
||||
#include "ammunition_string.h"
|
||||
#include "ammunition_stdio.h"
|
||||
#include "ammunition_stdlib.h"
|
||||
|
||||
|
||||
/*
|
||||
Standard library functions
|
||||
*/
|
||||
|
||||
char ammunition_isdigit( unsigned char c )
|
||||
{
|
||||
if ( ( c >= '0' ) & ( c <= '9' ) )
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ammunition_isspace( int c )
|
||||
{
|
||||
return ( c == ' ' ) | ( c == '\t' ) | ( c == '\n' ) | ( c == '\r' );
|
||||
}
|
||||
|
||||
void *ammunition_memcpy( void *dest, const void *src, size_t size )
|
||||
{
|
||||
size_t i;
|
||||
_Pragma( "loopbound min 2 max 6" )
|
||||
for ( i = 0; i < size; i++ )
|
||||
( ( unsigned char * )dest )[ i ] = ( ( unsigned char * )src )[ i ];
|
||||
|
||||
return dest;
|
||||
}
|
||||
|
||||
|
||||
void *ammunition_memset( void *s, int c, size_t n )
|
||||
{
|
||||
size_t i;
|
||||
_Pragma( "loopbound min 0 max 4" )
|
||||
for ( i = 0; i < n; i++ )
|
||||
( ( unsigned char * )s )[ i ] = ( unsigned char )c;
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
int ammunition_memcmp ( const void *mem1, const void *mem2, size_t size )
|
||||
{
|
||||
const unsigned char *p1 = ( const unsigned char * ) mem1,
|
||||
*p2 = ( const unsigned char * ) mem2;
|
||||
_Pragma( "loopbound min 0 max 4" )
|
||||
while ( size-- )
|
||||
if ( *p1 != *p2 )
|
||||
return ( *p1 - *p2 );
|
||||
else
|
||||
p1++, p2++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* The following function is an analog of standard C function
|
||||
`memmove'. The function returns the first operand. */
|
||||
|
||||
void *ammunition_memmove ( void *s1, const void *s2, size_t n )
|
||||
{
|
||||
int i;
|
||||
|
||||
if ( ( ( char * ) s1 < ( char * ) s2 && ( char * ) s1 + n <= ( char * ) s2 )
|
||||
|| ( ( char * ) s2 < ( char * ) s1
|
||||
&& ( char * ) s2 + n <= ( char * ) s1 ) )
|
||||
return ( void * ) ammunition_memcpy ( s1, s2, n );
|
||||
if ( ( char * ) s1 < ( char * ) s2 && ( char * ) s1 + n > ( char * ) s2 ) {
|
||||
_Pragma( "loopbound min 0 max 4" )
|
||||
for ( i = 0; ( size_t ) i < n; i++ )
|
||||
( ( char * ) s1 ) [ i ] = ( ( char * ) s2 ) [ i ];
|
||||
} else {
|
||||
_Pragma( "loopbound min 0 max 4" )
|
||||
for ( i = n - 1; i >= 0; i-- )
|
||||
( ( char * ) s1 )[ i ] = ( ( char * ) s2 ) [ i ];
|
||||
}
|
||||
return s1;
|
||||
}
|
||||
|
||||
int ammunition_strcmp ( const char *str1, const char *str2 )
|
||||
{
|
||||
_Pragma( "loopbound min 1 max 11" )
|
||||
while ( *str1 && ( *str1 == *str2 ) )
|
||||
str1++, str2++;
|
||||
return *( const unsigned char * )str1 - *( const unsigned char * )str2;
|
||||
}
|
||||
|
||||
int ammunition_atoi ( const char *str )
|
||||
{
|
||||
int result = 0;
|
||||
int sign = ( str[ 0 ] == '-' ? -1 : 1 );
|
||||
|
||||
int readingPos = 0;
|
||||
if ( str[ 0 ] == '-' || str[ 0 ] == '+' )
|
||||
readingPos++;
|
||||
_Pragma( "loopbound min 1 max 7" )
|
||||
do {
|
||||
result *= 10;
|
||||
result += str[ readingPos++ ] - 48;
|
||||
} while ( str[ readingPos ] != 0 );
|
||||
|
||||
return sign * result;
|
||||
}
|
||||
|
||||
|
||||
int ammunition_sprintf_d( char *s, int number )
|
||||
{
|
||||
/* How many decimal digits do we need? */
|
||||
char digits = 0;
|
||||
unsigned char writePos = 0;
|
||||
long long copyOfNumber = number;
|
||||
_Pragma( "loopbound min 1 max 10" )
|
||||
do {
|
||||
digits++;
|
||||
copyOfNumber /= 10;
|
||||
} while ( copyOfNumber != 0 );
|
||||
|
||||
writePos = digits;
|
||||
if ( number < 0 ) {
|
||||
writePos++;
|
||||
s[ 0 ] = '-';
|
||||
}
|
||||
s[ writePos ] = 0;
|
||||
|
||||
copyOfNumber = number;
|
||||
_Pragma( "loopbound min 1 max 10" )
|
||||
do {
|
||||
s[ --writePos ] = 48 + ( ( copyOfNumber >= 0 ?
|
||||
copyOfNumber : -copyOfNumber ) % 10 );
|
||||
copyOfNumber /= 10;
|
||||
} while ( copyOfNumber != 0 );
|
||||
|
||||
return digits + ( number < 0 ? 1 : 0 );
|
||||
}
|
||||
|
||||
|
||||
int ammunition_sprintf_u( char *s, unsigned int number )
|
||||
{
|
||||
/* How many decimal digits do we need? */
|
||||
char digits = 0;
|
||||
unsigned char writePos = 0;
|
||||
unsigned long long copyOfNumber = number;
|
||||
_Pragma( "loopbound min 1 max 10" )
|
||||
do {
|
||||
digits++;
|
||||
copyOfNumber /= 10;
|
||||
} while ( copyOfNumber != 0 );
|
||||
|
||||
writePos = digits;
|
||||
s[ writePos ] = 0;
|
||||
|
||||
copyOfNumber = number;
|
||||
_Pragma( "loopbound min 1 max 10" )
|
||||
do {
|
||||
s[ --writePos ] = 48 + ( copyOfNumber % 10 );
|
||||
copyOfNumber /= 10;
|
||||
} while ( copyOfNumber != 0 );
|
||||
|
||||
return digits;
|
||||
}
|
||||
Reference in New Issue
Block a user