X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Funaligned.h;h=f1aab23adc814b8ac3dd7b29955228548e394405;hb=c0896bdd20b2b4ac7f1183835e2d8c99d6bb29fe;hp=ef08f4e22a9db3a1794668a07091c0f4c51560bb;hpb=9ea5d2d58ba8783271d096d417082a8372b87c5d;p=openvswitch diff --git a/lib/unaligned.h b/lib/unaligned.h index ef08f4e2..f1aab23a 100644 --- a/lib/unaligned.h +++ b/lib/unaligned.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010 Nicira Networks. + * Copyright (c) 2010, 2011 Nicira Networks. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -140,5 +140,51 @@ static inline void put_unaligned_u64(uint64_t *p_, uint64_t x_) #define put_unaligned_be32 put_unaligned_u32 #define put_unaligned_be64 put_unaligned_u64 #endif + +/* Returns the value in 'x'. */ +static inline uint64_t +get_32aligned_u64(const ovs_32aligned_u64 *x) +{ + return ((uint64_t) x->hi << 32) | x->lo; +} + +/* Stores 'value' in 'x'. */ +static inline void +put_32aligned_u64(ovs_32aligned_u64 *x, uint64_t value) +{ + x->hi = value >> 32; + x->lo = value; +} + +#ifndef __CHECKER__ +/* Returns the value of 'x'. */ +static inline ovs_be64 +get_32aligned_be64(const ovs_32aligned_be64 *x) +{ +#ifdef WORDS_BIGENDIAN + return ((ovs_be64) x->hi << 32) | x->lo; +#else + return ((ovs_be64) x->lo << 32) | x->hi; +#endif +} + +/* Stores network byte order 'value' into 'x'. */ +static inline void +put_32aligned_be64(ovs_32aligned_be64 *x, ovs_be64 value) +{ +#if WORDS_BIGENDIAN + x->hi = value >> 32; + x->lo = value; +#else + x->hi = value; + x->lo = value >> 32; +#endif +} +#else /* __CHECKER__ */ +/* Making sparse happy with these functions also makes them unreadable, so + * don't bother to show it their implementations. */ +ovs_be64 get_32aligned_be64(const ovs_32aligned_be64 *); +void put_32aligned_be64(ovs_32aligned_be64 *, ovs_be64); +#endif #endif /* unaligned.h */