The first 2GB of address space is cached. The second 2GB is non-cached. These are not two seperate memory spaces or anything so there is a total of 2GB of address space (mirrored memory).
In other words address 0x00000000 (cachable) maps to address 0x8000000 (non-cachable)
" " " " " " 0x00000001 " " " " " " " " 0x8000001 (and so on .....)
So use the first 2GB for non-peripheral access (local memory), and the second 2GB for peripherals (use IORD and IOWR for this type of access so that you don't really need to know what's going on)