mirror of
https://github.com/irmen/prog8.git
synced 2025-01-13 10:29:52 +00:00
fix float constants prefix mistakes, removed broken max_f/min_f (fix pending), tweaked sum_f
This commit is contained in:
parent
1069b5f5d5
commit
eebd4e5f18
@ -34,6 +34,7 @@
|
||||
memory float FL_PIHALF = $e2e0 ; PI / 2
|
||||
memory float FL_TWOPI = $e2e5 ; 2 * PI
|
||||
memory float FL_FR4 = $e2ea ; .25
|
||||
float FL_ZERO = 0.0 ; oddly enough 0.0 isn't available in the kernel
|
||||
|
||||
|
||||
; note: fac1/2 might get clobbered even if not mentioned in the function's name.
|
||||
@ -775,8 +776,8 @@ func_log2 .proc
|
||||
stx c64.SCRATCH_ZPREGX
|
||||
jsr c64flt.LOG
|
||||
jsr c64flt.MOVEF
|
||||
lda #<c64.FL_LOG2
|
||||
ldy #>c64.FL_LOG2
|
||||
lda #<FL_LOG2
|
||||
ldy #>FL_LOG2
|
||||
jsr c64flt.MOVFM
|
||||
jsr c64flt.FDIVT
|
||||
jmp push_fac1_as_result
|
||||
@ -853,7 +854,7 @@ func_any_f .proc
|
||||
asl a
|
||||
clc
|
||||
adc c64.SCRATCH_ZPB1 ; times 5 because of float
|
||||
jmp func_any_b._entry
|
||||
jmp prog8_lib.func_any_b._entry
|
||||
.pend
|
||||
|
||||
func_all_f .proc
|
||||
@ -865,7 +866,7 @@ func_all_f .proc
|
||||
clc
|
||||
adc c64.SCRATCH_ZPB1 ; times 5 because of float
|
||||
sta _cmp_mod+1 ; self-modifying code
|
||||
jsr peek_address
|
||||
jsr prog8_lib.peek_address
|
||||
ldy #0
|
||||
- lda (c64.SCRATCH_ZPWORD1),y
|
||||
bne +
|
||||
@ -893,53 +894,18 @@ _cmp_mod cpy #255 ; modified
|
||||
.pend
|
||||
|
||||
func_max_f .proc
|
||||
lda #<_min_float
|
||||
ldy #>_min_float
|
||||
jsr c64flt.MOVFM ; fac1=min(float)
|
||||
lda #255
|
||||
sta _cmp_mod+1 ; compare using 255 so we keep larger values
|
||||
_minmax_entry jsr pop_array_and_lengthmin1Y
|
||||
stx c64.SCRATCH_ZPREGX
|
||||
- sty c64.SCRATCH_ZPREG
|
||||
lda c64.SCRATCH_ZPWORD1
|
||||
ldy c64.SCRATCH_ZPWORD1+1
|
||||
jsr c64flt.FCOMP
|
||||
_cmp_mod cmp #255 ; will be modified
|
||||
bne +
|
||||
; fac1 is smaller/larger, so store the new value instead
|
||||
lda c64.SCRATCH_ZPWORD1
|
||||
ldy c64.SCRATCH_ZPWORD1+1
|
||||
jsr c64flt.MOVFM
|
||||
ldy c64.SCRATCH_ZPREG
|
||||
dey
|
||||
cmp #255
|
||||
beq +
|
||||
lda c64.SCRATCH_ZPWORD1
|
||||
clc
|
||||
adc #5
|
||||
sta c64.SCRATCH_ZPWORD1
|
||||
bcc -
|
||||
inc c64.SCRATCH_ZPWORD1+1
|
||||
bne -
|
||||
+ jmp push_fac1_as_result
|
||||
_min_float .byte 255,255,255,255,255 ; -1.7014118345e+38
|
||||
.warn "todo: fix func_max_f / func_min_f" ; TODO
|
||||
.pend
|
||||
|
||||
func_min_f .proc
|
||||
lda #<_max_float
|
||||
ldy #>_max_float
|
||||
jsr c64flt.MOVFM ; fac1=max(float)
|
||||
lda #1
|
||||
sta func_max_f._cmp_mod+1 ; compare using 1 so we keep smaller values
|
||||
jmp func_max_f._minmax_entry
|
||||
_max_float .byte 255,127,255,255,255 ; 1.7014118345e+38
|
||||
.warn "todo: fix func_max_f / func_min_f" ; TODO
|
||||
.pend
|
||||
|
||||
func_sum_f .proc
|
||||
lda #<c64.FL_NEGHLF
|
||||
ldy #>c64.FL_NEGHLF
|
||||
lda #<FL_ZERO
|
||||
ldy #>FL_ZERO
|
||||
jsr c64flt.MOVFM
|
||||
jsr pop_array_and_lengthmin1Y
|
||||
jsr prog8_lib.pop_array_and_lengthmin1Y
|
||||
stx c64.SCRATCH_ZPREGX
|
||||
- sty c64.SCRATCH_ZPREG
|
||||
lda c64.SCRATCH_ZPWORD1
|
||||
@ -956,8 +922,7 @@ func_sum_f .proc
|
||||
bcc -
|
||||
inc c64.SCRATCH_ZPWORD1+1
|
||||
bne -
|
||||
+ jsr c64flt.FADDH
|
||||
jmp push_fac1_as_result
|
||||
+ jmp push_fac1_as_result
|
||||
.pend
|
||||
}}
|
||||
|
||||
|
@ -2090,7 +2090,6 @@ class StackVm(private var traceOutputFile: String?) {
|
||||
Syscall.FUNC_MAX_F -> {
|
||||
val iterable = evalstack.pop()
|
||||
val value = heap.get(iterable.heapId)
|
||||
// TODO CHECK max(floatarray) correctness
|
||||
val result = value.doubleArray!!.max() ?: 0.0
|
||||
evalstack.push(Value(DataType.FLOAT, result))
|
||||
}
|
||||
@ -2129,7 +2128,6 @@ class StackVm(private var traceOutputFile: String?) {
|
||||
Syscall.FUNC_MIN_F -> {
|
||||
val iterable = evalstack.pop()
|
||||
val value = heap.get(iterable.heapId)
|
||||
// TODO check min(floatarray) correctness
|
||||
val result = value.doubleArray!!.min() ?: 0.0
|
||||
evalstack.push(Value(DataType.FLOAT, result))
|
||||
}
|
||||
@ -2143,7 +2141,6 @@ class StackVm(private var traceOutputFile: String?) {
|
||||
Syscall.FUNC_AVG_F -> {
|
||||
val iterable = evalstack.pop()
|
||||
val value = heap.get(iterable.heapId)
|
||||
// TODO check avg(floatarray) correctness
|
||||
evalstack.push(Value(DataType.FLOAT, value.doubleArray!!.average()))
|
||||
}
|
||||
Syscall.FUNC_SUM_UB -> {
|
||||
@ -2168,7 +2165,6 @@ class StackVm(private var traceOutputFile: String?) {
|
||||
evalstack.push(Value(DataType.FLOAT, value.array.map{it.integer!!}.sum()))
|
||||
}
|
||||
Syscall.FUNC_SUM_F -> {
|
||||
// TODO check sum(floatarray) correctness
|
||||
val iterable = evalstack.pop()
|
||||
val value = heap.get(iterable.heapId)
|
||||
evalstack.push(Value(DataType.FLOAT, value.doubleArray!!.sum()))
|
||||
|
Loading…
x
Reference in New Issue
Block a user