[arch] internal/simdgen: parse more register types

3 views
Skip to first unread message

Junyang Shao (Gerrit)

unread,
Jun 6, 2025, 11:00:54 PM (2 days ago) Jun 6
to goph...@pubsubhelper.golang.org, golang-co...@googlegroups.com

Junyang Shao has uploaded the change for review

Commit message

internal/simdgen: parse more register types

This CL added more heuristics to parse more register types.
This change is necessary to make VPDP* appear in the XED yaml.
Change-Id: Ic502278edb798efe3e09deb8ea1165af3d774869

Change diff

diff --git a/internal/simdgen/xed.go b/internal/simdgen/xed.go
index 004a815..4436043 100644
--- a/internal/simdgen/xed.go
+++ b/internal/simdgen/xed.go
@@ -190,6 +190,10 @@
// complicated.
action, ok := actionEncoding[op.Action]
if !ok {
+ if strings.HasPrefix(op.Name, "EMX_BROADCAST") {
+ // BROADCAST looks like to contain an obsolete operand.
+ return nil, nil
+ }
return nil, fmt.Errorf("unknown action %q", op.Action)
}
common := operandCommon{action: action}
@@ -249,7 +253,9 @@
if err != nil {
return unify.Tuple{}, unify.Tuple{}, err
}
- ops = append(ops, op)
+ if op != nil {
+ ops = append(ops, op)
+ }
}

// XED doesn't encode the size of mask operands. If there are mask operands,
@@ -272,6 +278,7 @@
var masks []int
var rSizes, wSizes, sizes []vecShape
allMasks := true
+ hasWMask := false
for i, op := range ops {
action := op.common().action
if _, ok := op.(operandMask); ok {
@@ -281,6 +288,9 @@
if action.r == r || action.w == w {
masks = append(masks, i)
}
+ if action.w {
+ hasWMask = true
+ }
} else {
allMasks = false
if reg, ok := op.(operandVReg); ok {
@@ -320,11 +330,17 @@
}
return nil
}
- return fmt.Errorf("cannot infer mask size: no register operands")
+ return fmt.Errorf("cannot infer mask size: no register operands: %+v", operands)
}
shape, ok := singular(sizes)
if !ok {
- return fmt.Errorf("cannot infer mask size: multiple register sizes %v", sizes)
+ if !hasWMask && len(wSizes) == 1 && len(masks) == 1 {
+ // This pattern looks like predicate mask, so its shape should align with the
+ // output. TODO: verify this is a safe assumption.
+ shape = wSizes[0]
+ } else {
+ return fmt.Errorf("cannot infer mask size: multiple register sizes %v", sizes)
+ }
}
for _, i := range masks {
m := ops[i].(operandMask)
@@ -407,6 +423,10 @@
return 256, true
case strings.HasPrefix(rhs, "ZMM_"):
return 512, true
+ case strings.HasPrefix(rhs, "GPR64_"), strings.HasPrefix(rhs, "VGPR64_"):
+ return 64, true
+ case strings.HasPrefix(rhs, "GPR32_"), strings.HasPrefix(rhs, "VGPR32_"):
+ return 32, true
}
return 0, false
}
@@ -475,6 +495,19 @@
// These just use the lower INT8 in each 16 bit field.
// As far as I can tell, "2I8" is a typo.
return scalarBaseInt, 8, true
+ case "2u16", "2U16":
+ // some VPDP* has it
+ // TODO: does "z" means it has zeroing?
+ return scalarBaseUint, 16, true
+ case "2i16", "2I16":
+ // some VPDP* has it
+ return scalarBaseInt, 16, true
+ case "4u8", "4U8":
+ // some VPDP* has it
+ return scalarBaseUint, 8, true
+ case "4i8", "4I8":
+ // some VPDP* has it
+ return scalarBaseInt, 8, true
}

// The rest follow a simple pattern.

Change information

Files:
  • M internal/simdgen/xed.go
Change size: S
Delta: 1 file changed, 36 insertions(+), 3 deletions(-)
Open in Gerrit

Related details

Attention set is empty
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement satisfiedNo-Unresolved-Comments
  • requirement is not satisfiedReview-Enforcement
  • requirement is not satisfiedTryBots-Pass
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: newchange
Gerrit-Project: arch
Gerrit-Branch: master
Gerrit-Change-Id: Ic502278edb798efe3e09deb8ea1165af3d774869
Gerrit-Change-Number: 679735
Gerrit-PatchSet: 1
Gerrit-Owner: Junyang Shao <shaoj...@google.com>
unsatisfied_requirement
satisfied_requirement
open
diffy

