]>
git.proxmox.com Git - mirror_edk2.git/blob - MdePkg/Library/BaseLib/Ipf/Unaligned.c
eeeb0f85bbb29b672bd05bce2f7b1031beacb501
2 Unaligned access functions of BaseLib for IPF.
4 Copyright (c) 2006, Intel Corporation<BR>
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13 Module Name: Unaligned.c
18 Reads a 16-bit value from memory that may be unaligned.
20 This function returns the 16-bit value pointed to by Buffer. The function
21 guarantees that the read operation does not produce an alignment fault.
23 If the Buffer is NULL, then ASSERT().
25 @param Buffer Pointer to a 16-bit value that may be unaligned.
33 IN CONST UINT16
*Buffer
36 return (UINT16
)(((UINT8
*)Buffer
)[0] | (((UINT8
*)Buffer
)[1] << 8));
40 Writes a 16-bit value to memory that may be unaligned.
42 This function writes the 16-bit value specified by Value to Buffer. Value is
43 returned. The function guarantees that the write operation does not produce
46 If the Buffer is NULL, then ASSERT().
48 @param Buffer Pointer to a 16-bit value that may be unaligned.
49 @param Value 16-bit value to write to Buffer.
61 ((UINT8
*)Buffer
)[0] = (UINT8
)Value
;
62 ((UINT8
*)Buffer
)[1] = (UINT8
)(Value
>> 8);
67 Reads a 24-bit value from memory that may be unaligned.
69 This function returns the 24-bit value pointed to by Buffer. The function
70 guarantees that the read operation does not produce an alignment fault.
72 If the Buffer is NULL, then ASSERT().
74 @param Buffer Pointer to a 24-bit value that may be unaligned.
76 @return The value read.
82 IN CONST UINT32
*Buffer
86 ReadUnaligned16 ((UINT16
*)Buffer
) |
87 (((UINT8
*)Buffer
)[2] << 16)
92 Writes a 24-bit value to memory that may be unaligned.
94 This function writes the 24-bit value specified by Value to Buffer. Value is
95 returned. The function guarantees that the write operation does not produce
98 If the Buffer is NULL, then ASSERT().
100 @param Buffer Pointer to a 24-bit value that may be unaligned.
101 @param Value 24-bit value to write to Buffer.
103 @return The value written.
113 WriteUnaligned16 ((UINT16
*)Buffer
, (UINT16
)Value
);
114 *(UINT8
*)((UINT16
*)Buffer
+ 1) = (UINT8
)(Value
>> 16);
119 Reads a 32-bit value from memory that may be unaligned.
121 This function returns the 32-bit value pointed to by Buffer. The function
122 guarantees that the read operation does not produce an alignment fault.
124 If the Buffer is NULL, then ASSERT().
126 @param Buffer Pointer to a 32-bit value that may be unaligned.
134 IN CONST UINT32
*Buffer
138 ReadUnaligned16 ((UINT16
*)Buffer
) |
139 (ReadUnaligned16 ((UINT16
*)Buffer
+ 1) << 16)
144 Writes a 32-bit value to memory that may be unaligned.
146 This function writes the 32-bit value specified by Value to Buffer. Value is
147 returned. The function guarantees that the write operation does not produce
150 If the Buffer is NULL, then ASSERT().
152 @param Buffer Pointer to a 32-bit value that may be unaligned.
153 @param Value 32-bit value to write to Buffer.
165 WriteUnaligned16 ((UINT16
*)Buffer
, (UINT16
)Value
);
166 WriteUnaligned16 ((UINT16
*)Buffer
+ 1, (UINT16
)(Value
>> 16));
171 Reads a 64-bit value from memory that may be unaligned.
173 This function returns the 64-bit value pointed to by Buffer. The function
174 guarantees that the read operation does not produce an alignment fault.
176 If the Buffer is NULL, then ASSERT().
178 @param Buffer Pointer to a 64-bit value that may be unaligned.
186 IN CONST UINT64
*Buffer
190 ReadUnaligned32 ((UINT32
*)Buffer
) |
191 LShiftU64 (ReadUnaligned32 ((UINT32
*)Buffer
+ 1), 32)
196 Writes a 64-bit value to memory that may be unaligned.
198 This function writes the 64-bit value specified by Value to Buffer. Value is
199 returned. The function guarantees that the write operation does not produce
202 If the Buffer is NULL, then ASSERT().
204 @param Buffer Pointer to a 64-bit value that may be unaligned.
205 @param Value 64-bit value to write to Buffer.
217 WriteUnaligned32 ((UINT32
*)Buffer
, (UINT32
)Value
);
218 WriteUnaligned32 ((UINT32
*)Buffer
+ 1, (UINT32
)RShiftU64 (Value
, 32));