69 lines
991 B
ArmAsm
69 lines
991 B
ArmAsm
.global fegetround
|
|
.type fegetround,%function
|
|
fegetround:
|
|
mrs x0, fpcr
|
|
and w0, w0, #0xc00000
|
|
ret
|
|
|
|
.global __fesetround
|
|
.hidden __fesetround
|
|
.type __fesetround,%function
|
|
__fesetround:
|
|
mrs x1, fpcr
|
|
bic w1, w1, #0xc00000
|
|
orr w1, w1, w0
|
|
msr fpcr, x1
|
|
mov w0, #0
|
|
ret
|
|
|
|
.global fetestexcept
|
|
.type fetestexcept,%function
|
|
fetestexcept:
|
|
and w0, w0, #0x1f
|
|
mrs x1, fpsr
|
|
and w0, w0, w1
|
|
ret
|
|
|
|
.global feclearexcept
|
|
.type feclearexcept,%function
|
|
feclearexcept:
|
|
and w0, w0, #0x1f
|
|
mrs x1, fpsr
|
|
bic w1, w1, w0
|
|
msr fpsr, x1
|
|
mov w0, #0
|
|
ret
|
|
|
|
.global feraiseexcept
|
|
.type feraiseexcept,%function
|
|
feraiseexcept:
|
|
and w0, w0, #0x1f
|
|
mrs x1, fpsr
|
|
orr w1, w1, w0
|
|
msr fpsr, x1
|
|
mov w0, #0
|
|
ret
|
|
|
|
.global fegetenv
|
|
.type fegetenv,%function
|
|
fegetenv:
|
|
mrs x1, fpcr
|
|
mrs x2, fpsr
|
|
stp w1, w2, [x0]
|
|
mov w0, #0
|
|
ret
|
|
|
|
// TODO preserve some bits
|
|
.global fesetenv
|
|
.type fesetenv,%function
|
|
fesetenv:
|
|
mov x1, #0
|
|
mov x2, #0
|
|
cmn x0, #1
|
|
b.eq 1f
|
|
ldp w1, w2, [x0]
|
|
1: msr fpcr, x1
|
|
msr fpsr, x2
|
|
mov w0, #0
|
|
ret
|