I've written code which looks like this:
char* xor_and_print(byte arr[], size_t buffSize, byte key)
{
    size_t i;
    for(i = 0; i < buffSize; i++)
    {
        printf("%c", (arr[i] & ~key) | (key & ~arr[i]));
    }
    putchar('\n');
}
This is an xor operation blown up into more instructions. I am using gcc-6.3.0. Even when I compile with -O0 flag, gcc turns this into one single xor instruction in the disassembly. Is it possible to coerce it into writing those specific asm instructions with a flag or must I use inline assembly language?
 
                        
Using
volatileshould avoid this optimization:But it will stay unoptimized for higher optimization levels too.