72 int sign = mpz_sgn (
m_val);
81 memset (buf.data (), 0, buf.size ());
85 gdb_assert (buf.size () > 0);
93 const size_t max_usable_bits = buf.size () * HOST_CHAR_BIT;
98 mpz_ui_pow_ui (hi.
m_val, 2, max_usable_bits);
103 mpz_ui_pow_ui (lo.
m_val, 2, max_usable_bits - 1);
106 mpz_ui_pow_ui (hi.
m_val, 2, max_usable_bits - 1);
111 error (_(
"Cannot export value %s as %zu-bits %s integer"
112 " (must be between %s and %s)"),
113 this->
str ().c_str (),
115 unsigned_p ? _(
"unsigned") : _(
"signed"),
120 const gdb_mpz *exported_val =
this;
128 un_signed = *exported_val + neg_offset;
129 exported_val = &un_signed;
134 && mpz_sizeinbase (exported_val->
m_val, 2) > buf.size () * HOST_CHAR_BIT)
137 if (exported_val != &un_signed)
139 un_signed = *exported_val;
140 exported_val = &un_signed;
143 un_signed.
mask (buf.size () * HOST_CHAR_BIT);
148 if (exported_val->
sgn () == 0)
150 memset (buf.data (), 0, buf.size ());
165 gdb::unique_xmalloc_ptr<void> exported
166 (mpz_export (NULL, &word_countp, -1 , buf.size () ,
167 endian, 0 , exported_val->
m_val));
169 gdb_assert (word_countp == 1);
171 memcpy (buf.data (), exported.get (), buf.size ());