From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16865 invoked by alias); 8 Feb 2007 14:03:22 -0000 Received: (qmail 16855 invoked by uid 22791); 8 Feb 2007 14:03:21 -0000 X-Spam-Check-By: sourceware.org Received: from mailfe11.swip.net (HELO swip.net) (212.247.155.65) by sourceware.org (qpsmtpd/0.31) with ESMTP; Thu, 08 Feb 2007 14:03:14 +0000 X-Cloudmark-Score: 0.000000 [] Received: from [193.217.102.48] (account mc467741@c2i.net HELO [10.0.0.249]) by mailfe11.swip.net (CommuniGate Pro SMTP 5.0.12) with ESMTPA id 237428833 for gcc-bugs@gcc.gnu.org; Thu, 08 Feb 2007 15:03:11 +0100 From: Hans Petter Selasky To: gcc-bugs@gcc.gnu.org Subject: GCC has problems with 64-bit multiplication Date: Thu, 08 Feb 2007 14:03:00 -0000 User-Agent: KMail/1.9.5 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200702081502.51044.hselasky@c2i.net> Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2007-02/txt/msg00928.txt.bz2 Test program: #include #include int main() { int32_t a = 0x40000000; int16_t b = 0x4000; int64_t c = a * b; printf("0x%016llx\n", c); return 0; } %cc test.c %./a.out 0x0000000000000000 %gcc --version gcc (GCC) 3.4.6 [FreeBSD] 20060305 Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Generated assembly code: 8048514: c7 45 fc 00 00 00 40 movl $0x40000000,0xfffffffc(%ebp) 804851b: 66 c7 45 fa 00 40 movw $0x4000,0xfffffffa(%ebp) 8048521: 0f bf 45 fa movswl 0xfffffffa(%ebp),%eax 8048525: 0f af 45 fc imul 0xfffffffc(%ebp),%eax XXX this instruction is probably the bug: 8048529: 99 cltd 804852a: 89 45 f0 mov %eax,0xfffffff0(%ebp) 804852d: 89 55 f4 mov %edx,0xfffffff4(%ebp) 8048530: 83 ec 04 sub $0x4,%esp 8048533: ff 75 f4 pushl 0xfffffff4(%ebp) 8048536: ff 75 f0 pushl 0xfffffff0(%ebp) 8048539: 68 cb 85 04 08 push $0x80485cb 804853e: e8 49 fe ff ff call 804838c <_init+0x24> 8048543: 83 c4 10 add $0x10,%esp --HPS