1f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* fix for MSVC ...evil! */ 2f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef _MSC_VER 3f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #define CONST64(n) n ## ui64 4f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project typedef unsigned __int64 ulong64; 5f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else 6f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #define CONST64(n) n ## ULL 7f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project typedef unsigned long long ulong64; 8f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 9f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 10f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* this is the "32-bit at least" data type 11f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * Re-define it to suit your platform but it must be at least 32-bits 12f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project */ 13f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#if defined(__x86_64__) || (defined(__sparc__) && defined(__arch64__)) 14f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project typedef unsigned ulong32; 15f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else 16f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project typedef unsigned long ulong32; 17f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 18f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 19f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* ---- HELPER MACROS ---- */ 20f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef ENDIAN_NEUTRAL 21f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 22f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define STORE32L(x, y) \ 23f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { (y)[3] = (unsigned char)(((x)>>24)&255); (y)[2] = (unsigned char)(((x)>>16)&255); \ 24f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); } 25f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 26f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define LOAD32L(x, y) \ 27f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { x = ((unsigned long)((y)[3] & 255)<<24) | \ 28f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ((unsigned long)((y)[2] & 255)<<16) | \ 29f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ((unsigned long)((y)[1] & 255)<<8) | \ 30f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ((unsigned long)((y)[0] & 255)); } 31f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 32f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define STORE64L(x, y) \ 33f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { (y)[7] = (unsigned char)(((x)>>56)&255); (y)[6] = (unsigned char)(((x)>>48)&255); \ 34f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (y)[5] = (unsigned char)(((x)>>40)&255); (y)[4] = (unsigned char)(((x)>>32)&255); \ 35f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (y)[3] = (unsigned char)(((x)>>24)&255); (y)[2] = (unsigned char)(((x)>>16)&255); \ 36f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); } 37f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 38f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define LOAD64L(x, y) \ 39f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { x = (((ulong64)((y)[7] & 255))<<56)|(((ulong64)((y)[6] & 255))<<48)| \ 40f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (((ulong64)((y)[5] & 255))<<40)|(((ulong64)((y)[4] & 255))<<32)| \ 41f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (((ulong64)((y)[3] & 255))<<24)|(((ulong64)((y)[2] & 255))<<16)| \ 42f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (((ulong64)((y)[1] & 255))<<8)|(((ulong64)((y)[0] & 255))); } 43f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 44f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define STORE32H(x, y) \ 45f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { (y)[0] = (unsigned char)(((x)>>24)&255); (y)[1] = (unsigned char)(((x)>>16)&255); \ 46f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (y)[2] = (unsigned char)(((x)>>8)&255); (y)[3] = (unsigned char)((x)&255); } 47f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 48f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define LOAD32H(x, y) \ 49f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { x = ((unsigned long)((y)[0] & 255)<<24) | \ 50f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ((unsigned long)((y)[1] & 255)<<16) | \ 51f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ((unsigned long)((y)[2] & 255)<<8) | \ 52f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ((unsigned long)((y)[3] & 255)); } 53f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 54f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define STORE64H(x, y) \ 55f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { (y)[0] = (unsigned char)(((x)>>56)&255); (y)[1] = (unsigned char)(((x)>>48)&255); \ 56f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (y)[2] = (unsigned char)(((x)>>40)&255); (y)[3] = (unsigned char)(((x)>>32)&255); \ 57f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (y)[4] = (unsigned char)(((x)>>24)&255); (y)[5] = (unsigned char)(((x)>>16)&255); \ 58f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (y)[6] = (unsigned char)(((x)>>8)&255); (y)[7] = (unsigned char)((x)&255); } 59f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 60f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define LOAD64H(x, y) \ 61f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { x = (((ulong64)((y)[0] & 255))<<56)|(((ulong64)((y)[1] & 255))<<48) | \ 62f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (((ulong64)((y)[2] & 255))<<40)|(((ulong64)((y)[3] & 255))<<32) | \ 63f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (((ulong64)((y)[4] & 255))<<24)|(((ulong64)((y)[5] & 255))<<16) | \ 64f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (((ulong64)((y)[6] & 255))<<8)|(((ulong64)((y)[7] & 255))); } 65f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 66f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif /* ENDIAN_NEUTRAL */ 67f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 68f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef ENDIAN_LITTLE 69f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 70f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#if !defined(LTC_NO_BSWAP) && (defined(INTEL_CC) || (defined(__GNUC__) && (defined(__DJGPP__) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__i386__) || defined(__x86_64__)))) 71f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 72f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define STORE32H(x, y) \ 73f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectasm __volatile__ ( \ 74f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project "bswapl %0 \n\t" \ 75f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project "movl %0,(%1)\n\t" \ 76f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project "bswapl %0 \n\t" \ 77f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ::"r"(x), "r"(y)); 78f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 79f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define LOAD32H(x, y) \ 80f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectasm __volatile__ ( \ 81f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project "movl (%1),%0\n\t" \ 82f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project "bswapl %0\n\t" \ 83f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"=r"(x): "r"(y)); 84f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 85f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else 86f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 87f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define STORE32H(x, y) \ 88f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { (y)[0] = (unsigned char)(((x)>>24)&255); (y)[1] = (unsigned char)(((x)>>16)&255); \ 89f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (y)[2] = (unsigned char)(((x)>>8)&255); (y)[3] = (unsigned char)((x)&255); } 90f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 91f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define LOAD32H(x, y) \ 92f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { x = ((unsigned long)((y)[0] & 255)<<24) | \ 93f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ((unsigned long)((y)[1] & 255)<<16) | \ 94f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ((unsigned long)((y)[2] & 255)<<8) | \ 95f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ((unsigned long)((y)[3] & 255)); } 96f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 97f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 98f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 99f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 100f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* x86_64 processor */ 101f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#if !defined(LTC_NO_BSWAP) && (defined(__GNUC__) && defined(__x86_64__)) 102f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 103f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define STORE64H(x, y) \ 104f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectasm __volatile__ ( \ 105f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project "bswapq %0 \n\t" \ 106f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project "movq %0,(%1)\n\t" \ 107f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project "bswapq %0 \n\t" \ 108f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ::"r"(x), "r"(y)); 109f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 110f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define LOAD64H(x, y) \ 111f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectasm __volatile__ ( \ 112f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project "movq (%1),%0\n\t" \ 113f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project "bswapq %0\n\t" \ 114f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"=r"(x): "r"(y)); 115f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 116f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else 117f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 118f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define STORE64H(x, y) \ 119f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { (y)[0] = (unsigned char)(((x)>>56)&255); (y)[1] = (unsigned char)(((x)>>48)&255); \ 120f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (y)[2] = (unsigned char)(((x)>>40)&255); (y)[3] = (unsigned char)(((x)>>32)&255); \ 121f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (y)[4] = (unsigned char)(((x)>>24)&255); (y)[5] = (unsigned char)(((x)>>16)&255); \ 122f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (y)[6] = (unsigned char)(((x)>>8)&255); (y)[7] = (unsigned char)((x)&255); } 123f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 124f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define LOAD64H(x, y) \ 125f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { x = (((ulong64)((y)[0] & 255))<<56)|(((ulong64)((y)[1] & 255))<<48) | \ 126f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (((ulong64)((y)[2] & 255))<<40)|(((ulong64)((y)[3] & 255))<<32) | \ 127f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (((ulong64)((y)[4] & 255))<<24)|(((ulong64)((y)[5] & 255))<<16) | \ 128f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (((ulong64)((y)[6] & 255))<<8)|(((ulong64)((y)[7] & 255))); } 129f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 130f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 131f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 132f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef ENDIAN_32BITWORD 133f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 134f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define STORE32L(x, y) \ 135f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { ulong32 __t = (x); XMEMCPY(y, &__t, 4); } 136f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 137f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define LOAD32L(x, y) \ 138f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project XMEMCPY(&(x), y, 4); 139f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 140f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define STORE64L(x, y) \ 141f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { (y)[7] = (unsigned char)(((x)>>56)&255); (y)[6] = (unsigned char)(((x)>>48)&255); \ 142f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (y)[5] = (unsigned char)(((x)>>40)&255); (y)[4] = (unsigned char)(((x)>>32)&255); \ 143f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (y)[3] = (unsigned char)(((x)>>24)&255); (y)[2] = (unsigned char)(((x)>>16)&255); \ 144f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); } 145f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 146f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define LOAD64L(x, y) \ 147f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { x = (((ulong64)((y)[7] & 255))<<56)|(((ulong64)((y)[6] & 255))<<48)| \ 148f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (((ulong64)((y)[5] & 255))<<40)|(((ulong64)((y)[4] & 255))<<32)| \ 149f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (((ulong64)((y)[3] & 255))<<24)|(((ulong64)((y)[2] & 255))<<16)| \ 150f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (((ulong64)((y)[1] & 255))<<8)|(((ulong64)((y)[0] & 255))); } 151f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 152f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else /* 64-bit words then */ 153f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 154f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define STORE32L(x, y) \ 155f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { ulong32 __t = (x); XMEMCPY(y, &__t, 4); } 156f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 157f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define LOAD32L(x, y) \ 158f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { XMEMCPY(&(x), y, 4); x &= 0xFFFFFFFF; } 159f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 160f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define STORE64L(x, y) \ 161f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { ulong64 __t = (x); XMEMCPY(y, &__t, 8); } 162f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 163f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define LOAD64L(x, y) \ 164f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { XMEMCPY(&(x), y, 8); } 165f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 166f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif /* ENDIAN_64BITWORD */ 167f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 168f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif /* ENDIAN_LITTLE */ 169f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 170f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef ENDIAN_BIG 171f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define STORE32L(x, y) \ 172f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { (y)[3] = (unsigned char)(((x)>>24)&255); (y)[2] = (unsigned char)(((x)>>16)&255); \ 173f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); } 174f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 175f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define LOAD32L(x, y) \ 176f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { x = ((unsigned long)((y)[3] & 255)<<24) | \ 177f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ((unsigned long)((y)[2] & 255)<<16) | \ 178f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ((unsigned long)((y)[1] & 255)<<8) | \ 179f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ((unsigned long)((y)[0] & 255)); } 180f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 181f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define STORE64L(x, y) \ 182f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { (y)[7] = (unsigned char)(((x)>>56)&255); (y)[6] = (unsigned char)(((x)>>48)&255); \ 183f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (y)[5] = (unsigned char)(((x)>>40)&255); (y)[4] = (unsigned char)(((x)>>32)&255); \ 184f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (y)[3] = (unsigned char)(((x)>>24)&255); (y)[2] = (unsigned char)(((x)>>16)&255); \ 185f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); } 186f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 187f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define LOAD64L(x, y) \ 188f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { x = (((ulong64)((y)[7] & 255))<<56)|(((ulong64)((y)[6] & 255))<<48) | \ 189f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (((ulong64)((y)[5] & 255))<<40)|(((ulong64)((y)[4] & 255))<<32) | \ 190f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (((ulong64)((y)[3] & 255))<<24)|(((ulong64)((y)[2] & 255))<<16) | \ 191f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (((ulong64)((y)[1] & 255))<<8)|(((ulong64)((y)[0] & 255))); } 192f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 193f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef ENDIAN_32BITWORD 194f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 195f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define STORE32H(x, y) \ 196f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { ulong32 __t = (x); XMEMCPY(y, &__t, 4); } 197f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 198f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define LOAD32H(x, y) \ 199f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project XMEMCPY(&(x), y, 4); 200f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 201f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define STORE64H(x, y) \ 202f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { (y)[0] = (unsigned char)(((x)>>56)&255); (y)[1] = (unsigned char)(((x)>>48)&255); \ 203f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (y)[2] = (unsigned char)(((x)>>40)&255); (y)[3] = (unsigned char)(((x)>>32)&255); \ 204f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (y)[4] = (unsigned char)(((x)>>24)&255); (y)[5] = (unsigned char)(((x)>>16)&255); \ 205f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (y)[6] = (unsigned char)(((x)>>8)&255); (y)[7] = (unsigned char)((x)&255); } 206f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 207f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define LOAD64H(x, y) \ 208f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { x = (((ulong64)((y)[0] & 255))<<56)|(((ulong64)((y)[1] & 255))<<48)| \ 209f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (((ulong64)((y)[2] & 255))<<40)|(((ulong64)((y)[3] & 255))<<32)| \ 210f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (((ulong64)((y)[4] & 255))<<24)|(((ulong64)((y)[5] & 255))<<16)| \ 211f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (((ulong64)((y)[6] & 255))<<8)| (((ulong64)((y)[7] & 255))); } 212f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 213f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else /* 64-bit words then */ 214f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 215f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define STORE32H(x, y) \ 216f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { ulong32 __t = (x); XMEMCPY(y, &__t, 4); } 217f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 218f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define LOAD32H(x, y) \ 219f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { XMEMCPY(&(x), y, 4); x &= 0xFFFFFFFF; } 220f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 221f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define STORE64H(x, y) \ 222f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { ulong64 __t = (x); XMEMCPY(y, &__t, 8); } 223f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 224f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define LOAD64H(x, y) \ 225f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { XMEMCPY(&(x), y, 8); } 226f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 227f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif /* ENDIAN_64BITWORD */ 228f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif /* ENDIAN_BIG */ 229f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 230f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define BSWAP(x) ( ((x>>24)&0x000000FFUL) | ((x<<24)&0xFF000000UL) | \ 231f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ((x>>8)&0x0000FF00UL) | ((x<<8)&0x00FF0000UL) ) 232f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 233f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 234f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* 32-bit Rotates */ 235f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#if defined(_MSC_VER) 236f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 237f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* instrinsic rotate */ 238f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#include <stdlib.h> 239f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#pragma intrinsic(_lrotr,_lrotl) 240f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define ROR(x,n) _lrotr(x,n) 241f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define ROL(x,n) _lrotl(x,n) 242f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define RORc(x,n) _lrotr(x,n) 243f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define ROLc(x,n) _lrotl(x,n) 244f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 245f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#elif !defined(__STRICT_ANSI__) && defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) && !defined(INTEL_CC) && !defined(LTC_NO_ASM) 246f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 247f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic inline unsigned ROL(unsigned word, int i) 248f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 249f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project asm ("roll %%cl,%0" 250f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"=r" (word) 251f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"0" (word),"c" (i)); 252f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return word; 253f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 254f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 255f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic inline unsigned ROR(unsigned word, int i) 256f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 257f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project asm ("rorl %%cl,%0" 258f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"=r" (word) 259f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"0" (word),"c" (i)); 260f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return word; 261f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 262f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 263f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifndef LTC_NO_ROLC 264f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 265f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic inline unsigned ROLc(unsigned word, const int i) 266f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 267f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project asm ("roll %2,%0" 268f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"=r" (word) 269f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"0" (word),"I" (i)); 270f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return word; 271f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 272f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 273f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic inline unsigned RORc(unsigned word, const int i) 274f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 275f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project asm ("rorl %2,%0" 276f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"=r" (word) 277f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"0" (word),"I" (i)); 278f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return word; 279f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 280f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 281f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else 282f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 283f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define ROLc ROL 284f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define RORc ROR 285f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 286f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 287f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 288f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#elif !defined(__STRICT_ANSI__) && defined(LTC_PPC32) 289f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 290f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic inline unsigned ROL(unsigned word, int i) 291f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 292f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project asm ("rotlw %0,%0,%2" 293f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"=r" (word) 294f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"0" (word),"r" (i)); 295f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return word; 296f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 297f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 298f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic inline unsigned ROR(unsigned word, int i) 299f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 300f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project asm ("rotlw %0,%0,%2" 301f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"=r" (word) 302f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"0" (word),"r" (32-i)); 303f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return word; 304f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 305f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 306f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifndef LTC_NO_ROLC 307f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 308f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic inline unsigned ROLc(unsigned word, const int i) 309f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 310f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project asm ("rotlwi %0,%0,%2" 311f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"=r" (word) 312f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"0" (word),"I" (i)); 313f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return word; 314f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 315f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 316f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic inline unsigned RORc(unsigned word, const int i) 317f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 318f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project asm ("rotrwi %0,%0,%2" 319f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"=r" (word) 320f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"0" (word),"I" (i)); 321f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return word; 322f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 323f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 324f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else 325f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 326f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define ROLc ROL 327f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define RORc ROR 328f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 329f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 330f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 331f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 332f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else 333f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 334f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* rotates the hard way */ 335f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define ROL(x, y) ( (((unsigned long)(x)<<(unsigned long)((y)&31)) | (((unsigned long)(x)&0xFFFFFFFFUL)>>(unsigned long)(32-((y)&31)))) & 0xFFFFFFFFUL) 336f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define ROR(x, y) ( ((((unsigned long)(x)&0xFFFFFFFFUL)>>(unsigned long)((y)&31)) | ((unsigned long)(x)<<(unsigned long)(32-((y)&31)))) & 0xFFFFFFFFUL) 337f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define ROLc(x, y) ( (((unsigned long)(x)<<(unsigned long)((y)&31)) | (((unsigned long)(x)&0xFFFFFFFFUL)>>(unsigned long)(32-((y)&31)))) & 0xFFFFFFFFUL) 338f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define RORc(x, y) ( ((((unsigned long)(x)&0xFFFFFFFFUL)>>(unsigned long)((y)&31)) | ((unsigned long)(x)<<(unsigned long)(32-((y)&31)))) & 0xFFFFFFFFUL) 339f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 340f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 341f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 342f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 343f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* 64-bit Rotates */ 344f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#if !defined(__STRICT_ANSI__) && defined(__GNUC__) && defined(__x86_64__) && !defined(LTC_NO_ASM) 345f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 346f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic inline unsigned long ROL64(unsigned long word, int i) 347f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 348f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project asm("rolq %%cl,%0" 349f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"=r" (word) 350f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"0" (word),"c" (i)); 351f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return word; 352f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 353f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 354f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic inline unsigned long ROR64(unsigned long word, int i) 355f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 356f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project asm("rorq %%cl,%0" 357f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"=r" (word) 358f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"0" (word),"c" (i)); 359f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return word; 360f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 361f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 362f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifndef LTC_NO_ROLC 363f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 364f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic inline unsigned long ROL64c(unsigned long word, const int i) 365f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 366f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project asm("rolq %2,%0" 367f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"=r" (word) 368f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"0" (word),"J" (i)); 369f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return word; 370f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 371f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 372f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic inline unsigned long ROR64c(unsigned long word, const int i) 373f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 374f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project asm("rorq %2,%0" 375f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"=r" (word) 376f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project :"0" (word),"J" (i)); 377f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return word; 378f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 379f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 380f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else /* LTC_NO_ROLC */ 381f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 382f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define ROL64c ROL64 383f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define ROR64c ROR64 384f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 385f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 386f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 387f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else /* Not x86_64 */ 388f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 389f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define ROL64(x, y) \ 390f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ( (((x)<<((ulong64)(y)&63)) | \ 391f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>((ulong64)64-((y)&63)))) & CONST64(0xFFFFFFFFFFFFFFFF)) 392f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 393f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define ROR64(x, y) \ 394f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ( ((((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>((ulong64)(y)&CONST64(63))) | \ 395f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ((x)<<((ulong64)(64-((y)&CONST64(63)))))) & CONST64(0xFFFFFFFFFFFFFFFF)) 396f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 397f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define ROL64c(x, y) \ 398f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ( (((x)<<((ulong64)(y)&63)) | \ 399f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>((ulong64)64-((y)&63)))) & CONST64(0xFFFFFFFFFFFFFFFF)) 400f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 401f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define ROR64c(x, y) \ 402f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ( ((((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>((ulong64)(y)&CONST64(63))) | \ 403f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ((x)<<((ulong64)(64-((y)&CONST64(63)))))) & CONST64(0xFFFFFFFFFFFFFFFF)) 404f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 405f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 406f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 407f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifndef MAX 408f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #define MAX(x, y) ( ((x)>(y))?(x):(y) ) 409f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 410f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 411f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifndef MIN 412f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #define MIN(x, y) ( ((x)<(y))?(x):(y) ) 413f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 414f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 415f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* extract a byte portably */ 416f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef _MSC_VER 417f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #define byte(x, n) ((unsigned char)((x) >> (8 * (n)))) 418f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else 419f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #define byte(x, n) (((x) >> (8 * (n))) & 255) 420f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 421f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 422f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Source: /cvs/libtom/libtomcrypt/src/headers/tomcrypt_macros.h,v $ */ 423f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Revision: 1.15 $ */ 424f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Date: 2006/11/29 23:43:57 $ */ 425