From 1d7826bdbf3b2692f911b85e311c6b88d94af5ea Mon Sep 17 00:00:00 2001 From: "Guillermo J. Rozas" Date: Thu, 18 Feb 1993 01:28:29 +0000 Subject: [PATCH] Fix bug in split-64-bits. --- v7/src/compiler/machines/alpha/lapgen.scm | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/v7/src/compiler/machines/alpha/lapgen.scm b/v7/src/compiler/machines/alpha/lapgen.scm index 26f385b50..df3982fd6 100644 --- a/v7/src/compiler/machines/alpha/lapgen.scm +++ b/v7/src/compiler/machines/alpha/lapgen.scm @@ -1,6 +1,6 @@ #| -*-Scheme-*- -$Id: lapgen.scm,v 1.3 1993/02/15 23:17:39 gjr Exp $ +$Id: lapgen.scm,v 1.4 1993/02/18 01:28:29 gjr Exp $ Copyright (c) 1992-1993 Digital Equipment Corporation (D.E.C.) @@ -252,12 +252,14 @@ case. (define (split-64-bits n) (let* ((n (->unsigned n 64)) (split (integer-divide n #x100000000))) - (if (< (integer-divide-remainder split) #x80000000) - (values (->signed (integer-divide-quotient split) 32) - (->signed (integer-divide-remainder split) 32)) - (values (->signed (1+ (integer-divide-quotient split)) 32) - (->signed (- (integer-divide-remainder split) #x100000000) - 32))))) + (let ((rem (integer-divide-remainder split)) + (quo (integer-divide-quotient split))) + (if (or (>= rem #x80000000) + (negative? (adjusted:high rem))) + (values (->signed (1+ quo) 32) + (->signed (- rem #x100000000) 32)) + (values (->signed quo 32) + (->signed rem 32)))))) (define (->unsigned n nbits) (if (negative? n) -- 2.25.1