> /<<PKGBUILDDIR>>/libi2pd/Crypto.cpp: In member function 'virtual void > i2p::crypto::ECBEncryptionAESNI::Encrypt(const i2p::crypto::ChipherBlock*, > i2p::crypto::ChipherBlock*)': > /<<PKGBUILDDIR>>/libi2pd/Crypto.cpp:611:4: error: unknown register name > '%xmm0' in 'asm' > );
The issue here is helper functions that are called only from one multiversioned variant, but have no __target__ themselves. Adding that attribute would be 1. pointless as they have no generic versions, 2. problematic as I don't know how GCC can handle them being called from asm code. Thus, they should be regular functions. Turns out a nice solution at https://gcc.gnu.org/wiki/FunctionSpecificOpt is a time-wasting trap, as __option__ was a GCC branch that never got merged. bunk suggested turning the helper functions into macros, this would produce macros several pages long, not nice. Evicting the helpers into a separate file and compiling on their own with appropriate -m would inhibit inlining. I got other bugs higher on the TODO list, so I'm out for now -- you probably know a lot more about this as I never used multiversioning myself. Once you have an opinion, please tell me if there's anything I can do. 喵! -- ⢀⣴⠾⠻⢶⣦⠀ ⣾⠁⢰⠒⠀⣿⡁ Imagine there are bandits in your house, your kid is bleeding out, ⢿⡄⠘⠷⠚⠋⠀ the house is on fire, and seven big-ass trumpets are playing in the ⠈⠳⣄⠀⠀⠀⠀ sky. Your cat demands food. The priority should be obvious...