xo-interpreter: multiply (i64) primitive
This commit is contained in:
parent
1d1e72adf3
commit
e9f36a3c2d
3 changed files with 27 additions and 9 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue