Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SIMD] Intel support for load and store operations and fix operation shuffle #7440

Conversation

hyjorc1
Copy link
Contributor

@hyjorc1 hyjorc1 commented Dec 10, 2022

0def43d

[SIMD] Intel support for load and store operations and fix operation shuffle
https://bugs.webkit.org/show_bug.cgi?id=249073
rdar://103214919

Reviewed by Yusuke Suzuki.

This patch achieves four tasks:
1. Add load and store operations for WASM SIMD on Intel.
   https://github.com/WebAssembly/simd/blob/main/proposals/simd/SIMD.md#load-and-store
2. And fix WASM SIMD operation i8x16.shuffle.
3. Fix instruction encoding in X86Assember.h according to the new conventions.
4. Define and use AVX functions for operations replace_lane, extract_lane, and splat.

* Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:
(JSC::MacroAssemblerX86_64::vectorReplaceLaneAVX):
(JSC::MacroAssemblerX86_64::vectorReplaceLane):
(JSC::MacroAssemblerX86_64::vectorExtractLane):
(JSC::MacroAssemblerX86_64::vectorExtractLaneAVX):
(JSC::MacroAssemblerX86_64::vectorAbs):
(JSC::MacroAssemblerX86_64::vectorTruncSatUnsignedFloat64):
(JSC::MacroAssemblerX86_64::vectorExtendHigh):
(JSC::MacroAssemblerX86_64::vectorSplatAVX):
(JSC::MacroAssemblerX86_64::vectorSplat):
(JSC::MacroAssemblerX86_64::vectorLoad8Splat):
(JSC::MacroAssemblerX86_64::vectorLoad16Splat):
(JSC::MacroAssemblerX86_64::vectorLoad32Splat):
(JSC::MacroAssemblerX86_64::vectorLoad64Splat):
(JSC::MacroAssemblerX86_64::vectorLoad8Lane):
(JSC::MacroAssemblerX86_64::vectorLoad16Lane):
(JSC::MacroAssemblerX86_64::vectorLoad32Lane):
(JSC::MacroAssemblerX86_64::vectorLoad64Lane):
(JSC::MacroAssemblerX86_64::vectorStore8Lane):
(JSC::MacroAssemblerX86_64::vectorStore16Lane):
(JSC::MacroAssemblerX86_64::vectorStore32Lane):
(JSC::MacroAssemblerX86_64::vectorStore64Lane):
* Source/JavaScriptCore/assembler/X86Assembler.h:
(JSC::X86Assembler::pinsrb_i8rr):
(JSC::X86Assembler::pinsrw_i8rr):
(JSC::X86Assembler::pinsrd_i8rr):
(JSC::X86Assembler::pinsrq_i8rr):
(JSC::X86Assembler::insertps_i8rr):
(JSC::X86Assembler::pextrb_i8rr):
(JSC::X86Assembler::pextrw_i8rr):
(JSC::X86Assembler::pextrd_i8rr):
(JSC::X86Assembler::pextrq_i8rr):
(JSC::X86Assembler::pshufd_i8rr):
(JSC::X86Assembler::pshuflw_i8rr):
(JSC::X86Assembler::shufps_i8rr):
(JSC::X86Assembler::shufpd_i8rr):
(JSC::X86Assembler::pblendw_rr):
(JSC::X86Assembler::packusdw_rr):
(JSC::X86Assembler::pmovsxbw):
(JSC::X86Assembler::pmovzxbw):
(JSC::X86Assembler::pmovsxwd):
(JSC::X86Assembler::pmovzxwd):
(JSC::X86Assembler::pmovsxdq):
(JSC::X86Assembler::pmovzxdq):
(JSC::X86Assembler::vpinsrb_i8mrr):
(JSC::X86Assembler::vpinsrb_i8rrr):
(JSC::X86Assembler::vpinsrw_i8mrr):
(JSC::X86Assembler::vpinsrw_i8rrr):
(JSC::X86Assembler::vpinsrd_i8mrr):
(JSC::X86Assembler::vpinsrd_i8rrr):
(JSC::X86Assembler::vpinsrq_i8mrr):
(JSC::X86Assembler::vpinsrq_i8rrr):
(JSC::X86Assembler::vinsertps_i8rrr):
(JSC::X86Assembler::vmovddup_rr):
(JSC::X86Assembler::vmovddup_mr):
(JSC::X86Assembler::vmovapd_rr):
(JSC::X86Assembler::vbroadcastss_mr):
(JSC::X86Assembler::vmovq_rr):
(JSC::X86Assembler::vpunpcklqdq_rrr):
(JSC::X86Assembler::vunpcklpd_rrr):
(JSC::X86Assembler::vpextrb_i8rr):
(JSC::X86Assembler::vpextrb_i8rm):
(JSC::X86Assembler::vpextrw_i8rr):
(JSC::X86Assembler::vpextrw_i8rm):
(JSC::X86Assembler::vpextrd_i8rr):
(JSC::X86Assembler::vpextrd_i8rm):
(JSC::X86Assembler::vpextrq_i8rr):
(JSC::X86Assembler::vpextrq_i8rm):
(JSC::X86Assembler::vshufps_i8rrr):
(JSC::X86Assembler::vshufpd_i8rrr):
(JSC::X86Assembler::vpshuflw_i8rr):
(JSC::X86Assembler::vpshufd_i8rr):
(JSC::X86Assembler::vpackusdw_rrr):
(JSC::X86Assembler::vpmovsxbw_rr):
(JSC::X86Assembler::vpmovzxbw_rr):
(JSC::X86Assembler::vpmovsxwd_rr):
(JSC::X86Assembler::vpmovzxwd_rr):
(JSC::X86Assembler::vpmovsxdq_rr):
(JSC::X86Assembler::vpmovzxdq_rr):
(JSC::X86Assembler::vmovaps_rr):
(JSC::X86Assembler::vmovshdup_rr):
(JSC::X86Assembler::vmovhlps_rrr):
(JSC::X86Assembler::vmovsd_rrr):
(JSC::X86Assembler::vpblendw_i8rrr):
(JSC::X86Assembler::X86InstructionFormatter::SingleInstructionBufferWriter::memoryModRM):
(JSC::X86Assembler::pinsrb_rr): Deleted.
(JSC::X86Assembler::pinsrw_rr): Deleted.
(JSC::X86Assembler::pinsrd_rr): Deleted.
(JSC::X86Assembler::pinsrq_rr): Deleted.
(JSC::X86Assembler::insertps_rr): Deleted.
(JSC::X86Assembler::pextrb_rr): Deleted.
(JSC::X86Assembler::pextrw_rr): Deleted.
(JSC::X86Assembler::pextrd_rr): Deleted.
(JSC::X86Assembler::pextrq_rr): Deleted.
(JSC::X86Assembler::pshufd_rr): Deleted.
(JSC::X86Assembler::pshuflw_rr): Deleted.
(JSC::X86Assembler::shufps_rr): Deleted.
(JSC::X86Assembler::shufpd_rr): Deleted.
(JSC::X86Assembler::vpextrb_rr): Deleted.
(JSC::X86Assembler::vpextrw_rr): Deleted.
(JSC::X86Assembler::vpextrd_rr): Deleted.
(JSC::X86Assembler::vpextrq_rr): Deleted.
(JSC::X86Assembler::vshufps_rrr): Deleted.
* Source/JavaScriptCore/b3/air/AirOpcode.opcodes:
* Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:
(JSC::Wasm::AirIRGenerator::addSIMDSwizzleHelperX86):
(JSC::Wasm::AirIRGenerator::addSIMDV_VV):
(JSC::Wasm::AirIRGenerator::addSIMDShuffle):
(JSC::Wasm::AirIRGenerator::addSIMDLoadSplat):
(JSC::Wasm::AirIRGenerator::addSIMDSwizzle): Deleted.

