.sect .text

! Stores a variable-sized block from the stack.
!
! On entry: r3 = size
! Stack: ( block address -- )
! Preserves r10 for .sar4

.define .sts4
.sts4:
	lwz r4, 0(sp)            ! r4 = address

	! Sizes 1 and 2 are handled specially.
	cmplwi r3, 1
	ble 1f
	cmplwi r3, 2
	ble 2f

	! Else the size must be a multiple of 4.
	srwi r5, r3, 2
	mtspr ctr, r5            ! ctr = number of words
	addi r4, r4, -4          ! adjust address to before block
4:	lwzu r5, 4(sp)
	stwu r5, 4(r4)
	bdnz 4b                  ! decrement ctr, jump if non-zero
	addi sp, sp, 4
	blr

1:	lwz r5, 4(sp)
	stb r5, 0(r4)
	b 3f
2:	lwz r5, 4(sp)
	sth r5, 0(r4)
3:	addi sp, sp, 8
	blr