From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19074 invoked by alias); 9 Nov 2010 13:56:19 -0000 Received: (qmail 19065 invoked by uid 22791); 9 Nov 2010 13:56:17 -0000 X-SWARE-Spam-Status: No, hits=-2.7 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00,TW_BF,TW_DD,TW_DQ,TW_NL X-Spam-Check-By: sourceware.org Received: from localhost (HELO gcc.gnu.org) (127.0.0.1) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 09 Nov 2010 13:56:11 +0000 From: "Anders.Montonen at iki dot fi" To: gcc-bugs@gcc.gnu.org Subject: [Bug target/46393] New: m68k code size regression X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: target X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: Anders.Montonen at iki dot fi X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: Message-ID: X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated Content-Type: text/plain; charset="UTF-8" MIME-Version: 1.0 Date: Tue, 09 Nov 2010 13:56:00 -0000 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: 2010-11/txt/msg01106.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46393 Summary: m68k code size regression Product: gcc Version: 4.5.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target AssignedTo: unassigned@gcc.gnu.org ReportedBy: Anders.Montonen@iki.fi The following code snippet compiles to 112 bytes using GCC 4.4.0 and 154 bytes using GCC 4.5.1. Host is OS X 10.6, target is m68k-elf bare-metal toolchain using newlib. The code was compiled with -m68000 -Os -c. unpack.c: #include uint8_t ChannelMap[32]; typedef struct { uint8_t note; uint8_t instrument; uint8_t volume; uint8_t command; uint8_t info; } Channeldata_t; Channeldata_t RowBuffer[16]; uint8_t UnpackRow(const uint8_t *pRowData) { uint8_t count = 0, byte, channel, mappedchannel; Channeldata_t *pChannelData; while ((byte = *pRowData++) != 0) { ++count; channel = byte & 0x1f; mappedchannel = ChannelMap[channel]; pChannelData = &RowBuffer[mappedchannel]; if (byte & 0x20) { pChannelData->note = *pRowData++; pChannelData->instrument = *pRowData++; ++count; } if (byte & 0x40) { pChannelData->volume = *pRowData++; ++count; } if (byte & 0x80) { pChannelData->command = *pRowData++; pChannelData->info = *pRowData++; count += 2; } } return count; } GCC 4.4.0-produced code: 00000000 : 0: 4e56 0000 linkw %fp,#0 4: 48e7 3820 moveml %d2-%d4/%a2,%sp@- 8: 206e 0008 moveal %fp@(8),%a0 c: 4200 clrb %d0 e: 45f9 0000 0000 lea 0 ,%a2 14: 604e bras 64 16: 5288 addql #1,%a0 18: 5200 addqb #1,%d0 1a: 7400 moveq #0,%d2 1c: 1401 moveb %d1,%d2 1e: 761f moveq #31,%d3 20: c682 andl %d2,%d3 22: 1632 3800 moveb %a2@(0000000000000000,%d3:l),%d3 26: 0283 0000 00ff andil #255,%d3 2c: 2803 movel %d3,%d4 2e: d883 addl %d3,%d4 30: d884 addl %d4,%d4 32: 2244 moveal %d4,%a1 34: d3c3 addal %d3,%a1 36: d3fc 0000 0000 addal #0,%a1 3c: 0802 0005 btst #5,%d2 40: 6708 beqs 4a 42: 1298 moveb %a0@+,%a1@ 44: 1358 0001 moveb %a0@+,%a1@(1) 48: 5200 addqb #1,%d0 4a: 0802 0006 btst #6,%d2 4e: 6706 beqs 56 50: 1358 0002 moveb %a0@+,%a1@(2) 54: 5200 addqb #1,%d0 56: 4a01 tstb %d1 58: 6c0a bges 64 5a: 1358 0003 moveb %a0@+,%a1@(3) 5e: 1358 0004 moveb %a0@+,%a1@(4) 62: 5400 addqb #2,%d0 64: 1210 moveb %a0@,%d1 66: 66ae bnes 16 68: 4cdf 041c moveml %sp@+,%d2-%d4/%a2 6c: 4e5e unlk %fp 6e: 4e75 rts GCC 4.5.1-produced code: 00000000 : 0: 4e56 0000 linkw %fp,#0 4: 48e7 383c moveml %d2-%d4/%a2-%a5,%sp@- 8: 206e 0008 moveal %fp@(8),%a0 c: 4200 clrb %d0 e: 49f9 0000 0000 lea 0 ,%a4 14: 47f9 0000 0000 lea 0 ,%a3 1a: 45f9 0000 0000 lea 0 ,%a2 20: 606c bras 8e 22: 5288 addql #1,%a0 24: 5200 addqb #1,%d0 26: 721f moveq #31,%d1 28: c282 andl %d2,%d1 2a: 1234 1800 moveb %a4@(0000000000000000,%d1:l),%d1 2e: 0281 0000 00ff andil #255,%d1 34: 7600 moveq #0,%d3 36: 1602 moveb %d2,%d3 38: 0803 0005 btst #5,%d3 3c: 6714 beqs 52 3e: 2801 movel %d1,%d4 40: d881 addl %d1,%d4 42: d884 addl %d4,%d4 44: 2244 moveal %d4,%a1 46: d3c1 addal %d1,%a1 48: 1398 b800 moveb %a0@+,%a1@(0000000000000000,%a3:l) 4c: 1398 a800 moveb %a0@+,%a1@(0000000000000000,%a2:l) 50: 5200 addqb #1,%d0 52: 0803 0006 btst #6,%d3 56: 6714 beqs 6c 58: 2601 movel %d1,%d3 5a: d681 addl %d1,%d3 5c: d683 addl %d3,%d3 5e: 2243 moveal %d3,%a1 60: d3c1 addal %d1,%a1 62: d3fc 0000 0000 addal #0,%a1 68: 1298 moveb %a0@+,%a1@ 6a: 5200 addqb #1,%d0 6c: 4a02 tstb %d2 6e: 6c1e bges 8e 70: 2401 movel %d1,%d2 72: d481 addl %d1,%d2 74: d482 addl %d2,%d2 76: 2242 moveal %d2,%a1 78: d3c1 addal %d1,%a1 7a: 2a49 moveal %a1,%a5 7c: dbfc 0000 0000 addal #0,%a5 82: 1a98 moveb %a0@+,%a5@ 84: d3fc 0000 0000 addal #0,%a1 8a: 1298 moveb %a0@+,%a1@ 8c: 5400 addqb #2,%d0 8e: 1410 moveb %a0@,%d2 90: 6690 bnes 22 92: 4cdf 3c1c moveml %sp@+,%d2-%d4/%a2-%a5 96: 4e5e unlk %fp 98: 4e75 rts