Changeset 189844 in webkit
- Timestamp:
- Sep 15, 2015 8:52:20 PM (9 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r189841 r189844 1 2015-09-15 Sukolsak Sakshuwong <sukolsak@gmail.com> 2 3 Fix asm.js errors in WebAssembly tests 4 https://bugs.webkit.org/show_bug.cgi?id=149203 5 6 Reviewed by Geoffrey Garen. 7 8 Our WebAssembly implementation uses asm.js for testing. Using Firefox to 9 parse asm.js reveals many errors that are not caught by pack-asmjs. For 10 example, 11 - asm.js does not allow the use of the multiplication operator (*) to 12 multiply two integers, because the result can be so large that some 13 lower bits of precision are lost. Math.imul is used instead. 14 - an int variable must be coerced to either signed (via x|0) or unsigned 15 (via x>>>0) before it's returned. 16 17 * tests/stress/wasm-arithmetic-int32.js: 18 * tests/stress/wasm-calls.js: 19 * tests/stress/wasm-control-flow.js: 20 * tests/stress/wasm-globals.js: 21 * tests/stress/wasm-locals.js: 22 * tests/stress/wasm-relational.js: 23 * tests/stress/wasm/control-flow.wasm: 24 1 25 2015-09-15 Ryosuke Niwa <rniwa@webkit.org> 2 26 -
trunk/Source/JavaScriptCore/tests/stress/wasm-arithmetic-int32.js
r189532 r189844 26 26 27 27 var clz32 = global.Math.clz32; 28 var imul = global.Math.imul; 28 29 var abs = global.Math.abs; 29 30 30 31 function negate(x) { 31 32 x = x | 0; 32 return -x;33 return (-x) | 0; 33 34 } 34 35 … … 48 49 x = x | 0; 49 50 y = y | 0; 50 return (x *y) | 0;51 return imul(x, y) | 0; 51 52 } 52 53 … … 113 114 x = x | 0; 114 115 y = y | 0; 115 return x >>> y;116 return (x >>> y) | 0; 116 117 } 117 118 … … 128 129 function absolute(x) { 129 130 x = x | 0; 130 return abs(x | 0) ;131 return abs(x | 0) | 0; 131 132 } 132 133 -
trunk/Source/JavaScriptCore/tests/stress/wasm-calls.js
r189822 r189844 12 12 "use asm"; 13 13 14 var imul = global.Math.imul; 14 15 var sum = imports.sum; 15 16 var max = imports.max; … … 25 26 x = x | 0; 26 27 y = y | 0; 27 if ( y== 0)28 return x ;29 return gcd(y, ( x | 0) % (y | 0)) | 0;28 if ((y | 0) == 0) 29 return x | 0; 30 return gcd(y, ((x | 0) % (y | 0)) | 0) | 0; 30 31 } 31 32 … … 33 34 x = x | 0; 34 35 y = y | 0; 35 return ( ((x * y) | 0) / (gcd(x, y) | 0)) | 0;36 return (imul(x, y) / (gcd(x, y) | 0)) | 0; 36 37 } 37 38 … … 39 40 x = x | 0; 40 41 y = y | 0; 41 return sum(x , y) | 0;42 return sum(x | 0, y | 0) | 0; 42 43 } 43 44 … … 45 46 x = x | 0; 46 47 y = y | 0; 47 return max(x , y) | 0;48 return max(x | 0, y | 0) | 0; 48 49 } 49 50 -
trunk/Source/JavaScriptCore/tests/stress/wasm-control-flow.js
r189599 r189844 34 34 else 35 35 return 2; 36 return 0; 36 37 } 37 38 … … 42 43 else 43 44 return 2; 45 return 0; 44 46 } 45 47 … … 47 49 var x = 0, y = 0; 48 50 x = 1; 49 if ( x== 0) {50 if ( y== 0)51 if ((x | 0) == 0) { 52 if ((y | 0) == 0) 51 53 return 1; 52 54 else 53 55 return 2; 54 56 } else { 55 if ( y== 0)57 if ((y | 0) == 0) 56 58 return 3; 57 59 else 58 60 return 4; 59 61 } 62 return 0; 60 63 } 61 64 … … 66 69 i = (i + 1) | 0; 67 70 } 68 return x ;71 return x | 0; 69 72 } 70 73 … … 72 75 var x = 0, i = 0; 73 76 while (1) { 74 if ( i== 2)77 if ((i | 0) == 2) 75 78 break; 76 79 x = (x + 1) | 0; 77 80 i = (i + 1) | 0; 78 81 } 79 return x ;82 return x | 0; 80 83 } 81 84 … … 83 86 var x = 0, i = 0; 84 87 while ((i | 0) < 5) { 85 if ( i== 2) {88 if ((i | 0) == 2) { 86 89 i = 3; 87 90 continue; … … 90 93 i = (i + 1) | 0; 91 94 } 92 return x ;95 return x | 0; 93 96 } 94 97 … … 103 106 i = (i + 1) | 0; 104 107 } 105 return x ;108 return x | 0; 106 109 } 107 110 … … 112 115 i = (i + 1) | 0; 113 116 } while ((i | 0) < 0); 114 return x ;117 return x | 0; 115 118 } 116 119 … … 118 121 var x = 0, i = 0; 119 122 do { 120 if ( i== 2)123 if ((i | 0) == 2) 121 124 break; 122 125 x = (x + 1) | 0; 123 126 i = (i + 1) | 0; 124 127 } while (1); 125 return x ;128 return x | 0; 126 129 } 127 130 … … 129 132 var x = 0, i = 0; 130 133 do { 131 if ( i== 2) {134 if ((i | 0) == 2) { 132 135 i = 3; 133 136 continue; … … 136 139 i = (i + 1) | 0; 137 140 } while ((i | 0) < 5); 138 return x ;141 return x | 0; 139 142 } 140 143 … … 146 149 x = 2; 147 150 } while (0); 148 return x ;151 return x | 0; 149 152 } 150 153 … … 152 155 var x = 0; 153 156 label: do { 154 if ( x== 1)157 if ((x | 0) == 1) 155 158 break label; 156 159 x = 1; … … 158 161 x = 2; 159 162 } while (0); 160 return x ;163 return x | 0; 161 164 } 162 165 … … 172 175 x = 4; 173 176 } while (0); 174 return x ;177 return x | 0; 175 178 } 176 179 … … 186 189 x = 4; 187 190 } while (0); 188 return x ;191 return x | 0; 189 192 } 190 193 … … 196 199 while ((j | 0) < 2) { 197 200 x = (x + 1) | 0; 198 if ( x== 8)201 if ((x | 0) == 8) 199 202 break label; 200 203 j = (j + 1) | 0; … … 202 205 i = (i + 1) | 0; 203 206 } 204 return x ;207 return x | 0; 205 208 } 206 209 … … 208 211 x = x | 0; 209 212 var y = 0; 210 switch (x ) {213 switch (x | 0) { 211 214 case 0: 212 215 y = 1; … … 219 222 break; 220 223 } 221 return y ;224 return y | 0; 222 225 } 223 226 … … 225 228 x = x | 0; 226 229 var y = 0; 227 switch (x ) {230 switch (x | 0) { 228 231 case 3: 229 232 y = (y + 1000) | 0; … … 235 238 y = (y + 1) | 0; 236 239 } 237 return y ;240 return y | 0; 238 241 } 239 242 -
trunk/Source/JavaScriptCore/tests/stress/wasm-globals.js
r189624 r189844 18 18 19 19 function getX() { 20 return x ;20 return x | 0; 21 21 } 22 22 -
trunk/Source/JavaScriptCore/tests/stress/wasm-locals.js
r189458 r189844 17 17 var result = 0; 18 18 result = (x + y) | 0; 19 return result ;19 return result | 0; 20 20 } 21 21 -
trunk/Source/JavaScriptCore/tests/stress/wasm-relational.js
r189645 r189844 12 12 "use asm"; 13 13 14 var fround = global.Math.fround; 15 14 16 function equal(x, y) { 15 17 x = x | 0; 16 18 y = y | 0; 17 return ( x == y) | 0;19 return ((x | 0) == (y | 0)) | 0; 18 20 } 19 21 … … 21 23 x = x | 0; 22 24 y = y | 0; 23 return ( x != y) | 0;25 return ((x | 0) != (y | 0)) | 0; 24 26 } 25 27
Note: See TracChangeset
for help on using the changeset viewer.