Changeset 315
- Timestamp:
- Jan 17, 2004, 7:47:03 PM (21 years ago)
- File:
-
- 1 edited
-
trunk/ccl/level-1/l1-numbers.lisp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ccl/level-1/l1-numbers.lisp
r281 r315 326 326 327 327 (defun deposit-field (value bytespec integer) 328 (logior (logandc1 bytespec integer) (logand bytespec value))) 328 (if (> bytespec 0) 329 (logior (logandc1 bytespec integer) (logand bytespec value)) 330 (progn 331 (require-type value 'integer) 332 (require-type integer 'integer)))) 329 333 330 334 ;;;;;;;;;; Byte field functions ;;;;;;;;;;;;;;;; 331 335 336 ;;; Size = 0, position = 0 -> 0 337 ;;; size = 0, position > 0 -> -position 338 ;;; else -> (ash (byte-mask size) position) 332 339 (defun byte (size position) 333 (unless (and (integerp position) (not (minusp position))) (report-bad-arg position 'unsigned-byte)) 334 (ash (byte-mask size) position)) 335 336 337 338 (defun byte-size (bytespec) (logcount bytespec)) 340 (unless (and (typep size 'integer) 341 (>= size 0)) 342 (report-bad-arg size 'unsigned-byte)) 343 (unless (and (typep position 'integer) 344 (>= position 0)) 345 (report-bad-arg position 'unsigned-byte)) 346 (if (eql 0 size) 347 (if (eql 0 position) 348 0 349 (- position)) 350 (ash (byte-mask size) position))) 351 352 353 354 (defun byte-size (bytespec) 355 (if (> bytespec 0) 356 (logcount bytespec) 357 0)) 339 358 340 359 (defun ldb (bytespec integer) 341 (if (and (fixnump bytespec) ( fixnump integer))360 (if (and (fixnump bytespec) (> (the fixnum bytespec) 0) (fixnump integer)) 342 361 (%ilsr (byte-position bytespec) (%ilogand bytespec integer)) 343 362 (let ((size (byte-size bytespec)) 344 363 (position (byte-position bytespec))) 345 (if (and (bignump integer) 346 (<= size (- 31 ppc32::fixnumshift)) 347 (fixnump position)) 348 (%ldb-fixnum-from-bignum integer size position) 349 (ash (logand bytespec integer) (- position)))))) 364 (if (eql size 0) 365 (progn 366 (require-type integer 'integer) 367 0) 368 (if (and (bignump integer) 369 (<= size (- 31 ppc32::fixnumshift)) 370 (fixnump position)) 371 (%ldb-fixnum-from-bignum integer size position) 372 (ash (logand bytespec integer) (- position))))))) 350 373 351 374 (defun mask-field (bytespec integer) 352 (logand bytespec integer)) 375 (if (>= bytespec 0) 376 (logand bytespec integer) 377 (logand integer 0))) 353 378 354 379 (defun dpb (value bytespec integer) 355 (if (and (fixnump value) (fixnump bytespec) (fixnump integer)) 380 (if (and (fixnump value) 381 (fixnump bytespec) 382 (> (the fixnum bytespec) 0) 383 (fixnump integer)) 356 384 (%ilogior (%ilogand bytespec (%ilsl (byte-position bytespec) value)) 357 385 (%ilogand (%ilognot bytespec) integer)) … … 359 387 360 388 (defun ldb-test (bytespec integer) 361 (logtest bytespec integer)) 389 (if (> bytespec 0) 390 (logtest bytespec integer) 391 (progn 392 (require-type integer 'integer) 393 nil))) 362 394 363 395 ; random associated stuff except for the print-object method which is still in
Note:
See TracChangeset
for help on using the changeset viewer.
