#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/back/syntax.scm,v 1.13 1987/03/19 00:50:43 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/back/syntax.scm,v 1.14 1987/05/26 13:24:04 cph Exp $
Copyright (c) 1987 Massachusetts Institute of Technology
(unsigned-integer->bit-string nbits n))
(define (coerce-signed-integer nbits)
- (let ((offset (expt 2 nbits)))
+ (let* ((limit (expt 2 (-1+ nbits)))
+ (offset (+ limit limit)))
(lambda (n)
- (unsigned-integer->bit-string nbits
- (if (negative? n)
- (+ n offset)
- n)))))
+ (unsigned-integer->bit-string
+ nbits
+ (cond ((negative? n) (+ n offset))
+ ((< n limit) n)
+ (else (error "Integer too large to be encoded" n)))))))
(define (standard-coercion kernel)
(lambda (nbits)
;;; -*-Scheme-*-
;;;
-;;; $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/bitstr.scm,v 13.42 1987/04/25 20:18:51 cph Exp $
+;;; $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/bitstr.scm,v 13.43 1987/05/26 13:24:56 cph Rel $
;;;
;;; Copyright (c) 1987 Massachusetts Institute of Technology
;;;
result))
(define (signed-integer->bit-string nbits number)
- (unsigned-integer->bit-string nbits
- (if (negative? number)
- (+ number (expt 2 nbits))
- number)))
+ (unsigned-integer->bit-string
+ nbits
+ (cond ((negative? number) (+ number (expt 2 nbits)))
+ ((< number (expt 2 (-1+ nbits))) number)
+ (else (error "Integer too large to be encoded" number)))))
(define (bit-string->signed-integer bit-string)
(let ((unsigned-result (bit-string->unsigned-integer bit-string))