summaryrefslogtreecommitdiff
path: root/lib/ocaml_rts/linksem/hex_printing.ml
diff options
context:
space:
mode:
authorAlasdair Armstrong2017-09-07 16:54:20 +0100
committerAlasdair Armstrong2017-09-07 16:54:20 +0100
commit842165c1171fde332bd42e7520338c59a797f76b (patch)
tree75b61297b6d9b6e4810542390eb1371afc2f183f /lib/ocaml_rts/linksem/hex_printing.ml
parent8124c487b576661dfa7a0833415d07d0978bc43e (diff)
Add ocaml run-time and updates to sail for ocaml backend
Diffstat (limited to 'lib/ocaml_rts/linksem/hex_printing.ml')
-rw-r--r--lib/ocaml_rts/linksem/hex_printing.ml68
1 files changed, 68 insertions, 0 deletions
diff --git a/lib/ocaml_rts/linksem/hex_printing.ml b/lib/ocaml_rts/linksem/hex_printing.ml
new file mode 100644
index 00000000..fe2c42ca
--- /dev/null
+++ b/lib/ocaml_rts/linksem/hex_printing.ml
@@ -0,0 +1,68 @@
+(*Generated by Lem from hex_printing.lem.*)
+(** [hex_printing] is a utility module for converting natural numbers and integers
+ * into hex strings of various widths. Split into a new module as both the
+ * validation code and the main program need this functionality.
+ *)
+
+open Lem_basic_classes
+open Lem_list
+open Lem_num
+open Lem_string
+
+open Missing_pervasives
+open Elf_types_native_uint
+
+(*val hex_string_of_big_int_no_padding : natural -> string*)
+(* declare ocaml target_rep function hex_string_of_big_int_no_padding = `Ml_bindings.hex_string_of_big_int_no_padding` *)
+let hex_string_of_big_int_no_padding:Nat_big_num.num ->string= hex_string_of_natural
+(*val hex_string_of_big_int_no_padding' : integer -> string*)
+(*val hex_string_of_big_int_pad2 : natural -> string*)
+(*val hex_string_of_big_int_pad4 : natural -> string*)
+(*val hex_string_of_big_int_pad5 : natural -> string*)
+(*val hex_string_of_big_int_pad6 : natural -> string*)
+(*val hex_string_of_big_int_pad7 : natural -> string*)
+(*val hex_string_of_big_int_pad8 : natural -> string*)
+(*val hex_string_of_big_int_pad16 : natural -> string*)
+
+(*val hex_string_of_nat_pad2 : nat -> string*)
+
+(*val unsafe_hex_string_of_natural : nat -> natural -> string*)
+let unsafe_hex_string_of_natural pad m:string=
+ (if pad = 2 then
+ Ml_bindings.hex_string_of_big_int_pad2 m
+ else if pad = 5 then
+ Ml_bindings.hex_string_of_big_int_pad5 m
+ else if pad = 4 then
+ Ml_bindings.hex_string_of_big_int_pad4 m
+ else if pad = 6 then
+ Ml_bindings.hex_string_of_big_int_pad6 m
+ else if pad = 7 then
+ Ml_bindings.hex_string_of_big_int_pad7 m
+ else if pad = 8 then
+ Ml_bindings.hex_string_of_big_int_pad8 m
+ else if pad = 16 then
+ Ml_bindings.hex_string_of_big_int_pad16 m
+ else
+ hex_string_of_big_int_no_padding m)
+
+(*val unsafe_hex_string_of_uc_list : list unsigned_char -> string*)
+let rec unsafe_hex_string_of_uc_list xs:string=
+ ((match xs with
+ | [] -> ""
+ | x::y::xs ->
+ let sx = (unsafe_hex_string_of_natural( 2) (Nat_big_num.of_string (Uint32.to_string x))) in
+ let sy = (unsafe_hex_string_of_natural( 2) (Nat_big_num.of_string (Uint32.to_string y))) in
+ let sx =
+(if String.length sx = 2 then
+ sx
+ else
+ "0" ^ sx)
+ in
+ let sy =
+(if String.length sy = 2 then
+ sy
+ else
+ "0" ^ sy)
+ in
+ sx ^ (" " ^ (sy ^ (" " ^ unsafe_hex_string_of_uc_list xs)))
+ ))