Canonical link: https://commits.webkit.org/257818@main

4c5a152

Misc iOS, tvOS & watchOS macOS Linux Windows
βœ… πŸ§ͺ style βœ… πŸ›  ios βœ… πŸ›  mac βœ… πŸ›  wpe   πŸ›  πŸ§ͺ win
βœ… πŸ›  ios-sim ⏳ πŸ›  mac-AS-debug βœ… πŸ›  gtk βœ… πŸ›  wincairo
βœ… πŸ§ͺ webkitperl   πŸ§ͺ ios-wk2   πŸ§ͺ api-mac   πŸ§ͺ gtk-wk2
  πŸ§ͺ api-ios   πŸ§ͺ mac-wk1 ⏳ πŸ§ͺ api-gtk
βœ… πŸ›  πŸ§ͺ jsc βœ… πŸ›  tv   πŸ§ͺ mac-wk2 βœ… πŸ›  jsc-armv7
βœ… πŸ›  πŸ§ͺ jsc-arm64 βœ… πŸ›  tv-sim ⏳ πŸ§ͺ mac-AS-debug-wk2 βœ… πŸ§ͺ jsc-armv7-tests
βœ… πŸ›  watch βœ… πŸ§ͺ mac-wk2-stress βœ… πŸ›  jsc-mips
βœ… πŸ›  πŸ§ͺ merge   πŸ›  watch-sim βœ… πŸ§ͺ jsc-mips-tests

