diff options
| author | Paul E. Murphy <murp@ibm.com> | 2021-05-21 11:26:01 -0500 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2022-09-15 21:12:43 +0000 |
| commit | 3a067b288ef235fdbc88220ea5bb384e0474f09b (patch) | |
| tree | 2c5209aa0c57d90771edab8e18797890d58292d1 /src/cmd/asm | |
| parent | c075c21ba532bd4d00158708e8c2981b8fdc19ca (diff) | |
| download | go-3a067b288ef235fdbc88220ea5bb384e0474f09b.tar.xz | |
cmd/internal/obj/ppc64: add ISA 3.1 instructions
Use ppc64map (from x/arch) to generate ISA 3.1 support for the
assembler. A new file asm9_gtables.go is added which contains
generated code to encode ISA 3.1 instructions, a function to assist
filling out the oprange structure, a lookup table for the fixed
bits of each instructions, and a slice of string name. Generated
functions are shared if their bitwise encoding match, and the
translation from an obj.Prog structure matches.
The generated file is entirely self-contained, and does not require
regenerating any other files for changes within it. If opcodes in
a.out.go are reordered or changed, anames.go must be updated in
the same way as before.
Future improvements could shrink the generated opcode table
to 32 bit entries as there is much less variation of the
encoding of the prefix word, but it is not always identical
for instructions which share a similar encoding of arguments
(e.g PLWA and PLWZ).
Updates #44549
Change-Id: Ie83fa02497c9ad2280678d68391043d3aae63175
Reviewed-on: https://go-review.googlesource.com/c/go/+/419535
Run-TryBot: Paul Murphy <murp@ibm.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Jenny Rakoczy <jenny@golang.org>
Reviewed-by: Lynn Boger <laboger@linux.vnet.ibm.com>
Reviewed-by: Jenny Rakoczy <jenny@golang.org>
Reviewed-by: Michael Pratt <mpratt@google.com>
Auto-Submit: Jenny Rakoczy <jenny@golang.org>
Diffstat (limited to 'src/cmd/asm')
| -rw-r--r-- | src/cmd/asm/internal/arch/arch.go | 5 | ||||
| -rw-r--r-- | src/cmd/asm/internal/asm/endtoend_test.go | 3 | ||||
| -rw-r--r-- | src/cmd/asm/internal/asm/testdata/ppc64_p10.s | 266 |
3 files changed, 274 insertions, 0 deletions
diff --git a/src/cmd/asm/internal/arch/arch.go b/src/cmd/asm/internal/arch/arch.go index e9c15a1218..740711c40c 100644 --- a/src/cmd/asm/internal/arch/arch.go +++ b/src/cmd/asm/internal/arch/arch.go @@ -377,6 +377,11 @@ func archPPC64(linkArch *obj.LinkArch) *Arch { instructions[s] = obj.As(i) + obj.ABasePPC64 } } + // The opcodes generated by x/arch's ppc64map are listed in + // a separate slice, add them too. + for i, s := range ppc64.GenAnames { + instructions[s] = obj.As(i) + ppc64.AFIRSTGEN + } // Annoying aliases. instructions["BR"] = ppc64.ABR instructions["BL"] = ppc64.ABL diff --git a/src/cmd/asm/internal/asm/endtoend_test.go b/src/cmd/asm/internal/asm/endtoend_test.go index 78b72ca9c4..d3f17358a8 100644 --- a/src/cmd/asm/internal/asm/endtoend_test.go +++ b/src/cmd/asm/internal/asm/endtoend_test.go @@ -455,6 +455,9 @@ func TestLOONG64Encoder(t *testing.T) { func TestPPC64EndToEnd(t *testing.T) { testEndToEnd(t, "ppc64", "ppc64") + + // The assembler accepts all instructions irrespective of the GOPPC64 value. + testEndToEnd(t, "ppc64", "ppc64_p10") } func TestRISCVEndToEnd(t *testing.T) { diff --git a/src/cmd/asm/internal/asm/testdata/ppc64_p10.s b/src/cmd/asm/internal/asm/testdata/ppc64_p10.s new file mode 100644 index 0000000000..4573ecba3a --- /dev/null +++ b/src/cmd/asm/internal/asm/testdata/ppc64_p10.s @@ -0,0 +1,266 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This contains the valid opcode combinations available +// in cmd/internal/obj/ppc64/asm9.go which exist for +// POWER10/ISA 3.1. + +#include "../../../../../runtime/textflag.h" + +TEXT asmtest(SB), DUPOK|NOSPLIT, $0 + BRD R1, R2 // 7c220176 + BRH R1, R2 // 7c2201b6 + BRW R1, R2 // 7c220136 + CFUGED R1, R2, R3 // 7c2311b8 + CNTLZDM R2, R3, R1 // 7c411876 + CNTTZDM R2, R3, R1 // 7c411c76 + DCFFIXQQ V1, F2 // fc400fc4 + DCTFIXQQ F2, V3 // fc6117c4 + LXVKQ $0, VS33 // f03f02d1 + LXVP 12352(R5), VS6 // 18c53040 + LXVPX (R1)(R2), VS4 // 7c820a9a + LXVRBX (R1)(R2), VS4 // 7c82081a + LXVRDX (R1)(R2), VS4 // 7c8208da + LXVRHX (R1)(R2), VS4 // 7c82085a + LXVRWX (R1)(R2), VS4 // 7c82089a + MTVSRBM R1, V1 // 10300e42 + MTVSRBMI $5, V1 // 10220015 + MTVSRDM R1, V1 // 10330e42 + MTVSRHM R1, V1 // 10310e42 + MTVSRQM R1, V1 // 10340e42 + MTVSRWM R1, V1 // 10320e42 + PADDI R3, $1234567890, $1, R4 // 06104996388302d2 + PADDI R0, $1234567890, $0, R4 // 06004996388002d2 + PADDI R0, $1234567890, $1, R4 // 06104996388002d2 + PDEPD R1, R2, R3 // 7c231138 + PEXTD R1, R2, R3 // 7c231178 + PLBZ 1234(R1), $0, R3 // 06000000886104d260000000 + // Note, PLD crosses a 64B boundary, and a nop is inserted between PLBZ and PLD + PLD 1234(R1), $0, R3 // 04000000e46104d2 + PLFD 1234(R1), $0, F3 // 06000000c86104d2 + PLFS 1234567890(R4), $0, F3 // 06004996c06402d2 + PLFS 1234567890(R0), $1, F3 // 06104996c06002d2 + PLHA 1234(R1), $0, R3 // 06000000a86104d2 + PLHZ 1234(R1), $0, R3 // 06000000a06104d2 + PLQ 1234(R1), $0, R4 // 04000000e08104d2 + PLWA 1234(R1), $0, R3 // 04000000a46104d2 + PLWZ 1234567890(R4), $0, R3 // 06004996806402d2 + PLWZ 1234567890(R0), $1, R3 // 06104996806002d2 + PLXSD 1234(R1), $0, V1 // 04000000a82104d2 + PLXSSP 5(R1), $0, V2 // 04000000ac410005 + PLXSSP 5(R0), $1, V2 // 04100000ac400005 + PLXV 12346891(R6), $1, VS44 // 041000bccd86660b + PLXVP 12345678(R4), $1, VS4 // 041000bce884614e + PMXVBF16GER2 VS1, VS2, $1, $2, $3, A1 // 0790c012ec811198 + PMXVBF16GER2NN VS1, VS2, $1, $2, $3, A1 // 0790c012ec811790 + PMXVBF16GER2NP VS1, VS2, $1, $2, $3, A1 // 0790c012ec811390 + PMXVBF16GER2PN VS1, VS2, $1, $2, $3, A1 // 0790c012ec811590 + PMXVBF16GER2PP VS1, VS2, $1, $2, $3, A1 // 0790c012ec811190 + PMXVF16GER2 VS1, VS2, $1, $2, $3, A1 // 0790c012ec811098 + PMXVF16GER2NN VS1, VS2, $1, $2, $3, A1 // 0790c012ec811690 + PMXVF16GER2NP VS1, VS2, $1, $2, $3, A1 // 0790c012ec811290 + PMXVF16GER2PN VS1, VS2, $1, $2, $3, A1 // 0790c012ec811490 + PMXVF16GER2PP VS1, VS2, $1, $2, $3, A1 // 0790c012ec811090 + PMXVF32GER VS1, VS2, $1, $2, A1 // 07900012ec8110d8 + PMXVF32GERNN VS1, VS2, $1, $2, A1 // 07900012ec8116d0 + PMXVF32GERNP VS1, VS2, $1, $2, A1 // 07900012ec8112d0 + PMXVF32GERPN VS1, VS2, $1, $2, A1 // 07900012ec8114d0 + PMXVF32GERPP VS1, VS2, $1, $2, A1 // 07900012ec8110d0 + PMXVF64GER VS4, VS2, $1, $2, A1 // 07900018ec8411d8 + PMXVF64GERNN VS4, VS2, $1, $2, A1 // 07900018ec8417d0 + PMXVF64GERNP VS4, VS2, $1, $2, A1 // 07900018ec8413d0 + PMXVF64GERPN VS4, VS2, $1, $2, A1 // 07900018ec8415d0 + PMXVF64GERPP VS4, VS2, $1, $2, A1 // 07900018ec8411d0 + PMXVI16GER2 VS1, VS2, $1, $2, $3, A1 // 0790c012ec811258 + PMXVI16GER2PP VS1, VS2, $1, $2, $3, A1 // 0790c012ec811358 + PMXVI16GER2S VS1, VS2, $1, $2, $3, A1 // 0790c012ec811158 + PMXVI16GER2SPP VS1, VS2, $1, $2, $3, A1 // 0790c012ec811150 + PMXVI4GER8 VS1, VS2, $1, $2, $3, A1 // 07900312ec811118 + PMXVI4GER8PP VS1, VS2, $1, $2, $3, A1 // 07900312ec811110 + PMXVI8GER4 VS1, VS2, $1, $2, $3, A1 // 07903012ec811018 + PMXVI8GER4PP VS1, VS2, $1, $2, $3, A1 // 07903012ec811010 + PMXVI8GER4SPP VS1, VS2, $1, $2, $3, A1 // 07903012ec811318 + PNOP // 0700000000000000 + PSTB R1, $1, 12345678(R2) // 061000bc9822614e + PSTD R1, $1, 12345678(R2) // 041000bcf422614e + PSTFD F1, $1, 12345678(R2) // 061000bcd822614e + PSTFS F1, $1, 123456789(R7) // 0610075bd027cd15 + PSTH R1, $1, 12345678(R2) // 061000bcb022614e + PSTQ R2, $1, 12345678(R2) // 041000bcf042614e + PSTW R1, $1, 12345678(R2) // 061000bc9022614e + PSTW R24, $0, 45(R13) // 06000000930d002d + PSTXSD V1, $1, 12345678(R2) // 041000bcb822614e + PSTXSSP V1, $1, 1234567890(R0) // 04104996bc2002d2 + PSTXSSP V1, $1, 1234567890(R1) // 04104996bc2102d2 + PSTXSSP V1, $0, 1234567890(R3) // 04004996bc2302d2 + PSTXV VS6, $1, 1234567890(R5) // 04104996d8c502d2 + PSTXVP VS2, $1, 12345678(R2) // 041000bcf842614e + PSTXVP VS62, $0, 5555555(R3) // 04000054fbe3c563 + SETBC CR2EQ, R2 // 7c4a0300 + SETBCR CR2LT, R2 // 7c480340 + SETNBC CR2GT, R2 // 7c490380 + SETNBCR CR6SO, R2 // 7c5b03c0 + STXVP VS6, 12352(R5) // 18c53041 + STXVPX VS22, (R1)(R2) // 7ec20b9a + STXVRBX VS2, (R1)(R2) // 7c42091a + STXVRDX VS2, (R1)(R2) // 7c4209da + STXVRHX VS2, (R1)(R2) // 7c42095a + STXVRWX VS2, (R1)(R2) // 7c42099a + VCFUGED V1, V2, V3 // 1061154d + VCLRLB V1, R2, V3 // 1061118d + VCLRRB V1, R2, V3 // 106111cd + VCLZDM V1, V2, V3 // 10611784 + VCMPEQUQ V1, V2, V3 // 106111c7 + VCMPEQUQCC V1, V2, V3 // 106115c7 + VCMPGTSQ V1, V2, V3 // 10611387 + VCMPGTSQCC V1, V2, V3 // 10611787 + VCMPGTUQ V1, V2, V3 // 10611287 + VCMPGTUQCC V1, V2, V3 // 10611687 + VCMPSQ V1, V2, CR2 // 11011141 + VCMPUQ V1, V2, CR3 // 11811101 + VCNTMBB V1, $1, R3 // 10790e42 + VCNTMBD V1, $1, R3 // 107f0e42 + VCNTMBH V1, $1, R3 // 107b0e42 + VCNTMBW V1, $1, R3 // 107d0e42 + VCTZDM V1, V2, V3 // 106117c4 + VDIVESD V1, V2, V3 // 106113cb + VDIVESQ V1, V2, V3 // 1061130b + VDIVESW V1, V2, V3 // 1061138b + VDIVEUD V1, V2, V3 // 106112cb + VDIVEUQ V1, V2, V3 // 1061120b + VDIVEUW V1, V2, V3 // 1061128b + VDIVSD V1, V2, V3 // 106111cb + VDIVSQ V1, V2, V3 // 1061110b + VDIVSW V1, V2, V3 // 1061118b + VDIVUD V1, V2, V3 // 106110cb + VDIVUQ V1, V2, V3 // 1061100b + VDIVUW V1, V2, V3 // 1061108b + VEXPANDBM V1, V2 // 10400e42 + VEXPANDDM V1, V2 // 10430e42 + VEXPANDHM V1, V2 // 10410e42 + VEXPANDQM V1, V2 // 10440e42 + VEXPANDWM V1, V2 // 10420e42 + VEXTDDVLX V1, V2, R3, V4 // 108110de + VEXTDDVRX V1, V2, R3, V4 // 108110df + VEXTDUBVLX V1, V2, R3, V4 // 108110d8 + VEXTDUBVRX V1, V2, R3, V4 // 108110d9 + VEXTDUHVLX V1, V2, R3, V4 // 108110da + VEXTDUHVRX V1, V2, R3, V4 // 108110db + VEXTDUWVLX V1, V2, R3, V4 // 108110dc + VEXTDUWVRX V1, V2, R5, V3 // 1061115d + VEXTRACTBM V1, R2 // 10480e42 + VEXTRACTDM V1, R2 // 104b0e42 + VEXTRACTHM V1, R2 // 10490e42 + VEXTRACTQM V1, R2 // 104c0e42 + VEXTRACTWM V1, R6 // 10ca0e42 + VEXTSD2Q V1, V2 // 105b0e02 + VGNB V1, $1, R31 // 13e10ccc + VINSBLX R1, R2, V3 // 1061120f + VINSBRX R1, R2, V3 // 1061130f + VINSBVLX R1, V1, V2 // 1041080f + VINSBVRX R1, V1, V2 // 1041090f + VINSD R1, $2, V2 // 104209cf + VINSDLX R1, R2, V3 // 106112cf + VINSDRX R1, R2, V3 // 106113cf + VINSHLX R1, R2, V3 // 1061124f + VINSHRX R1, R2, V3 // 1061134f + VINSHVLX R1, V2, V3 // 1061104f + VINSHVRX R1, V2, V3 // 1061114f + VINSW R1, $4, V3 // 106408cf + VINSWLX R1, R2, V3 // 1061128f + VINSWRX R1, R2, V3 // 1061138f + VINSWVLX R1, V2, V3 // 1061108f + VINSWVRX R1, V2, V3 // 1061118f + VMODSD V1, V2, V3 // 106117cb + VMODSQ V1, V2, V3 // 1061170b + VMODSW V1, V2, V3 // 1061178b + VMODUD V1, V2, V3 // 106116cb + VMODUQ V1, V2, V3 // 1061160b + VMODUW V1, V2, V3 // 1061168b + VMSUMCUD V1, V2, V3, V4 // 108110d7 + VMULESD V1, V2, V3 // 106113c8 + VMULEUD V1, V2, V3 // 106112c8 + VMULHSD V1, V2, V3 // 106113c9 + VMULHSW V1, V2, V3 // 10611389 + VMULHUD V1, V2, V3 // 106112c9 + VMULHUW V1, V2, V3 // 10611289 + VMULLD V1, V2, V3 // 106111c9 + VMULOSD V1, V2, V3 // 106111c8 + VMULOUD V1, V2, V3 // 106110c8 + VPDEPD V1, V2, V3 // 106115cd + VPEXTD V1, V2, V3 // 1061158d + VRLQ V1, V2, V3 // 10611005 + VRLQMI V1, V2, V3 // 10611045 + VRLQNM V1, V2, V3 // 10611145 + VSLDBI V1, V2, $3, V3 // 106110d6 + VSLQ V1, V2, V3 // 10611105 + VSRAQ V1, V2, V3 // 10611305 + VSRDBI V1, V2, $3, V4 // 108112d6 + VSRQ V1, V2, V3 // 10611205 + VSTRIBL V1, V2 // 1040080d + VSTRIBLCC V1, V2 // 10400c0d + VSTRIBR V1, V2 // 1041080d + VSTRIBRCC V1, V2 // 10410c0d + VSTRIHL V1, V2 // 1042080d + VSTRIHLCC V1, V2 // 10420c0d + VSTRIHR V1, V2 // 1043080d + VSTRIHRCC V1, V2 // 10430c0d + XSCMPEQQP V1, V2, V3 // fc611088 + XSCMPGEQP V1, V2, V3 // fc611188 + XSCMPGTQP V1, V2, V3 // fc6111c8 + XSCVQPSQZ V1, V2 // fc480e88 + XSCVQPUQZ V1, V2 // fc400e88 + XSCVSQQP V1, V2 // fc4b0e88 + XSCVUQQP V2, V3 // fc631688 + XSMAXCQP V1, V2, V3 // fc611548 + XSMINCQP V1, V2, V4 // fc8115c8 + XVBF16GER2 VS1, VS2, A1 // ec811198 + XVBF16GER2NN VS1, VS2, A1 // ec811790 + XVBF16GER2NP VS1, VS2, A1 // ec811390 + XVBF16GER2PN VS1, VS2, A1 // ec811590 + XVBF16GER2PP VS1, VS2, A1 // ec811190 + XVCVBF16SPN VS2, VS3 // f070176c + XVCVSPBF16 VS1, VS4 // f0910f6c + XVF16GER2 VS1, VS2, A1 // ec811098 + XVF16GER2NN VS1, VS2, A1 // ec811690 + XVF16GER2NP VS1, VS2, A1 // ec811290 + XVF16GER2PN VS1, VS2, A1 // ec811490 + XVF16GER2PP VS1, VS2, A1 // ec811090 + XVF32GER VS1, VS2, A1 // ec8110d8 + XVF32GERNN VS1, VS2, A1 // ec8116d0 + XVF32GERNP VS1, VS2, A1 // ec8112d0 + XVF32GERPN VS1, VS2, A1 // ec8114d0 + XVF32GERPP VS1, VS2, A1 // ec8110d0 + XVF64GER VS2, VS1, A1 // ec8209d8 + XVF64GERNN VS2, VS1, A1 // ec820fd0 + XVF64GERNP VS2, VS1, A1 // ec820bd0 + XVF64GERPN VS2, VS1, A1 // ec820dd0 + XVF64GERPP VS2, VS1, A1 // ec8209d0 + XVI16GER2 VS1, VS2, A1 // ec811258 + XVI16GER2PP VS1, VS2, A1 // ec811358 + XVI16GER2S VS1, VS2, A1 // ec811158 + XVI16GER2SPP VS1, VS2, A1 // ec811150 + XVI4GER8 VS1, VS2, A1 // ec811118 + XVI4GER8PP VS1, VS2, A1 // ec811110 + XVI8GER4 VS1, VS2, A1 // ec811018 + XVI8GER4PP VS1, VS2, A1 // ec811010 + XVI8GER4SPP VS4, VS6, A1 // ec843318 + XVTLSBB VS1, CR2 // f1020f6c + XXBLENDVB VS1, VS3, VS7, VS11 // 05000000856119c0 + XXBLENDVD VS1, VS3, VS7, VS11 // 05000000856119f0 + XXBLENDVH VS1, VS3, VS7, VS11 // 05000000856119d0 + XXBLENDVW VS1, VS3, VS7, VS11 // 05000000856119e0 + XXEVAL VS1, VS2, VS3, $2, VS4 // 05000002888110d0 + XXGENPCVBM V2, $2, VS3 // f0621728 + XXGENPCVDM V2, $2, VS3 // f062176a + XXGENPCVHM V2, $2, VS3 // f062172a + XXGENPCVWM V2, $2, VS3 // f0621768 + XXMFACC A1 // 7c800162 + XXMTACC A1 // 7c810162 + XXPERMX VS1, VS34, VS2, $2, VS3 // 0500000288611082 + XXSETACCZ A1 // 7c830162 + XXSPLTI32DX $1, $1234, VS3 // 05000000806204d2 + XXSPLTIDP $12345678, VS4 // 050000bc8084614e + XXSPLTIW $123456, VS3 // 050000018066e240 + RET |
