mirror of
https://github.com/byteworksinc/ORCALib.git
synced 2025-02-11 15:32:38 +00:00
Add floating-point number classification functions.
These are the internal routines used by the fpclassify() macro.
This commit is contained in:
parent
07959d32eb
commit
98cfd4e831
4
make
4
make
@ -19,7 +19,7 @@ if {#} == 0
|
||||
unset exit
|
||||
end
|
||||
|
||||
for i in cc ctype string stdlib time setjmp orca fcntl vars toolglue signal int64 fenv fpextra
|
||||
for i in cc ctype string stdlib time setjmp orca fcntl vars toolglue signal int64 fenv fpextra math2
|
||||
Newer obj/{i}.a {i}.asm
|
||||
if {Status} != 0
|
||||
set exit on
|
||||
@ -40,7 +40,7 @@ delete orcalib
|
||||
|
||||
set list vars.a assert.a cc.a setjmp.a ctype.a string.a stdlib.a
|
||||
set list {list} time.a signal.a toolglue.a orca.a fcntl.a stdio.a int64.a
|
||||
set list {list} fenv.a fpextra.a
|
||||
set list {list} fenv.a fpextra.a math2.a
|
||||
for i in {list}
|
||||
echo makelib orcalib +obj/{i}
|
||||
makelib orcalib +obj/{i}
|
||||
|
130
math2.asm
Normal file
130
math2.asm
Normal file
@ -0,0 +1,130 @@
|
||||
keep obj/math2
|
||||
mcopy math2.macros
|
||||
case on
|
||||
|
||||
****************************************************************
|
||||
*
|
||||
* Math2 - additional math routines
|
||||
*
|
||||
* This code provides additional functions from <math.h>
|
||||
* (including internal helper functions used by macros),
|
||||
* supplementing the ones in SysFloat.
|
||||
*
|
||||
****************************************************************
|
||||
|
||||
math2 private dummy segment
|
||||
end
|
||||
|
||||
****************************************************************
|
||||
*
|
||||
* int __fpclassifyf(float x);
|
||||
*
|
||||
* Classify a float value
|
||||
*
|
||||
* Inputs:
|
||||
* val - the number to classify
|
||||
*
|
||||
* Outputs:
|
||||
* one of the FP_* classification values
|
||||
*
|
||||
****************************************************************
|
||||
*
|
||||
__fpclassifyf start
|
||||
|
||||
csubroutine (10:val),0
|
||||
|
||||
tdc
|
||||
clc
|
||||
adc #val
|
||||
ldy #0
|
||||
phy
|
||||
pha
|
||||
phy
|
||||
pha
|
||||
phy
|
||||
pha
|
||||
FX2S
|
||||
FCLASSS
|
||||
txa
|
||||
and #$00FF
|
||||
cmp #$00FC
|
||||
bne lb1
|
||||
inc a
|
||||
lb1 sta val
|
||||
|
||||
creturn 2:val
|
||||
end
|
||||
|
||||
****************************************************************
|
||||
*
|
||||
* int __fpclassifyd(double x);
|
||||
*
|
||||
* Classify a double value
|
||||
*
|
||||
* Inputs:
|
||||
* val - the number to classify
|
||||
*
|
||||
* Outputs:
|
||||
* one of the FP_* classification values
|
||||
*
|
||||
****************************************************************
|
||||
*
|
||||
__fpclassifyd start
|
||||
|
||||
csubroutine (10:val),0
|
||||
|
||||
tdc
|
||||
clc
|
||||
adc #val
|
||||
ldy #0
|
||||
phy
|
||||
pha
|
||||
phy
|
||||
pha
|
||||
phy
|
||||
pha
|
||||
FX2D
|
||||
FCLASSD
|
||||
txa
|
||||
and #$00FF
|
||||
cmp #$00FC
|
||||
bne lb1
|
||||
inc a
|
||||
lb1 sta val
|
||||
|
||||
creturn 2:val
|
||||
end
|
||||
|
||||
****************************************************************
|
||||
*
|
||||
* int __fpclassifyl(long double x);
|
||||
*
|
||||
* Classify a long double value
|
||||
*
|
||||
* Inputs:
|
||||
* val - the number to classify
|
||||
*
|
||||
* Outputs:
|
||||
* one of the FP_* classification values
|
||||
*
|
||||
****************************************************************
|
||||
*
|
||||
__fpclassifyl start
|
||||
|
||||
csubroutine (10:val),0
|
||||
|
||||
tdc
|
||||
clc
|
||||
adc #val
|
||||
pea 0
|
||||
pha
|
||||
FCLASSX
|
||||
txa
|
||||
and #$00FF
|
||||
cmp #$00FC
|
||||
bne lb1
|
||||
inc a
|
||||
lb1 sta val
|
||||
|
||||
creturn 2:val
|
||||
end
|
123
math2.macros
Normal file
123
math2.macros
Normal file
@ -0,0 +1,123 @@
|
||||
MACRO
|
||||
&lab csubroutine &parms,&work
|
||||
&lab anop
|
||||
aif c:&work,.a
|
||||
lclc &work
|
||||
&work setc 0
|
||||
.a
|
||||
gbla &totallen
|
||||
gbla &worklen
|
||||
&worklen seta &work
|
||||
&totallen seta 0
|
||||
aif c:&parms=0,.e
|
||||
lclc &len
|
||||
lclc &p
|
||||
lcla &i
|
||||
&i seta 1
|
||||
.b
|
||||
&p setc &parms(&i)
|
||||
&len amid &p,2,1
|
||||
aif "&len"=":",.c
|
||||
&len amid &p,1,2
|
||||
&p amid &p,4,l:&p-3
|
||||
ago .d
|
||||
.c
|
||||
&len amid &p,1,1
|
||||
&p amid &p,3,l:&p-2
|
||||
.d
|
||||
&p equ &totallen+4+&work
|
||||
&totallen seta &totallen+&len
|
||||
&i seta &i+1
|
||||
aif &i<=c:&parms,^b
|
||||
.e
|
||||
tsc
|
||||
aif &work=0,.f
|
||||
sec
|
||||
sbc #&work
|
||||
tcs
|
||||
.f
|
||||
phd
|
||||
tcd
|
||||
mend
|
||||
MACRO
|
||||
&lab creturn &r
|
||||
&lab anop
|
||||
lclc &len
|
||||
aif c:&r,.a
|
||||
lclc &r
|
||||
&r setc 0
|
||||
&len setc 0
|
||||
ago .h
|
||||
.a
|
||||
&len amid &r,2,1
|
||||
aif "&len"=":",.b
|
||||
&len amid &r,1,2
|
||||
&r amid &r,4,l:&r-3
|
||||
ago .c
|
||||
.b
|
||||
&len amid &r,1,1
|
||||
&r amid &r,3,l:&r-2
|
||||
.c
|
||||
aif &len<>2,.d
|
||||
ldy &r
|
||||
ago .h
|
||||
.d
|
||||
aif &len<>4,.e
|
||||
ldx &r+2
|
||||
ldy &r
|
||||
ago .h
|
||||
.e
|
||||
aif &len<>10,.g
|
||||
ldy #&r
|
||||
ldx #^&r
|
||||
ago .h
|
||||
.g
|
||||
mnote 'Not a valid return length',16
|
||||
mexit
|
||||
.h
|
||||
aif &totallen=0,.i
|
||||
lda &worklen+2
|
||||
sta &worklen+&totallen+2
|
||||
lda &worklen+1
|
||||
sta &worklen+&totallen+1
|
||||
.i
|
||||
pld
|
||||
tsc
|
||||
clc
|
||||
adc #&worklen+&totallen
|
||||
tcs
|
||||
aif &len=0,.j
|
||||
tya
|
||||
.j
|
||||
rtl
|
||||
mend
|
||||
MACRO
|
||||
&LAB FCLASSS
|
||||
&LAB PEA $021C
|
||||
LDX #$090A
|
||||
JSL $E10000
|
||||
MEND
|
||||
MACRO
|
||||
&LAB FCLASSD
|
||||
&LAB PEA $011C
|
||||
LDX #$090A
|
||||
JSL $E10000
|
||||
MEND
|
||||
MACRO
|
||||
&LAB FCLASSX
|
||||
&LAB PEA $001C
|
||||
LDX #$090A
|
||||
JSL $E10000
|
||||
MEND
|
||||
MACRO
|
||||
&LAB FX2S
|
||||
&LAB PEA $0210
|
||||
LDX #$090A
|
||||
JSL $E10000
|
||||
MEND
|
||||
MACRO
|
||||
&LAB FX2D
|
||||
&LAB PEA $0110
|
||||
LDX #$090A
|
||||
JSL $E10000
|
||||
MEND
|
Loading…
x
Reference in New Issue
Block a user