2
0
Эх сурвалжийг харах

* fillchar fixed; it's used now

florian 20 жил өмнө
parent
commit
6333a6a6b3
1 өөрчлөгдсөн 51 нэмэгдсэн , 52 устгасан
  1. 51 52
      rtl/arm/arm.inc

+ 51 - 52
rtl/arm/arm.inc

@@ -62,68 +62,67 @@ end ['R0'];
 {$define FPC_SYSTEM_HAS_SPTR}
 Function Sptr : pointer;assembler;{$ifdef SYSTEMINLINE}inline;{$endif}
 asm
-        mov    r0,sp
+  mov    r0,sp
 end ['R0'];
 
 
-{
 {$define FPC_SYSTEM_HAS_FILLCHAR}
-Procedure FillChar(var x;count:longint;value:byte);assembler;
-
-* void *memset (dstpp, c, len) */
-
+Procedure FillChar(var x;count:longint;value:byte);assembler;nostackframe;
 asm
-	mov	a4, a1
-	cmp	a2, $8		// at least 8 bytes to do?
-	blt	.Fillchar2
-	orr	a3, a3, a3, lsl $8
-	orr	a3, a3, a3, lsl $16
-.Fillchar0:
-	tst	a4, $3		// aligned yet?
-	strneb	a3, [a4], $1
-	subne	a2, a2, $1
-	bne	.Fillchar0
-	mov	ip, a3
-.Fillchar1:
-	cmp	a2, $8		// 8 bytes still to do?
-	blt	.Fillchar2
-	stmia	a4!, {a3, ip}
-	sub	a2, a2, $8
-	cmp	a2, $8		// 8 bytes still to do?
-	blt	.Fillchar2
-	stmia	a4!, {a3, ip}
-	sub	a2, a2, $8
-	cmp	a2, $8		// 8 bytes still to do?
-	blt	.Fillchar2
-	stmia	a4!, {a3, ip}
-	sub	a2, a2, $8
-	cmp	a2, $8		// 8 bytes still to do?
-	stmgeia	a4!, {a3, ip}
-	subge	a2, a2, $8
-	bge	.Fillchar1
-.Fillchar2:
-	movs	a2, a2		// anything left?
-	RETINSTR(moveq,pc,lr)	// nope
-	rsb	a2, a2, $7
-	add	pc, pc, a2, lsl $2
-	mov	r0, r0
-	strb	a3, [a4], $1
-	strb	a3, [a4], $1
-	strb	a3, [a4], $1
-	strb	a3, [a4], $1
-	strb	a3, [a4], $1
-	strb	a3, [a4], $1
-	strb	a3, [a4], $1
-	RETINSTR(mov,pc,lr)
+	// less than 0?
+	cmp r1,#0
+	movlt pc,lr
+	mov	r3,r0
+	cmp	r1,#8		// at least 8 bytes to do?
+	blt	.LFillchar2
+	orr r2,r2,r2,lsl #8
+	orr r2,r2,r2,lsl #16
+.LFillchar0:
+	tst	r3,#3		// aligned yet?
+	strneb r2,[r3],#1
+	subne	r1,r1,#1
+	bne	.LFillchar0
+	mov	ip,r2
+.LFillchar1:
+	cmp	r1,#8		// 8 bytes still to do?
+	blt	.LFillchar2
+	stmia	r3!,{r2,ip}
+	sub	r1,r1,#8
+	cmp	r1,#8		// 8 bytes still to do?
+	blt	.LFillchar2
+	stmia	r3!,{r2,ip}
+	sub	r1,r1,#8
+	cmp	r1,#8		// 8 bytes still to do?
+	blt	.LFillchar2
+	stmia	r3!,{r2,ip}
+	sub	r1,r1,#8
+	cmp	r1,#8		// 8 bytes still to do?
+	stmgeia	r3!,{r2,ip}
+	subge	r1,r1,#8
+	bge	.LFillchar1
+.LFillchar2:
+	movs r1,r1		// anything left?
+	moveq pc,lr
+	rsb	r1,r1,#7
+	add	pc,pc,r1,lsl #2
+	mov	r0,r0
+	strb r2,[r3],#1
+	strb r2,[r3],#1
+	strb r2,[r3],#1
+	strb r2,[r3],#1
+	strb r2,[r3],#1
+	strb r2,[r3],#1
+	strb r2,[r3],#1
+	mov pc,lr
 end;
 
-}
-
-
 
 {
   $Log$
-  Revision 1.8  2005-01-04 16:46:38  florian
+  Revision 1.9  2005-01-05 15:21:14  florian
+    * fillchar fixed; it's used now
+
+  Revision 1.8  2005/01/04 16:46:38  florian
     + correct setting of FPU exception mask
 
   Revision 1.7  2004/03/23 21:03:10  florian