Files
cpuminer-opt-gpu/algo/keccak/keccak-hash-4way.h
Jay D Dee 042d13d1e1 v24.2
2024-05-20 23:08:50 -04:00

99 lines
3.1 KiB
C

#ifndef KECCAK_HASH_4WAY_H__
#define KECCAK_HASH_4WAY_H__
#include <stddef.h>
#include "simd-utils.h"
#if defined(SIMD512)
typedef struct
{
__m512i buf[144*8];
__m512i w[25];
size_t ptr, lim;
} keccak64_ctx_m512i __attribute__((aligned(128)));
typedef keccak64_ctx_m512i keccak256_8x64_context;
typedef keccak64_ctx_m512i keccak512_8x64_context;
void keccak256_8x64_init(void *cc);
void keccak256_8x64_update(void *cc, const void *data, size_t len);
void keccak256_8x64_close(void *cc, void *dst);
void keccak256_8x64_ctx( void *cc, void *dst, const void *data, size_t len );
void keccak512_8x64_init(void *cc);
void keccak512_8x64_update(void *cc, const void *data, size_t len);
void keccak512_8x64_close(void *cc, void *dst);
void keccak512_8x64_ctx( void *cc, void *dst, const void *data, size_t len );
// legacy naming
#define keccak512_8way_context keccak512_8x64_context
#define keccak512_8way_init keccak512_8x64_init
#define keccak512_8way_update keccak512_8x64_update
#define keccak512_8way_close keccak512_8x64_close
#define keccak256_8way_context keccak256_8x64_context
#define keccak256_8way_init keccak256_8x64_init
#define keccak256_8way_update keccak256_8x64_update
#define keccak256_8way_close keccak256_8x64_close
#endif
#if defined(__AVX2__)
typedef struct
{
__m256i buf[144*8];
__m256i w[25];
size_t ptr, lim;
} keccak64_ctx_m256i __attribute__((aligned(128)));
typedef keccak64_ctx_m256i keccak256_4x64_context;
typedef keccak64_ctx_m256i keccak512_4x64_context;
void keccak256_4x64_init(void *cc);
void keccak256_4x64_update(void *cc, const void *data, size_t len);
void keccak256_4x64_close(void *cc, void *dst);
void keccak256_4x64_ctx( void *cc, void *dst, const void *data, size_t len );
void keccak512_4x64_init(void *cc);
void keccak512_4x64_update(void *cc, const void *data, size_t len);
void keccak512_4x64_close(void *cc, void *dst);
void keccak512_4x64_ctx( void *cc, void *dst, const void *data, size_t len );
// legacy naming
#define keccak512_4way_context keccak512_4x64_context
#define keccak512_4way_init keccak512_4x64_init
#define keccak512_4way_update keccak512_4x64_update
#define keccak512_4way_close keccak512_4x64_close
#define keccak256_4way_context keccak256_4x64_context
#define keccak256_4way_init keccak256_4x64_init
#define keccak256_4way_update keccak256_4x64_update
#define keccak256_4way_close keccak256_4x64_close
#endif
typedef struct
{
v128_t buf[144*8];
v128_t w[25];
size_t ptr, lim;
} keccak64_ctx_v128 __attribute__((aligned(128)));
typedef keccak64_ctx_v128 keccak256_2x64_context;
typedef keccak64_ctx_v128 keccak512_2x64_context;
void keccak256_2x64_init (void *cc );
void keccak256_2x64_update( void *cc, const void *data, size_t len );
void keccak256_2x64_close( void *cc, void *dst );
void keccak256_2x64_ctx( void *cc, void *dst, const void *data, size_t len );
void keccak512_2x64_init( void *cc );
void keccak512_2x64_update( void *cc, const void *data, size_t len );
void keccak512_2x64_close( void *cc, void *dst );
void keccak512_2x64_ctx( void *cc, void *dst, const void *data, size_t len );
#endif