emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 501ad54: bytecomp.el: Avoid unnecessary calculation


From: Vibhav Pant
Subject: [Emacs-diffs] master 501ad54: bytecomp.el: Avoid unnecessary calculation for jump table addresses.
Date: Thu, 16 Feb 2017 09:59:45 -0500 (EST)

branch: master
commit 501ad546263ed2a902be1c9d8c1bb3af5794066b
Author: Vibhav Pant <address@hidden>
Commit: Vibhav Pant <address@hidden>

    bytecomp.el: Avoid unnecessary calculation for jump table addresses.
    
    * lisp/emacs-lisp/bytecomp.el (byte-compile-lapcode): Don't do
      redundant operations while calculating the correct jump addresses
      from TAGs in jump tables.
---
 lisp/emacs-lisp/bytecomp.el | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index 75e6b90..e96ba0b 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -911,16 +911,21 @@ CONST2 may be evaluated multiple times."
     ;; Patch tag PCs into absolute jumps.
     (dolist (bytes-tail patchlist)
       (setq pc (caar bytes-tail))      ; Pick PC from goto's tag.
+      ;; Splits PC's value into 2 bytes. The jump address is
+      ;; "reconstructued" by the `FETCH2' macro in `bytecode.c'.
       (setcar (cdr bytes-tail) (logand pc 255))
       (setcar bytes-tail (lsh pc -8))
       ;; FIXME: Replace this by some workaround.
       (if (> (car bytes-tail) 255) (error "Bytecode overflow")))
 
+    ;; Similarly, replace TAGs in all jump tables with the correct PC index.
     (dolist (hash-table byte-compile-jump-tables)
       (maphash #'(lambda (value tag)
                    (setq pc (cadr tag))
-                   (puthash value (+ (logand pc 255) (lsh (lsh pc -8) 8))
-                            hash-table))
+                   ;; We don't need to split PC here, as it is stored as a lisp
+                   ;; object in the hash table (whereas other goto-* ops store
+                   ;; it within 2 bytes in the byte string).
+                   (puthash value pc hash-table))
                hash-table))
     (apply 'unibyte-string (nreverse bytes))))
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]