abs() return type changed to ubyte/uword

This commit is contained in:
Irmen de Jong 2025-01-04 23:16:51 +01:00
parent a56ae7539a
commit 478e2b4ebd
3 changed files with 17 additions and 40 deletions

View File

@ -97,8 +97,8 @@ val BuiltinFunctions: Map<String, FSignature> = mapOf(
"prog8_lib_square_byte" to FSignature(true, BaseDataType.UBYTE, FParam("value", BaseDataType.BYTE, BaseDataType.UBYTE)),
"prog8_lib_square_word" to FSignature(true, BaseDataType.UWORD, FParam("value", BaseDataType.WORD, BaseDataType.UWORD)),
"abs" to FSignature(true, null, FParam("value", *NumericDatatypes)),
"abs__byte" to FSignature(true, BaseDataType.BYTE, FParam("value", BaseDataType.BYTE)),
"abs__word" to FSignature(true, BaseDataType.WORD, FParam("value", BaseDataType.WORD)),
"abs__byte" to FSignature(true, BaseDataType.UBYTE, FParam("value", BaseDataType.BYTE)),
"abs__word" to FSignature(true, BaseDataType.UWORD, FParam("value", BaseDataType.WORD)),
"abs__float" to FSignature(true, BaseDataType.FLOAT, FParam("value", BaseDataType.FLOAT)),
"len" to FSignature(true, BaseDataType.UWORD, FParam("values", *IterableDatatypes)),
"sizeof" to FSignature(true, BaseDataType.UBYTE, FParam("object", *BaseDataType.entries.toTypedArray())),

View File

@ -79,7 +79,6 @@ Libraries
Optimizations
-------------
- if abs(dx) < cave.VISIBLE_CELLS_H looks like it treats abs(dx) as signed word still in codegen? (rockrunner)
- word offset = (row as uword) * 128 + col*2 inefficient code for col*2 (rockrunner)
- if magicwall_enabled and (jiffy_counter & 3 == 1) sounds.magicwall() -> generates shortcut jump to another jump, why not immediately after the if
- explode(x, y+1) pushes x on the stack and pops it, could simply load it in reverse order and not use the stack.normal

View File

@ -1,45 +1,23 @@
%import textio
%option no_sysinit
%zeropage dontuse
%zeropage basicsafe
main {
sub start() {
word @shared dx
uword @shared udx
dx++
udx++
dx = -5000
if abs(dx) < 9999
txt.print("yes1")
else
txt.print("no2")
cx16.r0 = cx16.r1 = cx16.r2 = cx16.r3 = %0001111_11000011
cx16.r0 *= $0080
txt.print("goede antwoord:\n")
txt.print_uwbin(cx16.r0, true)
txt.spc()
txt.print_uw(cx16.r0)
txt.nl()
%asm {{
lda cx16.r1H
lsr a
php ; save carry
lda cx16.r1L
sta cx16.r1H
lda #0
sta cx16.r1L
plp ; restore carry
ror cx16.r1H
ror cx16.r1L
}}
txt.print("antwoord 2:\n")
txt.print_uwbin(cx16.r1, true)
txt.spc()
txt.print_uw(cx16.r1)
txt.nl()
txt.nl()
txt.print("antwoord 3:\n")
txt.print_uwbin(cx16.r2 << 7, true)
txt.spc()
txt.print_uw(cx16.r2 << 7)
txt.nl()
txt.nl()
dx = -15000
if abs(dx) < 9999
txt.print("yes2")
else
txt.print("no2")
}
}