clangir icon indicating copy to clipboard operation
clangir copied to clipboard

[CIR][CIRGen][builtin][X86] Implement support for _mm_getcsr() and _mm_setcsr() intrinsic

Open Arthur-Chang016 opened this issue 6 months ago • 2 comments

#1404

Arthur-Chang016 avatar Jun 13 '25 04:06 Arthur-Chang016

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();

Arthur-Chang016 avatar Jun 13 '25 04:06 Arthur-Chang016

Thanks for the review !

Arthur-Chang016 avatar Jun 13 '25 04:06 Arthur-Chang016