neon bit in computeCoverage
This commit is contained in:
parent
b0910ed08a
commit
93e9ef79b0
|
@ -1410,13 +1410,21 @@ proc computeCoverage(
|
||||||
let fillLen = at.integer - fillStart
|
let fillLen = at.integer - fillStart
|
||||||
if fillLen > 0:
|
if fillLen > 0:
|
||||||
var i = fillStart
|
var i = fillStart
|
||||||
when defined(amd64) and allowSimd:
|
when allowSimd:
|
||||||
|
when defined(amd64):
|
||||||
let sampleCoverageVec = mm_set1_epi8(sampleCoverage)
|
let sampleCoverageVec = mm_set1_epi8(sampleCoverage)
|
||||||
for _ in 0 ..< fillLen div 16:
|
for _ in 0 ..< fillLen div 16:
|
||||||
var coverageVec = mm_loadu_si128(coverages[i - startX].addr)
|
var coverageVec = mm_loadu_si128(coverages[i - startX].addr)
|
||||||
coverageVec = mm_add_epi8(coverageVec, sampleCoverageVec)
|
coverageVec = mm_add_epi8(coverageVec, sampleCoverageVec)
|
||||||
mm_storeu_si128(coverages[i - startX].addr, coverageVec)
|
mm_storeu_si128(coverages[i - startX].addr, coverageVec)
|
||||||
i += 16
|
i += 16
|
||||||
|
elif defined(arm64):
|
||||||
|
let sampleCoverageVec = vmovq_n_u8(sampleCoverage)
|
||||||
|
for _ in 0 ..< fillLen div 16:
|
||||||
|
var coverageVec = vld1q_u8(coverages[i - startX].addr)
|
||||||
|
coverageVec = vaddq_u8(coverageVec, sampleCoverageVec)
|
||||||
|
vst1q_u8(coverages[i - startX].addr, coverageVec)
|
||||||
|
i += 16
|
||||||
for j in i ..< fillStart + fillLen:
|
for j in i ..< fillStart + fillLen:
|
||||||
coverages[j - startX] += sampleCoverage
|
coverages[j - startX] += sampleCoverage
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue