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: =?unknown-8bit?Q?Gy=F6rgy?= 'nog' Jeney<nog@s...>
    Date: Thu Mar 24 21:10:56 CET 2005
    Subject: [openrisc] [or1ksim #64] Dynamic recompiler
    Top
    Hi,

    This is the actual dynamic recompiler implementation. For those that have not
    been following too closely, this implements dynamic code generation which
    improves execution speed by a hughe margin.

    The good news is that now you won't get bored watching the weal spin (|/-) while
    linux is loading its ramdisk it goes so fast.

    For starters here are some benchmarks loading linux until the ramdisk has
    loaded. This is without my delay loop calibration `optimisation' hack:

    With the complex execution model (the `old' one):
    exit(00000000)
    @reset : cycles 0, insn #0
    @exit : cycles 186577411, insn #78693329
    diff : cycles 186577411, insn #78693329

    real 2m19.102s
    user 2m14.060s
    sys 0m3.420s

    With the recompiler:
    exit(00000000)
    @reset : cycles 0, insn #0
    @exit : cycles 186577411, insn #0
    diff : cycles 186577411, insn #0

    real 1m5.502s
    user 0m57.440s
    sys 0m6.800s

    The complex/simple models should continue to work as they did untill now. To
    use the recompiler instead of the complex execution model configure the
    simulator with `./configure --target=or32 --enable-execution=dynamic'.

    If you decide to give the recompiler a go note that you absolutly must disable
    the security-enhancing kernel features like exec-shield and PAX. I don't know
    about the others. The problem is that they execute protect everything except
    the .text section of the ELF file which works fine for most programs but since
    this is a dynamic code generator the code that ulimatly simulates the cpu ends
    up being dynamically allocated (ie. Doesn't reside in the .text section).

    There are still some limitations that need to be ironed out, but it is good
    enough to boot linux and run some of the basic utilities found in the initrd.
    The known limitations:
    1) There are numerous missed optimistaions. Check the FIXMEs in the code.
    2) Instruction cache emuation does not work as there is no instruction fetch on
    *any* executed instruction. The data caches work though.
    3) The overflow flag is not implemented.
    4) The carry flag is not implemented.
    5) The mac instructions don't work (Don't know why).
    6) Interactive mode (-i) doesn't work (also implies hitting CTRL-C).
    7) Some stuff I surely missed.

    ChangeLog:
    * Implement a dynamic recompiler to speed up the execution.

    nog.
    -------------- next part --------------
    A non-text attachment was scrubbed...
    Name: patch64.bz2
    Type: application/octet-stream
    Size: 35389 bytes
    Desc: not available
    Url : patch64-0001.obj

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