|
Message
From: cvs at opencores.org<cvs@o...>
Date: Wed Oct 26 16:32:21 CEST 2005
Subject: [cvs-checkins] MODIFIED: or1k ...
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)
|
 |