diff options
author | Kimplul <kimi.h.kuparinen@gmail.com> | 2025-03-14 21:26:54 +0200 |
---|---|---|
committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2025-03-14 21:26:54 +0200 |
commit | 2c25c8d802a8f1553635cd60241265c1853251cd (patch) | |
tree | 97016d623919067a0999bcf7d35623a7d6fdfcd8 | |
parent | 8848ad8a546627e1e935c46950c7a9df759b320e (diff) | |
download | posthaste-2c25c8d802a8f1553635cd60241265c1853251cd.tar.gz posthaste-2c25c8d802a8f1553635cd60241265c1853251cd.zip |
allow 32bit compilation
m--------- | deps/ejit | 0 | ||||
-rw-r--r-- | scripts/makefile | 4 | ||||
-rw-r--r-- | src/lower.c | 57 |
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)); } |