diff options
Diffstat (limited to 'source/slang')
| -rw-r--r-- | source/slang/core.meta.slang | 88 | ||||
| -rw-r--r-- | source/slang/slang-stdlib.cpp | 2 |
2 files changed, 86 insertions, 4 deletions
diff --git a/source/slang/core.meta.slang b/source/slang/core.meta.slang index 716a93328..65da2af92 100644 --- a/source/slang/core.meta.slang +++ b/source/slang/core.meta.slang @@ -1727,6 +1727,92 @@ for (auto op : intrinsicBinaryOps) } } +// We will declare the shift operations entirely as generics +// rather than try to handle all the pairings of left-hand +// and right-hand side types. +// +static const struct ShiftOpInfo +{ + char const* name; + int op; +} kShiftOps[] = +{ + { "<<", kIROp_Lsh }, + { ">>", kIROp_Rsh }, +}; +for(auto info : kShiftOps) { +}}}} + +__generic<L: __BuiltinIntegerType, R: __BuiltinIntegerType> +__intrinsic_op($(info.op)) +L operator$(info.name)(L left, R right); + +__generic<L: __BuiltinIntegerType, R: __BuiltinIntegerType> +[__unsafeForceInlineEarly] +L operator$(info.name)=(in out L left, R right) +{ + left = left $(info.name) right; + return left; +} + +__generic<L: __BuiltinIntegerType, R: __BuiltinIntegerType, let N : int> +__intrinsic_op($(info.op)) +vector<L,N> operator$(info.name)(vector<L,N> left, vector<R,N> right); + +__generic<L: __BuiltinIntegerType, R: __BuiltinIntegerType, let N : int> +[__unsafeForceInlineEarly] +vector<L,N> operator$(info.name)=(in out vector<L,N> left, vector<R,N> right) +{ + left = left $(info.name) right; + return left; +} + +__generic<L: __BuiltinIntegerType, R: __BuiltinIntegerType, let N : int, let M : int> +__intrinsic_op($(info.op)) +matrix<L,N,M> operator$(info.name)(matrix<L,N,M> left, matrix<R,N,M> right); + +__generic<L: __BuiltinIntegerType, R: __BuiltinIntegerType, let N : int, let M : int> +[__unsafeForceInlineEarly] +matrix<L, N, M> operator$(info.name)=(in out matrix<L, N, M> left, matrix<R, N, M> right) +{ + left = left $(info.name) right; + return left; +} + +__generic<L: __BuiltinIntegerType, R: __BuiltinIntegerType, let N : int> +__intrinsic_op($(info.op)) +vector<L,N> operator$(info.name)(L left, vector<R,N> right); + +__generic<L: __BuiltinIntegerType, R: __BuiltinIntegerType, let N : int, let M : int> +__intrinsic_op($(info.op)) +matrix<L,N,M> operator$(info.name)(L left, matrix<R,N,M> right); + +__generic<L: __BuiltinIntegerType, R: __BuiltinIntegerType, let N : int> +__intrinsic_op($(info.op)) +vector<L,N> operator$(info.name)(vector<L,N> left, R right); + +__generic<L: __BuiltinIntegerType, R: __BuiltinIntegerType, let N : int> +[__unsafeForceInlineEarly] +vector<L, N> operator$(info.name)=(in out vector<L, N> left, R right) +{ + left = left $(info.name) right; + return left; +} + +__generic<L: __BuiltinIntegerType, R: __BuiltinIntegerType, let N : int, let M : int> +__intrinsic_op($(info.op)) +matrix<L,N,M> operator$(info.name)(matrix<L,N,M> left, R right); + +__generic<L: __BuiltinIntegerType, R: __BuiltinIntegerType, let N : int, let M : int> +[__unsafeForceInlineEarly] +matrix<L,N,M> operator$(info.name)=(in out matrix<L,N,M> left, R right) +{ + left = left $(info.name) right; + return left; +} + +${{{{ +} static const struct CompoundBinaryOpInfo { @@ -1743,8 +1829,6 @@ for (auto op : intrinsicBinaryOps) { "&", "__BuiltinLogicalType" }, { "|", "__BuiltinLogicalType" }, { "^", "__BuiltinLogicalType" }, - { "<<", "__BuiltinIntegerType" }, - { ">>", "__BuiltinIntegerType" }, }; for( auto op : kCompoundBinaryOps ) { diff --git a/source/slang/slang-stdlib.cpp b/source/slang/slang-stdlib.cpp index a310ba748..e0727f19a 100644 --- a/source/slang/slang-stdlib.cpp +++ b/source/slang/slang-stdlib.cpp @@ -208,8 +208,6 @@ namespace Slang { kIROp_BitAnd, "&", "__BuiltinLogicalType", LOGICAL_MASK }, { kIROp_BitOr, "|", "__BuiltinLogicalType", LOGICAL_MASK }, { kIROp_BitXor, "^", "__BuiltinLogicalType", LOGICAL_MASK }, - { kIROp_Lsh, "<<", "__BuiltinIntegerType", INT_MASK }, - { kIROp_Rsh, ">>", "__BuiltinIntegerType", INT_MASK }, { kIROp_Eql, "==", "__BuiltinType", ANY_MASK | BOOL_RESULT }, { kIROp_Neq, "!=", "__BuiltinType", ANY_MASK | BOOL_RESULT }, { kIROp_Greater, ">", "__BuiltinArithmeticType", ARITHMETIC_MASK | BOOL_RESULT }, |
