Changeset 190105 in webkit
- Timestamp:
- Sep 21, 2015 11:01:14 PM (9 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 2 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r190103 r190105 1 2015-09-21 Sukolsak Sakshuwong <sukolsak@gmail.com> 2 3 Implement the comma instruction in WebAssembly 4 https://bugs.webkit.org/show_bug.cgi?id=149425 5 6 Reviewed by Geoffrey Garen. 7 8 This patch implements the comma instruction in WebAssembly. The comma 9 instruction evaluates the left operand and then the right operand and 10 returns the value of the right operand. 11 12 * tests/stress/wasm-comma.js: Added. 13 (shouldBe): 14 * wasm/WASMFunctionCompiler.h: 15 (JSC::WASMFunctionCompiler::discard): 16 * wasm/WASMFunctionParser.cpp: 17 (JSC::WASMFunctionParser::parseExpressionI32): 18 (JSC::WASMFunctionParser::parseExpressionF32): 19 (JSC::WASMFunctionParser::parseExpressionF64): 20 (JSC::WASMFunctionParser::parseComma): 21 * wasm/WASMFunctionParser.h: 22 * wasm/WASMFunctionSyntaxChecker.h: 23 (JSC::WASMFunctionSyntaxChecker::discard): 24 1 25 2015-09-21 Filip Pizlo <fpizlo@apple.com> 2 26 -
trunk/Source/JavaScriptCore/wasm/WASMFunctionCompiler.h
r190062 r190105 1050 1050 void appendExpressionList(int&, int) { } 1051 1051 1052 void discard(int) 1053 { 1054 m_tempStackTop--; 1055 } 1056 1052 1057 void linkTarget(JumpTarget& target) 1053 1058 { -
trunk/Source/JavaScriptCore/wasm/WASMFunctionParser.cpp
r190080 r190105 40 40 #define READ_COMPACT_INT32_OR_FAIL(result, errorMessage) do { if (!m_reader.readCompactInt32(result)) FAIL_WITH_MESSAGE(errorMessage); } while (0) 41 41 #define READ_COMPACT_UINT32_OR_FAIL(result, errorMessage) do { if (!m_reader.readCompactUInt32(result)) FAIL_WITH_MESSAGE(errorMessage); } while (0) 42 #define READ_EXPRESSION_TYPE_OR_FAIL(result, errorMessage) do { if (!m_reader.readExpressionType(result)) FAIL_WITH_MESSAGE(errorMessage); } while (0) 42 43 #define READ_OP_STATEMENT_OR_FAIL(hasImmediate, op, opWithImmediate, immediate, errorMessage) do { if (!m_reader.readOpStatement(hasImmediate, op, opWithImmediate, immediate)) FAIL_WITH_MESSAGE(errorMessage); } while (0) 43 44 #define READ_OP_EXPRESSION_I32_OR_FAIL(hasImmediate, op, opWithImmediate, immediate, errorMessage) do { if (!m_reader.readOpExpressionI32(hasImmediate, op, opWithImmediate, immediate)) FAIL_WITH_MESSAGE(errorMessage); } while (0) … … 570 571 case WASMOpExpressionI32::CallImport: 571 572 return parseCallImport(context, WASMOpKind::Expression, WASMExpressionType::I32); 573 case WASMOpExpressionI32::Comma: 574 return parseComma(context, WASMExpressionType::I32); 572 575 case WASMOpExpressionI32::FromF32: 573 576 return parseConvertType(context, WASMExpressionType::F32, WASMExpressionType::I32, WASMTypeConversion::ConvertSigned); … … 620 623 return parseRelationalF64ExpressionI32(context, op); 621 624 case WASMOpExpressionI32::Conditional: 622 case WASMOpExpressionI32::Comma:623 625 case WASMOpExpressionI32::SMin: 624 626 case WASMOpExpressionI32::UMin: … … 756 758 case WASMOpExpressionF32::CallIndirect: 757 759 return parseCallIndirect(context, WASMOpKind::Expression, WASMExpressionType::F32); 760 case WASMOpExpressionF32::Comma: 761 return parseComma(context, WASMExpressionType::F32); 758 762 case WASMOpExpressionF32::FromS32: 759 763 return parseConvertType(context, WASMExpressionType::I32, WASMExpressionType::F32, WASMTypeConversion::ConvertSigned); … … 774 778 return parseBinaryExpressionF32(context, op); 775 779 case WASMOpExpressionF32::Conditional: 776 case WASMOpExpressionF32::Comma:777 780 // FIXME: Implement these instructions. 778 781 FAIL_WITH_MESSAGE("Unsupported instruction."); … … 870 873 case WASMOpExpressionF64::CallIndirect: 871 874 return parseCallIndirect(context, WASMOpKind::Expression, WASMExpressionType::F64); 875 case WASMOpExpressionF64::Comma: 876 return parseComma(context, WASMExpressionType::F64); 872 877 case WASMOpExpressionF64::FromS32: 873 878 return parseConvertType(context, WASMExpressionType::I32, WASMExpressionType::F64, WASMTypeConversion::ConvertSigned); … … 899 904 return parseBinaryExpressionF64(context, op); 900 905 case WASMOpExpressionF64::Conditional: 901 case WASMOpExpressionF64::Comma:902 906 case WASMOpExpressionF64::Min: 903 907 case WASMOpExpressionF64::Max: … … 1139 1143 1140 1144 template <class Context> 1145 ContextExpression WASMFunctionParser::parseComma(Context& context, WASMExpressionType expressionType) 1146 { 1147 WASMExpressionType leftExpressionType; 1148 READ_EXPRESSION_TYPE_OR_FAIL(leftExpressionType, "Cannot read the expression type."); 1149 ContextExpression leftExpression = parseExpression(context, leftExpressionType); 1150 PROPAGATE_ERROR(); 1151 if (leftExpressionType != WASMExpressionType::Void) 1152 context.discard(leftExpression); 1153 return parseExpression(context, expressionType); 1154 } 1155 1156 template <class Context> 1141 1157 ContextExpression WASMFunctionParser::parseConvertType(Context& context, WASMExpressionType fromType, WASMExpressionType toType, WASMTypeConversion conversion) 1142 1158 { -
trunk/Source/JavaScriptCore/wasm/WASMFunctionParser.h
r190080 r190105 120 120 template <class Context> ContextExpression parseCallIndirect(Context&, WASMOpKind, WASMExpressionType returnType); 121 121 template <class Context> ContextExpression parseCallImport(Context&, WASMOpKind, WASMExpressionType returnType); 122 template <class Context> ContextExpression parseComma(Context&, WASMExpressionType); 122 123 template <class Context> ContextExpression parseConvertType(Context&, WASMExpressionType fromType, WASMExpressionType toType, WASMTypeConversion); 123 124 -
trunk/Source/JavaScriptCore/wasm/WASMFunctionSyntaxChecker.h
r190062 r190105 215 215 void appendExpressionList(int&, int) { } 216 216 217 void discard(int) 218 { 219 m_tempStackTop--; 220 } 221 217 222 void linkTarget(const int&) { } 218 223 void jumpToTarget(const int&) { }
Note: See TracChangeset
for help on using the changeset viewer.