mirror of https://github.com/aamine/cbc
r4972@macbookpro: aamine | 2009-05-26 13:24:13 +0900
* net/loveruby/cflat/asm: refactoring: rename class: AsmStatistics -> Statistics. * net/loveruby/cflat/sysdep/x86/CodeGenerator.java: follow it. git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4260 1b9489fe-b721-0410-924e-b54b9192deb8
This commit is contained in:
parent
aabbca6e13
commit
a1832aca6b
|
@ -1,3 +1,10 @@
|
|||
Tue May 26 13:23:56 2009 Minero Aoki <aamine@loveruby.net>
|
||||
|
||||
* net/loveruby/cflat/asm: refactoring: rename class: AsmStatistics
|
||||
-> Statistics.
|
||||
|
||||
* net/loveruby/cflat/sysdep/x86/CodeGenerator.java: follow it.
|
||||
|
||||
Tue May 26 13:18:52 2009 Minero Aoki <aamine@loveruby.net>
|
||||
|
||||
* net/loveruby/cflat/asm: refactoring: rename class: AsmOperand ->
|
||||
|
|
|
@ -11,7 +11,7 @@ public class AbsoluteAddress extends Operand {
|
|||
return this.register;
|
||||
}
|
||||
|
||||
public void collectStatistics(AsmStatistics stats) {
|
||||
public void collectStatistics(Statistics stats) {
|
||||
register.collectStatistics(stats);
|
||||
}
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ abstract public class Assembly {
|
|||
return false;
|
||||
}
|
||||
|
||||
public void collectStatistics(AsmStatistics stats) {
|
||||
public void collectStatistics(Statistics stats) {
|
||||
// does nothing by default.
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ abstract public class BaseSymbol implements Symbol {
|
|||
return false;
|
||||
}
|
||||
|
||||
public void collectStatistics(AsmStatistics stats) {
|
||||
public void collectStatistics(Statistics stats) {
|
||||
stats.symbolUsed(this);
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ public class DirectMemoryReference extends MemoryReference {
|
|||
return this.value;
|
||||
}
|
||||
|
||||
public void collectStatistics(AsmStatistics stats) {
|
||||
public void collectStatistics(Statistics stats) {
|
||||
value.collectStatistics(stats);
|
||||
}
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ public class ImmediateValue extends Operand {
|
|||
return this.expr;
|
||||
}
|
||||
|
||||
public void collectStatistics(AsmStatistics stats) {
|
||||
public void collectStatistics(Statistics stats) {
|
||||
// does nothing
|
||||
}
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@ public class IndirectMemoryReference extends MemoryReference {
|
|||
return base;
|
||||
}
|
||||
|
||||
public void collectStatistics(AsmStatistics stats) {
|
||||
public void collectStatistics(Statistics stats) {
|
||||
base.collectStatistics(stats);
|
||||
}
|
||||
|
||||
|
|
|
@ -80,7 +80,7 @@ public class Instruction extends Assembly {
|
|||
return (Symbol)ref.value();
|
||||
}
|
||||
|
||||
public void collectStatistics(AsmStatistics stats) {
|
||||
public void collectStatistics(Statistics stats) {
|
||||
stats.instructionUsed(mnemonic);
|
||||
for (int i = 0; i < operands.length; i++) {
|
||||
operands[i].collectStatistics(stats);
|
||||
|
|
|
@ -40,7 +40,7 @@ public class IntegerLiteral implements Literal {
|
|||
return toSource();
|
||||
}
|
||||
|
||||
public void collectStatistics(AsmStatistics stats) {
|
||||
public void collectStatistics(Statistics stats) {
|
||||
// does nothing
|
||||
}
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ package net.loveruby.cflat.asm;
|
|||
public interface Literal extends Comparable<Literal> {
|
||||
public String toSource();
|
||||
public String toSource(SymbolTable table);
|
||||
public void collectStatistics(AsmStatistics stats);
|
||||
public void collectStatistics(Statistics stats);
|
||||
public boolean isZero();
|
||||
public Literal plus(long diff);
|
||||
public int cmp(IntegerLiteral i);
|
||||
|
|
|
@ -15,7 +15,7 @@ abstract public class Operand implements OperandPattern {
|
|||
return null;
|
||||
}
|
||||
|
||||
abstract public void collectStatistics(AsmStatistics stats);
|
||||
abstract public void collectStatistics(Statistics stats);
|
||||
|
||||
// default implementation
|
||||
public boolean match(Operand operand) {
|
||||
|
|
|
@ -5,7 +5,7 @@ abstract public class Register extends Operand {
|
|||
return true;
|
||||
}
|
||||
|
||||
public void collectStatistics(AsmStatistics stats) {
|
||||
public void collectStatistics(Statistics stats) {
|
||||
stats.registerUsed(this);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
package net.loveruby.cflat.asm;
|
||||
import java.util.*;
|
||||
|
||||
public class AsmStatistics {
|
||||
public class Statistics {
|
||||
protected Map<Register, Integer> registerUsage;
|
||||
protected Map<String, Integer> insnUsage;
|
||||
protected Map<Symbol, Integer> symbolUsage;
|
||||
|
||||
static public AsmStatistics collect(List<Assembly> assemblies) {
|
||||
AsmStatistics stats = new AsmStatistics();
|
||||
static public Statistics collect(List<Assembly> assemblies) {
|
||||
Statistics stats = new Statistics();
|
||||
for (Assembly asm : assemblies) {
|
||||
asm.collectStatistics(stats);
|
||||
}
|
||||
return stats;
|
||||
}
|
||||
|
||||
public AsmStatistics() {
|
||||
public Statistics() {
|
||||
registerUsage = new HashMap<Register, Integer>();
|
||||
insnUsage = new HashMap<String, Integer>();
|
||||
symbolUsage = new HashMap<Symbol, Integer>();
|
|
@ -13,7 +13,7 @@ public class SuffixedSymbol implements Symbol {
|
|||
return false;
|
||||
}
|
||||
|
||||
public void collectStatistics(AsmStatistics stats) {
|
||||
public void collectStatistics(Statistics stats) {
|
||||
base.collectStatistics(stats);
|
||||
}
|
||||
|
||||
|
|
|
@ -384,7 +384,7 @@ public class CodeGenerator
|
|||
AssemblyFile file, DefinedFunction func) {
|
||||
AssemblyFile body = compileStmts(func);
|
||||
List<Assembly> bodyAsms = optimize(body.assemblies());
|
||||
AsmStatistics stats = AsmStatistics.collect(bodyAsms);
|
||||
Statistics stats = Statistics.collect(bodyAsms);
|
||||
bodyAsms = reduceLabels(bodyAsms, stats);
|
||||
List<Register> saveRegs = usedCalleeSavedRegistersWithoutBP(stats);
|
||||
long saveRegsBytes = stackSizeFromWordNum(saveRegs.size());
|
||||
|
@ -476,7 +476,8 @@ public class CodeGenerator
|
|||
// #@@}
|
||||
|
||||
// #@@range/reduceLabels{
|
||||
private List<Assembly> reduceLabels(List<Assembly> assemblies, AsmStatistics stats) {
|
||||
private List<Assembly> reduceLabels(
|
||||
List<Assembly> assemblies, Statistics stats) {
|
||||
List<Assembly> result = new ArrayList<Assembly>();
|
||||
for (Assembly asm : assemblies) {
|
||||
if (asm.isLabel() && ! stats.doesSymbolUsed((Label)asm)) {
|
||||
|
@ -490,7 +491,7 @@ public class CodeGenerator
|
|||
}
|
||||
// #@@}
|
||||
|
||||
private List<Register> usedCalleeSavedRegistersWithoutBP(AsmStatistics stats) {
|
||||
private List<Register> usedCalleeSavedRegistersWithoutBP(Statistics stats) {
|
||||
List<Register> result = new ArrayList<Register>();
|
||||
for (Register reg : calleeSavedRegisters()) {
|
||||
if (stats.doesRegisterUsed(reg) && !reg.equals(bp())) {
|
||||
|
|
Loading…
Reference in New Issue