From 19ca32a89d4e9c1d9e601deef8dcf340a55846cc Mon Sep 17 00:00:00 2001 From: Minero Aoki Date: Mon, 15 Sep 2008 17:37:49 +0000 Subject: [PATCH] * net/loveruby/cflat/asm/Address.java -> MemoryReference.java * net/loveruby/cflat/asm/DirectAddress.java -> DirectMemoryReference.java * net/loveruby/cflat/asm/IndirectAddress.java -> IndirectMemoryReference.java * net/loveruby/cflat/compiler/CodeGenerator.java: Address -> MemoryReference. * net/loveruby/cflat/asm/AsmEntity.java: ditto. * net/loveruby/cflat/asm/AbsoluteAddress.java: ditto. * net/loveruby/cflat/ast/Entity.java: ditto. * net/loveruby/cflat/ast/Variable.java: ditto. * net/loveruby/cflat/ast/DefinedVariable.java: ditto. * net/loveruby/cflat/ast/UndefinedVariable.java: ditto. * net/loveruby/cflat/ast/Function.java: ditto. * net/loveruby/cflat/ast/ExprNode.java: ditto. * net/loveruby/cflat/ast/VariableNode.java: ditto. * net/loveruby/cflat/ast/CastNode.java: ditto. git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4026 1b9489fe-b721-0410-924e-b54b9192deb8 --- ChangeLog | 33 +++++++++++++++++++ ToDo | 3 ++ net/loveruby/cflat/asm/AbsoluteAddress.java | 2 +- net/loveruby/cflat/asm/Address.java | 7 ---- net/loveruby/cflat/asm/AsmEntity.java | 2 +- ...ddress.java => DirectMemoryReference.java} | 6 ++-- ...ress.java => IndirectMemoryReference.java} | 6 ++-- net/loveruby/cflat/asm/MemoryReference.java | 7 ++++ net/loveruby/cflat/ast/CastNode.java | 2 +- net/loveruby/cflat/ast/DefinedVariable.java | 8 ++--- net/loveruby/cflat/ast/Entity.java | 2 +- net/loveruby/cflat/ast/ExprNode.java | 2 +- net/loveruby/cflat/ast/Function.java | 2 +- net/loveruby/cflat/ast/UndefinedVariable.java | 6 ++-- net/loveruby/cflat/ast/Variable.java | 2 +- net/loveruby/cflat/ast/VariableNode.java | 2 +- .../cflat/compiler/CodeGenerator.java | 32 +++++++++--------- 17 files changed, 80 insertions(+), 44 deletions(-) delete mode 100644 net/loveruby/cflat/asm/Address.java rename net/loveruby/cflat/asm/{DirectAddress.java => DirectMemoryReference.java} (63%) rename net/loveruby/cflat/asm/{IndirectAddress.java => IndirectMemoryReference.java} (69%) create mode 100644 net/loveruby/cflat/asm/MemoryReference.java diff --git a/ChangeLog b/ChangeLog index 8b29f97..ef9301a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,36 @@ +Tue Sep 16 02:37:46 2008 Minero Aoki + + * net/loveruby/cflat/asm/Address.java -> MemoryReference.java + + * net/loveruby/cflat/asm/DirectAddress.java -> + DirectMemoryReference.java + + * net/loveruby/cflat/asm/IndirectAddress.java -> + IndirectMemoryReference.java + + * net/loveruby/cflat/compiler/CodeGenerator.java: Address -> + MemoryReference. + + * net/loveruby/cflat/asm/AsmEntity.java: ditto. + + * net/loveruby/cflat/asm/AbsoluteAddress.java: ditto. + + * net/loveruby/cflat/ast/Entity.java: ditto. + + * net/loveruby/cflat/ast/Variable.java: ditto. + + * net/loveruby/cflat/ast/DefinedVariable.java: ditto. + + * net/loveruby/cflat/ast/UndefinedVariable.java: ditto. + + * net/loveruby/cflat/ast/Function.java: ditto. + + * net/loveruby/cflat/ast/ExprNode.java: ditto. + + * net/loveruby/cflat/ast/VariableNode.java: ditto. + + * net/loveruby/cflat/ast/CastNode.java: ditto. + Tue Sep 16 02:18:06 2008 Minero Aoki * net/loveruby/cflat/compiler/CodeGenerator.java: both of "puts" diff --git a/ToDo b/ToDo index be67354..a1db677 100644 --- a/ToDo +++ b/ToDo @@ -2,6 +2,8 @@ == Current +* AsmEntity -> AsmOperand +* reject struct/union/array on stmt context * -O (peephole optimization) * movl $0, %eax => xorl %eax, %eax * addl $1, %eax => incl %eax @@ -236,3 +238,4 @@ - write install.sh - va_list - objectify instruction +- fix &puts diff --git a/net/loveruby/cflat/asm/AbsoluteAddress.java b/net/loveruby/cflat/asm/AbsoluteAddress.java index 762f7b5..ffd7e13 100644 --- a/net/loveruby/cflat/asm/AbsoluteAddress.java +++ b/net/loveruby/cflat/asm/AbsoluteAddress.java @@ -1,6 +1,6 @@ package net.loveruby.cflat.asm; -public class AbsoluteAddress extends Address { +public class AbsoluteAddress extends AsmEntity { protected Register register; public AbsoluteAddress(Register reg) { diff --git a/net/loveruby/cflat/asm/Address.java b/net/loveruby/cflat/asm/Address.java deleted file mode 100644 index 9e7e07c..0000000 --- a/net/loveruby/cflat/asm/Address.java +++ /dev/null @@ -1,7 +0,0 @@ -package net.loveruby.cflat.asm; - -abstract public class Address extends AsmEntity { - public boolean isAddress() { - return true; - } -} diff --git a/net/loveruby/cflat/asm/AsmEntity.java b/net/loveruby/cflat/asm/AsmEntity.java index 405db6e..87b5f43 100644 --- a/net/loveruby/cflat/asm/AsmEntity.java +++ b/net/loveruby/cflat/asm/AsmEntity.java @@ -3,7 +3,7 @@ package net.loveruby.cflat.asm; abstract public class AsmEntity { abstract public String toString(); - public boolean isAddress() { + public boolean isMemoryReference() { return false; } } diff --git a/net/loveruby/cflat/asm/DirectAddress.java b/net/loveruby/cflat/asm/DirectMemoryReference.java similarity index 63% rename from net/loveruby/cflat/asm/DirectAddress.java rename to net/loveruby/cflat/asm/DirectMemoryReference.java index 4d9c437..97b7883 100644 --- a/net/loveruby/cflat/asm/DirectAddress.java +++ b/net/loveruby/cflat/asm/DirectMemoryReference.java @@ -1,13 +1,13 @@ package net.loveruby.cflat.asm; -public class DirectAddress extends Address { +public class DirectMemoryReference extends MemoryReference { protected Literal value; - public DirectAddress(Label label) { + public DirectMemoryReference(Label label) { this.value = new Symbol(label); } - public DirectAddress(IntegerLiteral n) { + public DirectMemoryReference(IntegerLiteral n) { this.value = n; } diff --git a/net/loveruby/cflat/asm/IndirectAddress.java b/net/loveruby/cflat/asm/IndirectMemoryReference.java similarity index 69% rename from net/loveruby/cflat/asm/IndirectAddress.java rename to net/loveruby/cflat/asm/IndirectMemoryReference.java index 8d4f2c9..700ae09 100644 --- a/net/loveruby/cflat/asm/IndirectAddress.java +++ b/net/loveruby/cflat/asm/IndirectMemoryReference.java @@ -1,14 +1,14 @@ package net.loveruby.cflat.asm; -public class IndirectAddress extends Address { +public class IndirectMemoryReference extends MemoryReference { protected long offset; protected Register base; - public IndirectAddress(Register base) { + public IndirectMemoryReference(Register base) { this(0, base); } - public IndirectAddress(long offset, Register base) { + public IndirectMemoryReference(long offset, Register base) { this.offset = offset; this.base = base; } diff --git a/net/loveruby/cflat/asm/MemoryReference.java b/net/loveruby/cflat/asm/MemoryReference.java new file mode 100644 index 0000000..d71d1d1 --- /dev/null +++ b/net/loveruby/cflat/asm/MemoryReference.java @@ -0,0 +1,7 @@ +package net.loveruby.cflat.asm; + +abstract public class MemoryReference extends AsmEntity { + public boolean isMemoryReference() { + return true; + } +} diff --git a/net/loveruby/cflat/ast/CastNode.java b/net/loveruby/cflat/ast/CastNode.java index db4c910..ce52e66 100644 --- a/net/loveruby/cflat/ast/CastNode.java +++ b/net/loveruby/cflat/ast/CastNode.java @@ -35,7 +35,7 @@ public class CastNode extends ExprNode { return expr.isConstantAddress(); } - public Address memref() { + public MemoryReference memref() { return expr.memref(); } diff --git a/net/loveruby/cflat/ast/DefinedVariable.java b/net/loveruby/cflat/ast/DefinedVariable.java index 215c237..fbadfe2 100644 --- a/net/loveruby/cflat/ast/DefinedVariable.java +++ b/net/loveruby/cflat/ast/DefinedVariable.java @@ -4,7 +4,7 @@ import net.loveruby.cflat.asm.*; public class DefinedVariable extends Variable { protected ExprNode initializer; - protected Address memref; + protected MemoryReference memref; public DefinedVariable(boolean priv, TypeNode type, String name, ExprNode init) { @@ -33,11 +33,11 @@ public class DefinedVariable extends Variable { this.initializer = expr; } - public void setMemref(Address addr) { - this.memref = addr; + public void setMemref(MemoryReference mem) { + this.memref = mem; } - public Address memref() { + public MemoryReference memref() { if (memref == null) throw new Error("unresolved variable address"); return memref; diff --git a/net/loveruby/cflat/ast/Entity.java b/net/loveruby/cflat/ast/Entity.java index 9536436..7487189 100644 --- a/net/loveruby/cflat/ast/Entity.java +++ b/net/loveruby/cflat/ast/Entity.java @@ -52,7 +52,7 @@ abstract public class Entity extends Node { return (nRefered > 0); } - abstract public Address memref(); + abstract public MemoryReference memref(); abstract public AsmEntity address(); public Location location() { diff --git a/net/loveruby/cflat/ast/ExprNode.java b/net/loveruby/cflat/ast/ExprNode.java index fbb7854..e48cc16 100644 --- a/net/loveruby/cflat/ast/ExprNode.java +++ b/net/loveruby/cflat/ast/ExprNode.java @@ -48,7 +48,7 @@ abstract public class ExprNode extends Node { throw new Error("ExprNode#address called"); } - public Address memref() { + public MemoryReference memref() { throw new Error("ExprNode#memref called"); } } diff --git a/net/loveruby/cflat/ast/Function.java b/net/loveruby/cflat/ast/Function.java index e222142..98da77d 100644 --- a/net/loveruby/cflat/ast/Function.java +++ b/net/loveruby/cflat/ast/Function.java @@ -25,7 +25,7 @@ abstract public class Function extends Entity { return returnType().isVoid(); } - public Address memref() { + public MemoryReference memref() { return null; } diff --git a/net/loveruby/cflat/ast/UndefinedVariable.java b/net/loveruby/cflat/ast/UndefinedVariable.java index c8970b8..23c675d 100644 --- a/net/loveruby/cflat/ast/UndefinedVariable.java +++ b/net/loveruby/cflat/ast/UndefinedVariable.java @@ -15,12 +15,12 @@ public class UndefinedVariable extends Variable { return name(); } - public void setMemref(Address addr) { + public void setMemref(MemoryReference mem) { throw new Error("UndefinedVariable#Memref"); } - public Address memref() { - return new DirectAddress(new Label(symbol())); + public MemoryReference memref() { + return new DirectMemoryReference(new Label(symbol())); } public AsmEntity address() { diff --git a/net/loveruby/cflat/ast/Variable.java b/net/loveruby/cflat/ast/Variable.java index 056e973..66201b1 100644 --- a/net/loveruby/cflat/ast/Variable.java +++ b/net/loveruby/cflat/ast/Variable.java @@ -18,5 +18,5 @@ abstract public class Variable extends Entity { return (sequence < 0) ? name : (name + "." + sequence); } - abstract public void setMemref(Address addr); + abstract public void setMemref(MemoryReference addr); } diff --git a/net/loveruby/cflat/ast/VariableNode.java b/net/loveruby/cflat/ast/VariableNode.java index b436184..71f1491 100644 --- a/net/loveruby/cflat/ast/VariableNode.java +++ b/net/loveruby/cflat/ast/VariableNode.java @@ -56,7 +56,7 @@ public class VariableNode extends ExprNode { return entity.address(); } - public Address memref() { + public MemoryReference memref() { return entity.memref(); } diff --git a/net/loveruby/cflat/compiler/CodeGenerator.java b/net/loveruby/cflat/compiler/CodeGenerator.java index 91a679b..307f9e4 100644 --- a/net/loveruby/cflat/compiler/CodeGenerator.java +++ b/net/loveruby/cflat/compiler/CodeGenerator.java @@ -81,14 +81,14 @@ public class CodeGenerator extends Visitor implements ASTLHSVisitor { /** Linux/IA-32 dependent */ // FIXME: PIC - protected Address globalVariableAddress(String sym) { - return new DirectAddress(new Label(csymbol(sym))); + protected MemoryReference globalVariableAddress(String sym) { + return new DirectMemoryReference(new Label(csymbol(sym))); } /** Linux/IA-32 dependent */ // FIXME: PIC - protected Address commonSymbolAddress(String sym) { - return new DirectAddress(new Label(csymbol(sym))); + protected MemoryReference commonSymbolAddress(String sym) { + return new DirectMemoryReference(new Label(csymbol(sym))); } /** Generates static variable entries */ @@ -877,12 +877,12 @@ public class CodeGenerator extends Visitor implements ASTLHSVisitor { return new Register(name); } - protected IndirectAddress mem(Register reg) { - return new IndirectAddress(reg); + protected IndirectMemoryReference mem(Register reg) { + return new IndirectMemoryReference(reg); } - protected IndirectAddress mem(long offset, Register reg) { - return new IndirectAddress(offset, reg); + protected IndirectMemoryReference mem(long offset, Register reg) { + return new IndirectMemoryReference(offset, reg); } protected ImmediateValue imm(long n) { @@ -893,30 +893,30 @@ public class CodeGenerator extends Visitor implements ASTLHSVisitor { return new ImmediateValue(label); } - protected void load(Type type, Address addr, Register reg) { + protected void load(Type type, MemoryReference mem, Register reg) { switch ((int)type.size()) { case 1: if (type.isSigned()) { // signed char - movsbl(addr, reg); + movsbl(mem, reg); } else { // unsigned char - movzbl(addr, reg); + movzbl(mem, reg); } break; case 2: if (type.isSigned()) { // signed short - movswl(addr, reg); + movswl(mem, reg); } else { // unsigned short - movzwl(addr, reg); + movzwl(mem, reg); } break; default: // int, long, long_long - mov(type, addr, reg.forType(type)); + mov(type, mem, reg.forType(type)); break; } } - protected void save(Type type, Register reg, Address addr) { - mov(type, reg.forType(type), addr); + protected void save(Type type, Register reg, MemoryReference mem) { + mov(type, reg.forType(type), mem); } public void comment(String str) { as.comment(str); }