Skip to content

Commit 8cad29a

Browse files
committed
Implement _xgetbv
1 parent aef31cb commit 8cad29a

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

src/intrinsics/llvm_x86.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,20 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
1818
// Spin loop hint
1919
}
2020

21+
// Used by is_x86_feature_detected!();
22+
"llvm.x86.xgetbv" => {
23+
// FIXME use the actual xgetbv instruction
24+
intrinsic_args!(fx, args => (v); intrinsic);
25+
26+
let v = v.load_scalar(fx);
27+
28+
// As of writing on XCR0 exists
29+
fx.bcx.ins().trapnz(v, TrapCode::UnreachableCodeReached);
30+
31+
let res = fx.bcx.ins().iconst(types::I64, 1 /* bit 0 must be set */);
32+
ret.write_cvalue(fx, CValue::by_val(res, fx.layout_of(fx.tcx.types.i64)));
33+
}
34+
2135
// Used by `_mm_movemask_epi8` and `_mm256_movemask_epi8`
2236
"llvm.x86.sse2.pmovmskb.128"
2337
| "llvm.x86.avx2.pmovmskb"

0 commit comments

Comments
 (0)