mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-02-02 16:34:26 +00:00
Consistent API names for SANE
This commit is contained in:
parent
00cf842afb
commit
b6d7986249
@ -130,17 +130,17 @@ end
|
||||
// SANE PLASMA interface
|
||||
//
|
||||
struc t_sane
|
||||
word fpInit
|
||||
word fpHalt
|
||||
word fpOp0
|
||||
word fpOp1
|
||||
word fpOp2
|
||||
word fpOp3
|
||||
word elOp1
|
||||
word elOp2
|
||||
word elOp3
|
||||
word zpSave
|
||||
word zpRestore
|
||||
word initFP
|
||||
word haltFP
|
||||
word op0FP
|
||||
word op1FP
|
||||
word op2FP
|
||||
word op3FP
|
||||
word op1ELEM
|
||||
word op2ELEM
|
||||
word op3ELEM
|
||||
word saveZP
|
||||
word restoreZP
|
||||
end
|
||||
word sane
|
||||
end
|
||||
|
@ -124,8 +124,8 @@ export def str2ext(str, ext)
|
||||
decrec.sig = 1
|
||||
decrec.sig.1 = '0'
|
||||
fin
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp2(FFEXT|FOD2B, ext, @decrec))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op2FP(FFEXT|FOD2B, ext, @decrec))
|
||||
end
|
||||
//
|
||||
// Convert extended FP to string using , return string
|
||||
@ -139,8 +139,8 @@ export def ext2str(ext, str, intdigits, fracdigits, format)
|
||||
numdigits = intdigits + fracdigits
|
||||
decform:style = format & $01
|
||||
decform:digits = decform:style ?? fracdigits :: numdigits
|
||||
sane:zpSave()
|
||||
sane:zpRestore(sane:fpOp3(FFEXT|FOB2D, @decrec, ext, @decform))
|
||||
sane:saveZP()
|
||||
sane:restoreZP(sane:op3FP(FFEXT|FOB2D, @decrec, ext, @decform))
|
||||
^(str+1) = decrec.sgn ?? '-' :: ' '
|
||||
if decrec.sig.1 == 'I'
|
||||
^(str+2) = 'I'
|
||||
|
@ -53,28 +53,28 @@ word stackRegs[4]
|
||||
// Environment access
|
||||
//
|
||||
def setEnv(env)
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp1(FOSETENV, env))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1FP(FOSETENV, env))
|
||||
end
|
||||
def getEnv
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp0(FOGETENV))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op0FP(FOGETENV))
|
||||
end
|
||||
def testExcept(except)
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp1(FOTESTXCP, except))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1FP(FOTESTXCP, except))
|
||||
end
|
||||
def setExcept(except)
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp1(FOSETXCP, except))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1FP(FOSETXCP, except))
|
||||
end
|
||||
def enterProc(pEnv)
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp1(FOPROCENTRY, pEnv))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1FP(FOPROCENTRY, pEnv))
|
||||
end
|
||||
def exitProc(env)
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp1(FOPROCEXIT, env))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1FP(FOPROCEXIT, env))
|
||||
end
|
||||
//
|
||||
// Stack manipulation routines
|
||||
@ -118,79 +118,79 @@ end
|
||||
def clear
|
||||
word zero
|
||||
zero = 0
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp2(FFINT|FOZ2X, stackRegs[0], @zero))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op2FP(FFINT|FOZ2X, stackRegs[0], @zero))
|
||||
end
|
||||
//
|
||||
// Stack access
|
||||
//
|
||||
def pushInt(pInt)
|
||||
stackRegs[0], stackRegs[1], stackRegs[2], stackRegs[3] = stackRegs[3], stackRegs[0], stackRegs[1], stackRegs[2]
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp2(FFINT|FOZ2X, stackRegs[0], pInt))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op2FP(FFINT|FOZ2X, stackRegs[0], pInt))
|
||||
end
|
||||
def pullInt(pInt)
|
||||
sane:zpSave()
|
||||
return _drop(sane:zpRestore(sane:fpOp2(FFINT|FOX2Z, pInt, stackRegs[0])))
|
||||
sane:saveZP()
|
||||
return _drop(sane:restoreZP(sane:op2FP(FFINT|FOX2Z, pInt, stackRegs[0])))
|
||||
end
|
||||
def loadInt(pInt, reg)
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp2(FFINT|FOZ2X, stackRegs[reg & $03], pInt))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op2FP(FFINT|FOZ2X, stackRegs[reg & $03], pInt))
|
||||
end
|
||||
def storInt(pInt, reg)
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp2(FFINT|FOX2Z, pInt, stackRegs[reg & $03]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op2FP(FFINT|FOX2Z, pInt, stackRegs[reg & $03]))
|
||||
end
|
||||
def pushSgl(pSgl)
|
||||
stackRegs[0], stackRegs[1], stackRegs[2], stackRegs[3] = stackRegs[3], stackRegs[0], stackRegs[1], stackRegs[2]
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp2(FFSGL|FOZ2X, stackRegs[0], pSgl))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op2FP(FFSGL|FOZ2X, stackRegs[0], pSgl))
|
||||
end
|
||||
def pullSgl(pSgl)
|
||||
sane:zpSave()
|
||||
return _drop(sane:zpRestore(sane:fpOp2(FFSGL|FOX2Z, pSgl, stackRegs[0])))
|
||||
sane:saveZP()
|
||||
return _drop(sane:restoreZP(sane:op2FP(FFSGL|FOX2Z, pSgl, stackRegs[0])))
|
||||
end
|
||||
def loadSgl(pSgl, reg)
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp2(FFSGL|FOZ2X, stackRegs[reg & $03], pSgl))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op2FP(FFSGL|FOZ2X, stackRegs[reg & $03], pSgl))
|
||||
end
|
||||
def storSgl(pSgl, reg)
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp2(FFSGL|FOX2Z, pSgl, stackRegs[reg & $03]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op2FP(FFSGL|FOX2Z, pSgl, stackRegs[reg & $03]))
|
||||
end
|
||||
def pushDbl(pDbl)
|
||||
stackRegs[0], stackRegs[1], stackRegs[2], stackRegs[3] = stackRegs[3], stackRegs[0], stackRegs[1], stackRegs[2]
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp2(FFDBL|FOZ2X, stackRegs[0], pDbl))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op2FP(FFDBL|FOZ2X, stackRegs[0], pDbl))
|
||||
end
|
||||
def pullDbl(pDbl)
|
||||
sane:zpSave()
|
||||
return _drop(sane:zpRestore(sane:fpOp2(FFDBL|FOX2Z, pDbl, stackRegs[0])))
|
||||
sane:saveZP()
|
||||
return _drop(sane:restoreZP(sane:op2FP(FFDBL|FOX2Z, pDbl, stackRegs[0])))
|
||||
end
|
||||
def loadDbl(pDbl, reg)
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp2(FFDBL|FOZ2X, stackRegs[reg & $03], pDbl))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op2FP(FFDBL|FOZ2X, stackRegs[reg & $03], pDbl))
|
||||
end
|
||||
def storDbl(pDbl, reg)
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp2(FFDBL|FOX2Z, pDbl, stackRegs[reg & $03]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op2FP(FFDBL|FOX2Z, pDbl, stackRegs[reg & $03]))
|
||||
end
|
||||
def pushExt(pExt)
|
||||
stackRegs[0], stackRegs[1], stackRegs[2], stackRegs[3] = stackRegs[3], stackRegs[0], stackRegs[1], stackRegs[2]
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp2(FFEXT|FOZ2X, stackRegs[0], pExt))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op2FP(FFEXT|FOZ2X, stackRegs[0], pExt))
|
||||
end
|
||||
def pullExt(pExt)
|
||||
sane:zpSave()
|
||||
return _drop(sane:zpRestore(sane:fpOp2(FFEXT|FOX2Z, pExt, stackRegs[0])))
|
||||
sane:saveZP()
|
||||
return _drop(sane:restoreZP(sane:op2FP(FFEXT|FOX2Z, pExt, stackRegs[0])))
|
||||
end
|
||||
def loadExt(pExt, reg)
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp2(FFEXT|FOZ2X, stackRegs[reg & $03], pExt))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op2FP(FFEXT|FOZ2X, stackRegs[reg & $03], pExt))
|
||||
end
|
||||
def storExt(pExt, reg)
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp2(FFEXT|FOX2Z, pExt, stackRegs[reg & $03]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op2FP(FFEXT|FOX2Z, pExt, stackRegs[reg & $03]))
|
||||
end
|
||||
def pushStr(pStr)
|
||||
stackRegs[0], stackRegs[1], stackRegs[2], stackRegs[3] = stackRegs[3], stackRegs[0], stackRegs[1], stackRegs[2]
|
||||
@ -209,139 +209,139 @@ end
|
||||
// Basic math operations
|
||||
//
|
||||
def add
|
||||
sane:zpSave()
|
||||
return _drop(sane:zpRestore(sane:fpOp2(FFEXT|FOADD, stackRegs[1], stackRegs[0])))
|
||||
sane:saveZP()
|
||||
return _drop(sane:restoreZP(sane:op2FP(FFEXT|FOADD, stackRegs[1], stackRegs[0])))
|
||||
end
|
||||
def sub
|
||||
sane:zpSave()
|
||||
return _drop(sane:zpRestore(sane:fpOp2(FFEXT|FOSUB, stackRegs[1], stackRegs[0])))
|
||||
sane:saveZP()
|
||||
return _drop(sane:restoreZP(sane:op2FP(FFEXT|FOSUB, stackRegs[1], stackRegs[0])))
|
||||
end
|
||||
def mul
|
||||
sane:zpSave()
|
||||
return _drop(sane:zpRestore(sane:fpOp2(FFEXT|FOMUL, stackRegs[1], stackRegs[0])))
|
||||
sane:saveZP()
|
||||
return _drop(sane:restoreZP(sane:op2FP(FFEXT|FOMUL, stackRegs[1], stackRegs[0])))
|
||||
end
|
||||
def div
|
||||
sane:zpSave()
|
||||
return _drop(sane:zpRestore(sane:fpOp2(FFEXT|FODIV, stackRegs[1], stackRegs[0])))
|
||||
sane:saveZP()
|
||||
return _drop(sane:restoreZP(sane:op2FP(FFEXT|FODIV, stackRegs[1], stackRegs[0])))
|
||||
end
|
||||
def rem
|
||||
sane:zpSave()
|
||||
return _drop(sane:zpRestore(sane:fpOp2(FFEXT|FOREM, stackRegs[1], stackRegs[0])))
|
||||
sane:saveZP()
|
||||
return _drop(sane:restoreZP(sane:op2FP(FFEXT|FOREM, stackRegs[1], stackRegs[0])))
|
||||
end
|
||||
def neg
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp1(FFEXT|FONEG, stackRegs[0]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1FP(FFEXT|FONEG, stackRegs[0]))
|
||||
end
|
||||
def abs
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp1(FFEXT|FOABS, stackRegs[0]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1FP(FFEXT|FOABS, stackRegs[0]))
|
||||
end
|
||||
def type
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp1(FFEXT|FOCLASS, stackRegs[0]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1FP(FFEXT|FOCLASS, stackRegs[0]))
|
||||
end
|
||||
def cmp
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp2(FFEXT|FOCMP, stackRegs[1], stackRegs[0]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op2FP(FFEXT|FOCMP, stackRegs[1], stackRegs[0]))
|
||||
end
|
||||
def trunc
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp1(FFEXT|FOTTI, stackRegs[0]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1FP(FFEXT|FOTTI, stackRegs[0]))
|
||||
end
|
||||
def round
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp1(FFEXT|FORTI, stackRegs[0]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1FP(FFEXT|FORTI, stackRegs[0]))
|
||||
end
|
||||
def sqrt
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp1(FFEXT|FOSQRT, stackRegs[0]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1FP(FFEXT|FOSQRT, stackRegs[0]))
|
||||
end
|
||||
def squared
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp2(FFEXT|FOMUL, stackRegs[0], stackRegs[0]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op2FP(FFEXT|FOMUL, stackRegs[0], stackRegs[0]))
|
||||
end
|
||||
def logb
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp1(FFEXT|FOLOGB, stackRegs[0]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1FP(FFEXT|FOLOGB, stackRegs[0]))
|
||||
end
|
||||
def scalb(scale)
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:fpOp2(FFEXT|FOSCALB, stackRegs[0], scale))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op2FP(FFEXT|FOSCALB, stackRegs[0], scale))
|
||||
end
|
||||
//
|
||||
// Elems operations
|
||||
//
|
||||
def cos
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:elOp1(FFEXT|FOCOSX, stackRegs[0]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1ELEM(FFEXT|FOCOSX, stackRegs[0]))
|
||||
end
|
||||
def sin
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:elOp1(FFEXT|FOSINX, stackRegs[0]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1ELEM(FFEXT|FOSINX, stackRegs[0]))
|
||||
end
|
||||
def tan
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:elOp1(FFEXT|FOTANX, stackRegs[0]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1ELEM(FFEXT|FOTANX, stackRegs[0]))
|
||||
end
|
||||
def atan
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:elOp1(FFEXT|FOATANX, stackRegs[0]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1ELEM(FFEXT|FOATANX, stackRegs[0]))
|
||||
end
|
||||
def log2X
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:elOp1(FFEXT|FOLOG2X, stackRegs[0]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1ELEM(FFEXT|FOLOG2X, stackRegs[0]))
|
||||
end
|
||||
def log21X
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:elOp1(FFEXT|FOLOG21X, stackRegs[0]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1ELEM(FFEXT|FOLOG21X, stackRegs[0]))
|
||||
end
|
||||
def lnX
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:elOp1(FFEXT|FOLNX, stackRegs[0]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1ELEM(FFEXT|FOLNX, stackRegs[0]))
|
||||
end
|
||||
def ln1X
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:elOp1(FFEXT|FOLN1X, stackRegs[0]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1ELEM(FFEXT|FOLN1X, stackRegs[0]))
|
||||
end
|
||||
def pow2X
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:elOp1(FFEXT|FOEXP2X, stackRegs[0]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1ELEM(FFEXT|FOEXP2X, stackRegs[0]))
|
||||
end
|
||||
def pow21X
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:elOp1(FFEXT|FOEXP21X, stackRegs[0]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1ELEM(FFEXT|FOEXP21X, stackRegs[0]))
|
||||
end
|
||||
def powEX
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:elOp1(FFEXT|FOEXPX, stackRegs[0]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1ELEM(FFEXT|FOEXPX, stackRegs[0]))
|
||||
end
|
||||
def powE1X
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:elOp1(FFEXT|FOEXP1X, stackRegs[0]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1ELEM(FFEXT|FOEXP1X, stackRegs[0]))
|
||||
end
|
||||
def powE21X
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:elOp1(FFEXT|FOEXP21X, stackRegs[0]))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1ELEM(FFEXT|FOEXP21X, stackRegs[0]))
|
||||
end
|
||||
def powXInt(powInt)
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:elOp2(FFEXT|FOXPWRI, stackRegs[0], powInt))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op2ELEM(FFEXT|FOXPWRI, stackRegs[0], powInt))
|
||||
end
|
||||
def powXY
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(_drop(_swap(sane:elOp2(FFEXT|FOXPWRY, stackRegs[0], stackRegs[1]))))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(_drop(_swap(sane:op2ELEM(FFEXT|FOXPWRY, stackRegs[0], stackRegs[1]))))
|
||||
end
|
||||
def compXY
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(_drop(_swap(sane:elOp2(FFEXT|FOCOMPND, stackRegs[0], stackRegs[1]))))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(_drop(_swap(sane:op2ELEM(FFEXT|FOCOMPND, stackRegs[0], stackRegs[1]))))
|
||||
end
|
||||
def annuityXY
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(_drop(_swap(sane:elOp2(FFEXT|FOANNUIT, stackRegs[0], stackRegs[1]))))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(_drop(_swap(sane:op2ELEM(FFEXT|FOANNUIT, stackRegs[0], stackRegs[1]))))
|
||||
end
|
||||
def randNum(pSeed)
|
||||
sane:zpSave()
|
||||
return sane:zpRestore(sane:elOp1(FFEXT|FORANDX, pSeed))
|
||||
sane:saveZP()
|
||||
return sane:restoreZP(sane:op1ELEM(FFEXT|FORANDX, pSeed))
|
||||
end
|
||||
//
|
||||
// Push useful constants
|
||||
@ -360,12 +360,12 @@ def reset
|
||||
word zero
|
||||
|
||||
zero = 0
|
||||
sane:fpInit()
|
||||
sane:zpSave()
|
||||
sane:initFP()
|
||||
sane:saveZP()
|
||||
for i = 0 to 3
|
||||
stackRegs[i] = @stack[i * t_extended]
|
||||
sane:fpOp2(FFINT|FOZ2X, stackRegs[i], @zero)
|
||||
sane:op2FP(FFINT|FOZ2X, stackRegs[i], @zero)
|
||||
next
|
||||
return sane:zpRestore(0)
|
||||
return sane:restoreZP(0)
|
||||
end
|
||||
done
|
||||
|
Loading…
x
Reference in New Issue
Block a user