Skip to content

Commit 9168a71

Browse files
committed
Adds initial support for int16 type.
1 parent 0251bc6 commit 9168a71

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

79 files changed

+524
-5771
lines changed

.gitignore

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ debug_*/
3333
.vscode/settings.json
3434
*.swp
3535
*.swo
36-
*~
3736

3837
# Node.js (for VS Code extension)
3938
node_modules/
@@ -65,7 +64,6 @@ __pycache__/
6564
lsp-*.log
6665

6766
# Emacs files
68-
*~
6967
\#*\#
7068
/.emacs.desktop
7169
/.emacs.desktop.lock
@@ -79,4 +77,5 @@ tramp
7977
[._]*.sw[a-p]
8078
[._]s[a-rt-v][a-z]
8179
[._]ss[a-gi-z]
82-
[._]sw[a-p]
80+
[._]sw[a-p]
81+
/src/lsp/vscode-extension/vult_lsp_js.js

runtime/vultin.hpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,31 @@ static_inline int fix_to_int(fix16_t a) { return (a >> 16); }
9999

100100
static_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
103128
static_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 */
176201
static_inline fix16_t *fix_wrap_array(const fix16_t x[]) { return (fix16_t *)x; };
177202
static_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 */
180206
float float_random();

src/core/env.ml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ let builtin_functions =
184184
; "int", C.valid_int
185185
; "real", C.valid_real
186186
; "fix16", C.valid_fix16
187+
; "int16", C.valid_int16
187188
; "string", C.valid_string
188189
; "bool", C.valid_bool
189190
; "u-", C.num_num
@@ -218,7 +219,7 @@ let builtin_functions =
218219

219220

220221
let builtin_types =
221-
[ "int"; "real"; "fix16"; "bool"; "string"; "unit" ]
222+
[ "int"; "int16"; "real"; "fix16"; "bool"; "string"; "unit" ]
222223
|> CCList.map (fun n ->
223224
( n
224225
, { path = Pparser.Syntax.{ id = n; n = None; loc = Loc.default }

src/core/initializer.ml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ let rec getInitRHS (t : type_) =
4040
| { t = TEmptyType; _ } -> C.enull
4141
| { t = TVoid _; _ } -> C.eunit
4242
| { t = TInt; loc; _ } -> C.eint ~loc 0
43+
| { t = TInt16; loc; _ } -> C.eint16 ~loc 0
4344
| { t = TReal; loc; _ } -> C.ereal ~loc 0.0
4445
| { t = TFix16; loc; _ } -> C.efix16 ~loc 0.0
4546
| { t = TString; loc; _ } -> C.estring ~loc ""
@@ -67,6 +68,9 @@ let rec initStatement (cstyle : cstyle) lhs rhs (t : type_) =
6768
| { t = TInt; loc; _ } ->
6869
let rhs = getInitRHS t in
6970
{ s = StmtBind (lhs, rhs); loc }
71+
| { t = TInt16; loc; _ } ->
72+
let rhs = getInitRHS t in
73+
{ s = StmtBind (lhs, rhs); loc }
7074
| { t = TReal; loc; _ } ->
7175
let rhs = getInitRHS t in
7276
{ s = StmtBind (lhs, rhs); loc }

0 commit comments

Comments
 (0)