David Chase (Gerrit)

unread,
Jun 6, 2025, 11:11:09 PM (2 days ago) Jun 6
to Junyang Shao, goph...@pubsubhelper.golang.org, golang-co...@googlegroups.com
Attention needed from Junyang Shao

David Chase voted Code-Review+2

Code-Review+2
Open in Gerrit

Related details

Attention is currently required from:
  • Junyang Shao
Submit Requirements:
  • requirement satisfiedCode-Review
  • requirement satisfiedNo-Unresolved-Comments
  • requirement satisfiedReview-Enforcement
  • requirement is not satisfiedTryBots-Pass
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: arch
Gerrit-Branch: master
Gerrit-Change-Id: Ic502278edb798efe3e09deb8ea1165af3d774869
Gerrit-Change-Number: 679735
Gerrit-PatchSet: 1
Gerrit-Owner: Junyang Shao <shaoj...@google.com>
Gerrit-Reviewer: David Chase <drc...@google.com>
Gerrit-Attention: Junyang Shao <shaoj...@google.com>
Gerrit-Comment-Date: Fri, 06 Jun 2025 20:11:05 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: Yes
satisfied_requirement
unsatisfied_requirement
open
diffy

Junyang Shao (Gerrit)

unread,
Jun 6, 2025, 11:17:40 PM (2 days ago) Jun 6
to goph...@pubsubhelper.golang.org, David Chase, golang-co...@googlegroups.com

Junyang Shao voted

Auto-Submit+1
Code-Review+1
Commit-Queue+1
Open in Gerrit

Related details

Attention set is empty
Submit Requirements:
  • requirement satisfiedCode-Review
  • requirement satisfiedNo-Unresolved-Comments
  • requirement satisfiedReview-Enforcement
  • requirement is not satisfiedTryBots-Pass
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: arch
Gerrit-Branch: master
Gerrit-Change-Id: Ic502278edb798efe3e09deb8ea1165af3d774869
Gerrit-Change-Number: 679735
Gerrit-PatchSet: 1
Gerrit-Owner: Junyang Shao <shaoj...@google.com>
Gerrit-Reviewer: David Chase <drc...@google.com>
Gerrit-Reviewer: Junyang Shao <shaoj...@google.com>
Gerrit-Comment-Date: Fri, 06 Jun 2025 20:17:35 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: Yes
satisfied_requirement
unsatisfied_requirement
open
diffy

Junyang Shao (Gerrit)

unread,
Jun 7, 2025, 8:39:21 PM (19 hours ago) Jun 7
to goph...@pubsubhelper.golang.org, golang-...@googlegroups.com, Go LUCI, David Chase, golang-co...@googlegroups.com

Junyang Shao submitted the change

Change information

Commit message:
internal/simdgen: parse more register types

This CL added more heuristics to parse more register types.
This change is necessary to make VPDP* appear in the XED yaml.
Change-Id: Ic502278edb798efe3e09deb8ea1165af3d774869
Reviewed-by: Junyang Shao <shaoj...@google.com>
Auto-Submit: Junyang Shao <shaoj...@google.com>
Reviewed-by: David Chase <drc...@google.com>
Files:
  • M internal/simdgen/xed.go
Change size: S
Delta: 1 file changed, 36 insertions(+), 3 deletions(-)
Branch: refs/heads/master
Submit Requirements:
  • requirement satisfiedCode-Review: +2 by David Chase, +1 by Junyang Shao
  • requirement satisfiedTryBots-Pass: LUCI-TryBot-Result+1 by Go LUCI
Open in Gerrit
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: merged
Gerrit-Project: arch
Gerrit-Branch: master
Gerrit-Change-Id: Ic502278edb798efe3e09deb8ea1165af3d774869
Gerrit-Change-Number: 679735
Gerrit-PatchSet: 2
Gerrit-Owner: Junyang Shao <shaoj...@google.com>
Gerrit-Reviewer: David Chase <drc...@google.com>
Gerrit-Reviewer: Junyang Shao <shaoj...@google.com>
open
diffy
satisfied_requirement
Reply all
Reply to author
Forward
0 new messages