The additional registers allow the compiler to better indicate [lack of] data dependencies to the CPU, allow it to better keep temporaries in efficient storage, etc.

The additional registers also allow sufficient room for a more efficient register-based function calling convention, similar to PowerPC, rather than the stack-based one i386 is forced to use.

Instructions which use the new registers are longer than instructions which don't, so there is a slight offset to the performance benefits they provide (more of an offset on Intel than on AMD), but it's still overall a substantial improvement.

Its interesting to see how the universal format adds flexibility. Makes one wonder -- an iPhone or iPod would just be another architecture flag. Its like the inverse of java except compile once and run native everywhere.

The HID stuff has a device list. Just happens the keyboard and mouse is in the list too -- which is what most game developers are really after. So, I just read that and call my c++ call back. I suppose that is similar to reading a gamepad. Looking the HID stuff over, it appears the only carbon thing there is a timer for a callback. ( I happen to be using carbon at the moment ) There is a carbon timer thats used to poll the devices but I ditch that and replace it with a pthread.

To build the OpenGL context I'm using cgl. Its fullscreen I'm after. If I recall, cocoa is using cgl too under the hood too. I recall agl is tied up in Carbon and that was to be avoided.

I use c++ but I get rid of all carbon / cocoa stuff and build for 64 bits.