[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))))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master 501ad54: bytecomp.el: Avoid unnecessary calculation for jump table addresses.,
Vibhav Pant <=