diff options
| -rw-r--r-- | source/slang/slang-ir-extract-value-from-type.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/source/slang/slang-ir-extract-value-from-type.cpp b/source/slang/slang-ir-extract-value-from-type.cpp index 8f72c1623..1e70a28c9 100644 --- a/source/slang/slang-ir-extract-value-from-type.cpp +++ b/source/slang/slang-ir-extract-value-from-type.cpp @@ -331,12 +331,21 @@ IRInst* extractMultiByteValueAtOffset( src, restSize, offset + firstHalfSize); + + auto resultType = builder.getUIntType(); + if (size > 4) + { + resultType = builder.getUInt64Type(); + firstHalf = builder.emitCast(resultType, firstHalf); + secondHalf = builder.emitCast(resultType, secondHalf); + } + uint32_t shift = firstHalfSize * 8; auto resultValue = builder.emitBitOr( - builder.getUIntType(), + resultType, firstHalf, builder.emitShl( - builder.getUIntType(), + resultType, secondHalf, builder.getIntValue(builder.getUIntType(), shift))); return resultValue; |
