summaryrefslogtreecommitdiff
path: root/module/system/vm
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
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')
-rw-r--r--module/system/vm/assembler.scm1
-rw-r--r--module/system/vm/disassembler.scm4
2 files changed, 2 insertions, 3 deletions
diff --git a/module/system/vm/assembler.scm b/module/system/vm/assembler.scm
index 296b86c76..babe4796f 100644
--- a/module/system/vm/assembler.scm
+++ b/module/system/vm/assembler.scm
@@ -91,7 +91,6 @@
emit-br-if-tc7
emit-br-if-eq
emit-br-if-eqv
- emit-br-if-equal
emit-br-if-=
emit-br-if-<
emit-br-if-<=
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)