xo-interpreter: multiply (i64) primitive

This commit is contained in:
Roland Conybeare 2025-11-28 21:37:28 -05:00
commit e9f36a3c2d
3 changed files with 27 additions and 9 deletions

View file

@ -180,10 +180,10 @@ namespace xo {
static rp<PrimitiveExprType> s_retval;
if (!s_retval)
s_retval = PrimitiveExpr::make("add2_i64",
&add2_i64,
true /*explicit_symbol_def*/,
llvmintrinsic::i_add);
s_retval = PrimitiveExpr::make("@add2_i64",
&add2_i64,
true /*explicit_symbol_def*/,
llvmintrinsic::i_add);
return s_retval;
}
@ -208,10 +208,10 @@ namespace xo {
static rp<PrimitiveExprType> s_retval;
if (!s_retval)
s_retval = PrimitiveExpr::make("mul2_i64",
&mul2_i64,
true /*explicit_symbol_def*/,
llvmintrinsic::i_mul);
s_retval = PrimitiveExpr::make("@mul2_i64",
&mul2_i64,
true /*explicit_symbol_def*/,
llvmintrinsic::i_mul);
return s_retval;
}

View file

@ -5,6 +5,7 @@
#include "xo/object/ObjectConverter.hpp"
#include "xo/alloc/IAlloc.hpp"
#include "Primitive.hpp"
#include "GlobalEnv.hpp"
namespace xo {
@ -26,6 +27,20 @@ namespace xo {
**/
static void install_interpreter_conversions(ObjectConverter * target);
template <typename Expr>
static void install_pm(gc::IAlloc * mm, rp<Expr> pm_expr, gp<GlobalEnv> env) {
gp<Object> rhs
= xo::obj::make_primitive(mm, pm_expr->name(), pm_expr->value());
/* store in env using this variable-expr */
rp<Variable> lhs
= Variable::make(pm_expr->name(), pm_expr->value_td());
gp<Object> * addr = env->establish_var(lhs.borrow());
*addr = rhs;
}
static void install(gc::IAlloc * mm, gp<GlobalEnv> env);
};
}

View file

@ -46,7 +46,7 @@ namespace xo {
*addr = rhs;
}
// add2_i64
// @add2_i64
{
auto pm_expr = PrimitiveExpr_i64::make_add2_i64();
@ -57,6 +57,9 @@ namespace xo {
*addr = rhs;
}
// @mul2_i64
install_pm(mm, PrimitiveExpr_i64::make_mul2_i64(), env);
}
}
}