Switch to the ARM unified assembly language as the clang integrated as only
supports it. Binutils supports it when the ".syntax unified" directive is set. Sponsored by: ABT Systems Ltd
This commit is contained in:
parent
575bd6d8aa
commit
a215cdfdb0
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=275256
@ -32,6 +32,8 @@
|
||||
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
.syntax unified
|
||||
|
||||
/*
|
||||
* ffs - find first set bit, this algorithm isolates the first set
|
||||
* bit, then multiplies the number by 0x0450fbaf which leaves the top
|
||||
@ -60,7 +62,7 @@ ENTRY(ffs)
|
||||
rsbne r0, r0, r0, lsl #16 /* r0 = X * 0x0450fbaf */
|
||||
|
||||
/* now lookup in table indexed on top 6 bits of r0 */
|
||||
ldrneb r0, [ r2, r0, lsr #26 ]
|
||||
ldrbne r0, [ r2, r0, lsr #26 ]
|
||||
|
||||
RET
|
||||
.text;
|
||||
|
@ -66,6 +66,8 @@
|
||||
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
.syntax unified
|
||||
|
||||
ENTRY(memcmp)
|
||||
mov ip, r0
|
||||
#if defined(_KERNEL) && !defined(_STANDALONE)
|
||||
@ -76,7 +78,7 @@ ENTRY(memcmp)
|
||||
|
||||
/* Are both addresses aligned the same way? */
|
||||
cmp r2, #0x00
|
||||
eornes r3, ip, r1
|
||||
eorsne r3, ip, r1
|
||||
RETeq /* len == 0, or same addresses! */
|
||||
tst r3, #0x03
|
||||
subne r2, r2, #0x01
|
||||
|
@ -31,6 +31,9 @@
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
.syntax unified
|
||||
|
||||
/*
|
||||
* This is one fun bit of code ...
|
||||
* Some easy listening music is suggested while trying to understand this
|
||||
@ -91,8 +94,8 @@ ENTRY(memcpy)
|
||||
bge .Lmemcpy_loop32
|
||||
|
||||
cmn r2, #0x10
|
||||
ldmgeia r1!, {r3, r4, r12, lr} /* blat a remaining 16 bytes */
|
||||
stmgeia r0!, {r3, r4, r12, lr}
|
||||
ldmiage r1!, {r3, r4, r12, lr} /* blat a remaining 16 bytes */
|
||||
stmiage r0!, {r3, r4, r12, lr}
|
||||
subge r2, r2, #0x10
|
||||
ldmia sp!, {r4} /* return r4 */
|
||||
|
||||
@ -101,9 +104,9 @@ ENTRY(memcpy)
|
||||
|
||||
/* blat 12 bytes at a time */
|
||||
.Lmemcpy_loop12:
|
||||
ldmgeia r1!, {r3, r12, lr}
|
||||
stmgeia r0!, {r3, r12, lr}
|
||||
subges r2, r2, #0x0c
|
||||
ldmiage r1!, {r3, r12, lr}
|
||||
stmiage r0!, {r3, r12, lr}
|
||||
subsge r2, r2, #0x0c
|
||||
bge .Lmemcpy_loop12
|
||||
|
||||
.Lmemcpy_l12:
|
||||
@ -113,26 +116,26 @@ ENTRY(memcpy)
|
||||
subs r2, r2, #4
|
||||
ldrlt r3, [r1], #4
|
||||
strlt r3, [r0], #4
|
||||
ldmgeia r1!, {r3, r12}
|
||||
stmgeia r0!, {r3, r12}
|
||||
ldmiage r1!, {r3, r12}
|
||||
stmiage r0!, {r3, r12}
|
||||
subge r2, r2, #4
|
||||
|
||||
.Lmemcpy_l4:
|
||||
/* less than 4 bytes to go */
|
||||
adds r2, r2, #4
|
||||
#ifdef __APCS_26_
|
||||
ldmeqia sp!, {r0, pc}^ /* done */
|
||||
ldmiaeq sp!, {r0, pc}^ /* done */
|
||||
#else
|
||||
ldmeqia sp!, {r0, pc} /* done */
|
||||
ldmiaeq sp!, {r0, pc} /* done */
|
||||
#endif
|
||||
/* copy the crud byte at a time */
|
||||
cmp r2, #2
|
||||
ldrb r3, [r1], #1
|
||||
strb r3, [r0], #1
|
||||
ldrgeb r3, [r1], #1
|
||||
strgeb r3, [r0], #1
|
||||
ldrgtb r3, [r1], #1
|
||||
strgtb r3, [r0], #1
|
||||
ldrbge r3, [r1], #1
|
||||
strbge r3, [r0], #1
|
||||
ldrbgt r3, [r1], #1
|
||||
strbgt r3, [r0], #1
|
||||
ldmia sp!, {r0, pc}
|
||||
|
||||
/* erg - unaligned destination */
|
||||
@ -143,10 +146,10 @@ ENTRY(memcpy)
|
||||
/* align destination with byte copies */
|
||||
ldrb r3, [r1], #1
|
||||
strb r3, [r0], #1
|
||||
ldrgeb r3, [r1], #1
|
||||
strgeb r3, [r0], #1
|
||||
ldrgtb r3, [r1], #1
|
||||
strgtb r3, [r0], #1
|
||||
ldrbge r3, [r1], #1
|
||||
strbge r3, [r0], #1
|
||||
ldrbgt r3, [r1], #1
|
||||
strbgt r3, [r0], #1
|
||||
subs r2, r2, r12
|
||||
blt .Lmemcpy_l4 /* less the 4 bytes */
|
||||
|
||||
|
@ -38,6 +38,8 @@
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
.syntax unified
|
||||
|
||||
/* LINTSTUB: Func: void *memcpy(void *dst, const void *src, size_t len) */
|
||||
ENTRY(memcpy)
|
||||
pld [r1]
|
||||
@ -52,12 +54,12 @@ ENTRY(memcpy)
|
||||
ldrb ip, [r1], #0x01
|
||||
sub r2, r2, #0x01
|
||||
strb ip, [r3], #0x01
|
||||
ldrleb ip, [r1], #0x01
|
||||
ldrble ip, [r1], #0x01
|
||||
suble r2, r2, #0x01
|
||||
strleb ip, [r3], #0x01
|
||||
ldrltb ip, [r1], #0x01
|
||||
strble ip, [r3], #0x01
|
||||
ldrblt ip, [r1], #0x01
|
||||
sublt r2, r2, #0x01
|
||||
strltb ip, [r3], #0x01
|
||||
strblt ip, [r3], #0x01
|
||||
|
||||
/* Destination buffer is now word aligned */
|
||||
.Lmemcpy_wordaligned:
|
||||
@ -134,7 +136,7 @@ ENTRY(memcpy)
|
||||
|
||||
.Lmemcpy_w_lessthan128:
|
||||
adds r2, r2, #0x80 /* Adjust for extra sub */
|
||||
ldmeqfd sp!, {r4-r9}
|
||||
ldmfdeq sp!, {r4-r9}
|
||||
bxeq lr /* Return now if done */
|
||||
subs r2, r2, #0x20
|
||||
blt .Lmemcpy_w_lessthan32
|
||||
@ -159,7 +161,7 @@ ENTRY(memcpy)
|
||||
|
||||
.Lmemcpy_w_lessthan32:
|
||||
adds r2, r2, #0x20 /* Adjust for extra sub */
|
||||
ldmeqfd sp!, {r4-r9}
|
||||
ldmfdeq sp!, {r4-r9}
|
||||
bxeq lr /* Return now if done */
|
||||
|
||||
and r4, r2, #0x18
|
||||
@ -195,11 +197,11 @@ ENTRY(memcpy)
|
||||
addlt r2, r2, #0x04
|
||||
ldrb ip, [r1], #0x01
|
||||
cmp r2, #0x02
|
||||
ldrgeb r2, [r1], #0x01
|
||||
ldrbge r2, [r1], #0x01
|
||||
strb ip, [r3], #0x01
|
||||
ldrgtb ip, [r1]
|
||||
strgeb r2, [r3], #0x01
|
||||
strgtb ip, [r3]
|
||||
ldrbgt ip, [r1]
|
||||
strbge r2, [r3], #0x01
|
||||
strbgt ip, [r3]
|
||||
bx lr
|
||||
|
||||
|
||||
@ -253,7 +255,7 @@ ENTRY(memcpy)
|
||||
bge .Lmemcpy_bad1_loop16
|
||||
|
||||
adds r2, r2, #0x10
|
||||
ldmeqfd sp!, {r4-r7}
|
||||
ldmfdeq sp!, {r4-r7}
|
||||
bxeq lr /* Return now if done */
|
||||
subs r2, r2, #0x04
|
||||
sublt r1, r1, #0x03
|
||||
@ -314,7 +316,7 @@ ENTRY(memcpy)
|
||||
bge .Lmemcpy_bad2_loop16
|
||||
|
||||
adds r2, r2, #0x10
|
||||
ldmeqfd sp!, {r4-r7}
|
||||
ldmfdeq sp!, {r4-r7}
|
||||
bxeq lr /* Return now if done */
|
||||
subs r2, r2, #0x04
|
||||
sublt r1, r1, #0x02
|
||||
@ -375,7 +377,7 @@ ENTRY(memcpy)
|
||||
bge .Lmemcpy_bad3_loop16
|
||||
|
||||
adds r2, r2, #0x10
|
||||
ldmeqfd sp!, {r4-r7}
|
||||
ldmfdeq sp!, {r4-r7}
|
||||
bxeq lr /* Return now if done */
|
||||
subs r2, r2, #0x04
|
||||
sublt r1, r1, #0x01
|
||||
@ -404,11 +406,11 @@ ENTRY(memcpy)
|
||||
bxeq lr
|
||||
ldrb ip, [r1], #0x01
|
||||
cmp r2, #0x02
|
||||
ldrgeb r2, [r1], #0x01
|
||||
ldrbge r2, [r1], #0x01
|
||||
strb ip, [r3], #0x01
|
||||
ldrgtb ip, [r1]
|
||||
strgeb r2, [r3], #0x01
|
||||
strgtb ip, [r3]
|
||||
ldrbgt ip, [r1]
|
||||
strbge r2, [r3], #0x01
|
||||
strbgt ip, [r3]
|
||||
bx lr
|
||||
|
||||
|
||||
@ -440,7 +442,7 @@ ENTRY(memcpy)
|
||||
ldrb ip, [r1], #0x01
|
||||
1: subs r2, r2, #0x01
|
||||
strb ip, [r3], #0x01
|
||||
ldrneb ip, [r1], #0x01
|
||||
ldrbne ip, [r1], #0x01
|
||||
bne 1b
|
||||
bx lr
|
||||
|
||||
|
@ -32,6 +32,8 @@
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
.syntax unified
|
||||
|
||||
#ifndef _BCOPY
|
||||
/* LINTSTUB: Func: void *memmove(void *, const void *, size_t) */
|
||||
ENTRY(memmove)
|
||||
@ -86,8 +88,8 @@ ENTRY(bcopy)
|
||||
bge .Lmemmove_floop32
|
||||
|
||||
cmn r2, #0x10
|
||||
ldmgeia r1!, {r3, r4, r12, lr} /* blat a remaining 16 bytes */
|
||||
stmgeia r0!, {r3, r4, r12, lr}
|
||||
ldmiage r1!, {r3, r4, r12, lr} /* blat a remaining 16 bytes */
|
||||
stmiage r0!, {r3, r4, r12, lr}
|
||||
subge r2, r2, #0x10
|
||||
ldmia sp!, {r4} /* return r4 */
|
||||
|
||||
@ -96,9 +98,9 @@ ENTRY(bcopy)
|
||||
|
||||
/* blat 12 bytes at a time */
|
||||
.Lmemmove_floop12:
|
||||
ldmgeia r1!, {r3, r12, lr}
|
||||
stmgeia r0!, {r3, r12, lr}
|
||||
subges r2, r2, #0x0c
|
||||
ldmiage r1!, {r3, r12, lr}
|
||||
stmiage r0!, {r3, r12, lr}
|
||||
subsge r2, r2, #0x0c
|
||||
bge .Lmemmove_floop12
|
||||
|
||||
.Lmemmove_fl12:
|
||||
@ -108,23 +110,23 @@ ENTRY(bcopy)
|
||||
subs r2, r2, #4
|
||||
ldrlt r3, [r1], #4
|
||||
strlt r3, [r0], #4
|
||||
ldmgeia r1!, {r3, r12}
|
||||
stmgeia r0!, {r3, r12}
|
||||
ldmiage r1!, {r3, r12}
|
||||
stmiage r0!, {r3, r12}
|
||||
subge r2, r2, #4
|
||||
|
||||
.Lmemmove_fl4:
|
||||
/* less than 4 bytes to go */
|
||||
adds r2, r2, #4
|
||||
ldmeqia sp!, {r0, pc} /* done */
|
||||
ldmiaeq sp!, {r0, pc} /* done */
|
||||
|
||||
/* copy the crud byte at a time */
|
||||
cmp r2, #2
|
||||
ldrb r3, [r1], #1
|
||||
strb r3, [r0], #1
|
||||
ldrgeb r3, [r1], #1
|
||||
strgeb r3, [r0], #1
|
||||
ldrgtb r3, [r1], #1
|
||||
strgtb r3, [r0], #1
|
||||
ldrbge r3, [r1], #1
|
||||
strbge r3, [r0], #1
|
||||
ldrbgt r3, [r1], #1
|
||||
strbgt r3, [r0], #1
|
||||
ldmia sp!, {r0, pc}
|
||||
|
||||
/* erg - unaligned destination */
|
||||
@ -135,10 +137,10 @@ ENTRY(bcopy)
|
||||
/* align destination with byte copies */
|
||||
ldrb r3, [r1], #1
|
||||
strb r3, [r0], #1
|
||||
ldrgeb r3, [r1], #1
|
||||
strgeb r3, [r0], #1
|
||||
ldrgtb r3, [r1], #1
|
||||
strgtb r3, [r0], #1
|
||||
ldrbge r3, [r1], #1
|
||||
strbge r3, [r0], #1
|
||||
ldrbgt r3, [r1], #1
|
||||
strbgt r3, [r0], #1
|
||||
subs r2, r2, r12
|
||||
blt .Lmemmove_fl4 /* less the 4 bytes */
|
||||
|
||||
@ -353,12 +355,12 @@ ENTRY(bcopy)
|
||||
|
||||
.Lmemmove_bl32:
|
||||
cmn r2, #0x10
|
||||
ldmgedb r1!, {r3, r4, r12, lr} /* blat a remaining 16 bytes */
|
||||
stmgedb r0!, {r3, r4, r12, lr}
|
||||
ldmdbge r1!, {r3, r4, r12, lr} /* blat a remaining 16 bytes */
|
||||
stmdbge r0!, {r3, r4, r12, lr}
|
||||
subge r2, r2, #0x10
|
||||
adds r2, r2, #0x14
|
||||
ldmgedb r1!, {r3, r12, lr} /* blat a remaining 12 bytes */
|
||||
stmgedb r0!, {r3, r12, lr}
|
||||
ldmdbge r1!, {r3, r12, lr} /* blat a remaining 12 bytes */
|
||||
stmdbge r0!, {r3, r12, lr}
|
||||
subge r2, r2, #0x0c
|
||||
ldmia sp!, {r4, lr}
|
||||
|
||||
@ -368,8 +370,8 @@ ENTRY(bcopy)
|
||||
subs r2, r2, #4
|
||||
ldrlt r3, [r1, #-4]!
|
||||
strlt r3, [r0, #-4]!
|
||||
ldmgedb r1!, {r3, r12}
|
||||
stmgedb r0!, {r3, r12}
|
||||
ldmdbge r1!, {r3, r12}
|
||||
stmdbge r0!, {r3, r12}
|
||||
subge r2, r2, #4
|
||||
|
||||
.Lmemmove_bl4:
|
||||
@ -381,10 +383,10 @@ ENTRY(bcopy)
|
||||
cmp r2, #2
|
||||
ldrb r3, [r1, #-1]!
|
||||
strb r3, [r0, #-1]!
|
||||
ldrgeb r3, [r1, #-1]!
|
||||
strgeb r3, [r0, #-1]!
|
||||
ldrgtb r3, [r1, #-1]!
|
||||
strgtb r3, [r0, #-1]!
|
||||
ldrbge r3, [r1, #-1]!
|
||||
strbge r3, [r0, #-1]!
|
||||
ldrbgt r3, [r1, #-1]!
|
||||
strbgt r3, [r0, #-1]!
|
||||
RET
|
||||
|
||||
/* erg - unaligned destination */
|
||||
@ -394,10 +396,10 @@ ENTRY(bcopy)
|
||||
/* align destination with byte copies */
|
||||
ldrb r3, [r1, #-1]!
|
||||
strb r3, [r0, #-1]!
|
||||
ldrgeb r3, [r1, #-1]!
|
||||
strgeb r3, [r0, #-1]!
|
||||
ldrgtb r3, [r1, #-1]!
|
||||
strgtb r3, [r0, #-1]!
|
||||
ldrbge r3, [r1, #-1]!
|
||||
strbge r3, [r0, #-1]!
|
||||
ldrbgt r3, [r1, #-1]!
|
||||
strbgt r3, [r0, #-1]!
|
||||
subs r2, r2, r12
|
||||
blt .Lmemmove_bl4 /* less than 4 bytes to go */
|
||||
ands r12, r1, #3
|
||||
|
@ -69,6 +69,8 @@
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
.syntax unified
|
||||
|
||||
/*
|
||||
* memset: Sets a block of memory to the specified value
|
||||
*
|
||||
@ -125,39 +127,39 @@ ENTRY(memset)
|
||||
.Lmemset_loop128:
|
||||
subs r1, r1, #0x80
|
||||
#ifdef _ARM_ARCH_5E
|
||||
strged r2, [ip], #0x08
|
||||
strged r2, [ip], #0x08
|
||||
strged r2, [ip], #0x08
|
||||
strged r2, [ip], #0x08
|
||||
strged r2, [ip], #0x08
|
||||
strged r2, [ip], #0x08
|
||||
strged r2, [ip], #0x08
|
||||
strged r2, [ip], #0x08
|
||||
strged r2, [ip], #0x08
|
||||
strged r2, [ip], #0x08
|
||||
strged r2, [ip], #0x08
|
||||
strged r2, [ip], #0x08
|
||||
strged r2, [ip], #0x08
|
||||
strged r2, [ip], #0x08
|
||||
strged r2, [ip], #0x08
|
||||
strged r2, [ip], #0x08
|
||||
strdge r2, [ip], #0x08
|
||||
strdge r2, [ip], #0x08
|
||||
strdge r2, [ip], #0x08
|
||||
strdge r2, [ip], #0x08
|
||||
strdge r2, [ip], #0x08
|
||||
strdge r2, [ip], #0x08
|
||||
strdge r2, [ip], #0x08
|
||||
strdge r2, [ip], #0x08
|
||||
strdge r2, [ip], #0x08
|
||||
strdge r2, [ip], #0x08
|
||||
strdge r2, [ip], #0x08
|
||||
strdge r2, [ip], #0x08
|
||||
strdge r2, [ip], #0x08
|
||||
strdge r2, [ip], #0x08
|
||||
strdge r2, [ip], #0x08
|
||||
strdge r2, [ip], #0x08
|
||||
#else
|
||||
stmgeia ip!, {r2-r3}
|
||||
stmgeia ip!, {r2-r3}
|
||||
stmgeia ip!, {r2-r3}
|
||||
stmgeia ip!, {r2-r3}
|
||||
stmgeia ip!, {r2-r3}
|
||||
stmgeia ip!, {r2-r3}
|
||||
stmgeia ip!, {r2-r3}
|
||||
stmgeia ip!, {r2-r3}
|
||||
stmgeia ip!, {r2-r3}
|
||||
stmgeia ip!, {r2-r3}
|
||||
stmgeia ip!, {r2-r3}
|
||||
stmgeia ip!, {r2-r3}
|
||||
stmgeia ip!, {r2-r3}
|
||||
stmgeia ip!, {r2-r3}
|
||||
stmgeia ip!, {r2-r3}
|
||||
stmgeia ip!, {r2-r3}
|
||||
stmiage ip!, {r2-r3}
|
||||
stmiage ip!, {r2-r3}
|
||||
stmiage ip!, {r2-r3}
|
||||
stmiage ip!, {r2-r3}
|
||||
stmiage ip!, {r2-r3}
|
||||
stmiage ip!, {r2-r3}
|
||||
stmiage ip!, {r2-r3}
|
||||
stmiage ip!, {r2-r3}
|
||||
stmiage ip!, {r2-r3}
|
||||
stmiage ip!, {r2-r3}
|
||||
stmiage ip!, {r2-r3}
|
||||
stmiage ip!, {r2-r3}
|
||||
stmiage ip!, {r2-r3}
|
||||
stmiage ip!, {r2-r3}
|
||||
stmiage ip!, {r2-r3}
|
||||
stmiage ip!, {r2-r3}
|
||||
#endif
|
||||
bgt .Lmemset_loop128
|
||||
RETeq /* Zero length so just exit */
|
||||
@ -168,15 +170,15 @@ ENTRY(memset)
|
||||
.Lmemset_loop32:
|
||||
subs r1, r1, #0x20
|
||||
#ifdef _ARM_ARCH_5E
|
||||
strged r2, [ip], #0x08
|
||||
strged r2, [ip], #0x08
|
||||
strged r2, [ip], #0x08
|
||||
strged r2, [ip], #0x08
|
||||
strdge r2, [ip], #0x08
|
||||
strdge r2, [ip], #0x08
|
||||
strdge r2, [ip], #0x08
|
||||
strdge r2, [ip], #0x08
|
||||
#else
|
||||
stmgeia ip!, {r2-r3}
|
||||
stmgeia ip!, {r2-r3}
|
||||
stmgeia ip!, {r2-r3}
|
||||
stmgeia ip!, {r2-r3}
|
||||
stmiage ip!, {r2-r3}
|
||||
stmiage ip!, {r2-r3}
|
||||
stmiage ip!, {r2-r3}
|
||||
stmiage ip!, {r2-r3}
|
||||
#endif
|
||||
bgt .Lmemset_loop32
|
||||
RETeq /* Zero length so just exit */
|
||||
@ -185,11 +187,11 @@ ENTRY(memset)
|
||||
|
||||
/* Deal with 16 bytes or more */
|
||||
#ifdef _ARM_ARCH_5E
|
||||
strged r2, [ip], #0x08
|
||||
strged r2, [ip], #0x08
|
||||
strdge r2, [ip], #0x08
|
||||
strdge r2, [ip], #0x08
|
||||
#else
|
||||
stmgeia ip!, {r2-r3}
|
||||
stmgeia ip!, {r2-r3}
|
||||
stmiage ip!, {r2-r3}
|
||||
stmiage ip!, {r2-r3}
|
||||
#endif
|
||||
RETeq /* Zero length so just exit */
|
||||
|
||||
@ -212,17 +214,17 @@ ENTRY(memset)
|
||||
#endif
|
||||
|
||||
strb r3, [ip], #0x01 /* Set 1 byte */
|
||||
strgeb r3, [ip], #0x01 /* Set another byte */
|
||||
strgtb r3, [ip] /* and a third */
|
||||
strbge r3, [ip], #0x01 /* Set another byte */
|
||||
strbgt r3, [ip] /* and a third */
|
||||
RET /* Exit */
|
||||
|
||||
.Lmemset_wordunaligned:
|
||||
rsb r2, r2, #0x004
|
||||
strb r3, [ip], #0x01 /* Set 1 byte */
|
||||
cmp r2, #0x02
|
||||
strgeb r3, [ip], #0x01 /* Set another byte */
|
||||
strbge r3, [ip], #0x01 /* Set another byte */
|
||||
sub r1, r1, r2
|
||||
strgtb r3, [ip], #0x01 /* and a third */
|
||||
strbgt r3, [ip], #0x01 /* and a third */
|
||||
cmp r1, #0x04 /* More than 4 bytes left? */
|
||||
bge .Lmemset_wordaligned /* Yup */
|
||||
|
||||
@ -231,8 +233,8 @@ ENTRY(memset)
|
||||
RETeq /* Zero length so exit */
|
||||
strb r3, [ip], #0x01 /* Set 1 byte */
|
||||
cmp r1, #0x02
|
||||
strgeb r3, [ip], #0x01 /* Set another byte */
|
||||
strgtb r3, [ip] /* and a third */
|
||||
strbge r3, [ip], #0x01 /* Set another byte */
|
||||
strbgt r3, [ip] /* and a third */
|
||||
RET /* Exit */
|
||||
#ifdef _BZERO
|
||||
END(bzero)
|
||||
|
@ -27,6 +27,8 @@
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
.syntax unified
|
||||
|
||||
ENTRY(strlen)
|
||||
mov r1, #0
|
||||
/* Check that the pointer is aligned on 32 bits. */
|
||||
@ -53,23 +55,23 @@ ENTRY(strlen)
|
||||
addne r1, r1, #1
|
||||
.Ldo_3:
|
||||
#ifndef __ARMEB__
|
||||
andnes r3, r2, #0x0000ff00
|
||||
andsne r3, r2, #0x0000ff00
|
||||
#else
|
||||
andnes r3, r2, #0x00ff0000
|
||||
andsne r3, r2, #0x00ff0000
|
||||
#endif
|
||||
addne r1, r1, #1
|
||||
.Ldo_2:
|
||||
#ifndef __ARMEB__
|
||||
andnes r3, r2, #0x00ff0000
|
||||
andsne r3, r2, #0x00ff0000
|
||||
#else
|
||||
andnes r3, r2, #0x0000ff00
|
||||
andsne r3, r2, #0x0000ff00
|
||||
#endif
|
||||
addne r1, r1, #1
|
||||
.Ldo_1:
|
||||
#ifndef __ARMEB__
|
||||
andnes r3, r2, #0xff000000
|
||||
andsne r3, r2, #0xff000000
|
||||
#else
|
||||
andnes r3, r2, #0x000000ff
|
||||
andsne r3, r2, #0x000000ff
|
||||
#endif
|
||||
addne r1, r1, #1
|
||||
bne .Loop
|
||||
|
Loading…
Reference in New Issue
Block a user