clangir
clangir copied to clipboard
[CIR][CIRGen][builtin][X86] Implement support for _mm_getcsr() and _mm_setcsr() intrinsic
#1404
clang -S -emit-llvm produce
define dso_local void @test_mm_getcsr()() #0 !dbg !43 {
%1 = alloca i32, align 4
call void @llvm.x86.sse.stmxcsr(ptr %1), !dbg !46
%2 = load i32, ptr %1, align 4, !dbg !46
ret void, !dbg !47
}
define dso_local void @set_csr()() #0 !dbg !48 {
%1 = alloca i32, align 4
store i32 0, ptr %1, align 4, !dbg !49
call void @llvm.x86.sse.ldmxcsr(ptr %1), !dbg !49
ret void, !dbg !50
}
However func signature of _mm_setcsr and _mm_getcsr are a bit different from llvm's x86 intrinsic, so needs to do extra handling to be compatible. I tried to produce the same signature in CIR as in LLVM and will eventually generate the same code as direct c->llvm.
void _mm_getcsr(unsigned int);
unsigned int _mm_getcsr();
Thanks for the review !