#
 mes 2,EM_WSIZE,EM_PSIZE

#define ARG1    0
#define ARG2    EM_DSIZE
#define IRES    2*EM_DSIZE

; FIF is called with three parameters:
;       - address of integer part result (IRES)
;       - float two (ARG2)
;       - float one (ARG1)
; and returns an EM_DSIZE-byte floating point number
; Definition:
;	PROCEDURE FIF(ARG1, ARG2: LONGREAL; VAR IRES: LONGREAL) : LONGREAL;

 exp $FIF
 pro $FIF,0
 lal 0
 loi 2*EM_DSIZE
 fif EM_DSIZE
 lal IRES
 loi EM_PSIZE
 sti EM_DSIZE
 ret EM_DSIZE
 end ?

#define FARG    0
#define ERES    EM_DSIZE

; FEF is called with two parameters:
;       - address of base 2 exponent result (ERES)
;       - floating point number to be split (FARG)
; and returns an EM_DSIZE-byte floating point number (the mantissa)
; Definition:
;	PROCEDURE FEF(FARG: LONGREAL; VAR ERES: integer): LONGREAL;

 exp $FEF
 pro $FEF,0
 lal FARG
 loi EM_DSIZE
 fef EM_DSIZE
 lal ERES
 loi EM_PSIZE
 sti EM_WSIZE
 ret EM_DSIZE
 end ?