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

SCM Repository

[smlnj] Diff of /sml/trunk/src/MLRISC/alpha/instructions/alphaProps.sml
ViewVC logotype

Diff of /sml/trunk/src/MLRISC/alpha/instructions/alphaProps.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1008, Fri Dec 14 21:01:29 2001 UTC revision 1009, Wed Jan 9 19:44:22 2002 UTC
# Line 29  Line 29 
29      *  Instruction Kinds      *  Instruction Kinds
30      *========================================================================*)      *========================================================================*)
31      fun instrKind(I.ANNOTATION{i, ...}) = instrKind i      fun instrKind(I.ANNOTATION{i, ...}) = instrKind i
32          | instrKind(I.COPY _)      = IK_COPY
33        | instrKind(I.INSTR instr) =        | instrKind(I.INSTR instr) =
34          (case instr          (case instr
35            of (I.BRANCH _)       => IK_JUMP            of (I.BRANCH _)       => IK_JUMP
36             | (I.FBRANCH _)      => IK_JUMP             | (I.FBRANCH _)      => IK_JUMP
37             | (I.JMPL _)         => IK_JUMP             | (I.JMPL _)         => IK_JUMP
            | (I.COPY _)         => IK_COPY  
            | (I.FCOPY _)        => IK_COPY  
38             | (I.JSR{cutsTo=[],...}) => IK_CALL             | (I.JSR{cutsTo=[],...}) => IK_CALL
39             | (I.JSR _)          => IK_CALL_WITH_CUTS             | (I.JSR _)          => IK_CALL_WITH_CUTS
40             | (I.BSR{cutsTo=[],...}) => IK_CALL             | (I.BSR{cutsTo=[],...}) => IK_CALL
# Line 49  Line 48 
48        | instrKind _ = IK_INSTR        | instrKind _ = IK_INSTR
49    
50      fun moveInstr(I.ANNOTATION{i, ...}) = moveInstr i      fun moveInstr(I.ANNOTATION{i, ...}) = moveInstr i
51        | moveInstr(I.INSTR(i)) =        | moveInstr(I.COPY _) = true
52          (case i        | moveInstr _ = false
           of (I.COPY _)  => true  
            | (I.FCOPY _) => true  
            | _ => false  
         (*esac*))  
       | moveInstr(I.LIVE _) = false  
       | moveInstr(I.KILL _) = false  
       | moveInstr _ = error "moveInstr"  
53    
54      val nop =      val nop =
55        fn () => I.operate{oper=I.BIS, ra=zeroR, rb=I.REGop zeroR, rc=zeroR}        fn () => I.operate{oper=I.BIS, ra=zeroR, rb=I.REGop zeroR, rc=zeroR}
# Line 65  Line 57 
57     (*========================================================================     (*========================================================================
58      *  Parallel Move      *  Parallel Move
59      *========================================================================*)      *========================================================================*)
60      fun moveTmpR(I.INSTR(I.COPY{tmp=SOME(I.Direct r), ...})) = SOME r      fun moveTmpR(I.COPY{tmp=SOME t, ...}) =
61        | moveTmpR(I.INSTR(I.FCOPY{tmp=SOME(I.FDirect f), ...})) = SOME f          (case t of I.Direct r => SOME r | I.FDirect f => SOME f | _ => NONE)
62        | moveTmpR(I.ANNOTATION{i,...}) = moveTmpR i        | moveTmpR(I.ANNOTATION{i,...}) = moveTmpR i
63        | moveTmpR _ = NONE        | moveTmpR _ = NONE
64    
65      fun moveDstSrc(I.INSTR(I.COPY{dst, src, ...})) = (dst, src)      fun moveDstSrc(I.COPY{dst, src, ...}) = (dst, src)
       | moveDstSrc(I.INSTR(I.FCOPY{dst, src, ...})) = (dst, src)  
66        | moveDstSrc(I.ANNOTATION{i,...}) = moveDstSrc i        | moveDstSrc(I.ANNOTATION{i,...}) = moveDstSrc i
67        | moveDstSrc _ = error "moveDstSrc"        | moveDstSrc _ = error "moveDstSrc"
68    
# Line 186  Line 177 
177             | I.PSEUDOARITH {oper, ra, rb, rc, tmps} => (rc:: C.getReg tmps, [ra])             | I.PSEUDOARITH {oper, ra, rb, rc, tmps} => (rc:: C.getReg tmps, [ra])
178             | I.OPERATEV arg => trap(Oper arg)             | I.OPERATEV arg => trap(Oper arg)
179             | I.CMOVE{ra,rb,rc,...} => ([rc],Opn(rb,[ra,rc]))             | I.CMOVE{ra,rb,rc,...} => ([rc],Opn(rb,[ra,rc]))
            (* copy *)  
            | I.COPY{dst, src, tmp=SOME(I.Direct r), ...} => (r::dst, src)  
            | I.COPY{dst, src, ...} => (dst, src)  
180             (* floating operate *)             (* floating operate *)
181             | I.FOPERATEV _ => trap([], [])             | I.FOPERATEV _ => trap([], [])
182             | I.TRAPB    => trap([],[])             | I.TRAPB    => trap([],[])
# Line 201  Line 189 
189         of I.ANNOTATION{a, i, ...} => defUseR i         of I.ANNOTATION{a, i, ...} => defUseR i
190          | I.LIVE{regs, ...} => ([], C.getReg regs)          | I.LIVE{regs, ...} => ([], C.getReg regs)
191          | I.KILL{regs, ...} => (C.getReg regs, [])          | I.KILL{regs, ...} => (C.getReg regs, [])
192            | I.COPY{k=CB.GP, dst, src, tmp, ...} =>
193              (case tmp
194               of SOME(I.Direct r) => (r::dst, src)
195                | SOME(I.Displace{base, ...}) => (dst, base::src)
196                | _ => (dst, src)
197              (*esac*))
198            | I.COPY _ => ([], [])
199          | I.INSTR(i) => alphaDU(i)          | I.INSTR(i) => alphaDU(i)
         | _ => error "defUseR"  
200    
201      end      end
202    
# Line 218  Line 212 
212          | I.PSEUDOARITH{tmps, ...}              => (C.getFreg tmps, [])          | I.PSEUDOARITH{tmps, ...}              => (C.getFreg tmps, [])
213          | I.FOPERATEV{fa, fb, fc, ...}          => ([fc], [fa, fb])          | I.FOPERATEV{fa, fb, fc, ...}          => ([fc], [fa, fb])
214          | I.FCMOVE{fa,fb,fc,...}                => ([fc], [fa, fb])          | I.FCMOVE{fa,fb,fc,...}                => ([fc], [fa, fb])
         | I.FCOPY{dst, src, tmp=SOME(I.FDirect f), ...} => (f::dst, src)  
         | I.FCOPY{dst, src, ...}                => (dst, src)  
215          | I.JSR{defs,uses, ...}                 => (C.getFreg defs,C.getFreg uses)          | I.JSR{defs,uses, ...}                 => (C.getFreg defs,C.getFreg uses)
216          | I.BSR{defs,uses, ...}                 => (C.getFreg defs,C.getFreg uses)          | I.BSR{defs,uses, ...}                 => (C.getFreg defs,C.getFreg uses)
217          | _ => ([],[])          | _ => ([],[])
# Line 228  Line 220 
220          of I.ANNOTATION{a, i, ...} => defUseF i          of I.ANNOTATION{a, i, ...} => defUseF i
221           | I.INSTR(i) => alphaDU(i)           | I.INSTR(i) => alphaDU(i)
222           | I.LIVE{regs, ...} => ([], C.getFreg regs)           | I.LIVE{regs, ...} => ([], C.getFreg regs)
223             | I.COPY{k=CB.FP, dst, src, tmp, ...} =>
224               (case tmp
225                 of SOME(I.FDirect f) => (f::dst, src)
226                  | _ => (dst, src)
227               (*esac*))
228             | I.COPY _ => ([], [])
229           | I.KILL{regs, ...} => (C.getFreg regs, [])           | I.KILL{regs, ...} => (C.getFreg regs, [])
          | _ => error "defUseF"  
230      end      end
231    
232      fun defUse CB.GP = defUseR      fun defUse CB.GP = defUseR
# Line 248  Line 245 
245     *  Replicate an instruction     *  Replicate an instruction
246     *========================================================================*)     *========================================================================*)
247    fun replicate(I.ANNOTATION{i,a}) = I.ANNOTATION{i=replicate i,a=a}    fun replicate(I.ANNOTATION{i,a}) = I.ANNOTATION{i=replicate i,a=a}
248      | replicate(I.INSTR(I.COPY{tmp=SOME _, dst, src, impl})) =      | replicate(I.COPY{k, sz, tmp=SOME _, dst, src}) =
249          I.copy{tmp=SOME(I.Direct(C.newReg())), dst=dst, src=src, impl=ref NONE}          I.COPY{tmp=SOME(I.Direct(C.newReg())), dst=dst, src=src, k=k, sz=sz}
     | replicate(I.INSTR(I.FCOPY{tmp=SOME _, dst, src, impl})) =  
         I.fcopy{tmp=SOME(I.FDirect(C.newFreg())),  
                 dst=dst, src=src, impl=ref NONE}  
250      | replicate i = i      | replicate i = i
251  end  end

Legend:
Removed from v.1008  
changed lines
  Added in v.1009

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