#name ^.Object.SlideBack
#type &ffd

;takes a vector in R0,R1 and shortens it to length R2
;if length is less than R2, it is unchanged

STMFD R13!,{R2-R7,R14}
MOV R0,R0,ASR #12
MOV R1,R1,ASR #12
MOV R2,R2,ASR #12
MOV R3,R0
MOV R4,R1
MUL R0,R3,R0
MUL R1,R4,R1
ADD R0,R0,R1; R0 is the vector length^2
MOV R5,R2
MUL R2,R5,R2; R2 is the requested length^2
MOV R0,R0,ASR #8
MOV R5,#1<<11; change to 1<<15 for lengthening too.
MOV R6,#&0
.loop
ADD R7,R5,R6
MOV R1,R7
MUL R1,R7,R1
MOV R1,R1,ASR #16
MUL R1,R0,R1
CMP R1,R2
ORRLT R6,R6,R5
MOV R5,R5,LSR #1
CMP R5,#1<<8
BGE loop
.loop2
ADD R7,R5,R6
MOV R1,R7
MUL R1,R7,R1
;MOV R1,R1,ASR #16
MUL R1,R0,R1
CMP R1,R2,ASL #16
ORRLT R6,R6,R5
MOVS R5,R5,LSR #1
BGT loop2
MUL R0,R3,R6
MUL R1,R4,R6
LDMFD R13!,{R2-R7,PC}


