summaryrefslogtreecommitdiff
path: root/module/system/vm/disassembler.scm
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2015-11-12 21:16:33 +0100
committerAndy Wingo <wingo@pobox.com>2015-11-12 21:22:19 +0100
commit3e5d4131d2b8eecf72568bc94d626a7cdced7f5b (patch)
tree37d623419abba42239df7230a3410f9d2f2bf2d5 /module/system/vm/disassembler.scm
parent92ed7f69894316247e78c29b953bb59b5c3953d7 (diff)
downloadguile-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.scm4
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)