#include <iostream>

void swap1(int *a, int *b)
{
    *a ^= *b;
    *b ^= *a;
    *a ^= *b;
}

void swap2(int *a, int *b)
{
    __asm__ volatile (".intel_syntax noprefix\n\t\
    xor rax,rcx\n\t\
    xor rcx,rax\n\t\
    xor rax,rcx"  : "=a" (*a), "=c" (*b) : "a" (*a), "c" (*b)  : "memory");  
}

void swap3(int *a, int *b)
{
    __asm__ volatile (""  : "=a" (*a), "=c" (*b) : "c" (*a), "a" (*b)  : "memory");  
}

int main()
{
    int a=6,b=7,c=8;
    std::cout<<a<<b<<c<<"\n";
    swap1(&a,&a);
    swap2(&b,&b);
    swap3(&c,&c);
    std::cout<<a<<b<<c<<"\n";
    swap1(&a,&b);
    swap2(&b,&c);
    swap3(&a,&b);
    std::cout<<a<<b<<c<<"\n";
    return 0;
}