This program is written for AT91SAM9260.
It is on compiled with yagarto with GCC 4.5.0.
on win xp sp2.

The prog reads 10 dwords from
address 0 and sends them through uart.

Adress 0 (on '9260) can either be ROM or SRAM,
depending on REMAP settings.

The prog first does a REMAP, then reads 10 dwords.

However, generated code first reads ptr[0],
does REMAP, then reads ptr[1-9], which means
that the first dword will be read from ROM,
and all others from SRAM.

"MATRIX_MRCR" is volatile, so it should be
executed first, IMHO.

It can be fixed by:

1. add volatile to ptr definition (line 31).

2. instead of linking with libarm.a, 
   change lines 7 (#if 1) and 40 (SendDword2).
   This method, however, produces less readable LSS file.

I've included two LSS files: original.lss and method2.lss
Original.lss is generated with the "as is" src.c.
Methot2.lss  is generated after changing lines 7 & 40.


-- 
           Summary: Out-of-order execution
           Product: gcc
           Version: 4.5.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: aleksazr at gmail dot com


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45127

Reply via email to