From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44864) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YXt8D-0001Ks-Cy for qemu-devel@nongnu.org; Tue, 17 Mar 2015 11:10:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YXt88-0003e7-CZ for qemu-devel@nongnu.org; Tue, 17 Mar 2015 11:10:09 -0400 Received: from mx1.redhat.com ([209.132.183.28]:33861) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YXt88-0003dp-0p for qemu-devel@nongnu.org; Tue, 17 Mar 2015 11:10:04 -0400 From: Stefan Hajnoczi Date: Tue, 17 Mar 2015 15:09:44 +0000 Message-Id: <1426604987-11363-7-git-send-email-stefanha@redhat.com> In-Reply-To: <1426604987-11363-1-git-send-email-stefanha@redhat.com> References: <1426604987-11363-1-git-send-email-stefanha@redhat.com> Subject: [Qemu-devel] [PATCH v2 6/9] sd: convert sd_normal_command() ffs(3) call to ctz32() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Peter Maydell , Peter Crosthwaite , Markus Armbruster , Stefan Hajnoczi ffs() cannot be replaced with ctz32() when the argument might be zero, because ffs(0) returns 0 while ctz32(0) returns 32. The ffs(3) call in sd_normal_command() is a special case though. It can be converted to ctz32() + 1 because the argument is never zero: if (!(req.arg >> 8) || (req.arg >> (ctz32(req.arg & ~0xff) + 1))) { ~~~~~~~~~~~~~~~ ^--------------- req.arg cannot be zero Cc: Markus Armbruster Cc: Peter Crosthwaite Signed-off-by: Stefan Hajnoczi --- hw/sd/sd.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index f955265..8abf0c9 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -796,8 +796,9 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, sd->vhs = 0; /* No response if not exactly one VHS bit is set. */ - if (!(req.arg >> 8) || (req.arg >> ffs(req.arg & ~0xff))) + if (!(req.arg >> 8) || (req.arg >> (ctz32(req.arg & ~0xff) + 1))) { return sd->spi ? sd_r7 : sd_r0; + } /* Accept. */ sd->vhs = req.arg; -- 2.1.0