using __asm__ instead of asm allows compilation under both gnu89 (old gcc defaults pre 5.x) and also c99 (gcc 5.x+ defaults)