summaryrefslogtreecommitdiff
path: root/module/system/vm/disassembler.scm
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2015-11-19 22:49:54 +0100
committerAndy Wingo <wingo@pobox.com>2015-12-01 11:30:54 +0100
commit07607f66b81f644077fc734b591da2aa84af10e2 (patch)
tree958204a5c4044174bb3111af108c7c5165d06dbb /module/system/vm/disassembler.scm
parent87cc8b0f97d231b056ffac0870db708bf996ddf9 (diff)
downloadguile-07607f66b81f644077fc734b591da2aa84af10e2.tar.gz
Add instructions to branch on u64 comparisons
* libguile/vm-engine.c (BR_U64_ARITHMETIC): New helper. (br-if-u64-=, br-if-u64-<, br-if-u64->=): New instructions. * module/language/cps/compile-bytecode.scm (compile-function): * module/language/cps/effects-analysis.scm: * module/language/cps/primitives.scm (*branching-primcall-arities*): * module/language/cps/type-fold.scm: * module/language/cps/types.scm (u64-=, infer-u64-comparison-ranges): (define-u64-comparison-inferrer, u64-<, u64-<=, u64->=, u64->): * module/system/vm/assembler.scm: * module/system/vm/disassembler.scm (code-annotation): (compute-labels): Compiler and toolchain support for the new instructions.
Diffstat (limited to 'module/system/vm/disassembler.scm')
-rw-r--r--module/system/vm/disassembler.scm4
1 files changed, 3 insertions, 1 deletions
diff --git a/module/system/vm/disassembler.scm b/module/system/vm/disassembler.scm
index d90c88505..b0712540c 100644
--- a/module/system/vm/disassembler.scm
+++ b/module/system/vm/disassembler.scm
@@ -195,6 +195,7 @@ address of that offset."
'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-= 'br-if-< 'br-if-<= 'br-if-> 'br-if->=
+ 'br-if-u64-= 'br-if-u64-< 'br-if-u64-<=
'br-if-logtest) _ ... target)
(list "-> ~A" (vector-ref labels (- (+ offset target) start))))
(('br-if-tc7 slot invert? tc7 target)
@@ -296,7 +297,8 @@ address of that offset."
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-= br-if-< br-if-<= br-if-> br-if->= br-if-logtest)
+ br-if-= br-if-< br-if-<= br-if-> br-if->= br-if-logtest
+ br-if-u64-= br-if-u64-< br-if-u64-<=)
(match arg
((_ ... target)
(add-label! (+ offset target) "L"))))