Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /sml/trunk/src/MLRISC/util/asm-util.sml
ViewVC logotype

Annotation of /sml/trunk/src/MLRISC/util/asm-util.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 16 - (view) (download)

1 : monnier 16 (* asm-util.sml
2 :     *
3 :     * COPYRIGHT (c) 1994 AT&T Bell Laboratories.
4 :     *
5 :     * Utility code for generating assembler code.
6 :     *
7 :     * $Log: asm-util.sml,v $
8 :     * Revision 1.1.1.1 1997/04/19 18:14:23 george
9 :     * Version 109.27
10 :     *
11 :     * Revision 1.2 1996/09/16 13:09:37 george
12 :     * Incorrect use of Word.toInt. Changed it to Word.toIntX.
13 :     *
14 :     * Revision 1.1.1.1 1996/01/31 16:02:50 george
15 :     * Version 109
16 :     *
17 :     *)
18 :    
19 :     structure AsmUtil : sig
20 :    
21 :     val itoa : int -> string
22 :    
23 :     val printableString : string -> string
24 :    
25 :     end = struct
26 :    
27 :     val hexDigits = "0123456789abcdef"
28 :    
29 :     val >> = Word.~>>
30 :     val & = Word.andb
31 :    
32 :     infix >> &
33 :    
34 :     val wtoi = Word.toIntX
35 :     val itow = Word.fromInt
36 :    
37 :     local
38 :     fun f (0w0, l) = l
39 :     | f (n, l) = f ((n >> 0w4), String.sub(hexDigits, wtoi (n & 0w15)) :: l)
40 :     in
41 :     fun itoa 0 = "0x0"
42 :     | itoa i = if (i < 0)
43 :     then implode(#"-" :: #"0" :: #"x" :: f(itow(~i), []))
44 :     else implode(#"0" :: #"x" :: f(itow i, []))
45 :     end
46 :    
47 :     (* generates a printable string, including the surrounding quotes and
48 :     * the null termination.
49 :     *)
50 :     fun printableString s = let
51 :     fun isPrint c = ((#" " <= c) andalso (c <= #"~"))
52 :     fun octal i = String.sub(hexDigits, wtoi (i & 0wx7))
53 :     fun mkLegal #"\"" = "\\\""
54 :     | mkLegal #"\\" = "\\\\"
55 :     | mkLegal c = if ((#" " <= c) andalso (c <= #"~"))
56 :     then String.str c
57 :     else let val c' = itow (Char.ord c)
58 :     in
59 :     implode[#"\\", octal(c' >> 0w6), octal(c' >> 0w3), octal c']
60 :     end
61 :     val term = (case (itow(size s) & 0wx3) (* natural word size *)
62 :     of 0w0 => "\000\000\000\000\""
63 :     | 0w1 => "\000\000\000\""
64 :     | 0w2 => "\000\000\""
65 :     | _ => "\000\""
66 :     (* end case *))
67 :     in
68 :     concat("\"" :: (map mkLegal (explode s)) @ [term])
69 :     end
70 :    
71 :     end;
72 :    

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0