2008-01-08 Jeff Johnston <jjohnstn@redhat.com>
* libc/machine/m68k/memcpy.S: Remove % from register references
        as this is already handled by m68kasm.h.
        * libc/machine/m68k/memset.S: Ditto.
			
			
This commit is contained in:
		| @@ -1,3 +1,9 @@ | ||||
| 2008-01-08  Jeff Johnston  <jjohnstn@redhat.com> | ||||
|  | ||||
| 	* libc/machine/m68k/memcpy.S: Remove % from register references | ||||
| 	as this is already handled by m68kasm.h. | ||||
| 	* libc/machine/m68k/memset.S: Ditto. | ||||
|  | ||||
| 2008-01-07  Jeff Johnston  <jjohnstn@redhat.com> | ||||
|  | ||||
| 	* libc/machine/m68k/m68kasm.h: New file. | ||||
|   | ||||
| @@ -34,63 +34,63 @@ | ||||
|  */ | ||||
|  | ||||
| SYM(memcpy): | ||||
| 	move.l	4(%sp),%a0	| dest ptr | ||||
| 	move.l	8(%sp),%a1	| src ptr | ||||
| 	move.l	12(%sp),%d1	| len | ||||
| 	cmp.l	#8,%d1		| if fewer than 8 bytes to transfer, | ||||
| 	move.l	4(sp),a0	| dest ptr | ||||
| 	move.l	8(sp),a1	| src ptr | ||||
| 	move.l	12(sp),d1	| len | ||||
| 	cmp.l	#8,d1		| if fewer than 8 bytes to transfer, | ||||
| 	blo	.Lresidue	| do not optimise | ||||
|  | ||||
| 	/* align dest */ | ||||
| 	move.l	%a0,%d0		| copy of dest | ||||
| 	neg.l	%d0 | ||||
| 	and.l	#3,%d0		| look for the lower two only | ||||
| 	move.l	a0,d0		| copy of dest | ||||
| 	neg.l	d0 | ||||
| 	and.l	#3,d0		| look for the lower two only | ||||
| 	beq	2f		| is aligned? | ||||
| 	sub.l	%d0,%d1 | ||||
| 	lsr.l	#1,%d0		| word align needed? | ||||
| 	sub.l	d0,d1 | ||||
| 	lsr.l	#1,d0		| word align needed? | ||||
| 	bcc	1f | ||||
| 	move.b	(%a1)+,(%a0)+ | ||||
| 	move.b	(a1)+,(a0)+ | ||||
| 1: | ||||
| 	lsr.l	#1,%d0		| long align needed? | ||||
| 	lsr.l	#1,d0		| long align needed? | ||||
| 	bcc	2f | ||||
| 	move.w	(%a1)+,(%a0)+ | ||||
| 	move.w	(a1)+,(a0)+ | ||||
| 2: | ||||
|  | ||||
| 	/* long word transfers */ | ||||
| 	move.l	%d1,%d0 | ||||
| 	and.l	#3,%d1		| byte residue | ||||
| 	lsr.l	#3,%d0 | ||||
| 	move.l	d1,d0 | ||||
| 	and.l	#3,d1		| byte residue | ||||
| 	lsr.l	#3,d0 | ||||
| 	bcc	1f		| carry set for 4-byte residue | ||||
| 	move.l	(%a1)+,(%a0)+ | ||||
| 	move.l	(a1)+,(a0)+ | ||||
| 1: | ||||
| 	lsr.l	#1,%d0		| number of 16-byte transfers | ||||
| 	lsr.l	#1,d0		| number of 16-byte transfers | ||||
| 	bcc	.Lcopy 		| carry set for 8-byte residue | ||||
| 	bra	.Lcopy8 | ||||
|  | ||||
| 1: | ||||
| 	move.l	(%a1)+,(%a0)+ | ||||
| 	move.l	(%a1)+,(%a0)+ | ||||
| 	move.l	(a1)+,(a0)+ | ||||
| 	move.l	(a1)+,(a0)+ | ||||
| .Lcopy8: | ||||
| 	move.l	(%a1)+,(%a0)+ | ||||
| 	move.l	(%a1)+,(%a0)+ | ||||
| 	move.l	(a1)+,(a0)+ | ||||
| 	move.l	(a1)+,(a0)+ | ||||
| .Lcopy: | ||||
| #if !defined (__mcoldfire__) | ||||
| 	dbra	%d0,1b | ||||
| 	sub.l	#0x10000,%d0 | ||||
| 	dbra	d0,1b | ||||
| 	sub.l	#0x10000,d0 | ||||
| #else | ||||
| 	subq.l	#1,%d0 | ||||
| 	subq.l	#1,d0 | ||||
| #endif | ||||
| 	bpl	1b | ||||
| 	bra	.Lresidue | ||||
|  | ||||
| 1: | ||||
| 	move.b	(%a1)+,(%a0)+	| move residue bytes | ||||
| 	move.b	(a1)+,(a0)+	| move residue bytes | ||||
|  | ||||
| .Lresidue: | ||||
| #if !defined (__mcoldfire__) | ||||
| 	dbra	%d1,1b		| loop until done | ||||
| 	dbra	d1,1b		| loop until done | ||||
| #else | ||||
| 	subq.l	#1,%d1 | ||||
| 	subq.l	#1,d1 | ||||
| 	bpl	1b | ||||
| #endif | ||||
| 	move.l	4(%sp),%d0	| return value | ||||
| 	move.l	4(sp),d0	| return value | ||||
| 	rts | ||||
|   | ||||
| @@ -41,60 +41,60 @@ | ||||
| |	VG, April 2007 | ||||
| | | ||||
| SYM(memset): | ||||
| 	move.l	4(%sp),%a0	| dest ptr | ||||
| 	move.l	8(%sp),%d0	| value | ||||
| 	move.l	12(%sp),%d1	| len | ||||
| 	cmp.l	#16,%d1 | ||||
| 	move.l	4(sp),a0	| dest ptr | ||||
| 	move.l	8(sp),d0	| value | ||||
| 	move.l	12(sp),d1	| len | ||||
| 	cmp.l	#16,d1 | ||||
| 	blo	.Lbset		| below, byte fills | ||||
| 	| | ||||
| 	move.l	%d2,-(%sp)	| need a register | ||||
| 	move.b	%d0,%d2		| distribute low byte to all byte in word | ||||
| 	lsl.l	#8,%d0 | ||||
| 	move.b	%d2,%d0 | ||||
| 	move.w	%d0,%d2 | ||||
| 	swap	%d0		| rotate 16 | ||||
| 	move.w	%d2,%d0 | ||||
| 	move.l	d2,-(sp)	| need a register | ||||
| 	move.b	d0,d2		| distribute low byte to all byte in word | ||||
| 	lsl.l	#8,d0 | ||||
| 	move.b	d2,d0 | ||||
| 	move.w	d0,d2 | ||||
| 	swap	d0		| rotate 16 | ||||
| 	move.w	d2,d0 | ||||
| 	| | ||||
| 	move.l	%a0,%d2		| copy of src | ||||
| 	neg.l	%d2		| 1 2 3 ==> 3 2 1 | ||||
| 	and.l	#3,%d2 | ||||
| 	move.l	a0,d2		| copy of src | ||||
| 	neg.l	d2		| 1 2 3 ==> 3 2 1 | ||||
| 	and.l	#3,d2 | ||||
| 	beq	2f		| is aligned | ||||
| 	| | ||||
| 	sub.l	%d2,%d1		| fix length | ||||
| 	lsr.l	#1,%d2		| word align needed? | ||||
| 	sub.l	d2,d1		| fix length | ||||
| 	lsr.l	#1,d2		| word align needed? | ||||
| 	bcc	1f | ||||
| 	move.b	%d0,(%a0)+	| fill byte | ||||
| 	move.b	d0,(a0)+	| fill byte | ||||
| 1: | ||||
| 	lsr.l	#1,%d2		| long align needed? | ||||
| 	lsr.l	#1,d2		| long align needed? | ||||
| 	bcc	2f | ||||
| 	move.w	%d0,(%a0)+	| fill word | ||||
| 	move.w	d0,(a0)+	| fill word | ||||
| 2: | ||||
| 	move.l	%d1,%d2		| number of long transfers (at least 3) | ||||
| 	lsr.l	#2,%d2 | ||||
| 	subq.l	#1,%d2 | ||||
| 	move.l	d1,d2		| number of long transfers (at least 3) | ||||
| 	lsr.l	#2,d2 | ||||
| 	subq.l	#1,d2 | ||||
|  | ||||
| 1: | ||||
| 	move.l	%d0,(%a0)+	| fill long words | ||||
| 	move.l	d0,(a0)+	| fill long words | ||||
| .Llset: | ||||
| #if !defined (__mcoldfire__) | ||||
| 	dbra	%d2,1b		| loop until done | ||||
| 	sub.l	#0x10000,%d2 | ||||
| 	dbra	d2,1b		| loop until done | ||||
| 	sub.l	#0x10000,d2 | ||||
| #else | ||||
| 	subq.l	#1,%d2 | ||||
| 	subq.l	#1,d2 | ||||
| #endif | ||||
| 	bpl	1b | ||||
| 	and.l	#3,%d1		| residue byte transfers, fixed | ||||
| 	move.l	(%sp)+,%d2	| restore d2 | ||||
| 	and.l	#3,d1		| residue byte transfers, fixed | ||||
| 	move.l	(sp)+,d2	| restore d2 | ||||
| 	bra	.Lbset | ||||
|  | ||||
| 1: | ||||
| 	move.b	%d0,(%a0)+	| fill residue bytes | ||||
| 	move.b	d0,(a0)+	| fill residue bytes | ||||
| .Lbset: | ||||
| #if !defined (__mcoldfire__) | ||||
| 	dbra	%d1,1b		| loop until done | ||||
| 	dbra	d1,1b		| loop until done | ||||
| #else | ||||
| 	subq.l	#1,%d1 | ||||
| 	subq.l	#1,d1 | ||||
| 	bpl	1b | ||||
| #endif | ||||
| 	move.l	4(%sp),%d0	| return value | ||||
| 	move.l	4(sp),d0	| return value | ||||
| 	rts | ||||
|   | ||||
		Reference in New Issue
	
	Block a user