From 37a6a455466e5b197311771a777ab241e471ed8a Mon Sep 17 00:00:00 2001 From: Edward O'Callaghan Date: Fri, 7 Aug 2009 20:30:09 +0000 Subject: Code style and Readability fixes. Credit to Craig van Vliet. git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@78403 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/ctzsi2.c | 81 +++++++++++++++++++++++++++++++----------------------------- 1 file changed, 42 insertions(+), 39 deletions(-) (limited to 'lib/ctzsi2.c') diff --git a/lib/ctzsi2.c b/lib/ctzsi2.c index 1e6c2fe18..30d34c862 100644 --- a/lib/ctzsi2.c +++ b/lib/ctzsi2.c @@ -1,54 +1,57 @@ -//===-- ctzsi2.c - Implement __ctzsi2 -------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements __ctzsi2 for the compiler_rt library. -// -//===----------------------------------------------------------------------===// +/* ===-- ctzsi2.c - Implement __ctzsi2 -------------------------------------=== + * + * The LLVM Compiler Infrastructure + * + * This file is distributed under the University of Illinois Open Source + * License. See LICENSE.TXT for details. + * + * ===----------------------------------------------------------------------=== + * + * This file implements __ctzsi2 for the compiler_rt library. + * + * ===----------------------------------------------------------------------=== + */ #include "int_lib.h" -// Returns: the number of trailing 0-bits +/* Returns: the number of trailing 0-bits */ -// Precondition: a != 0 +/* Precondition: a != 0 */ si_int __ctzsi2(si_int a) { su_int x = (su_int)a; - si_int t = ((x & 0x0000FFFF) == 0) << 4; // if (x has no small bits) t = 16 else 0 - x >>= t; // x = [0 - 0xFFFF] + higher garbage bits - su_int r = t; // r = [0, 16] - // return r + ctz(x) + si_int t = ((x & 0x0000FFFF) == 0) << 4; /* if (x has no small bits) t = 16 else 0 */ + x >>= t; /* x = [0 - 0xFFFF] + higher garbage bits */ + su_int r = t; /* r = [0, 16] */ + /* return r + ctz(x) */ t = ((x & 0x00FF) == 0) << 3; - x >>= t; // x = [0 - 0xFF] + higher garbage bits - r += t; // r = [0, 8, 16, 24] - // return r + ctz(x) + x >>= t; /* x = [0 - 0xFF] + higher garbage bits */ + r += t; /* r = [0, 8, 16, 24] */ + /* return r + ctz(x) */ t = ((x & 0x0F) == 0) << 2; - x >>= t; // x = [0 - 0xF] + higher garbage bits - r += t; // r = [0, 4, 8, 12, 16, 20, 24, 28] - // return r + ctz(x) + x >>= t; /* x = [0 - 0xF] + higher garbage bits */ + r += t; /* r = [0, 4, 8, 12, 16, 20, 24, 28] */ + /* return r + ctz(x) */ t = ((x & 0x3) == 0) << 1; x >>= t; - x &= 3; // x = [0 - 3] - r += t; // r = [0 - 30] and is even - // return r + ctz(x) -// The branch-less return statement below is equivalent -// to the following switch statement: -// switch (x) -// { -// case 0: -// return r + 2; -// case 2: -// return r + 1; -// case 1: -// case 3: -// return r; -// } + x &= 3; /* x = [0 - 3] */ + r += t; /* r = [0 - 30] and is even */ + /* return r + ctz(x) */ + +/* The branch-less return statement below is equivalent + * to the following switch statement: + * switch (x) + * { + * case 0: + * return r + 2; + * case 2: + * return r + 1; + * case 1: + * case 3: + * return r; + * } + */ return r + ((2 - (x >> 1)) & -((x & 1) == 0)); } -- cgit v1.2.3