OLD | NEW |
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 Loading... |
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()->I16x8AddSaturate(), |
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()->I16x8SubSaturate(), |
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()->I8x16AddSaturate(), |
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()->I8x16SubSaturate(), |
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 Loading... |
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 |
OLD | NEW |