All pastes #1590089 Raw Edit

matteo

public c v1 · immutable
#1590089 ·published 2009-10-03 01:34 UTC
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#*/