* libc/machine/sh/memset.S: Fix problem with alloco region
exceeding destination region for length >= 88 bytes, start & 0x16 == 0, end & 0x1f == 18.
This commit is contained in:
		| @@ -1,3 +1,9 @@ | |||||||
|  | Thu Apr  3 14:01:16 2003  J"orn Rennecke <joern.rennecke@superh.com> | ||||||
|  |  | ||||||
|  | 	* libc/machine/sh/memset.S: Fix problem with alloco region | ||||||
|  | 	exceeding destination region for length >= 88 bytes, start | ||||||
|  | 	& 0x16 == 0, end & 0x1f == 18. | ||||||
|  |  | ||||||
| 2001-04-03  Corinna Vinschen  <corinna@vinschen.de> | 2001-04-03  Corinna Vinschen  <corinna@vinschen.de> | ||||||
|  |  | ||||||
| 	* libc/string/wcscoll.c: Fix comment. | 	* libc/string/wcscoll.c: Fix comment. | ||||||
|   | |||||||
| @@ -12,14 +12,16 @@ | |||||||
| ENTRY(memset) | ENTRY(memset) | ||||||
| #if __SHMEDIA__ | #if __SHMEDIA__ | ||||||
| 	pta/l multiquad, tr0 | 	pta/l multiquad, tr0 | ||||||
| 	andi r2, 7, r22 |  | ||||||
| 	ptabs r18, tr2 |  | ||||||
| 	mshflo.b r3,r3,r3 | 	mshflo.b r3,r3,r3 | ||||||
| 	add r4, r22, r23 | 	ptabs r18, tr2 | ||||||
| 	mperm.w r3, r63, r3	// Fill pattern now in every byte of r3 | 	mperm.w r3, r63, r3	// Fill pattern now in every byte of r3 | ||||||
|  |  | ||||||
| 	movi 8, r9 | 	andi r2, -8, r25 | ||||||
| 	bgtu/u r23, r9, tr0 // multiquad | 	add r2, r4, r5 | ||||||
|  | 	addi r5, -1, r20    // calculate end address. | ||||||
|  | 	andi r20, -8, r20 | ||||||
|  | 	cmveq r4, r25, r20 | ||||||
|  | 	bne/u r25, r20, tr0 // multiquad | ||||||
|  |  | ||||||
| 	ldlo.q r2, 0, r7 | 	ldlo.q r2, 0, r7 | ||||||
| 	shlli r4, 2, r4 | 	shlli r4, 2, r4 | ||||||
| @@ -33,18 +35,16 @@ ENTRY(memset) | |||||||
| multiquad: | multiquad: | ||||||
| 	pta/l lastquad, tr0 | 	pta/l lastquad, tr0 | ||||||
| 	stlo.q r2, 0, r3 | 	stlo.q r2, 0, r3 | ||||||
| 	shlri r23, 3, r24 | 	sub r20, r25, r24 | ||||||
| 	add r2, r4, r5 | 	movi 64, r9 | ||||||
| 	beqi/u r24, 1, tr0 // lastquad | 	beqi/u r24, 8, tr0 // lastquad | ||||||
| 	pta/l loop, tr1 | 	pta/l loop, tr1 | ||||||
| 	sub r2, r22, r25 |  | ||||||
| 	andi r5, -8, r20   // calculate end address and |  | ||||||
| 	addi r20, -7*8, r8 // loop end address; This might overflow, so we need | 	addi r20, -7*8, r8 // loop end address; This might overflow, so we need | ||||||
| 	                   // to use a different test before we start the loop | 	                   // to use a different test before we start the loop | ||||||
| 	bge/u r24, r9, tr1 // loop | 	bgeu/u r24, r9, tr1// loop | ||||||
| 	st.q r25, 8, r3 | 	st.q r25, 8, r3 | ||||||
|  | 	shlri r24, 4, r24 | ||||||
| 	st.q r20, -8, r3 | 	st.q r20, -8, r3 | ||||||
| 	shlri r24, 1, r24 |  | ||||||
| 	beqi/u r24, 1, tr0 // lastquad | 	beqi/u r24, 1, tr0 // lastquad | ||||||
| 	st.q r25, 16, r3 | 	st.q r25, 16, r3 | ||||||
| 	st.q r20, -16, r3 | 	st.q r20, -16, r3 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user