blob: 1a0fa46c45e08a7ff71ea5659fd24bcdd843dcb8 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
/* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0"
*
* Written by Nir Drucker and Shay Gueron
* AWS Cryptographic Algorithms Group.
* (ndrucker@amazon.com, gueron@amazon.com)
*/
#pragma once
////////////////////////////////////////////
// Basic defs
///////////////////////////////////////////
#define FUNC_PREFIX BIKE1_L1_R1
#include "functions_renaming.h"
#ifdef __cplusplus
# define EXTERNC extern "C"
#else
# define EXTERNC
#endif
// For code clarity.
#define IN
#define OUT
#define ALIGN(n) __attribute__((aligned(n)))
#define BIKE_UNUSED(x) (void)(x)
#define BIKE_UNUSED_ATT __attribute__((unused))
#define _INLINE_ static inline
// In asm the symbols '==' and '?' are not allowed therefore if using
// divide_and_ceil in asm files we must ensure with static_assert its validity
#if(__cplusplus >= 201103L) || defined(static_assert)
# define bike_static_assert(COND, MSG) static_assert(COND, "MSG")
#else
# define bike_static_assert(COND, MSG) \
typedef char static_assertion_##MSG[(COND) ? 1 : -1] BIKE_UNUSED_ATT
#endif
// Divide by the divider and round up to next integer
#define DIVIDE_AND_CEIL(x, divider) (((x) + (divider)) / (divider))
#define BIT(len) (1ULL << (len))
#define MASK(len) (BIT(len) - 1)
#define SIZEOF_BITS(b) (sizeof(b) * 8)
#define QW_SIZE 0x8
#define XMM_SIZE 0x10
#define YMM_SIZE 0x20
#define ZMM_SIZE 0x40
#define ALL_YMM_SIZE (16 * YMM_SIZE)
#define ALL_ZMM_SIZE (32 * ZMM_SIZE)
// Copied from (Kaz answer)
// https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2
#define UPTOPOW2_0(v) ((v)-1)
#define UPTOPOW2_1(v) (UPTOPOW2_0(v) | (UPTOPOW2_0(v) >> 1))
#define UPTOPOW2_2(v) (UPTOPOW2_1(v) | (UPTOPOW2_1(v) >> 2))
#define UPTOPOW2_3(v) (UPTOPOW2_2(v) | (UPTOPOW2_2(v) >> 4))
#define UPTOPOW2_4(v) (UPTOPOW2_3(v) | (UPTOPOW2_3(v) >> 8))
#define UPTOPOW2_5(v) (UPTOPOW2_4(v) | (UPTOPOW2_4(v) >> 16))
#define UPTOPOW2(v) (UPTOPOW2_5(v) + 1)
// Works only for 0 < v < 512
#define LOG2_MSB(v) \
((v) == 0 \
? 0 \
: ((v) < 2 \
? 1 \
: ((v) < 4 \
? 2 \
: ((v) < 8 \
? 3 \
: ((v) < 16 \
? 4 \
: ((v) < 32 \
? 5 \
: ((v) < 64 ? 6 \
: ((v) < 128 \
? 7 \
: ((v) < 256 \
? 8 \
: 9)))))))))
////////////////////////////////////////////
// Debug
///////////////////////////////////////////
#ifndef VERBOSE
# define VERBOSE 0
#endif
#include <stdio.h>
#if(VERBOSE == 4)
# define MSG(...) \
{ \
printf(__VA_ARGS__); \
}
# define DMSG(...) MSG(__VA_ARGS__)
# define EDMSG(...) MSG(__VA_ARGS__)
# define SEDMSG(...) MSG(__VA_ARGS__)
#elif(VERBOSE == 3)
# define MSG(...) \
{ \
printf(__VA_ARGS__); \
}
# define DMSG(...) MSG(__VA_ARGS__)
# define EDMSG(...) MSG(__VA_ARGS__)
# define SEDMSG(...)
#elif(VERBOSE == 2)
# define MSG(...) \
{ \
printf(__VA_ARGS__); \
}
# define DMSG(...) MSG(__VA_ARGS__)
# define EDMSG(...)
# define SEDMSG(...)
#elif(VERBOSE == 1)
# define MSG(...) \
{ \
printf(__VA_ARGS__); \
}
# define DMSG(...)
# define EDMSG(...)
# define SEDMSG(...)
#else
# define MSG(...)
# define DMSG(...)
# define EDMSG(...)
# define SEDMSG(...)
#endif
////////////////////////////////////////////
// Printing
///////////////////////////////////////////
//#define PRINT_IN_BE
//#define NO_SPACE
//#define NO_NEWLINE
|