ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libecb/Changes
Revision: 1.46
Committed: Fri Mar 25 15:34:29 2022 UTC (2 years, 4 months ago) by root
Branch: MAIN
Changes since 1.45: +2 -1 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.39 TODO: naming of cutnions, index_to_coord, xy_to_s, xy_to_linear/seq, 32/64
2     TODO: returning packed coordinates, really
3     TODO: support order=0?
4     0x0001000c
5     - added ecb_hilbert2d function family.
6 root 1.40 - use __builtin_popcountl on 64 bit clang and gcc.
7 root 1.41 - use 64 bit builtins, not 128 bit builtins, for ctz/clz on 64 bit cpus.
8 root 1.42 - add ecb_clz* functions,
9 root 1.43 - renamed ecb_gray* functions to have trailing bit width.
10 root 1.44 - use ecb_function_ consistently for newly added functions.
11 root 1.45 - say goodbye to gnu-style function definitions - they were not
12 root 1.46 used consistently anyway, and imho make the code harder to read,
13     and didn't even work for indented definitions.
14 root 1.39
15 root 1.38 0x0001000b
16     - added ecb_gray*_{de,en}code functions.
17    
18 root 1.37 0x0001000a
19     - added ecb_ptrmix.
20    
21 root 1.34 0x00010009
22 root 1.35 - added ecb_i2a family of functions.
23 root 1.34 - added ECB_64BIT_NATIVE.
24    
25 root 1.15 TODO:
26     08:30:06 <b_jonas> I think it could be worth to add a macro that works like alignof or _Alignof on sane
27     compilers, and like __alignof on MS compilers that support it, see
28     http://msdn.microsoft.com/en-us/library/45t0s5f4.aspx
29     08:30:24 <b_jonas> even if you can't support it on all the old compilers
30     08:31:17 <b_jonas> I'd also like a macro for alignas, but sadly, that seems impossible in general, because
31     the MS compiler only has some half-attempt to do something similar but with different and
32     more broken semantics, see http://msdn.microsoft.com/en-us/library/83ythb65.aspx
33     08:31:35 <b_jonas> but I wonder if some special case could still be worth to support
34     08:32:23 <b_jonas> probably not, because it would just account to making a union with a highly aligned type,
35     which is something I can do on any compiler portably
36    
37     TODO: #define ECB_IS_INTEGRAL(x) !((1 ? 1 : (x)) / 2)
38     #define ECB_IS_INTEGRAL(x) (sizeof ((x) + 1.0f) != sizeof((x) + 1ULL))
39    
40 root 1.28 TODO: ecb_minpot, either using bit tricks or ecb_ldXX
41    
42     TODO: __builtin_popcountll exists...
43    
44 root 1.26 TODO: __builtin_powi
45    
46 root 1.15 TODO: https://gustedt.wordpress.com/2010/06/08/detect-empty-macro-arguments/
47    
48 root 1.13 implement is_constant for c11: https://gustedt.wordpress.com/2013/08/22/testing-compile-time-constness-and-null-pointers-with-c11s-_generic/
49 root 1.12
50     #ifdef _MSC_VER
51    
52     #include <stdlib.h>
53     #define bswap_32(x) _byteswap_ulong(x)
54     #define bswap_64(x) _byteswap_uint64(x)
55    
56     #elif defined(__APPLE__)
57    
58     // Mac OS X / Darwin features
59     #include <libkern/OSByteOrder.h>
60     #define bswap_32(x) OSSwapInt32(x)
61     #define bswap_64(x) OSSwapInt64(x)
62    
63     #elif defined(__sun) || defined(sun)
64    
65     #include <sys/byteorder.h>
66     #define bswap_32(x) BSWAP_32(x)
67     #define bswap_64(x) BSWAP_64(x)
68    
69     #elif defined(__FreeBSD__)
70    
71     #include <sys/endian.h>
72     #define bswap_32(x) bswap32(x)
73     #define bswap_64(x) bswap64(x)
74    
75     #elif defined(__OpenBSD__)
76    
77     #include <sys/types.h>
78     #define bswap_32(x) swap32(x)
79     #define bswap_64(x) swap64(x)
80    
81     #elif defined(__NetBSD__)
82    
83     #include <sys/types.h>
84     #include <machine/bswap.h>
85     #if defined(__BSWAP_RENAME) && !defined(__bswap_32)
86     #define bswap_32(x) bswap32(x)
87     #define bswap_64(x) bswap64(x)
88     #endif
89    
90     #else
91    
92     #include <byteswap.h>
93    
94     #endif
95    
96 root 1.32 TODO: generic poprcount etc., also fast_t for them?
97 root 1.33
98 root 1.36 - allow any rotate count in rcb_rot*, at the expense
99     of bad optimisation results on some platforms or with
100     some word sizes.
101 root 1.33 - try to use inttypes.h on mingw.
102    
103 root 1.30 0x00010008
104     - aligned/unaligned load/store, bswap, host order
105     conversion.
106 root 1.32 - generic C++ ecb_rot[lr], ecb_popcount, ecb_ctz,
107     ecb_is_pot32 and ecb_bitrev functions.
108 root 1.30
109 root 1.29 0x00010007
110     - new ECB_OPTIMIZE_SIZE symbol.
111    
112 root 1.28 0x00010006
113 root 1.29 - new ECB_MEMORY_FENCE_RELAXED memory fence.
114 root 1.28 - use acquire/eelease memory barriers on sun workshop pro, not read/write.
115     - rely on c++ compiler barriers to do the right thing in gcc/clang.
116 root 1.27 - change release memory fence to memory barrier on ia32/ia64.
117 root 1.23 - apply ctz/ld patch for msc by Zsbán Ambrus.
118 root 1.24 - ECB_PTRSIZE erroneously was 8 on most 32bit systems (
119     found by Zsbán Ambrus).
120 root 1.25 - improved compiletime detection of endianness, also, allow
121     runtime detection to indicate other-than-big/little endianness.
122 root 1.26 - no memory barrier neded on arm < 6.
123 root 1.23
124 root 1.22 0x00010005
125     - improve ecb_binary16_to_float.
126     - add ecb_float_to_binary16.
127     - add ecb_binary16_to_binary32 and ecb_binary32_to_binary16 pair.
128    
129 root 1.6 0x00010001
130     - add ecb_is_pot32/64.
131     - add intptr_t/uintptr_t.
132     - add ECB_PTRSIZE.
133 root 1.7 - more macros for C/C++ version checks.
134     - support C11 atomics for memory fences.
135     - support gcc-4.7 atomics for memory fences.
136 root 1.10 - support m68k, m88k and sh (patch by Miod Vallat).
137 root 1.11 - add ecb_binary16_to_float.
138 root 1.6
139 root 1.9 TODO: ecb_restrict_array etc. http://ue.tst.eu/5093eafd713ec5fda776d8065070aa4c.txt
140 sf-exg 1.20 TODO: ffs
141 root 1.1 64 bit variants of everything
142 root 1.2 TODO: examples from X for clz/ctz
143 root 1.3 TODO: arithmetic right shift
144     TODO: template/generic functions for x32/x64 and so on
145 root 1.4 TODO: #define ecb_integer_multiples_of(n,d) ((char (*)[d])(n) - (char (*)[d])0)
146 root 1.3 TODO: generalised shift
147 root 1.8 TODO: #define ECB_FAST_UNALIGNED_ACCESS
148 root 1.3 unsigned long gensh(unsigned long v, int x) {
149     int a, b;
150     a = (v << x) & -(((unsigned int)x) < 32);
151     x = -x;
152     b = (v >> x) & -(((unsigned int)x) < 32);
153     return a|b;
154     }
155 root 1.14
156 root 1.16 TODO: export(=dllexport) & hidden
157     TODO: flatten
158     TODO: warning(msg)
159     TODO: error(msg)
160 root 1.17 TODO: leaf (uh), noclone (hmmm)
161     TODO: nonnull, returns_nonnull
162     TODO: nothrow
163     TODO: used
164     TODO: trap
165     TODO: http://llvm.org/docs/doxygen/html/Compiler_8h_source.html
166 root 1.16
167 root 1.14 TODO: read/write unaligned macros
168     TODO: htonl and friends
169 sf-exg 1.20 TODO: macro to convert from unsigned to signed "the natural way"
170 root 1.14 TODO: ecb_static_assert, with message (just like boost), or somesuch, using array-declaration
171     TODO: alignof
172    
173