Add wasm tacle-bench targets
This commit is contained in:
146
targets/wasm-tacle/kernel/sha/memhelper.c
Executable file
146
targets/wasm-tacle/kernel/sha/memhelper.c
Executable file
@ -0,0 +1,146 @@
|
||||
/*
|
||||
|
||||
This program is part of the TACLeBench benchmark suite.
|
||||
Version V 1.x
|
||||
|
||||
Name: memhelper.c
|
||||
|
||||
Author: Torbjorn Granlund
|
||||
|
||||
NIST Secure Hash Algorithm
|
||||
|
||||
Copy block beginning at SRCP to
|
||||
block beginning at DSTP with LEN `op_t' words (not LEN bytes!).
|
||||
Both SRCP and DSTP should be aligned for memory operations on `op_t's.
|
||||
|
||||
Source: GNU C Library
|
||||
|
||||
Changes: no major functional changes
|
||||
|
||||
License: Copyright (C) 1991, 1997, 2003 Free Software Foundation, Inc.
|
||||
*/
|
||||
|
||||
#include "memhelper.h"
|
||||
int printf(const char * restrict format, ... );
|
||||
/* sha_wordcopy_fwd_aligned -- Copy block beginning at SRCP to
|
||||
block beginning at DSTP with LEN `op_t' words (not LEN bytes!).
|
||||
Both SRCP and DSTP should be aligned for memory operations on `op_t's.
|
||||
*/
|
||||
|
||||
void sha_wordcopy_fwd_aligned( long int dstp, long int srcp, size_t len )
|
||||
{
|
||||
op_t a0 = 0;
|
||||
op_t a1 = 0;
|
||||
char switch_target;
|
||||
|
||||
switch ( len % 8 ) {
|
||||
case 2:
|
||||
a0 = ( ( op_t * ) srcp )[ 0 ];
|
||||
srcp -= 6 * OPSIZ;
|
||||
dstp -= 7 * OPSIZ;
|
||||
len += 6;
|
||||
switch_target = 1;
|
||||
break;
|
||||
case 3:
|
||||
a1 = ( ( op_t * ) srcp )[ 0 ];
|
||||
srcp -= 5 * OPSIZ;
|
||||
dstp -= 6 * OPSIZ;
|
||||
len += 5;
|
||||
switch_target = 2;
|
||||
break;
|
||||
case 4:
|
||||
a0 = ( ( op_t * ) srcp )[ 0 ];
|
||||
srcp -= 4 * OPSIZ;
|
||||
dstp -= 5 * OPSIZ;
|
||||
len += 4;
|
||||
switch_target = 3;
|
||||
break;
|
||||
case 5:
|
||||
a1 = ( ( op_t * ) srcp )[ 0 ];
|
||||
srcp -= 3 * OPSIZ;
|
||||
dstp -= 4 * OPSIZ;
|
||||
len += 3;
|
||||
switch_target = 4;
|
||||
break;
|
||||
case 6:
|
||||
a0 = ( ( op_t * ) srcp )[ 0 ];
|
||||
srcp -= 2 * OPSIZ;
|
||||
dstp -= 3 * OPSIZ;
|
||||
len += 2;
|
||||
switch_target = 5;
|
||||
break;
|
||||
case 7:
|
||||
a1 = ( ( op_t * ) srcp )[ 0 ];
|
||||
srcp -= 1 * OPSIZ;
|
||||
dstp -= 2 * OPSIZ;
|
||||
len += 1;
|
||||
switch_target = 6;
|
||||
break;
|
||||
case 0:
|
||||
if ( OP_T_THRES <= 3 * OPSIZ && len == 0 )
|
||||
return;
|
||||
a0 = ( ( op_t * ) srcp )[ 0 ];
|
||||
srcp -= 0 * OPSIZ;
|
||||
dstp -= 1 * OPSIZ;
|
||||
switch_target = 7;
|
||||
break;
|
||||
case 1:
|
||||
a1 = ( ( op_t * ) srcp )[ 0 ];
|
||||
srcp -= -1 * OPSIZ;
|
||||
dstp -= 0 * OPSIZ;
|
||||
len -= 1;
|
||||
if ( OP_T_THRES <= 3 * OPSIZ && len == 0 ) {
|
||||
( ( op_t * ) dstp )[ 0 ] = a1;
|
||||
return;
|
||||
} else {
|
||||
switch_target = 8;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
_Pragma( "loopbound min 1 max 2" ) //max 1
|
||||
do {
|
||||
switch ( switch_target ) {
|
||||
case 8:
|
||||
a0 = ( ( op_t * ) srcp )[ 0 ];
|
||||
( ( op_t * ) dstp )[ 0 ] = a1;
|
||||
break;
|
||||
case 7:
|
||||
a1 = ( ( op_t * ) srcp )[ 1 ];
|
||||
( ( op_t * ) dstp )[ 1 ] = a0;
|
||||
break;
|
||||
case 6:
|
||||
a0 = ( ( op_t * ) srcp )[ 2 ];
|
||||
( ( op_t * ) dstp )[ 2 ] = a1;
|
||||
break;
|
||||
case 5:
|
||||
a1 = ( ( op_t * ) srcp )[ 3 ];
|
||||
( ( op_t * ) dstp )[ 3 ] = a0;
|
||||
break;
|
||||
case 4:
|
||||
a0 = ( ( op_t * ) srcp )[ 4 ];
|
||||
( ( op_t * ) dstp )[ 4 ] = a1;
|
||||
break;
|
||||
case 3:
|
||||
a1 = ( ( op_t * ) srcp )[ 5 ];
|
||||
( ( op_t * ) dstp )[ 5 ] = a0;
|
||||
break;
|
||||
case 2:
|
||||
a0 = ( ( op_t * ) srcp )[ 6 ];
|
||||
( ( op_t * ) dstp )[ 6 ] = a1;
|
||||
break;
|
||||
case 1:
|
||||
a1 = ( ( op_t * ) srcp )[ 7 ];
|
||||
( ( op_t * ) dstp )[ 7 ] = a0;
|
||||
break;
|
||||
}
|
||||
|
||||
srcp += 8 * OPSIZ;
|
||||
dstp += 8 * OPSIZ;
|
||||
len -= 8;
|
||||
switch_target = 8;
|
||||
} while ( len != 0 );
|
||||
|
||||
( ( op_t * ) dstp )[ 0 ] = a1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user