1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-12-26 18:29:54 +00:00

Fixed high-byteoperator problem with constants.

This commit is contained in:
Jesper Gravgaard 2018-03-27 11:52:51 +02:00
parent b122ac8af3
commit 39a6b0493f
4 changed files with 7 additions and 7 deletions

View File

@ -106,7 +106,7 @@ public class AsmFormat {
} else if(Operators.HIBYTE.equals(operator)) {
SymbolType operandType = SymbolTypeInference.inferType(program.getScope(), operand);
if(SymbolType.isByte(operandType) || SymbolType.isSByte(operandType)) {
return getAsmConstant(program, operand, outerPrecedence, codeScope);
return getAsmConstant(program, new ConstantInteger(0l), outerPrecedence, codeScope);
} else if(SymbolType.isWord(operandType) || SymbolType.isSWord(operandType) || operandType instanceof SymbolTypePointer) {
return ">" + getAsmConstant(program, operand, outerPrecedence, codeScope);
} else if(SymbolType.isDWord(operandType) || SymbolType.isSDWord(operandType)) {

View File

@ -43,7 +43,7 @@ void menu() {
*DTV_GRAPHICS_VIC_BANK = (byte)((dword)MENU_CHARSET/$10000);
// DTV Color Bank
*DTV_COLOR_BANK_LO = <((word)(DTV_COLOR_BANK_DEFAULT/$400));
*DTV_COLOR_BANK_HI = 0; // >((word)(DTV_COLOR_BANK_DEFAULT/$400)) - fails currently because the high operator can't see the word type of the operand;
*DTV_COLOR_BANK_HI = >((word)(DTV_COLOR_BANK_DEFAULT/$400));
// DTV Graphics Mode
*DTV_CONTROL = 0;
// VIC Graphics Bank

View File

@ -7,6 +7,7 @@
main: {
lda #DVAL/$400
sta SCREEN+0
lda #0
sta SCREEN+1
rts
}

View File

@ -224,7 +224,7 @@ main: {
lda #DVAL/$400
sta SCREEN+0
//SEG10 [5] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← >((word))(const dword) DVAL#0/(word/signed word/dword/signed dword) 1024 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #DVAL/$400
lda #0
sta SCREEN+1
jmp breturn
//SEG11 main::@return
@ -272,7 +272,7 @@ main: {
lda #DVAL/$400
sta SCREEN+0
//SEG10 [5] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← >((word))(const dword) DVAL#0/(word/signed word/dword/signed dword) 1024 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #DVAL/$400
lda #0
sta SCREEN+1
jmp breturn
//SEG11 main::@return
@ -286,8 +286,6 @@ Removing instruction jmp b1
Removing instruction jmp bend
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #DVAL/$400
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Removing instruction bbegin:
Removing instruction b1_from_bbegin:
Removing instruction bend_from_b1:
@ -311,7 +309,7 @@ FINAL SYMBOL TABLE
FINAL ASSEMBLER
Score: 22
Score: 24
//SEG0 Basic Upstart
.pc = $801 "Basic"
@ -333,6 +331,7 @@ main: {
lda #DVAL/$400
sta SCREEN+0
//SEG10 [5] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← >((word))(const dword) DVAL#0/(word/signed word/dword/signed dword) 1024 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #0
sta SCREEN+1
//SEG11 main::@return
//SEG12 [6] return [ ] ( main:2 [ ] )