13#if defined(V8_HOST_ARCH_X64) || defined(V8_HOST_ARCH_IA32)
18constexpr int kFlushDenormToZeroBits = 0x8040;
21 asm volatile(
"stmxcsr %0" :
"=m"(
result));
27 asm volatile(
"ldmxcsr %0" : :
"m"(temp));
33 return csr & kFlushDenormToZeroBits;
37 int old_csr = GetCSR();
38 int new_csr = value ? old_csr | kFlushDenormToZeroBits
39 : old_csr & ~kFlushDenormToZeroBits;
42#elif defined(V8_CC_MSVC)
45 _controlfp_s(&csr, 0, 0);
46 return (csr & _MCW_DN) == _DN_FLUSH;
51 _controlfp_s(&csr, value ? _DN_FLUSH : _DN_SAVE, _MCW_DN);
54#error "Unsupported compiler"
57#elif defined(V8_HOST_ARCH_ARM64) || defined(V8_HOST_ARCH_ARM)
62constexpr int kFlushDenormToZeroBit = (1 << 24);
65#if defined(V8_HOST_ARCH_ARM64)
66 asm volatile(
"mrs %x[result], FPCR" : [
result]
"=r"(
result));
68 asm volatile(
"vmrs %[result], FPSCR" : [
result]
"=r"(
result));
73void SetStatusWord(
int a) {
74#if defined(V8_HOST_ARCH_ARM64)
75 asm volatile(
"msr FPCR, %x[src]" : : [src]
"r"(
a));
77 asm volatile(
"vmsr FPSCR, %[src]" : : [src]
"r"(
a));
83 int csr = GetStatusWord();
84 return csr & kFlushDenormToZeroBit;
88 int old_csr = GetStatusWord();
89 int new_csr = value ? old_csr | kFlushDenormToZeroBit
90 : old_csr & ~kFlushDenormToZeroBit;
91 SetStatusWord(new_csr);
static V8_BASE_EXPORT bool GetFlushDenormals()
static V8_BASE_EXPORT void SetFlushDenormals(bool)
std::optional< TNode< JSArray > > a
ZoneVector< RpoNumber > & result