|
@@ -10,22 +10,7 @@
|
|
|
*/
|
|
|
|
|
|
#include <variant/core.h>
|
|
|
-
|
|
|
- .macro src_b r, w0, w1
|
|
|
-#ifdef __XTENSA_EB__
|
|
|
- src \r, \w0, \w1
|
|
|
-#else
|
|
|
- src \r, \w1, \w0
|
|
|
-#endif
|
|
|
- .endm
|
|
|
-
|
|
|
- .macro ssa8 r
|
|
|
-#ifdef __XTENSA_EB__
|
|
|
- ssa8b \r
|
|
|
-#else
|
|
|
- ssa8l \r
|
|
|
-#endif
|
|
|
- .endm
|
|
|
+#include <asm/asmmacro.h>
|
|
|
|
|
|
/*
|
|
|
* void *memcpy(void *dst, const void *src, size_t len);
|
|
@@ -209,7 +194,7 @@ memcpy:
|
|
|
.Lsrcunaligned:
|
|
|
_beqz a4, .Ldone # avoid loading anything for zero-length copies
|
|
|
# copy 16 bytes per iteration for word-aligned dst and unaligned src
|
|
|
- ssa8 a3 # set shift amount from byte offset
|
|
|
+ __ssa8 a3 # set shift amount from byte offset
|
|
|
|
|
|
/* set to 1 when running on ISS (simulator) with the
|
|
|
lint or ferret client, or 0 to save a few cycles */
|
|
@@ -229,16 +214,16 @@ memcpy:
|
|
|
.Loop2:
|
|
|
l32i a7, a3, 4
|
|
|
l32i a8, a3, 8
|
|
|
- src_b a6, a6, a7
|
|
|
+ __src_b a6, a6, a7
|
|
|
s32i a6, a5, 0
|
|
|
l32i a9, a3, 12
|
|
|
- src_b a7, a7, a8
|
|
|
+ __src_b a7, a7, a8
|
|
|
s32i a7, a5, 4
|
|
|
l32i a6, a3, 16
|
|
|
- src_b a8, a8, a9
|
|
|
+ __src_b a8, a8, a9
|
|
|
s32i a8, a5, 8
|
|
|
addi a3, a3, 16
|
|
|
- src_b a9, a9, a6
|
|
|
+ __src_b a9, a9, a6
|
|
|
s32i a9, a5, 12
|
|
|
addi a5, a5, 16
|
|
|
#if !XCHAL_HAVE_LOOPS
|
|
@@ -249,10 +234,10 @@ memcpy:
|
|
|
# copy 8 bytes
|
|
|
l32i a7, a3, 4
|
|
|
l32i a8, a3, 8
|
|
|
- src_b a6, a6, a7
|
|
|
+ __src_b a6, a6, a7
|
|
|
s32i a6, a5, 0
|
|
|
addi a3, a3, 8
|
|
|
- src_b a7, a7, a8
|
|
|
+ __src_b a7, a7, a8
|
|
|
s32i a7, a5, 4
|
|
|
addi a5, a5, 8
|
|
|
mov a6, a8
|
|
@@ -261,7 +246,7 @@ memcpy:
|
|
|
# copy 4 bytes
|
|
|
l32i a7, a3, 4
|
|
|
addi a3, a3, 4
|
|
|
- src_b a6, a6, a7
|
|
|
+ __src_b a6, a6, a7
|
|
|
s32i a6, a5, 0
|
|
|
addi a5, a5, 4
|
|
|
mov a6, a7
|
|
@@ -485,7 +470,7 @@ memmove:
|
|
|
.Lbacksrcunaligned:
|
|
|
_beqz a4, .Lbackdone # avoid loading anything for zero-length copies
|
|
|
# copy 16 bytes per iteration for word-aligned dst and unaligned src
|
|
|
- ssa8 a3 # set shift amount from byte offset
|
|
|
+ __ssa8 a3 # set shift amount from byte offset
|
|
|
#define SIM_CHECKS_ALIGNMENT 1 /* set to 1 when running on ISS with
|
|
|
* the lint or ferret client, or 0
|
|
|
* to save a few cycles */
|
|
@@ -506,15 +491,15 @@ memmove:
|
|
|
l32i a7, a3, 12
|
|
|
l32i a8, a3, 8
|
|
|
addi a5, a5, -16
|
|
|
- src_b a6, a7, a6
|
|
|
+ __src_b a6, a7, a6
|
|
|
s32i a6, a5, 12
|
|
|
l32i a9, a3, 4
|
|
|
- src_b a7, a8, a7
|
|
|
+ __src_b a7, a8, a7
|
|
|
s32i a7, a5, 8
|
|
|
l32i a6, a3, 0
|
|
|
- src_b a8, a9, a8
|
|
|
+ __src_b a8, a9, a8
|
|
|
s32i a8, a5, 4
|
|
|
- src_b a9, a6, a9
|
|
|
+ __src_b a9, a6, a9
|
|
|
s32i a9, a5, 0
|
|
|
#if !XCHAL_HAVE_LOOPS
|
|
|
bne a3, a10, .backLoop2 # continue loop if a3:src != a10:src_start
|
|
@@ -526,9 +511,9 @@ memmove:
|
|
|
l32i a7, a3, 4
|
|
|
l32i a8, a3, 0
|
|
|
addi a5, a5, -8
|
|
|
- src_b a6, a7, a6
|
|
|
+ __src_b a6, a7, a6
|
|
|
s32i a6, a5, 4
|
|
|
- src_b a7, a8, a7
|
|
|
+ __src_b a7, a8, a7
|
|
|
s32i a7, a5, 0
|
|
|
mov a6, a8
|
|
|
.Lback12:
|
|
@@ -537,7 +522,7 @@ memmove:
|
|
|
addi a3, a3, -4
|
|
|
l32i a7, a3, 0
|
|
|
addi a5, a5, -4
|
|
|
- src_b a6, a7, a6
|
|
|
+ __src_b a6, a7, a6
|
|
|
s32i a6, a5, 0
|
|
|
mov a6, a7
|
|
|
.Lback13:
|