r5104@macbookpro: aamine | 2009-06-13 22:43:16 +0900

* rename class: AssemblyFile -> AssemblyCode.
 


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4292 1b9489fe-b721-0410-924e-b54b9192deb8
This commit is contained in:
Minero Aoki 2009-06-13 13:46:36 +00:00
parent 0837912b64
commit ee8432d4fa
7 changed files with 42 additions and 38 deletions

View File

@ -1,3 +1,7 @@
Sat Jun 13 22:42:24 2009 Minero Aoki <aamine@loveruby.net>
* rename class: AssemblyFile -> AssemblyCode.
Sat Jun 13 22:37:02 2009 Minero Aoki <aamine@loveruby.net>
* net/loveruby/cflat/entity/ToplevelScope.java: move

View File

@ -6,7 +6,7 @@ import net.loveruby.cflat.ast.ExprNode;
import net.loveruby.cflat.type.TypeTable;
import net.loveruby.cflat.ir.IR;
import net.loveruby.cflat.sysdep.CodeGenerator;
import net.loveruby.cflat.sysdep.AssemblyFile;
import net.loveruby.cflat.sysdep.AssemblyCode;
import net.loveruby.cflat.utils.ErrorHandler;
import net.loveruby.cflat.exception.*;
import java.util.*;
@ -114,7 +114,7 @@ public class Compiler {
if (dumpSemant(sem, opts.mode())) return;
IR ir = new IRGenerator(types, errorHandler).generate(sem);
if (dumpIR(ir, opts.mode())) return;
AssemblyFile asm = generateAssembly(ir, opts);
AssemblyCode asm = generateAssembly(ir, opts);
if (dumpAsm(asm, opts.mode())) return;
if (printAsm(asm, opts.mode())) return;
writeFile(destPath, asm.toSource());
@ -140,7 +140,7 @@ public class Compiler {
return ast;
}
public AssemblyFile generateAssembly(IR ir, Options opts) {
public AssemblyCode generateAssembly(IR ir, Options opts) {
return opts.codeGenerator(errorHandler).generate(ir);
}
@ -251,7 +251,7 @@ public class Compiler {
}
}
private boolean dumpAsm(AssemblyFile asm, CompilerMode mode) {
private boolean dumpAsm(AssemblyCode asm, CompilerMode mode) {
if (mode == CompilerMode.DumpAsm) {
asm.dump(System.out);
return true;
@ -261,7 +261,7 @@ public class Compiler {
}
}
private boolean printAsm(AssemblyFile asm, CompilerMode mode) {
private boolean printAsm(AssemblyCode asm, CompilerMode mode) {
if (mode == CompilerMode.PrintAsm) {
System.out.print(asm.toSource());
return true;

View File

@ -331,7 +331,7 @@ class Options {
out.println(" --dump-semantic Dumps AST after semantic checks and quit.");
// --dump-reference is a hidden option.
out.println(" --dump-ir Dumps IR and quit.");
out.println(" --dump-asm Dumps AssemblyFile and quit.");
out.println(" --dump-asm Dumps AssemblyCode and quit.");
out.println(" --print-asm Prints assembly code and quit.");
out.println(" -S Generates an assembly file and quit.");
out.println(" -c Generates an object file and quit.");

View File

@ -1,7 +1,7 @@
package net.loveruby.cflat.sysdep;
import java.io.PrintStream;
public interface AssemblyFile {
public interface AssemblyCode {
String toSource();
void dump();
void dump(PrintStream s);

View File

@ -1,5 +1,5 @@
package net.loveruby.cflat.sysdep;
public interface CodeGenerator {
AssemblyFile generate(net.loveruby.cflat.ir.IR ir);
AssemblyCode generate(net.loveruby.cflat.ir.IR ir);
}

View File

@ -5,7 +5,7 @@ import java.util.List;
import java.util.ArrayList;
import java.io.PrintStream;
public class AssemblyFile implements net.loveruby.cflat.sysdep.AssemblyFile {
public class AssemblyCode implements net.loveruby.cflat.sysdep.AssemblyCode {
final Type naturalType;
final long stackWordSize;
final SymbolTable labelSymbols;
@ -15,7 +15,7 @@ public class AssemblyFile implements net.loveruby.cflat.sysdep.AssemblyFile {
private int commentIndentLevel = 0;
private Statistics statistics;
AssemblyFile(Type naturalType, long stackWordSize,
AssemblyCode(Type naturalType, long stackWordSize,
SymbolTable labelSymbols, boolean verbose) {
this.naturalType = naturalType;
this.stackWordSize = stackWordSize;

View File

@ -26,7 +26,7 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
/** Compiles IR and generates assembly code. */
// #@@range/generate{
public AssemblyFile generate(IR ir) {
public AssemblyCode generate(IR ir) {
locateSymbols(ir);
return generateAssemblyCode(ir);
}
@ -142,8 +142,8 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
//
// #@@range/generateAssemblyCode{
private AssemblyFile generateAssemblyCode(IR ir) {
AssemblyFile file = newAssemblyFile();
private AssemblyCode generateAssemblyCode(IR ir) {
AssemblyCode file = newAssemblyCode();
file._file(ir.fileName());
if (ir.isGlobalVariableDefined()) {
generateDataSection(file, ir.definedGlobalVariables());
@ -164,9 +164,9 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
}
// #@@}
// #@@range/newAssemblyFile{
private AssemblyFile newAssemblyFile() {
return new AssemblyFile(
// #@@range/newAssemblyCode{
private AssemblyCode newAssemblyCode() {
return new AssemblyCode(
naturalType, STACK_WORD_SIZE,
new SymbolTable(LABEL_SYMBOL_BASE),
options.isVerboseAsm());
@ -175,7 +175,7 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
/** Generates initialized entries */
// #@@range/generateDataSection{
private void generateDataSection(AssemblyFile file,
private void generateDataSection(AssemblyCode file,
List<DefinedVariable> gvars) {
file._data();
for (DefinedVariable var : gvars) {
@ -194,7 +194,7 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
/** Generates immediate values for .data section */
// #@@range/generateImmediate{
private void generateImmediate(AssemblyFile file, long size, Expr node) {
private void generateImmediate(AssemblyCode file, long size, Expr node) {
if (node instanceof Int) {
Int expr = (Int)node;
switch ((int)size) {
@ -223,7 +223,7 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
/** Generates .rodata entries (constant strings) */
// #@@range/generateReadOnlyDataSection{
private void generateReadOnlyDataSection(AssemblyFile file,
private void generateReadOnlyDataSection(AssemblyCode file,
ConstantTable constants) {
file._section(".rodata");
for (ConstantEntry ent : constants) {
@ -234,7 +234,7 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
// #@@}
// #@@range/generateTextSection{
private void generateTextSection(AssemblyFile file,
private void generateTextSection(AssemblyCode file,
List<DefinedFunction> functions) {
file._text();
for (DefinedFunction func : functions) {
@ -252,7 +252,7 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
/** Generates BSS entries */
// #@@range/generateCommonSymbols{
private void generateCommonSymbols(AssemblyFile file,
private void generateCommonSymbols(AssemblyCode file,
List<DefinedVariable> variables) {
for (DefinedVariable var : variables) {
Symbol sym = globalSymbol(var.symbolString());
@ -272,7 +272,7 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
static private final Symbol GOT =
new NamedSymbol("_GLOBAL_OFFSET_TABLE_");
private void loadGOTBaseAddress(AssemblyFile file, Register reg) {
private void loadGOTBaseAddress(AssemblyCode file, Register reg) {
file.call(PICThunkSymbol(reg));
file.add(imm(GOT), reg);
}
@ -320,7 +320,7 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
* .section NAME, "...M", TYPE, section_group_name, linkage
*/
// #@@range/PICThunk{
private void PICThunk(AssemblyFile file, Register reg) {
private void PICThunk(AssemblyCode file, Register reg) {
Symbol sym = PICThunkSymbol(reg);
file._section(".text" + "." + sym.toSource(),
"\"" + PICThunkSectionFlags + "\"",
@ -406,7 +406,7 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
// #@@}
// #@@range/compileFunctionBody{
private void compileFunctionBody(AssemblyFile file, DefinedFunction func) {
private void compileFunctionBody(AssemblyCode file, DefinedFunction func) {
StackFrameInfo frame = new StackFrameInfo();
// #@@range/cfb_locate{
locateParameters(func.parameters());
@ -414,7 +414,7 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
// #@@}
// #@@range/cfb_offset{
AssemblyFile body = optimize(compileStmts(func));
AssemblyCode body = optimize(compileStmts(func));
frame.saveRegs = usedCalleeSavedRegisters(body);
frame.tempSize = body.virtualStack.maxSize();
@ -432,7 +432,7 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
// #@@}
// #@@range/optimize{
private AssemblyFile optimize(AssemblyFile body) {
private AssemblyCode optimize(AssemblyCode body) {
if (options.optimizeLevel() < 1) {
return body;
}
@ -442,7 +442,7 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
}
// #@@}
private void printStackFrameLayout(AssemblyFile file,
private void printStackFrameLayout(AssemblyCode file,
StackFrameInfo frame, List<DefinedVariable> lvars) {
List<MemInfo> vars = new ArrayList<MemInfo>();
for (DefinedVariable var : lvars) {
@ -481,11 +481,11 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
}
// #@@range/compileStmts{
private AssemblyFile as;
private AssemblyCode as;
private Label epilogue;
private AssemblyFile compileStmts(DefinedFunction func) {
as = newAssemblyFile();
private AssemblyCode compileStmts(DefinedFunction func) {
as = newAssemblyCode();
epilogue = new Label();
for (Stmt s : func.ir()) {
compileStmt(s);
@ -497,7 +497,7 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
// does NOT include BP
// #@@range/usedCalleeSavedRegisters{
private List<Register> usedCalleeSavedRegisters(AssemblyFile body) {
private List<Register> usedCalleeSavedRegisters(AssemblyCode body) {
List<Register> result = new ArrayList<Register>();
for (Register reg : calleeSavedRegisters()) {
if (body.doesUses(reg)) {
@ -528,8 +528,8 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
}
// #@@range/generateFunctionBody{
private void generateFunctionBody(AssemblyFile file,
AssemblyFile body, StackFrameInfo frame) {
private void generateFunctionBody(AssemblyCode file,
AssemblyCode body, StackFrameInfo frame) {
file.virtualStack.reset();
prologue(file, frame.saveRegs, frame.frameSize());
if (options.isPositionIndependent() && body.doesUses(GOTBaseReg())) {
@ -542,7 +542,7 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
// #@@}
// #@@range/prologue{
private void prologue(AssemblyFile file,
private void prologue(AssemblyCode file,
List<Register> saveRegs, long frameSize) {
file.push(bp());
file.mov(sp(), bp());
@ -554,7 +554,7 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
// #@@}
// #@@range/epilogue{
private void epilogue(AssemblyFile file, List<Register> savedRegs) {
private void epilogue(AssemblyCode file, List<Register> savedRegs) {
for (Register reg : ListUtils.reverse(savedRegs)) {
file.virtualPop(reg);
}
@ -621,13 +621,13 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
// #@@}
// #@@range/fixTempVariableOffsets{
private void fixTempVariableOffsets(AssemblyFile asm, long len) {
private void fixTempVariableOffsets(AssemblyCode asm, long len) {
asm.virtualStack.fixOffset(-len);
}
// #@@}
// #@@range/extendStack{
private void extendStack(AssemblyFile file, long len) {
private void extendStack(AssemblyCode file, long len) {
if (len > 0) {
file.sub(imm(len), sp());
}
@ -635,7 +635,7 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
// #@@}
// #@@range/rewindStack{
private void rewindStack(AssemblyFile file, long len) {
private void rewindStack(AssemblyCode file, long len) {
if (len > 0) {
file.add(imm(len), sp());
}