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/sparc/emit/sparcAsm.sml
ViewVC logotype

Diff of /sml/trunk/src/MLRISC/sparc/emit/sparcAsm.sml

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

revision 744, Fri Dec 8 04:11:42 2000 UTC revision 909, Fri Aug 24 17:48:53 2001 UTC
# Line 6  Line 6 
6    
7    
8  functor SparcAsmEmitter(structure Instr : SPARCINSTR  functor SparcAsmEmitter(structure Instr : SPARCINSTR
                         structure Stream : INSTRUCTION_STREAM  
9                          structure Shuffle : SPARCSHUFFLE                          structure Shuffle : SPARCSHUFFLE
10                             where I = Instr                             where I = Instr
11    
12  (*#line 465.21 "sparc/sparc.mdl"*)  (*#line 466.21 "sparc/sparc.mdl"*)
13                          val V9 : bool                          val V9 : bool
14                         ) : INSTRUCTION_EMITTER =                         ) : INSTRUCTION_EMITTER =
15  struct  struct
16     structure I  = Instr     structure I  = Instr
17     structure C  = I.C     structure C  = I.C
18     structure S  = Stream     structure T  = I.T
19       structure S  = T.Stream
20     structure P  = S.P     structure P  = S.P
21     structure LabelExp = I.LabelExp     structure LabelExp = I.LabelExp
22     structure Constant = I.Constant     structure Constant = I.Constant
23    
24     val show_cellset = MLRiscControl.getFlag "asm-show-cellset"     val show_cellset = MLRiscControl.getFlag "asm-show-cellset"
25     val show_region  = MLRiscControl.getFlag "asm-show-region"     val show_region  = MLRiscControl.getFlag "asm-show-region"
26       val show_cutsTo = MLRiscControl.getFlag "asm-show-cutsto"
27     val indent_copies = MLRiscControl.getFlag "asm-indent-copies"     val indent_copies = MLRiscControl.getFlag "asm-indent-copies"
28    
29     fun error msg = MLRiscErrorMsg.error("SparcAsmEmitter",msg)     fun error msg = MLRiscErrorMsg.error("SparcAsmEmitter",msg)
# Line 43  Line 44 
44                    in  if n<0 then "-"^String.substring(s,1,size s-1)                    in  if n<0 then "-"^String.substring(s,1,size s-1)
45                        else s                        else s
46                    end                    end
47         fun emit_label lab = emit(Label.nameOf lab)         fun emit_label lab = emit(Label.toString lab)
48         fun emit_labexp le = emit(LabelExp.toString le)         fun emit_labexp le = emit(LabelExp.toString le)
49         fun emit_const c = emit(Constant.toString c)         fun emit_const c = emit(Constant.toString c)
50         fun emit_int i = emit(ms i)         fun emit_int i = emit(ms i)
51         fun paren f = (emit "("; f(); emit ")")         fun paren f = (emit "("; f(); emit ")")
52         fun defineLabel lab = emit(Label.nameOf lab^":\n")         fun defineLabel lab = emit(Label.toString lab^":\n")
53         fun entryLabel lab = defineLabel lab         fun entryLabel lab = defineLabel lab
54         fun comment msg = (tab(); emit("/* " ^ msg ^ " */"))         fun comment msg = (tab(); emit("/* " ^ msg ^ " */\n"))
55         fun annotation a = (comment(Annotations.toString a); nl())         fun annotation a = (comment(Annotations.toString a); nl())
56           fun getAnnotations() = error "getAnnotations"
57         fun doNothing _ = ()         fun doNothing _ = ()
58           fun fail _ = raise Fail "AsmEmitter"
59         fun emit_region mem = comment(I.Region.toString mem)         fun emit_region mem = comment(I.Region.toString mem)
60         val emit_region =         val emit_region =
61            if !show_region then emit_region else doNothing            if !show_region then emit_region else doNothing
# Line 60  Line 63 
63         fun init size = (comment("Code Size = " ^ ms size); nl())         fun init size = (comment("Code Size = " ^ ms size); nl())
64         val emitCellInfo = AsmFormatUtil.reginfo         val emitCellInfo = AsmFormatUtil.reginfo
65                                  (emit,formatAnnotations)                                  (emit,formatAnnotations)
66         fun emitCell r = (emit(C.toString r); emitCellInfo r)         fun emitCell r = (emit(CellsBasis.toString r); emitCellInfo r)
67         fun emit_cellset(title,cellset) =         fun emit_cellset(title,cellset) =
68           (nl(); comment(title^C.CellSet.toString cellset))           (nl(); comment(title^CellsBasis.CellSet.toString cellset))
69         val emit_cellset =         val emit_cellset =
70           if !show_cellset then emit_cellset else doNothing           if !show_cellset then emit_cellset else doNothing
71         fun emit_defs cellset = emit_cellset("defs: ",cellset)         fun emit_defs cellset = emit_cellset("defs: ",cellset)
72         fun emit_uses cellset = emit_cellset("uses: ",cellset)         fun emit_uses cellset = emit_cellset("uses: ",cellset)
73           val emit_cutsTo =
74             if !show_cutsTo then AsmFormatUtil.emit_cutsTo emit
75             else doNothing
76         fun emitter instr =         fun emitter instr =
77         let         let
78     fun asm_load (I.LDSB) = "ldsb"     fun asm_load (I.LDSB) = "ldsb"
# Line 243  Line 249 
249           emit_labexp labexp;           emit_labexp labexp;
250           emit ")" )           emit ")" )
251    
252  (*#line 468.7 "sparc/sparc.mdl"*)  (*#line 469.7 "sparc/sparc.mdl"*)
253     fun emit_leaf false = ()     fun emit_leaf false = ()
254       | emit_leaf true = emit "l"       | emit_leaf true = emit "l"
255    
256  (*#line 469.7 "sparc/sparc.mdl"*)  (*#line 470.7 "sparc/sparc.mdl"*)
257     fun emit_nop false = ()     fun emit_nop false = ()
258       | emit_nop true = emit "\n\tnop"       | emit_nop true = emit "\n\tnop"
259    
260  (*#line 470.7 "sparc/sparc.mdl"*)  (*#line 471.7 "sparc/sparc.mdl"*)
261     fun emit_a false = ()     fun emit_a false = ()
262       | emit_a true = emit ",a"       | emit_a true = emit ",a"
263    
264  (*#line 471.7 "sparc/sparc.mdl"*)  (*#line 472.7 "sparc/sparc.mdl"*)
265     fun emit_cc false = ()     fun emit_cc false = ()
266       | emit_cc true = emit "cc"       | emit_cc true = emit "cc"
267     fun emitInstr' instr =     fun emitInstr' instr =
# Line 297  Line 303 
303             emit "], ";             emit "], ";
304             emitCell d;             emitCell d;
305             emit_region mem )             emit_region mem )
306           | I.UNIMP{const22} =>
307             ( emit "unimp ";
308               emit_int const22 )
309         | I.SETHI{i, d} =>         | I.SETHI{i, d} =>
310           let           let
311  (*#line 650.18 "sparc/sparc.mdl"*)  (*#line 656.18 "sparc/sparc.mdl"*)
312               val i = Word32.toString (Word32  .<< (Word32.fromInt i, 0wxa))               val i = Word32.toString (Word32  .<< (Word32.fromInt i, 0wxa))
313           in           in
314              ( emit "sethi\t%hi(0x";              ( emit "sethi\t%hi(0x";
# Line 308  Line 317 
317                emitCell d )                emitCell d )
318           end           end
319         | I.ARITH{a, r, i, d} =>         | I.ARITH{a, r, i, d} =>
320           (case (a, C.registerId r, C.registerId d) of           (case (a, CellsBasis.registerId r, CellsBasis.registerId d) of
321             (I.OR, 0, _) =>             (I.OR, 0, _) =>
322             ( emit "mov\t";             ( emit "mov\t";
323               emit_operand i;               emit_operand i;
# Line 417  Line 426 
426             emit_operand i;             emit_operand i;
427             emit "]";             emit "]";
428             emit_nop nop )             emit_nop nop )
429         | I.JMPL{r, i, d, defs, uses, nop, mem} =>         | I.JMPL{r, i, d, defs, uses, cutsTo, nop, mem} =>
430           ( emit "jmpl\t[";           ( emit "jmpl\t[";
431             emitCell r;             emitCell r;
432             emit "+";             emit "+";
# Line 427  Line 436 
436             emit_region mem;             emit_region mem;
437             emit_defs defs;             emit_defs defs;
438             emit_uses uses;             emit_uses uses;
439               emit_cutsTo cutsTo;
440             emit_nop nop )             emit_nop nop )
441         | I.CALL{defs, uses, label, nop, mem} =>         | I.CALL{defs, uses, label, cutsTo, nop, mem} =>
442           ( emit "call\t";           ( emit "call\t";
443             emit_label label;             emit_label label;
444             emit_region mem;             emit_region mem;
445             emit_defs defs;             emit_defs defs;
446             emit_uses uses;             emit_uses uses;
447               emit_cutsTo cutsTo;
448             emit_nop nop )             emit_nop nop )
449         | I.Ticc{t, cc, r, i} =>         | I.Ticc{t, cc, r, i} =>
450           ( emit "t";           ( emit "t";
# Line 447  Line 458 
458             emit_operand i )             emit_operand i )
459         | I.FPop1{a, r, d} =>         | I.FPop1{a, r, d} =>
460           let           let
461  (*#line 755.18 "sparc/sparc.mdl"*)  (*#line 763.18 "sparc/sparc.mdl"*)
462               fun f (a, r, d) =               fun f (a, r, d) =
463                   ( emit a;                   ( emit a;
464                     emit "\t";                     emit "\t";
# Line 455  Line 466 
466                     emit ", ";                     emit ", ";
467                     emit (C.showFP d))                     emit (C.showFP d))
468    
469  (*#line 760.18 "sparc/sparc.mdl"*)  (*#line 768.18 "sparc/sparc.mdl"*)
470               fun g (a, r, d) =               fun g (a, r, d) =
471                   let                   let
472  (*#line 761.22 "sparc/sparc.mdl"*)  (*#line 769.22 "sparc/sparc.mdl"*)
473                       val r = C.registerNum r                       val r = CellsBasis.registerNum r
474                       and d = C.registerNum d                       and d = CellsBasis.registerNum d
475                   in f (a, r, d);                   in f (a, r, d);
476                      emit "\n\t";                      emit "\n\t";
477                      f ("fmovs", r + 1, d + 1)                      f ("fmovs", r + 1, d + 1)
478                   end                   end
479    
480  (*#line 765.18 "sparc/sparc.mdl"*)  (*#line 773.18 "sparc/sparc.mdl"*)
481               fun h (a, r, d) =               fun h (a, r, d) =
482                   let                   let
483  (*#line 766.22 "sparc/sparc.mdl"*)  (*#line 774.22 "sparc/sparc.mdl"*)
484                       val r = C.registerNum r                       val r = CellsBasis.registerNum r
485                       and d = C.registerNum d                       and d = CellsBasis.registerNum d
486                   in f (a, r, d);                   in f (a, r, d);
487                      emit "\n\t";                      emit "\n\t";
488                      f ("fmovs", r + 1, d + 1);                      f ("fmovs", r + 1, d + 1);
# Line 567  Line 578 
578     in  S.STREAM{beginCluster=init,     in  S.STREAM{beginCluster=init,
579                  pseudoOp=pseudoOp,                  pseudoOp=pseudoOp,
580                  emit=emitter,                  emit=emitter,
581                  endCluster=doNothing,                  endCluster=fail,
582                  defineLabel=defineLabel,                  defineLabel=defineLabel,
583                  entryLabel=entryLabel,                  entryLabel=entryLabel,
584                  comment=comment,                  comment=comment,
585                  exitBlock=doNothing,                  exitBlock=doNothing,
586                  annotation=annotation                  annotation=annotation,
587                    getAnnotations=getAnnotations
588                 }                 }
589     end     end
590  end  end

Legend:
Removed from v.744  
changed lines
  Added in v.909

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