mirror of
https://github.com/irmen/prog8.git
synced 2024-07-13 12:29:05 +00:00
fix float '**' (pow) on cx16
This commit is contained in:
parent
0d735c2ccc
commit
1d299c56e0
@ -64,6 +64,7 @@ romsub $fe7e = FINLOG(byte value @A) clobbers (A, X, Y) ; fac1 += sign
|
|||||||
romsub $fe81 = FOUT() clobbers(X) -> uword @ AY ; fac1 -> string, address returned in AY
|
romsub $fe81 = FOUT() clobbers(X) -> uword @ AY ; fac1 -> string, address returned in AY
|
||||||
romsub $fe8a = SQR() clobbers(A,X,Y) ; fac1 = SQRT(fac1)
|
romsub $fe8a = SQR() clobbers(A,X,Y) ; fac1 = SQRT(fac1)
|
||||||
romsub $fe8d = FPWRT() clobbers(A,X,Y) ; fac1 = fac2 ** fac1
|
romsub $fe8d = FPWRT() clobbers(A,X,Y) ; fac1 = fac2 ** fac1
|
||||||
|
; note: there is no FPWR() on the Cx16
|
||||||
romsub $fe93 = NEGOP() clobbers(A) ; switch the sign of fac1
|
romsub $fe93 = NEGOP() clobbers(A) ; switch the sign of fac1
|
||||||
romsub $fe96 = EXP() clobbers(A,X,Y) ; fac1 = EXP(fac1) (e ** fac1)
|
romsub $fe96 = EXP() clobbers(A,X,Y) ; fac1 = EXP(fac1) (e ** fac1)
|
||||||
romsub $fe9f = RND2(byte value @A) clobbers(A,X,Y) ; fac1 = RND(A) float random number generator
|
romsub $fe9f = RND2(byte value @A) clobbers(A,X,Y) ; fac1 = RND(A) float random number generator
|
||||||
|
@ -7,6 +7,7 @@ import prog8.ast.statements.Subroutine
|
|||||||
import prog8.compiler.AssemblyError
|
import prog8.compiler.AssemblyError
|
||||||
import prog8.compiler.target.CompilationTarget
|
import prog8.compiler.target.CompilationTarget
|
||||||
import prog8.compiler.target.CpuType
|
import prog8.compiler.target.CpuType
|
||||||
|
import prog8.compiler.target.Cx16Target
|
||||||
import prog8.compiler.target.c64.codegen.AsmGen
|
import prog8.compiler.target.c64.codegen.AsmGen
|
||||||
import prog8.compiler.target.c64.codegen.ExpressionsAsmGen
|
import prog8.compiler.target.c64.codegen.ExpressionsAsmGen
|
||||||
import prog8.compiler.toHex
|
import prog8.compiler.toHex
|
||||||
@ -1474,14 +1475,26 @@ internal class AugmentableAssignmentAsmGen(private val program: Program,
|
|||||||
asmgen.saveRegister(CpuRegister.X, false, scope)
|
asmgen.saveRegister(CpuRegister.X, false, scope)
|
||||||
when (operator) {
|
when (operator) {
|
||||||
"**" -> {
|
"**" -> {
|
||||||
asmgen.out("""
|
if(CompilationTarget.instance is Cx16Target) {
|
||||||
lda #<$name
|
// cx16 doesn't have FPWR() only FPWRT()
|
||||||
ldy #>$name
|
asmgen.out("""
|
||||||
jsr floats.CONUPK
|
lda #<$name
|
||||||
lda #<$otherName
|
ldy #>$name
|
||||||
ldy #>$otherName
|
jsr floats.CONUPK
|
||||||
jsr floats.FPWR
|
lda #<$otherName
|
||||||
""")
|
ldy #>$otherName
|
||||||
|
jsr floats.MOVFM
|
||||||
|
jsr floats.FPWRT
|
||||||
|
""")
|
||||||
|
} else
|
||||||
|
asmgen.out("""
|
||||||
|
lda #<$name
|
||||||
|
ldy #>$name
|
||||||
|
jsr floats.CONUPK
|
||||||
|
lda #<$otherName
|
||||||
|
ldy #>$otherName
|
||||||
|
jsr floats.FPWR
|
||||||
|
""")
|
||||||
}
|
}
|
||||||
"+" -> {
|
"+" -> {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
@ -1540,14 +1553,26 @@ internal class AugmentableAssignmentAsmGen(private val program: Program,
|
|||||||
asmgen.saveRegister(CpuRegister.X, false, scope)
|
asmgen.saveRegister(CpuRegister.X, false, scope)
|
||||||
when (operator) {
|
when (operator) {
|
||||||
"**" -> {
|
"**" -> {
|
||||||
asmgen.out("""
|
if(CompilationTarget.instance is Cx16Target) {
|
||||||
lda #<$name
|
// cx16 doesn't have FPWR() only FPWRT()
|
||||||
ldy #>$name
|
asmgen.out("""
|
||||||
jsr floats.CONUPK
|
lda #<$name
|
||||||
lda #<$constValueName
|
ldy #>$name
|
||||||
ldy #>$constValueName
|
jsr floats.CONUPK
|
||||||
jsr floats.FPWR
|
lda #<$constValueName
|
||||||
""")
|
ldy #>$constValueName
|
||||||
|
jsr floats.MOVFM
|
||||||
|
jsr floats.FPWRT
|
||||||
|
""")
|
||||||
|
} else
|
||||||
|
asmgen.out("""
|
||||||
|
lda #<$name
|
||||||
|
ldy #>$name
|
||||||
|
jsr floats.CONUPK
|
||||||
|
lda #<$constValueName
|
||||||
|
ldy #>$constValueName
|
||||||
|
jsr floats.FPWR
|
||||||
|
""")
|
||||||
}
|
}
|
||||||
"+" -> {
|
"+" -> {
|
||||||
if (value == 0.0)
|
if (value == 0.0)
|
||||||
|
Loading…
Reference in New Issue
Block a user