loongarch: CRC intrinsics require loongarch64

GCC and LLVM both only allow using the CRC intrinsics on LA64.
This commit is contained in:
Aelin Reidel
2026-05-23 16:32:14 +02:00
parent 1055252e78
commit 035d7ddfa3
2 changed files with 54 additions and 54 deletions
@@ -22,8 +22,20 @@ pub fn rdtime_d() -> (i64, isize) {
#[allow(improper_ctypes)]
unsafe extern "unadjusted" {
#[link_name = "llvm.loongarch.crc.w.b.w"]
fn __crc_w_b_w(a: i32, b: i32) -> i32;
#[link_name = "llvm.loongarch.crc.w.h.w"]
fn __crc_w_h_w(a: i32, b: i32) -> i32;
#[link_name = "llvm.loongarch.crc.w.w.w"]
fn __crc_w_w_w(a: i32, b: i32) -> i32;
#[link_name = "llvm.loongarch.crc.w.d.w"]
fn __crc_w_d_w(a: i64, b: i32) -> i32;
#[link_name = "llvm.loongarch.crcc.w.b.w"]
fn __crcc_w_b_w(a: i32, b: i32) -> i32;
#[link_name = "llvm.loongarch.crcc.w.h.w"]
fn __crcc_w_h_w(a: i32, b: i32) -> i32;
#[link_name = "llvm.loongarch.crcc.w.w.w"]
fn __crcc_w_w_w(a: i32, b: i32) -> i32;
#[link_name = "llvm.loongarch.crcc.w.d.w"]
fn __crcc_w_d_w(a: i64, b: i32) -> i32;
#[link_name = "llvm.loongarch.cacop.d"]
@@ -48,6 +60,27 @@ pub fn rdtime_d() -> (i64, isize) {
fn __ldpte(a: i64, b: i64);
}
/// Calculate the CRC value using the IEEE 802.3 polynomial (0xEDB88320)
#[inline(always)]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn crc_w_b_w(a: i32, b: i32) -> i32 {
unsafe { __crc_w_b_w(a, b) }
}
/// Calculate the CRC value using the IEEE 802.3 polynomial (0xEDB88320)
#[inline(always)]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn crc_w_h_w(a: i32, b: i32) -> i32 {
unsafe { __crc_w_h_w(a, b) }
}
/// Calculate the CRC value using the IEEE 802.3 polynomial (0xEDB88320)
#[inline(always)]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn crc_w_w_w(a: i32, b: i32) -> i32 {
unsafe { __crc_w_w_w(a, b) }
}
/// Calculate the CRC value using the IEEE 802.3 polynomial (0xEDB88320)
#[inline(always)]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
@@ -55,6 +88,27 @@ pub fn crc_w_d_w(a: i64, b: i32) -> i32 {
unsafe { __crc_w_d_w(a, b) }
}
/// Calculate the CRC value using the Castagnoli polynomial (0x82F63B78)
#[inline(always)]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn crcc_w_b_w(a: i32, b: i32) -> i32 {
unsafe { __crcc_w_b_w(a, b) }
}
/// Calculate the CRC value using the Castagnoli polynomial (0x82F63B78)
#[inline(always)]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn crcc_w_h_w(a: i32, b: i32) -> i32 {
unsafe { __crcc_w_h_w(a, b) }
}
/// Calculate the CRC value using the Castagnoli polynomial (0x82F63B78)
#[inline(always)]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn crcc_w_w_w(a: i32, b: i32) -> i32 {
unsafe { __crcc_w_w_w(a, b) }
}
/// Calculate the CRC value using the Castagnoli polynomial (0x82F63B78)
#[inline(always)]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
@@ -22,18 +22,6 @@ pub fn rdtimeh_w() -> (i32, isize) {
#[allow(improper_ctypes)]
unsafe extern "unadjusted" {
#[link_name = "llvm.loongarch.crc.w.b.w"]
fn __crc_w_b_w(a: i32, b: i32) -> i32;
#[link_name = "llvm.loongarch.crc.w.h.w"]
fn __crc_w_h_w(a: i32, b: i32) -> i32;
#[link_name = "llvm.loongarch.crc.w.w.w"]
fn __crc_w_w_w(a: i32, b: i32) -> i32;
#[link_name = "llvm.loongarch.crcc.w.b.w"]
fn __crcc_w_b_w(a: i32, b: i32) -> i32;
#[link_name = "llvm.loongarch.crcc.w.h.w"]
fn __crcc_w_h_w(a: i32, b: i32) -> i32;
#[link_name = "llvm.loongarch.crcc.w.w.w"]
fn __crcc_w_w_w(a: i32, b: i32) -> i32;
#[link_name = "llvm.loongarch.dbar"]
fn __dbar(a: i32);
#[link_name = "llvm.loongarch.ibar"]
@@ -70,48 +58,6 @@ pub fn rdtimeh_w() -> (i32, isize) {
fn __frsqrte_d(a: f64) -> f64;
}
/// Calculate the CRC value using the IEEE 802.3 polynomial (0xEDB88320)
#[inline(always)]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn crc_w_b_w(a: i32, b: i32) -> i32 {
unsafe { __crc_w_b_w(a, b) }
}
/// Calculate the CRC value using the IEEE 802.3 polynomial (0xEDB88320)
#[inline(always)]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn crc_w_h_w(a: i32, b: i32) -> i32 {
unsafe { __crc_w_h_w(a, b) }
}
/// Calculate the CRC value using the IEEE 802.3 polynomial (0xEDB88320)
#[inline(always)]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn crc_w_w_w(a: i32, b: i32) -> i32 {
unsafe { __crc_w_w_w(a, b) }
}
/// Calculate the CRC value using the Castagnoli polynomial (0x82F63B78)
#[inline(always)]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn crcc_w_b_w(a: i32, b: i32) -> i32 {
unsafe { __crcc_w_b_w(a, b) }
}
/// Calculate the CRC value using the Castagnoli polynomial (0x82F63B78)
#[inline(always)]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn crcc_w_h_w(a: i32, b: i32) -> i32 {
unsafe { __crcc_w_h_w(a, b) }
}
/// Calculate the CRC value using the Castagnoli polynomial (0x82F63B78)
#[inline(always)]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn crcc_w_w_w(a: i32, b: i32) -> i32 {
unsafe { __crcc_w_w_w(a, b) }
}
/// Generates the memory barrier instruction
#[inline(always)]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]