arch/internal: add VPEXTR* instructions

This CL generates dev.simd CL 683797
and this CL should be submitted before that one.

Change-Id: I3d2e292df2bed94aeb7c710a47c5e3c99c868b58
Reviewed-on: https://go-review.googlesource.com/c/arch/+/683836
Reviewed-by: Junyang Shao <shaojunyang@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
diff --git a/internal/simdgen/categories.yaml b/internal/simdgen/categories.yaml
index 4b21d5a..bb4492e 100644
--- a/internal/simdgen/categories.yaml
+++ b/internal/simdgen/categories.yaml
@@ -644,6 +644,12 @@
   extension: "AVX.*"
   documentation: !string |-
     // SetElem sets a single constant-indexed element's value.
+- go: GetElem
+  commutative: "false"
+  extension: "AVX.*"
+  documentation: !string |-
+    // GetElem retrieves a single constant-indexed element's value.
+
 - go: Mul
   commutative: "true"
   extension: "AVX.*"
diff --git a/internal/simdgen/go.yaml b/internal/simdgen/go.yaml
index 2d1038d..7632157 100644
--- a/internal/simdgen/go.yaml
+++ b/internal/simdgen/go.yaml
@@ -777,6 +777,18 @@
     immOffset: 0
   out:
   - *t
+- go: GetElem
+  asm: "VPEXTR[BWDQ]"
+  in:
+  - class: vreg
+    base: $b
+    elemBits: $e
+  - class: immediate
+    immOffset: 0
+  out:
+  - class: greg
+    base: $b
+    bits: $e
 # "Normal" multiplication is only available for floats.
 # This only covers the single and double precision.
 - go: Mul
diff --git a/internal/simdgen/ops/Moves/categories.yaml b/internal/simdgen/ops/Moves/categories.yaml
index 9cf443a..d0d4a30 100644
--- a/internal/simdgen/ops/Moves/categories.yaml
+++ b/internal/simdgen/ops/Moves/categories.yaml
@@ -4,3 +4,9 @@
   extension: "AVX.*"
   documentation: !string |-
     // SetElem sets a single constant-indexed element's value.
+- go: GetElem
+  commutative: "false"
+  extension: "AVX.*"
+  documentation: !string |-
+    // GetElem retrieves a single constant-indexed element's value.
+
diff --git a/internal/simdgen/ops/Moves/go.yaml b/internal/simdgen/ops/Moves/go.yaml
index cdcb0ee..20d4a05 100644
--- a/internal/simdgen/ops/Moves/go.yaml
+++ b/internal/simdgen/ops/Moves/go.yaml
@@ -12,3 +12,15 @@
     immOffset: 0
   out:
   - *t
+- go: GetElem
+  asm: "VPEXTR[BWDQ]"
+  in:
+  - class: vreg
+    base: $b
+    elemBits: $e
+  - class: immediate
+    immOffset: 0
+  out:
+  - class: greg
+    base: $b
+    bits: $e