diff options
author | Dongxue Zhang <elta.era@gmail.com> | 2013-11-15 16:55:34 +0800 |
---|---|---|
committer | Andreas Fritiofson <andreas.fritiofson@gmail.com> | 2013-12-01 12:39:36 +0000 |
commit | 4516eebabac0df24f00f40ff97ff570fdd39b2db (patch) | |
tree | 2a9cca5cf2e4d47d87acccdee4ab2f3c698c68e8 /src/helper | |
parent | 3b020c5bb3c332ad7518de388695cc8a98e388f2 (diff) |
[PATCH 1/2]support64: Add functions into types and target
Add functions into types.h, target.c, target.h to operate 64bits data.
Prepare for 64bits mips target.
Change-Id: I668a8a5ac12ba754ae310fa6e92cfc91af850b1c
Signed-off-by: Dongxue Zhang <elta.era@gmail.com>
Reviewed-on: http://openocd.zylin.com/1700
Tested-by: jenkins
Reviewed-by: Mathias Küster <kesmtp@freenet.de>
Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Diffstat (limited to 'src/helper')
-rw-r--r-- | src/helper/types.h | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/helper/types.h b/src/helper/types.h index 7a845284..210d3c3e 100644 --- a/src/helper/types.h +++ b/src/helper/types.h @@ -110,6 +110,17 @@ typedef bool _Bool; * Again, note that the "buf" pointer in memory is probably unaligned. */ +static inline uint64_t le_to_h_u64(const uint8_t *buf) +{ + return (uint64_t)((uint64_t)buf[0] | + (uint64_t)buf[1] << 8 | + (uint64_t)buf[2] << 16 | + (uint64_t)buf[3] << 24 | + (uint64_t)buf[4] << 32 | + (uint64_t)buf[5] << 40 | + (uint64_t)buf[6] << 48 | + (uint64_t)buf[7] << 56); +} static inline uint32_t le_to_h_u32(const uint8_t* buf) { @@ -126,6 +137,18 @@ static inline uint16_t le_to_h_u16(const uint8_t* buf) return (uint16_t)(buf[0] | buf[1] << 8); } +static inline uint64_t be_to_h_u64(const uint8_t *buf) +{ + return (uint64_t)((uint64_t)buf[7] | + (uint64_t)buf[6] << 8 | + (uint64_t)buf[5] << 16 | + (uint64_t)buf[4] << 24 | + (uint64_t)buf[3] << 32 | + (uint64_t)buf[2] << 40 | + (uint64_t)buf[1] << 48 | + (uint64_t)buf[0] << 56); +} + static inline uint32_t be_to_h_u32(const uint8_t* buf) { return (uint32_t)(buf[3] | buf[2] << 8 | buf[1] << 16 | buf[0] << 24); @@ -141,6 +164,30 @@ static inline uint16_t be_to_h_u16(const uint8_t* buf) return (uint16_t)(buf[1] | buf[0] << 8); } +static inline void h_u64_to_le(uint8_t *buf, int64_t val) +{ + buf[7] = (uint8_t) (val >> 56); + buf[6] = (uint8_t) (val >> 48); + buf[5] = (uint8_t) (val >> 40); + buf[4] = (uint8_t) (val >> 32); + buf[3] = (uint8_t) (val >> 24); + buf[2] = (uint8_t) (val >> 16); + buf[1] = (uint8_t) (val >> 8); + buf[0] = (uint8_t) (val >> 0); +} + +static inline void h_u64_to_be(uint8_t *buf, int64_t val) +{ + buf[0] = (uint8_t) (val >> 56); + buf[1] = (uint8_t) (val >> 48); + buf[2] = (uint8_t) (val >> 40); + buf[3] = (uint8_t) (val >> 32); + buf[4] = (uint8_t) (val >> 24); + buf[5] = (uint8_t) (val >> 16); + buf[6] = (uint8_t) (val >> 8); + buf[7] = (uint8_t) (val >> 0); +} + static inline void h_u32_to_le(uint8_t* buf, int val) { buf[3] = (uint8_t) (val >> 24); |