diff options
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 |
