+static inline int
+lowtag_of(lispobj obj) {
+ return obj & LOWTAG_MASK;
+}
+
+static inline int
+widetag_of(lispobj obj) {
+ return obj & WIDETAG_MASK;
+}
+
+/* Is the Lisp object obj something with pointer nature (as opposed to
+ * e.g. a fixnum or character or unbound marker)? */
+static inline int
+is_lisp_pointer(lispobj obj)
+{
+ return obj & 1;
+}
+
+/* Convert from a lispobj with type bits to a native (ordinary
+ * C/assembly) pointer to the beginning of the object. */
+static inline lispobj *
+native_pointer(lispobj obj)
+{
+ return (lispobj *) ((pointer_sized_uint_t) (obj & ~LOWTAG_MASK));
+}
+/* inverse operation: create a suitably tagged lispobj from a native
+ * pointer or integer. Needs to be a macro due to the tedious C type
+ * system */
+#define make_lispobj(o,low_tag) ((lispobj)(LOW_WORD(o)|low_tag))
+