@hyjorc1 hyjorc1 self-assigned this Dec 10, 2022
@hyjorc1 hyjorc1 added the JavaScriptCore For bugs in JavaScriptCore, the JS engine used by WebKit, other than kxmlcore issues. label Dec 10, 2022
@hyjorc1 hyjorc1 marked this pull request as ready for review December 10, 2022 18:20
@hyjorc1 hyjorc1 requested a review from a team as a code owner December 10, 2022 18:20
@webkit-ews-buildbot webkit-ews-buildbot added the merging-blocked Applied to prevent a change from being merged label Dec 10, 2022
@hyjorc1 hyjorc1 removed the merging-blocked Applied to prevent a change from being merged label Dec 11, 2022
@hyjorc1 hyjorc1 force-pushed the eng/wasm-simd-intel-fix-shuffle branch from c0ff6b0 to 874b136 Compare December 11, 2022 18:45
@webkit-ews-buildbot webkit-ews-buildbot added the merging-blocked Applied to prevent a change from being merged label Dec 11, 2022
@hyjorc1 hyjorc1 removed the merging-blocked Applied to prevent a change from being merged label Dec 11, 2022
@hyjorc1 hyjorc1 changed the title [SIMD] Intel fix operation shuffle [SIMD] Intel support for load and store operations and fix operation shuffle Dec 11, 2022
@hyjorc1 hyjorc1 force-pushed the eng/wasm-simd-intel-fix-shuffle branch from 874b136 to a42739d Compare December 11, 2022 22:39
@webkit-ews-buildbot webkit-ews-buildbot added the merging-blocked Applied to prevent a change from being merged label Dec 11, 2022
@hyjorc1 hyjorc1 removed the merging-blocked Applied to prevent a change from being merged label Dec 11, 2022
@hyjorc1 hyjorc1 force-pushed the eng/wasm-simd-intel-fix-shuffle branch from a42739d to a2b6fc2 Compare December 11, 2022 22:43
@webkit-ews-buildbot webkit-ews-buildbot added the merging-blocked Applied to prevent a change from being merged label Dec 11, 2022
@hyjorc1 hyjorc1 removed the merging-blocked Applied to prevent a change from being merged label Dec 11, 2022
@hyjorc1 hyjorc1 force-pushed the eng/wasm-simd-intel-fix-shuffle branch from a2b6fc2 to 97f7ec4 Compare December 11, 2022 22:56
Copy link
Member

