summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/v850/bits/select.h
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2001-12-21 10:14:44 +0000
committerEric Andersen <andersen@codepoet.org>2001-12-21 10:14:44 +0000
commit009bae64cf278be1a49eef73e6756c1fd268da34 (patch)
tree188e46837c5c275dc2394c5ee51e5f163c5ad6fb /libc/sysdeps/linux/v850/bits/select.h
parentcc8008364d4cb269c16b61fb1481dea019cb92c2 (diff)
A very large patch from Miles Bader <miles@lsi.nec.co.jp> to bring
v850 back into working condition. Thanks Miles! -Erik
Diffstat (limited to 'libc/sysdeps/linux/v850/bits/select.h')
-rw-r--r--libc/sysdeps/linux/v850/bits/select.h69
1 files changed, 49 insertions, 20 deletions
diff --git a/libc/sysdeps/linux/v850/bits/select.h b/libc/sysdeps/linux/v850/bits/select.h
index 4513135af..b6bb05452 100644
--- a/libc/sysdeps/linux/v850/bits/select.h
+++ b/libc/sysdeps/linux/v850/bits/select.h
@@ -1,35 +1,64 @@
-/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
+/*
+ * include/bits/select.h -- fd_set operations
+ *
+ * Copyright (C) 2001 NEC Corporation
+ * Copyright (C) 2001 Miles Bader <miles@gnu.org>
+ * Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+ *
+ * This file is subject to the terms and conditions of the GNU Lesser
+ * General Public License. See the file COPYING.LIB in the main
+ * directory of this archive for more details.
+ */
#ifndef _SYS_SELECT_H
# error "Never use <bits/select.h> directly; include <sys/select.h> instead."
#endif
+#ifdef __GNUC__
/* We don't use `memset' because this would require a prototype and
the array isn't too big. */
-#define __FD_ZERO(s) \
+#define __FD_ZERO(s) \
do { \
unsigned int __i; \
- __fd_set *__arr = (s); \
- for (__i = 0; __i < sizeof (__fd_set) / sizeof (__fd_mask); ++__i) \
+ fd_set *__arr = (s); \
+ for (__i = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i) \
__FDS_BITS (__arr)[__i] = 0; \
} while (0)
+
+#define __FD_SET(fd, s) \
+ do { \
+ int __fd = (fd); \
+ void *__addr = (void *)&__FDS_BITS (s); \
+ __asm__ __volatile__ ("set1 %0, [%1]" \
+ : /*nothing*/ \
+ : "r" (__fd & 0x7), "r" (__addr + (__fd >> 3)));\
+ } while (0)
+
+#define __FD_CLR(fd, s) \
+ do { \
+ int __fd = (fd); \
+ void *__addr = (void *)&__FDS_BITS (s); \
+ __asm__ __volatile__ ("clr1 %0, [%1]" \
+ : /*nothing*/ \
+ : "r" (__fd & 0x7), "r" (__addr + (__fd >> 3)));\
+ } while (0)
+
+#define __FD_ISSET(fd, s) \
+ ({ \
+ int __fd = (fd); \
+ void *__addr = (void *)&__FDS_BITS (s); \
+ int res; \
+ __asm__ ("tst1 %1, [%2]; setf nz, %0" \
+ : "=r" (res) \
+ : "r" (__fd & 0x7), "r" (__addr + (__fd >> 3))); \
+ res; \
+ })
+
+#else /* !__GNUC__ */
+
#define __FD_SET(d, s) (__FDS_BITS (s)[__FDELT(d)] |= __FDMASK(d))
#define __FD_CLR(d, s) (__FDS_BITS (s)[__FDELT(d)] &= ~__FDMASK(d))
#define __FD_ISSET(d, s) ((__FDS_BITS (s)[__FDELT(d)] & __FDMASK(d)) != 0)
+
+#endif /* __GNUC__ */