Skip to content

Instantly share code, notes, and snippets.

@mbrezu
Created August 19, 2011 19:46
Show Gist options
  • Save mbrezu/1157813 to your computer and use it in GitHub Desktop.
Save mbrezu/1157813 to your computer and use it in GitHub Desktop.
;; for floats, sb-kernel:single-float-bits, sb-kernel:make-single-float
;; etc.
(eval-when (:compile-toplevel :load-toplevel :execute)
(defun mkstr (&rest args)
(format nil "~{~a~}" args))
(defun mksymb (&rest args)
(intern (apply #'mkstr args))))
(defmacro signed-unsigned-convertors (size)
`(progn
(defun ,(mksymb 'sb size '-> 'ub size) (sb)
(declare (optimize (debug 0) (safety 0) (speed 3))
(type (integer ,(- (expt 2 (1- size))) ,(1- (expt 2 (1- size)))) sb))
(if (< sb 0)
(ldb (byte ,size 0) sb)
sb))
(defun ,(mksymb 'ub size '-> 'sb size) (sb)
(declare (optimize (debug 0) (safety 0) (speed 3))
(type (mod ,(expt 2 size)) sb))
(if (logbitp (1- ,size) sb)
(- (1+ (logxor (1- (expt 2 ,size)) sb)))
sb))))
(signed-unsigned-convertors 8)
(signed-unsigned-convertors 16)
(signed-unsigned-convertors 32)
;;(signed-unsigned-convertors 64)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment