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/mltree/labelExp.sml
ViewVC logotype

Annotation of /sml/trunk/src/MLRISC/mltree/labelExp.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 245 - (view) (download)
Original Path: sml/branches/SMLNJ/src/MLRISC/mltree/labelExp.sml

1 : monnier 245 (* labelExp.sml -- expressions involving labels
2 :     *
3 :     * COPYRIGHT (c) 1995 AT&T Bell Laboratories.
4 :     *
5 :     *)
6 :     signature LABELEXP = sig
7 :     datatype labexp =
8 :     LABEL of Label.label
9 :     | CONST of int
10 :     | PLUS of labexp * labexp
11 :     | MINUS of labexp * labexp
12 :     | MULT of labexp * labexp
13 :     | DIV of labexp * labexp
14 :     | LSHIFT of labexp * word
15 :     | RSHIFT of labexp * word
16 :     | AND of labexp * word
17 :     | OR of labexp * word
18 :    
19 :     val valueOf : labexp -> int
20 :     val toString : labexp -> string
21 :     end
22 :    
23 :     structure LabelExp = struct
24 :     datatype labexp =
25 :     LABEL of Label.label
26 :     | CONST of int
27 :     | PLUS of labexp * labexp
28 :     | MINUS of labexp * labexp
29 :     | MULT of labexp * labexp
30 :     | DIV of labexp * labexp
31 :     | LSHIFT of labexp * word
32 :     | RSHIFT of labexp * word
33 :     | AND of labexp * word
34 :     | OR of labexp * word
35 :    
36 :     val itow = Word.fromInt
37 :     val wtoi = Word.toIntX
38 :    
39 :     fun valueOf(LABEL lab) = Label.addrOf lab
40 :     | valueOf(CONST i) = i
41 :     | valueOf(PLUS(lexp1, lexp2)) = valueOf(lexp1) + valueOf(lexp2)
42 :     | valueOf(MINUS(lexp1, lexp2)) = valueOf(lexp1) - valueOf(lexp2)
43 :     | valueOf(MULT(lexp1, lexp2)) = valueOf(lexp1) * valueOf(lexp2)
44 :     | valueOf(DIV(lexp1, lexp2)) = valueOf(lexp1) div valueOf(lexp2)
45 :     | valueOf(LSHIFT(lexp, cnt)) = wtoi(Word.<<(wValueOf lexp, cnt))
46 :     | valueOf(RSHIFT(lexp, cnt)) = wtoi(Word.>>(wValueOf lexp, cnt))
47 :     | valueOf(AND(lexp, mask)) = wtoi(Word.andb(wValueOf lexp, mask))
48 :     | valueOf(OR(lexp, mask)) = wtoi(Word.orb(wValueOf lexp, mask))
49 :    
50 :     and wValueOf lexp = itow(valueOf lexp)
51 :    
52 :     (* This module should be parameterised, in order to generate
53 :     * target label expressions for assembly code purposes.
54 :     *)
55 :     fun parenthesize str = "(" ^ str ^ ")"
56 :    
57 :     fun pToString(lexp as LABEL _) = toString lexp
58 :     | pToString(lexp as CONST _) = toString lexp
59 :     | pToString lexp = parenthesize(toString lexp)
60 :    
61 :     and toString(LABEL lab) = Label.nameOf lab
62 :     | toString(CONST i) = Int.toString i
63 :     | toString(PLUS(lexp1, lexp2)) = pToString lexp1 ^ "+" ^ pToString lexp2
64 :     | toString(MINUS(lexp1, lexp2)) = pToString lexp1 ^ "-" ^ pToString lexp2
65 :     | toString(MULT(lexp1, lexp2)) = pToString lexp1 ^ "*" ^ pToString lexp2
66 :     | toString(DIV(lexp1, lexp2)) = pToString lexp1 ^ "/" ^ pToString lexp2
67 :     | toString(LSHIFT(lexp, cnt)) = pToString lexp ^ "<<" ^ Word.toString cnt
68 :     | toString(RSHIFT(lexp, cnt)) = pToString lexp ^ ">>" ^ Word.toString cnt
69 :     | toString(AND(lexp, mask)) = pToString lexp ^ "&" ^ Word.toString mask
70 :     | toString(OR(lexp, mask)) = pToString lexp ^ "|" ^ Word.toString mask
71 :     end
72 :    
73 :    
74 :    
75 :     (*
76 :     * $Log: labelExp.sml,v $
77 :     * Revision 1.2 1998/10/06 14:07:47 george
78 :     * Flowgraph has been removed from modules that do not need it.
79 :     * Changes to compiler/CodeGen/*/*{MLTree,CG}.sml necessary.
80 :     * [leunga]
81 :     *
82 :     * Revision 1.1.1.1 1998/04/08 18:39:02 george
83 :     * Version 110.5
84 :     *
85 :     *)

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