diff options
author | Daniel Colascione <dancol@dancol.org> | 2013-09-22 01:31:55 -0800 |
---|---|---|
committer | Daniel Colascione <dancol@dancol.org> | 2013-09-22 01:31:55 -0800 |
commit | 3e0b94e7ff1fc69b077322d672ef5d0b668541c3 (patch) | |
tree | 9927abd073960f2460f05a43ae9467cd82c00b9b /src/conf_post.h | |
parent | 76880d884d87d0bc674249e292ccda70f31cca0e (diff) | |
download | emacs-3e0b94e7ff1fc69b077322d672ef5d0b668541c3.tar.gz |
Add set operations for bool-vector.
http://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00404.html
* data.c (Qbool_vector_p): New symbol.
(bool_vector_spare_mask,popcount_size_t_generic)
(popcount_size_t_msc,popcount_size_t_gcc)
(popcount_size_t)
(bool_vector_binop_driver)
(count_trailing_zero_bits,size_t_to_host_endian)
(Fbool_vector_exclusive_or)
(Fbool_vector_union)
(Fbool_vector_intersection,Fbool_vector_set_difference)
(Fbool_vector_subsetp,Fbool_vector_not)
(Fbool_vector_count_matches)
(Fbool_vector_count_matches_at): New functions.
(syms_of_data): Intern new symbol, functions.
* alloc.c (bool_vector_payload_bytes): New function.
(Fmake_bool_vector): Instead of calling Fmake_vector,
which performs redundant initialization and argument checking,
just call allocate_vector ourselves. Make sure we clear any
terminating padding to zero.
(vector_nbytes,sweep_vectors): Use bool_vector_payload_bytes
instead of open-coding the size calculation.
(vroundup_ct): New macro.
(vroundup): Assume argument >= 0; invoke vroundup_ct.
* casetab.c (shuffle,set_identity): Change lint_assume to assume.
* composite.c (composition_gstring_put_cache): Change
lint_assume to assume.
* conf_post.h (assume): New macro.
(lint_assume): Remove.
* dispnew.c (update_frame_1): Change lint_assume to assume.
* ftfont.c (ftfont_shape_by_flt): Change lint_assume
to assume.
* image.c (gif_load): Change lint_assume to assume.
* lisp.h (eassert_and_assume): New macro.
(Qbool_vector_p): Declare.
(CHECK_BOOL_VECTOR,ROUNDUP,BITS_PER_SIZE_T): New macros.
(swap16,swap32,swap64): New inline functions.
* macfont.c (macfont_shape): Change lint_assume to assume.
* ralloc.c: Rename ROUNDUP to PAGE_ROUNDUP throughout.
* xsettings.c (parse_settings): Use new swap16 and
swap32 from lisp.h instead of file-specific macros.
Diffstat (limited to 'src/conf_post.h')
-rw-r--r-- | src/conf_post.h | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/conf_post.h b/src/conf_post.h index 30a4a5a9422..5f6cf0eca37 100644 --- a/src/conf_post.h +++ b/src/conf_post.h @@ -248,16 +248,24 @@ extern void _DebPrint (const char *fmt, ...); # define FLEXIBLE_ARRAY_MEMBER 1 #endif +/* assume(cond) tells the compiler (and lint) that a certain condition + * will always hold, and that it should optimize (or check) accordingly. */ +#if defined lint +# define assume(cond) ((cond) ? (void) 0 : abort ()) +#elif (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) || __GNUC__ > 4 +# define assume(cond) ((x) || (__builtin_unreachable(), 0)) +#elif defined __MSC_VER +# define assume(cond) __assume ((cond)) +#else +# define assume(cond) (0 && (cond)) +#endif + /* Use this to suppress gcc's `...may be used before initialized' warnings. */ #ifdef lint /* Use CODE only if lint checking is in effect. */ # define IF_LINT(Code) Code -/* Assume that the expression COND is true. This differs in intent - from 'assert', as it is a message from the programmer to the compiler. */ -# define lint_assume(cond) ((cond) ? (void) 0 : abort ()) #else # define IF_LINT(Code) /* empty */ -# define lint_assume(cond) ((void) (0 && (cond))) #endif /* conf_post.h ends here */ |