[armedbear-cvs] r12175 - trunk/abcl/src/org/armedbear/lisp
Erik Huelsmann
ehuelsmann at common-lisp.net
Sun Oct 4 20:30:58 UTC 2009
Author: ehuelsmann
Date: Sun Oct 4 16:30:57 2009
New Revision: 12175
Log:
Make non-local GO processing a tad more efficient,
resulting in smaller byte code.
Modified:
trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp
Modified: trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp (original)
+++ trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp Sun Oct 4 16:30:57 2009
@@ -4525,18 +4525,16 @@
;; to which there is no non-local GO instruction
(dolist (tag (remove-if-not #'tag-used-non-locally
(tagbody-tags block)))
- (let ((NEXT (gensym)))
- (aload tag-register)
- (emit 'getstatic *this-class*
- (if *file-compilation*
- (declare-object-as-string (tag-label tag))
- (declare-object (tag-label tag)))
- +lisp-object+)
- (emit 'if_acmpne NEXT) ;; Jump if not EQ.
- (emit 'goto (tag-label tag))
- (label NEXT)))
- ;; Not found. Re-throw Go.
+ (aload tag-register)
+ (emit 'getstatic *this-class*
+ (if *file-compilation*
+ (declare-object-as-string (tag-label tag))
+ (declare-object (tag-label tag)))
+ +lisp-object+)
+ ;; Jump if EQ.
+ (emit 'if_acmpeq (tag-label tag)))
(label RETHROW)
+ ;; Not found. Re-throw Go.
(aload go-register)
(emit 'aconst_null) ;; load null value
(emit-move-to-variable (tagbody-id-variable block))
More information about the armedbear-cvs
mailing list