20 |
structure CFG = CFG |
structure CFG = CFG |
21 |
|
|
22 |
fun asmEmit (Graph.GRAPH graph, blocks) = let |
fun asmEmit (Graph.GRAPH graph, blocks) = let |
23 |
val CFG.INFO{annotations=an, ...} = #graph_info graph |
val CFG.INFO{annotations=an, data, ...} = #graph_info graph |
24 |
val E.S.STREAM{pseudoOp,defineLabel,emit,annotation,comment,...} = |
val E.S.STREAM{pseudoOp,defineLabel,emit,annotation,comment,...} = |
25 |
E.makeStream (!an) |
E.makeStream (!an) |
|
fun emitAn a = if Annotations.toString a = "" then () else annotation(a) |
|
26 |
fun emitIt (id, CFG.BLOCK{labels, annotations=a, align, insns, ...}) = ( |
fun emitIt (id, CFG.BLOCK{labels, annotations=a, align, insns, ...}) = ( |
27 |
case !align of NONE => () | SOME p => (pseudoOp p); |
case !align of NONE => () | SOME p => (pseudoOp p); |
28 |
List.app defineLabel (!labels); |
List.app defineLabel (!labels); |
29 |
List.app emitAn (!a); |
List.app emitAn (!a); |
30 |
List.app emit (rev (!insns))) |
List.app emit (rev (!insns))) |
31 |
|
and emitAn a = if Annotations.toString a = "" then () else annotation(a) |
32 |
in |
in |
33 |
List.app emitAn (!an); |
List.app emitAn (!an); |
34 |
List.app emitIt blocks |
List.app emitIt blocks; |
35 |
|
List.app pseudoOp (rev (!data)) |
36 |
|
|
37 |
end |
end |
38 |
end |
end |
39 |
|
|