*
* Copyright (c) 1995, Regents of the University of California
*
- * $Id: postgres.h,v 1.22 1999/05/03 19:10:14 momjian Exp $
+ * $Id: postgres.h,v 1.23 1999/06/10 22:59:22 momjian Exp $
*
*-------------------------------------------------------------------------
*/
typedef Oid RegProcedure;
/* ptr to func returning (char *) */
+#if defined(__mc68000__) && defined(__ELF__)
+/* The m68k SVR4 ABI defines that pointers are returned in %a0 instead of
+ * %d0. So if a function pointer is declared to return a pointer, the
+ * compiler may look only into %a0, but if the called function was declared
+ * to return return an integer type, it puts its value only into %d0. So the
+ * caller doesn't pink up the correct return value. The solution is to
+ * declare the function pointer to return int, so the compiler picks up the
+ * return value from %d0. (Functions returning pointers put their value
+ * *additionally* into %d0 for compability.) The price is that there are
+ * some warnings about int->pointer conversions...
+ */
+typedef int32 ((*func_ptr) ());
+#else
typedef char *((*func_ptr) ());
+#endif
#define RegProcedureIsValid(p) OidIsValid(p)
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/include/storage/s_lock.h,v 1.59 1999/04/13 17:42:26 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/include/storage/s_lock.h,v 1.60 1999/06/10 22:59:22 momjian Exp $
*
*-------------------------------------------------------------------------
*/
#endif /* sparc */
+#if defined(__mc68000__)
+#define TAS(lock) tas(lock)
+
+static __inline__ int
+tas(volatile slock_t *lock)
+{
+ register int rv;
+
+ __asm__ __volatile__ (
+ "tas %1; sne %0"
+ : "=d" (rv), "=m"(*lock)
+ : "1" (*lock)
+ : "cc" );
+ return rv;
+}
+
+#endif /* defined(__mc68000__) */
+
#if defined(NEED_VAX_TAS_ASM)
/*
#endif /* HAS_TEST_AND_SET */
#endif /* S_LOCK_H */
+