A DO-loop that has a FIXED DECIMAL or PICTURE control variable will perform much worse than a loop that has a FIXED BINARY control variable.
You can get significantly better code if you change the declarations for your loop control variables from FIXED DEC to FIXED BIN(31).