diff options
author | Andy Wingo <wingo@pobox.com> | 2015-11-12 21:16:33 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2015-11-12 21:22:19 +0100 |
commit | 3e5d4131d2b8eecf72568bc94d626a7cdced7f5b (patch) | |
tree | 37d623419abba42239df7230a3410f9d2f2bf2d5 /module/system/vm/disassembler.scm | |
parent | 92ed7f69894316247e78c29b953bb59b5c3953d7 (diff) | |
download | guile-3e5d4131d2b8eecf72568bc94d626a7cdced7f5b.tar.gz |
Don't compile equal? to br-if-equal
* module/language/cps/compile-bytecode.scm (compile-function):
* module/language/cps/primitives.scm (*branching-primcall-arities*):
* module/language/cps/type-fold.scm (equal?):
* module/language/cps/types.scm (equal?):
* module/language/tree-il/compile-cps.scm (convert): `equal?' is no
longer a branching primcall, because it isn't inline. The
implementation could lead to bad backtraces also, as it didn't save
the IP, and actually could lead to segfaults as it didn't reload the
SP after the return. There is an eqv? fast-path, though.
* module/system/vm/assembler.scm (br-if-equal): Remove interface.
* module/system/vm/disassembler.scm (code-annotation):
(compute-labels): No need to handle br-if-equal.
Diffstat (limited to 'module/system/vm/disassembler.scm')
-rw-r--r-- | module/system/vm/disassembler.scm | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/module/system/vm/disassembler.scm b/module/system/vm/disassembler.scm index f718a4c84..d90c88505 100644 --- a/module/system/vm/disassembler.scm +++ b/module/system/vm/disassembler.scm @@ -193,7 +193,7 @@ address of that offset." (((or 'br 'br-if-nargs-ne 'br-if-nargs-lt 'br-if-nargs-gt 'br-if-true 'br-if-null 'br-if-nil 'br-if-pair 'br-if-struct - 'br-if-char 'br-if-eq 'br-if-eqv 'br-if-equal + 'br-if-char 'br-if-eq 'br-if-eqv 'br-if-= 'br-if-< 'br-if-<= 'br-if-> 'br-if->= 'br-if-logtest) _ ... target) (list "-> ~A" (vector-ref labels (- (+ offset target) start)))) @@ -295,7 +295,7 @@ address of that offset." ((br br-if-nargs-ne br-if-nargs-lt br-if-nargs-gt br-if-true br-if-null br-if-nil br-if-pair br-if-struct - br-if-char br-if-tc7 br-if-eq br-if-eqv br-if-equal + br-if-char br-if-tc7 br-if-eq br-if-eqv br-if-= br-if-< br-if-<= br-if-> br-if->= br-if-logtest) (match arg ((_ ... target) |