1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-12 06:41:13 +02:00

Type inference: Use &u64-max instead of #xffff...

* module/language/cps/types.scm: Use &u64-max where possible.
This commit is contained in:
Andy Wingo 2016-06-10 07:46:57 +02:00
parent 1a2ab83bcf
commit 58e508b569

View file

@ -742,9 +742,9 @@ minimum, and maximum."
(define! result &flonum (&min f64) (&max f64))) (define! result &flonum (&min f64) (&max f64)))
(define-type-checker (scm->u64 scm) (define-type-checker (scm->u64 scm)
(check-type scm &exact-integer 0 #xffffffffffffffff)) (check-type scm &exact-integer 0 &u64-max))
(define-type-inferrer (scm->u64 scm result) (define-type-inferrer (scm->u64 scm result)
(restrict! scm &exact-integer 0 #xffffffffffffffff) (restrict! scm &exact-integer 0 &u64-max)
(define! result &u64 (&min/0 scm) (&max/u64 scm))) (define! result &u64 (&min/0 scm) (&max/u64 scm)))
(define-type-aliases scm->u64 load-u64) (define-type-aliases scm->u64 load-u64)
@ -1004,9 +1004,9 @@ minimum, and maximum."
(define-type-inferrer (uadd a b result) (define-type-inferrer (uadd a b result)
;; Handle wraparound. ;; Handle wraparound.
(let ((max (+ (&max/u64 a) (&max/u64 b)))) (let ((max (+ (&max/u64 a) (&max/u64 b))))
(if (<= max #xffffffffffffffff) (if (<= max &u64-max)
(define! result &u64 (+ (&min/0 a) (&min/0 b)) max) (define! result &u64 (+ (&min/0 a) (&min/0 b)) max)
(define! result &u64 0 #xffffffffffffffff)))) (define! result &u64 0 &u64-max))))
(define-type-aliases uadd uadd/immediate) (define-type-aliases uadd uadd/immediate)
(define-simple-type-checker (sub &number &number)) (define-simple-type-checker (sub &number &number))
@ -1025,7 +1025,7 @@ minimum, and maximum."
;; Handle wraparound. ;; Handle wraparound.
(let ((min (- (&min/0 a) (&max/u64 b)))) (let ((min (- (&min/0 a) (&max/u64 b))))
(if (< min 0) (if (< min 0)
(define! result &u64 0 #xffffffffffffffff) (define! result &u64 0 &u64-max)
(define! result &u64 min (- (&max/u64 a) (&min/0 b)))))) (define! result &u64 min (- (&max/u64 a) (&min/0 b))))))
(define-type-aliases usub usub/immediate) (define-type-aliases usub usub/immediate)
@ -1077,9 +1077,9 @@ minimum, and maximum."
(define-type-inferrer (umul a b result) (define-type-inferrer (umul a b result)
;; Handle wraparound. ;; Handle wraparound.
(let ((max (* (&max/u64 a) (&max/u64 b)))) (let ((max (* (&max/u64 a) (&max/u64 b))))
(if (<= max #xffffffffffffffff) (if (<= max &u64-max)
(define! result &u64 (* (&min/0 a) (&min/0 b)) max) (define! result &u64 (* (&min/0 a) (&min/0 b)) max)
(define! result &u64 0 #xffffffffffffffff)))) (define! result &u64 0 &u64-max))))
(define-type-aliases umul umul/immediate) (define-type-aliases umul umul/immediate)
(define-type-checker (div a b) (define-type-checker (div a b)