mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
WebAssembly: simply assert on SNaN and NaNs with payloads
Summary: convertToHexString doesn't represent them correctly at this point in time. This is a follow-up to sunfish's suggestion in D11914. Subscribers: llvm-commits, sunfish, jfb Differential Revision: http://reviews.llvm.org/D11925 llvm-svn: 244551
This commit is contained in:
parent
b772c3e968
commit
6198dac24e
@ -117,10 +117,11 @@ void WebAssemblyAsmPrinter::EmitInstruction(const MachineInstr *MI) {
|
||||
static const size_t BufBytes = 128;
|
||||
char buf[BufBytes];
|
||||
APFloat FP = MO.getFPImm()->getValueAPF();
|
||||
const APFloat CanonicalNaN = APFloat::getQNaN(FP.getSemantics());
|
||||
if (FP.isNaN() && !FP.bitwiseIsEqual(CanonicalNaN))
|
||||
// WebAssembly only has NaNs that are positive, quiet, without payload.
|
||||
FP = CanonicalNaN;
|
||||
if (FP.isNaN())
|
||||
assert((FP.bitwiseIsEqual(APFloat::getQNaN(FP.getSemantics())) ||
|
||||
FP.bitwiseIsEqual(
|
||||
APFloat::getQNaN(FP.getSemantics(), /*Negative=*/true))) &&
|
||||
"convertToHexString handles neither SNaN nor NaN payloads");
|
||||
// Use C99's hexadecimal floating-point representation.
|
||||
auto Written =
|
||||
FP.convertToHexString(buf, /*hexDigits=*/0, /*upperCase=*/false,
|
||||
|
@ -97,7 +97,7 @@ define float @nan_f32() {
|
||||
}
|
||||
|
||||
; CHECK-LABEL: negnan_f32:
|
||||
; CHECK-NEXT: (setlocal @0 (immediate nan))
|
||||
; CHECK-NEXT: (setlocal @0 (immediate -nan))
|
||||
; CHECK-NEXT: (return @0)
|
||||
define float @negnan_f32() {
|
||||
ret float 0xFFF8000000000000
|
||||
@ -153,7 +153,7 @@ define double @nan_f64() {
|
||||
}
|
||||
|
||||
; CHECK-LABEL: negnan_f64:
|
||||
; CHECK-NEXT: (setlocal @0 (immediate nan))
|
||||
; CHECK-NEXT: (setlocal @0 (immediate -nan))
|
||||
; CHECK-NEXT: (return @0)
|
||||
define double @negnan_f64() {
|
||||
ret double 0xFFF8000000000000
|
||||
|
Loading…
x
Reference in New Issue
Block a user