# $begin ncopy-ys ################################################################### ncopyys - Copy a src block of len words to dst# Return the number of positive words 0 contained in src## Include y
#/* $begin ncopy-ys */ ##################################################################
ncopy.ys - Copy a src block of len words to dst.
Return the number of positive words (>0) contained in src.
Include your name and ID here.
Describe how and why you modified the baseline code.
##################################################################
Do not modify this portion
Function prologue.
%rdi = src, %rsi = dst, %rdx = len
ncopy:
##################################################################
You can modify this portion
# Loop header
xorq %rax,%rax # count = 0;
andq %rdx,%rdx # len <= 0?
jle Done # if so, goto Done:
Loop:
mrmovq (%rdi), %r10 # read val from src...
rmmovq %r10, (%rsi) # ...and store it to dst
andq %r10, %r10 # val <= 0?
jle Npos # if so, goto Npos:
iaddq $1, %rax
Npos:
iaddq $-1, %rdx # len--
iaddq $8, %rdi # src++
iaddq $8, %rsi # dst++
andq %rdx,%rdx # len > 0?
jg Loop # if so, goto Loop:
# Loop unrolling
mrmovq 8(%rdi), %r10
rmmovq %r10, 8(%rsi)
andq %r10, %r10
jle Npos2
iaddq $1, %rax
Npos2: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop2
mrmovq 16(%rdi), %r10
rmmovq %r10, 16(%rsi)
andq %r10, %r10
jle Npos3
iaddq $1, %rax
Npos3: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop3
mrmovq 24(%rdi), %r10
rmmovq %r10, 24(%rsi)
andq %r10, %r10
jle Npos4
iaddq $1, %rax
Npos4: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop4
mrmovq 32(%rdi), %r10
rmmovq %r10, 32(%rsi)
andq %r10, %r10
jle Npos5
iaddq $1, %rax
Npos5: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop5
mrmovq 40(%rdi), %r10
rmmovq %r10, 40(%rsi)
andq %r10, %r10
jle Npos6
iaddq $1, %rax
Npos6: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop6
mrmovq 48(%rdi), %r10
rmmovq %r10, 48(%rsi)
andq %r10, %r10
jle Npos7
iaddq $1, %rax
Npos7: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop7
mrmovq 56(%rdi), %r10
rmmovq %r10, 56(%rsi)
andq %r10, %r10
jle Npos8
iaddq $1, %rax
Npos8: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop8
mrmovq 64(%rdi), %r10
rmmovq %r10, 64(%rsi)
andq %r10, %r10
jle Npos9
iaddq $1, %rax
Npos9: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop9
mrmovq 72(%rdi), %r10
rmmovq %r10, 72(%rsi)
andq %r10, %r10
jle Npos10
iaddq $1, %rax
Npos10: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop10
mrmovq 80(%rdi), %r10
rmmovq %r10, 80(%rsi)
andq %r10, %r10
jle Npos11
iaddq $1, %rax
Npos11: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop11
mrmovq 88(%rdi), %r10
rmmovq %r10, 88(%rsi)
andq %r10, %r10
jle Npos12
iaddq $1, %rax
Npos12: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop12
mrmovq 96(%rdi), %r10
rmmovq %r10, 96(%rsi)
andq %r10, %r10
jle Npos13
iaddq $1, %rax
Npos13: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop13
mrmovq 104(%rdi), %r10
rmmovq %r10, 104(%rsi)
andq %r10, %r10
jle Npos14
iaddq $1, %rax
Npos14: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop14
mrmovq 112(%rdi), %r10
rmmovq %r10, 112(%rsi)
andq %r10, %r10
jle Npos15
iaddq $1, %rax
Npos15: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop15
mrmovq 120(%rdi), %r10
rmmovq %r10, 120(%rsi)
andq %r10, %r10
jle Npos16
iaddq $1, %rax
Npos16: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop16
mrmovq 128(%rdi), %r10
rmmovq %r10, 128(%rsi)
andq %r10, %r10
jle Npos17
iaddq $1, %rax
Npos17: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop17
mrmovq 136(%rdi), %r10
rmmovq %r10, 136(%rsi)
andq %r10, %r10
jle Npos18
iaddq $1, %rax
Npos18: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop18
mrmovq 144(%rdi), %r10
rmmovq %r10, 144(%rsi)
andq %r10, %r10
jle Npos19
iaddq $1, %rax
Npos19: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop19
mrmovq 152(%rdi), %r10
rmmovq %r10, 152(%rsi)
andq %r10, %r10
jle Npos20
iaddq $1, %rax
Npos20: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop20
mrmovq 160(%rdi), %r10
rmmovq %r10, 160(%rsi)
andq %r10, %r10
jle Npos21
iaddq $1, %rax
Npos21: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop21
mrmovq 168(%rdi), %r10
rmmovq %r10, 168(%rsi)
andq %r10, %r10
jle Npos22
iaddq $1, %rax
Npos22: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop22
mrmovq 176(%rdi), %r10
rmmovq %r10, 176(%rsi)
andq %r10, %r10
jle Npos23
iaddq $1, %rax
Npos23: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop23
mrmovq 184(%rdi), %r10
rmmovq %r10, 184(%rsi)
andq %r10, %r10
jle Npos24
iaddq $1, %rax
Npos24: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop24
mrmovq 192(%rdi), %r10
rmmovq %r10, 192(%rsi)
andq %r10, %r10
jle Npos25
iaddq $1, %rax
Npos25: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop25
mrmovq 200(%rdi), %r10
rmmovq %r10, 200(%rsi)
andq %r10, %r10
jle Npos26
iaddq $1, %rax
Npos26: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop26
mrmovq 208(%rdi), %r10
rmmovq %r10, 208(%rsi)
andq %r10, %r10
jle Npos27
iaddq $1, %rax
Npos27: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop27
mrmovq 216(%rdi), %r10
rmmovq %r10, 216(%rsi)
andq %r10, %r10
jle Npos28
iaddq $1, %rax
Npos28: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop28
mrmovq 224(%rdi), %r10
rmmovq %r10, 224(%rsi)
andq %r10, %r10
jle Npos29
iaddq $1, %rax
Npos29: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop29
mrmovq 232(%rdi), %r10
rmmovq %r10, 232(%rsi)
andq %r10, %r10
jle Npos30
iaddq $1, %rax
Npos30: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop30
mrmovq 240(%rdi), %r10
rmmovq %r10, 240(%rsi)
andq %r10, %r10
jle Npos31
iaddq $1, %rax
Npos31: iaddq $-1, %rdx iaddq $16, %rdi iaddq $16, %rsi andq %rdx,%rdx jg Loop31
##################################################################
Do not modify the following section of code
Function epilogue.
Done: ret ##################################################################
原文地址: https://www.cveoy.top/t/topic/bUEj 著作权归作者所有。请勿转载和采集!