/* align p to 16-byte boundary */ if (n) {
crc = crc32_le_scalar(crc, p, n);
p += n;
len -= n;
}
n = round_down(len, 16);
kernel_neon_begin();
crc = crc32_pmull_le(p, n, crc);
kernel_neon_end();
p += n;
len -= n;
} return crc32_le_scalar(crc, p, len);
}
/* align p to 16-byte boundary */ if (n) {
crc = crc32c_scalar(crc, p, n);
p += n;
len -= n;
}
n = round_down(len, 16);
kernel_neon_begin();
crc = crc32c_pmull_le(p, n, crc);
kernel_neon_end();
p += n;
len -= n;
} return crc32c_scalar(crc, p, len);
}
#define crc32_be_arch crc32_be_base /* not implemented on this arch */
#define crc32_mod_init_arch crc32_mod_init_arch staticinlinevoid crc32_mod_init_arch(void)
{ if (elf_hwcap2 & HWCAP2_CRC32)
static_branch_enable(&have_crc32); if (elf_hwcap2 & HWCAP2_PMULL)
static_branch_enable(&have_pmull);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.