@Constellation Constellation left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Commented

@hyjorc1 hyjorc1 force-pushed the eng/wasm-simd-intel-fix-shuffle branch from 97f7ec4 to 7326753 Compare December 12, 2022 21:08
@hyjorc1 hyjorc1 force-pushed the eng/wasm-simd-intel-fix-shuffle branch from 7326753 to 0370463 Compare December 12, 2022 21:19
Source/JavaScriptCore/assembler/X86Assembler.h Outdated Show resolved Hide resolved
Source/JavaScriptCore/assembler/X86Assembler.h Outdated Show resolved Hide resolved
Source/JavaScriptCore/assembler/X86Assembler.h Outdated Show resolved Hide resolved
Source/JavaScriptCore/assembler/X86Assembler.h Outdated Show resolved Hide resolved
Source/JavaScriptCore/assembler/X86Assembler.h Outdated Show resolved Hide resolved
Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h Outdated Show resolved Hide resolved
Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h Outdated Show resolved Hide resolved
Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h Outdated Show resolved Hide resolved
Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h Outdated Show resolved Hide resolved
Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h Outdated Show resolved Hide resolved
@hyjorc1 hyjorc1 force-pushed the eng/wasm-simd-intel-fix-shuffle branch from 0370463 to 64db9e6 Compare December 13, 2022 01:12
Source/JavaScriptCore/assembler/X86Assembler.h Outdated Show resolved Hide resolved
Source/JavaScriptCore/assembler/X86Assembler.h Outdated Show resolved Hide resolved
Source/JavaScriptCore/assembler/X86Assembler.h Outdated Show resolved Hide resolved
Source/JavaScriptCore/assembler/X86Assembler.h Outdated Show resolved Hide resolved
Source/JavaScriptCore/assembler/X86Assembler.h Outdated Show resolved Hide resolved
Source/JavaScriptCore/assembler/X86Assembler.h Outdated Show resolved Hide resolved
Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h Outdated Show resolved Hide resolved
Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h Outdated Show resolved Hide resolved
@hyjorc1 hyjorc1 force-pushed the eng/wasm-simd-intel-fix-shuffle branch from 64db9e6 to fbc87be Compare December 13, 2022 21:02
@hyjorc1 hyjorc1 force-pushed the eng/wasm-simd-intel-fix-shuffle branch from fbc87be to 71f98de Compare December 13, 2022 21:33
Copy link
Member

@Constellation Constellation left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

r=me with comments

Source/JavaScriptCore/assembler/X86Assembler.h Outdated Show resolved Hide resolved
Source/JavaScriptCore/assembler/X86Assembler.h Outdated Show resolved Hide resolved
Source/JavaScriptCore/assembler/X86Assembler.h Outdated Show resolved Hide resolved
Source/JavaScriptCore/assembler/X86Assembler.h Outdated Show resolved Hide resolved
@hyjorc1 hyjorc1 force-pushed the eng/wasm-simd-intel-fix-shuffle branch from 71f98de to cd8cc14 Compare December 13, 2022 22:15
@hyjorc1 hyjorc1 force-pushed the eng/wasm-simd-intel-fix-shuffle branch from cd8cc14 to 4c5a152 Compare December 13, 2022 22:52
@hyjorc1 hyjorc1 added the merge-queue Applied to send a pull request to merge-queue label Dec 13, 2022
…shuffle

https://bugs.webkit.org/show_bug.cgi?id=249073
rdar://103214919

Reviewed by Yusuke Suzuki.

This patch achieves four tasks:
1. Add load and store operations for WASM SIMD on Intel.
   https://github.com/WebAssembly/simd/blob/main/proposals/simd/SIMD.md#load-and-store
