mirror of https://github.com/aamine/cbc
fix preproc tags
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4302 1b9489fe-b721-0410-924e-b54b9192deb8
This commit is contained in:
parent
9ada80d267
commit
4ec1db3eea
|
|
@ -413,7 +413,7 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
|
||||||
|
|
||||||
// #@@range/cfb_offset{
|
// #@@range/cfb_offset{
|
||||||
AssemblyCode body = optimize(compileStmts(func));
|
AssemblyCode body = optimize(compileStmts(func));
|
||||||
frame.saveRegs = usedCalleeSavedRegisters(body);
|
frame.saveRegs = usedCalleeSaveRegisters(body);
|
||||||
frame.tempSize = body.virtualStack.maxSize();
|
frame.tempSize = body.virtualStack.maxSize();
|
||||||
|
|
||||||
fixLocalVariableOffsets(func.lvarScope(), frame.lvarOffset());
|
fixLocalVariableOffsets(func.lvarScope(), frame.lvarOffset());
|
||||||
|
|
@ -494,10 +494,10 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
|
||||||
// #@@}
|
// #@@}
|
||||||
|
|
||||||
// does NOT include BP
|
// does NOT include BP
|
||||||
// #@@range/usedCalleeSavedRegisters{
|
// #@@range/usedCalleeSaveRegisters{
|
||||||
private List<Register> usedCalleeSavedRegisters(AssemblyCode body) {
|
private List<Register> usedCalleeSaveRegisters(AssemblyCode body) {
|
||||||
List<Register> result = new ArrayList<Register>();
|
List<Register> result = new ArrayList<Register>();
|
||||||
for (Register reg : calleeSavedRegisters()) {
|
for (Register reg : calleeSaveRegisters()) {
|
||||||
if (body.doesUses(reg)) {
|
if (body.doesUses(reg)) {
|
||||||
result.add(reg);
|
result.add(reg);
|
||||||
}
|
}
|
||||||
|
|
@ -507,22 +507,22 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
|
||||||
}
|
}
|
||||||
// #@@}
|
// #@@}
|
||||||
|
|
||||||
static final RegisterClass[] CALLEE_SAVED_REGISTERS = {
|
static final RegisterClass[] CALLEE_SAVE_REGISTERS = {
|
||||||
RegisterClass.BX, RegisterClass.BP,
|
RegisterClass.BX, RegisterClass.BP,
|
||||||
RegisterClass.SI, RegisterClass.DI
|
RegisterClass.SI, RegisterClass.DI
|
||||||
};
|
};
|
||||||
|
|
||||||
private List<Register> calleeSavedRegistersCache = null;
|
private List<Register> calleeSaveRegistersCache = null;
|
||||||
|
|
||||||
private List<Register> calleeSavedRegisters() {
|
private List<Register> calleeSaveRegisters() {
|
||||||
if (calleeSavedRegistersCache == null) {
|
if (calleeSaveRegistersCache == null) {
|
||||||
List<Register> regs = new ArrayList<Register>();
|
List<Register> regs = new ArrayList<Register>();
|
||||||
for (RegisterClass c : CALLEE_SAVED_REGISTERS) {
|
for (RegisterClass c : CALLEE_SAVE_REGISTERS) {
|
||||||
regs.add(new Register(c, naturalType));
|
regs.add(new Register(c, naturalType));
|
||||||
}
|
}
|
||||||
calleeSavedRegistersCache = regs;
|
calleeSaveRegistersCache = regs;
|
||||||
}
|
}
|
||||||
return calleeSavedRegistersCache;
|
return calleeSaveRegistersCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
// #@@range/generateFunctionBody{
|
// #@@range/generateFunctionBody{
|
||||||
|
|
@ -830,6 +830,7 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
|
||||||
case MUL:
|
case MUL:
|
||||||
as.imul(right, left);
|
as.imul(right, left);
|
||||||
break;
|
break;
|
||||||
|
// #@@range/compileBinaryOp_sdiv{
|
||||||
case S_DIV:
|
case S_DIV:
|
||||||
case S_MOD:
|
case S_MOD:
|
||||||
as.cltd();
|
as.cltd();
|
||||||
|
|
@ -837,6 +838,7 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
|
||||||
if (op == Op.S_MOD) {
|
if (op == Op.S_MOD) {
|
||||||
as.mov(dx(), left);
|
as.mov(dx(), left);
|
||||||
}
|
}
|
||||||
|
// #@@}
|
||||||
break;
|
break;
|
||||||
case U_DIV:
|
case U_DIV:
|
||||||
case U_MOD:
|
case U_MOD:
|
||||||
|
|
@ -904,9 +906,11 @@ public class CodeGenerator implements net.loveruby.cflat.sysdep.CodeGenerator,
|
||||||
as.not(ax(src));
|
as.not(ax(src));
|
||||||
break;
|
break;
|
||||||
case NOT:
|
case NOT:
|
||||||
|
// #@@range/Uni_not{
|
||||||
as.test(ax(src), ax(src));
|
as.test(ax(src), ax(src));
|
||||||
as.sete(al());
|
as.sete(al());
|
||||||
as.movzx(al(), ax(dest));
|
as.movzx(al(), ax(dest));
|
||||||
|
// #@@}
|
||||||
break;
|
break;
|
||||||
case S_CAST:
|
case S_CAST:
|
||||||
as.movsx(ax(src), ax(dest));
|
as.movsx(ax(src), ax(dest));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue