aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAlex Rønne Petersen <alex@alexrp.com>2025-02-24 08:25:23 +0100
committerGitHub <noreply@github.com>2025-02-24 08:25:23 +0100
commitecc76348e6858f00b920d8dc9e44a6e703d8e497 (patch)
tree018e151e85958c8e1b12328865e8b18398956b5e /lib
parent76558f8c6b8361ab520ea77e4b4cd2bfc8f688ad (diff)
parente11ac026623f8d0f4895cddd6a9bf3c03a866c6d (diff)
downloadzig-ecc76348e6858f00b920d8dc9e44a6e703d8e497.tar.gz
zig-ecc76348e6858f00b920d8dc9e44a6e703d8e497.zip
Merge pull request #22154 from alexrp/disable-intrinsics
compiler: Implement `@disableIntrinsics()` builtin function.
Diffstat (limited to 'lib')
-rw-r--r--lib/std/zig/AstGen.zig2
-rw-r--r--lib/std/zig/AstRlAnnotate.zig1
-rw-r--r--lib/std/zig/BuiltinFn.zig9
-rw-r--r--lib/std/zig/Zir.zig9
-rw-r--r--lib/zig.h6
5 files changed, 26 insertions, 1 deletions
diff --git a/lib/std/zig/AstGen.zig b/lib/std/zig/AstGen.zig
index 6aee6880b3..c7f2426b0a 100644
--- a/lib/std/zig/AstGen.zig
+++ b/lib/std/zig/AstGen.zig
@@ -2956,6 +2956,7 @@ fn addEnsureResult(gz: *GenZir, maybe_unused_result: Zir.Inst.Ref, statement: As
.extended => switch (gz.astgen.instructions.items(.data)[@intFromEnum(inst)].extended.opcode) {
.breakpoint,
.disable_instrumentation,
+ .disable_intrinsics,
.set_float_mode,
.branch_hint,
=> break :b true,
@@ -9578,6 +9579,7 @@ fn builtinCall(
.frame_address => return rvalue(gz, ri, try gz.addNodeExtended(.frame_address, node), node),
.breakpoint => return rvalue(gz, ri, try gz.addNodeExtended(.breakpoint, node), node),
.disable_instrumentation => return rvalue(gz, ri, try gz.addNodeExtended(.disable_instrumentation, node), node),
+ .disable_intrinsics => return rvalue(gz, ri, try gz.addNodeExtended(.disable_intrinsics, node), node),
.type_info => return simpleUnOpType(gz, scope, ri, node, params[0], .type_info),
.size_of => return simpleUnOpType(gz, scope, ri, node, params[0], .size_of),
diff --git a/lib/std/zig/AstRlAnnotate.zig b/lib/std/zig/AstRlAnnotate.zig
index e790612505..ccc23b18aa 100644
--- a/lib/std/zig/AstRlAnnotate.zig
+++ b/lib/std/zig/AstRlAnnotate.zig
@@ -882,6 +882,7 @@ fn builtinCall(astrl: *AstRlAnnotate, block: ?*Block, ri: ResultInfo, node: Ast.
.frame,
.breakpoint,
.disable_instrumentation,
+ .disable_intrinsics,
.in_comptime,
.panic,
.trap,
diff --git a/lib/std/zig/BuiltinFn.zig b/lib/std/zig/BuiltinFn.zig
index 7ad5bb1a87..1bf31cd165 100644
--- a/lib/std/zig/BuiltinFn.zig
+++ b/lib/std/zig/BuiltinFn.zig
@@ -15,6 +15,7 @@ pub const Tag = enum {
branch_hint,
breakpoint,
disable_instrumentation,
+ disable_intrinsics,
mul_add,
byte_swap,
bit_reverse,
@@ -263,6 +264,14 @@ pub const list = list: {
},
},
.{
+ "@disableIntrinsics",
+ .{
+ .tag = .disable_intrinsics,
+ .param_count = 0,
+ .illegal_outside_function = true,
+ },
+ },
+ .{
"@mulAdd",
.{
.tag = .mul_add,
diff --git a/lib/std/zig/Zir.zig b/lib/std/zig/Zir.zig
index 32872eeabc..5d013635cb 100644
--- a/lib/std/zig/Zir.zig
+++ b/lib/std/zig/Zir.zig
@@ -1587,7 +1587,11 @@ pub const Inst = struct {
=> false,
.extended => switch (data.extended.opcode) {
- .branch_hint, .breakpoint, .disable_instrumentation => true,
+ .branch_hint,
+ .breakpoint,
+ .disable_instrumentation,
+ .disable_intrinsics,
+ => true,
else => false,
},
};
@@ -2004,6 +2008,8 @@ pub const Inst = struct {
breakpoint,
/// Implement builtin `@disableInstrumentation`. `operand` is `src_node: i32`.
disable_instrumentation,
+ /// Implement builtin `@disableIntrinsics`. `operand` is `src_node: i32`.
+ disable_intrinsics,
/// Implements the `@select` builtin.
/// `operand` is payload index to `Select`.
select,
@@ -4332,6 +4338,7 @@ fn findTrackableInner(
.await_nosuspend,
.breakpoint,
.disable_instrumentation,
+ .disable_intrinsics,
.select,
.int_from_error,
.error_from_int,
diff --git a/lib/zig.h b/lib/zig.h
index c9baa6e766..2d9e7a5626 100644
--- a/lib/zig.h
+++ b/lib/zig.h
@@ -223,6 +223,12 @@
#define zig_restrict
#endif
+#if zig_has_attribute(no_builtin)
+#define zig_no_builtin __attribute__((no_builtin))
+#else
+#define zig_no_builtin
+#endif
+
#if zig_has_attribute(aligned) || defined(zig_tinyc)
#define zig_under_align(alignment) __attribute__((aligned(alignment)))
#elif defined(zig_msvc)