1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-10-11 12:23:45 +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)) { } else if(Operators.HIBYTE.equals(operator)) {
SymbolType operandType = SymbolTypeInference.inferType(program.getScope(), operand); SymbolType operandType = SymbolTypeInference.inferType(program.getScope(), operand);
if(SymbolType.isByte(operandType) || SymbolType.isSByte(operandType)) { 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) { } else if(SymbolType.isWord(operandType) || SymbolType.isSWord(operandType) || operandType instanceof SymbolTypePointer) {
return ">" + getAsmConstant(program, operand, outerPrecedence, codeScope); return ">" + getAsmConstant(program, operand, outerPrecedence, codeScope);
} else if(SymbolType.isDWord(operandType) || SymbolType.isSDWord(operandType)) { } 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_GRAPHICS_VIC_BANK = (byte)((dword)MENU_CHARSET/$10000);
// DTV Color Bank // DTV Color Bank
*DTV_COLOR_BANK_LO = <((word)(DTV_COLOR_BANK_DEFAULT/$400)); *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 Graphics Mode
*DTV_CONTROL = 0; *DTV_CONTROL = 0;
// VIC Graphics Bank // VIC Graphics Bank

View File

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

View File

@ -224,7 +224,7 @@ main: {
lda #DVAL/$400 lda #DVAL/$400
sta SCREEN+0 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 //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 sta SCREEN+1
jmp breturn jmp breturn
//SEG11 main::@return //SEG11 main::@return
@ -272,7 +272,7 @@ main: {
lda #DVAL/$400 lda #DVAL/$400
sta SCREEN+0 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 //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 sta SCREEN+1
jmp breturn jmp breturn
//SEG11 main::@return //SEG11 main::@return
@ -286,8 +286,6 @@ Removing instruction jmp b1
Removing instruction jmp bend Removing instruction jmp bend
Removing instruction jmp breturn Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #DVAL/$400
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Removing instruction bbegin: Removing instruction bbegin:
Removing instruction b1_from_bbegin: Removing instruction b1_from_bbegin:
Removing instruction bend_from_b1: Removing instruction bend_from_b1:
@ -311,7 +309,7 @@ FINAL SYMBOL TABLE
FINAL ASSEMBLER FINAL ASSEMBLER
Score: 22 Score: 24
//SEG0 Basic Upstart //SEG0 Basic Upstart
.pc = $801 "Basic" .pc = $801 "Basic"
@ -333,6 +331,7 @@ main: {
lda #DVAL/$400 lda #DVAL/$400
sta SCREEN+0 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 //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 sta SCREEN+1
//SEG11 main::@return //SEG11 main::@return
//SEG12 [6] return [ ] ( main:2 [ ] ) //SEG12 [6] return [ ] ( main:2 [ ] )