summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source/slang/slang-ir-extract-value-from-type.cpp13
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;