;;;; cross-compile-time-only replacements for byte-specifier ;;;; machinery. ;;;; This software is part of the SBCL system. See the README file for ;;;; more information. ;;;; ;;;; This software is derived from the CMU CL system, which was ;;;; written at Carnegie Mellon University and released into the ;;;; public domain. The software is in the public domain and is ;;;; provided with absolutely no warranty. See the COPYING and CREDITS ;;;; files for more information. (in-package "SB!INT") (defun sb!xc:byte (size position) (cons size position)) (defun sb!xc:byte-size (cross-byte) (car cross-byte)) (defun sb!xc:byte-position (cross-byte) (cdr cross-byte)) (defun uncross-byte (cross-byte) (cl:byte (sb!xc:byte-size cross-byte) (sb!xc:byte-position cross-byte))) (defun sb!xc:ldb (cross-byte int) (cl:ldb (uncross-byte cross-byte) int)) (defun sb!xc:ldb-test (cross-byte int) (cl:ldb-test (uncross-byte cross-byte) int)) (defun sb!xc:dpb (new cross-byte int) (cl:dpb new (uncross-byte cross-byte) int)) (defun sb!xc:mask-field (cross-byte int) (cl:mask-field (uncross-byte cross-byte) int)) (defun sb!xc:deposit-field (new cross-byte int) (cl:deposit-field new (uncross-byte cross-byte) int)) (define-setf-expander sb!xc:ldb (cross-byte int &environment env) (multiple-value-bind (temps vals stores store-form access-form) (get-setf-expansion int env) (when (cdr stores) (bug "SETF SB!XC:LDB too hairy!")) (let ((btemp (gensym)) (store (gensym))) (values (cons btemp temps) (cons cross-byte vals) (list store) `(let ((,(car stores) (cl:dpb ,store (uncross-byte ,btemp) ,access-form))) ,store-form ,store) `(cl:ldb (uncross-byte ,btemp) ,access-form))))) (define-setf-expander sb!xc:mask-field (cross-byte int &environment env) (multiple-value-bind (temps vals stores store-form access-form) (get-setf-expansion int env) (when (cdr stores) (bug "SETF SB!XC:MASK-FIELD too hairy!")) (let ((btemp (gensym)) (store (gensym))) (values (cons btemp temps) (cons cross-byte vals) (list store) `(let ((,(car stores) (cl:deposit-field ,store (uncross-byte ,btemp) ,access-form))) ,store-form ,store) `(cl:mask-field (uncross-byte ,btemp) ,access-form)))))