@@ -99,6 +99,31 @@ static_inline int fix_to_int(fix16_t a) { return (a >> 16); }
9999
100100static_inline int int_clip (int v, int minv, int maxv) { return v > maxv ? maxv : (v < minv ? minv : v); }
101101
102+ // Int16 type conversion functions
103+ static_inline int16_t int_to_int16 (int a) { return (int16_t )(a < -32768 ? -32768 : (a > 32767 ? 32767 : a)); }
104+ static_inline int16_t float_to_int16 (float a) { return int_to_int16 ((int )a); }
105+ static_inline int16_t bool_to_int16 (bool a) { return a ? 1 : 0 ; }
106+ static_inline int16_t fix_to_int16 (fix16_t a) { return int_to_int16 (fix_to_int (a)); }
107+ static_inline int16_t int16_to_int16 (int16_t a) { return a; }
108+
109+ static_inline int int16_to_int (int16_t a) { return (int )a; }
110+ static_inline float int16_to_float (int16_t a) { return (float )a; }
111+ static_inline bool int16_to_bool (int16_t a) { return a != 0 ; }
112+ static_inline fix16_t int16_to_fix (int16_t a) { return int_to_fix ((int )a); }
113+ static_inline std::string int16_to_string (int16_t a) { return std::to_string (a); }
114+
115+ // Int16 arithmetic operations with clamping
116+ static_inline int16_t int16_add (int16_t a, int16_t b) { return int_to_int16 ((int )a + (int )b); }
117+ static_inline int16_t int16_sub (int16_t a, int16_t b) { return int_to_int16 ((int )a - (int )b); }
118+ static_inline int16_t int16_mul (int16_t a, int16_t b) { return int_to_int16 ((int )a * (int )b); }
119+ static_inline int16_t int16_div (int16_t a, int16_t b) { return b == 0 ? 0 : int_to_int16 ((int )a / (int )b); }
120+ static_inline int16_t int16_mod (int16_t a, int16_t b) { return b == 0 ? 0 : (int16_t )((int )a % (int )b); }
121+
122+ static_inline int16_t int16_clip (int16_t v, int16_t minv, int16_t maxv) { return v > maxv ? maxv : (v < minv ? minv : v); }
123+ static_inline int16_t int16_abs (int16_t a) { return a < 0 ? -a : a; }
124+ static_inline int16_t int16_min (int16_t a, int16_t b) { return a < b ? a : b; }
125+ static_inline int16_t int16_max (int16_t a, int16_t b) { return a > b ? a : b; }
126+
102127// Basic operations for fixed point numbers
103128static_inline fix16_t fix_add (fix16_t x, fix16_t y) { return x + y; }
104129
@@ -175,6 +200,7 @@ static_inline uint8_t bool_not(uint8_t x) { return !x; }
175200/* Tables */
176201static_inline fix16_t *fix_wrap_array (const fix16_t x[]) { return (fix16_t *)x; };
177202static_inline float *float_wrap_array (const float x[]) { return (float *)x; };
203+ static_inline int16_t *int16_wrap_array (const int16_t x[]) { return (int16_t *)x; };
178204
179205/* Random numbers */
180206float float_random ();
0 commit comments