FIFO stands for First In First Out. This is a term usually used to describe data structures like queues: the first elements you pushed to the queue will be the first elements to be popped, and order is conserved (the opposite of FIFO is LIFO, like a stack).
What we call the FIFO in GC emulation is the memory zone used for CPU->GPU commands exchange. The CPU stores commands there and the GPU will read them back later. When the GPU is done reading commands, it sends an interrupt to the CPU. It's a central point of GC/Wii emulation, and removing it would break everything (it wouldn't even make sense).
It is difficult to emulate because it is the main synchronization point between two fast, asynchronous command processors: the CPU on one side, the GPU on the other side. A lot of commands go through there so it also needs to be very fast. Messing up synchronization is very easy, especially because sending interrupts from the GPU thread to the CPU thread is a difficult problem to solve in emulation (the only accurate solution to this problem is to check for interrupts before executing each CPU instruction, but this is slow).
What we call the FIFO in GC emulation is the memory zone used for CPU->GPU commands exchange. The CPU stores commands there and the GPU will read them back later. When the GPU is done reading commands, it sends an interrupt to the CPU. It's a central point of GC/Wii emulation, and removing it would break everything (it wouldn't even make sense).
It is difficult to emulate because it is the main synchronization point between two fast, asynchronous command processors: the CPU on one side, the GPU on the other side. A lot of commands go through there so it also needs to be very fast. Messing up synchronization is very easy, especially because sending interrupts from the GPU thread to the CPU thread is a difficult problem to solve in emulation (the only accurate solution to this problem is to check for interrupts before executing each CPU instruction, but this is slow).
