- 25 Apr, 2017 1 commit
-
-
Clemens Hammacher authored
Instead of dynamically tracking the block nesting, precompute the information statically. The interpreter was already using a side table to store the pc diff for each break, conditional break and others. The information needed to adjust the stack was tracked dynamically, however. This CL also precomputes this information, as it is statically known. Instead of just storing the pc diff in the side table, we now store the pc diff, the stack height diff and the arity of the target block. Local measurements show speedups of 5-6% on average, sometimes >10%. R=ahaas@chromium.org BUG=v8:5822 Change-Id: I986cfa989aabe1488f2ff79ddbfbb28aeffe1452 Reviewed-on: https://chromium-review.googlesource.com/485482Reviewed-by:
Andreas Haas <ahaas@chromium.org> Commit-Queue: Clemens Hammacher <clemensh@chromium.org> Cr-Commit-Position: refs/heads/master@{#44837}
-
- 24 Apr, 2017 1 commit
-
-
bbudge authored
- Adds new F32x4AddHoriz, I32x4AddHoriz, etc. to WASM opcodes. - Implements them for ARM. LOG=N BUG=v8:6020 Review-Url: https://codereview.chromium.org/2804883008 Cr-Commit-Position: refs/heads/master@{#44812}
-
- 21 Apr, 2017 1 commit
-
-
bbudge authored
These can be synthesized from existing operations and scheduled for better performance than if we have to generate blocks of instructions that take many cycles to complete. - Remove F32x4RecipRefine, F32x4RecipSqrtRefine. Clients are better off synthesizing these from splats, multiplies and adds. - Remove F32x4Div, F32x4Sqrt, F32x4MinNum, F32x4MaxNum. Clients are better off synthesizing these or using the reciprocal approximations, possibly with a refinement step. LOG=N BUG=v8:6020 Review-Url: https://codereview.chromium.org/2827143002 Cr-Commit-Position: refs/heads/master@{#44784}
-
- 19 Apr, 2017 1 commit
-
-
bbudge authored
- Adds unary Reverse shuffles (swizzles): S32x2Reverse, S16x4Reverse, S16x2Reverse, S8x8Reverse, S8x4Reverse, S8x2Reverse. Reversals are done within the sub-vectors that prefix the opcode name, e.g. S8x2 reverses the 8 consecutive pairs in an S8x16 vector. - Adds binary Zip (interleave) left and right half-shuffles to return a single vector: S32x4ZipLeft, S32x4ZipRightS16x8ZipLeft, S16x8ZipRight, S8x16ZipLeft, S8x16ZipRight. - Adds binary Unzip (de-interleave) left and right half shuffles to return a single vector: S32x4UnzipLeft, S32x4UnzipRight, S16x8UnzipLeft, S16x8UnzipRight, S8x16UnzipLeft, S8x16UnzipRight. - Adds binary Transpose left and right half shuffles to return a single vector: S32x4TransposeLeft, S32x4TransposeRight, S16x8TransposeLeft, S16xTransposeRight, S8x16TransposeLeft, S8x16TransposeRight. - Adds binary Concat (concatenate) byte shuffle: S8x16Concat #bytes to paste two vectors together. LOG=N BUG=v8:6020 Review-Url: https://codereview.chromium.org/2801183002 Cr-Commit-Position: refs/heads/master@{#44734}
-
- 10 Apr, 2017 1 commit
-
-
bbudge authored
- Adds WASM opcodes I32x4SConvertI16x8Low, I32x4SConvertI16x8High, I32x4UConvertI16x8Low, I32x4UConvertI16x8High, which unpack half of an I16x8 register into a whole I32x4 register, with signed or unsigned extension. Having separate Low/High opcodes works around the difficulty of having multiple output registers, which would be necessary if we unpacked the entire I16x8 register. - Adds WASM opcodes I16x8SConvertI8x16Low, I16x8SConvertI8x16High, I16x8UConvertI8x16Low, I16x8UConvertI8x16High, similarly to above. - Adds WASM opcodes I16x8SConvertI32x4, I16x8UConvertI32x4, I8x16SConvert16x8, I8x16UConvertI16x8, which pack two source registers into a single destination register with signed or unsigned saturation. These could have been separated into half operations, but this is simpler to implement with SSE, AVX, and is acceptable on ARM. It also avoids adding operations that only modify half of their destination register. - Implements these opcodes for ARM. LOG=N BUG=v8:6020 Review-Url: https://codereview.chromium.org/2800523002 Cr-Commit-Position: refs/heads/master@{#44541}
-
- 16 Mar, 2017 1 commit
-
-
Clemens Hammacher authored
This introduces iterators for the parameters and return types of a signature. This required extending the constructor of iterator_range for perfect forwarding. I also moved the HasJSCompatibleSignature to a header file in order to reuse it from the interpreter. R=ahaas@chromium.org, titzer@chromium.org Change-Id: Ie77f87ef87fdfd3138b2106640ac7c481cf247e6 Reviewed-on: https://chromium-review.googlesource.com/455777 Commit-Queue: Clemens Hammacher <clemensh@chromium.org> Reviewed-by:
Andreas Haas <ahaas@chromium.org> Reviewed-by:
Ben Titzer <titzer@chromium.org> Cr-Commit-Position: refs/heads/master@{#43854}
-
- 15 Mar, 2017 1 commit
-
-
bbudge authored
- Adds new load/store opcodes (0xc0, 0xc1) for S128 type. - Implements these for ARM. - Enables more WASM SIMD tests, and adds new LoadStoreLoad test. LOG=N BUG=v8:6020 Review-Url: https://codereview.chromium.org/2745853002 Cr-Commit-Position: refs/heads/master@{#43841}
-
- 08 Mar, 2017 1 commit
-
-
bbudge authored
- Implements Float32x4 Mul, Min, Max for ARM. - Implements Float32x4 relational ops for ARM. - Implements reciprocal, reciprocal square root estimate/refinement ops for ARM. - Reorganizes tests to eliminate need for specialized float ref fns in tests. - Rephrases Gt, Ge in terms of Lt, Le, and eliminates the redundant machine operators. - Renames test-run-wasm-simd test names to match instructions. LOG=N BUG=v8:6020 Review-Url: https://codereview.chromium.org/2729943002 Cr-Commit-Position: refs/heads/master@{#43658}
-
- 02 Mar, 2017 1 commit
-
-
bbudge authored
- Implements Select instructions using a single ARM vbsl instruction. - Renames boolean machine operators to match renamed S1xN machine types. - Implements S1xN vector logical ops, AND, OR, XOR, NOT for ARM. - Implements S1xN AnyTrue, AllTrue ops for ARM. - Eliminates unused SIMD op categories in opcodes.h. LOG=N BUG=v8:6020 Review-Url: https://codereview.chromium.org/2711863002 Cr-Commit-Position: refs/heads/master@{#43556}
-
- 13 Feb, 2017 1 commit
-
-
bbudge authored
- Renames select, swizzle, and shuffle to be consistent with the S128 and existing S32x4 ops, and reflect that these aren't arithmetic. e.g. I16x8Swizzle -> S16x8Swizzle. - Implements S16x8 and S8x16 Select operations and tests. - Implements S128And, Or, Xor, Not operations and tests. - Implements Swizzle for 32x4 formats. - Refactors test macros that generate SIMD code. TEST=cctest/test-run-wasm-simd/* LOG=N BUG=v8:4124 Review-Url: https://codereview.chromium.org/2683713003 Cr-Commit-Position: refs/heads/master@{#43168}
-
- 20 Jan, 2017 1 commit
-
-
titzer authored
R=clemensh@chromium.org BUG= Review-Url: https://codereview.chromium.org/2644323002 Cr-Commit-Position: refs/heads/master@{#42557}
-
- 21 Dec, 2016 1 commit
-
-
titzer authored
This is more renaming work to comply with the naming in the public design repository. E.g. types are called "value types" and we no longer refer to ASTs. R=clemensh@chromium.org BUG= Review-Url: https://codereview.chromium.org/2594993002 Cr-Commit-Position: refs/heads/master@{#41891}
-
- 15 Dec, 2016 2 commits
-
-
ahaas authored
Original commit message: [wasm] Introduce the TrapIf and TrapUnless operators to generate trap code. Some instructions in WebAssembly trap for some inputs, which means that the execution is terminated and (at least at the moment) a JavaScript exception is thrown. Examples for traps are out-of-bounds memory accesses, or integer divisions by zero. Without the TrapIf and TrapUnless operators trap check in WebAssembly introduces 5 TurboFan nodes (branch, if_true, if_false, trap-reason constant, trap-position constant), in addition to the trap condition itself. Additionally, each WebAssembly function has four TurboFan nodes (merge, effect_phi, 2 phis) whose number of inputs is linear to the number of trap checks in the function. Especially for functions with high numbers of trap checks we observe a significant slowdown in compilation time, down to 0.22 MiB/s in the sqlite benchmark instead of the average of 3 MiB/s in other benchmarks. By introducing a TrapIf common operator only a single node is necessary per trap check, in addition to the trap condition. Also the nodes which are shared between trap checks (merge, effect_phi, 2 phis) would disappear. First measurements suggest a speedup of 30-50% on average. This CL only implements TrapIf and TrapUnless on x64. The implementation is also hidden behind the --wasm-trap-if flag. Please take a special look at how the source position is transfered from the instruction selector to the code generator, and at the context that is used for the runtime call. R=titzer@chromium.org Review-Url: https://codereview.chromium.org/2571813002 Cr-Commit-Position: refs/heads/master@{#41735}
-
ahaas authored
Some instructions in WebAssembly trap for some inputs, which means that the execution is terminated and (at least at the moment) a JavaScript exception is thrown. Examples for traps are out-of-bounds memory accesses, or integer divisions by zero. Without the TrapIf and TrapUnless operators trap check in WebAssembly introduces 5 TurboFan nodes (branch, if_true, if_false, trap-reason constant, trap-position constant), in addition to the trap condition itself. Additionally, each WebAssembly function has four TurboFan nodes (merge, effect_phi, 2 phis) whose number of inputs is linear to the number of trap checks in the function. Especially for functions with high numbers of trap checks we observe a significant slowdown in compilation time, down to 0.22 MiB/s in the sqlite benchmark instead of the average of 3 MiB/s in other benchmarks. By introducing a TrapIf common operator only a single node is necessary per trap check, in addition to the trap condition. Also the nodes which are shared between trap checks (merge, effect_phi, 2 phis) would disappear. First measurements suggest a speedup of 30-50% on average. This CL only implements TrapIf and TrapUnless on x64. The implementation is also hidden behind the --wasm-trap-if flag. Please take a special look at how the source position is transfered from the instruction selector to the code generator, and at the context that is used for the runtime call. R=titzer@chromium.org Review-Url: https://codereview.chromium.org/2562393002 Cr-Commit-Position: refs/heads/master@{#41720}
-
- 26 Oct, 2016 1 commit
-
-
aseemgarg authored
R=titzer@chromium.org,binji@chromium.org BUG=v8:4614 Review-Url: https://codereview.chromium.org/2423883003 Cr-Commit-Position: refs/heads/master@{#40606}
-
- 12 Sep, 2016 1 commit
-
-
ahaas authored
With this CL the AstDecoder produces an error if it encounters a grow_memory instruction in an asmjs module. Additionally asmjs instructions are not allowed anymore in wasm modules. BUG=chromium:644674 R=titzer@chromium.org Review-Url: https://codereview.chromium.org/2324733002 Cr-Commit-Position: refs/heads/master@{#39339}
-
- 08 Sep, 2016 1 commit
-
-
aseemgarg authored
BUG=v8:4124 TEST:test-run-wasm-simd R=titzer@chromium.org,bradnelson@chromium.org,gdeepti@chromium.org Review-Url: https://codereview.chromium.org/2300753005 Cr-Commit-Position: refs/heads/master@{#39288}
-
- 02 Sep, 2016 1 commit
-
-
gdeepti authored
Using --trace-wasm-decoder prints unknowns for prefix opcodes, example: @3 #01:Block | env = 0x5547c10, state = R, reason = block:start, control = #0:Start @4 #14:GetLocal | i@4:GetLocal[0] @6 #e5:Unknown | s@6:Unknown @8 #15:SetLocal | s@8:SetLocal[1] @10 #14:GetLocal | s@8:SetLocal[1] i@10:GetLocal[0] @12 #14:GetLocal | s@8:SetLocal[1] i@10:GetLocal[0] s@12:GetLocal[1] @14 #cb:I8Const | s@8:SetLocal[1] i@10:GetLocal[0] s@12:GetLocal[1] i@14:I8Const @16 #e5:Unknown | s@8:SetLocal[1] i@10:GetLocal[0] i@16:Unknown Fixed to print: @3 #01:Block | env = 0x45cac10, state = R, reason = block:start, control = #0:Start @4 #14:GetLocal | i@4:GetLocal[0] @6 #e5 #1b:I32x4Splat | s@6:I32x4Splat @8 #15:SetLocal | s@8:SetLocal[1] @10 #14:GetLocal | s@8:SetLocal[1] i@10:GetLocal[0] @12 #14:GetLocal | s@8:SetLocal[1] i@10:GetLocal[0] s@12:GetLocal[1] @14 #cb:I8Const | s@8:SetLocal[1] i@10:GetLocal[0] s@12:GetLocal[1] i@14:I8Const @16 #e5 #1c:I32x4ExtractLane | s@8:SetLocal[1] i@10:GetLocal[0] i@16:I32x4ExtractLane R=ahaas@chromium.org, bbudge@chromium.org Review-Url: https://codereview.chromium.org/2307733002 Cr-Commit-Position: refs/heads/master@{#39142}
-
- 16 Jul, 2016 1 commit
-
-
gdeepti authored
- Add Simd128 type to Wasm AST types - Decode SIMD prefix, wasm opcodes correctly - Add a pass that converts SIMD machine ops to runtime calls - Sample opcodes Int32x4Splat, Int32x4ExtractLane and test LOG=N BUG=v8:4124 R=bradnelson@chromium.org, bbudge@chromium.org, titzer@chromium.org Committed: https://crrev.com/73df92fc2fdbbfadc17e8ab4e58ec56ae2b3d91a Review-Url: https://codereview.chromium.org/1991143002 Cr-Original-Commit-Position: refs/heads/master@{#37789} Cr-Commit-Position: refs/heads/master@{#37807}
-
- 15 Jul, 2016 2 commits
-
-
machenbach authored
Revert of Convert SIMD wasm ops to runtime function calls (patchset #17 id:320001 of https://codereview.chromium.org/1991143002/ ) Reason for revert: [Sheriff] Violates msan and tsan: https://build.chromium.org/p/client.v8/builders/V8%20Linux%20-%20arm64%20-%20sim%20-%20MSAN/builds/9663 https://build.chromium.org/p/client.v8/builders/V8%20Linux64%20TSAN/builds/10670 Original issue's description: > Convert SIMD machine ops to runtime function calls > - Add Simd128 type to Wasm AST types > - Add a pass that converts SIMD machine ops to runtime calls > - Sample opcodes Int32x4Splat, Int32x4ExtractLane and test > - Separate out generic SIMD Machine ops as these cannot be > handled by runtime functions just yet. > > LOG=N > BUG=v8:4124 > > R=bradnelson@chromium.org, bbudge@chromium.org, titzer@chromium.org > > Committed: https://crrev.com/73df92fc2fdbbfadc17e8ab4e58ec56ae2b3d91a > Cr-Commit-Position: refs/heads/master@{#37789} TBR=bbudge@chromium.org,bradnelson@chromium.org,titzer@chromium.org,gdeepti@chromium.org # Skipping CQ checks because original CL landed less than 1 days ago. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=v8:4124 Review-Url: https://codereview.chromium.org/2154723002 Cr-Commit-Position: refs/heads/master@{#37790}
-
gdeepti authored
- Add Simd128 type to Wasm AST types - Add a pass that converts SIMD machine ops to runtime calls - Sample opcodes Int32x4Splat, Int32x4ExtractLane and test - Separate out generic SIMD Machine ops as these cannot be handled by runtime functions just yet. LOG=N BUG=v8:4124 R=bradnelson@chromium.org, bbudge@chromium.org, titzer@chromium.org Review-Url: https://codereview.chromium.org/1991143002 Cr-Commit-Position: refs/heads/master@{#37789}
-
- 28 Jun, 2016 1 commit
-
-
gdeepti authored
- GrowMemory runtime function, tests added to checks if memory can be grown and relocation information is updated correctly R=titzer@chromium.org, bradnelson@chromium.org Review-Url: https://codereview.chromium.org/2051043002 Cr-Commit-Position: refs/heads/master@{#37338}
-
- 23 Jun, 2016 1 commit
-
-
ritesht authored
Cleaning up the code to replace all instances of "i++" in for loops with the more efficient "++i". The latter foregoes an extra intermediate variable. BUG=v8:5044 Review-Url: https://codereview.chromium.org/2094573002 Cr-Commit-Position: refs/heads/master@{#37230}
-
- 12 May, 2016 1 commit
-
-
ahaas authored
With this CL it is possible to compile a wasm module with multiple threads in parallel. Parallel compilation works as follows: 1) The main thread allocates a compilation unit for each wasm function. 2) The main thread spawns WasmCompilationTasks which run on the background threads. 3.a) The background threads and the main thread pick one compilation unit at a time and execute the parallel phase of the compilation unit. After finishing the execution of the parallel phase, the compilation unit is stored in a result queue. 3.b) If the result queue contains a compilation unit, the main thread dequeues it and finishes its compilation. 4) After the execution of the parallel phase of all compilation units has started, the main thread waits for all WasmCompilationTasks to finish. 5) The main thread finalizes the compilation of the module. I'm going to add some additional tests before committing this CL. R=titzer@chromium.org, bmeurer@chromium.org, mlippautz@chromium.org, mstarzinger@chromium.org Committed: https://crrev.com/17215438659d8ff2d7d55f95226bf8a1477ccd79 Cr-Commit-Position: refs/heads/master@{#36178} Review-Url: https://codereview.chromium.org/1961973002 Cr-Commit-Position: refs/heads/master@{#36207}
-
- 11 May, 2016 1 commit
-
-
titzer authored
R=ahaas@chromium.org,mstarzinger@chromium.org BUG= Review-Url: https://codereview.chromium.org/1970543003 Cr-Commit-Position: refs/heads/master@{#36174}
-
- 03 May, 2016 1 commit
-
-
ahaas authored
Additionally I removed some stale comments. R=titzer@chromium.org Review-Url: https://codereview.chromium.org/1941323002 Cr-Commit-Position: refs/heads/master@{#35976}
-
- 29 Apr, 2016 1 commit
-
-
titzer authored
[wasm] Binary 11: br_table takes a value. [wasm] Binary 11: Add implicit blocks to if arms. [wasm] Binary 11: Add arities to call, return, and breaks [wasm] Binary 11: Add experimental version. This CL changes the encoder, decoder, and tests to use a postorder encoding of the AST, which is more efficient in decode time and space. R=bradnelson@chromium.org,rossberg@chromium.org,binji@chromium.org BUG=chromium:575167 LOG=Y Review-Url: https://codereview.chromium.org/1830663002 Cr-Commit-Position: refs/heads/master@{#35896}
-
- 19 Apr, 2016 1 commit
-
-
clemensh authored
This prepares a patch to throw actual errors instead of just strings on wasm traps. In order to accomplish this, the messages need to be known to the runtime, as the generated code will just pass the message id. R=mstarzinger@chromium.org, titzer@chromium.org BUG= Review URL: https://codereview.chromium.org/1880493002 Cr-Commit-Position: refs/heads/master@{#35628}
-
- 03 Mar, 2016 2 commits
-
-
weiliang.lin authored
BUG= Review URL: https://codereview.chromium.org/1755013003 Cr-Commit-Position: refs/heads/master@{#34455}
-
bradnelson authored
BUG= https://code.google.com/p/v8/issues/detail?id=4203 TEST=mjsunit/asm-wasm R=aseemgarg@chromium.org,titzer@chromium.org,yangguo@chromium.org LOG=N Review URL: https://codereview.chromium.org/1729833002 Cr-Commit-Position: refs/heads/master@{#34452}
-
- 20 Jan, 2016 1 commit
-
-
titzer authored
R=ahaas@chromium.org,bradnelson@chromium.org LOG=Y BUG=chromium:575167 Review URL: https://codereview.chromium.org/1608743006 Cr-Commit-Position: refs/heads/master@{#33411}
-
- 17 Dec, 2015 1 commit
-
-
bradnelson authored
R=ahaas@chromium.org BUG= Review URL: https://codereview.chromium.org/1536663002 Cr-Commit-Position: refs/heads/master@{#32952}
-
- 11 Dec, 2015 2 commits
-
-
ahaas authored
R=titzer@chromium.org Review URL: https://codereview.chromium.org/1514913003 Cr-Commit-Position: refs/heads/master@{#32807}
-
titzer authored
As discussed in person, this adds the code from v8-native-prototype into V8 proper, guarded by GYP flags that do not build the code by default. Passing wasm=on to 'make' or setting v8_wasm as a GYP flag activates building of this code. An additional header file is added to and exported from the compiler directory, src/compiler/wasm-compiler.h. This exposes a limited interface with opaque Node and Graph types to the decoder to build TF graphs, as well as functions to compile WASM graphs. The mjsunit tests added are blacklisted because they fail without the WASM object exposed to JS, which is also disabled by the build config option. This corresponds closely to https://github.com/WebAssembly/v8-native-prototype/commit/5981e06ebc9b1e578831d03100f17ebb77970ee0, with some formatting fixes and moving some files into src/compiler. R=mstarzinger@chromium.org, bradnelson@chromium.org BUG= Review URL: https://codereview.chromium.org/1504713014 Cr-Commit-Position: refs/heads/master@{#32794}
-