
 *|   Version 0.09
 *|   This should be distributed with dooperfplib.s
 *|   fpinline inlines short functions from dooperfplib because
 *|     awkward gcc won't let me.
 *|   This is not really expected to work with anything other
 *|     than ARM GCC versions 2.95.2 and 2.95.4
 *|   I accept no responsibility for it being useless.  :-)
 *|         <mech@toth.org.uk> 2001, 2002

 ONERROR PRINTREPORT$+" at "+STR$ERL:END

 SYS "OS_GetEnv" TO env$
 pos%=INSTR(env$,"fpinline")+9
 name$=RIGHT$(env$,LENenv$-pos%)
 fh%=OPENIN name$
 sz%=EXT#fh%
 CLOSE#fh%
 DIM in% sz%
 SYS "OS_File", 255, name$, in%
 out%=OPENOUT name$
 ONERROR CLOSE#out%:PRINTREPORT$+" at "+STR$ERL:END

 pos%=0
 bl$=CHR$9+"bl"+CHR$9
 REPEATline$="":REPEATchr$=CHR$(in%?pos%):line$+=chr$:pos%+=1:UNTIL chr$=CHR$10 OR pos%=sz%
 line$=LEFT$(line$)
 CASE TRUE OF
 WHEN line$=bl$+"|__negdf2|"  : BPUT#out%,(CHR$9+"eor"  +CHR$9+"__a1, __a1, #1<<31")
 WHEN line$=bl$+"|fabsd|"     : BPUT#out%,(CHR$9+"bic"  +CHR$9+"__a1, __a1, #1<<31")
 WHEN line$=bl$+"|eq0df|"     : BPUT#out%,(CHR$9+"mov"  +CHR$9+"__a1, __a2")
 WHEN line$=bl$+"|__eqdf2|", line$=bl$+"|__nedf2|"
                                BPUT#out%,(CHR$9+"eors" +CHR$9+"__a1, __a1, __a3")
                                BPUT#out%,(CHR$9+"eoreq"+CHR$9+"__a1, __a2, __a4")
 WHEN line$=bl$+"|halftimes|" : BPUT#out%,(CHR$9+"movs" +CHR$9+"__a4, __a1, lsl #1")
                                BPUT#out%,(CHR$9+"subne"+CHR$9+"__a1, __a1, #1")
 WHEN line$=bl$+"|twotimes|"  : BPUT#out%,(CHR$9+"movs" +CHR$9+"__a4, __a1, lsl #1")
                                BPUT#out%,(CHR$9+"addne"+CHR$9+"__a1, __a1, #1")
REM WHEN line$=bl$+"|__ltdf2|", line$=bl$+"|__ledf2|", line$=bl$+"|__gtdf2|", line$=bl$+"|__gedf2|"
REM                                BPUT#out%,(CHR$9+"mov r12, r0, lsl #1")
REM                                BPUT#out%,(CHR$9+"cmp r12, r2, lsl #1")
REM                                BPUT#out%,(CHR$9+"cmpeq r1, r3")
REM                                BPUT#out%,(CHR$9+"mvncc r0, r2")
REM                                BPUT#out%,(CHR$9+"subeq r0, r0, r2")
 OTHERWISE                    : BPUT#out%,line$
 ENDCASE
 UNTILpos%=sz%

 CLOSE#out%
 END
