I also use the CCS compiler, but I never use their built-in functions to access registers or configure registers. I use either in-line assembly, or else C statements that directly affect the registers in question. That way you don't have to wonder about how CCS implements their built-in I/O functions. However I found that the pure address definitions of special function registers was missing from the CCS header files, so I made my own auxiliary header file from the Microchip manual. Of course I need to make a different header file for each different PIC, but I like knowing exactly what is going on when I do simple register accesses without having to learn anything about the particulars of how CCS does things.