Nikos Mavrogiannopoulos n.mavrogiannopoulos@gmail.com writes:
Looks nice. About the __attribute__((constructor)), you are restricting it to GNUC only, while it seems to be available more widely.
I do have a configure check, setting HAVE_GCC_ATTRIBUTE, based on compiling a test program using __attribute__((noreturn)). Maybe I could use that, and the __sun hack? I know both intel and llvm compilers attempt to be gcc compatible (sometimes too compatible, I've heard some versions of the intel compiler added __GNUC__ as a predefined...).
Ideally it would be nice with a configure test that checks that constructors actually work, but that's hard to do when cross compiling.
It's early, but it would be nice if the arm neon code was part of fat as well.
Sure, that's the next step, once I have a structure I think is workable. Does anyone have a pointer to how to check cpu capabilities on ARM?
Another question: We need some kind of memory barrier when writing and/or reading the initialized flag. The (unlikely) failure case is a thread reading the initialized flag, getting 1, and then reading one of the function pointers, and getting a too old value.
What barrier-instruction(s) should be used, on x86_64 and ARM? It's probably easiest to add any needed sychronization functions to cpuid.asm, to avoid relying on compiler-specific features.
Regards, /Niels