aboutsummaryrefslogtreecommitdiff
path: root/test/codegen
diff options
context:
space:
mode:
authorLynn Boger <laboger@linux.vnet.ibm.com>2020-09-28 18:20:12 -0400
committerLynn Boger <laboger@linux.vnet.ibm.com>2020-10-01 18:51:18 +0000
commitcc2a5cf4b8b0aeaccd3dd439f8d3d68f25eef358 (patch)
tree42d69524aedc0bc76d7a3e2d8005f6f43f7404b8 /test/codegen
parent4ad5dd63a7b5bc57312a95bd7dcdb6c209456a6f (diff)
downloadgo-cc2a5cf4b8b0aeaccd3dd439f8d3d68f25eef358.tar.gz
go-cc2a5cf4b8b0aeaccd3dd439f8d3d68f25eef358.zip
cmd/compile,cmd/internal/obj/ppc64: fix some shift rules due to a regression
A recent change to improve shifts was generating some invalid cases when the rule was based on an AND. The extended mnemonics CLRLSLDI and CLRLSLWI only allow certain values for the operands and in the mask case those values were not being checked properly. This adds a check to those rules to verify that the 'b' and 'n' values used when an AND was part of the rule have correct values. There was a bug in some diag messages in asm9. The message expected 3 values but only provided 2. Those are corrected here also. The test/codegen/shift.go was updated to add a few more cases to check for the case mentioned here. Some of the comments that mention the order of operands in these extended mnemonics were wrong and those have been corrected. Fixes #41683. Change-Id: If5bb860acaa5051b9e0cd80784b2868b85898c31 Reviewed-on: https://go-review.googlesource.com/c/go/+/258138 Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com> Reviewed-by: Paul Murphy <murp@ibm.com> Reviewed-by: Carlos Eduardo Seo <carlos.seo@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Trust: Lynn Boger <laboger@linux.vnet.ibm.com>
Diffstat (limited to 'test/codegen')
-rw-r--r--test/codegen/shift.go17
1 files changed, 10 insertions, 7 deletions
diff --git a/test/codegen/shift.go b/test/codegen/shift.go
index abc4b091c9..bbfc85ffbb 100644
--- a/test/codegen/shift.go
+++ b/test/codegen/shift.go
@@ -187,8 +187,8 @@ func checkCombinedShifts(v8 uint8, v16 uint16, v32 uint32, x32 int32, v64 uint64
// ppc64le:-"AND","CLRLSLWI"
// ppc64:-"AND","CLRLSLWI"
f := (v8 &0xF) << 2
- // ppc64le:-"AND","CLRLSLWI"
- // ppc64:-"AND","CLRLSLWI"
+ // ppc64le:"CLRLSLWI"
+ // ppc64:"CLRLSLWI"
f += byte(v16)<<3
// ppc64le:-"AND","CLRLSLWI"
// ppc64:-"AND","CLRLSLWI"
@@ -196,12 +196,15 @@ func checkCombinedShifts(v8 uint8, v16 uint16, v32 uint32, x32 int32, v64 uint64
// ppc64le:-"AND","CLRLSLWI"
// ppc64:-"AND","CLRLSLWI"
h := (v32 & 0xFFFFF) << 2
- // ppc64le:-"AND","CLRLSLWI"
- // ppc64:-"AND","CLRLSLWI"
- h += uint32(v64)<<4
- // ppc64le:-"AND","CLRLSLDI"
- // ppc64:-"AND","CLRLSLDI"
+ // ppc64le:"CLRLSLDI"
+ // ppc64:"CLRLSLDI"
i := (v64 & 0xFFFFFFFF) << 5
+ // ppc64le:-"CLRLSLDI"
+ // ppc64:-"CLRLSLDI"
+ i += (v64 & 0xFFFFFFF) << 38
+ // ppc64le/power9:-"CLRLSLDI"
+ // ppc64/power9:-"CLRLSLDI"
+ i += (v64 & 0xFFFF00) << 10
// ppc64le/power9:-"SLD","EXTSWSLI"
// ppc64/power9:-"SLD","EXTSWSLI"
j := int64(x32+32)*8