@@ -375,6 +375,25 @@ struct AnyValueMarshallingContext
375
375
}
376
376
case kIROp_Int8Type :
377
377
case kIROp_UInt8Type :
378
+ if (fieldOffset < static_cast <uint32_t >(anyValInfo->fieldKeys .getCount ()))
379
+ {
380
+ auto srcVal = builder->emitLoad (concreteVar);
381
+ srcVal = builder->emitCast (builder->getType (kIROp_UIntType ), srcVal);
382
+ auto dstAddr = builder->emitFieldAddress (
383
+ uintPtrType,
384
+ anyValueVar,
385
+ anyValInfo->fieldKeys [fieldOffset]);
386
+ auto dstVal = builder->emitLoad (dstAddr);
387
+ dstVal = builder->emitBitfieldInsert (
388
+ dstVal->getFullType (),
389
+ dstVal,
390
+ srcVal,
391
+ builder->getIntValue (builder->getUIntType (), 8 * intraFieldOffset),
392
+ builder->getIntValue (builder->getUIntType (), 8 ));
393
+ builder->emitStore (dstAddr, dstVal);
394
+ }
395
+ advanceOffset (1 );
396
+ break ;
378
397
case kIROp_UInt64Type :
379
398
case kIROp_Int64Type :
380
399
case kIROp_DoubleType :
@@ -600,11 +619,35 @@ struct AnyValueMarshallingContext
600
619
advanceOffset (2 );
601
620
break ;
602
621
}
622
+ case kIROp_Int8Type :
623
+ case kIROp_UInt8Type :
624
+ if (fieldOffset < static_cast <uint32_t >(anyValInfo->fieldKeys .getCount ()))
625
+ {
626
+ auto srcAddr = builder->emitFieldAddress (
627
+ uintPtrType,
628
+ anyValueVar,
629
+ anyValInfo->fieldKeys [fieldOffset]);
630
+ auto srcVal = builder->emitLoad (srcAddr);
631
+ srcVal = builder->emitBitfieldExtract (
632
+ srcVal->getFullType (),
633
+ srcVal,
634
+ builder->getIntValue (builder->getUIntType (), 8 * intraFieldOffset),
635
+ builder->getIntValue (builder->getUIntType (), 8 ));
636
+ if (dataType->getOp () == kIROp_Int8Type )
637
+ {
638
+ srcVal = builder->emitCast (builder->getType (kIROp_Int8Type ), srcVal);
639
+ }
640
+ else
641
+ {
642
+ srcVal = builder->emitCast (builder->getType (kIROp_UInt8Type ), srcVal);
643
+ }
644
+ builder->emitStore (concreteVar, srcVal);
645
+ }
646
+ advanceOffset (1 );
647
+ break ;
603
648
case kIROp_UInt64Type :
604
649
case kIROp_Int64Type :
605
650
case kIROp_DoubleType :
606
- case kIROp_Int8Type :
607
- case kIROp_UInt8Type :
608
651
case kIROp_PtrType :
609
652
#if SLANG_PTR_IS_64
610
653
case kIROp_IntPtrType :
@@ -832,7 +875,7 @@ SlangInt _getAnyValueSizeRaw(IRType* type, SlangInt offset)
832
875
return alignUp (offset, 2 ) + 2 ;
833
876
case kIROp_UInt8Type :
834
877
case kIROp_Int8Type :
835
- return - 1 ;
878
+ return offset + 1 ;
836
879
case kIROp_VectorType :
837
880
{
838
881
auto vectorType = static_cast <IRVectorType*>(type);
0 commit comments