]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/uclibc/lib/contrib/uclibc/libc/sysdeps/linux/i386/bits/byteswap.h
update
[l4.git] / l4 / pkg / uclibc / lib / contrib / uclibc / libc / sysdeps / linux / i386 / bits / byteswap.h
1 /* Macros to swap the order of bytes in integer values.
2    Copyright (C) 1997, 1998, 2000, 2002, 2003 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <http://www.gnu.org/licenses/>.  */
18
19 #ifndef _ASM_BITS_BYTESWAP_H
20 #define _ASM_BITS_BYTESWAP_H 1
21
22 #define __bswap_non_constant_16(x) \
23      (__extension__                                                           \
24       ({ register unsigned short int __v;                                     \
25          __asm__ ("rorw $8, %w0"                                              \
26                   : "=r" (__v)                                                \
27                   : "0" (x)                                                   \
28                   : "cc");                                                    \
29          __v; }))
30
31 /* To swap the bytes in a word the i486 processors and up provide the
32    `bswap' opcode.  On i386 we have to use three instructions.  */
33 #if !defined __i486__ && !defined __pentium__ && !defined __pentiumpro__ \
34       && !defined __pentium4__
35 # define __bswap_non_constant_32(x) \
36      (__extension__                                                           \
37       ({ register unsigned int __v;                                           \
38          __asm__ ("rorw $8, %w0;"                                             \
39                   "rorl $16, %0;"                                             \
40                   "rorw $8, %w0"                                              \
41                   : "=r" (__v)                                                \
42                   : "0" (x)                                                   \
43                   : "cc");                                                    \
44          __v; }))
45 #else
46 # define __bswap_non_constant_32(x) \
47      (__extension__                                                           \
48       ({ register unsigned int __v;                                           \
49          __asm__ ("bswap %0" : "=r" (__v) : "0" (x));                         \
50          __v; }))
51 #endif
52
53 #endif
54
55 #include <bits/byteswap-common.h>