const uint8_t *bytes;
static float_t flt_val;
static double_t dbl_val;
- static uint64_t swapped_words[4];
+ static uint64_t swapped_words[8];
switch (m_type) {
case e_void:
break;
apint_words = swapped_words;
}
return reinterpret_cast<const void *>(apint_words);
+ case e_sint512:
+ case e_uint512:
+ apint_words = m_integer.getRawData();
+ // getRawData always returns a pointer to an array of four uint64_t values,
+ // where the least-significant word always comes first. On big-endian
+ // systems we need to swap the four words.
+ if (endian::InlHostByteOrder() == eByteOrderBig) {
+ swapped_words[0] = apint_words[7];
+ swapped_words[1] = apint_words[6];
+ swapped_words[2] = apint_words[5];
+ swapped_words[3] = apint_words[4];
+ swapped_words[4] = apint_words[3];
+ swapped_words[5] = apint_words[2];
+ swapped_words[6] = apint_words[1];
+ swapped_words[7] = apint_words[0];
+ apint_words = swapped_words;
+ }
+ return reinterpret_cast<const void *>(apint_words);
case e_float:
flt_val = m_float.convertToFloat();
return reinterpret_cast<const void *>(&flt_val);
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
return (m_integer.getBitWidth() / 8);
case e_float:
return sizeof(float_t);
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_uint512:
+ case e_sint512:
return llvm::APInt::isSameValue(zero_int, m_integer);
case e_float:
case e_double:
case e_slonglong:
case e_sint128:
case e_sint256:
+ case e_sint512:
s->PutCString(m_integer.toString(10, true));
break;
case e_uint:
case e_ulonglong:
case e_uint128:
case e_uint256:
+ case e_uint512:
s->PutCString(m_integer.toString(10, false));
break;
case e_float:
return "int256_t";
case e_uint256:
return "unsigned int256_t";
+ case e_sint512:
+ return "int512_t";
+ case e_uint512:
+ return "unsigned int512_t";
case e_float:
return "float";
case e_double:
else
m_type = e_uint256;
break;
+ case 512:
+ if (m_integer.isSignedIntN(BITWIDTH_INT512))
+ m_type = e_sint512;
+ else
+ m_type = e_uint512;
+ break;
}
return *this;
}
success = true;
break;
+ case e_sint512:
+ case e_uint512:
+ m_integer = m_integer.sextOrTrunc(BITWIDTH_INT512);
+ success = true;
+ break;
+
case e_float:
m_float = llvm::APFloat(llvm::APFloat::IEEEsingle());
m_float.convertFromAPInt(m_integer, true,
success = true;
break;
+ case e_sint512:
+ case e_uint512:
+ m_integer = m_integer.zextOrTrunc(BITWIDTH_INT512);
+ success = true;
+ break;
+
case e_float:
m_float = llvm::APFloat(llvm::APFloat::IEEEsingle());
m_float.convertFromAPInt(m_integer, false,
success = true;
break;
+ case e_sint512:
+ case e_uint512:
+ m_integer = m_integer.sextOrTrunc(BITWIDTH_INT512);
+ success = true;
+ break;
+
case e_float:
m_float = llvm::APFloat(llvm::APFloat::IEEEsingle());
m_float.convertFromAPInt(m_integer, true,
success = true;
break;
+ case e_sint512:
+ case e_uint512:
+ m_integer = m_integer.zextOrTrunc(BITWIDTH_INT512);
+ success = true;
+ break;
+
case e_float:
m_float = llvm::APFloat(llvm::APFloat::IEEEsingle());
m_float.convertFromAPInt(m_integer, false,
success = true;
break;
+ case e_sint512:
+ case e_uint512:
+ m_integer = m_integer.sextOrTrunc(BITWIDTH_INT512);
+ success = true;
+ break;
+
case e_float:
m_float = llvm::APFloat(llvm::APFloat::IEEEsingle());
m_float.convertFromAPInt(m_integer, true,
success = true;
break;
+ case e_sint512:
+ case e_uint512:
+ m_integer = m_integer.zextOrTrunc(BITWIDTH_INT512);
+ success = true;
+ break;
+
case e_float:
m_float = llvm::APFloat(llvm::APFloat::IEEEsingle());
m_float.convertFromAPInt(m_integer, false,
success = true;
break;
+ case e_sint512:
+ case e_uint512:
+ m_integer = m_integer.sextOrTrunc(BITWIDTH_INT512);
+ success = true;
+ break;
+
case e_float:
m_float = llvm::APFloat(llvm::APFloat::IEEEsingle());
m_float.convertFromAPInt(m_integer, true,
success = true;
break;
+ case e_sint512:
+ case e_uint512:
+ m_integer = m_integer.zextOrTrunc(BITWIDTH_INT512);
+ success = true;
+ break;
+
case e_float:
m_float = llvm::APFloat(llvm::APFloat::IEEEsingle());
m_float.convertFromAPInt(m_integer, false,
success = true;
break;
+ case e_sint512:
+ case e_uint512:
+ m_integer = m_integer.zextOrTrunc(BITWIDTH_INT512);
+ success = true;
+ break;
+
case e_float:
m_float = llvm::APFloat(llvm::APFloat::IEEEsingle());
m_float.convertFromAPInt(m_integer, true,
case e_uint256:
success = true;
break;
+
+ case e_sint512:
+ case e_uint512:
+ m_integer = m_integer.zextOrTrunc(BITWIDTH_INT512);
+ success = true;
+ break;
+
case e_float:
m_float = llvm::APFloat(llvm::APFloat::IEEEsingle());
m_float.convertFromAPInt(m_integer, false,
}
break;
+ case e_sint512:
+ case e_uint512:
+ lldbassert(false && "unimplemented");
+ break;
+
case e_float:
switch (type) {
case e_void:
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_uint512:
+ case e_sint512:
break;
case e_float:
success = true;
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
case e_float:
break;
case e_double:
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
case e_float:
case e_double:
break;
return "int256_t";
case e_uint256:
return "uint256_t";
+ case e_sint512:
+ return "int512_t";
+ case e_uint512:
+ return "uint512_t";
}
return "???";
}
m_type = e_sint256;
success = true;
break;
+ case e_sint512:
+ success = true;
+ break;
+ case e_uint512:
+ m_type = e_sint512;
+ success = true;
+ break;
case e_float:
success = true;
break;
case e_uint256:
success = true;
break;
+ case e_sint512:
+ m_type = e_uint512;
+ success = true;
+ break;
+ case e_uint512:
+ success = true;
+ break;
case e_float:
success = true;
break;
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
return (schar_t)(m_integer.sextOrTrunc(sizeof(schar_t) * 8)).getSExtValue();
case e_float:
return (schar_t)m_float.convertToFloat();
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
return (uchar_t)(m_integer.zextOrTrunc(sizeof(uchar_t) * 8)).getZExtValue();
case e_float:
return (uchar_t)m_float.convertToFloat();
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
return (sshort_t)(m_integer.sextOrTrunc(sizeof(sshort_t) * 8))
.getSExtValue();
case e_float:
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
return (ushort_t)(m_integer.zextOrTrunc(sizeof(ushort_t) * 8))
.getZExtValue();
case e_float:
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
return (sint_t)(m_integer.sextOrTrunc(sizeof(sint_t) * 8)).getSExtValue();
case e_float:
return (sint_t)m_float.convertToFloat();
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
return (uint_t)(m_integer.zextOrTrunc(sizeof(uint_t) * 8)).getZExtValue();
case e_float:
return (uint_t)m_float.convertToFloat();
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
return (slong_t)(m_integer.sextOrTrunc(sizeof(slong_t) * 8)).getSExtValue();
case e_float:
return (slong_t)m_float.convertToFloat();
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
return (ulong_t)(m_integer.zextOrTrunc(sizeof(ulong_t) * 8)).getZExtValue();
case e_float:
return (ulong_t)m_float.convertToFloat();
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
return (slonglong_t)(m_integer.sextOrTrunc(sizeof(slonglong_t) * 8))
.getSExtValue();
case e_float:
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
return (ulonglong_t)(m_integer.zextOrTrunc(sizeof(ulonglong_t) * 8))
.getZExtValue();
case e_float:
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
return m_integer;
case e_float:
case e_double:
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
return m_integer;
case e_float:
case e_double:
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_uint512:
+ case e_sint512:
return m_integer;
case e_float:
case e_double:
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
return m_integer;
case e_float:
case e_double:
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
return llvm::APIntOps::RoundAPIntToFloat(m_integer);
case e_float:
return m_float.convertToFloat();
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
return llvm::APIntOps::RoundAPIntToDouble(m_integer);
case e_float:
return (double_t)m_float.convertToFloat();
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
return (long_double_t)llvm::APIntOps::RoundAPIntToDouble(m_integer);
case e_float:
return (long_double_t)m_float.convertToFloat();
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
m_integer = a->m_integer + b->m_integer;
break;
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
switch (rhs.m_type) {
case e_void:
case e_float:
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
m_integer = m_integer << rhs.m_integer;
break;
}
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
switch (rhs.m_type) {
case e_void:
case e_float:
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
m_integer = m_integer.lshr(rhs.m_integer);
break;
}
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
switch (rhs.m_type) {
case e_void:
case e_float:
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
m_integer = m_integer.ashr(rhs.m_integer);
break;
}
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
switch (rhs.m_type) {
case e_void:
case e_float:
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
m_integer &= rhs.m_integer;
break;
}
case e_slonglong:
case e_sint128:
case e_sint256:
+ case e_sint512:
if (m_integer.isNegative())
m_integer = -m_integer;
return true;
return true;
case e_uint128:
case e_uint256:
+ case e_uint512:
case e_float:
case e_double:
case e_long_double:
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
m_integer = -m_integer;
return true;
case e_float:
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
m_integer = ~m_integer;
return true;
case Scalar::e_uint128:
case Scalar::e_sint256:
case Scalar::e_uint256:
+ case Scalar::e_sint512:
+ case Scalar::e_uint512:
result.m_integer = a->m_integer + b->m_integer;
break;
case Scalar::e_float:
case Scalar::e_uint128:
case Scalar::e_sint256:
case Scalar::e_uint256:
+ case Scalar::e_sint512:
+ case Scalar::e_uint512:
result.m_integer = a->m_integer - b->m_integer;
break;
case Scalar::e_float:
case Scalar::e_slonglong:
case Scalar::e_sint128:
case Scalar::e_sint256:
+ case Scalar::e_sint512:
if (b->m_integer != 0) {
result.m_integer = a->m_integer.sdiv(b->m_integer);
return result;
case Scalar::e_ulonglong:
case Scalar::e_uint128:
case Scalar::e_uint256:
+ case Scalar::e_uint512:
if (b->m_integer != 0) {
result.m_integer = a->m_integer.udiv(b->m_integer);
return result;
case Scalar::e_uint128:
case Scalar::e_sint256:
case Scalar::e_uint256:
+ case Scalar::e_sint512:
+ case Scalar::e_uint512:
result.m_integer = a->m_integer * b->m_integer;
break;
case Scalar::e_float:
case Scalar::e_uint128:
case Scalar::e_sint256:
case Scalar::e_uint256:
+ case Scalar::e_sint512:
+ case Scalar::e_uint512:
result.m_integer = a->m_integer & b->m_integer;
break;
case Scalar::e_void:
case Scalar::e_uint128:
case Scalar::e_sint256:
case Scalar::e_uint256:
+ case Scalar::e_sint512:
+ case Scalar::e_uint512:
result.m_integer = a->m_integer | b->m_integer;
break;
case Scalar::e_slonglong:
case Scalar::e_sint128:
case Scalar::e_sint256:
+ case Scalar::e_sint512:
if (b->m_integer != 0) {
result.m_integer = a->m_integer.srem(b->m_integer);
return result;
case Scalar::e_ulonglong:
case Scalar::e_uint128:
case Scalar::e_uint256:
+ case Scalar::e_uint512:
if (b->m_integer != 0) {
result.m_integer = a->m_integer.urem(b->m_integer);
return result;
case Scalar::e_uint128:
case Scalar::e_sint256:
case Scalar::e_uint256:
+ case Scalar::e_sint512:
+ case Scalar::e_uint512:
result.m_integer = a->m_integer ^ b->m_integer;
break;
case Scalar::e_uint128:
case Scalar::e_sint256:
case Scalar::e_uint256:
+ case Scalar::e_sint512:
+ case Scalar::e_uint512:
if (max_bit_pos == sign_bit_pos)
return true;
else if (sign_bit_pos < (max_bit_pos - 1)) {
case Scalar::e_slonglong:
case Scalar::e_sint128:
case Scalar::e_sint256:
+ case Scalar::e_sint512:
m_integer = m_integer.ashr(bit_offset)
.sextOrTrunc(bit_size)
.sextOrSelf(8 * GetByteSize());
case Scalar::e_ulonglong:
case Scalar::e_uint128:
case Scalar::e_uint256:
+ case Scalar::e_uint512:
m_integer = m_integer.lshr(bit_offset)
.zextOrTrunc(bit_size)
.zextOrSelf(8 * GetByteSize());
case Scalar::e_uint128:
case Scalar::e_sint256:
case Scalar::e_uint256:
+ case Scalar::e_sint512:
+ case Scalar::e_uint512:
return a->m_integer == b->m_integer;
case Scalar::e_float:
case Scalar::e_double:
case Scalar::e_slonglong:
case Scalar::e_sint128:
case Scalar::e_sint256:
+ case Scalar::e_sint512:
+ case Scalar::e_uint512:
return a->m_integer.slt(b->m_integer);
case Scalar::e_uint:
case Scalar::e_ulong:
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
m_integer.clearBit(bit);
return true;
case e_float:
case e_uint128:
case e_sint256:
case e_uint256:
+ case e_sint512:
+ case e_uint512:
m_integer.setBit(bit);
return true;
case e_float: