diff --git a/compiler/res/prog8lib/c64/floats.p8 b/compiler/res/prog8lib/c64/floats.p8 index 22239475c..33fa574e8 100644 --- a/compiler/res/prog8lib/c64/floats.p8 +++ b/compiler/res/prog8lib/c64/floats.p8 @@ -78,6 +78,7 @@ romsub $bf71 = SQR() clobbers(A,X,Y) ; fac1 = SQRT(fac1) romsub $bf74 = SQRA() clobbers(A,X,Y) ; fac1 = SQRT(fac2) romsub $bfed = EXP() clobbers(A,X,Y) ; fac1 = EXP(fac1) (e ** fac1) romsub $bfb4 = NEGOP() clobbers(A) ; switch the sign of fac1 (fac1 = -fac1) +romsub $b8d7 = NORMAL() clobbers(A) ; normalize FAC1 romsub $e097 = RND() clobbers(A,X,Y) ; fac1 = RND(fac1) float random number generator romsub $e264 = COS() clobbers(A,X,Y) ; fac1 = COS(fac1) romsub $e26b = SIN() clobbers(A,X,Y) ; fac1 = SIN(fac1) @@ -176,6 +177,12 @@ asmsub parse_f(str value @AY) -> float @FAC1 { }} } +asmsub normalize(float value @FAC1) -> float @ FAC1 { + %asm {{ + jmp floats.NORMAL + }} +} + %asminclude "library:c64/floats.asm" %asminclude "library:c64/floats_funcs.asm" diff --git a/compiler/res/prog8lib/cx16/floats.p8 b/compiler/res/prog8lib/cx16/floats.p8 index eebd0bdb1..759f6d08f 100644 --- a/compiler/res/prog8lib/cx16/floats.p8 +++ b/compiler/res/prog8lib/cx16/floats.p8 @@ -72,10 +72,10 @@ romsub $fe6c = MOVAF() clobbers(A,X) ; copy fac1 to fac2 ; X16 additions romsub $fe6f = FADDH() clobbers(A,X,Y) ; fac1 += 0.5, for rounding- call this before INT romsub $fe72 = ZEROFC() clobbers(A,X,Y) ; fac1 = 0 -romsub $fe75 = NORMAL() clobbers(A,X,Y) ; normalize fac1 (?) -romsub $fe78 = NEGFAC() clobbers(A) ; switch the sign of fac1 (fac1 = -fac1) (juse use NEGOP() instead!) +romsub $fe75 = NORMAL() clobbers(A,X,Y) ; normalize fac1 +romsub $fe78 = NEGFAC() clobbers(A) ; switch the sign of fac1 (fac1 = -fac1) (doesn't work, juse use NEGOP() instead!) romsub $fe7b = MUL10() clobbers(A,X,Y) ; fac1 *= 10 -romsub $fe7e = DIV10() clobbers(A,X,Y) ; fac1 /= 10 , CAUTION: result is always positive! +romsub $fe7e = DIV10() clobbers(A,X,Y) ; fac1 /= 10 , CAUTION: result is always positive! Have to restore sign manually! romsub $fe81 = MOVEF() clobbers(A,X) ; copy fac1 to fac2 romsub $fe84 = SGN() clobbers(A,X,Y) ; fac1 = SGN(fac1), result of SIGN (-1, 0 or 1) romsub $fe87 = FLOAT() clobbers(A,X,Y) ; FAC = (s8).A @@ -184,6 +184,12 @@ sub rndf() -> float { }} } +asmsub normalize(float value @FAC1) -> float @ FAC1 { + %asm {{ + jmp floats.NORMAL + }} +} + %asminclude "library:c64/floats.asm" %asminclude "library:c64/floats_funcs.asm" diff --git a/compiler/res/prog8lib/virtual/floats.p8 b/compiler/res/prog8lib/virtual/floats.p8 index fee90bf52..de861e09a 100644 --- a/compiler/res/prog8lib/virtual/floats.p8 +++ b/compiler/res/prog8lib/virtual/floats.p8 @@ -157,4 +157,8 @@ sub clampf(float value, float minimum, float maximum) -> float { return maximum } +sub normalize(float value) -> float { + return value +} + }