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 | const volatile void * base,␊ |
58 | uintptr_t byteOffset␊ |
59 | )␊ |
60 | {␊ |
61 | uint32_t result;␊ |
62 | ␊ |
63 | result = *(volatile uint32_t *)((uintptr_t)base + byteOffset);␊ |
64 | 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 */␊ |
116 | |