123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- .section ".text.hot.memcpy","ax"
- .balign 4
- .globl mempcpy
- mempcpy:
- mv a3, a0
- add a0, a0, a2
- j __memxcpy
- .type mempcpy, @function
- .size mempcpy, . - mempcpy
- .balign 4
- .globl memcpy
- memcpy:
- mv a3, a0
- .type memcpy, @function
- .size memcpy, . - memcpy
- .globl __memxcpy
- __memxcpy:
- or a5, a3, a1
- or a5, a5, a2
- andi a5, a5, 3
- bnez a5, __memxcpy_bytewise
- .type __memxcpy, @function
- .size __memxcpy, . - __memxcpy
- .globl __memxcpy_aligned
- __memxcpy_aligned:
- add a4, a3, a2
- andi a2, a2, 7*4
- .option norelax
- sub a5, zero, a2
- jr a5, %lo(.L_case0)
- .option relax
- .balign 4
- .L_aligned_loop:
- .option norvc
- li a2, 32
- .option rvc
- c.lw a5, 28(a1)
- c.sw a5, 28(a3)
- .L_case7:
- c.lw a5, 24(a1)
- c.sw a5, 24(a3)
- .L_case6:
- c.lw a5, 20(a1)
- c.sw a5, 20(a3)
- .L_case5:
- c.lw a5, 16(a1)
- c.sw a5, 16(a3)
- .L_case4:
- c.lw a5, 12(a1)
- c.sw a5, 12(a3)
- .L_case3:
- c.lw a5, 8(a1)
- c.sw a5, 8(a3)
- .L_case2:
- c.lw a5, 4(a1)
- c.sw a5, 4(a3)
- .L_case1:
- c.lw a5, 0(a1)
- c.sw a5, 0(a3)
- .L_case0:
- add a1, a1, a2
- add a3, a3, a2
- bltu a3, a4, .L_aligned_loop
- .L_empty:
- ret
- .type __memxcpy_aligned, @function
- .size __memxcpy_aligned, . - __memxcpy_aligned
- //
- // These can be used by I/O devices that need bytewise access
- //
- .balign 4
- memcpy_bytewise:
- .option norvc
- mv a0, a3
- .option rvc
- .type memcpy_bytewise, @function
- .size memcpy_bytewise, . - memcpy_bytewise
- .balign 4
- __memxcpy_bytewise:
- .option norvc
- add a4, a3, a2
- .option rvc
- .balign 4
- .L_bytewise_loop:
- lbu a5, 0(a1)
- sb a5, 0(a3)
- addi a1, a1, 1
- addi a3, a3, 1
- bltu a3, a4, .L_bytewise_loop
- ret
- .type __memxcpy_bytewise, @function
- .size __memxcpy_bytewise, . - __memxcpy_bytewise
|