diff options
author | Bryan Newbold <bnewbold@robocracy.org> | 2017-02-20 00:05:27 -0800 |
---|---|---|
committer | Bryan Newbold <bnewbold@robocracy.org> | 2017-02-20 00:05:27 -0800 |
commit | fa3f23105ddcf07c5900de47f19af43d1db1b597 (patch) | |
tree | b2c6cce6b97698098f50cbc78c23fdc0f8d401ab /logical.scm | |
parent | f24b9140d6f74804d5599ec225717d38ca443813 (diff) | |
download | slib-fa3f23105ddcf07c5900de47f19af43d1db1b597.tar.gz slib-fa3f23105ddcf07c5900de47f19af43d1db1b597.zip |
Import Upstream version 2c3upstream/2c3
Diffstat (limited to 'logical.scm')
-rw-r--r-- | logical.scm | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/logical.scm b/logical.scm index 1cc0726..c85507d 100644 --- a/logical.scm +++ b/logical.scm @@ -67,10 +67,25 @@ (define (logical:logbit? index int) (logical:logtest (logical:integer-expt 2 index) int)) -(define (logical:bit-extract n start end) +(define (logical:copy-bit index to bool) + (if bool + (logical:logior to (logical:ash 1 index)) + (logical:logand to (logical:lognot (logical:ash 1 index))))) + +(define (logical:bit-field n start end) (logical:logand (- (logical:integer-expt 2 (- end start)) 1) (logical:ash n (- start)))) +(define (logical:bitwise-if mask n0 n1) + (logical:logior (logical:logand mask n0) + (logical:logand (logical:lognot mask) n1))) + +(define (logical:copy-bit-field to start end from) + (logical:bitwise-if + (logical:ash (- (logical:integer-expt 2 (- end start)) 1) start) + (logical:ash from start) + to)) + (define (logical:ash int cnt) (if (negative? cnt) (let ((n (logical:integer-expt 2 (- cnt)))) @@ -142,9 +157,12 @@ (define lognot logical:lognot) (define logtest logical:logtest) (define logbit? logical:logbit?) +(define copy-bit logical:copy-bit) (define ash logical:ash) (define logcount logical:logcount) (define integer-length logical:integer-length) -(define bit-extract logical:bit-extract) +(define bit-field logical:bit-field) +(define bit-extract logical:bit-field) +(define copy-bit-field logical:copy-bit-field) (define ipow-by-squaring logical:ipow-by-squaring) (define integer-expt logical:integer-expt) |