mirror of
https://github.com/fluencelabs/wasmer
synced 2025-07-30 14:52:01 +00:00
Disable NaN canonicalizing on aarch64.
This commit is contained in:
@@ -3108,6 +3108,14 @@ impl FunctionCodeGenerator<CodegenError> for X64FunctionCode {
|
||||
Assembler::emit_vdivss,
|
||||
),
|
||||
Operator::F32Max => {
|
||||
if !a.arch_supports_canonicalize_nan() {
|
||||
Self::emit_fp_binop_avx(
|
||||
a,
|
||||
&mut self.machine,
|
||||
&mut self.value_stack,
|
||||
Assembler::emit_vmaxss,
|
||||
);
|
||||
} else {
|
||||
let src2 =
|
||||
get_location_released(a, &mut self.machine, self.value_stack.pop().unwrap());
|
||||
let src1 =
|
||||
@@ -3204,7 +3212,16 @@ impl FunctionCodeGenerator<CodegenError> for X64FunctionCode {
|
||||
self.machine.release_temp_xmm(tmp2);
|
||||
self.machine.release_temp_xmm(tmp1);
|
||||
}
|
||||
}
|
||||
Operator::F32Min => {
|
||||
if !a.arch_supports_canonicalize_nan() {
|
||||
Self::emit_fp_binop_avx(
|
||||
a,
|
||||
&mut self.machine,
|
||||
&mut self.value_stack,
|
||||
Assembler::emit_vminss,
|
||||
);
|
||||
} else {
|
||||
let src2 =
|
||||
get_location_released(a, &mut self.machine, self.value_stack.pop().unwrap());
|
||||
let src1 =
|
||||
@@ -3312,6 +3329,7 @@ impl FunctionCodeGenerator<CodegenError> for X64FunctionCode {
|
||||
self.machine.release_temp_xmm(tmp2);
|
||||
self.machine.release_temp_xmm(tmp1);
|
||||
}
|
||||
}
|
||||
Operator::F32Eq => Self::emit_fp_cmpop_avx(
|
||||
a,
|
||||
&mut self.machine,
|
||||
@@ -3502,6 +3520,14 @@ impl FunctionCodeGenerator<CodegenError> for X64FunctionCode {
|
||||
Assembler::emit_vdivsd,
|
||||
),
|
||||
Operator::F64Max => {
|
||||
if !a.arch_supports_canonicalize_nan() {
|
||||
Self::emit_fp_binop_avx(
|
||||
a,
|
||||
&mut self.machine,
|
||||
&mut self.value_stack,
|
||||
Assembler::emit_vmaxsd,
|
||||
);
|
||||
} else {
|
||||
let src2 =
|
||||
get_location_released(a, &mut self.machine, self.value_stack.pop().unwrap());
|
||||
let src1 =
|
||||
@@ -3598,7 +3624,16 @@ impl FunctionCodeGenerator<CodegenError> for X64FunctionCode {
|
||||
self.machine.release_temp_xmm(tmp2);
|
||||
self.machine.release_temp_xmm(tmp1);
|
||||
}
|
||||
}
|
||||
Operator::F64Min => {
|
||||
if !a.arch_supports_canonicalize_nan() {
|
||||
Self::emit_fp_binop_avx(
|
||||
a,
|
||||
&mut self.machine,
|
||||
&mut self.value_stack,
|
||||
Assembler::emit_vminsd,
|
||||
);
|
||||
} else {
|
||||
let src2 =
|
||||
get_location_released(a, &mut self.machine, self.value_stack.pop().unwrap());
|
||||
let src1 =
|
||||
@@ -3706,6 +3741,7 @@ impl FunctionCodeGenerator<CodegenError> for X64FunctionCode {
|
||||
self.machine.release_temp_xmm(tmp2);
|
||||
self.machine.release_temp_xmm(tmp1);
|
||||
}
|
||||
}
|
||||
Operator::F64Eq => Self::emit_fp_cmpop_avx(
|
||||
a,
|
||||
&mut self.machine,
|
||||
|
@@ -267,6 +267,8 @@ pub trait Emitter {
|
||||
fn arch_emit_tzcnt(&mut self, _sz: Size, _src: Location, _dst: Location) {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
fn arch_supports_canonicalize_nan(&self) -> bool { true }
|
||||
}
|
||||
|
||||
fn _dummy(a: &mut Assembler) {
|
||||
|
@@ -1709,6 +1709,8 @@ impl Emitter for Assembler {
|
||||
; .dword (ty as u8 as i32)
|
||||
);
|
||||
}
|
||||
|
||||
fn arch_supports_canonicalize_nan(&self) -> bool { false }
|
||||
}
|
||||
|
||||
fn emit_clz_variant(
|
||||
|
Reference in New Issue
Block a user