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