mirror of
https://github.com/Ed94/perfaware.git
synced 2026-08-14 11:28:08 +00:00
44 lines
1.4 KiB
C
44 lines
1.4 KiB
C
#ifdef INTELLISENSE_DIRECTIVES
|
|
# pragma once
|
|
# include "dsl.h"
|
|
# include "analysis.h"
|
|
#endif
|
|
|
|
#pragma region Math
|
|
#define u8_max 0xffffffffffffffffull
|
|
|
|
#define min(A,B) (((A) < (B)) ? (A) : (B))
|
|
#define max(A,B) (((A) > (B)) ? (A) : (B))
|
|
#define clamp_bot(X,B) max(X, B) // Clamp "X" by "B"
|
|
|
|
#define clamp_decrement(X) (((X) > 0) ? ((X) - 1) : 0)
|
|
|
|
typedef Struct_(R1_U1){ U1 p0; U1 p1; };
|
|
typedef Struct_(R1_U2){ U2 p0; U2 p1; };
|
|
typedef Struct_(R1_U4){ U4 p0; U2 p1; };
|
|
typedef Struct_(R1_U8){ U8 p0; U8 p1; };
|
|
|
|
#define r1u4(p0,p1) (R1_U4){p0,p1}
|
|
#define r1u8(p0,p1) (R1_U8){p0,p1}
|
|
|
|
typedef Struct_(V2_U1){ U1 x; U1 y;};
|
|
|
|
FI_ B8 add_of (U8 a, U8 b, U8*R_ res) { return __builtin_uaddll_overflow(a, b, res); }
|
|
FI_ B8 sub_of (U8 a, U8 b, U8*R_ res) { return __builtin_usubll_overflow(a, b, res); }
|
|
FI_ B8 mul_of (U8 a, U8 b, U8*R_ res) { return __builtin_umulll_overflow(a, b, res); }
|
|
FI_ B8 add_s_of(S8 a, S8 b, S8*R_ res) { return __builtin_saddll_overflow(a, b, res); }
|
|
FI_ B8 sub_s_of(S8 a, S8 b, S8*R_ res) { return __builtin_ssubll_overflow(a, b, res); }
|
|
FI_ B8 mul_s_of(S8 a, S8 b, S8*R_ res) { return __builtin_smulll_overflow(a, b, res); }
|
|
|
|
FI_ U8 span_r1u8(R1_U8 r) {U8 c = ((r.p1 > r.p0) ? (r.p1 - r.p0) : 0); return c;}
|
|
#pragma endregion Math
|
|
|
|
#pragma region Numerics
|
|
|
|
enum {
|
|
Max_U4 = 0xffffffff
|
|
};
|
|
|
|
FI_ U2 Csafe_u2u4(U4 x) { assert_always(x <= Max_U4); return C_(U2, x); }
|
|
#pragma endregion Numerics
|