mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-02-16 18:30:37 +00:00
- Inline code can never be banked.
(cherry picked from commit 249b7600a9262ea673e63d133db75690af43ca05)
This commit is contained in:
parent
f81c5ce040
commit
2513e59266
@ -894,20 +894,27 @@ public class Pass4CodeGeneration {
|
|||||||
} else if (statement instanceof StatementCallExecute) {
|
} else if (statement instanceof StatementCallExecute) {
|
||||||
// TODO: This part seems never to be executed! Old code?
|
// TODO: This part seems never to be executed! Old code?
|
||||||
StatementCallExecute call = (StatementCallExecute) statement;
|
StatementCallExecute call = (StatementCallExecute) statement;
|
||||||
Procedure procedure = getScope().getProcedure(call.getProcedure());
|
|
||||||
Procedure procedureFrom = block.getProcedure(this.program); // We obtain from where the procedure is called, to validate the bank equality.
|
|
||||||
RValue procedureRVal = call.getProcedureRVal();
|
RValue procedureRVal = call.getProcedureRVal();
|
||||||
// Same as PHI
|
// Generate ASM for a call
|
||||||
if(procedure.isDeclaredBanked() && procedureFrom.getBank() != procedure.getBank()) {
|
AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program);
|
||||||
AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallPrepare(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program);
|
|
||||||
AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallExecute(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program);
|
|
||||||
AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallFinalize(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program);
|
|
||||||
} else {
|
|
||||||
AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program);
|
|
||||||
}
|
|
||||||
if (!(procedureRVal instanceof ProcedureRef)) {
|
if (!(procedureRVal instanceof ProcedureRef)) {
|
||||||
asm.getCurrentChunk().setClobberOverwrite(CpuClobber.CLOBBER_ALL);
|
asm.getCurrentChunk().setClobberOverwrite(CpuClobber.CLOBBER_ALL);
|
||||||
}
|
}
|
||||||
|
// StatementCallExecute call = (StatementCallExecute) statement;
|
||||||
|
// Procedure procedure = getScope().getProcedure(call.getProcedure());
|
||||||
|
// Procedure procedureFrom = block.getProcedure(this.program); // We obtain from where the procedure is called, to validate the bank equality.
|
||||||
|
// RValue procedureRVal = call.getProcedureRVal();
|
||||||
|
// // Same as PHI
|
||||||
|
// if(procedure.isDeclaredBanked() && procedureFrom.getBank() != procedure.getBank()) {
|
||||||
|
// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallPrepare(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program);
|
||||||
|
// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallExecute(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program);
|
||||||
|
// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallFinalize(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program);
|
||||||
|
// } else {
|
||||||
|
// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program);
|
||||||
|
// }
|
||||||
|
// if (!(procedureRVal instanceof ProcedureRef)) {
|
||||||
|
// asm.getCurrentChunk().setClobberOverwrite(CpuClobber.CLOBBER_ALL);
|
||||||
|
// }
|
||||||
} else if (statement instanceof StatementExprSideEffect) {
|
} else if (statement instanceof StatementExprSideEffect) {
|
||||||
AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.exprSideEffect((StatementExprSideEffect) statement, program), program);
|
AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.exprSideEffect((StatementExprSideEffect) statement, program), program);
|
||||||
} else if (statement instanceof StatementReturn) {
|
} else if (statement instanceof StatementReturn) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user