Julian Hall | 201ce46 | 2021-04-29 11:05:34 +0100 | [diff] [blame^] | 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 | |
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| 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 | } |