.section ".text.memcpy","ax" .balign 4 .globl memcpy memcpy: #if 0 j __memcpy_misaligned #else or a5, a0, a1 or a5, a5, a2 andi a5, a5, 3 .option norvc bnez a5, __memcpy_misaligned .option rvc #endif .type memcpy, @function .size memcpy, . - memcpy .balign 4 .globl __memcpy_aligned __memcpy_aligned: add a4, a0, a2 mv a3, a0 andi a2, a2, 7*4 .option norelax lui a5, %hi(.L_case0) sub a5, a5, a2 jr a5, %lo(.L_case0) .option relax .balign 4 .L_aligned_loop: add a1, a1, a2 li a2, 32 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 a3, a3, a2 bltu a3, a4, .L_aligned_loop .L_empty: ret .type __memcpy_aligned, @function .size __memcpy_aligned, . - __memcpy_aligned .balign 4 __memcpy_misaligned: .option norvc add a4, a0, a2 mv a3, a0 .option rvc // This could be optimized if it ever matters... .balign 4 .L_misaligned_loop: lbu a5, 0(a1) sb a5, 0(a3) addi a1, a1, 1 addi a3, a3, 1 bltu a3, a4, .L_misaligned_loop ret .type __memcpy_misaligned, @function .size __memcpy_misaligned, . - __memcpy_misaligned