From 7d71d9b945f60674ac6e294d731bcb4bc1ef5bd7 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Wed, 22 Nov 2017 11:53:42 +0100 Subject: [PATCH] Optimize check-urange in assembler.scm * module/system/vm/assembler.scm (check-urange): Hoist exact-integer? check so that the side effect is entirely in this function and not in `logand'. Allows devirtualize-integers to peel off a nice straight trace. --- module/system/vm/assembler.scm | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/module/system/vm/assembler.scm b/module/system/vm/assembler.scm index 3fd5bba79..6a5b7481b 100644 --- a/module/system/vm/assembler.scm +++ b/module/system/vm/assembler.scm @@ -305,10 +305,9 @@ ;;; These helpers create one 32-bit unit from multiple components. (define-inline (check-urange x mask) - (let ((x* (logand x mask))) - (unless (= x x*) - (error "out of range" x)) - x*)) + (unless (and (exact-integer? x) (= x (logand x mask))) + (error "out of range" x)) + x) (define-inline (check-srange x mask) (let ((x* (logand x mask)))