|
30 | 30 | ** OS_WIDE_CHAR - the OS uses wide chars (not UTF-8)
|
31 | 31 | **
|
32 | 32 | ***********************************************************************/
|
| 33 | +#ifndef REB_C_H |
| 34 | +#define REB_C_H |
33 | 35 |
|
34 | 36 | #ifndef FALSE
|
35 | 37 | #define FALSE 0
|
@@ -97,7 +99,7 @@ typedef unsigned short u16;
|
97 | 99 | typedef int i32;
|
98 | 100 | typedef unsigned int u32;
|
99 | 101 | #else
|
100 |
| -typedef long i32; |
| 102 | +typedef long i32; |
101 | 103 | typedef unsigned long u32;
|
102 | 104 | #endif
|
103 | 105 | #define I32_C(c) c
|
@@ -344,6 +346,56 @@ typedef void(*CFUNC)(void *);
|
344 | 346 | #endif
|
345 | 347 |
|
346 | 348 |
|
| 349 | +/*********************************************************************** |
| 350 | +** |
| 351 | +** Conversion Macros |
| 352 | +** |
| 353 | +***********************************************************************/ |
| 354 | + |
| 355 | +/* interpret four 8 bit unsigned integers as a 32 bit unsigned integer in little endian |
| 356 | + originaly named LE in ChaCha20 code and U8TO32 in Poly1305 code */ |
| 357 | +#define U8TO32_LE(p) \ |
| 358 | + (((u32)((p)[0])) | \ |
| 359 | + ((u32)((p)[1]) << 8) | \ |
| 360 | + ((u32)((p)[2]) << 16) | \ |
| 361 | + ((u32)((p)[3]) << 24)) |
| 362 | + |
| 363 | +/* store a 32 bit unsigned integer as four 8 bit unsigned integers in little endian |
| 364 | + originaly named FROMLE in ChaCha20 code */ |
| 365 | +#define U32TO8_LE(p, v) \ |
| 366 | + do { \ |
| 367 | + (p)[0] = (u8)((v)); \ |
| 368 | + (p)[1] = (u8)((v) >> 8); \ |
| 369 | + (p)[2] = (u8)((v) >> 16); \ |
| 370 | + (p)[3] = (u8)((v) >> 24); \ |
| 371 | + } while (0) |
| 372 | + |
| 373 | +/* interpret eight 8 bit unsigned integers as a 64 bit unsigned integer in little endian */ |
| 374 | +#define U8TO64_LE(p) \ |
| 375 | + (((u64)((p)[0] & 0xff) ) | \ |
| 376 | + ((u64)((p)[1] & 0xff) << 8) | \ |
| 377 | + ((u64)((p)[2] & 0xff) << 16) | \ |
| 378 | + ((u64)((p)[3] & 0xff) << 24) | \ |
| 379 | + ((u64)((p)[4] & 0xff) << 32) | \ |
| 380 | + ((u64)((p)[5] & 0xff) << 40) | \ |
| 381 | + ((u64)((p)[6] & 0xff) << 48) | \ |
| 382 | + ((u64)((p)[7] & 0xff) << 56)) |
| 383 | + |
| 384 | + |
| 385 | +/* store a 64 bit unsigned integer as eight 8 bit unsigned integers in little endian */ |
| 386 | +#define U64TO8_LE(p, v) \ |
| 387 | + do { \ |
| 388 | + (p)[0] = (u8)((v) ) & 0xff; \ |
| 389 | + (p)[1] = (u8)((v) >> 8) & 0xff; \ |
| 390 | + (p)[2] = (u8)((v) >> 16) & 0xff; \ |
| 391 | + (p)[3] = (u8)((v) >> 24) & 0xff; \ |
| 392 | + (p)[4] = (u8)((v) >> 32) & 0xff; \ |
| 393 | + (p)[5] = (u8)((v) >> 40) & 0xff; \ |
| 394 | + (p)[6] = (u8)((v) >> 48) & 0xff; \ |
| 395 | + (p)[7] = (u8)((v) >> 56) & 0xff; \ |
| 396 | + } while (0) |
| 397 | + |
| 398 | + |
347 | 399 |
|
348 | 400 | //
|
349 | 401 | // CASTING MACROS
|
@@ -514,3 +566,5 @@ typedef void(*CFUNC)(void *);
|
514 | 566 | ));
|
515 | 567 | }
|
516 | 568 | #endif
|
| 569 | + |
| 570 | +#endif // REB_C_H |
0 commit comments