mirror of
https://github.com/Ed94/Odin.git
synced 2026-06-19 12:22:23 -07:00
Add intrinsics nontemporal_store and nontemporal_load
This commit is contained in:
@@ -2111,6 +2111,7 @@ lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValue const &tv,
|
||||
return {};
|
||||
|
||||
case BuiltinProc_volatile_store:
|
||||
case BuiltinProc_nontemporal_store:
|
||||
case BuiltinProc_atomic_store:
|
||||
case BuiltinProc_atomic_store_explicit: {
|
||||
lbValue dst = lb_build_expr(p, ce->args[0]);
|
||||
@@ -2120,6 +2121,9 @@ lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValue const &tv,
|
||||
LLVMValueRef instr = LLVMBuildStore(p->builder, val.value, dst.value);
|
||||
switch (id) {
|
||||
case BuiltinProc_volatile_store: LLVMSetVolatile(instr, true); break;
|
||||
case BuiltinProc_nontemporal_store:
|
||||
// TODO(bill): BuiltinProc_nontemporal_store
|
||||
break;
|
||||
case BuiltinProc_atomic_store: LLVMSetOrdering(instr, LLVMAtomicOrderingSequentiallyConsistent); break;
|
||||
case BuiltinProc_atomic_store_explicit: LLVMSetOrdering(instr, llvm_atomic_ordering_from_odin(ce->args[2])); break;
|
||||
}
|
||||
@@ -2130,6 +2134,7 @@ lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValue const &tv,
|
||||
}
|
||||
|
||||
case BuiltinProc_volatile_load:
|
||||
case BuiltinProc_nontemporal_load:
|
||||
case BuiltinProc_atomic_load:
|
||||
case BuiltinProc_atomic_load_explicit: {
|
||||
lbValue dst = lb_build_expr(p, ce->args[0]);
|
||||
@@ -2137,6 +2142,9 @@ lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValue const &tv,
|
||||
LLVMValueRef instr = LLVMBuildLoad(p->builder, dst.value, "");
|
||||
switch (id) {
|
||||
case BuiltinProc_volatile_load: LLVMSetVolatile(instr, true); break;
|
||||
case BuiltinProc_nontemporal_load:
|
||||
// TODO(bill): BuiltinProc_nontemporal_load
|
||||
break;
|
||||
case BuiltinProc_atomic_load: LLVMSetOrdering(instr, LLVMAtomicOrderingSequentiallyConsistent); break;
|
||||
case BuiltinProc_atomic_load_explicit: LLVMSetOrdering(instr, llvm_atomic_ordering_from_odin(ce->args[1])); break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user