1570af302Sopenharmony_ci.global feclearexcept 2570af302Sopenharmony_ci.type feclearexcept,@function 3570af302Sopenharmony_cifeclearexcept: 4570af302Sopenharmony_ci # maintain exceptions in the sse mxcsr, clear x87 exceptions 5570af302Sopenharmony_ci mov %edi,%ecx 6570af302Sopenharmony_ci and $0x3f,%ecx 7570af302Sopenharmony_ci fnstsw %ax 8570af302Sopenharmony_ci test %eax,%ecx 9570af302Sopenharmony_ci jz 1f 10570af302Sopenharmony_ci fnclex 11570af302Sopenharmony_ci1: stmxcsr -8(%rsp) 12570af302Sopenharmony_ci and $0x3f,%eax 13570af302Sopenharmony_ci or %eax,-8(%rsp) 14570af302Sopenharmony_ci test %ecx,-8(%rsp) 15570af302Sopenharmony_ci jz 1f 16570af302Sopenharmony_ci not %ecx 17570af302Sopenharmony_ci and %ecx,-8(%rsp) 18570af302Sopenharmony_ci ldmxcsr -8(%rsp) 19570af302Sopenharmony_ci1: xor %eax,%eax 20570af302Sopenharmony_ci ret 21570af302Sopenharmony_ci 22570af302Sopenharmony_ci.global feraiseexcept 23570af302Sopenharmony_ci.type feraiseexcept,@function 24570af302Sopenharmony_ciferaiseexcept: 25570af302Sopenharmony_ci and $0x3f,%edi 26570af302Sopenharmony_ci stmxcsr -8(%rsp) 27570af302Sopenharmony_ci or %edi,-8(%rsp) 28570af302Sopenharmony_ci ldmxcsr -8(%rsp) 29570af302Sopenharmony_ci xor %eax,%eax 30570af302Sopenharmony_ci ret 31570af302Sopenharmony_ci 32570af302Sopenharmony_ci.global __fesetround 33570af302Sopenharmony_ci.hidden __fesetround 34570af302Sopenharmony_ci.type __fesetround,@function 35570af302Sopenharmony_ci__fesetround: 36570af302Sopenharmony_ci push %rax 37570af302Sopenharmony_ci xor %eax,%eax 38570af302Sopenharmony_ci mov %edi,%ecx 39570af302Sopenharmony_ci fnstcw (%rsp) 40570af302Sopenharmony_ci andb $0xf3,1(%rsp) 41570af302Sopenharmony_ci or %ch,1(%rsp) 42570af302Sopenharmony_ci fldcw (%rsp) 43570af302Sopenharmony_ci stmxcsr (%rsp) 44570af302Sopenharmony_ci shl $3,%ch 45570af302Sopenharmony_ci andb $0x9f,1(%rsp) 46570af302Sopenharmony_ci or %ch,1(%rsp) 47570af302Sopenharmony_ci ldmxcsr (%rsp) 48570af302Sopenharmony_ci pop %rcx 49570af302Sopenharmony_ci ret 50570af302Sopenharmony_ci 51570af302Sopenharmony_ci.global fegetround 52570af302Sopenharmony_ci.type fegetround,@function 53570af302Sopenharmony_cifegetround: 54570af302Sopenharmony_ci push %rax 55570af302Sopenharmony_ci stmxcsr (%rsp) 56570af302Sopenharmony_ci pop %rax 57570af302Sopenharmony_ci shr $3,%eax 58570af302Sopenharmony_ci and $0xc00,%eax 59570af302Sopenharmony_ci ret 60570af302Sopenharmony_ci 61570af302Sopenharmony_ci.global fegetenv 62570af302Sopenharmony_ci.type fegetenv,@function 63570af302Sopenharmony_cifegetenv: 64570af302Sopenharmony_ci xor %eax,%eax 65570af302Sopenharmony_ci fnstenv (%rdi) 66570af302Sopenharmony_ci stmxcsr 28(%rdi) 67570af302Sopenharmony_ci ret 68570af302Sopenharmony_ci 69570af302Sopenharmony_ci.global fesetenv 70570af302Sopenharmony_ci.type fesetenv,@function 71570af302Sopenharmony_cifesetenv: 72570af302Sopenharmony_ci xor %eax,%eax 73570af302Sopenharmony_ci inc %rdi 74570af302Sopenharmony_ci jz 1f 75570af302Sopenharmony_ci fldenv -1(%rdi) 76570af302Sopenharmony_ci ldmxcsr 27(%rdi) 77570af302Sopenharmony_ci ret 78570af302Sopenharmony_ci1: push %rax 79570af302Sopenharmony_ci push %rax 80570af302Sopenharmony_ci pushq $0xffff 81570af302Sopenharmony_ci pushq $0x37f 82570af302Sopenharmony_ci fldenv (%rsp) 83570af302Sopenharmony_ci pushq $0x1f80 84570af302Sopenharmony_ci ldmxcsr (%rsp) 85570af302Sopenharmony_ci add $40,%rsp 86570af302Sopenharmony_ci ret 87570af302Sopenharmony_ci 88570af302Sopenharmony_ci.global fetestexcept 89570af302Sopenharmony_ci.type fetestexcept,@function 90570af302Sopenharmony_cifetestexcept: 91570af302Sopenharmony_ci and $0x3f,%edi 92570af302Sopenharmony_ci push %rax 93570af302Sopenharmony_ci stmxcsr (%rsp) 94570af302Sopenharmony_ci pop %rsi 95570af302Sopenharmony_ci fnstsw %ax 96570af302Sopenharmony_ci or %esi,%eax 97570af302Sopenharmony_ci and %edi,%eax 98570af302Sopenharmony_ci ret 99