mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-18 21:29:19 +02:00
32 lines
1.3 KiB
Scheme
32 lines
1.3 KiB
Scheme
|
|
(define-library (srfi 33)
|
|
(export bitwise-not
|
|
bitwise-and bitwise-ior
|
|
bitwise-xor bitwise-eqv
|
|
bitwise-nand bitwise-nor
|
|
bitwise-andc1 bitwise-andc2
|
|
bitwise-orc1 bitwise-orc2
|
|
arithmetic-shift bit-count integer-length
|
|
bitwise-merge
|
|
bit-set? any-bits-set? all-bits-set?
|
|
first-set-bit
|
|
extract-bit-field test-bit-field? clear-bit-field
|
|
replace-bit-field copy-bit-field)
|
|
(import (scheme base)
|
|
(rename (srfi 142)
|
|
(bitwise-if bitwise-merge)
|
|
(any-bit-set? any-bits-set?)
|
|
(every-bit-set? all-bits-set?)
|
|
(bit-field-any? test-bit-field?)
|
|
(bit-field-clear clear-bit-field)))
|
|
(begin
|
|
(define (mask len)
|
|
(- (arithmetic-shift 1 len) 1))
|
|
(define (extract-bit-field size position n)
|
|
(bitwise-and (arithmetic-shift n (- position)) (mask size)))
|
|
(define (replace-bit-field size position newfield n)
|
|
(bitwise-ior
|
|
(bitwise-and n (bitwise-not (arithmetic-shift (mask size) position)))
|
|
(arithmetic-shift newfield position)))
|
|
(define (copy-bit-field size position from to)
|
|
(bitwise-merge (arithmetic-shift (mask size) position) to from))))
|