1 : /*
2 : * Copyright (c) 1999-2006 Apple Computer, Inc. All rights reserved.
3 : *
4 : * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5 : *
6 : * This file contains Original Code and/or Modifications of Original Code
7 : * as defined in and that are subject to the Apple Public Source License
8 : * Version 2.0 (the 'License'). You may not use this file except in
9 : * compliance with the License. The rights granted to you under the License
10 : * may not be used to create, or enable the creation or redistribution of,
11 : * unlawful or unlicensed copies of an Apple operating system, or to
12 : * circumvent, violate, or enable the circumvention or violation of, any
13 : * terms of an Apple operating system software license agreement.
14 : *
15 : * Please obtain a copy of the License at
16 : * http://www.opensource.apple.com/apsl/ and read it before using this file.
17 : *
18 : * The Original Code and all software distributed under the License are
19 : * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20 : * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21 : * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22 : * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23 : * Please see the License for the specific language governing rights and
24 : * limitations under the License.
25 : *
26 : * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27 : */
28 :
29 : #ifndef _OS_OSBYTEORDERI386_H
30 : #define _OS_OSBYTEORDERI386_H
31 :
32 : #include <stdint.h>
33 : #include <libkern/i386/_OSByteOrder.h>
34 :
35 : #if !defined(OS_INLINE)
36 : #define OS_INLINE __DARWIN_OS_INLINE
37 : #endif
38 :
39 : /* Functions for byte reversed loads. */
40 :
41 : OS_INLINE
42 : uint16_t
43 : OSReadSwapInt16(
44 : const volatile void * base,
45 : uintptr_t byteOffset
46 : )
47 : {
48 : uint16_t result;
49 :
50 : result = *(volatile uint16_t *)((uintptr_t)base + byteOffset);
51 : return _OSSwapInt16(result);
52 : }
53 :
54 : OS_INLINE
55 : uint32_t
56 : OSReadSwapInt32(
57 0 : const volatile void * base,
58 0 : uintptr_t byteOffset
59 : )
60 : {
61 0 : uint32_t result;
62 :
63 0 : result = *(volatile uint32_t *)((uintptr_t)base + byteOffset);
64 0 : return _OSSwapInt32(result);
65 : }
66 :
67 : OS_INLINE
68 : uint64_t
69 : OSReadSwapInt64(
70 : const volatile void * base,
71 : uintptr_t byteOffset
72 : )
73 : {
74 : uint64_t result;
75 :
76 : result = *(volatile uint64_t *)((uintptr_t)base + byteOffset);
77 : return _OSSwapInt64(result);
78 : }
79 :
80 : /* Functions for byte reversed stores. */
81 :
82 : OS_INLINE
83 : void
84 : OSWriteSwapInt16(
85 : volatile void * base,
86 : uintptr_t byteOffset,
87 : uint16_t data
88 : )
89 : {
90 : *(volatile uint16_t *)((uintptr_t)base + byteOffset) = _OSSwapInt16(data);
91 : }
92 :
93 : OS_INLINE
94 : void
95 : OSWriteSwapInt32(
96 : volatile void * base,
97 : uintptr_t byteOffset,
98 : uint32_t data
99 : )
100 : {
101 : *(volatile uint32_t *)((uintptr_t)base + byteOffset) = _OSSwapInt32(data);
102 : }
103 :
104 : OS_INLINE
105 : void
106 : OSWriteSwapInt64(
107 : volatile void * base,
108 : uintptr_t byteOffset,
109 : uint64_t data
110 : )
111 : {
112 : *(volatile uint64_t *)((uintptr_t)base + byteOffset) = _OSSwapInt64(data);
113 : }
114 :
115 : #endif /* ! _OS_OSBYTEORDERI386_H */
|