Op 25 mei 2020 18:14:02 schreef ohm pi:
Bovenstaande test is niet goed.
Volgende test is beter.
Hier dwing ik de compiler om in de eerste functie te xor-en.
Dat doe ik door te xor-en met 0xFE. Er is dan geen snellere route mogelijk
Het probleem bij jouw test is dat XOR met 0xFE iets anders doet dan de tilde (~) operator. Het is dan ook niet meer dan logisch dat er andere machine code voor deze twee functies door de compiler gegenereerd wordt. Het is mij dan ook niet duidelijk wat jij nu met jouw test probeert te bewijzen.
De stelling was nu juist dat:
- Een XOR met 0xFF op een byte levert exact dezelfde uitkomst als de tilde operator op een byte; in beide gevallen worden alle bits in de byte geïnverteerd.
- Dat bij een goede compiler met optimalisaties ingeschakeld deze naar alle waarschijnlijkheid dezelfde machine code produceert voor inverteren van een byte ongeacht of dit nu gebeurt met ^0xFF of met de tilde operator.
Geen van deze stellingen worden weerlegt door jouw test.
@Arco ik heb op https://godbolt.org/z/A6a69_ geprobeerd met diverse processoren (AVR, x86, ARM ARM64, MIPS, MSP430, POWER64, RISC-V) en diverse compilers (GCC, CLANG, MSVC) in alle gevallen worden voor beide functies exact dezelfde machine code gegenereerd indien de optimizer (-O2) aanstaat. Omdat beide functies voor de bovenstaande stelling een identiek resultaat behoren te produceren, is het niet zo vreemd dat identieke machine code gegenereerd wordt - in dit geval is de instructie set van de processor niet zo relevant voor de bovenstaande stelling.