native aot suite passes
This commit is contained in:
19
qbe_emit.cm
19
qbe_emit.cm
@@ -102,6 +102,9 @@ var qbe_emit = function(ir, qbe, export_name) {
|
||||
var pat_label = null
|
||||
var flg_label = null
|
||||
var in_handler = false
|
||||
var tol = null
|
||||
var fn_arity = 0
|
||||
var arity_tmp = null
|
||||
|
||||
// Function signature: (ctx, frame_ptr) → JSValue
|
||||
emit(`export function l $${name}(l %ctx, l %fp) {`)
|
||||
@@ -572,8 +575,10 @@ var qbe_emit = function(ir, qbe, export_name) {
|
||||
if (op == "eq_tol" || op == "ne_tol") {
|
||||
lhs = s_read(a2)
|
||||
rhs = s_read(a3)
|
||||
a4 = instr[4]
|
||||
tol = s_read(a4)
|
||||
p = fresh()
|
||||
emit(` %${p} =l call $cell_rt_${op}(l %ctx, l ${lhs}, l ${rhs})`)
|
||||
emit(` %${p} =l call $cell_rt_${op}(l %ctx, l ${lhs}, l ${rhs}, l ${tol})`)
|
||||
s_write(a1, `%${p}`)
|
||||
continue
|
||||
}
|
||||
@@ -700,7 +705,7 @@ var qbe_emit = function(ir, qbe, export_name) {
|
||||
p = fresh()
|
||||
if (pn != null) {
|
||||
sl = intern_str(pn)
|
||||
emit(` %${p} =l call $cell_rt_load_field(l %ctx, l ${v}, l ${sl})`)
|
||||
emit(` %${p} =l call $cell_rt_load_prop_str(l %ctx, l ${v}, l ${sl})`)
|
||||
} else {
|
||||
lhs = s_read(a3)
|
||||
emit(` %${p} =l call $cell_rt_load_dynamic(l %ctx, l ${v}, l ${lhs})`)
|
||||
@@ -899,8 +904,14 @@ var qbe_emit = function(ir, qbe, export_name) {
|
||||
// --- Function object creation [G] ---
|
||||
|
||||
if (op == "function") {
|
||||
fn_arity = 0
|
||||
if (a2 >= 0 && a2 < length(ir.functions)) {
|
||||
fn_arity = ir.functions[a2].nr_args
|
||||
}
|
||||
p = fresh()
|
||||
emit(` %${p} =l call $cell_rt_make_function(l %ctx, l ${text(a2)}, l %fp)`)
|
||||
arity_tmp = fresh()
|
||||
emit(` %${arity_tmp} =l copy ${text(fn_arity)}`)
|
||||
emit(` %${p} =l call $cell_rt_make_function(l %ctx, l ${text(a2)}, l %fp, l %${arity_tmp})`)
|
||||
refresh_fp()
|
||||
s_write(a1, `%${p}`)
|
||||
continue
|
||||
@@ -980,7 +991,7 @@ var qbe_emit = function(ir, qbe, export_name) {
|
||||
p = fresh()
|
||||
if (pn != null) {
|
||||
sl = intern_str(pn)
|
||||
emit(` %${p} =l call $cell_rt_delete(l %ctx, l ${v}, l ${sl})`)
|
||||
emit(` %${p} =l call $cell_rt_delete_str(l %ctx, l ${v}, l ${sl})`)
|
||||
} else {
|
||||
lhs = s_read(a3)
|
||||
emit(` %${p} =l call $cell_rt_delete(l %ctx, l ${v}, l ${lhs})`)
|
||||
|
||||
Reference in New Issue
Block a user