; Optimized 32-bit rotate right
; Input: D0.L = value, D1.W = shift count
; Output: D0.L = rotated value
; Uses: D2, D3, D4 (caller saved)
ROTR_ASM:
MOVEM.L D2-D4,-(SP) ; Save registers we use
MOVE.L D0,D2 ; Copy value to D2
MOVE.W D1,D3 ; Get shift count
ANDI.W #31,D3 ; Mask to 0-31
LSR.L D3,D0 ; Shift right by n
MOVEQ #32,D4 ; Load 32
SUB.W D3,D4 ; Calculate 32-n
LSL.L D4,D2 ; Shift left by (32-n)
OR.L D2,D0 ; Combine both parts
MOVEM.L (SP)+,D2-D4 ; Restore registers
RTS