From 95ca2aa72cca9968dabd6dfa1a4dcf7de3909035 Mon Sep 17 00:00:00 2001 From: kaizhangNV <149626564+kaizhangNV@users.noreply.github.com> Date: Tue, 30 Apr 2024 11:23:11 -0700 Subject: Change stdlib to not depend on short-circuit (#4056) Do not use "&&" to implement the intrinsic kIROp_And, instead define a 'and' function in stdlib. So it will be up to us to determine whether we want to use 'short-circuit' behavior in stdlib. --- source/slang/core.meta.slang | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'source/slang/core.meta.slang') diff --git a/source/slang/core.meta.slang b/source/slang/core.meta.slang index 85d530254..6e4c06d7c 100644 --- a/source/slang/core.meta.slang +++ b/source/slang/core.meta.slang @@ -572,7 +572,7 @@ ${{{{ __intrinsic_op($(kIROp_Rsh)) This shr(int other); __intrinsic_op($(kIROp_BitAnd)) This bitAnd(This other); __intrinsic_op($(kIROp_BitOr)) This bitOr(This other); - [__unsafeForceInlineEarly] This and(This other) {return __intCast(__intCast(this) && __intCast(other)); } + [__unsafeForceInlineEarly] This and(This other) {return __intCast(and(__intCast(this), __intCast(other))); } [__unsafeForceInlineEarly] This or(This other) {return __intCast(__intCast(this) || __intCast(other)); } __intrinsic_op($(kIROp_BitXor)) This bitXor(This other); __intrinsic_op($(kIROp_BitNot)) This bitNot(); @@ -2228,6 +2228,14 @@ T operator &&(T v0, T v1) { return v0.and(v1); } + +[__unsafeForceInlineEarly] +[OverloadRank(-10)] +bool and(bool v0, bool v1) +{ + return __and(v0, v1); +} + __generic [__unsafeForceInlineEarly] [OverloadRank(-10)] -- cgit v1.2.3