cmd/internal/obj/arm64,internal/cpu,runtime: add FEAT_MOPS support#79993
cmd/internal/obj/arm64,internal/cpu,runtime: add FEAT_MOPS support#79993mauri870 wants to merge 1 commit into
Conversation
|
This PR (HEAD: 987fb18) has been imported to Gerrit for code review. Please visit Gerrit at https://go-review.googlesource.com/c/go/+/790322. Important tips:
|
0c691be to
719ac8e
Compare
|
Message from Gopher Robot: Patch Set 1: (1 comment) Please don’t reply on this GitHub thread. Visit golang.org/cl/790322. |
|
This PR (HEAD: 719ac8e) has been imported to Gerrit for code review. Please visit Gerrit at https://go-review.googlesource.com/c/go/+/790322. Important tips:
|
|
This PR (HEAD: 3c15b31) has been imported to Gerrit for code review. Please visit Gerrit at https://go-review.googlesource.com/c/go/+/790322. Important tips:
|
|
Message from Mauri de Souza Meneguzzo: Patch Set 2: (1 comment) Please don’t reply on this GitHub thread. Visit golang.org/cl/790322. |
FEAT_MOPS (Memory Operations) is an ARM extension introduced as
optional in Armv8.7 and mandatory from Armv8.8 onwards. It provides
CPY{P,M,E} and SET{P,M,E} instruction sequences for hardware-accelerated
memory copy and memory zeroing.
This change adds assembler support for the CPY and SET instruction
families:
CPYP/CPYM/CPYE (Xs), Xn, (Xd) - memory copy
SETP/SETM/SETE Xs, Xn, (Xd) - memory set
It also adds ARM64.HasMOPS detection to internal/cpu via HWCAP2 on
Linux, and fast paths in the runtime for large operations when the
feature is available at runtime: memmove uses CPY{P,M,E} for copies
larger than 256 bytes, and memclrNoHeapPointers uses SET{P,M,E} for
zeroing larger than 512 bytes. The differing thresholds follow clang's
own codegen behaviour for variable-size operations of each kind.
|
This PR (HEAD: 9d60671) has been imported to Gerrit for code review. Please visit Gerrit at https://go-review.googlesource.com/c/go/+/790322. Important tips:
|
DO NOT REVIEW
DO NOT SUBMIT
FEAT_MOPS (Memory Operations) is an ARM extension introduced as
optional in Armv8.7 and mandatory from Armv8.8 onwards. It provides
CPY{P,M,E} and SET{P,M,E} instruction sequences for hardware-accelerated
memory copy and memory zeroing.
This change adds assembler support for the CPY and SET instruction
families:
CPYP/CPYM/CPYE (Xs), Xn, (Xd) - memory copy
SETP/SETM/SETE Xs, Xn, (Xd) - memory set
It also adds ARM64.HasMOPS detection to internal/cpu via HWCAP2 on
Linux, and fast paths in the runtime for large operations when the
feature is available at runtime: memmove uses CPY{P,M,E} for copies
larger than 256 bytes, and memclrNoHeapPointers uses SET{P,M,E} for
zeroing larger than 512 bytes. The differing thresholds follow clang's
own codegen behaviour for variable-size operations of each kind.
For #79994