aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2025-03-14 21:26:54 +0200
committerKimplul <kimi.h.kuparinen@gmail.com>2025-03-14 21:26:54 +0200
commit2c25c8d802a8f1553635cd60241265c1853251cd (patch)
tree97016d623919067a0999bcf7d35623a7d6fdfcd8
parent8848ad8a546627e1e935c46950c7a9df759b320e (diff)
downloadposthaste-2c25c8d802a8f1553635cd60241265c1853251cd.tar.gz
posthaste-2c25c8d802a8f1553635cd60241265c1853251cd.zip
allow 32bit compilation
m---------deps/ejit0
-rw-r--r--scripts/makefile4
-rw-r--r--src/lower.c57
3 files changed, 31 insertions, 30 deletions
diff --git a/deps/ejit b/deps/ejit
-Subproject 57f6b41047e95374701ee276248f0f861516845
+Subproject f5c729ea59d227a507f83bd94d07f4366b46d72
diff --git a/scripts/makefile b/scripts/makefile
index 3efa6d7..e61e101 100644
--- a/scripts/makefile
+++ b/scripts/makefile
@@ -54,8 +54,8 @@ gen/gen_parser.c: src/parser.y gen/gen_lexer.inc
gen/gen_lexer.inc: src/lexer.l
flex -o gen/gen_lexer.inc src/lexer.l
-posthaste: $(POSTHASTE_OBJS) deps/ejit/ejit.o
- $(COMPILE_POSTHASTE) $(POSTHASTE_OBJS) deps/ejit/ejit.o -o $@ $(LINK_FLAGS)
+posthaste: $(POSTHASTE_OBJS) deps/ejit/libejit.a
+ $(COMPILE_POSTHASTE) $(POSTHASTE_OBJS) deps/ejit/libejit.a -o $@ $(LINK_FLAGS)
# might lint some common things twice
.PHONY:
diff --git a/src/lower.c b/src/lower.c
index f08d5a0..9931076 100644
--- a/src/lower.c
+++ b/src/lower.c
@@ -140,7 +140,7 @@ static void lower_date(struct fn *f, struct ast *n)
static void lower_string(struct fn *f, struct ast *n)
{
n->l = build_local_loc(f->sp);
- ejit_movi(f->f, reg(n), (int64_t)n->id);
+ ejit_movi(f->f, reg(n), (uintptr_t)n->id);
}
static void lower_int(struct fn *f, struct ast *n)
@@ -231,7 +231,7 @@ static void lower_div(struct fn *f, struct ast *n)
ejit_divr(f->f, reg(n), reg(l), reg(r));
}
-static long escape_store_year(size_t argc, const struct ejit_arg args[argc])
+static int64_t escape_store_year(size_t argc, const struct ejit_arg args[argc])
{
assert(argc == 2);
assert(args[0].type == ejit_type_from(TYPE_DATE));
@@ -252,11 +252,12 @@ static void lower_store_year(struct fn *f, struct ast *base, struct ast* r)
EJIT_OPERAND_GPR(regno(r), ejit_type_from(TYPE_INT))
};
- ejit_escapei(f->f, escape_store_year, 2, args);
+ /* we must use 64bit values due to our time representation */
+ ejit_escapei_l(f->f, escape_store_year, 2, args);
ejit_retval(f->f, reg(base));
}
-static long escape_store_month(size_t argc, const struct ejit_arg args[argc])
+static int64_t escape_store_month(size_t argc, const struct ejit_arg args[argc])
{
assert(argc == 2);
assert(args[0].type == ejit_type_from(TYPE_DATE));
@@ -277,11 +278,11 @@ static void lower_store_month(struct fn *f, struct ast *base, struct ast* r)
EJIT_OPERAND_GPR(regno(r), ejit_type_from(TYPE_INT))
};
- ejit_escapei(f->f, escape_store_month, 2, args);
+ ejit_escapei_l(f->f, escape_store_month, 2, args);
ejit_retval(f->f, reg(base));
}
-static long escape_store_day(size_t argc, const struct ejit_arg args[argc])
+static int64_t escape_store_day(size_t argc, const struct ejit_arg args[argc])
{
assert(argc == 2);
assert(args[0].type == ejit_type_from(TYPE_DATE));
@@ -302,7 +303,7 @@ static void lower_store_day(struct fn *f, struct ast *base, struct ast* r)
EJIT_OPERAND_GPR(regno(r), ejit_type_from(TYPE_INT))
};
- ejit_escapei(f->f, escape_store_day, 2, args);
+ ejit_escapei_l(f->f, escape_store_day, 2, args);
ejit_retval(f->f, reg(base));
}
@@ -405,7 +406,7 @@ static void lower_load_weeknum(struct fn *f, struct ast *n, struct ast *base)
EJIT_OPERAND_GPR(regno(base), ejit_type_from(TYPE_DATE))
};
- ejit_escapei(f->f, escape_load_weeknum, 1, args);
+ ejit_escapei_i(f->f, escape_load_weeknum, 1, args);
ejit_retval(f->f, reg(n));
}
@@ -425,7 +426,7 @@ static void lower_load_weekday(struct fn *f, struct ast *n, struct ast *base)
EJIT_OPERAND_GPR(regno(base), ejit_type_from(TYPE_DATE))
};
- ejit_escapei(f->f, escape_load_weekday, 1, args);
+ ejit_escapei_i(f->f, escape_load_weekday, 1, args);
ejit_retval(f->f, reg(n));
}
@@ -446,7 +447,7 @@ static void lower_load_year(struct fn *f, struct ast *n, struct ast *base)
EJIT_OPERAND_GPR(regno(base), ejit_type_from(TYPE_DATE))
};
- ejit_escapei(f->f, escape_load_year, 1, args);
+ ejit_escapei_i(f->f, escape_load_year, 1, args);
ejit_retval(f->f, reg(n));
}
@@ -467,7 +468,7 @@ static void lower_load_month(struct fn *f, struct ast *n, struct ast *base)
EJIT_OPERAND_GPR(regno(base), ejit_type_from(TYPE_DATE))
};
- ejit_escapei(f->f, escape_load_month, 1, args);
+ ejit_escapei_i(f->f, escape_load_month, 1, args);
ejit_retval(f->f, reg(n));
}
@@ -488,7 +489,7 @@ static void lower_load_day(struct fn *f, struct ast *n, struct ast *base)
EJIT_OPERAND_GPR(regno(base), ejit_type_from(TYPE_DATE))
};
- ejit_escapei(f->f, escape_load_day, 1, args);
+ ejit_escapei_i(f->f, escape_load_day, 1, args);
ejit_retval(f->f, reg(n));
}
@@ -539,10 +540,10 @@ static void lower_print(struct fn *f, struct ast *p)
/* don't print space on last element */
if (n->n)
- ejit_escapei(f->f, escape_print_space, 0, NULL);
+ ejit_escapei_i(f->f, escape_print_space, 0, NULL);
}
- ejit_escapei(f->f, escape_print_newline, 0, NULL);
+ ejit_escapei_i(f->f, escape_print_newline, 0, NULL);
p->l = null_loc();
}
@@ -566,7 +567,7 @@ static void lower_proc_call(struct fn *f, struct ast *c)
struct fn *target = vec_at(&fns, def->l.s);
assert(target);
- ejit_calli(f->f, target->f, count, args);
+ ejit_calli_l(f->f, target->f, count, args);
f->sp -= count;
@@ -593,7 +594,7 @@ static void lower_func_call(struct fn *f, struct ast *c)
struct fn *target = vec_at(&fns, def->l.s);
assert(target);
- ejit_calli(f->f, target->f, count, args);
+ ejit_calli_l(f->f, target->f, count, args);
f->sp -= count;
@@ -665,7 +666,7 @@ static void lower_print_date(struct fn *f, struct ast *n)
EJIT_OPERAND_GPR(regno(expr), ejit_type_from(TYPE_DATE))
};
- ejit_escapei(f->f, escape_print_date, 1, args);
+ ejit_escapei_i(f->f, escape_print_date, 1, args);
n->l = null_loc();
}
@@ -686,7 +687,7 @@ static void lower_print_int(struct fn *f, struct ast *n)
EJIT_OPERAND_GPR(regno(expr), ejit_type_from(TYPE_INT))
};
- ejit_escapei(f->f, escape_print_int, 1, args);
+ ejit_escapei_i(f->f, escape_print_int, 1, args);
n->l = null_loc();
}
@@ -707,7 +708,7 @@ static void lower_print_string(struct fn *f, struct ast *n)
EJIT_OPERAND_GPR(regno(expr), ejit_type_from(TYPE_STRING))
};
- ejit_escapei(f->f, escape_print_string, 1, args);
+ ejit_escapei_i(f->f, escape_print_string, 1, args);
n->l = null_loc();
}
@@ -728,7 +729,7 @@ static void lower_print_bool(struct fn *f, struct ast *n)
EJIT_OPERAND_GPR(regno(expr), ejit_type_from(TYPE_BOOL))
};
- ejit_escapei(f->f, escape_print_bool, 1, args);
+ ejit_escapei_i(f->f, escape_print_bool, 1, args);
n->l = null_loc();
}
@@ -740,7 +741,7 @@ static ph_date_t date_add(ph_date_t d, long i)
return date_from_tm(time);
}
-static long escape_date_add(size_t argc, const struct ejit_arg args[argc])
+static int64_t escape_date_add(size_t argc, const struct ejit_arg args[argc])
{
assert(argc == 2);
assert(args[0].type == ejit_type_from(TYPE_DATE));
@@ -764,7 +765,7 @@ static void lower_date_add(struct fn *f, struct ast *n)
EJIT_OPERAND_GPR(regno(r), ejit_type_from(TYPE_INT)),
};
- ejit_escapei(f->f, escape_date_add, 2, args);
+ ejit_escapei_l(f->f, escape_date_add, 2, args);
ejit_retval(f->f, reg(n));
}
@@ -776,7 +777,7 @@ static ph_date_t date_sub(ph_date_t d, long i)
return date_from_tm(time);
}
-static long escape_date_sub(size_t argc, const struct ejit_arg args[argc])
+static int64_t escape_date_sub(size_t argc, const struct ejit_arg args[argc])
{
assert(argc == 2);
assert(args[0].type == ejit_type_from(TYPE_DATE));
@@ -800,11 +801,11 @@ static void lower_date_sub(struct fn *f, struct ast *n)
EJIT_OPERAND_GPR(regno(r), ejit_type_from(TYPE_INT)),
};
- ejit_escapei(f->f, escape_date_sub, 2, args);
+ ejit_escapei_l(f->f, escape_date_sub, 2, args);
ejit_retval(f->f, reg(n));
}
-static long escape_date_diff(size_t argc, const struct ejit_arg args[argc])
+static int64_t escape_date_diff(size_t argc, const struct ejit_arg args[argc])
{
assert(argc == 2);
assert(args[0].type == ejit_type_from(TYPE_DATE));
@@ -836,7 +837,7 @@ static void lower_date_diff(struct fn *f, struct ast *n)
EJIT_OPERAND_GPR(regno(r), ejit_type_from(TYPE_DATE)),
};
- ejit_escapei(f->f, escape_date_diff, 2, args);
+ ejit_escapei_l(f->f, escape_date_diff, 2, args);
ejit_retval(f->f, reg(n));
}
@@ -965,7 +966,7 @@ static void lower_unless_expr(struct fn *f, struct ast *n)
ejit_patch(f->f, jump, l);
}
-static long escape_today(size_t argc, const struct ejit_arg args[argc])
+static int64_t escape_today(size_t argc, const struct ejit_arg args[argc])
{
assert(argc == 0);
return current_date();
@@ -977,7 +978,7 @@ static void lower_builtin_call(struct fn *f, struct ast *n)
assert(same_id(builtin_call_id(n), "Today"));
n->l = build_local_loc(f->sp);
- ejit_escapei(f->f, escape_today, 0, NULL);
+ ejit_escapei_l(f->f, escape_today, 0, NULL);
ejit_retval(f->f, reg(n));
}