Commit ba89c118 authored by Robert Sprowson's avatar Robert Sprowson Committed by ROOL
Browse files

Use VFP transcendentals when FPOINT=2

Get table of double precision VFP elementary functions at startup. Since BASICVFP isn't offered as a standalone module, we use the error causing SWI, as the corresponding VFPSupport will be in ROM.
Shrink VFPFLAGS to 1 byte, to allow VFPTRANSCENDENTALS addition to workspace without needing to move PAGE.
Replace the keywords using FPAop with VFP ones, and their use in ELLIPSE.

Version 1.84. Tagged as 'BASIC-1_84'
parent 9df2806c
......@@ -9,12 +9,12 @@
GBLS Module_ApplicationDate
GBLS Module_HelpVersion
GBLS Module_ComponentName
Module_MajorVersion SETS "1.83"
Module_Version SETA 183
Module_MajorVersion SETS "1.84"
Module_Version SETA 184
Module_MinorVersion SETS ""
Module_Date SETS "16 Jun 2021"
Module_ApplicationDate SETS "16-Jun-21"
Module_Date SETS "23 Jun 2021"
Module_ApplicationDate SETS "23-Jun-21"
Module_ComponentName SETS "BASIC"
Module_FullVersion SETS "1.83"
Module_HelpVersion SETS "1.83 (16 Jun 2021)"
Module_FullVersion SETS "1.84"
Module_HelpVersion SETS "1.84 (23 Jun 2021)"
END
/* (1.83)
/* (1.84)
*
* This file is automatically maintained by srccommit, do not edit manually.
*
*/
#define Module_MajorVersion_CMHG 1.83
#define Module_MajorVersion_CMHG 1.84
#define Module_MinorVersion_CMHG
#define Module_Date_CMHG 16 Jun 2021
#define Module_Date_CMHG 23 Jun 2021
#define Module_MajorVersion "1.83"
#define Module_Version 183
#define Module_MajorVersion "1.84"
#define Module_Version 184
#define Module_MinorVersion ""
#define Module_Date "16 Jun 2021"
#define Module_Date "23 Jun 2021"
#define Module_ApplicationDate "16-Jun-21"
#define Module_ApplicationDate "23-Jun-21"
#define Module_ComponentName "BASIC"
#define Module_FullVersion "1.83"
#define Module_HelpVersion "1.83 (16 Jun 2021)"
#define Module_LibraryVersionInfo "1:83"
#define Module_FullVersion "1.84"
#define Module_HelpVersion "1.84 (23 Jun 2021)"
#define Module_LibraryVersionInfo "1:84"
......@@ -186,11 +186,13 @@ $L FSTD FACC,[SP,#-8]!
MEND
MACRO
FPAop $op
! 0, "TODO native $op"
FACCtoFPA
$op F0,F0
FPAtoFACC
VFPElementary $op
ASSERT LINE = ip ; APCS corrupts
Push "LINE"
LDR ip,[ARGP,#VFPTRANSCENDENTALS]
ADD ip,ip,#VFPSupport_Fn_$op:SHL:2
BLX ip ; Have VFP so must have BLX
Pull "LINE"
MEND
|
! 1, "Unknown FPOINT setting"
......
......@@ -70,7 +70,8 @@ R12STORE # 4 ;safe place for r1
ERRXLATE # 4
[ FPOINT=2
FREEPTR # 4 ;dynamic FREE value
VFPFLAGS # 4
VFPTRANSCENDENTALS # 4 ;VFP elementary function table
VFPFLAGS # 1
VFPFLAG_Vectors * 1 ;VFP short vectors available
VFPFLAG_NEON * 2 ;Integer NEON available
]
......
......@@ -32,7 +32,7 @@
CMP AELINE,#8
BLO %FT60
; Vector length is reasonable, use NEON if possible
LDR R14,[ARGP,#VFPFLAGS]
LDRB R14,[ARGP,#VFPFLAGS]
TST R14,#VFPFLAG_NEON
BEQ %F60
ARM
......@@ -77,7 +77,7 @@
CMP AELINE,#8
BLO %FT60
; Vector length is reasonable, use NEON if possible
LDR R14,[ARGP,#VFPFLAGS]
LDRB R14,[ARGP,#VFPFLAGS]
TST R14,#VFPFLAG_NEON
BEQ %F60
ARM
......@@ -119,7 +119,7 @@
CMP AELINE,#8
BLO %FT60
; Vector length is reasonable, use NEON if possible
LDR R14,[ARGP,#VFPFLAGS]
LDRB R14,[ARGP,#VFPFLAGS]
TST R14,#VFPFLAG_NEON
BEQ %F60
ARM
......@@ -163,7 +163,7 @@
CMP $len,#8
BLO %FT60
; Vector length is reasonable, do a vector op if possible
LDR R14,[ARGP,#VFPFLAGS]
LDRB R14,[ARGP,#VFPFLAGS]
TST R14,#VFPFLAG_NEON
BEQ %FT60
ARM
......@@ -227,7 +227,7 @@
CMP AELINE,#8
BLO %FT60
; Vector length is reasonable, do a vector op if possible
LDR R14,[ARGP,#VFPFLAGS]
LDRB R14,[ARGP,#VFPFLAGS]
TST R14,#VFPFLAG_Vectors
BEQ %FT60
MOV R14,#3:SHL:FPSCR_LEN_SHIFT
......@@ -275,7 +275,7 @@
CMP AELINE,#8
BLO %FT60
; Vector length is reasonable, do a vector op if possible
LDR R14,[ARGP,#VFPFLAGS]
LDRB R14,[ARGP,#VFPFLAGS]
TST R14,#VFPFLAG_Vectors
BEQ %FT60
MOV R14,#3:SHL:FPSCR_LEN_SHIFT
......@@ -319,7 +319,7 @@
CMP AELINE,#8
BLO %FT60
; Vector length is reasonable, do a vector op if possible
LDR R14,[ARGP,#VFPFLAGS]
LDRB R14,[ARGP,#VFPFLAGS]
TST R14,#VFPFLAG_Vectors
BEQ %FT60
MOV R14,#3:SHL:FPSCR_LEN_SHIFT
......@@ -366,7 +366,7 @@
FLDD FACC,=0
BLO %FT60
; Vector length is reasonable, do a vector op if possible
LDR R14,[ARGP,#VFPFLAGS]
LDRB R14,[ARGP,#VFPFLAGS]
TST R14,#VFPFLAG_Vectors
BEQ %FT60
MOV R14,#3:SHL:FPSCR_LEN_SHIFT
......
......@@ -288,7 +288,10 @@ MAIN MOV ARGP,#VARS
SWI VFPSupport_Features ; No X bit, this reason code has been around forever
TST R2,#&F000
ORRNE R7,R7,#VFPFLAG_NEON
STR R7,[ARGP,#VFPFLAGS]
STRB R7,[ARGP,#VFPFLAGS]
MOV R0,#0
SWI VFPSupport_Transcendentals
STR R2,[ARGP,#VFPTRANSCENDENTALS]
]
ADRL R0,MSGATLINE
STR R0,[ARGP,#ERRXLATE]
......
......@@ -1280,15 +1280,12 @@ POWEREND
FPUSH
BL FACTOR ;shortcut!
BEQ ERTYPEINT
! 0, "TODO native POWD"
FLTPLD F0,IACC
ASSERT FACC=0
FACCtoFPAMI
LDR R10,[SP,#4] ;SP VFP -> FPA
STR R10,[SP,#-4]!
LDFD F1,[SP],#12
POWD F0,F1,F0
FPAtoFACC
FMSRPL S2,IACC
FSITODPL D1,S2
FCPYDMI D1,D0
FLDD D0,[SP],#8
VFPElementary pow
FPSCRCheck R14
POWEREND
LDRB R10,[AELINE],#1
CMP R10,#" "
......
......@@ -697,7 +697,8 @@ ACS STR R14,[SP,#-4]!
MOVS TYPE,#TFP
LDR PC,[SP],#4
ELIF FPOINT=2
FPAop ACSD
VFPElementary acos
FPSCRCheck R14
MOVS TYPE,#TFP
LDR PC,[SP],#4
|
......@@ -740,7 +741,8 @@ EXP STR R14,[SP,#-4]!
ELIF FPOINT=1
EXPD FACC,FACC
ELIF FPOINT=2
FPAop EXPD
VFPElementary exp
FPSCRCheck R14
|
! 1, "Unknown FPOINT setting"
]
......@@ -881,7 +883,8 @@ LN STR R14,[SP,#-4]!
ELIF FPOINT=1
LGND FACC,FACC
ELIF FPOINT=2
FPAop LGND
VFPElementary log
FPSCRCheck R14
|
! 1, "Unknown FPOINT setting"
]
......@@ -898,7 +901,8 @@ LOG STR R14,[SP,#-4]!
MOVS TYPE,#TFP
LDR PC,[SP],#4
ELIF FPOINT=2
FPAop LOGD
VFPElementary log10
FPSCRCheck R14
MOVS TYPE,#TFP
LDR PC,[SP],#4
|
......@@ -1296,7 +1300,8 @@ TAN2A TST R10,#1
TAND FACC,FACC
ELIF FPOINT=2
BLPL FLOATQ
FPAop TAND
VFPElementary tan
FPSCRCheck R14
|
! 1, "Unknown FPOINT setting"
]
......
......@@ -758,19 +758,12 @@ ELLIPSEANGLE
BL SFIX
ELIF FPOINT=2
;ang, min, maj%, y org%, x org%, FILL%
FACCtoFPA
! 0, "TODO native SIND, COSD"
COSD F1,F0
SUB SP,SP,#4
STFD F1,[SP]
LDR IACC,[SP],#4
STR IACC,[SP,#4]
;cosang, min, maj%, y org%, x org%, FILL%
SIND F1,F0
SUB SP,SP,#4
STFD F1,[SP,#-8]!
LDR IACC,[SP],#4
STR IACC,[SP,#4]
VFPElementary sin
FPUSH
;sinang, ang, min, maj%, y org%, x org%, FILL%
FLDD FACC,[SP,#8]
VFPElementary cos
FSTD FACC,[SP,#8]
;sinang, cosang, min, maj%, y org%, x org%, FILL%
LDR IACC,[SP,#24] ;maj%
BL IFLT
......
......@@ -949,7 +949,8 @@ PI ADR TYPE,FULLPI
FULLPI DCFD 3.14159265358979323846264
PI LDFD FACC,FULLPI
ELIF FPOINT=2
FPAop ASND
VFPElementary asin
FPSCRCheck R14
MOVS TYPE,#TFP
LDR PC,[SP],#4
FULLPI DCFD 3.14159265358979323846264
......
......@@ -45,7 +45,8 @@ COS1 CMP FACCX,#&98
MOVS TYPE,#TFP
LDR PC,[SP],#4
ELIF FPOINT=2
FPAop COSD
VFPElementary cos
FPSCRCheck R14
MOVS TYPE,#TFP
LDR PC,[SP],#4
|
......@@ -179,7 +180,8 @@ ENDSIN ADD SP,SP,#8
ELIF FPOINT=1
SIND FACC,FACC
ELIF FPOINT=2
FPAop SIND
VFPElementary sin
FPSCRCheck R14
|
! 1, "Unknown FPOINT setting"
]
......@@ -276,7 +278,8 @@ FATND LDMFD SP!,{R4,R14}
ATND FACC,FACC
B FSINSTK
ELIF FPOINT=2
FPAop ATND
VFPElementary atan
FPSCRCheck R14
B FSINSTK
|
! 1, "Unknown FPOINT setting"
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment