Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Flags: --validate-asm --allow-natives-syntax | 5 // Flags: --validate-asm --allow-natives-syntax |
| 6 | 6 |
| 7 function RunAsmJsTest(asmfunc, expect) { | 7 function RunAsmJsTest(asmfunc, expect) { |
| 8 var asm_source = asmfunc.toString(); | 8 var asm_source = asmfunc.toString(); |
| 9 var nonasm_source = asm_source.replace(new RegExp("use asm"), ""); | 9 var nonasm_source = asm_source.replace(new RegExp("use asm"), ""); |
| 10 var stdlib = {Math: Math}; | 10 var stdlib = {Math: Math}; |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 25 function f1() { return 1; } | 25 function f1() { return 1; } |
| 26 function f4() { return 4; } | 26 function f4() { return 4; } |
| 27 function f64() { return 64; } | 27 function f64() { return 64; } |
| 28 function f127() { return 127; } | 28 function f127() { return 127; } |
| 29 function f128() { return 128; } | 29 function f128() { return 128; } |
| 30 function f256() { return 256; } | 30 function f256() { return 256; } |
| 31 function f1000() { return 1000; } | 31 function f1000() { return 1000; } |
| 32 function f2000000() { return 2000000; } | 32 function f2000000() { return 2000000; } |
| 33 function fmax() { return 2147483647; } | 33 function fmax() { return 2147483647; } |
| 34 return {f0: f0, f1: f1, f4: f4, f64: f64, f127: f127, f128: f128, | 34 return {f0: f0, f1: f1, f4: f4, f64: f64, f127: f127, f128: f128, |
| 35 f256: f256, f1000: f1000, f2000000, fmax: fmax}; | 35 f256: f256, f1000: f1000, f2000000: f2000000, fmax: fmax}; |
| 36 } | 36 } |
| 37 | 37 |
| 38 RunAsmJsTest(PositiveIntLiterals, function(module) { | 38 RunAsmJsTest(PositiveIntLiterals, function(module) { |
| 39 assertEquals(0, module.f0()); | 39 assertEquals(0, module.f0()); |
| 40 assertEquals(1, module.f1()); | 40 assertEquals(1, module.f1()); |
| 41 assertEquals(1, module.f1()); | 41 assertEquals(1, module.f1()); |
| 42 assertEquals(4, module.f4()); | 42 assertEquals(4, module.f4()); |
| 43 assertEquals(64, module.f64()); | 43 assertEquals(64, module.f64()); |
| 44 assertEquals(128, module.f128()); | 44 assertEquals(128, module.f128()); |
| 45 assertEquals(256, module.f256()); | 45 assertEquals(256, module.f256()); |
| 46 assertEquals(1000, module.f1000()); | 46 assertEquals(1000, module.f1000()); |
| 47 assertEquals(2000000, module.f2000000()); | 47 assertEquals(2000000, module.f2000000()); |
| 48 assertEquals(2147483647, module.fmax()); | 48 assertEquals(2147483647, module.fmax()); |
| 49 }); | 49 }); |
| 50 | 50 |
| 51 function NegativeIntLiterals() { | 51 function NegativeIntLiterals() { |
| 52 "use asm"; | 52 "use asm"; |
| 53 function f1() { return -1; } | 53 function f1() { return -1; } |
| 54 function f4() { return -4; } | 54 function f4() { return -4; } |
| 55 function f64() { return -64; } | 55 function f64() { return -64; } |
| 56 function f127() { return -127; } | 56 function f127() { return -127; } |
| 57 function f128() { return -128; } | 57 function f128() { return -128; } |
| 58 function f256() { return -256; } | 58 function f256() { return -256; } |
| 59 function f1000() { return -1000; } | 59 function f1000() { return -1000; } |
| 60 function f2000000() { return -2000000; } | 60 function f2000000() { return -2000000; } |
| 61 function fmin() { return -2147483648; } | 61 function fmin() { return -2147483648; } |
| 62 return {f1: f1, f4: f4, f64: f64, f127: f127, f128: f128, | 62 return {f1: f1, f4: f4, f64: f64, f127: f127, f128: f128, |
| 63 f256: f256, f1000: f1000, f2000000, fmin: fmin}; | 63 f256: f256, f1000: f1000, f2000000: f2000000, fmin: fmin}; |
| 64 } | 64 } |
| 65 | 65 |
| 66 RunAsmJsTest(NegativeIntLiterals, function (module) { | 66 RunAsmJsTest(NegativeIntLiterals, function (module) { |
| 67 assertEquals(-1, module.f1()); | 67 assertEquals(-1, module.f1()); |
| 68 assertEquals(-4, module.f4()); | 68 assertEquals(-4, module.f4()); |
| 69 assertEquals(-64, module.f64()); | 69 assertEquals(-64, module.f64()); |
| 70 assertEquals(-127, module.f127()); | 70 assertEquals(-127, module.f127()); |
| 71 assertEquals(-128, module.f128()); | 71 assertEquals(-128, module.f128()); |
| 72 assertEquals(-256, module.f256()); | 72 assertEquals(-256, module.f256()); |
| 73 assertEquals(-1000, module.f1000()); | 73 assertEquals(-1000, module.f1000()); |
| 74 assertEquals(-2000000, module.f2000000()); | 74 assertEquals(-2000000, module.f2000000()); |
| 75 assertEquals(-2147483648, module.fmin()); | 75 assertEquals(-2147483648, module.fmin()); |
| 76 }); | 76 }); |
| 77 | 77 |
| 78 function PositiveUnsignedLiterals() { | 78 function PositiveUnsignedLiterals() { |
| 79 "use asm"; | 79 "use asm"; |
| 80 function f0() { return 0 >>> 0; } | 80 function f0() { return +(0 >>> 0); } |
|
Eric Holk
2017/03/14 17:08:50
The + is here to convert these into doubles, right
bradn
2017/03/14 20:15:13
Correct. The asm.js spec doesn't actually allow un
| |
| 81 function f1() { return 1 >>> 0; } | 81 function f1() { return +(1 >>> 0); } |
| 82 function f4() { return 4 >>> 0; } | 82 function f4() { return +(4 >>> 0); } |
| 83 function f64() { return 64 >>> 0; } | 83 function f64() { return +(64 >>> 0); } |
| 84 function f127() { return 127 >>> 0; } | 84 function f127() { return +(127 >>> 0); } |
| 85 function f128() { return 128 >>> 0; } | 85 function f128() { return +(128 >>> 0); } |
| 86 function f256() { return 256 >>> 0; } | 86 function f256() { return +(256 >>> 0); } |
| 87 function f1000() { return 1000 >>> 0; } | 87 function f1000() { return +(1000 >>> 0); } |
| 88 function f2000000() { return 2000000 >>> 0; } | 88 function f2000000() { return +(2000000 >>> 0); } |
| 89 function fmax() { return 2147483647 >>> 0; } | 89 function fmax() { return +(2147483647 >>> 0); } |
| 90 return {f0: f0, f1: f1, f4: f4, f64: f64, f127: f127, f128: f128, | 90 return {f0: f0, f1: f1, f4: f4, f64: f64, f127: f127, f128: f128, |
| 91 f256: f256, f1000: f1000, f2000000, fmax: fmax}; | 91 f256: f256, f1000: f1000, f2000000: f2000000, fmax: fmax}; |
| 92 } | 92 } |
| 93 | 93 |
| 94 RunAsmJsTest(PositiveUnsignedLiterals, function (module) { | 94 RunAsmJsTest(PositiveUnsignedLiterals, function (module) { |
| 95 assertEquals(0, module.f0()); | 95 assertEquals(0, module.f0()); |
| 96 assertEquals(1, module.f1()); | 96 assertEquals(1, module.f1()); |
| 97 assertEquals(4, module.f4()); | 97 assertEquals(4, module.f4()); |
| 98 assertEquals(64, module.f64()); | 98 assertEquals(64, module.f64()); |
| 99 assertEquals(128, module.f128()); | 99 assertEquals(128, module.f128()); |
| 100 assertEquals(256, module.f256()); | 100 assertEquals(256, module.f256()); |
| 101 assertEquals(1000, module.f1000()); | 101 assertEquals(1000, module.f1000()); |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 132 assertEquals(2147483648, module.a()); | 132 assertEquals(2147483648, module.a()); |
| 133 assertEquals(2147483649, module.b()); | 133 assertEquals(2147483649, module.b()); |
| 134 assertEquals(0x80000000, module.c()); | 134 assertEquals(0x80000000, module.c()); |
| 135 assertEquals(0x80000001, module.d()); | 135 assertEquals(0x80000001, module.d()); |
| 136 assertEquals(0xffffffff, module.e()); | 136 assertEquals(0xffffffff, module.e()); |
| 137 }); | 137 }); |
| 138 | 138 |
| 139 function ManyI32() { | 139 function ManyI32() { |
| 140 "use asm"; | 140 "use asm"; |
| 141 function main() { | 141 function main() { |
| 142 var a = 1 + -2 + 3 + -4 | 0; | 142 var a = 0, b = 0, c = 0, d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0; |
| 143 var b = 11 + -22 + 33 + -44 | 0; | 143 a = 1 + -2 + 3 + -4 | 0; |
| 144 var c = 111 + -222 + 333 + -444 | 0; | 144 b = 11 + -22 + 33 + -44 | 0; |
| 145 var d = 1111 + -2222 + 3333 + -4444 | 0; | 145 c = 111 + -222 + 333 + -444 | 0; |
| 146 var e = 11111 + -22222 + 33333 + -44444 | 0; | 146 d = 1111 + -2222 + 3333 + -4444 | 0; |
| 147 var f = 155555 + -266666 + 377777 + -488888 | 0; | 147 e = 11111 + -22222 + 33333 + -44444 | 0; |
| 148 var g = 1155555 + -2266666 + 3377777 + -4488888 | 0; | 148 f = 155555 + -266666 + 377777 + -488888 | 0; |
| 149 var h = 11155555 + -22266666 + 33377777 + -44488888 | 0; | 149 g = 1155555 + -2266666 + 3377777 + -4488888 | 0; |
| 150 var i = 111155555 + -222266666 + 333377777 + -444488888 | 0; | 150 h = 11155555 + -22266666 + 33377777 + -44488888 | 0; |
| 151 var j = ( | 151 i = 111155555 + -222266666 + 333377777 + -444488888 | 0; |
| 152 j = ( | |
| 152 0x1 + 0x2 + 0x4 + 0x8 + | 153 0x1 + 0x2 + 0x4 + 0x8 + |
| 153 0x10 + 0x20 + 0x40 + 0x80 + | 154 0x10 + 0x20 + 0x40 + 0x80 + |
| 154 0x10F + 0x200 + 0x400 + 0x800 + | 155 0x10F + 0x200 + 0x400 + 0x800 + |
| 155 0x10E0 + 0x20F0 + 0x4000 + 0x8000 + | 156 0x10E0 + 0x20F0 + 0x4000 + 0x8000 + |
| 156 0x10D00 + 0x20E00 + 0x400F0 + 0x80002 + | 157 0x10D00 + 0x20E00 + 0x400F0 + 0x80002 + |
| 157 0x10C000 + 0x20D000 + 0x400E00 + 0x800030 + | 158 0x10C000 + 0x20D000 + 0x400E00 + 0x800030 + |
| 158 0x10B0000 + 0x20C0000 + 0x400D000 + 0x8000400 + | 159 0x10B0000 + 0x20C0000 + 0x400D000 + 0x8000400 + |
| 159 0x10A00000 + 0x20B00000 + 0x400C0000 + 0x80005000 | 160 0x10A00000 + 0x20B00000 + 0x400C0000 + 0x80005000 |
| 160 ) | 0; | 161 ) | 0; |
| 161 return (a + b + c + d + e + f + g + h + i + j) | 0; | 162 return (a + b + c + d + e + f + g + h + i + j) | 0; |
| 162 } | 163 } |
| 163 return {main: main}; | 164 return {main: main}; |
| 164 } | 165 } |
| 165 | 166 |
| 166 RunAsmJsTest(ManyI32, function(module) { | 167 RunAsmJsTest(ManyI32, function(module) { |
| 167 assertEquals(-222411306, module.main()); | 168 assertEquals(-222411306, module.main()); |
| 168 }); | 169 }); |
| 169 | 170 |
| 170 | 171 |
| 171 function ManyF64a() { | 172 function ManyF64a() { |
| 172 "use asm"; | 173 "use asm"; |
| 173 function main() { | 174 function main() { |
| 174 var a = +( 0.1 + -0.2 + 0.3 + -0.4); | 175 var a = 0.0, b = 0.0, c = 0.0, d = 0.0, |
| 175 var b = +( 1.1 + -2.2 + 0.33 + -4.4); | 176 e = 0.0, f = 0.0, g = 0.0, h = 0.0, i = 0.0; |
| 176 var c = +( 11.1 + -22.2 + 3.33 + -4.44); | 177 a = +( 0.1 + -0.2 + 0.3 + -0.4); |
| 177 var d = +( 111.1 + -222.2 + 33.33 + -4.444); | 178 b = +( 1.1 + -2.2 + 0.33 + -4.4); |
| 178 var e = +( 1111.1 + -2222.2 + 333.33 + -4.4444); | 179 c = +( 11.1 + -22.2 + 3.33 + -4.44); |
| 179 var f = +( 15555.5 + -26666.6 + 3777.77 + -4.88888); | 180 d = +( 111.1 + -222.2 + 33.33 + -4.444); |
| 180 var g = +( 115555.5 + -226666.6 + 33777.77 + -4.488888); | 181 e = +( 1111.1 + -2222.2 + 333.33 + -4.4444); |
| 181 var h = +( 1115555.5 + -2226666.6 + 333777.77 + -4.4488888); | 182 f = +( 15555.5 + -26666.6 + 3777.77 + -4.88888); |
| 182 var i = +(11115555.5 + -22226666.6 + 3333777.77 + -4.44488888); | 183 g = +( 115555.5 + -226666.6 + 33777.77 + -4.488888); |
| 184 h = +( 1115555.5 + -2226666.6 + 333777.77 + -4.4488888); | |
| 185 i = +(11115555.5 + -22226666.6 + 3333777.77 + -4.44488888); | |
| 183 return +(a + b + c + d + e + f + g + h + i); | 186 return +(a + b + c + d + e + f + g + h + i); |
| 184 } | 187 } |
| 185 return {main: main}; | 188 return {main: main}; |
| 186 } | 189 } |
| 187 | 190 |
| 188 RunAsmJsTest(ManyF64a, function(module) { | 191 RunAsmJsTest(ManyF64a, function(module) { |
| 189 assertEquals(-8640233.599945681, module.main()); | 192 assertEquals(-8640233.599945681, module.main()); |
| 190 }); | 193 }); |
| 191 | 194 |
| 192 function ManyF64b() { | 195 function ManyF64b() { |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 250 // TODO(bradnelson): fails validation of F32 literals somehow. | 253 // TODO(bradnelson): fails validation of F32 literals somehow. |
| 251 RunAsmJsTest(ManyF32a, function(module) { | 254 RunAsmJsTest(ManyF32a, function(module) { |
| 252 assertEquals(2.0999999917333043e-24, module.k1()); | 255 assertEquals(2.0999999917333043e-24, module.k1()); |
| 253 assertEquals(2.099999868734112e-19, module.k2()); | 256 assertEquals(2.099999868734112e-19, module.k2()); |
| 254 assertEquals(2.099999997029825e-14, module.k3()); | 257 assertEquals(2.099999997029825e-14, module.k3()); |
| 255 assertEquals(2.099999951710174e-9, module.k4()); | 258 assertEquals(2.099999951710174e-9, module.k4()); |
| 256 assertEquals(0.0002099999983329326, module.k5()); | 259 assertEquals(0.0002099999983329326, module.k5()); |
| 257 assertEquals(21.399999618530273, module.k6()); | 260 assertEquals(21.399999618530273, module.k6()); |
| 258 }); | 261 }); |
| 259 } | 262 } |
| OLD | NEW |