Ok thanks.
I took out the code for cloning frames that are at angle 0 and 360. Only does 1 check now for the 180deg -as this throws the image off slightly for some reason - and gives a speed wobble to the spinner, so instead i do the flip image. I slowed down the far right spinner to see if you can see all frames drawn.
I ended up using fstp st(0) to free the fpu from the loaded fAngle now instead. Hopefully that is enough, or maybe the ffree st(0) would be more appropriate here. I spotted an issue in MUISpinnerAddImage where I had commented out the initial store of the angle to begin with (if 0, or 360 for reversed animation) - it was just loading a value into the fpu and not storing it.
So this is the 180 deg fpu code check now:
finit ; init fpu
fld fAngle
fcom FP4(180.0) ; compare ST(0) with the value of the real4_var variable: 180.0
fstsw ax ; copy the Status Word containing the result to AX
fwait ; insure the previous instruction is completed
sahf ; transfer the condition codes to the CPU's flag register
fstp st(0)
;ffree st(0)
jz angle_is_180
jmp other_angle
angle_is_180:
;Invoke GdipDrawImageRectRectI, pGraphicsBuffer, hImage, 0, 0, dwImageWidth, dwImageHeight, 0, 0, dwImageWidth, dwImageHeight, UnitPixel, NULL, NULL, NULL
Invoke GdipDrawImage, pGraphicsBuffer, hImage, 0, 0
Invoke GdipImageRotateFlip, pBitmap, Rotate180FlipNone
jmp tidyup
other_angle:
All other fpu instructions after that load and store into a variable. Let me know if there is any noticeable frames missing still - the 180deg frame for example.