LOGIN   :::   RECOVER PASS   :::   GET ACCOUNT    
Browse
  • Projects
  • Code (CVS)
  • Forums
  • News
  • Articles
  • Polls
  •  
    OpenCores
  • FAQ
  • CVS HowTo
  • Mission
  • Media
  • Tools
  • Advertise
  • Mirrors
  • Logos
  • Contact us
  • Find Resources
  • Job Opportunity
  •  
    Tools
  • Search
      
  • Download Cores (CVSGet)
  •  
    More
  • Wishbone
  • Perlilog
  • EDA tools
  • OpenTech CD
  •  
    Navigation: All forums > Openrisc > Message List > Message Post

    Message

    Reply | Reply all
    Date Prev | Date Next | Thread Prev | Thread Next Date Index | Thread Index

    From: "Robert Cragie" <rcc@j...>
    Date: Wed, 12 Nov 2003 08:47:46 -0000
    Subject: [openrisc] More information on optimisation problem
    Top

    I have been investigating the problems I have been having with compiler
    optimisation and found this specific one. It does seem to be concerned with
    conditional branches, which I know has been mentioned before. Is anybody
    actively maintaining the toolchain and is this likely to be fixed in the
    near future?
    
    I am using GCC 3.2.3 and binutils from OpenCores CVS site.
    
    Comments are places after the instructions they refer to.
    
    Optimised (-O)
    --------------
    
        13d0:   1a 40 ff ff     l.movhi r18,0xffff
        13d4:   aa 52 00 04     l.ori r18,r18,0x4
        # 0xffff0004 into r18
    
        13d8:   85 d2 00 00     l.lwz r14,0x0(r18)
        # *(r18 == 0xffff0004) into r14
    
        13dc:   18 e0 00 08     l.movhi r7,0x8
        13e0:   a8 e7 00 00     l.ori r7,r7,0x0
        # 0x00080000 into r7. Note wasteful second opcode is a nop
    
        13e4:   e0 8e 38 03     l.and r4,r14,r7
        # r4 = r14 & r7
    
        13e8:   9c 60 00 00     l.addi r3,r0,0x0
        # **** This seems to be a bizarre opcode to use.
        # **** What's supposed to be in r3? This is adding 0 to whatever
        # **** happens to be in r3, which is indeterminate in this scope
    
        13ec:   e4 04 18 00     l.sfeq r4,r3
        # Comparison of r4 and r3 - but r3 contains rubbish
    
        13f0:   13 ff ff fa     l.bf 13d8 <_cyg_start+0x3c>
        13f4:   15 00 00 00     l.nop 0x0
        # Branch
    
    Non-optimised
    -------------
    
        1420:   18 60 ff ff     l.movhi r3,0xffff
        1424:   a8 63 00 04     l.ori r3,r3,0x4
        # 0xffff0004 into r3
    
        1428:   84 63 00 00     l.lwz r3,0x0(r3)
        # *(r3 == 0xffff0004) into r3
    
        142c:   d7 e2 1f e8     l.sw 0xffffffe8(r2),r3
        # Store r3 on stack
    
        1430:   84 62 ff e8     l.lwz r3,0xffffffe8(r2)
        # Retrieve from stack into r3
    
        1434:   18 a0 00 08     l.movhi r5,0x8
        1438:   a8 a5 00 00     l.ori r5,r5,0x0
        # 0x00080000 into r7. Note wasteful second opcode is a nop
    
        143c:   e0 83 28 03     l.and r4,r3,r5
        # r4 = r3 & r5
    
        1440:   9c 60 00 00     l.addi r3,r0,0x0
        # **** This seems to be a bizarre opcode to use.
        # **** This works in this case as it's adding 0 to r3, which
        # **** happens to be correct but only incidentally, I would say
    
        1444:   e4 04 18 00     l.sfeq r4,r3
        # Comparison of r4 and r3 - r3 is OK here
    
        1448:   13 ff ff f6     l.bf 1420 <_cyg_start+0x44>
        144c:   15 00 00 00     l.nop 0x0
        # Branch
    
    Robert Cragie, Design Engineer
    _______________________________________________________________
    Jennic Ltd, Furnival Street, Sheffield, S1 4QT,  UK
    http://www.jennic.com  Tel: +44 (0) 114 281 2655
    _______________________________________________________________
    
    
    
    

    Follow upAuthor
    RE: [openrisc] More information on optimisation problemRobert Cragie
    [openrisc] Developmnet BoardBen A Abderazek

     
    Copyright (c) 1999 OPENCORES.ORG. All rights reserved.