|
1 /* |
|
2 swap64.c - 64-bit byte swapping functions. |
|
3 Copyright (C) 1995 - 2001 Michael Riepe |
|
4 |
|
5 This library is free software; you can redistribute it and/or |
|
6 modify it under the terms of the GNU Library General Public |
|
7 License as published by the Free Software Foundation; either |
|
8 version 2 of the License, or (at your option) any later version. |
|
9 |
|
10 This 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 Library General Public License for more details. |
|
14 |
|
15 You should have received a copy of the GNU Library General Public |
|
16 License along with this library; if not, write to the Free Software |
|
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
18 */ |
|
19 |
|
20 #include <private.h> |
|
21 #include <byteswap.h> |
|
22 |
|
23 #if __LIBELF64 |
|
24 |
|
25 #ifndef lint |
|
26 static const char rcsid[] = "@(#) $Id: swap64.c,v 1.5 2005/05/21 15:39:26 michael Exp $"; |
|
27 #endif /* lint */ |
|
28 |
|
29 __libelf_u64_t |
|
30 _elf_load_u64L(const unsigned char *from) { |
|
31 return ((__libelf_u64_t)__load_u32L(from + 4) << 32) |
|
32 | (__libelf_u64_t)__load_u32L(from); |
|
33 } |
|
34 |
|
35 __libelf_u64_t |
|
36 _elf_load_u64M(const unsigned char *from) { |
|
37 return ((__libelf_u64_t)__load_u32M(from) << 32) |
|
38 | (__libelf_u64_t)__load_u32M(from + 4); |
|
39 } |
|
40 |
|
41 __libelf_i64_t |
|
42 _elf_load_i64L(const unsigned char *from) { |
|
43 return ((__libelf_i64_t)__load_i32L(from + 4) << 32) |
|
44 | (__libelf_u64_t)__load_u32L(from); |
|
45 } |
|
46 |
|
47 __libelf_i64_t |
|
48 _elf_load_i64M(const unsigned char *from) { |
|
49 return ((__libelf_i64_t)__load_i32M(from) << 32) |
|
50 | (__libelf_u64_t)__load_u32M(from + 4); |
|
51 } |
|
52 |
|
53 void |
|
54 _elf_store_u64L(unsigned char *to, __libelf_u64_t v) { |
|
55 __store_u32L(to, (__libelf_u32_t)v); |
|
56 v >>= 32; |
|
57 __store_u32L(to + 4, (__libelf_u32_t)v); |
|
58 } |
|
59 |
|
60 void |
|
61 _elf_store_u64M(unsigned char *to, __libelf_u64_t v) { |
|
62 __store_u32M(to + 4, (__libelf_u32_t)v); |
|
63 v >>= 32; |
|
64 __store_u32M(to, (__libelf_u32_t)v); |
|
65 } |
|
66 |
|
67 void |
|
68 _elf_store_i64L(unsigned char *to, __libelf_u64_t v) { |
|
69 __store_u32L(to, (__libelf_u32_t)v); |
|
70 v >>= 32; |
|
71 __store_i32L(to + 4, (__libelf_u32_t)v); |
|
72 } |
|
73 |
|
74 void |
|
75 _elf_store_i64M(unsigned char *to, __libelf_u64_t v) { |
|
76 __store_u32M(to + 4, (__libelf_u32_t)v); |
|
77 v >>= 32; |
|
78 __store_i32M(to, (__libelf_u32_t)v); |
|
79 } |
|
80 |
|
81 #endif /* __LIBELF64 */ |