fenv.s raw

   1  .global fegetround
   2  .type fegetround,%function
   3  fegetround:
   4  	mrs x0, fpcr
   5  	and w0, w0, #0xc00000
   6  	ret
   7  
   8  .global __fesetround
   9  .hidden __fesetround
  10  .type __fesetround,%function
  11  __fesetround:
  12  	mrs x1, fpcr
  13  	bic w1, w1, #0xc00000
  14  	orr w1, w1, w0
  15  	msr fpcr, x1
  16  	mov w0, #0
  17  	ret
  18  
  19  .global fetestexcept
  20  .type fetestexcept,%function
  21  fetestexcept:
  22  	and w0, w0, #0x1f
  23  	mrs x1, fpsr
  24  	and w0, w0, w1
  25  	ret
  26  
  27  .global feclearexcept
  28  .type feclearexcept,%function
  29  feclearexcept:
  30  	and w0, w0, #0x1f
  31  	mrs x1, fpsr
  32  	bic w1, w1, w0
  33  	msr fpsr, x1
  34  	mov w0, #0
  35  	ret
  36  
  37  .global feraiseexcept
  38  .type feraiseexcept,%function
  39  feraiseexcept:
  40  	and w0, w0, #0x1f
  41  	mrs x1, fpsr
  42  	orr w1, w1, w0
  43  	msr fpsr, x1
  44  	mov w0, #0
  45  	ret
  46  
  47  .global fegetenv
  48  .type fegetenv,%function
  49  fegetenv:
  50  	mrs x1, fpcr
  51  	mrs x2, fpsr
  52  	stp w1, w2, [x0]
  53  	mov w0, #0
  54  	ret
  55  
  56  // TODO preserve some bits
  57  .global fesetenv
  58  .type fesetenv,%function
  59  fesetenv:
  60  	mov x1, #0
  61  	mov x2, #0
  62  	cmn x0, #1
  63  	b.eq 1f
  64  	ldp w1, w2, [x0]
  65  1:	msr fpcr, x1
  66  	msr fpsr, x2
  67  	mov w0, #0
  68  	ret
  69