Testing on Neoverse N1 (Ampere 3GHz). Tested only on a subset of phy-simulators. - Changes: - use SIMDE consistently - adaptations of LDPC decoder generator for ARMv8 performance - SIMDe modifications of Intel CRC to allow for aarch64 build. optimizations for 128-bit to improve performance of LDPC encode/decode on aarch64 (Neoverse 1) - added BG2 files for 128-bit ldpc encoder (aarch64) - testing on Xeon - testing on x86 - minor changes to build/run on x86 - change in crc.h after returning to aarch64 - removed some warning in ldpc decoder generator for x86_64 - char - Delete irrelevant constants - Correctly declare variables - Define stdbool for all architectures - Remove definition of _MM_SHUFFLE and use SIMDE_MM_SHUFFLE - Remove commented code - Fix CMakeLists.txt - Include SIMDE avx2 functions in tools_defs.h
123 lines
2.5 KiB
C
123 lines
2.5 KiB
C
#ifndef _UTILS_H
|
|
#define _UTILS_H
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <stdint.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <malloc.h>
|
|
#include <sys/types.h>
|
|
#include <common/utils/assertions.h>
|
|
|
|
#ifdef MALLOC_TRACE
|
|
#define malloc myMalloc
|
|
#endif
|
|
|
|
#define sizeofArray(a) (sizeof(a)/sizeof(*(a)))
|
|
|
|
#define cmax(a,b) ((a>b) ? (a) : (b))
|
|
#define cmax3(a,b,c) ((cmax(a,b)>c) ? (cmax(a,b)) : (c))
|
|
#define cmin(a,b) ((a<b) ? (a) : (b))
|
|
|
|
#ifdef __cplusplus
|
|
#ifdef min
|
|
#undef min
|
|
#undef max
|
|
#endif
|
|
#else
|
|
#define max(a,b) cmax(a,b)
|
|
#define min(a,b) cmin(a,b)
|
|
#endif
|
|
|
|
#ifndef malloc16
|
|
# define malloc16(x) memalign(32,x+32)
|
|
#endif
|
|
#define free16(y,x) free(y)
|
|
#define bigmalloc malloc
|
|
#define bigmalloc16 malloc16
|
|
#define openair_free(y,x) free((y))
|
|
#define PAGE_SIZE 4096
|
|
|
|
#define free_and_zero(PtR) do { \
|
|
if (PtR) { \
|
|
free(PtR); \
|
|
PtR = NULL; \
|
|
} \
|
|
} while (0)
|
|
|
|
static inline void *malloc16_clear( size_t size ) {
|
|
void *ptr = memalign(32, size+32);
|
|
DevAssert(ptr);
|
|
memset( ptr, 0, size );
|
|
return ptr;
|
|
}
|
|
|
|
|
|
static inline void *calloc_or_fail(size_t size) {
|
|
void *ptr = calloc(1, size);
|
|
|
|
if (ptr == NULL) {
|
|
fprintf(stderr, "[UE] Failed to calloc %zu bytes", size);
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
return ptr;
|
|
}
|
|
|
|
static inline void *malloc_or_fail(size_t size) {
|
|
void *ptr = malloc(size);
|
|
|
|
if (ptr == NULL) {
|
|
fprintf(stderr, "[UE] Failed to malloc %zu bytes", size);
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
return ptr;
|
|
}
|
|
|
|
#if !defined (msg)
|
|
# define msg(aRGS...) LOG_D(PHY, ##aRGS)
|
|
#endif
|
|
#ifndef malloc16
|
|
# define malloc16(x) memalign(32,x)
|
|
#endif
|
|
|
|
#define free16(y,x) free(y)
|
|
#define bigmalloc malloc
|
|
#define bigmalloc16 malloc16
|
|
#define openair_free(y,x) free((y))
|
|
#define PAGE_SIZE 4096
|
|
|
|
#define PAGE_MASK 0xfffff000
|
|
#define virt_to_phys(x) (x)
|
|
|
|
const char *hexdump(const void *data, size_t data_len, char *out, size_t out_len);
|
|
|
|
// Converts an hexadecimal ASCII coded digit into its value. **
|
|
int hex_char_to_hex_value (char c);
|
|
// Converts an hexadecimal ASCII coded string into its value.**
|
|
int hex_string_to_hex_value (uint8_t *hex_value, const char *hex_string, int size);
|
|
|
|
void set_priority(int priority);
|
|
|
|
char *itoa(int i);
|
|
|
|
#define findInList(keY, result, list, element_type) {\
|
|
int i;\
|
|
for (i=0; i<sizeof(list)/sizeof(element_type) ; i++)\
|
|
if (list[i].key==keY) {\
|
|
result=list[i].val;\
|
|
break;\
|
|
}\
|
|
AssertFatal(i < sizeof(list)/sizeof(element_type), "List %s doesn't contain %s\n",#list, #keY); \
|
|
}
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|