Changeset 189458 in webkit
- Timestamp:
- Sep 6, 2015 11:17:53 PM (9 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 3 added
- 7 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r189454 r189458 1 2015-09-06 Sukolsak Sakshuwong <sukolsak@gmail.com> 2 3 Implement the relational instructions in WebAssembly 4 https://bugs.webkit.org/show_bug.cgi?id=148838 5 6 Reviewed by Saam Barati. 7 8 This patch implements the relational instructions for 32-bit integers in 9 WebAssembly. 10 11 * tests/stress/wasm-arithmetic.js: 12 * tests/stress/wasm-locals.js: 13 * tests/stress/wasm-relational.js: Added. 14 (shouldBe): 15 * tests/stress/wasm/arithmetic.wasm: Renamed from Source/JavaScriptCore/tests/stress/wasm-arithmetic.wasm. 16 * tests/stress/wasm/locals.wasm: Renamed from Source/JavaScriptCore/tests/stress/wasm-locals.wasm. 17 * tests/stress/wasm/relational.wasm: Added. 18 * wasm/WASMFunctionCompiler.h: 19 (JSC::WASMFunctionCompiler::buildRelationalI32): 20 * wasm/WASMFunctionParser.cpp: 21 (JSC::WASMFunctionParser::parseExpressionI32): 22 (JSC::WASMFunctionParser::parseRelationalI32ExpressionI32): 23 * wasm/WASMFunctionParser.h: 24 * wasm/WASMFunctionSyntaxChecker.h: 25 (JSC::WASMFunctionSyntaxChecker::buildRelationalI32): 26 1 27 2015-09-06 Mark Lam <mark.lam@apple.com> 2 28 -
trunk/Source/JavaScriptCore/tests/stress/wasm-arithmetic.js
r189405 r189458 20 20 21 21 /* 22 wasm -arithmetic.wasm is generated by pack-asmjs <https://github.com/WebAssembly/polyfill-prototype-1> from the following script:22 wasm/arithmetic.wasm is generated by pack-asmjs <https://github.com/WebAssembly/polyfill-prototype-1> from the following script: 23 23 24 24 function asmModule(global, env, buffer) { … … 95 95 */ 96 96 97 var module = loadWebAssembly("wasm -arithmetic.wasm");97 var module = loadWebAssembly("wasm/arithmetic.wasm"); 98 98 99 99 shouldBe(module.addSubtract(), 42); -
trunk/Source/JavaScriptCore/tests/stress/wasm-locals.js
r189382 r189458 7 7 8 8 /* 9 wasm -locals.wasm is generated by pack-asmjs <https://github.com/WebAssembly/polyfill-prototype-1> from the following script:9 wasm/locals.wasm is generated by pack-asmjs <https://github.com/WebAssembly/polyfill-prototype-1> from the following script: 10 10 11 11 function asmModule(global, env, buffer) { … … 32 32 */ 33 33 34 var module = loadWebAssembly("wasm -locals.wasm");34 var module = loadWebAssembly("wasm/locals.wasm"); 35 35 36 36 shouldBe(module.sum(12, 30), 42); -
trunk/Source/JavaScriptCore/wasm/WASMFunctionCompiler.h
r189405 r189458 294 294 } 295 295 296 int buildRelationalI32(int, int, WASMOpExpressionI32 op) 297 { 298 load32(temporaryAddress(m_tempStackTop - 2), GPRInfo::regT0); 299 load32(temporaryAddress(m_tempStackTop - 1), GPRInfo::regT1); 300 RelationalCondition condition; 301 switch (op) { 302 case WASMOpExpressionI32::EqualI32: 303 condition = Equal; 304 break; 305 case WASMOpExpressionI32::NotEqualI32: 306 condition = NotEqual; 307 break; 308 case WASMOpExpressionI32::SLessThanI32: 309 condition = LessThan; 310 break; 311 case WASMOpExpressionI32::ULessThanI32: 312 condition = Below; 313 break; 314 case WASMOpExpressionI32::SLessThanOrEqualI32: 315 condition = LessThanOrEqual; 316 break; 317 case WASMOpExpressionI32::ULessThanOrEqualI32: 318 condition = BelowOrEqual; 319 break; 320 case WASMOpExpressionI32::SGreaterThanI32: 321 condition = GreaterThan; 322 break; 323 case WASMOpExpressionI32::UGreaterThanI32: 324 condition = Above; 325 break; 326 case WASMOpExpressionI32::SGreaterThanOrEqualI32: 327 condition = GreaterThanOrEqual; 328 break; 329 case WASMOpExpressionI32::UGreaterThanOrEqualI32: 330 condition = AboveOrEqual; 331 break; 332 default: 333 RELEASE_ASSERT_NOT_REACHED(); 334 } 335 compare32(condition, GPRInfo::regT0, GPRInfo::regT1, GPRInfo::regT0); 336 m_tempStackTop--; 337 store32(GPRInfo::regT0, temporaryAddress(m_tempStackTop - 1)); 338 return UNUSED; 339 } 340 296 341 private: 297 342 union StackSlot { -
trunk/Source/JavaScriptCore/wasm/WASMFunctionParser.cpp
r189405 r189458 438 438 case WASMOpExpressionI32::UMod: 439 439 return parseBinaryExpressionI32(context, op); 440 case WASMOpExpressionI32::EqualI32: 441 case WASMOpExpressionI32::NotEqualI32: 442 case WASMOpExpressionI32::SLessThanI32: 443 case WASMOpExpressionI32::ULessThanI32: 444 case WASMOpExpressionI32::SLessThanOrEqualI32: 445 case WASMOpExpressionI32::ULessThanOrEqualI32: 446 case WASMOpExpressionI32::SGreaterThanI32: 447 case WASMOpExpressionI32::UGreaterThanI32: 448 case WASMOpExpressionI32::SGreaterThanOrEqualI32: 449 case WASMOpExpressionI32::UGreaterThanOrEqualI32: 450 return parseRelationalI32ExpressionI32(context, op); 440 451 case WASMOpExpressionI32::GetGlobal: 441 452 case WASMOpExpressionI32::SetLocal: … … 475 486 case WASMOpExpressionI32::CountLeadingZeros: 476 487 case WASMOpExpressionI32::LogicalNot: 477 case WASMOpExpressionI32::EqualI32:478 488 case WASMOpExpressionI32::EqualF32: 479 489 case WASMOpExpressionI32::EqualF64: 480 case WASMOpExpressionI32::NotEqualI32:481 490 case WASMOpExpressionI32::NotEqualF32: 482 491 case WASMOpExpressionI32::NotEqualF64: 483 case WASMOpExpressionI32::SLessThanI32:484 case WASMOpExpressionI32::ULessThanI32:485 492 case WASMOpExpressionI32::LessThanF32: 486 493 case WASMOpExpressionI32::LessThanF64: 487 case WASMOpExpressionI32::SLessThanOrEqualI32:488 case WASMOpExpressionI32::ULessThanOrEqualI32:489 494 case WASMOpExpressionI32::LessThanOrEqualF32: 490 495 case WASMOpExpressionI32::LessThanOrEqualF64: 491 case WASMOpExpressionI32::SGreaterThanI32:492 case WASMOpExpressionI32::UGreaterThanI32:493 496 case WASMOpExpressionI32::GreaterThanF32: 494 497 case WASMOpExpressionI32::GreaterThanF64: 495 case WASMOpExpressionI32::SGreaterThanOrEqualI32:496 case WASMOpExpressionI32::UGreaterThanOrEqualI32:497 498 case WASMOpExpressionI32::GreaterThanOrEqualF32: 498 499 case WASMOpExpressionI32::GreaterThanOrEqualF64: … … 577 578 } 578 579 580 template <class Context> 581 ContextExpression WASMFunctionParser::parseRelationalI32ExpressionI32(Context& context, WASMOpExpressionI32 op) 582 { 583 ContextExpression left = parseExpressionI32(context); 584 PROPAGATE_ERROR(); 585 ContextExpression right = parseExpressionI32(context); 586 PROPAGATE_ERROR(); 587 return context.buildRelationalI32(left, right, op); 588 } 589 579 590 } // namespace JSC 580 591 -
trunk/Source/JavaScriptCore/wasm/WASMFunctionParser.h
r189405 r189458 86 86 template <class Context> ContextExpression parseGetLocalExpressionI32(Context&); 87 87 template <class Context> ContextExpression parseBinaryExpressionI32(Context&, WASMOpExpressionI32); 88 template <class Context> ContextExpression parseRelationalI32ExpressionI32(Context&, WASMOpExpressionI32); 88 89 89 90 JSWASMModule* m_module; -
trunk/Source/JavaScriptCore/wasm/WASMFunctionSyntaxChecker.h
r189382 r189458 79 79 } 80 80 81 int buildRelationalI32(int, int, WASMOpExpressionI32) 82 { 83 m_tempStackTop--; 84 return UNUSED; 85 } 86 81 87 unsigned stackHeight() 82 88 {
Note: See TracChangeset
for help on using the changeset viewer.