Closed
Bug 1176375
Opened 10 years ago
Closed 9 years ago
SIMD float64x2 comparisons are broken.
Categories
(Core :: JavaScript Engine, defect)
Core
JavaScript Engine
Tracking
()
RESOLVED
FIXED
Tracking | Status | |
---|---|---|
firefox41 | --- | affected |
People
(Reporter: jujjyl, Unassigned)
References
Details
Attachments
(1 file)
520 bytes,
application/x-javascript
|
Details |
STR:
1. Run the attached file in SpiderMonkey.
Observed: The file prints
a: x=-3.4028234663852886e+38, y=-2.5
b: x=-Infinity, y=1.401298464e-45
c: x=-1, y=-1
A: x=-3.4028234663852886e+38, y=-2.5
B: x=-Infinity, y=1.401298464324817e-45
C: x=-1, y=0
Expected: The file should print
a: x=-3.4028234663852886e+38, y=-2.5
b: x=-Infinity, y=1.401298464e-45
c: x=-1, y=0
A: x=-3.4028234663852886e+38, y=-2.5
B: x=-Infinity, y=1.401298464324817e-45
C: x=-1, y=0
The test case was written for SIMD.float64x2.greaterThan(), but changing the comparison e.g. to SIMD.float64x2.lessThan(), a similar issue occurs, so other comparison functions may be affected here.
Updated•10 years ago
|
Flags: needinfo?(benj)
Comment 1•10 years ago
|
||
This happens because we haven't updated our SIMD implementation to use the BoolX2 vector. In the former spec, this is correct with c being an int32x4: the result of comparing a.x and b.x (resp. a.y and b.y) would be copied in both c.x and c.y (resp. c.z and c.w).
I'll add the new Bool types.
Comment 2•9 years ago
|
||
The current patches in Bug 1160971 add a Bool64x2 type which is used as the result of the Float64x2 comparison functions.
Comment 3•9 years ago
|
||
Fixed by bug 1160971:
var f64 = SIMD.Float64x2;
var f32 = SIMD.Float32x4;
function p64(s, n) {
console.log(n + ': x=' + f64.extractLane(s, 0) + ', y=' + f64.extractLane(s, 1));
}
function p32(s, n) {
console.log(n + ': x=' + f32.extractLane(s, 0) + ', y=' + f32.extractLane(s, 1));
}
var a = SIMD.Float64x2(-3.4028234663852886e+38,-2.5)
p64(a, 'a');
var b = SIMD.Float64x2(-Infinity,1.4012984639999999e-45)
p64(b, 'b');
var c = SIMD.Float64x2.greaterThan(a, b);
console.log('c: x=' + SIMD.Bool64x2.extractLane(c, 0) + ', y=' + SIMD.Bool64x2.extractLane(c, 1));
var a = SIMD.Float32x4(-3.4028234663852886e+38,-2.5)
p32(a, 'A');
var b = SIMD.Float32x4(-Infinity,1.4012984639999999e-45)
p32(b, 'B');
var c = SIMD.Float32x4.greaterThan(a, b);
console.log('C: x=' + SIMD.Bool32x4.extractLane(c, 0) + ', y=' + SIMD.Bool32x4.extractLane(c, 1));
// Output:
a: x=-3.4028234663852886e+38, y=-2.5
b: x=-Infinity, y=1.401298464e-45
c: x=true, y=false
A: x=-3.4028234663852886e+38, y=-2.5
B: x=-Infinity, y=1.401298464324817e-45
C: x=true, y=false
Status: NEW → RESOLVED
Closed: 9 years ago
Resolution: --- → FIXED
You need to log in
before you can comment on or make changes to this bug.
Description
•