rendered paste body#include <stdio.h>/* How many iterations? */#define ITERATIONS (100000000)/* Which bit of the counter to test? */#define BIT 1#ifdef CMOV#define choose(i, a, b) ({ \ unsigned long result; \ asm("testl %1,%2 ; cmovne %3,%0" \ :"=r" (result) \ :"i" (BIT), \ "g" (i), \ "rm" (a), \ "0" (b)); \ result; })#else#define choose(i, a, b) ({ \ unsigned long result; \ asm("testl %1,%2 ; je 1f ; mov %3,%0\n1:" \ :"=r" (result) \ :"i" (BIT), \ "g" (i), \ "g" (a), \ "0" (b)); \ result; })#endifint main(int argc, char **argv){ int i; unsigned long sum = 0; for (i = 0; i < ITERATIONS; i++) { unsigned long a = 5, b = 7; sum += choose(i, a, b); } printf("%lu\n", sum); return 0;}/*root@alix:/usr/src# gcc cmov.c -O3 -o cmovroot@alix:/usr/src# ./cmov600000000root@alix:/usr/src# time ./cmov600000000real 0m3.359suser 0m3.360ssys 0m0.000sroot@alix:/usr/src# gcc cmov.c -O3 -o cmov -DCMOVroot@alix:/usr/src# time ./cmov600000000real 0m1.430suser 0m1.430ssys 0m0.000sroot@alix:/usr/src#*/