From c31b471cadcb9b8171de04b09a044bb775682a3a Mon Sep 17 00:00:00 2001 From: Andrea Corallo Date: Sat, 21 Sep 2019 09:47:02 +0200 Subject: [PATCH] add direct-call direct-callref into frontend --- lisp/emacs-lisp/comp.el | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el index 551fdf80389..3ccdf4f2e46 100644 --- a/lisp/emacs-lisp/comp.el +++ b/lisp/emacs-lisp/comp.el @@ -1308,20 +1308,22 @@ This can run just once." (subrp (subrp f)) (callee-in-unit (gethash callee (comp-ctxt-funcs-h comp-ctxt)))) - (when-let* ((optimize (or (and subrp - (not (subr-native-elispp f))) - (eq callee self) - ;; Attention speed 3 optimize inter compilation - ;; unit calls!! - (and (>= comp-speed 3) - callee-in-unit))) - (call-type (if (if subrp - (not (numberp (cdr (subr-arity f)))) - (comp-nargs-p callee-in-unit)) - 'callref - 'call))) - (comp-add-subr-to-relocs callee) - `(,call-type ,callee ,@args))))) + (if (and subrp (not (subr-native-elispp f))) + (let ((call-type (if (if subrp + (not (numberp (cdr (subr-arity f)))) + (comp-nargs-p callee-in-unit)) + 'callref + 'call))) + (comp-add-subr-to-relocs callee) + `(,call-type ,callee ,@args)) + ;; Intra compilation unit procedure call optimization. + (when (or (eq callee self) + ;; Attention speed 3 triggers that for non self calls too!! + (and (>= comp-speed 3) + callee-in-unit)) + (let* ((nargs (comp-nargs-p (comp-func-args callee-in-unit))) + (call-type (if nargs 'direct-callref 'direct-call))) + `(,call-type ,callee ,@args))))))) (defun comp-call-optim (funcs) "Given FUNCS try to avoid funcall trampoline usage when possible." -- 2.39.5