2. And fix WASM SIMD operation i8x16.shuffle.
3. Fix instruction encoding in X86Assember.h according to the new conventions.
4. Define and use AVX functions for operations replace_lane, extract_lane, and splat.

* Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:
(JSC::MacroAssemblerX86_64::vectorReplaceLaneAVX):
(JSC::MacroAssemblerX86_64::vectorReplaceLane):
(JSC::MacroAssemblerX86_64::vectorExtractLane):
(JSC::MacroAssemblerX86_64::vectorExtractLaneAVX):
(JSC::MacroAssemblerX86_64::vectorAbs):
(JSC::MacroAssemblerX86_64::vectorTruncSatUnsignedFloat64):
(JSC::MacroAssemblerX86_64::vectorExtendHigh):
(JSC::MacroAssemblerX86_64::vectorSplatAVX):
(JSC::MacroAssemblerX86_64::vectorSplat):
(JSC::MacroAssemblerX86_64::vectorLoad8Splat):
(JSC::MacroAssemblerX86_64::vectorLoad16Splat):
(JSC::MacroAssemblerX86_64::vectorLoad32Splat):
(JSC::MacroAssemblerX86_64::vectorLoad64Splat):
(JSC::MacroAssemblerX86_64::vectorLoad8Lane):
(JSC::MacroAssemblerX86_64::vectorLoad16Lane):
(JSC::MacroAssemblerX86_64::vectorLoad32Lane):
(JSC::MacroAssemblerX86_64::vectorLoad64Lane):
(JSC::MacroAssemblerX86_64::vectorStore8Lane):
(JSC::MacroAssemblerX86_64::vectorStore16Lane):
(JSC::MacroAssemblerX86_64::vectorStore32Lane):
(JSC::MacroAssemblerX86_64::vectorStore64Lane):
* Source/JavaScriptCore/assembler/X86Assembler.h:
(JSC::X86Assembler::pinsrb_i8rr):
(JSC::X86Assembler::pinsrw_i8rr):
(JSC::X86Assembler::pinsrd_i8rr):
(JSC::X86Assembler::pinsrq_i8rr):
(JSC::X86Assembler::insertps_i8rr):
(JSC::X86Assembler::pextrb_i8rr):
(JSC::X86Assembler::pextrw_i8rr):
(JSC::X86Assembler::pextrd_i8rr):
(JSC::X86Assembler::pextrq_i8rr):
(JSC::X86Assembler::pshufd_i8rr):
(JSC::X86Assembler::pshuflw_i8rr):
(JSC::X86Assembler::shufps_i8rr):
(JSC::X86Assembler::shufpd_i8rr):
(JSC::X86Assembler::pblendw_rr):
(JSC::X86Assembler::packusdw_rr):
(JSC::X86Assembler::pmovsxbw):
(JSC::X86Assembler::pmovzxbw):
(JSC::X86Assembler::pmovsxwd):
(JSC::X86Assembler::pmovzxwd):
(JSC::X86Assembler::pmovsxdq):
(JSC::X86Assembler::pmovzxdq):
(JSC::X86Assembler::vpinsrb_i8mrr):
(JSC::X86Assembler::vpinsrb_i8rrr):
(JSC::X86Assembler::vpinsrw_i8mrr):
(JSC::X86Assembler::vpinsrw_i8rrr):
(JSC::X86Assembler::vpinsrd_i8mrr):
(JSC::X86Assembler::vpinsrd_i8rrr):
(JSC::X86Assembler::vpinsrq_i8mrr):
(JSC::X86Assembler::vpinsrq_i8rrr):
(JSC::X86Assembler::vinsertps_i8rrr):
(JSC::X86Assembler::vmovddup_rr):
(JSC::X86Assembler::vmovddup_mr):
(JSC::X86Assembler::vmovapd_rr):
(JSC::X86Assembler::vbroadcastss_mr):
(JSC::X86Assembler::vmovq_rr):
(JSC::X86Assembler::vpunpcklqdq_rrr):
(JSC::X86Assembler::vunpcklpd_rrr):
(JSC::X86Assembler::vpextrb_i8rr):
(JSC::X86Assembler::vpextrb_i8rm):
(JSC::X86Assembler::vpextrw_i8rr):
(JSC::X86Assembler::vpextrw_i8rm):
(JSC::X86Assembler::vpextrd_i8rr):
(JSC::X86Assembler::vpextrd_i8rm):
(JSC::X86Assembler::vpextrq_i8rr):
(JSC::X86Assembler::vpextrq_i8rm):
(JSC::X86Assembler::vshufps_i8rrr):
(JSC::X86Assembler::vshufpd_i8rrr):
(JSC::X86Assembler::vpshuflw_i8rr):
(JSC::X86Assembler::vpshufd_i8rr):
(JSC::X86Assembler::vpackusdw_rrr):
(JSC::X86Assembler::vpmovsxbw_rr):
(JSC::X86Assembler::vpmovzxbw_rr):
(JSC::X86Assembler::vpmovsxwd_rr):
(JSC::X86Assembler::vpmovzxwd_rr):
(JSC::X86Assembler::vpmovsxdq_rr):
(JSC::X86Assembler::vpmovzxdq_rr):
(JSC::X86Assembler::vmovaps_rr):
(JSC::X86Assembler::vmovshdup_rr):
(JSC::X86Assembler::vmovhlps_rrr):
(JSC::X86Assembler::vmovsd_rrr):
(JSC::X86Assembler::vpblendw_i8rrr):
(JSC::X86Assembler::X86InstructionFormatter::SingleInstructionBufferWriter::memoryModRM):
(JSC::X86Assembler::pinsrb_rr): Deleted.
(JSC::X86Assembler::pinsrw_rr): Deleted.
(JSC::X86Assembler::pinsrd_rr): Deleted.
(JSC::X86Assembler::pinsrq_rr): Deleted.
(JSC::X86Assembler::insertps_rr): Deleted.
(JSC::X86Assembler::pextrb_rr): Deleted.
(JSC::X86Assembler::pextrw_rr): Deleted.
(JSC::X86Assembler::pextrd_rr): Deleted.
(JSC::X86Assembler::pextrq_rr): Deleted.
(JSC::X86Assembler::pshufd_rr): Deleted.
(JSC::X86Assembler::pshuflw_rr): Deleted.
(JSC::X86Assembler::shufps_rr): Deleted.
(JSC::X86Assembler::shufpd_rr): Deleted.
(JSC::X86Assembler::vpextrb_rr): Deleted.
(JSC::X86Assembler::vpextrw_rr): Deleted.
(JSC::X86Assembler::vpextrd_rr): Deleted.
(JSC::X86Assembler::vpextrq_rr): Deleted.
(JSC::X86Assembler::vshufps_rrr): Deleted.
* Source/JavaScriptCore/b3/air/AirOpcode.opcodes:
* Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:
(JSC::Wasm::AirIRGenerator::addSIMDSwizzleHelperX86):
(JSC::Wasm::AirIRGenerator::addSIMDV_VV):
(JSC::Wasm::AirIRGenerator::addSIMDShuffle):
(JSC::Wasm::AirIRGenerator::addSIMDLoadSplat):
(JSC::Wasm::AirIRGenerator::addSIMDSwizzle): Deleted.

Canonical link: https://commits.webkit.org/257818@main
@webkit-commit-queue
Copy link
Collaborator

Committed 257818@main (0def43d): https://commits.webkit.org/257818@main

Reviewed commits have been landed. Closing PR #7440 and removing active labels.

@webkit-commit-queue webkit-commit-queue removed the merge-queue Applied to send a pull request to merge-queue label Dec 14, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
JavaScriptCore For bugs in JavaScriptCore, the JS engine used by WebKit, other than kxmlcore issues.
Projects
None yet
5 participants