;;; -*- Mode:LISP; Package:USER; Readtable:CL; Base:10. -*-

;;; This file contains support for letting the compiler run
;;; on the lambda.

(prims:defmacro hw::unboxed-constant (n)
  (setq n (eval n))
  (if (or (typep n '(unsigned-byte 32.))
	  (typep n '(signed-byte 32.)))
      `'(HW::UNBOXED-CONSTANT ,(lisp:logand #xffffffff n))
      (error "This is not a 32 bit number: ~s" n)))

(prims:defmacro hw::boxed-constant (n)
  (setq n (eval n))
  (if (typep n '(unsigned-byte 32.))
      `'(HW::BOXED-CONSTANT ,n)
      (error "This is not a 32 bit number: ~s" n)))

(export '(
	  nc::defafun
	  nc::defrewrite
	  nc::def-rewrite-patterns
	  )
	(find-package "PRIMS" *package*))

;(export '(
;	  >
;	  >=
;	  <
;	  +
;	  -
;	  =
;	  1+
;	  *
;	  and
;	  ash
;	  byte
;	  byte-position
;	  byte-size
;	  defconstant
;	  defun
;	  defmacro
;	  defsubst
;	  export
;	  funcall
;	  function
;	  if
;	  in-package
;	  labels
;	  lambda
;	  let
;	  multiple-value-bind
;	  "GLOBAL:NIL"
;	  not
;	  null
;	  or
;	  prog1
;	  proclaim
;	  quote
;	  values
;	  )
;	(find-package "VINC"))


(export '(nlisp::dpb nlisp::ldb prims:byte) 'nlisp)

(zl:defsubst nlisp:dpb (value byte-spec word)
  (dpb value
       (byte (prims:byte-size byte-spec)
	     (prims:byte-position byte-spec))
       word))

(zl:defsubst nlisp:ldb (byte-spec word)
  (ldb (byte (prims:byte-size byte-spec)
	     (prims:byte-position byte-spec))
       word))
      
