From 39e7ce3df16c9b6e2967ba8934975f0253806f45 Mon Sep 17 00:00:00 2001 From: Jesper Gravgaard Date: Sat, 11 Aug 2018 11:38:19 +0200 Subject: [PATCH] Refactored all casts to pointers to use the generic OperatorCastPtr. --- .../camelot64/kickc/fragment/AsmFormat.java | 2 +- .../kickc/fragment/asm/pbuz1=_ptrby_vwuz1.asm | 0 .../kickc/fragment/asm/pbuz1=_ptrby_vwuz2.asm | 4 --- .../model/operators/OperatorCastPtrByte.java | 30 ------------------- .../operators/OperatorCastPtrSignedByte.java | 30 ------------------- .../kickc/model/operators/Operators.java | 6 ---- .../kickc/passes/Pass2NopCastElimination.java | 6 ---- 7 files changed, 1 insertion(+), 77 deletions(-) delete mode 100644 src/main/java/dk/camelot64/kickc/fragment/asm/pbuz1=_ptrby_vwuz1.asm delete mode 100644 src/main/java/dk/camelot64/kickc/fragment/asm/pbuz1=_ptrby_vwuz2.asm delete mode 100644 src/main/java/dk/camelot64/kickc/model/operators/OperatorCastPtrByte.java delete mode 100644 src/main/java/dk/camelot64/kickc/model/operators/OperatorCastPtrSignedByte.java diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFormat.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFormat.java index 2af353a29..adc0ab698 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFormat.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFormat.java @@ -115,7 +115,7 @@ public class AsmFormat { } else { return getAsmConstant(program, new ConstantBinary(new ConstantInteger((long)0xff), Operators.BOOL_AND, operand), outerPrecedence, codeScope); } - } else if(operator instanceof OperatorCastPtr || Operators.CAST_WORD.equals(operator) || Operators.CAST_SWORD.equals(operator) || Operators.CAST_PTRBY.equals(operator)|| Operators.CAST_PTRSBY.equals(operator)) { + } else if(operator instanceof OperatorCastPtr || Operators.CAST_WORD.equals(operator) || Operators.CAST_SWORD.equals(operator) ) { SymbolType operandType = SymbolTypeInference.inferType(program.getScope(), operand); if(SymbolType.isWord(operandType) || SymbolType.isSWord(operandType) || SymbolType.isByte(operandType) || SymbolType.isSByte(operandType) || operandType instanceof SymbolTypePointer) { // No cast needed diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/pbuz1=_ptrby_vwuz1.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/pbuz1=_ptrby_vwuz1.asm deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/pbuz1=_ptrby_vwuz2.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/pbuz1=_ptrby_vwuz2.asm deleted file mode 100644 index 5b8ff5c26..000000000 --- a/src/main/java/dk/camelot64/kickc/fragment/asm/pbuz1=_ptrby_vwuz2.asm +++ /dev/null @@ -1,4 +0,0 @@ -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastPtrByte.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastPtrByte.java deleted file mode 100644 index 759dfca96..000000000 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastPtrByte.java +++ /dev/null @@ -1,30 +0,0 @@ -package dk.camelot64.kickc.model.operators; - -import dk.camelot64.kickc.model.CompileError; -import dk.camelot64.kickc.model.types.SymbolType; -import dk.camelot64.kickc.model.types.SymbolTypePointer; -import dk.camelot64.kickc.model.types.SymbolTypeSimple; -import dk.camelot64.kickc.model.values.ConstantInteger; -import dk.camelot64.kickc.model.values.ConstantLiteral; -import dk.camelot64.kickc.model.values.ConstantPointer; - -/** Unary Cast to byte pointer operator ( (byte*) x ) */ -public class OperatorCastPtrByte extends OperatorUnary { - - public OperatorCastPtrByte(int precedence) { - super("((byte*))", "_ptrby_", precedence); - } - - @Override - public ConstantLiteral calculateLiteral(ConstantLiteral value) { - if(value instanceof ConstantInteger) { - return new ConstantPointer(((ConstantInteger) value).getInteger(), SymbolType.BYTE); - } - throw new CompileError("Calculation not implemented " + getOperator() + " " + value ); - } - - @Override - public SymbolType inferType(SymbolTypeSimple operandType) { - return new SymbolTypePointer(SymbolType.BYTE); - } -} diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastPtrSignedByte.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastPtrSignedByte.java deleted file mode 100644 index c3039753d..000000000 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastPtrSignedByte.java +++ /dev/null @@ -1,30 +0,0 @@ -package dk.camelot64.kickc.model.operators; - -import dk.camelot64.kickc.model.CompileError; -import dk.camelot64.kickc.model.types.SymbolType; -import dk.camelot64.kickc.model.types.SymbolTypePointer; -import dk.camelot64.kickc.model.types.SymbolTypeSimple; -import dk.camelot64.kickc.model.values.ConstantInteger; -import dk.camelot64.kickc.model.values.ConstantLiteral; -import dk.camelot64.kickc.model.values.ConstantPointer; - -/** Unary Cast to signed byte pointer operator ( (signed byte*) x ) */ -public class OperatorCastPtrSignedByte extends OperatorUnary { - - public OperatorCastPtrSignedByte(int precedence) { - super("((signed byte*))", "_ptrsby_", precedence); - } - - @Override - public ConstantLiteral calculateLiteral(ConstantLiteral value) { - if(value instanceof ConstantInteger) { - return new ConstantPointer(((ConstantInteger) value).getInteger(), SymbolType.SBYTE); - } - throw new CompileError("Calculation not implemented " + getOperator() + " " + value ); - } - - @Override - public SymbolType inferType(SymbolTypeSimple operandType) { - return new SymbolTypePointer(SymbolType.SBYTE); - } -} diff --git a/src/main/java/dk/camelot64/kickc/model/operators/Operators.java b/src/main/java/dk/camelot64/kickc/model/operators/Operators.java index 6c2644686..f905b1f1e 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/Operators.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/Operators.java @@ -25,8 +25,6 @@ public class Operators { public static final OperatorUnary CAST_SWORD = new OperatorCastSWord(2); public static final OperatorUnary CAST_DWORD = new OperatorCastDWord(2); public static final OperatorUnary CAST_SDWORD = new OperatorCastSDWord(2); - public static final OperatorUnary CAST_PTRBY = new OperatorCastPtrByte(2); - public static final OperatorUnary CAST_PTRSBY = new OperatorCastPtrSignedByte(2); public static final OperatorUnary CAST_BOOL= new OperatorCastBool(2); public static final OperatorBinary MULTIPLY = new OperatorMultiply(3); public static final OperatorBinary DIVIDE = new OperatorDivide(3); @@ -150,10 +148,6 @@ public class Operators { return CAST_SDWORD; } else if(SymbolType.BOOLEAN.equals(castType)) { return CAST_BOOL; - } else if(castType instanceof SymbolTypePointer && SymbolType.BYTE.equals(((SymbolTypePointer) castType).getElementType())) { - return CAST_PTRBY; - } else if(castType instanceof SymbolTypePointer && SymbolType.SBYTE.equals(((SymbolTypePointer) castType).getElementType())) { - return CAST_PTRSBY; } else if(castType instanceof SymbolTypePointer) { return new OperatorCastPtr(CAST_BYTE.getPrecedence(), ((SymbolTypePointer) castType).getElementType()); } else { diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass2NopCastElimination.java b/src/main/java/dk/camelot64/kickc/passes/Pass2NopCastElimination.java index 352d6a7ad..c396f90e9 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass2NopCastElimination.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass2NopCastElimination.java @@ -52,12 +52,6 @@ public class Pass2NopCastElimination extends Pass2SsaOptimization { } else if(SymbolType.isSWord(rValType) && Operators.CAST_WORD.equals(assignment.getOperator())) { isNopCast = true; toType = SymbolType.WORD; - } else if(SymbolType.isWord(rValType) && Operators.CAST_PTRBY.equals(assignment.getOperator())) { - isNopCast = true; - toType = new SymbolTypePointer(SymbolType.BYTE); - } else if(SymbolType.isWord(rValType) && Operators.CAST_PTRSBY.equals(assignment.getOperator())) { - isNopCast = true; - toType = new SymbolTypePointer(SymbolType.SBYTE); } else if(SymbolType.isWord(rValType) && assignment.getOperator() instanceof OperatorCastPtr) { isNopCast = true; OperatorCastPtr castOperator = (OperatorCastPtr) (assignment.getOperator());