mirror of
https://github.com/irmen/prog8.git
synced 2025-02-16 22:30:46 +00:00
optimize word&=$ff00 and word&=$00ff
This commit is contained in:
parent
990c8e1f18
commit
06128b5d07
@ -798,7 +798,8 @@ internal class ExpressionsAsmGen(private val program: Program, private val asmge
|
|||||||
"<=" -> asmgen.out(if(dt==DataType.UWORD) " jsr prog8_lib.lesseq_uw" else " jsr prog8_lib.lesseq_w")
|
"<=" -> asmgen.out(if(dt==DataType.UWORD) " jsr prog8_lib.lesseq_uw" else " jsr prog8_lib.lesseq_w")
|
||||||
">=" -> asmgen.out(if(dt==DataType.UWORD) " jsr prog8_lib.greatereq_uw" else " jsr prog8_lib.greatereq_w")
|
">=" -> asmgen.out(if(dt==DataType.UWORD) " jsr prog8_lib.greatereq_uw" else " jsr prog8_lib.greatereq_w")
|
||||||
"==" -> asmgen.out(" jsr prog8_lib.equal_w")
|
"==" -> asmgen.out(" jsr prog8_lib.equal_w")
|
||||||
"!=" -> asmgen.out(" jsr prog8_lib.notequal_w") "&" -> asmgen.out(" jsr prog8_lib.bitand_w")
|
"!=" -> asmgen.out(" jsr prog8_lib.notequal_w")
|
||||||
|
"&" -> asmgen.out(" jsr prog8_lib.bitand_w")
|
||||||
"^" -> asmgen.out(" jsr prog8_lib.bitxor_w")
|
"^" -> asmgen.out(" jsr prog8_lib.bitxor_w")
|
||||||
"|" -> asmgen.out(" jsr prog8_lib.bitor_w")
|
"|" -> asmgen.out(" jsr prog8_lib.bitor_w")
|
||||||
"and" -> asmgen.out(" jsr prog8_lib.and_w")
|
"and" -> asmgen.out(" jsr prog8_lib.and_w")
|
||||||
|
@ -1066,6 +1066,18 @@ internal class AugmentableAssignmentAsmGen(private val program: Program,
|
|||||||
else
|
else
|
||||||
asmgen.out(" lda #0 | sta $name | sta $name+1")
|
asmgen.out(" lda #0 | sta $name | sta $name+1")
|
||||||
}
|
}
|
||||||
|
value == 0x00ff -> {
|
||||||
|
if(asmgen.isTargetCpu(CpuType.CPU65c02))
|
||||||
|
asmgen.out(" stz $name+1")
|
||||||
|
else
|
||||||
|
asmgen.out(" lda #0 | sta $name+1")
|
||||||
|
}
|
||||||
|
value == 0xff00 -> {
|
||||||
|
if(asmgen.isTargetCpu(CpuType.CPU65c02))
|
||||||
|
asmgen.out(" stz $name")
|
||||||
|
else
|
||||||
|
asmgen.out(" lda #0 | sta $name")
|
||||||
|
}
|
||||||
value and 255 == 0 -> {
|
value and 255 == 0 -> {
|
||||||
if(asmgen.isTargetCpu(CpuType.CPU65c02))
|
if(asmgen.isTargetCpu(CpuType.CPU65c02))
|
||||||
asmgen.out(" stz $name")
|
asmgen.out(" stz $name")
|
||||||
|
@ -3,6 +3,10 @@ TODO
|
|||||||
|
|
||||||
For next release
|
For next release
|
||||||
^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^
|
||||||
|
- fix optimization of w >>= 8 , it generates bad code when opt=on, ok when opt=off
|
||||||
|
- fix w <<= 8 generates weird code with pha/pla in it when opt=on, ok when opt=off
|
||||||
|
- optimize w=msb(w) => w >>=8, w=lsb(w) ==> w &= $00ff
|
||||||
|
|
||||||
fix the value of ww being wrong (with optimizations enabled) in :
|
fix the value of ww being wrong (with optimizations enabled) in :
|
||||||
sub start() {
|
sub start() {
|
||||||
byte ub1 = -50
|
byte ub1 = -50
|
||||||
@ -17,7 +21,6 @@ fix the value of ww being wrong (with optimizations enabled) in :
|
|||||||
return x1
|
return x1
|
||||||
}
|
}
|
||||||
|
|
||||||
- optimize w=msb(w), w=lsb(w)
|
|
||||||
|
|
||||||
...
|
...
|
||||||
|
|
||||||
@ -37,7 +40,7 @@ Blocked by an official Commander-x16 r39 release
|
|||||||
|
|
||||||
Future Things and Ideas
|
Future Things and Ideas
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
- nameInAssemblyCode() should search smarter
|
- nameInAssemblyCode() should search smarter (only labels in column 0? only full words, not part of a larger word?)
|
||||||
- Fix: don't report as recursion if code assigns address of its own subroutine to something, rather than calling it
|
- Fix: don't report as recursion if code assigns address of its own subroutine to something, rather than calling it
|
||||||
- allow "xxx" * constexpr (where constexpr is not a number literal, now gives expression error not same type)
|
- allow "xxx" * constexpr (where constexpr is not a number literal, now gives expression error not same type)
|
||||||
- can we promise a left-to-right function call argument evaluation? without sacrificing performance
|
- can we promise a left-to-right function call argument evaluation? without sacrificing performance
|
||||||
|
@ -1,23 +1,25 @@
|
|||||||
%import textio
|
%import textio
|
||||||
%import string
|
|
||||||
%zeropage basicsafe
|
%zeropage basicsafe
|
||||||
|
|
||||||
main {
|
main {
|
||||||
sub start() {
|
sub start() {
|
||||||
uword xx=$ea31
|
uword @shared xx=$ea31
|
||||||
xx = lsb(xx)
|
xx &= $00ff
|
||||||
uword ww = plot(lsb(xx), msb(xx))
|
;xx = lsb(xx)
|
||||||
ww=msb(ww)
|
txt.print_uwhex(xx, true)
|
||||||
txt.print_uwhex(ww, true)
|
xx = $ea31
|
||||||
|
xx &= $ff00
|
||||||
|
; xx = msb(xx)
|
||||||
|
; %asm {{
|
||||||
|
; nop
|
||||||
|
; nop
|
||||||
|
; }}
|
||||||
|
; xx >>= 8
|
||||||
|
; %asm {{
|
||||||
|
; nop
|
||||||
|
; nop
|
||||||
|
; }}
|
||||||
|
; xx <<= 8
|
||||||
|
txt.print_uwhex(xx, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
inline asmsub plot(uword plotx @R0, uword ploty @R1) -> uword @AY{
|
|
||||||
%asm {{
|
|
||||||
lda cx16.r0
|
|
||||||
ldy cx16.r1
|
|
||||||
rts
|
|
||||||
}}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user