Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(58)

Unified Diff: src/wasm/asm-wasm-builder.cc

Issue 1968943002: [wasm] Introduce custom asm.js bytecodes for loads and stores. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@wasm_asmjs_convert
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/wasm/asm-wasm-builder.cc
diff --git a/src/wasm/asm-wasm-builder.cc b/src/wasm/asm-wasm-builder.cc
index d517a166ba5f64735259302ebe46e339b64368cf..7a0ae05a12ecb3a3f3207980610f1fa71f06cbcd 100644
--- a/src/wasm/asm-wasm-builder.cc
+++ b/src/wasm/asm-wasm-builder.cc
@@ -737,7 +737,7 @@ class AsmWasmBuilderImpl : public AstVisitor {
RECURSE(Visit(value));
}
- void EmitAssignment(Assignment* expr, MachineType mtype) {
+ void EmitAssignment(Assignment* expr, MachineType type) {
// Match the left hand side of the assignment.
VariableProxy* target_var = expr->target()->AsVariableProxy();
if (target_var != nullptr) {
@@ -762,8 +762,27 @@ class AsmWasmBuilderImpl : public AstVisitor {
cache_.kFloat32Array)) {
current_function_builder_->Emit(kExprF32ConvertF64);
}
- current_function_builder_->EmitWithU8U8(
- WasmOpcodes::LoadStoreOpcodeOf(mtype, true), 0, 0);
+ WasmOpcode opcode;
+ if (type == MachineType::Int8()) {
+ opcode = kExprI32AsmjsStoreMem8;
+ } else if (type == MachineType::Uint8()) {
+ opcode = kExprI32AsmjsStoreMem8;
+ } else if (type == MachineType::Int16()) {
+ opcode = kExprI32AsmjsStoreMem16;
+ } else if (type == MachineType::Uint16()) {
+ opcode = kExprI32AsmjsStoreMem16;
+ } else if (type == MachineType::Int32()) {
+ opcode = kExprI32AsmjsStoreMem;
+ } else if (type == MachineType::Uint32()) {
+ opcode = kExprI32AsmjsStoreMem;
+ } else if (type == MachineType::Float32()) {
+ opcode = kExprF32AsmjsStoreMem;
+ } else if (type == MachineType::Float64()) {
+ opcode = kExprF64AsmjsStoreMem;
+ } else {
+ UNREACHABLE();
+ }
+ current_function_builder_->Emit(opcode);
}
if (target_var == nullptr && target_prop == nullptr) {
@@ -941,10 +960,30 @@ class AsmWasmBuilderImpl : public AstVisitor {
}
void VisitProperty(Property* expr) {
- MachineType mtype;
- VisitPropertyAndEmitIndex(expr, &mtype);
- current_function_builder_->EmitWithU8U8(
- WasmOpcodes::LoadStoreOpcodeOf(mtype, false), 0, 0);
+ MachineType type;
+ VisitPropertyAndEmitIndex(expr, &type);
+ WasmOpcode opcode;
+ if (type == MachineType::Int8()) {
+ opcode = kExprI32AsmjsLoadMem8S;
+ } else if (type == MachineType::Uint8()) {
+ opcode = kExprI32AsmjsLoadMem8U;
+ } else if (type == MachineType::Int16()) {
+ opcode = kExprI32AsmjsLoadMem16S;
+ } else if (type == MachineType::Uint16()) {
+ opcode = kExprI32AsmjsLoadMem16U;
+ } else if (type == MachineType::Int32()) {
+ opcode = kExprI32AsmjsLoadMem;
+ } else if (type == MachineType::Uint32()) {
+ opcode = kExprI32AsmjsLoadMem;
+ } else if (type == MachineType::Float32()) {
+ opcode = kExprF32AsmjsLoadMem;
+ } else if (type == MachineType::Float64()) {
+ opcode = kExprF64AsmjsLoadMem;
+ } else {
+ UNREACHABLE();
+ }
+
+ current_function_builder_->Emit(opcode);
}
bool VisitStdlibFunction(Call* call, VariableProxy* expr) {

Powered by Google App Engine
This is Rietveld 408576698