diff --git a/lib/std/zig/system/loongarch.zig b/lib/std/zig/system/loongarch.zig index afc26d5db1be83ad95b105dfbd60ba7967ce30c5..da0d6fecb2807b7fa8b01afcb9ad74ab4f029a2c 100644 --- a/lib/std/zig/system/loongarch.zig +++ b/lib/std/zig/system/loongarch.zig @@ -94,21 +94,9 @@ pub fn detectNativeCpuAndFeatures( return cpu; } -/// This is a workaround for the C backend until zig has the ability to put -/// C code in inline assembly. -extern fn zig_loongarch_cpucfg(word: u32, result: *u32) callconv(.c) void; - fn cpucfg(word: u32) u32 { - var result: u32 = undefined; - - if (builtin.zig_backend == .stage2_c) { - zig_loongarch_cpucfg(word, &result); - } else { - asm ("cpucfg %[result], %[word]" - : [result] "=r" (result), - : [word] "r" (word), - ); - } - - return result; + return asm ("cpucfg %[result], %[word]" + : [result] "=r" (-> u32), + : [word] "r" (word), + ); } diff --git a/lib/zig.h b/lib/zig.h index dd9fa902f34bf2073c111763208937b4abbac01f..ad4156b64a1abf3503a3d55eee385690e6b59a54 100644 --- a/lib/zig.h +++ b/lib/zig.h @@ -6750,19 +6750,7 @@ static inline void* zig_e_zig_windows_peb(void) { #endif -#if defined(zig_loongarch) - -static inline void zig_e_zig_loongarch_cpucfg(uint32_t word, uint32_t* result) zig_mangled(zig_e_zig_loongarch_cpucfg, "zig_loongarch_cpucfg"); - -static inline void zig_e_zig_loongarch_cpucfg(uint32_t word, uint32_t* result) { -#if defined(zig_gnuc_asm) - __asm__("cpucfg %[result], %[word]" : [result] "=r" (*result) : [word] "r" (word)); -#else - *result = 0; -#endif -} - -#elif defined(zig_x86) && !defined(zig_x86_16) +#if defined(zig_x86) && !defined(zig_x86_16) static inline void zig_e_zig_x86_cpuid(uint32_t leaf_id, uint32_t subid, uint32_t* eax, uint32_t* ebx, uint32_t* ecx, uint32_t* edx) zig_mangled(zig_e_zig_x86_cpuid, "zig_x86_cpuid"); static inline uint32_t zig_e_zig_x86_get_xcr0(void) zig_mangled(zig_e_zig_x86_get_xcr0, "zig_x86_get_xcr0");