X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Flibsigrok-internal.h;h=12b556aec849e46bc085db574e7f1a0741825d36;hb=52fb2d448480fd820fadff464a676e61dabc557f;hp=f3ee2e3b3ec11f820a93d85ea53d8cceb9595971;hpb=eed3dec849336f610e75e4bb80961391d4e931ea;p=libsigrok.git diff --git a/src/libsigrok-internal.h b/src/libsigrok-internal.h index f3ee2e3b..12b556ae 100644 --- a/src/libsigrok-internal.h +++ b/src/libsigrok-internal.h @@ -65,7 +65,7 @@ struct zip_stat; * @param x a pointer to the input memory * @return the corresponding unsigned integer */ -#define RB16(x) (((unsigned)((const uint8_t*)(x))[0] << 8) | \ +#define RB16(x) (((unsigned)((const uint8_t*)(x))[0] << 8) | \ (unsigned)((const uint8_t*)(x))[1]) /** @@ -76,6 +76,15 @@ struct zip_stat; #define RL16(x) (((unsigned)((const uint8_t*)(x))[1] << 8) | \ (unsigned)((const uint8_t*)(x))[0]) +/** + * Read a 16 bits big endian signed integer out of memory. + * @param x a pointer to the input memory + * @return the corresponding signed integer + */ +#define RB16S(x) ((int16_t) \ + (((unsigned)((const uint8_t*)(x))[0] << 8) | \ + (unsigned)((const uint8_t*)(x))[1])) + /** * Read a 16 bits little endian signed integer out of memory. * @param x a pointer to the input memory @@ -91,8 +100,8 @@ struct zip_stat; * @return the corresponding unsigned integer */ #define RB32(x) (((unsigned)((const uint8_t*)(x))[0] << 24) | \ - ((unsigned)((const uint8_t*)(x))[1] << 16) | \ - ((unsigned)((const uint8_t*)(x))[2] << 8) | \ + ((unsigned)((const uint8_t*)(x))[1] << 16) | \ + ((unsigned)((const uint8_t*)(x))[2] << 8) | \ (unsigned)((const uint8_t*)(x))[3]) /** @@ -101,10 +110,21 @@ struct zip_stat; * @return the corresponding unsigned integer */ #define RL32(x) (((unsigned)((const uint8_t*)(x))[3] << 24) | \ - ((unsigned)((const uint8_t*)(x))[2] << 16) | \ - ((unsigned)((const uint8_t*)(x))[1] << 8) | \ + ((unsigned)((const uint8_t*)(x))[2] << 16) | \ + ((unsigned)((const uint8_t*)(x))[1] << 8) | \ (unsigned)((const uint8_t*)(x))[0]) +/** + * Read a 32 bits big endian signed integer out of memory. + * @param x a pointer to the input memory + * @return the corresponding signed integer + */ +#define RB32S(x) ((int32_t) \ + (((unsigned)((const uint8_t*)(x))[0] << 24) | \ + ((unsigned)((const uint8_t*)(x))[1] << 16) | \ + ((unsigned)((const uint8_t*)(x))[2] << 8) | \ + (unsigned)((const uint8_t*)(x))[3])) + /** * Read a 32 bits little endian signed integer out of memory. * @param x a pointer to the input memory @@ -112,10 +132,53 @@ struct zip_stat; */ #define RL32S(x) ((int32_t) \ (((unsigned)((const uint8_t*)(x))[3] << 24) | \ - ((unsigned)((const uint8_t*)(x))[2] << 16) | \ - ((unsigned)((const uint8_t*)(x))[1] << 8) | \ + ((unsigned)((const uint8_t*)(x))[2] << 16) | \ + ((unsigned)((const uint8_t*)(x))[1] << 8) | \ (unsigned)((const uint8_t*)(x))[0])) +/** + * Read a 64 bits big endian unsigned integer out of memory. + * @param x a pointer to the input memory + * @return the corresponding unsigned integer + */ +#define RB64(x) (((uint64_t)((const uint8_t*)(x))[0] << 56) | \ + ((uint64_t)((const uint8_t*)(x))[1] << 48) | \ + ((uint64_t)((const uint8_t*)(x))[2] << 40) | \ + ((uint64_t)((const uint8_t*)(x))[3] << 32) | \ + ((uint64_t)((const uint8_t*)(x))[4] << 24) | \ + ((uint64_t)((const uint8_t*)(x))[5] << 16) | \ + ((uint64_t)((const uint8_t*)(x))[6] << 8) | \ + (uint64_t)((const uint8_t*)(x))[7]) + +/** + * Read a 64 bits little endian unsigned integer out of memory. + * @param x a pointer to the input memory + * @return the corresponding unsigned integer + */ +#define RL64(x) (((uint64_t)((const uint8_t*)(x))[7] << 56) | \ + ((uint64_t)((const uint8_t*)(x))[6] << 48) | \ + ((uint64_t)((const uint8_t*)(x))[5] << 40) | \ + ((uint64_t)((const uint8_t*)(x))[4] << 32) | \ + ((uint64_t)((const uint8_t*)(x))[3] << 24) | \ + ((uint64_t)((const uint8_t*)(x))[2] << 16) | \ + ((uint64_t)((const uint8_t*)(x))[1] << 8) | \ + (uint64_t)((const uint8_t*)(x))[0]) + +/** + * Read a 64 bits little endian signed integer out of memory. + * @param x a pointer to the input memory + * @return the corresponding unsigned integer + */ +#define RL64S(x) ((int64_t) \ + (((uint64_t)((const uint8_t*)(x))[7] << 56) | \ + ((uint64_t)((const uint8_t*)(x))[6] << 48) | \ + ((uint64_t)((const uint8_t*)(x))[5] << 40) | \ + ((uint64_t)((const uint8_t*)(x))[4] << 32) | \ + ((uint64_t)((const uint8_t*)(x))[3] << 24) | \ + ((uint64_t)((const uint8_t*)(x))[2] << 16) | \ + ((uint64_t)((const uint8_t*)(x))[1] << 8) | \ + (uint64_t)((const uint8_t*)(x))[0])) + /** * Read a 32 bits big endian float out of memory. * @param x a pointer to the input memory