X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=includes%2Fbitmove.h;h=4d3dfd50d46fe41279675324d0bce2c6e1c4ff3b;hb=a818c5b5411bbc4436d1c5f011236985c96bb787;hp=aca83a4abdaf5cf650b2f660e0414ed504387d44;hpb=62f89b2886bbe9df82d9b2fdabfe707509d9e0fc;p=silc.git diff --git a/includes/bitmove.h b/includes/bitmove.h index aca83a4a..4d3dfd50 100644 --- a/includes/bitmove.h +++ b/includes/bitmove.h @@ -1,16 +1,15 @@ /* - bitmove.h + bitmove.h - Author: Pekka Riikonen + Author: Pekka Riikonen - Copyright (C) 1997 - 2000 Pekka Riikonen + Copyright (C) 1997 - 2001 Pekka Riikonen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - + the Free Software Foundation; version 2 of the License. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -21,52 +20,68 @@ #ifndef BITMOVE_H #define BITMOVE_H +#define GET_WORD(cp) ((SilcUInt32)(SilcUInt8)(cp)[0]) << 24 \ + | ((SilcUInt32)(SilcUInt8)(cp)[1] << 16) \ + | ((SilcUInt32)(SilcUInt8)(cp)[2] << 8) \ + | ((SilcUInt32)(SilcUInt8)(cp)[3]) + +/* Returns eight 8-bit bytes, most significant bytes first. */ +#define SILC_GET64_MSB(l, cp) \ + (l) = ((((SilcUInt64)GET_WORD((cp))) << 32) | \ + ((SilcUInt64)GET_WORD((cp) + 4))) +#define SILC_PUT64_MSB(l, cp) \ +do { \ + SILC_PUT32_MSB((SilcUInt32)((SilcUInt64)(l) >> 32), (cp)); \ + SILC_PUT32_MSB((SilcUInt32)(l), (cp) + 4); \ +} while(0) + + /* Returns four 8-bit bytes, most significant bytes first. */ -#define SILC_GET32_MSB(l, cp) \ - (l) = ((unsigned long)(unsigned char)(cp)[0]) << 24 \ - | ((unsigned long)(unsigned char)(cp)[1] << 16) \ - | ((unsigned long)(unsigned char)(cp)[2] << 8) \ - | ((unsigned long)(unsigned char)(cp)[3]) -#define SILC_PUT32_MSB(l, cp) \ - (cp)[0] = l >> 24; \ - (cp)[1] = l >> 16; \ - (cp)[2] = l >> 8; \ +#define SILC_GET32_MSB(l, cp) \ + (l) = ((SilcUInt32)(SilcUInt8)(cp)[0]) << 24 \ + | ((SilcUInt32)(SilcUInt8)(cp)[1] << 16) \ + | ((SilcUInt32)(SilcUInt8)(cp)[2] << 8) \ + | ((SilcUInt32)(SilcUInt8)(cp)[3]) +#define SILC_PUT32_MSB(l, cp) \ + (cp)[0] = l >> 24; \ + (cp)[1] = l >> 16; \ + (cp)[2] = l >> 8; \ (cp)[3] = l; /* Returns four 8-bit bytes, less significant bytes first. */ -#define SILC_GET32_LSB(l, cp) \ - (l) = ((unsigned long)(unsigned char)(cp)[0]) \ - | ((unsigned long)(unsigned char)(cp)[1] << 8) \ - | ((unsigned long)(unsigned char)(cp)[2] << 16) \ - | ((unsigned long)(unsigned char)(cp)[3] << 24) +#define SILC_GET32_LSB(l, cp) \ + (l) = ((SilcUInt32)(SilcUInt8)(cp)[0]) \ + | ((SilcUInt32)(SilcUInt8)(cp)[1] << 8) \ + | ((SilcUInt32)(SilcUInt8)(cp)[2] << 16) \ + | ((SilcUInt32)(SilcUInt8)(cp)[3] << 24) /* same as upper but XOR the result always */ -#define SILC_GET32_X_LSB(l, cp) \ - (l) ^= ((unsigned long)(unsigned char)(cp)[0]) \ - | ((unsigned long)(unsigned char)(cp)[1] << 8) \ - | ((unsigned long)(unsigned char)(cp)[2] << 16) \ - | ((unsigned long)(unsigned char)(cp)[3] << 24) -#define SILC_PUT32_LSB(l, cp) \ - (cp)[0] = l; \ - (cp)[1] = l >> 8; \ - (cp)[2] = l >> 16; \ +#define SILC_GET32_X_LSB(l, cp) \ + (l) ^= ((SilcUInt32)(SilcUInt8)(cp)[0]) \ + | ((SilcUInt32)(SilcUInt8)(cp)[1] << 8) \ + | ((SilcUInt32)(SilcUInt8)(cp)[2] << 16) \ + | ((SilcUInt32)(SilcUInt8)(cp)[3] << 24) +#define SILC_PUT32_LSB(l, cp) \ + (cp)[0] = l; \ + (cp)[1] = l >> 8; \ + (cp)[2] = l >> 16; \ (cp)[3] = l >> 24; /* Returns two 8-bit bytes, most significant bytes first. */ -#define SILC_GET16_MSB(l, cp) \ - (l) = ((unsigned long)(unsigned char)(cp)[0] << 8) \ - | ((unsigned long)(unsigned char)(cp)[1]) -#define SILC_PUT16_MSB(l, cp) \ - (cp)[0] = l >> 8; \ +#define SILC_GET16_MSB(l, cp) \ + (l) = ((SilcUInt32)(SilcUInt8)(cp)[0] << 8) \ + | ((SilcUInt32)(SilcUInt8)(cp)[1]) +#define SILC_PUT16_MSB(l, cp) \ + (cp)[0] = l >> 8; \ (cp)[1] = l; /* Returns two 8-bit bytes, less significant bytes first. */ -#define SILC_GET16_LSB(l, cp) \ - (l) = ((unsigned long)(unsigned char)(cp)[0]) \ - | ((unsigned long)(unsigned char)(cp)[1] << 8) -#define SILC_PUT16_LSB(l, cp) \ - (cp)[0] = l; \ +#define SILC_GET16_LSB(l, cp) \ + (l) = ((SilcUInt32)(SilcUInt8)(cp)[0]) \ + | ((SilcUInt32)(SilcUInt8)(cp)[1] << 8) +#define SILC_PUT16_LSB(l, cp) \ + (cp)[0] = l; \ (cp)[1] = l >> 8; #endif