@@ -127,7 +127,7 @@ bool RegisterValue::GetScalarValue(Scalar &scalar) const {
127127 case eTypeUInt16:
128128 case eTypeUInt32:
129129 case eTypeUInt64:
130- case eTypeUInt128 :
130+ case eTypeUIntN :
131131 case eTypeFloat:
132132 case eTypeDouble:
133133 case eTypeLongDouble:
@@ -180,8 +180,6 @@ Status RegisterValue::SetValueFromData(const RegisterInfo ®_info,
180180 if (src_len > reg_info.byte_size )
181181 src_len = reg_info.byte_size ;
182182
183- type128 int128;
184-
185183 m_type = eTypeInvalid;
186184 switch (reg_info.encoding ) {
187185 case eEncodingInvalid:
@@ -196,17 +194,15 @@ Status RegisterValue::SetValueFromData(const RegisterInfo ®_info,
196194 SetUInt32 (src.GetMaxU32 (&src_offset, src_len));
197195 else if (reg_info.byte_size <= 8 )
198196 SetUInt64 (src.GetMaxU64 (&src_offset, src_len));
199- else if (reg_info.byte_size <= 16 ) {
200- uint64_t data1 = src.GetU64 (&src_offset);
201- uint64_t data2 = src.GetU64 (&src_offset);
202- if (src.GetByteOrder () == eByteOrderLittle) {
203- int128.x [0 ] = data1;
204- int128.x [1 ] = data2;
205- } else {
206- int128.x [0 ] = data2;
207- int128.x [1 ] = data1;
208- }
209- SetUInt128 (llvm::APInt (128 , int128.x ));
197+ else {
198+ std::vector<uint8_t > native_endian_src (src_len, 0 );
199+ src.ExtractBytes (src_offset, src_len,
200+ llvm::sys::IsLittleEndianHost ? eByteOrderLittle
201+ : eByteOrderBig,
202+ native_endian_src.data ());
203+ llvm::APInt uint = llvm::APInt::getZero (src_len * 8 );
204+ llvm::LoadIntFromMemory (uint, native_endian_src.data (), src_len);
205+ SetUIntN (uint);
210206 }
211207 break ;
212208 case eEncodingIEEE754:
@@ -442,7 +438,7 @@ bool RegisterValue::SignExtend(uint32_t sign_bitpos) {
442438 case eTypeUInt16:
443439 case eTypeUInt32:
444440 case eTypeUInt64:
445- case eTypeUInt128 :
441+ case eTypeUIntN :
446442 return m_scalar.SignExtend (sign_bitpos);
447443 case eTypeFloat:
448444 case eTypeDouble:
@@ -465,7 +461,7 @@ bool RegisterValue::CopyValue(const RegisterValue &rhs) {
465461 case eTypeUInt16:
466462 case eTypeUInt32:
467463 case eTypeUInt64:
468- case eTypeUInt128 :
464+ case eTypeUIntN :
469465 case eTypeFloat:
470466 case eTypeDouble:
471467 case eTypeLongDouble:
@@ -581,7 +577,7 @@ llvm::APInt RegisterValue::GetAsUInt128(const llvm::APInt &fail_value,
581577 case eTypeUInt16:
582578 case eTypeUInt32:
583579 case eTypeUInt64:
584- case eTypeUInt128 :
580+ case eTypeUIntN :
585581 case eTypeFloat:
586582 case eTypeDouble:
587583 case eTypeLongDouble:
@@ -616,7 +612,7 @@ float RegisterValue::GetAsFloat(float fail_value, bool *success_ptr) const {
616612 break ;
617613 case eTypeUInt32:
618614 case eTypeUInt64:
619- case eTypeUInt128 :
615+ case eTypeUIntN :
620616 case eTypeFloat:
621617 case eTypeDouble:
622618 case eTypeLongDouble:
@@ -636,7 +632,7 @@ double RegisterValue::GetAsDouble(double fail_value, bool *success_ptr) const {
636632
637633 case eTypeUInt32:
638634 case eTypeUInt64:
639- case eTypeUInt128 :
635+ case eTypeUIntN :
640636 case eTypeFloat:
641637 case eTypeDouble:
642638 case eTypeLongDouble:
@@ -657,7 +653,7 @@ long double RegisterValue::GetAsLongDouble(long double fail_value,
657653
658654 case eTypeUInt32:
659655 case eTypeUInt64:
660- case eTypeUInt128 :
656+ case eTypeUIntN :
661657 case eTypeFloat:
662658 case eTypeDouble:
663659 case eTypeLongDouble:
@@ -676,7 +672,7 @@ const void *RegisterValue::GetBytes() const {
676672 case eTypeUInt16:
677673 case eTypeUInt32:
678674 case eTypeUInt64:
679- case eTypeUInt128 :
675+ case eTypeUIntN :
680676 case eTypeFloat:
681677 case eTypeDouble:
682678 case eTypeLongDouble:
@@ -698,7 +694,7 @@ uint32_t RegisterValue::GetByteSize() const {
698694 return 2 ;
699695 case eTypeUInt32:
700696 case eTypeUInt64:
701- case eTypeUInt128 :
697+ case eTypeUIntN :
702698 case eTypeFloat:
703699 case eTypeDouble:
704700 case eTypeLongDouble:
@@ -721,7 +717,7 @@ bool RegisterValue::SetUInt(uint64_t uint, uint32_t byte_size) {
721717 } else if (byte_size <= 8 ) {
722718 SetUInt64 (uint);
723719 } else if (byte_size <= 16 ) {
724- SetUInt128 (llvm::APInt (128 , uint));
720+ SetUIntN (llvm::APInt (128 , uint));
725721 } else
726722 return false ;
727723 return true ;
@@ -749,7 +745,7 @@ bool RegisterValue::operator==(const RegisterValue &rhs) const {
749745 case eTypeUInt16:
750746 case eTypeUInt32:
751747 case eTypeUInt64:
752- case eTypeUInt128 :
748+ case eTypeUIntN :
753749 case eTypeFloat:
754750 case eTypeDouble:
755751 case eTypeLongDouble:
@@ -774,7 +770,7 @@ bool RegisterValue::ClearBit(uint32_t bit) {
774770 case eTypeUInt16:
775771 case eTypeUInt32:
776772 case eTypeUInt64:
777- case eTypeUInt128 :
773+ case eTypeUIntN :
778774 if (bit < (GetByteSize () * 8 )) {
779775 return m_scalar.ClearBit (bit);
780776 }
@@ -814,7 +810,7 @@ bool RegisterValue::SetBit(uint32_t bit) {
814810 case eTypeUInt16:
815811 case eTypeUInt32:
816812 case eTypeUInt64:
817- case eTypeUInt128 :
813+ case eTypeUIntN :
818814 if (bit < (GetByteSize () * 8 )) {
819815 return m_scalar.SetBit (bit);
820816 }
0 commit comments