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

    Message

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

    From: cvs at opencores.org<cvs@o...>
    Date: Wed Oct 26 16:32:21 CEST 2005
    Subject: [cvs-checkins] MODIFIED: or1k ...
    Top
    Date: 00/05/10 26:16:32

    Modified: or1k/or1ksim/peripheral memory.c
    Log:
    Charles Qi

    Fix memory handling on big endian machines




    Revision Changes Path
    1.4 or1k/or1ksim/peripheral/memory.c

    http://www.opencores.org/cvsweb.shtml/or1k/or1ksim/peripheral/memory.c.diff?r1=1.3&r2=1.4

    (In the diff below, changes in quantity of whitespace are not shown.)

    Index: memory.c
    ===================================================================
    RCS file: /cvsroot/nogj/or1k/or1ksim/peripheral/memory.c,v
    retrieving revision 1.3
    retrieving revision 1.4
    diff -u -b -r1.3 -r1.4
    --- memory.c 5 Sep 2005 08:48:01 -0000 1.3
    +++ memory.c 26 Oct 2005 14:32:21 -0000 1.4
    @@ -63,12 +63,20 @@

    uint16_t simmem_read16(oraddr_t addr, void *dat)
    {
    +#ifdef WORDS_BIGENDIAN
    + return *(uint16_t *)(dat + addr);
    +#else
    return *(uint16_t *)(dat + (addr ^ 2));
    +#endif
    }

    uint8_t simmem_read8(oraddr_t addr, void *dat)
    {
    +#ifdef WORDS_BIGENDIAN
    + return *(uint8_t *)(dat + addr);
    +#else
    return *(uint8_t *)(dat + ((addr & ~ADDR_C(3)) | (3 - (addr & 3))));
    +#endif
    }

    void simmem_write32(oraddr_t addr, uint32_t value, void *dat)
    @@ -78,12 +86,20 @@

    void simmem_write16(oraddr_t addr, uint16_t value, void *dat)
    {
    +#ifdef WORDS_BIGENDIAN
    + *(uint16_t *)(dat + addr) = value;
    +#else
    *(uint16_t *)(dat + (addr ^ 2)) = value;
    +#endif
    }

    void simmem_write8(oraddr_t addr, uint8_t value, void *dat)
    {
    +#ifdef WORDS_BIGENDIAN
    + *(uint8_t *)(dat + addr) = value;
    +#else
    *(uint8_t *)(dat + ((addr & ~ADDR_C(3)) | (3 - (addr & 3)))) = value;
    +#endif
    }

    uint32_t simmem_read_zero32(oraddr_t addr, void *dat)



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