From 679aefb63d364b2bc73c13b75fe5bee407822892 Mon Sep 17 00:00:00 2001
From: Kimplul <kimi.h.kuparinen@gmail.com>
Date: Sun, 14 Jul 2024 16:34:58 +0300
Subject: update ejit

---
 Makefile         |  2 +-
 deps/ejit        |  2 +-
 scripts/makefile |  5 +++++
 src/lower.c      | 43 ++++++++++++++++++++++---------------------
 4 files changed, 29 insertions(+), 23 deletions(-)

diff --git a/Makefile b/Makefile
index f1a93cb..52150a5 100644
--- a/Makefile
+++ b/Makefile
@@ -12,7 +12,7 @@ setup: deps
 		"${POSTHASTE_SOURCES}"
 
 POSTHASTE_SOURCES	:=
-CLEANUP		:= build deps.mk posthaste
+CLEANUP			:= build deps.mk posthaste
 
 include src/source.mk
 
diff --git a/deps/ejit b/deps/ejit
index 0dd8d9d..8e04d59 160000
--- a/deps/ejit
+++ b/deps/ejit
@@ -1 +1 @@
-Subproject commit 0dd8d9d6f07201bcbbaa677b8bfa2db227236898
+Subproject commit 8e04d594e8d280e37651f9976be52e0052c90513
diff --git a/scripts/makefile b/scripts/makefile
index 7f24989..3efa6d7 100644
--- a/scripts/makefile
+++ b/scripts/makefile
@@ -14,6 +14,11 @@ ASSERTFLAGS	!= [ "$(ASSERT)" != "0" ] \
 			&& echo "-DASSERT=1" \
 			|| echo
 
+JIT		?= 1
+JITFLAGS	!= [ "$(JIT)" != "0" ] \
+			&& echo "-DJIT=1" \
+			|| echo "-DJIT=0"
+
 DEPFLAGS	= -MT $@ -MMD -MP -MF $@.d
 LINTFLAGS	= -fsyntax-only
 PREPROCESS	= -E
diff --git a/src/lower.c b/src/lower.c
index 15ce6d1..5e0e41e 100644
--- a/src/lower.c
+++ b/src/lower.c
@@ -220,8 +220,8 @@ static long escape_store_year(size_t argc, const struct ejit_arg args[argc])
 
 	unsigned month = 0;
 	unsigned day = 0;
-	date_split(args[0].ul, NULL, &month, &day);
-	return date_from_numbers(args[1].ul, month, day);
+	date_split(args[0].u64, NULL, &month, &day);
+	return date_from_numbers(args[1].u64, month, day);
 }
 
 static void lower_store_year(struct fn *f, struct ast *base, struct ast* r)
@@ -245,8 +245,8 @@ static long escape_store_month(size_t argc, const struct ejit_arg args[argc])
 
 	unsigned year = 0;
 	unsigned day = 0;
-	date_split(args[0].ul, &year, NULL, &day);
-	return date_from_numbers(year, args[1].ul, day);
+	date_split(args[0].u64, &year, NULL, &day);
+	return date_from_numbers(year, args[1].u64, day);
 }
 
 static void lower_store_month(struct fn *f, struct ast *base, struct ast* r)
@@ -270,8 +270,8 @@ static long escape_store_day(size_t argc, const struct ejit_arg args[argc])
 
 	unsigned year = 0;
 	unsigned month = 0;
-	date_split(args[0].ul, &year, &month, NULL);
-	return date_from_numbers(year, month, args[1].ul);
+	date_split(args[0].u64, &year, &month, NULL);
+	return date_from_numbers(year, month, args[1].u64);
 }
 
 static void lower_store_day(struct fn *f, struct ast *base, struct ast* r)
@@ -360,7 +360,7 @@ static void lower_return(struct fn *f, struct ast *n)
 {
 	struct ast *expr = return_expr(n);
 	lower(f, expr);
-	ejit_ret(f->f, reg(expr));
+	ejit_retr(f->f, reg(expr));
 	n->l = null_loc();
 }
 
@@ -369,7 +369,7 @@ static long escape_load_weeknum(size_t argc, const struct ejit_arg args[argc])
 	assert(argc == 1);
 	assert(args[0].type == ejit_type_from(TYPE_DATE));
 
-	struct tm time = tm_from_date(args[0].ul);
+	struct tm time = tm_from_date(args[0].u64);
 	return time.tm_yday / 7;
 }
 
@@ -389,7 +389,7 @@ static long escape_load_weekday(size_t argc, const struct ejit_arg args[argc])
 	assert(argc == 1);
 	assert(args[0].type == ejit_type_from(TYPE_DATE));
 
