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

Diff of /sml/trunk/src/MLRISC/ppc/mltree/ppc.sml

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

revision 774, Wed Jan 10 12:50:56 2001 UTC revision 775, Fri Jan 12 01:17:51 2001 UTC
# Line 7  Line 7 
7    
8  functor PPC  functor PPC
9    (structure PPCInstr : PPCINSTR    (structure PPCInstr : PPCINSTR
10     structure PPCMLTree : MLTREE     structure ExtensionComp : MLTREE_EXTENSION_COMP where I = PPCInstr
    structure ExtensionComp : MLTREE_EXTENSION_COMP  
       where I = PPCInstr and T = PPCMLTree  
11     structure PseudoInstrs : PPC_PSEUDO_INSTR     structure PseudoInstrs : PPC_PSEUDO_INSTR
       sharing PPCMLTree.Region = PPCInstr.Region  
       sharing PPCMLTree.LabelExp = PPCInstr.LabelExp  
12        sharing PseudoInstrs.I = PPCInstr        sharing PseudoInstrs.I = PPCInstr
13    
14     (*     (*
# Line 28  Line 24 
24    ) : MLTREECOMP =    ) : MLTREECOMP =
25  struct  struct
26    structure I   = PPCInstr    structure I   = PPCInstr
27    structure T   = PPCMLTree    structure T   = I.T
28    structure S   = T.Stream    structure S   = T.Stream
29    structure C   = PPCInstr.C    structure C   = PPCInstr.C
   structure LE  = I.LabelExp  
30    structure W32 = Word32    structure W32 = Word32
31    structure A   = MLRiscAnnotations    structure A   = MLRiscAnnotations
32    
# Line 160  Line 155 
155    
156        fun emitBranch{bo, bf, bit, addr, LK} =        fun emitBranch{bo, bf, bit, addr, LK} =
157        let val fallThrLab = Label.newLabel""        let val fallThrLab = Label.newLabel""
158            val fallThrOpnd = I.LabelOp(LE.LABEL fallThrLab)            val fallThrOpnd = I.LabelOp(T.LABEL fallThrLab)
159        in        in
160            emit(I.BC{bo=bo, bf=bf, bit=bit, addr=addr, LK=LK, fall=fallThrOpnd});            emit(I.BC{bo=bo, bf=bf, bit=bit, addr=addr, LK=LK, fall=fallThrOpnd});
161            defineLabel fallThrLab            defineLabel fallThrLab
# Line 191  Line 186 
186             in loadImmedHiLo(hi, lo, rt, an)             in loadImmedHiLo(hi, lo, rt, an)
187             end             end
188    
189        fun loadLabel(lexp, rt, an) =        fun loadLabexp(lexp, rt, an) =
190            mark(I.ARITHI{oper=I.ADDI, rt=rt, ra=zeroR, im=I.LabelOp lexp}, an)            mark(I.ARITHI{oper=I.ADDI, rt=rt, ra=zeroR, im=I.LabelOp lexp}, an)
191    
       fun loadConst(c, rt, an) =  
           mark(I.ARITHI{oper=I.ADDI, rt=rt, ra=zeroR,  
                         im=I.LabelOp(LE.CONST c)}, an)  
   
192        fun immedOpnd range (e1, e2 as T.LI i) =        fun immedOpnd range (e1, e2 as T.LI i) =
193             (expr e1, if range i then I.ImmedOp(toInt i) else I.RegOp(expr e2))             (expr e1, if range i then I.ImmedOp(toInt i) else I.RegOp(expr e2))
194          | immedOpnd _ (e1, T.CONST c) = (expr e1, I.LabelOp(LE.CONST c))          | immedOpnd _ (e1, x as T.CONST _) = (expr e1, I.LabelOp x)
195          | immedOpnd _ (e1, T.LABEL lexp) = (expr e1, I.LabelOp lexp)          | immedOpnd _ (e1, x as T.LABEL _) = (expr e1, I.LabelOp x)
196            | immedOpnd _ (e1, T.LABEXP lexp) = (expr e1, I.LabelOp lexp)
197          | immedOpnd _ (e1, e2) = (expr e1, I.RegOp(expr e2))          | immedOpnd _ (e1, e2) = (expr e1, I.RegOp(expr e2))
198    
199        and commImmedOpnd range (e1 as T.LI _, e2) =        and commImmedOpnd range (e1 as T.LI _, e2) =
# Line 210  Line 202 
202             immedOpnd range (e2, e1)             immedOpnd range (e2, e1)
203          | commImmedOpnd range (e1 as T.LABEL _, e2) =          | commImmedOpnd range (e1 as T.LABEL _, e2) =
204             immedOpnd range (e2, e1)             immedOpnd range (e2, e1)
205            | commImmedOpnd range (e1 as T.LABEXP _, e2) =
206               immedOpnd range (e2, e1)
207          | commImmedOpnd range arg = immedOpnd range arg          | commImmedOpnd range arg = immedOpnd range arg
208    
209        and eCommImm range (oper, operi, e1, e2, rt, an) =        and eCommImm range (oper, operi, e1, e2, rt, an) =
# Line 258  Line 252 
252          | stmt(T.CCMV(ccd, ccexp), an) = doCCexpr(ccexp, ccd, an)          | stmt(T.CCMV(ccd, ccexp), an) = doCCexpr(ccexp, ccd, an)
253          | stmt(T.COPY(_, dst, src), an) = copy(dst, src, an)          | stmt(T.COPY(_, dst, src), an) = copy(dst, src, an)
254          | stmt(T.FCOPY(_, dst, src), an) = fcopy(dst, src, an)          | stmt(T.FCOPY(_, dst, src), an) = fcopy(dst, src, an)
255          | stmt(T.JMP(T.LABEL lexp, labs),an) =          | stmt(T.JMP(T.LABEXP lexp, labs),an) =
256               mark(I.B{addr=I.LabelOp lexp, LK=false},an)               mark(I.B{addr=I.LabelOp lexp, LK=false},an)
257            | stmt(T.JMP(x as (T.LABEL _ | T.CONST _), labs),an) =
258                 mark(I.B{addr=I.LabelOp x, LK=false},an)
259          | stmt(T.JMP(rexp, labs),an) =          | stmt(T.JMP(rexp, labs),an) =
260            let val rs = expr(rexp)            let val rs = expr(rexp)
261            in  emit(MTLR(rs));            in  emit(MTLR(rs));
# Line 299  Line 295 
295                  | T.GEU => (I.FALSE, I.LT)                  | T.GEU => (I.FALSE, I.LT)
296               (*esac*))               (*esac*))
297              val ccreg = if true then CR0 else newCCreg() (* XXX *)              val ccreg = if true then CR0 else newCCreg() (* XXX *)
298              val addr = I.LabelOp(LE.LABEL lab)              val addr = I.LabelOp(T.LABEL lab)
299              fun default() =              fun default() =
300                (doCCexpr(cmp, ccreg, []);                (doCCexpr(cmp, ccreg, []);
301                 emitBranch{bo=bo, bf=ccreg, bit=cf, addr=addr, LK=false})                 emitBranch{bo=bo, bf=ccreg, bit=cf, addr=addr, LK=false})
# Line 320  Line 316 
316                    default()                    default()
317            end            end
318          | branch(T.CC(cc, cr), lab, an) =          | branch(T.CC(cc, cr), lab, an) =
319            let val addr=I.LabelOp(LE.LABEL lab)            let val addr=I.LabelOp(T.LABEL lab)
320                fun branch(bo, bit) =                fun branch(bo, bit) =
321                   emitBranch{bo=bo, bf=cr, bit=bit, addr=addr, LK=false}                   emitBranch{bo=bo, bf=cr, bit=bit, addr=addr, LK=false}
322            in  case cc of            in  case cc of
# Line 333  Line 329 
329            end            end
330          | branch(cmp as T.FCMP(fty, cond, _, _), lab, an) =          | branch(cmp as T.FCMP(fty, cond, _, _), lab, an) =
331            let val ccreg = if true then CR0 else newCCreg() (* XXX *)            let val ccreg = if true then CR0 else newCCreg() (* XXX *)
332                val labOp = I.LabelOp(LE.LABEL lab)                val labOp = I.LabelOp(T.LABEL lab)
333                fun branch(bo, bf, bit) =                fun branch(bo, bf, bit) =
334                    emitBranch{bo=bo, bf=bf, bit=bit, addr=labOp, LK=false}                    emitBranch{bo=bo, bf=bf, bit=bit, addr=labOp, LK=false}
335                fun test2bits(bit1, bit2) =                fun test2bits(bit1, bit2) =
# Line 418  Line 414 
414                                      in  trapLabel := SOME l; l end                                      in  trapLabel := SOME l; l end
415                            | SOME l => l                            | SOME l => l
416            in  emitBranch{bo=I.TRUE, bf=CR0, bit=I.SO, LK=false,            in  emitBranch{bo=I.TRUE, bf=CR0, bit=I.SO, LK=false,
417                           addr=I.LabelOp(LE.LABEL label)}                           addr=I.LabelOp(T.LABEL label)}
418            end            end
419    
420        (* Generate a load and annotate the instruction *)        (* Generate a load and annotate the instruction *)
# Line 464  Line 460 
460                             rb=expr e1, OE=false, Rc=false}, an)                             rb=expr e1, OE=false, Rc=false}, an)
461              )              )
462          | subtract(ty, T.LI i, e2, rt, an) = subfImmed(i, expr e2, rt, an)          | subtract(ty, T.LI i, e2, rt, an) = subfImmed(i, expr e2, rt, an)
463          | subtract(ty, T.CONST c, e2, rt, an) =          | subtract(ty, x as (T.CONST _ | T.LABEL _), e2, rt, an) =
464               mark(I.ARITHI{oper=I.SUBFIC,rt=rt,ra=expr e2,               mark(I.ARITHI{oper=I.SUBFIC,rt=rt,ra=expr e2,
465                             im=I.LabelOp(LE.CONST c)},an)                             im=I.LabelOp x},an)
466          | subtract(ty, e1, e2, rt, an) =          | subtract(ty, e1, e2, rt, an) =
467            let val rb = expr e1 val ra = expr e2            let val rb = expr e1 val ra = expr e2
468            in  mark(I.ARITH{oper=I.SUBF,rt=rt,ra=ra,rb=rb,Rc=false,OE=false},an)            in  mark(I.ARITH{oper=I.SUBF,rt=rt,ra=ra,rb=rb,Rc=false,OE=false},an)
# Line 546  Line 542 
542               T.REG(_,rs)  => if C.sameColor(rs,C.lr) then mark(MFLR rt,an)               T.REG(_,rs)  => if C.sameColor(rs,C.lr) then mark(MFLR rt,an)
543                               else move(rs,rt,an)                               else move(rs,rt,an)
544             | T.LI i       => loadImmed(i, rt, an)             | T.LI i       => loadImmed(i, rt, an)
545             | T.LABEL lexp => loadLabel(lexp, rt, an)             | T.LABEXP lexp => loadLabexp(lexp, rt, an)
546             | T.CONST c    => loadConst(c, rt, an)             | T.CONST _     => loadLabexp(e, rt, an)
547               | T.LABEL _     => loadLabexp(e, rt, an)
548    
549               (* All data widths *)               (* All data widths *)
550             | T.ADD(_, e1, e2) => eCommImm signed16 (I.ADD,I.ADDI,e1,e2,rt,an)             | T.ADD(_, e1, e2) => eCommImm signed16 (I.ADD,I.ADDI,e1,e2,rt,an)

Legend:
Removed from v.774  
changed lines
  Added in v.775

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