(comp-stack-adjust (- arg))
(comp-emit-set-call `(callref Ffuncall ,(1+ arg) ,(comp-sp))))
(byte-unbind
- (comp-emit `(call unbind_to
- ,(make-comp-mvar :constant arg)
- ,(make-comp-mvar :constant nil))))
+ (comp-emit `(call helper_unbind_n
+ ,(make-comp-mvar :constant arg))))
(byte-pophandler
(comp-emit '(pop-handler)))
(byte-pushconditioncase
Lisp_Object helper_temp_output_buffer_setup (Lisp_Object x);
-Lisp_Object helper_unbind_n (int val);
+Lisp_Object helper_unbind_n (Lisp_Object n);
bool helper_PSEUDOVECTOR_TYPEP_XUNTAG (const union vectorlike_header *a,
enum pvec_type code);
return emit_call (calle, comp.lisp_obj_type, nargs, gcc_args);
}
-/* Entry point to dispatch emission of (call fun ...). */
+/* Entry point to dispatch emitting (call fun ...). */
static gcc_jit_rvalue *
emit_limple_call (Lisp_Object args)
{
Lisp_Object calle_sym = FIRST (args);
char *calle = (char *) SDATA (SYMBOL_NAME (calle_sym));
- Lisp_Object emitter =
- Fgethash (calle_sym, comp.emitter_dispatcher, Qnil);
+ Lisp_Object emitter = Fgethash (calle_sym, comp.emitter_dispatcher, Qnil);
if (!NILP (emitter))
{
/* Move this into syms_of_comp the day will be dumpable. */
comp.emitter_dispatcher = CALLN (Fmake_hash_table);
register_dispatch (Qset_internal, emit_set_internal);
- register_dispatch (Qhelper_unbind_n, helper_unbind_n);
+ register_dispatch (Qhelper_unbind_n, emit_simple_limple_call);
}
comp.ctxt = gcc_jit_context_acquire();
}
Lisp_Object
-helper_unbind_n (int val)
+helper_unbind_n (Lisp_Object n)
{
- return unbind_to (SPECPDL_INDEX () - val, Qnil);
+ return unbind_to (SPECPDL_INDEX () - XFIXNUM (n), Qnil);
}
bool