]> granicus.if.org Git - yasm/commitdiff
Add SAVE_*, READ_*, and LOAD_* families of little-endian macros.
authorPeter Johnson <peter@tortall.net>
Wed, 26 Sep 2001 20:54:37 +0000 (20:54 -0000)
committerPeter Johnson <peter@tortall.net>
Wed, 26 Sep 2001 20:54:37 +0000 (20:54 -0000)
svn path=/trunk/yasm/; revision=230

libyasm/file.h
src/file.h

index 262be66b560020b4aee48d1c3f94e72d14a8aaae..71cf66f7edd8fe5cca3663e99f38beae61028d78 100644 (file)
            *((ptr)++) = ((val) >> 24) & 0xFF;  \
        } while (0)
 
+/* Non-incrementing versions of the above. */
+
+#define SAVE_BYTE(ptr, val)                    \
+       *(ptr) = (val) & 0xFF
+
+#define SAVE_SHORT(ptr, val)                   \
+       do {                                    \
+           *(ptr) = (val) & 0xFF;              \
+           *((ptr)+1) = ((val) >> 8) & 0xFF;   \
+       } while (0)
+
+#define SAVE_LONG(ptr, val)                    \
+       do {                                    \
+           *(ptr) = (val) & 0xFF;              \
+           *((ptr)+1) = ((val) >> 8) & 0xFF;   \
+           *((ptr)+2) = ((val) >> 16) & 0xFF;  \
+           *((ptr)+3) = ((val) >> 24) & 0xFF;  \
+       } while (0)
+
 /* Direct-to-file versions of the above.  Using the above macros and a single
  * fwrite() will probably be faster than calling these functions many times.
  * These functions return 1 if the write was successful, 0 if not (so their
 size_t fwrite_short(unsigned short val, FILE *f);
 size_t fwrite_long(unsigned long val, FILE *f);
 
+/* Read/Load versions.  val is the variable to receive the data. */
+
+#define READ_BYTE(val, ptr)                    \
+       (val) = *((ptr)++) & 0xFF
+
+#define READ_SHORT(val, ptr)                   \
+       do {                                    \
+           (val) = *((ptr)++) & 0xFF;          \
+           (val) |= (*((ptr)++) & 0xFF) << 8;  \
+       } while (0)
+
+#define READ_LONG(val, ptr)                    \
+       do {                                    \
+           (val) = *((ptr)++) & 0xFF;          \
+           (val) |= (*((ptr)++) & 0xFF) << 8;  \
+           (val) |= (*((ptr)++) & 0xFF) << 16; \
+           (val) |= (*((ptr)++) & 0xFF) << 24; \
+       } while (0)
+
+/* Non-incrementing versions of the above. */
+
+#define LOAD_BYTE(val, ptr)                    \
+       (val) = *(ptr) & 0xFF
+
+#define LOAD_SHORT(val, ptr)                   \
+       do {                                    \
+           (val) = *(ptr) & 0xFF;              \
+           (val) |= (*((ptr)+1) & 0xFF) << 8;  \
+       } while (0)
+
+#define LOAD_LONG(val, ptr)                    \
+       do {                                    \
+           (val) = *(ptr) & 0xFF;              \
+           (val) |= (*((ptr)+1) & 0xFF) << 8;  \
+           (val) |= (*((ptr)+2) & 0xFF) << 16; \
+           (val) |= (*((ptr)+3) & 0xFF) << 24; \
+       } while (0)
+
 #endif
index 262be66b560020b4aee48d1c3f94e72d14a8aaae..71cf66f7edd8fe5cca3663e99f38beae61028d78 100644 (file)
            *((ptr)++) = ((val) >> 24) & 0xFF;  \
        } while (0)
 
+/* Non-incrementing versions of the above. */
+
+#define SAVE_BYTE(ptr, val)                    \
+       *(ptr) = (val) & 0xFF
+
+#define SAVE_SHORT(ptr, val)                   \
+       do {                                    \
+           *(ptr) = (val) & 0xFF;              \
+           *((ptr)+1) = ((val) >> 8) & 0xFF;   \
+       } while (0)
+
+#define SAVE_LONG(ptr, val)                    \
+       do {                                    \
+           *(ptr) = (val) & 0xFF;              \
+           *((ptr)+1) = ((val) >> 8) & 0xFF;   \
+           *((ptr)+2) = ((val) >> 16) & 0xFF;  \
+           *((ptr)+3) = ((val) >> 24) & 0xFF;  \
+       } while (0)
+
 /* Direct-to-file versions of the above.  Using the above macros and a single
  * fwrite() will probably be faster than calling these functions many times.
  * These functions return 1 if the write was successful, 0 if not (so their
 size_t fwrite_short(unsigned short val, FILE *f);
 size_t fwrite_long(unsigned long val, FILE *f);
 
+/* Read/Load versions.  val is the variable to receive the data. */
+
+#define READ_BYTE(val, ptr)                    \
+       (val) = *((ptr)++) & 0xFF
+
+#define READ_SHORT(val, ptr)                   \
+       do {                                    \
+           (val) = *((ptr)++) & 0xFF;          \
+           (val) |= (*((ptr)++) & 0xFF) << 8;  \
+       } while (0)
+
+#define READ_LONG(val, ptr)                    \
+       do {                                    \
+           (val) = *((ptr)++) & 0xFF;          \
+           (val) |= (*((ptr)++) & 0xFF) << 8;  \
+           (val) |= (*((ptr)++) & 0xFF) << 16; \
+           (val) |= (*((ptr)++) & 0xFF) << 24; \
+       } while (0)
+
+/* Non-incrementing versions of the above. */
+
+#define LOAD_BYTE(val, ptr)                    \
+       (val) = *(ptr) & 0xFF
+
+#define LOAD_SHORT(val, ptr)                   \
+       do {                                    \
+           (val) = *(ptr) & 0xFF;              \
+           (val) |= (*((ptr)+1) & 0xFF) << 8;  \
+       } while (0)
+
+#define LOAD_LONG(val, ptr)                    \
+       do {                                    \
+           (val) = *(ptr) & 0xFF;              \
+           (val) |= (*((ptr)+1) & 0xFF) << 8;  \
+           (val) |= (*((ptr)+2) & 0xFF) << 16; \
+           (val) |= (*((ptr)+3) & 0xFF) << 24; \
+       } while (0)
+
 #endif