GLSL atomic float add for architectures with out atomic float add
I did not realize what atomicCompSwap did nor that it was common for this kind of usecase: https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/atomicCompSwap.xhtml .  This function handles the case of the loaded value for MEM being read incorrectly, this check is automatically handled via the function itself, and simplifies the code.  Using the original value of memory we can verify if our assumptions about what we should be adding to are correct:
#define atomicAddFloatX(MEM, INDATA)      \
{                                         \
    uint expected_mem = MEM;              \
    float input_mem = (uintBitsToFloat(MEM) + INDATA); \  //initially this is what we assume we want to put in here. 
    uint returned_mem = atomicCompSwap(MEM, expected_mem, floatBitsToUint(input_mem)); \ //if data returned is what we expected it to be, we're good, we added to it successfully
    while(returned_mem != expected_mem){ \ // if the data returned is something different, we know another thread completed its transaction, so we'll have to add to that instead. 
        expected_mem = returned_mem; \
        input_mem = (uintBitsToFloat(expected_mem) + INDATA) \
        returned_mem = atomicCompSwap(MEM, expected_mem, floatBitsToUint(input_mem)); \
    } \
}

Basically the code I wrote before was attempting to do something like this, but more confusing and a much less safe way.