aboutsummaryrefslogtreecommitdiffstats
path: root/cparser/Bitfields.ml
diff options
context:
space:
mode:
authorBernhard Schommer <bernhardschommer@gmail.com>2017-02-08 16:07:16 +0100
committerBernhard Schommer <bernhardschommer@gmail.com>2017-02-08 16:07:16 +0100
commit42adde29c69ea99256a4303503dd5b30f978f172 (patch)
tree83f6da1e73ce032ab611fc7139d5142a0bd5f46a /cparser/Bitfields.ml
parent6b0dbab6d1315ae3b0df26d034bce771f743af85 (diff)
downloadcompcert-42adde29c69ea99256a4303503dd5b30f978f172.tar.gz
compcert-42adde29c69ea99256a4303503dd5b30f978f172.zip
Revert broken change to Cutil.
The optional hex parameter only worked if the intconstant was also of unsigned kind. Hence it is better to have one function in Bitfields for this.
Diffstat (limited to 'cparser/Bitfields.ml')
-rw-r--r--cparser/Bitfields.ml8
1 files changed, 6 insertions, 2 deletions
diff --git a/cparser/Bitfields.ml b/cparser/Bitfields.ml
index 2431a0bd..35da5d4e 100644
--- a/cparser/Bitfields.ml
+++ b/cparser/Bitfields.ml
@@ -195,13 +195,17 @@ let right_shift_count bf =
(Int64.of_int (8 * !config.sizeof_int - bf.bf_size))
IInt
+let uintconst_hex v =
+ { edesc = EConst(CInt(v, IUInt, Printf.sprintf "0x%LXU" v));
+ etyp = TInt(IUInt, []) }
+
let insertion_mask bf =
let m =
Int64.shift_left
(Int64.pred (Int64.shift_left 1L bf.bf_size))
bf.bf_pos in
(* Give the mask an hexadecimal string representation, nicer to read *)
- intconst ~hex:true m IUInt
+ uintconst_hex m
let eshift env op a b =
let ty = unary_conversion env a.etyp in
@@ -283,7 +287,7 @@ let bitfield_initializer bf i =
let m = Int64.pred (Int64.shift_left 1L bf.bf_size) in
let e_cast =
if bf.bf_bool then ecast (TInt(IBool,[])) e else e in
- let e_mask = intconst ~hex:true m IUInt in
+ let e_mask = uintconst_hex m in
let e_and =
{edesc = EBinop(Oand, e_cast, e_mask, TInt(IUInt,[]));
etyp = TInt(IUInt,[])} in