1 /*
2 * Copyright (c) 2021, Arm Limited and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7 #include "le.h"
8
load_u8_le(const void * base,size_t offset)9 uint8_t load_u8_le(const void *base, size_t offset)
10 {
11 const uint8_t *v = (const uint8_t*)base + offset;
12 uint8_t r = v[0];
13
14 return r;
15 }
16
load_u16_le(const void * base,size_t offset)17 uint16_t load_u16_le(const void *base, size_t offset)
18 {
19 const uint8_t *v = (const uint8_t*)base + offset;
20 uint16_t r = 0;
21 r |= (uint16_t)v[0];
22 r |= (uint16_t)v[1] << 8;
23
24 return r;
25 }
26
load_u32_le(const void * base,size_t offset)27 uint32_t load_u32_le(const void *base, size_t offset)
28 {
29 const uint8_t *v = (const uint8_t*)base + offset;
30 uint32_t r = 0;
31 r |= (uint32_t)v[0];
32 r |= (uint32_t)v[1] << 8;
33 r |= (uint32_t)v[2] << 16;
34 r |= (uint32_t)v[3] << 24;
35
36 return r;
37 }
38
load_u64_le(const void * base,size_t offset)39 uint64_t load_u64_le(const void *base, size_t offset)
40 {
41 const uint8_t *v = (const uint8_t*)base + offset;
42 uint64_t r = 0;
43 r |= (uint64_t)v[0];
44 r |= (uint64_t)v[1] << 8;
45 r |= (uint64_t)v[2] << 16;
46 r |= (uint64_t)v[3] << 24;
47 r |= (uint64_t)v[4] << 32;
48 r |= (uint64_t)v[5] << 40;
49 r |= (uint64_t)v[6] << 48;
50 r |= (uint64_t)v[7] << 56;
51
52 return r;
53 }
54
store_u8_le(void * base,size_t offset,uint8_t val)55 void store_u8_le(void *base, size_t offset, uint8_t val)
56 {
57 uint8_t *v = (uint8_t*)base + offset;
58 v[0] = val;
59 }
60
store_u16_le(void * base,size_t offset,uint16_t val)61 void store_u16_le(void *base, size_t offset, uint16_t val)
62 {
63 uint8_t *v = (uint8_t*)base + offset;
64
65 v[0] = (uint8_t)(val & 0xff);
66 v[1] = (uint8_t)((val >> 8) & 0xff);
67 }
68
store_u32_le(void * base,size_t offset,uint32_t val)69 void store_u32_le(void *base, size_t offset, uint32_t val)
70 {
71 uint8_t *v = (uint8_t*)base + offset;
72
73 v[0] = (uint8_t)(val & 0xff);
74 v[1] = (uint8_t)((val >> 8) & 0xff);
75 v[2] = (uint8_t)((val >> 16) & 0xff);
76 v[3] = (uint8_t)((val >> 24) & 0xff);
77 }
78
store_u64_le(void * base,size_t offset,uint64_t val)79 void store_u64_le(void *base, size_t offset, uint64_t val)
80 {
81 uint8_t *v = (uint8_t*)base + offset;
82
83 v[0] = (uint8_t)(val & 0xff);
84 v[1] = (uint8_t)((val >> 8) & 0xff);
85 v[2] = (uint8_t)((val >> 16) & 0xff);
86 v[3] = (uint8_t)((val >> 24) & 0xff);
87 v[4] = (uint8_t)((val >> 32) & 0xff);
88 v[5] = (uint8_t)((val >> 40) & 0xff);
89 v[6] = (uint8_t)((val >> 48) & 0xff);
90 v[7] = (uint8_t)((val >> 56) & 0xff);
91 }
92