MacroAssembler::zero_words() calls block_zero(). Unfortunately block_zero() is fixed to use only r10 and r11 as its arguments because it calls out to zero_longs, and the call also trashes LR. zero_words() should be fixed so that it saves all registers that are not passed as arguments and accepts arbitrary arguments.
At the present time this is not a bug because zero_words() is only called from C2, so LR is not live and r10 and r11 are always used. However, if this was fixed zero_words() could be used in other code.
At the present time this is not a bug because zero_words() is only called from C2, so LR is not live and r10 and r11 are always used. However, if this was fixed zero_words() could be used in other code.