-	struct tm time = tm_from_date(args[0].ul);
+	struct tm time = tm_from_date(args[0].u64);
 	return time.tm_wday;
 }
 
@@ -410,7 +410,7 @@ static long escape_load_year(size_t argc, const struct ejit_arg args[argc])
 	assert(args[0].type == ejit_type_from(TYPE_DATE));
 
 	unsigned year = 0;
-	date_split(args[0].ul, &year, NULL, NULL);
+	date_split(args[0].u64, &year, NULL, NULL);
 	return year;
 }
 
@@ -431,7 +431,7 @@ static long escape_load_month(size_t argc, const struct ejit_arg args[argc])
 	assert(args[0].type == ejit_type_from(TYPE_DATE));
 
 	unsigned month = 0;
-	date_split(args[0].ul, NULL, &month, NULL);
+	date_split(args[0].u64, NULL, &month, NULL);
 	return month;
 }
 
@@ -452,7 +452,7 @@ static long escape_load_day(size_t argc, const struct ejit_arg args[argc])
 	assert(args[0].type == ejit_type_from(TYPE_DATE));
 
 	unsigned day = 0;
-	date_split(args[0].ul, NULL, NULL, &day);
+	date_split(args[0].u64, NULL, NULL, &day);
 	return day;
 }
 
@@ -622,7 +622,7 @@ static long escape_print_date(size_t argc, const struct ejit_arg args[argc])
 	assert(args[0].type == ejit_type_from(TYPE_DATE));
 
 	char str[11] = {0};
-	date_to_string(str, args[0].ul);
+	date_to_string(str, args[0].u64);
 	printf("%s", str);
 	return 0;
 }
@@ -716,7 +716,7 @@ static long escape_date_add(size_t argc, const struct ejit_arg args[argc])
 	assert(argc == 2);
 	assert(args[0].type == ejit_type_from(TYPE_DATE));
 	assert(args[1].type == ejit_type_from(TYPE_INT));
-	return date_add(args[0].ul, args[1].l);
+	return date_add(args[0].u64, args[1].l);
 }
 
 static void lower_date_add(struct fn *f, struct ast *n)
@@ -752,7 +752,7 @@ static long escape_date_sub(size_t argc, const struct ejit_arg args[argc])
 	assert(argc == 2);
 	assert(args[0].type == ejit_type_from(TYPE_DATE));
 	assert(args[1].type == ejit_type_from(TYPE_INT));
-	return date_sub(args[0].ul, args[1].l);
+	return date_sub(args[0].u64, args[1].l);
 }
 
 static void lower_date_sub(struct fn *f, struct ast *n)
@@ -781,8 +781,8 @@ static long escape_date_diff(size_t argc, const struct ejit_arg args[argc])
 	assert(args[0].type == ejit_type_from(TYPE_DATE));
 	assert(args[1].type == ejit_type_from(TYPE_DATE));
 
-	struct tm tm0 = tm_from_date((ph_date_t)args[0].ul);
-	struct tm tm1 = tm_from_date((ph_date_t)args[1].ul);
+	struct tm tm0 = tm_from_date((ph_date_t)args[0].u64);
+	struct tm tm1 = tm_from_date((ph_date_t)args[1].u64);
 
 	time_t t0 = mktime(&tm0);
 	time_t t1 = mktime(&tm1);
@@ -995,9 +995,10 @@ static void lower_proc_def(struct ast *d)
 	lower_list(f, proc_body(d));
 
 	if (d->t == TYPE_VOID)
-		ejit_ret_i(f->f, 0);
+		ejit_reti(f->f, 0);
 
-	ejit_compile_func(f->f, f->max_sp + 1, 0);
+	/* ph_date_t is inherently 64bit so we can't really use 32bit JIT */
+	ejit_select_compile_func(f->f, f->max_sp + 1, 0, true, JIT);
 }
 
 static void lower_func_def(struct ast *d)
@@ -1012,7 +1013,7 @@ static void lower_func_def(struct ast *d)
 
 	lower_list(f, func_vars(d));
 	lower_list(f, func_body(d));
-	ejit_compile_func(f->f, f->max_sp + 1, 0);
+	ejit_select_compile_func(f->f, f->max_sp + 1, 0, true, JIT);
 }
 
 struct fn *find_fn(size_t idx)
@@ -1063,7 +1064,7 @@ int lower_ast(struct ast *tree)
 		}
 	}
 
-	ejit_compile_func(f->f, f->max_sp + 1, 0);
+	ejit_select_compile_func(f->f, f->max_sp + 1, 0, true, JIT);
 	return 0;
 }
 
-- 
cgit v1.2.3