[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 10/11: Inline u64/scm comparisons
From: |
Andy Wingo |
Subject: |
[Guile-commits] 10/11: Inline u64/scm comparisons |
Date: |
Sun, 29 Oct 2017 16:05:02 -0400 (EDT) |
wingo pushed a commit to branch master
in repository guile.
commit 6bb0a96fa1672855572c5e7166631fb14404d7e0
Author: Andy Wingo <address@hidden>
Date: Sun Oct 29 20:35:30 2017 +0100
Inline u64/scm comparisons
* module/language/cps/specialize-numbers.scm
(specialize-u64-scm-comparison): Inline comparisons against fixnums.
---
module/language/cps/specialize-numbers.scm | 35 +++++++++++++++++++++++++-----
1 file changed, 29 insertions(+), 6 deletions(-)
diff --git a/module/language/cps/specialize-numbers.scm
b/module/language/cps/specialize-numbers.scm
index 4a687e7..ffc67ed 100644
--- a/module/language/cps/specialize-numbers.scm
+++ b/module/language/cps/specialize-numbers.scm
@@ -135,14 +135,37 @@
($primcall 'scm->u64 (a)))))))
(define (specialize-u64-scm-comparison cps kf kt src op a-u64 b-scm)
- (let ((op (symbol-append 'u64- op '-scm)))
+ (let ((u64-op (symbol-append 'u64- op)))
(with-cps cps
- (letv u64)
- (letk kop ($kargs ('u64) (u64)
- ($continue kf src
- ($branch kt ($primcall op (u64 b-scm))))))
+ (letv u64 s64 zero z64 sunk)
+ (letk kheap ($kargs ('sunk) (sunk)
+ ($continue kf src
+ ($branch kt ($primcall op (sunk b-scm))))))
+ ;; Re-box the variable. FIXME: currently we use a specially
+ ;; marked u64->scm to avoid CSE from hoisting the allocation
+ ;; again. Instaed we should just use a-u64 directly and implement
+ ;; an allocation sinking pass that should handle this..
+ (letk kretag ($kargs () ()
+ ($continue kheap src
+ ($primcall 'u64->scm/unlikely (u64)))))
+ (letk kcmp ($kargs () ()
+ ($continue kf src
+ ($branch kt ($primcall u64-op (u64 s64))))))
+ (letk kz64 ($kargs ('z64) (z64)
+ ($continue (case op ((< <= =) kf) (else kt)) src
+ ($branch kcmp ($primcall 's64-<= (z64 s64))))))
+ (letk kzero ($kargs ('zero) (zero)
+ ($continue kz64 src ($primcall 'load-s64 (zero)))))
+ (letk ks64 ($kargs ('s64) (s64)
+ ($continue kzero src ($const 0))))
+ (letk kfix ($kargs () ()
+ ($continue ks64 src
+ ($primcall 'untag-fixnum (b-scm)))))
+ (letk ku64 ($kargs ('u64) (u64)
+ ($continue kretag src
+ ($branch kfix ($primcall 'fixnum? (b-scm))))))
(build-term
- ($continue kop src
+ ($continue ku64 src
($primcall 'scm->u64 (a-u64)))))))
(define (specialize-f64-comparison cps kf kt src op a b)
- [Guile-commits] branch master updated (9d1235a -> d1c69b5), Andy Wingo, 2017/10/29
- [Guile-commits] 01/11: Minor optimization compiling 'and', Andy Wingo, 2017/10/29
- [Guile-commits] 08/11: Add untag-fixnum instruction, Andy Wingo, 2017/10/29
- [Guile-commits] 10/11: Inline u64/scm comparisons,
Andy Wingo <=
- [Guile-commits] 02/11: Rename "number" tag to "heap-number", Andy Wingo, 2017/10/29
- [Guile-commits] 03/11: Simplify lowering of branching primcalls to CPS, Andy Wingo, 2017/10/29
- [Guile-commits] 11/11: Remove compiler support for u64-scm comparisons, Andy Wingo, 2017/10/29
- [Guile-commits] 05/11: Lower eqv? and equal? to new instructions., Andy Wingo, 2017/10/29
- [Guile-commits] 04/11: Add missing compiler support for heap-object? primcall et al., Andy Wingo, 2017/10/29
- [Guile-commits] 07/11: Add compiler support for fixnum? primcall predicate, Andy Wingo, 2017/10/29
- [Guile-commits] 06/11: Add compiler support for s64 comparisons., Andy Wingo, 2017/10/29
- [Guile-commits] 09/11: Add hacks around lack of allocation sinking, Andy Wingo, 2017/10/29