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

Side by Side Diff: src/compiler/wasm-compiler.cc

Issue 2776753004: [wasm] Make Opcode names consistent across architectures, implementations (Closed)
Patch Set: Fix Saturates Created 3 years, 8 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 unified diff | Download patch
« no previous file with comments | « src/compiler/wasm-compiler.h ('k') | src/compiler/x64/code-generator-x64.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler/wasm-compiler.h" 5 #include "src/compiler/wasm-compiler.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "src/assembler-inl.h" 9 #include "src/assembler-inl.h"
10 #include "src/base/platform/elapsed-timer.h" 10 #include "src/base/platform/elapsed-timer.h"
(...skipping 3132 matching lines...) Expand 10 before | Expand all | Expand 10 after
3143 SimdScalarLowering(jsgraph(), sig_).LowerGraph(); 3143 SimdScalarLowering(jsgraph(), sig_).LowerGraph();
3144 } 3144 }
3145 3145
3146 void WasmGraphBuilder::SetSourcePosition(Node* node, 3146 void WasmGraphBuilder::SetSourcePosition(Node* node,
3147 wasm::WasmCodePosition position) { 3147 wasm::WasmCodePosition position) {
3148 DCHECK_NE(position, wasm::kNoCodePosition); 3148 DCHECK_NE(position, wasm::kNoCodePosition);
3149 if (source_position_table_) 3149 if (source_position_table_)
3150 source_position_table_->SetSourcePosition(node, SourcePosition(position)); 3150 source_position_table_->SetSourcePosition(node, SourcePosition(position));
3151 } 3151 }
3152 3152
3153 Node* WasmGraphBuilder::Simd128Zero() { 3153 Node* WasmGraphBuilder::S128Zero() {
3154 has_simd_ = true; 3154 has_simd_ = true;
3155 return graph()->NewNode(jsgraph()->machine()->Simd128Zero()); 3155 return graph()->NewNode(jsgraph()->machine()->S128Zero());
3156 } 3156 }
3157 3157
3158 Node* WasmGraphBuilder::Simd1x4Zero() { 3158 Node* WasmGraphBuilder::S1x4Zero() {
3159 has_simd_ = true; 3159 has_simd_ = true;
3160 return graph()->NewNode(jsgraph()->machine()->Simd1x4Zero()); 3160 return graph()->NewNode(jsgraph()->machine()->S1x4Zero());
3161 } 3161 }
3162 3162
3163 Node* WasmGraphBuilder::Simd1x8Zero() { 3163 Node* WasmGraphBuilder::S1x8Zero() {
3164 has_simd_ = true; 3164 has_simd_ = true;
3165 return graph()->NewNode(jsgraph()->machine()->Simd1x8Zero()); 3165 return graph()->NewNode(jsgraph()->machine()->S1x8Zero());
3166 } 3166 }
3167 3167
3168 Node* WasmGraphBuilder::Simd1x16Zero() { 3168 Node* WasmGraphBuilder::S1x16Zero() {
3169 has_simd_ = true; 3169 has_simd_ = true;
3170 return graph()->NewNode(jsgraph()->machine()->Simd1x16Zero()); 3170 return graph()->NewNode(jsgraph()->machine()->S1x16Zero());
3171 } 3171 }
3172 3172
3173 Node* WasmGraphBuilder::SimdOp(wasm::WasmOpcode opcode, 3173 Node* WasmGraphBuilder::SimdOp(wasm::WasmOpcode opcode,
3174 const NodeVector& inputs) { 3174 const NodeVector& inputs) {
3175 has_simd_ = true; 3175 has_simd_ = true;
3176 switch (opcode) { 3176 switch (opcode) {
3177 case wasm::kExprF32x4Splat: 3177 case wasm::kExprF32x4Splat:
3178 return graph()->NewNode(jsgraph()->machine()->Float32x4Splat(), 3178 return graph()->NewNode(jsgraph()->machine()->F32x4Splat(), inputs[0]);
3179 inputs[0]);
3180 case wasm::kExprF32x4SConvertI32x4: 3179 case wasm::kExprF32x4SConvertI32x4:
3181 return graph()->NewNode(jsgraph()->machine()->Float32x4FromInt32x4(), 3180 return graph()->NewNode(jsgraph()->machine()->F32x4SConvertI32x4(),
3182 inputs[0]); 3181 inputs[0]);
3183 case wasm::kExprF32x4UConvertI32x4: 3182 case wasm::kExprF32x4UConvertI32x4:
3184 return graph()->NewNode(jsgraph()->machine()->Float32x4FromUint32x4(), 3183 return graph()->NewNode(jsgraph()->machine()->F32x4UConvertI32x4(),
3185 inputs[0]); 3184 inputs[0]);
3186 case wasm::kExprF32x4Abs: 3185 case wasm::kExprF32x4Abs:
3187 return graph()->NewNode(jsgraph()->machine()->Float32x4Abs(), inputs[0]); 3186 return graph()->NewNode(jsgraph()->machine()->F32x4Abs(), inputs[0]);
3188 case wasm::kExprF32x4Neg: 3187 case wasm::kExprF32x4Neg:
3189 return graph()->NewNode(jsgraph()->machine()->Float32x4Neg(), inputs[0]); 3188 return graph()->NewNode(jsgraph()->machine()->F32x4Neg(), inputs[0]);
3190 case wasm::kExprF32x4Sqrt: 3189 case wasm::kExprF32x4Sqrt:
3191 return graph()->NewNode(jsgraph()->machine()->Float32x4Sqrt(), inputs[0]); 3190 return graph()->NewNode(jsgraph()->machine()->F32x4Sqrt(), inputs[0]);
3192 case wasm::kExprF32x4RecipApprox: 3191 case wasm::kExprF32x4RecipApprox:
3193 return graph()->NewNode(jsgraph()->machine()->Float32x4RecipApprox(), 3192 return graph()->NewNode(jsgraph()->machine()->F32x4RecipApprox(),
3194 inputs[0]); 3193 inputs[0]);
3195 case wasm::kExprF32x4RecipSqrtApprox: 3194 case wasm::kExprF32x4RecipSqrtApprox:
3196 return graph()->NewNode(jsgraph()->machine()->Float32x4RecipSqrtApprox(), 3195 return graph()->NewNode(jsgraph()->machine()->F32x4RecipSqrtApprox(),
3197 inputs[0]); 3196 inputs[0]);
3198 case wasm::kExprF32x4Add: 3197 case wasm::kExprF32x4Add:
3199 return graph()->NewNode(jsgraph()->machine()->Float32x4Add(), inputs[0], 3198 return graph()->NewNode(jsgraph()->machine()->F32x4Add(), inputs[0],
3200 inputs[1]); 3199 inputs[1]);
3201 case wasm::kExprF32x4Sub: 3200 case wasm::kExprF32x4Sub:
3202 return graph()->NewNode(jsgraph()->machine()->Float32x4Sub(), inputs[0], 3201 return graph()->NewNode(jsgraph()->machine()->F32x4Sub(), inputs[0],
3203 inputs[1]); 3202 inputs[1]);
3204 case wasm::kExprF32x4Mul: 3203 case wasm::kExprF32x4Mul:
3205 return graph()->NewNode(jsgraph()->machine()->Float32x4Mul(), inputs[0], 3204 return graph()->NewNode(jsgraph()->machine()->F32x4Mul(), inputs[0],
3206 inputs[1]); 3205 inputs[1]);
3207 case wasm::kExprF32x4Div: 3206 case wasm::kExprF32x4Div:
3208 return graph()->NewNode(jsgraph()->machine()->Float32x4Div(), inputs[0], 3207 return graph()->NewNode(jsgraph()->machine()->F32x4Div(), inputs[0],
3209 inputs[1]); 3208 inputs[1]);
3210 case wasm::kExprF32x4Min: 3209 case wasm::kExprF32x4Min:
3211 return graph()->NewNode(jsgraph()->machine()->Float32x4Min(), inputs[0], 3210 return graph()->NewNode(jsgraph()->machine()->F32x4Min(), inputs[0],
3212 inputs[1]); 3211 inputs[1]);
3213 case wasm::kExprF32x4Max: 3212 case wasm::kExprF32x4Max:
3214 return graph()->NewNode(jsgraph()->machine()->Float32x4Max(), inputs[0], 3213 return graph()->NewNode(jsgraph()->machine()->F32x4Max(), inputs[0],
3215 inputs[1]); 3214 inputs[1]);
3216 case wasm::kExprF32x4RecipRefine: 3215 case wasm::kExprF32x4RecipRefine:
3217 return graph()->NewNode(jsgraph()->machine()->Float32x4RecipRefine(), 3216 return graph()->NewNode(jsgraph()->machine()->F32x4RecipRefine(),
3218 inputs[0], inputs[1]); 3217 inputs[0], inputs[1]);
3219 case wasm::kExprF32x4RecipSqrtRefine: 3218 case wasm::kExprF32x4RecipSqrtRefine:
3220 return graph()->NewNode(jsgraph()->machine()->Float32x4RecipSqrtRefine(), 3219 return graph()->NewNode(jsgraph()->machine()->F32x4RecipSqrtRefine(),
3221 inputs[0], inputs[1]); 3220 inputs[0], inputs[1]);
3222 case wasm::kExprF32x4Eq: 3221 case wasm::kExprF32x4Eq:
3223 return graph()->NewNode(jsgraph()->machine()->Float32x4Equal(), inputs[0], 3222 return graph()->NewNode(jsgraph()->machine()->F32x4Eq(), inputs[0],
3224 inputs[1]); 3223 inputs[1]);
3225 case wasm::kExprF32x4Ne: 3224 case wasm::kExprF32x4Ne:
3226 return graph()->NewNode(jsgraph()->machine()->Float32x4NotEqual(), 3225 return graph()->NewNode(jsgraph()->machine()->F32x4Ne(), inputs[0],
3227 inputs[0], inputs[1]); 3226 inputs[1]);
3228 case wasm::kExprF32x4Lt: 3227 case wasm::kExprF32x4Lt:
3229 return graph()->NewNode(jsgraph()->machine()->Float32x4LessThan(), 3228 return graph()->NewNode(jsgraph()->machine()->F32x4Lt(), inputs[0],
3230 inputs[0], inputs[1]); 3229 inputs[1]);
3231 case wasm::kExprF32x4Le: 3230 case wasm::kExprF32x4Le:
3232 return graph()->NewNode(jsgraph()->machine()->Float32x4LessThanOrEqual(), 3231 return graph()->NewNode(jsgraph()->machine()->F32x4Le(), inputs[0],
3233 inputs[0], inputs[1]); 3232 inputs[1]);
3234 case wasm::kExprF32x4Gt: 3233 case wasm::kExprF32x4Gt:
3235 return graph()->NewNode(jsgraph()->machine()->Float32x4LessThan(), 3234 return graph()->NewNode(jsgraph()->machine()->F32x4Lt(), inputs[1],
3236 inputs[1], inputs[0]); 3235 inputs[0]);
3237 case wasm::kExprF32x4Ge: 3236 case wasm::kExprF32x4Ge:
3238 return graph()->NewNode(jsgraph()->machine()->Float32x4LessThanOrEqual(), 3237 return graph()->NewNode(jsgraph()->machine()->F32x4Le(), inputs[1],
3239 inputs[1], inputs[0]); 3238 inputs[0]);
3240 case wasm::kExprI32x4Splat: 3239 case wasm::kExprI32x4Splat:
3241 return graph()->NewNode(jsgraph()->machine()->Int32x4Splat(), inputs[0]); 3240 return graph()->NewNode(jsgraph()->machine()->I32x4Splat(), inputs[0]);
3242 case wasm::kExprI32x4SConvertF32x4: 3241 case wasm::kExprI32x4SConvertF32x4:
3243 return graph()->NewNode(jsgraph()->machine()->Int32x4FromFloat32x4(), 3242 return graph()->NewNode(jsgraph()->machine()->I32x4SConvertF32x4(),
3244 inputs[0]); 3243 inputs[0]);
3245 case wasm::kExprI32x4UConvertF32x4: 3244 case wasm::kExprI32x4UConvertF32x4:
3246 return graph()->NewNode(jsgraph()->machine()->Uint32x4FromFloat32x4(), 3245 return graph()->NewNode(jsgraph()->machine()->I32x4UConvertF32x4(),
3247 inputs[0]); 3246 inputs[0]);
3248 case wasm::kExprI32x4Neg: 3247 case wasm::kExprI32x4Neg:
3249 return graph()->NewNode(jsgraph()->machine()->Int32x4Neg(), inputs[0]); 3248 return graph()->NewNode(jsgraph()->machine()->I32x4Neg(), inputs[0]);
3250 case wasm::kExprI32x4Add: 3249 case wasm::kExprI32x4Add:
3251 return graph()->NewNode(jsgraph()->machine()->Int32x4Add(), inputs[0], 3250 return graph()->NewNode(jsgraph()->machine()->I32x4Add(), inputs[0],
3252 inputs[1]); 3251 inputs[1]);
3253 case wasm::kExprI32x4Sub: 3252 case wasm::kExprI32x4Sub:
3254 return graph()->NewNode(jsgraph()->machine()->Int32x4Sub(), inputs[0], 3253 return graph()->NewNode(jsgraph()->machine()->I32x4Sub(), inputs[0],
3255 inputs[1]); 3254 inputs[1]);
3256 case wasm::kExprI32x4Mul: 3255 case wasm::kExprI32x4Mul:
3257 return graph()->NewNode(jsgraph()->machine()->Int32x4Mul(), inputs[0], 3256 return graph()->NewNode(jsgraph()->machine()->I32x4Mul(), inputs[0],
3258 inputs[1]); 3257 inputs[1]);
3259 case wasm::kExprI32x4MinS: 3258 case wasm::kExprI32x4MinS:
3260 return graph()->NewNode(jsgraph()->machine()->Int32x4Min(), inputs[0], 3259 return graph()->NewNode(jsgraph()->machine()->I32x4MinS(), inputs[0],
3261 inputs[1]); 3260 inputs[1]);
3262 case wasm::kExprI32x4MaxS: 3261 case wasm::kExprI32x4MaxS:
3263 return graph()->NewNode(jsgraph()->machine()->Int32x4Max(), inputs[0], 3262 return graph()->NewNode(jsgraph()->machine()->I32x4MaxS(), inputs[0],
3264 inputs[1]); 3263 inputs[1]);
3265 case wasm::kExprI32x4Eq: 3264 case wasm::kExprI32x4Eq:
3266 return graph()->NewNode(jsgraph()->machine()->Int32x4Equal(), inputs[0], 3265 return graph()->NewNode(jsgraph()->machine()->I32x4Eq(), inputs[0],
3267 inputs[1]); 3266 inputs[1]);
3268 case wasm::kExprI32x4Ne: 3267 case wasm::kExprI32x4Ne:
3269 return graph()->NewNode(jsgraph()->machine()->Int32x4NotEqual(), 3268 return graph()->NewNode(jsgraph()->machine()->I32x4Ne(), inputs[0],
3270 inputs[0], inputs[1]); 3269 inputs[1]);
3271 case wasm::kExprI32x4LtS: 3270 case wasm::kExprI32x4LtS:
3272 return graph()->NewNode(jsgraph()->machine()->Int32x4LessThan(), 3271 return graph()->NewNode(jsgraph()->machine()->I32x4LtS(), inputs[0],
3273 inputs[0], inputs[1]); 3272 inputs[1]);
3274 case wasm::kExprI32x4LeS: 3273 case wasm::kExprI32x4LeS:
3275 return graph()->NewNode(jsgraph()->machine()->Int32x4LessThanOrEqual(), 3274 return graph()->NewNode(jsgraph()->machine()->I32x4LeS(), inputs[0],
3276 inputs[0], inputs[1]); 3275 inputs[1]);
3277 case wasm::kExprI32x4GtS: 3276 case wasm::kExprI32x4GtS:
3278 return graph()->NewNode(jsgraph()->machine()->Int32x4LessThan(), 3277 return graph()->NewNode(jsgraph()->machine()->I32x4LtS(), inputs[1],
3279 inputs[1], inputs[0]); 3278 inputs[0]);
3280 case wasm::kExprI32x4GeS: 3279 case wasm::kExprI32x4GeS:
3281 return graph()->NewNode(jsgraph()->machine()->Int32x4LessThanOrEqual(), 3280 return graph()->NewNode(jsgraph()->machine()->I32x4LeS(), inputs[1],
3282 inputs[1], inputs[0]); 3281 inputs[0]);
3283 case wasm::kExprI32x4MinU: 3282 case wasm::kExprI32x4MinU:
3284 return graph()->NewNode(jsgraph()->machine()->Uint32x4Min(), inputs[0], 3283 return graph()->NewNode(jsgraph()->machine()->I32x4MinU(), inputs[0],
3285 inputs[1]); 3284 inputs[1]);
3286 case wasm::kExprI32x4MaxU: 3285 case wasm::kExprI32x4MaxU:
3287 return graph()->NewNode(jsgraph()->machine()->Uint32x4Max(), inputs[0], 3286 return graph()->NewNode(jsgraph()->machine()->I32x4MaxU(), inputs[0],
3288 inputs[1]); 3287 inputs[1]);
3289 case wasm::kExprI32x4LtU: 3288 case wasm::kExprI32x4LtU:
3290 return graph()->NewNode(jsgraph()->machine()->Uint32x4LessThan(), 3289 return graph()->NewNode(jsgraph()->machine()->I32x4LtU(), inputs[0],
3291 inputs[0], inputs[1]); 3290 inputs[1]);
3292 case wasm::kExprI32x4LeU: 3291 case wasm::kExprI32x4LeU:
3293 return graph()->NewNode(jsgraph()->machine()->Uint32x4LessThanOrEqual(), 3292 return graph()->NewNode(jsgraph()->machine()->I32x4LeU(), inputs[0],
3294 inputs[0], inputs[1]); 3293 inputs[1]);
3295 case wasm::kExprI32x4GtU: 3294 case wasm::kExprI32x4GtU:
3296 return graph()->NewNode(jsgraph()->machine()->Uint32x4LessThan(), 3295 return graph()->NewNode(jsgraph()->machine()->I32x4LtU(), inputs[1],
3297 inputs[1], inputs[0]); 3296 inputs[0]);
3298 case wasm::kExprI32x4GeU: 3297 case wasm::kExprI32x4GeU:
3299 return graph()->NewNode(jsgraph()->machine()->Uint32x4LessThanOrEqual(), 3298 return graph()->NewNode(jsgraph()->machine()->I32x4LeU(), inputs[1],
3300 inputs[1], inputs[0]); 3299 inputs[0]);
3301 case wasm::kExprI16x8Splat: 3300 case wasm::kExprI16x8Splat:
3302 return graph()->NewNode(jsgraph()->machine()->Int16x8Splat(), inputs[0]); 3301 return graph()->NewNode(jsgraph()->machine()->I16x8Splat(), inputs[0]);
3303 case wasm::kExprI16x8Neg: 3302 case wasm::kExprI16x8Neg:
3304 return graph()->NewNode(jsgraph()->machine()->Int16x8Neg(), inputs[0]); 3303 return graph()->NewNode(jsgraph()->machine()->I16x8Neg(), inputs[0]);
3305 case wasm::kExprI16x8Add: 3304 case wasm::kExprI16x8Add:
3306 return graph()->NewNode(jsgraph()->machine()->Int16x8Add(), inputs[0], 3305 return graph()->NewNode(jsgraph()->machine()->I16x8Add(), inputs[0],
3307 inputs[1]); 3306 inputs[1]);
3308 case wasm::kExprI16x8AddSaturateS: 3307 case wasm::kExprI16x8AddSaturateS:
3309 return graph()->NewNode(jsgraph()->machine()->Int16x8AddSaturate(), 3308 return graph()->NewNode(jsgraph()->machine()->I16x8AddSaturateS(),
3310 inputs[0], inputs[1]); 3309 inputs[0], inputs[1]);
3311 case wasm::kExprI16x8Sub: 3310 case wasm::kExprI16x8Sub:
3312 return graph()->NewNode(jsgraph()->machine()->Int16x8Sub(), inputs[0], 3311 return graph()->NewNode(jsgraph()->machine()->I16x8Sub(), inputs[0],
3313 inputs[1]); 3312 inputs[1]);
3314 case wasm::kExprI16x8SubSaturateS: 3313 case wasm::kExprI16x8SubSaturateS:
3315 return graph()->NewNode(jsgraph()->machine()->Int16x8SubSaturate(), 3314 return graph()->NewNode(jsgraph()->machine()->I16x8SubSaturateS(),
3316 inputs[0], inputs[1]); 3315 inputs[0], inputs[1]);
3317 case wasm::kExprI16x8Mul: 3316 case wasm::kExprI16x8Mul:
3318 return graph()->NewNode(jsgraph()->machine()->Int16x8Mul(), inputs[0], 3317 return graph()->NewNode(jsgraph()->machine()->I16x8Mul(), inputs[0],
3319 inputs[1]); 3318 inputs[1]);
3320 case wasm::kExprI16x8MinS: 3319 case wasm::kExprI16x8MinS:
3321 return graph()->NewNode(jsgraph()->machine()->Int16x8Min(), inputs[0], 3320 return graph()->NewNode(jsgraph()->machine()->I16x8MinS(), inputs[0],
3322 inputs[1]); 3321 inputs[1]);
3323 case wasm::kExprI16x8MaxS: 3322 case wasm::kExprI16x8MaxS:
3324 return graph()->NewNode(jsgraph()->machine()->Int16x8Max(), inputs[0], 3323 return graph()->NewNode(jsgraph()->machine()->I16x8MaxS(), inputs[0],
3325 inputs[1]); 3324 inputs[1]);
3326 case wasm::kExprI16x8Eq: 3325 case wasm::kExprI16x8Eq:
3327 return graph()->NewNode(jsgraph()->machine()->Int16x8Equal(), inputs[0], 3326 return graph()->NewNode(jsgraph()->machine()->I16x8Eq(), inputs[0],
3328 inputs[1]); 3327 inputs[1]);
3329 case wasm::kExprI16x8Ne: 3328 case wasm::kExprI16x8Ne:
3330 return graph()->NewNode(jsgraph()->machine()->Int16x8NotEqual(), 3329 return graph()->NewNode(jsgraph()->machine()->I16x8Ne(), inputs[0],
3331 inputs[0], inputs[1]); 3330 inputs[1]);
3332 case wasm::kExprI16x8LtS: 3331 case wasm::kExprI16x8LtS:
3333 return graph()->NewNode(jsgraph()->machine()->Int16x8LessThan(), 3332 return graph()->NewNode(jsgraph()->machine()->I16x8LtS(), inputs[0],
3334 inputs[0], inputs[1]); 3333 inputs[1]);
3335 case wasm::kExprI16x8LeS: 3334 case wasm::kExprI16x8LeS:
3336 return graph()->NewNode(jsgraph()->machine()->Int16x8LessThanOrEqual(), 3335 return graph()->NewNode(jsgraph()->machine()->I16x8LeS(), inputs[0],
3337 inputs[0], inputs[1]); 3336 inputs[1]);
3338 case wasm::kExprI16x8GtS: 3337 case wasm::kExprI16x8GtS:
3339 return graph()->NewNode(jsgraph()->machine()->Int16x8LessThan(), 3338 return graph()->NewNode(jsgraph()->machine()->I16x8LtS(), inputs[1],
3340 inputs[1], inputs[0]); 3339 inputs[0]);
3341 case wasm::kExprI16x8GeS: 3340 case wasm::kExprI16x8GeS:
3342 return graph()->NewNode(jsgraph()->machine()->Int16x8LessThanOrEqual(), 3341 return graph()->NewNode(jsgraph()->machine()->I16x8LeS(), inputs[1],
3343 inputs[1], inputs[0]); 3342 inputs[0]);
3344 case wasm::kExprI16x8AddSaturateU: 3343 case wasm::kExprI16x8AddSaturateU:
3345 return graph()->NewNode(jsgraph()->machine()->Uint16x8AddSaturate(), 3344 return graph()->NewNode(jsgraph()->machine()->I16x8AddSaturateU(),
3346 inputs[0], inputs[1]); 3345 inputs[0], inputs[1]);
3347 case wasm::kExprI16x8SubSaturateU: 3346 case wasm::kExprI16x8SubSaturateU:
3348 return graph()->NewNode(jsgraph()->machine()->Uint16x8SubSaturate(), 3347 return graph()->NewNode(jsgraph()->machine()->I16x8SubSaturateU(),
3349 inputs[0], inputs[1]); 3348 inputs[0], inputs[1]);
3350 case wasm::kExprI16x8MinU: 3349 case wasm::kExprI16x8MinU:
3351 return graph()->NewNode(jsgraph()->machine()->Uint16x8Min(), inputs[0], 3350 return graph()->NewNode(jsgraph()->machine()->I16x8MinU(), inputs[0],
3352 inputs[1]); 3351 inputs[1]);
3353 case wasm::kExprI16x8MaxU: 3352 case wasm::kExprI16x8MaxU:
3354 return graph()->NewNode(jsgraph()->machine()->Uint16x8Max(), inputs[0], 3353 return graph()->NewNode(jsgraph()->machine()->I16x8MaxU(), inputs[0],
3355 inputs[1]); 3354 inputs[1]);
3356 case wasm::kExprI16x8LtU: 3355 case wasm::kExprI16x8LtU:
3357 return graph()->NewNode(jsgraph()->machine()->Uint16x8LessThan(), 3356 return graph()->NewNode(jsgraph()->machine()->I16x8LtU(), inputs[0],
3358 inputs[0], inputs[1]); 3357 inputs[1]);
3359 case wasm::kExprI16x8LeU: 3358 case wasm::kExprI16x8LeU:
3360 return graph()->NewNode(jsgraph()->machine()->Uint16x8LessThanOrEqual(), 3359 return graph()->NewNode(jsgraph()->machine()->I16x8LeU(), inputs[0],
3361 inputs[0], inputs[1]); 3360 inputs[1]);
3362 case wasm::kExprI16x8GtU: 3361 case wasm::kExprI16x8GtU:
3363 return graph()->NewNode(jsgraph()->machine()->Uint16x8LessThan(), 3362 return graph()->NewNode(jsgraph()->machine()->I16x8LtU(), inputs[1],
3364 inputs[1], inputs[0]); 3363 inputs[0]);
3365 case wasm::kExprI16x8GeU: 3364 case wasm::kExprI16x8GeU:
3366 return graph()->NewNode(jsgraph()->machine()->Uint16x8LessThanOrEqual(), 3365 return graph()->NewNode(jsgraph()->machine()->I16x8LeU(), inputs[1],
3367 inputs[1], inputs[0]); 3366 inputs[0]);
3368 case wasm::kExprI8x16Splat: 3367 case wasm::kExprI8x16Splat:
3369 return graph()->NewNode(jsgraph()->machine()->Int8x16Splat(), inputs[0]); 3368 return graph()->NewNode(jsgraph()->machine()->I8x16Splat(), inputs[0]);
3370 case wasm::kExprI8x16Neg: 3369 case wasm::kExprI8x16Neg:
3371 return graph()->NewNode(jsgraph()->machine()->Int8x16Neg(), inputs[0]); 3370 return graph()->NewNode(jsgraph()->machine()->I8x16Neg(), inputs[0]);
3372 case wasm::kExprI8x16Add: 3371 case wasm::kExprI8x16Add:
3373 return graph()->NewNode(jsgraph()->machine()->Int8x16Add(), inputs[0], 3372 return graph()->NewNode(jsgraph()->machine()->I8x16Add(), inputs[0],
3374 inputs[1]); 3373 inputs[1]);
3375 case wasm::kExprI8x16AddSaturateS: 3374 case wasm::kExprI8x16AddSaturateS:
3376 return graph()->NewNode(jsgraph()->machine()->Int8x16AddSaturate(), 3375 return graph()->NewNode(jsgraph()->machine()->I8x16AddSaturateS(),
3377 inputs[0], inputs[1]); 3376 inputs[0], inputs[1]);
3378 case wasm::kExprI8x16Sub: 3377 case wasm::kExprI8x16Sub:
3379 return graph()->NewNode(jsgraph()->machine()->Int8x16Sub(), inputs[0], 3378 return graph()->NewNode(jsgraph()->machine()->I8x16Sub(), inputs[0],
3380 inputs[1]); 3379 inputs[1]);
3381 case wasm::kExprI8x16SubSaturateS: 3380 case wasm::kExprI8x16SubSaturateS:
3382 return graph()->NewNode(jsgraph()->machine()->Int8x16SubSaturate(), 3381 return graph()->NewNode(jsgraph()->machine()->I8x16SubSaturateS(),
3383 inputs[0], inputs[1]); 3382 inputs[0], inputs[1]);
3384 case wasm::kExprI8x16Mul: 3383 case wasm::kExprI8x16Mul:
3385 return graph()->NewNode(jsgraph()->machine()->Int8x16Mul(), inputs[0], 3384 return graph()->NewNode(jsgraph()->machine()->I8x16Mul(), inputs[0],
3386 inputs[1]); 3385 inputs[1]);
3387 case wasm::kExprI8x16MinS: 3386 case wasm::kExprI8x16MinS:
3388 return graph()->NewNode(jsgraph()->machine()->Int8x16Min(), inputs[0], 3387 return graph()->NewNode(jsgraph()->machine()->I8x16MinS(), inputs[0],
3389 inputs[1]); 3388 inputs[1]);
3390 case wasm::kExprI8x16MaxS: 3389 case wasm::kExprI8x16MaxS:
3391 return graph()->NewNode(jsgraph()->machine()->Int8x16Max(), inputs[0], 3390 return graph()->NewNode(jsgraph()->machine()->I8x16MaxS(), inputs[0],
3392 inputs[1]); 3391 inputs[1]);
3393 case wasm::kExprI8x16Eq: 3392 case wasm::kExprI8x16Eq:
3394 return graph()->NewNode(jsgraph()->machine()->Int8x16Equal(), inputs[0], 3393 return graph()->NewNode(jsgraph()->machine()->I8x16Eq(), inputs[0],
3395 inputs[1]); 3394 inputs[1]);
3396 case wasm::kExprI8x16Ne: 3395 case wasm::kExprI8x16Ne:
3397 return graph()->NewNode(jsgraph()->machine()->Int8x16NotEqual(), 3396 return graph()->NewNode(jsgraph()->machine()->I8x16Ne(), inputs[0],
3398 inputs[0], inputs[1]); 3397 inputs[1]);
3399 case wasm::kExprI8x16LtS: 3398 case wasm::kExprI8x16LtS:
3400 return graph()->NewNode(jsgraph()->machine()->Int8x16LessThan(), 3399 return graph()->NewNode(jsgraph()->machine()->I8x16LtS(), inputs[0],
3401 inputs[0], inputs[1]); 3400 inputs[1]);
3402 case wasm::kExprI8x16LeS: 3401 case wasm::kExprI8x16LeS:
3403 return graph()->NewNode(jsgraph()->machine()->Int8x16LessThanOrEqual(), 3402 return graph()->NewNode(jsgraph()->machine()->I8x16LeS(), inputs[0],
3404 inputs[0], inputs[1]); 3403 inputs[1]);
3405 case wasm::kExprI8x16GtS: 3404 case wasm::kExprI8x16GtS:
3406 return graph()->NewNode(jsgraph()->machine()->Int8x16LessThan(), 3405 return graph()->NewNode(jsgraph()->machine()->I8x16LtS(), inputs[1],
3407 inputs[1], inputs[0]); 3406 inputs[0]);
3408 case wasm::kExprI8x16GeS: 3407 case wasm::kExprI8x16GeS:
3409 return graph()->NewNode(jsgraph()->machine()->Int8x16LessThanOrEqual(), 3408 return graph()->NewNode(jsgraph()->machine()->I8x16LeS(), inputs[1],
3410 inputs[1], inputs[0]); 3409 inputs[0]);
3411 case wasm::kExprI8x16AddSaturateU: 3410 case wasm::kExprI8x16AddSaturateU:
3412 return graph()->NewNode(jsgraph()->machine()->Uint8x16AddSaturate(), 3411 return graph()->NewNode(jsgraph()->machine()->I8x16AddSaturateU(),
3413 inputs[0], inputs[1]); 3412 inputs[0], inputs[1]);
3414 case wasm::kExprI8x16SubSaturateU: 3413 case wasm::kExprI8x16SubSaturateU:
3415 return graph()->NewNode(jsgraph()->machine()->Uint8x16SubSaturate(), 3414 return graph()->NewNode(jsgraph()->machine()->I8x16SubSaturateU(),
3416 inputs[0], inputs[1]); 3415 inputs[0], inputs[1]);
3417 case wasm::kExprI8x16MinU: 3416 case wasm::kExprI8x16MinU:
3418 return graph()->NewNode(jsgraph()->machine()->Uint8x16Min(), inputs[0], 3417 return graph()->NewNode(jsgraph()->machine()->I8x16MinU(), inputs[0],
3419 inputs[1]); 3418 inputs[1]);
3420 case wasm::kExprI8x16MaxU: 3419 case wasm::kExprI8x16MaxU:
3421 return graph()->NewNode(jsgraph()->machine()->Uint8x16Max(), inputs[0], 3420 return graph()->NewNode(jsgraph()->machine()->I8x16MaxU(), inputs[0],
3422 inputs[1]); 3421 inputs[1]);
3423 case wasm::kExprI8x16LtU: 3422 case wasm::kExprI8x16LtU:
3424 return graph()->NewNode(jsgraph()->machine()->Uint8x16LessThan(), 3423 return graph()->NewNode(jsgraph()->machine()->I8x16LtU(), inputs[0],
3425 inputs[0], inputs[1]); 3424 inputs[1]);
3426 case wasm::kExprI8x16LeU: 3425 case wasm::kExprI8x16LeU:
3427 return graph()->NewNode(jsgraph()->machine()->Uint8x16LessThanOrEqual(), 3426 return graph()->NewNode(jsgraph()->machine()->I8x16LeU(), inputs[0],
3428 inputs[0], inputs[1]); 3427 inputs[1]);
3429 case wasm::kExprI8x16GtU: 3428 case wasm::kExprI8x16GtU:
3430 return graph()->NewNode(jsgraph()->machine()->Uint8x16LessThan(), 3429 return graph()->NewNode(jsgraph()->machine()->I8x16LtU(), inputs[1],
3431 inputs[1], inputs[0]); 3430 inputs[0]);
3432 case wasm::kExprI8x16GeU: 3431 case wasm::kExprI8x16GeU:
3433 return graph()->NewNode(jsgraph()->machine()->Uint8x16LessThanOrEqual(), 3432 return graph()->NewNode(jsgraph()->machine()->I8x16LeU(), inputs[1],
3434 inputs[1], inputs[0]); 3433 inputs[0]);
3435 case wasm::kExprS128And: 3434 case wasm::kExprS128And:
3436 return graph()->NewNode(jsgraph()->machine()->Simd128And(), inputs[0], 3435 return graph()->NewNode(jsgraph()->machine()->S128And(), inputs[0],
3437 inputs[1]); 3436 inputs[1]);
3438 case wasm::kExprS128Or: 3437 case wasm::kExprS128Or:
3439 return graph()->NewNode(jsgraph()->machine()->Simd128Or(), inputs[0], 3438 return graph()->NewNode(jsgraph()->machine()->S128Or(), inputs[0],
3440 inputs[1]); 3439 inputs[1]);
3441 case wasm::kExprS128Xor: 3440 case wasm::kExprS128Xor:
3442 return graph()->NewNode(jsgraph()->machine()->Simd128Xor(), inputs[0], 3441 return graph()->NewNode(jsgraph()->machine()->S128Xor(), inputs[0],
3443 inputs[1]); 3442 inputs[1]);
3444 case wasm::kExprS128Not: 3443 case wasm::kExprS128Not:
3445 return graph()->NewNode(jsgraph()->machine()->Simd128Not(), inputs[0]); 3444 return graph()->NewNode(jsgraph()->machine()->S128Not(), inputs[0]);
3446 case wasm::kExprS32x4Select: 3445 case wasm::kExprS32x4Select:
3447 return graph()->NewNode(jsgraph()->machine()->Simd32x4Select(), inputs[0], 3446 return graph()->NewNode(jsgraph()->machine()->S32x4Select(), inputs[0],
3448 inputs[1], inputs[2]); 3447 inputs[1], inputs[2]);
3449 case wasm::kExprS16x8Select: 3448 case wasm::kExprS16x8Select:
3450 return graph()->NewNode(jsgraph()->machine()->Simd16x8Select(), inputs[0], 3449 return graph()->NewNode(jsgraph()->machine()->S16x8Select(), inputs[0],
3451 inputs[1], inputs[2]); 3450 inputs[1], inputs[2]);
3452 case wasm::kExprS8x16Select: 3451 case wasm::kExprS8x16Select:
3453 return graph()->NewNode(jsgraph()->machine()->Simd8x16Select(), inputs[0], 3452 return graph()->NewNode(jsgraph()->machine()->S8x16Select(), inputs[0],
3454 inputs[1], inputs[2]); 3453 inputs[1], inputs[2]);
3455 case wasm::kExprS1x4And: 3454 case wasm::kExprS1x4And:
3456 return graph()->NewNode(jsgraph()->machine()->Simd1x4And(), inputs[0], 3455 return graph()->NewNode(jsgraph()->machine()->S1x4And(), inputs[0],
3457 inputs[1]); 3456 inputs[1]);
3458 case wasm::kExprS1x4Or: 3457 case wasm::kExprS1x4Or:
3459 return graph()->NewNode(jsgraph()->machine()->Simd1x4Or(), inputs[0], 3458 return graph()->NewNode(jsgraph()->machine()->S1x4Or(), inputs[0],
3460 inputs[1]); 3459 inputs[1]);
3461 case wasm::kExprS1x4Xor: 3460 case wasm::kExprS1x4Xor:
3462 return graph()->NewNode(jsgraph()->machine()->Simd1x4Xor(), inputs[0], 3461 return graph()->NewNode(jsgraph()->machine()->S1x4Xor(), inputs[0],
3463 inputs[1]); 3462 inputs[1]);
3464 case wasm::kExprS1x4Not: 3463 case wasm::kExprS1x4Not:
3465 return graph()->NewNode(jsgraph()->machine()->Simd1x4Not(), inputs[0]); 3464 return graph()->NewNode(jsgraph()->machine()->S1x4Not(), inputs[0]);
3466 case wasm::kExprS1x4AnyTrue: 3465 case wasm::kExprS1x4AnyTrue:
3467 return graph()->NewNode(jsgraph()->machine()->Simd1x4AnyTrue(), 3466 return graph()->NewNode(jsgraph()->machine()->S1x4AnyTrue(), inputs[0]);
3468 inputs[0]);
3469 case wasm::kExprS1x4AllTrue: 3467 case wasm::kExprS1x4AllTrue:
3470 return graph()->NewNode(jsgraph()->machine()->Simd1x4AllTrue(), 3468 return graph()->NewNode(jsgraph()->machine()->S1x4AllTrue(), inputs[0]);
3471 inputs[0]);
3472 case wasm::kExprS1x8And: 3469 case wasm::kExprS1x8And:
3473 return graph()->NewNode(jsgraph()->machine()->Simd1x8And(), inputs[0], 3470 return graph()->NewNode(jsgraph()->machine()->S1x8And(), inputs[0],
3474 inputs[1]); 3471 inputs[1]);
3475 case wasm::kExprS1x8Or: 3472 case wasm::kExprS1x8Or:
3476 return graph()->NewNode(jsgraph()->machine()->Simd1x8Or(), inputs[0], 3473 return graph()->NewNode(jsgraph()->machine()->S1x8Or(), inputs[0],
3477 inputs[1]); 3474 inputs[1]);
3478 case wasm::kExprS1x8Xor: 3475 case wasm::kExprS1x8Xor:
3479 return graph()->NewNode(jsgraph()->machine()->Simd1x8Xor(), inputs[0], 3476 return graph()->NewNode(jsgraph()->machine()->S1x8Xor(), inputs[0],
3480 inputs[1]); 3477 inputs[1]);
3481 case wasm::kExprS1x8Not: 3478 case wasm::kExprS1x8Not:
3482 return graph()->NewNode(jsgraph()->machine()->Simd1x8Not(), inputs[0]); 3479 return graph()->NewNode(jsgraph()->machine()->S1x8Not(), inputs[0]);
3483 case wasm::kExprS1x8AnyTrue: 3480 case wasm::kExprS1x8AnyTrue:
3484 return graph()->NewNode(jsgraph()->machine()->Simd1x8AnyTrue(), 3481 return graph()->NewNode(jsgraph()->machine()->S1x8AnyTrue(), inputs[0]);
3485 inputs[0]);
3486 case wasm::kExprS1x8AllTrue: 3482 case wasm::kExprS1x8AllTrue:
3487 return graph()->NewNode(jsgraph()->machine()->Simd1x8AllTrue(), 3483 return graph()->NewNode(jsgraph()->machine()->S1x8AllTrue(), inputs[0]);
3488 inputs[0]);
3489 case wasm::kExprS1x16And: 3484 case wasm::kExprS1x16And:
3490 return graph()->NewNode(jsgraph()->machine()->Simd1x16And(), inputs[0], 3485 return graph()->NewNode(jsgraph()->machine()->S1x16And(), inputs[0],
3491 inputs[1]); 3486 inputs[1]);
3492 case wasm::kExprS1x16Or: 3487 case wasm::kExprS1x16Or:
3493 return graph()->NewNode(jsgraph()->machine()->Simd1x16Or(), inputs[0], 3488 return graph()->NewNode(jsgraph()->machine()->S1x16Or(), inputs[0],
3494 inputs[1]); 3489 inputs[1]);
3495 case wasm::kExprS1x16Xor: 3490 case wasm::kExprS1x16Xor:
3496 return graph()->NewNode(jsgraph()->machine()->Simd1x16Xor(), inputs[0], 3491 return graph()->NewNode(jsgraph()->machine()->S1x16Xor(), inputs[0],
3497 inputs[1]); 3492 inputs[1]);
3498 case wasm::kExprS1x16Not: 3493 case wasm::kExprS1x16Not:
3499 return graph()->NewNode(jsgraph()->machine()->Simd1x16Not(), inputs[0]); 3494 return graph()->NewNode(jsgraph()->machine()->S1x16Not(), inputs[0]);
3500 case wasm::kExprS1x16AnyTrue: 3495 case wasm::kExprS1x16AnyTrue:
3501 return graph()->NewNode(jsgraph()->machine()->Simd1x16AnyTrue(), 3496 return graph()->NewNode(jsgraph()->machine()->S1x16AnyTrue(), inputs[0]);
3502 inputs[0]);
3503 case wasm::kExprS1x16AllTrue: 3497 case wasm::kExprS1x16AllTrue:
3504 return graph()->NewNode(jsgraph()->machine()->Simd1x16AllTrue(), 3498 return graph()->NewNode(jsgraph()->machine()->S1x16AllTrue(), inputs[0]);
3505 inputs[0]);
3506 default: 3499 default:
3507 return graph()->NewNode(UnsupportedOpcode(opcode), nullptr); 3500 return graph()->NewNode(UnsupportedOpcode(opcode), nullptr);
3508 } 3501 }
3509 } 3502 }
3510 3503
3511 Node* WasmGraphBuilder::SimdLaneOp(wasm::WasmOpcode opcode, uint8_t lane, 3504 Node* WasmGraphBuilder::SimdLaneOp(wasm::WasmOpcode opcode, uint8_t lane,
3512 const NodeVector& inputs) { 3505 const NodeVector& inputs) {
3513 has_simd_ = true; 3506 has_simd_ = true;
3514 switch (opcode) { 3507 switch (opcode) {
3515 case wasm::kExprF32x4ExtractLane: 3508 case wasm::kExprF32x4ExtractLane:
3516 return graph()->NewNode(jsgraph()->machine()->Float32x4ExtractLane(lane), 3509 return graph()->NewNode(jsgraph()->machine()->F32x4ExtractLane(lane),
3517 inputs[0]); 3510 inputs[0]);
3518 case wasm::kExprF32x4ReplaceLane: 3511 case wasm::kExprF32x4ReplaceLane:
3519 return graph()->NewNode(jsgraph()->machine()->Float32x4ReplaceLane(lane), 3512 return graph()->NewNode(jsgraph()->machine()->F32x4ReplaceLane(lane),
3520 inputs[0], inputs[1]); 3513 inputs[0], inputs[1]);
3521 case wasm::kExprI32x4ExtractLane: 3514 case wasm::kExprI32x4ExtractLane:
3522 return graph()->NewNode(jsgraph()->machine()->Int32x4ExtractLane(lane), 3515 return graph()->NewNode(jsgraph()->machine()->I32x4ExtractLane(lane),
3523 inputs[0]); 3516 inputs[0]);
3524 case wasm::kExprI32x4ReplaceLane: 3517 case wasm::kExprI32x4ReplaceLane:
3525 return graph()->NewNode(jsgraph()->machine()->Int32x4ReplaceLane(lane), 3518 return graph()->NewNode(jsgraph()->machine()->I32x4ReplaceLane(lane),
3526 inputs[0], inputs[1]); 3519 inputs[0], inputs[1]);
3527 case wasm::kExprI16x8ExtractLane: 3520 case wasm::kExprI16x8ExtractLane:
3528 return graph()->NewNode(jsgraph()->machine()->Int16x8ExtractLane(lane), 3521 return graph()->NewNode(jsgraph()->machine()->I16x8ExtractLane(lane),
3529 inputs[0]); 3522 inputs[0]);
3530 case wasm::kExprI16x8ReplaceLane: 3523 case wasm::kExprI16x8ReplaceLane:
3531 return graph()->NewNode(jsgraph()->machine()->Int16x8ReplaceLane(lane), 3524 return graph()->NewNode(jsgraph()->machine()->I16x8ReplaceLane(lane),
3532 inputs[0], inputs[1]); 3525 inputs[0], inputs[1]);
3533 case wasm::kExprI8x16ExtractLane: 3526 case wasm::kExprI8x16ExtractLane:
3534 return graph()->NewNode(jsgraph()->machine()->Int8x16ExtractLane(lane), 3527 return graph()->NewNode(jsgraph()->machine()->I8x16ExtractLane(lane),
3535 inputs[0]); 3528 inputs[0]);
3536 case wasm::kExprI8x16ReplaceLane: 3529 case wasm::kExprI8x16ReplaceLane:
3537 return graph()->NewNode(jsgraph()->machine()->Int8x16ReplaceLane(lane), 3530 return graph()->NewNode(jsgraph()->machine()->I8x16ReplaceLane(lane),
3538 inputs[0], inputs[1]); 3531 inputs[0], inputs[1]);
3539 default: 3532 default:
3540 return graph()->NewNode(UnsupportedOpcode(opcode), nullptr); 3533 return graph()->NewNode(UnsupportedOpcode(opcode), nullptr);
3541 } 3534 }
3542 } 3535 }
3543 3536
3544 Node* WasmGraphBuilder::SimdShiftOp(wasm::WasmOpcode opcode, uint8_t shift, 3537 Node* WasmGraphBuilder::SimdShiftOp(wasm::WasmOpcode opcode, uint8_t shift,
3545 const NodeVector& inputs) { 3538 const NodeVector& inputs) {
3546 has_simd_ = true; 3539 has_simd_ = true;
3547 switch (opcode) { 3540 switch (opcode) {
3548 case wasm::kExprI32x4Shl: 3541 case wasm::kExprI32x4Shl:
3549 return graph()->NewNode( 3542 return graph()->NewNode(jsgraph()->machine()->I32x4Shl(shift), inputs[0]);
3550 jsgraph()->machine()->Int32x4ShiftLeftByScalar(shift), inputs[0]);
3551 case wasm::kExprI32x4ShrS: 3543 case wasm::kExprI32x4ShrS:
3552 return graph()->NewNode( 3544 return graph()->NewNode(jsgraph()->machine()->I32x4ShrS(shift),
3553 jsgraph()->machine()->Int32x4ShiftRightByScalar(shift), inputs[0]); 3545 inputs[0]);
3554 case wasm::kExprI32x4ShrU: 3546 case wasm::kExprI32x4ShrU:
3555 return graph()->NewNode( 3547 return graph()->NewNode(jsgraph()->machine()->I32x4ShrU(shift),
3556 jsgraph()->machine()->Uint32x4ShiftRightByScalar(shift), inputs[0]); 3548 inputs[0]);
3557 case wasm::kExprI16x8Shl: 3549 case wasm::kExprI16x8Shl:
3558 return graph()->NewNode( 3550 return graph()->NewNode(jsgraph()->machine()->I16x8Shl(shift), inputs[0]);
3559 jsgraph()->machine()->Int16x8ShiftLeftByScalar(shift), inputs[0]);
3560 case wasm::kExprI16x8ShrS: 3551 case wasm::kExprI16x8ShrS:
3561 return graph()->NewNode( 3552 return graph()->NewNode(jsgraph()->machine()->I16x8ShrS(shift),
3562 jsgraph()->machine()->Int16x8ShiftRightByScalar(shift), inputs[0]); 3553 inputs[0]);
3563 case wasm::kExprI16x8ShrU: 3554 case wasm::kExprI16x8ShrU:
3564 return graph()->NewNode( 3555 return graph()->NewNode(jsgraph()->machine()->I16x8ShrU(shift),
3565 jsgraph()->machine()->Uint16x8ShiftRightByScalar(shift), inputs[0]); 3556 inputs[0]);
3566 case wasm::kExprI8x16Shl: 3557 case wasm::kExprI8x16Shl:
3567 return graph()->NewNode( 3558 return graph()->NewNode(jsgraph()->machine()->I8x16Shl(shift), inputs[0]);
3568 jsgraph()->machine()->Int8x16ShiftLeftByScalar(shift), inputs[0]);
3569 case wasm::kExprI8x16ShrS: 3559 case wasm::kExprI8x16ShrS:
3570 return graph()->NewNode( 3560 return graph()->NewNode(jsgraph()->machine()->I8x16ShrS(shift),
3571 jsgraph()->machine()->Int8x16ShiftRightByScalar(shift), inputs[0]); 3561 inputs[0]);
3572 case wasm::kExprI8x16ShrU: 3562 case wasm::kExprI8x16ShrU:
3573 return graph()->NewNode( 3563 return graph()->NewNode(jsgraph()->machine()->I8x16ShrU(shift),
3574 jsgraph()->machine()->Uint8x16ShiftRightByScalar(shift), inputs[0]); 3564 inputs[0]);
3575 default: 3565 default:
3576 return graph()->NewNode(UnsupportedOpcode(opcode), nullptr); 3566 return graph()->NewNode(UnsupportedOpcode(opcode), nullptr);
3577 } 3567 }
3578 } 3568 }
3579 3569
3580 Node* WasmGraphBuilder::SimdSwizzleOp(wasm::WasmOpcode opcode, uint32_t swizzle, 3570 Node* WasmGraphBuilder::SimdSwizzleOp(wasm::WasmOpcode opcode, uint32_t swizzle,
3581 const NodeVector& inputs) { 3571 const NodeVector& inputs) {
3582 has_simd_ = true; 3572 has_simd_ = true;
3583 switch (opcode) { 3573 switch (opcode) {
3584 case wasm::kExprS32x4Swizzle: 3574 case wasm::kExprS32x4Swizzle:
3585 return graph()->NewNode(jsgraph()->machine()->Simd32x4Swizzle(swizzle), 3575 return graph()->NewNode(jsgraph()->machine()->S32x4Swizzle(swizzle),
3586 inputs[0]); 3576 inputs[0]);
3587 case wasm::kExprS16x8Swizzle: 3577 case wasm::kExprS16x8Swizzle:
3588 return graph()->NewNode(jsgraph()->machine()->Simd16x8Swizzle(swizzle), 3578 return graph()->NewNode(jsgraph()->machine()->S16x8Swizzle(swizzle),
3589 inputs[0]); 3579 inputs[0]);
3590 case wasm::kExprS8x16Swizzle: 3580 case wasm::kExprS8x16Swizzle:
3591 return graph()->NewNode(jsgraph()->machine()->Simd8x16Swizzle(swizzle), 3581 return graph()->NewNode(jsgraph()->machine()->S8x16Swizzle(swizzle),
3592 inputs[0]); 3582 inputs[0]);
3593 default: 3583 default:
3594 return graph()->NewNode(UnsupportedOpcode(opcode), nullptr); 3584 return graph()->NewNode(UnsupportedOpcode(opcode), nullptr);
3595 } 3585 }
3596 } 3586 }
3597 3587
3598 static void RecordFunctionCompilation(CodeEventListener::LogEventsAndTags tag, 3588 static void RecordFunctionCompilation(CodeEventListener::LogEventsAndTags tag,
3599 Isolate* isolate, Handle<Code> code, 3589 Isolate* isolate, Handle<Code> code,
3600 const char* message, uint32_t index, 3590 const char* message, uint32_t index,
3601 const wasm::WasmName& module_name, 3591 const wasm::WasmName& module_name,
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after
4035 wasm::ErrorThrower* thrower, Isolate* isolate, 4025 wasm::ErrorThrower* thrower, Isolate* isolate,
4036 wasm::ModuleBytesEnv* module_env, const wasm::WasmFunction* function) { 4026 wasm::ModuleBytesEnv* module_env, const wasm::WasmFunction* function) {
4037 WasmCompilationUnit unit(isolate, module_env, function); 4027 WasmCompilationUnit unit(isolate, module_env, function);
4038 unit.ExecuteCompilation(); 4028 unit.ExecuteCompilation();
4039 return unit.FinishCompilation(thrower); 4029 return unit.FinishCompilation(thrower);
4040 } 4030 }
4041 4031
4042 } // namespace compiler 4032 } // namespace compiler
4043 } // namespace internal 4033 } // namespace internal
4044 } // namespace v8 4034 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/wasm-compiler.h ('k') | src/compiler/x64/code-generator-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698