Skip to content

Commit 863d9b6

Browse files
committed
cmd/asm: add requested amd64 instructions
Add amd64 instructions I promised to add for Go 1.6 at the beginning of January. These may be the last instructions added by hand. I intend to generate the whole set mechanically for Go 1.7. Fixes #13822. Change-Id: I8c6bae2efd25f717f9ec750402e50f408a911d2b Reviewed-on: https://go-review.googlesource.com/18853 Reviewed-by: Rob Pike <[email protected]>
1 parent 8d881b8 commit 863d9b6

File tree

6 files changed

+239
-149
lines changed

6 files changed

+239
-149
lines changed

src/cmd/asm/internal/arch/arch.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,11 +162,11 @@ func archX86(linkArch *obj.LinkArch) *Arch {
162162
instructions["MOVDQ2Q"] = x86.AMOVQ
163163
instructions["MOVNTDQ"] = x86.AMOVNTO
164164
instructions["MOVOA"] = x86.AMOVO
165-
instructions["MOVOA"] = x86.AMOVO
166165
instructions["PF2ID"] = x86.APF2IL
167166
instructions["PI2FD"] = x86.API2FL
168167
instructions["PSLLDQ"] = x86.APSLLO
169168
instructions["PSRLDQ"] = x86.APSRLO
169+
instructions["PADDD"] = x86.APADDL
170170

171171
return &Arch{
172172
LinkArch: linkArch,

src/cmd/asm/internal/asm/testdata/amd64.s

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,5 +121,11 @@ label:
121121
loop:
122122
LOOP loop // LOOP
123123

124+
// Intel pseudonyms for our own renamings.
125+
PADDD M2, M1 // PADDL M2, M1
126+
MOVDQ2Q X1, M1 // MOVQ X1, M1
127+
MOVNTDQ X1, (AX) // MOVNTO X1, (AX)
128+
MOVOA (AX), X1 // MOVO (AX), X1
129+
124130
// LTYPE0 nonnon { outcode($1, &$2); }
125131
RET // c3

src/cmd/asm/internal/asm/testdata/amd64enc.s

Lines changed: 132 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -2148,10 +2148,10 @@ TEXT asmtest(SB),7,$0
21482148
//TODO: LARQ (R11), R11 // 4d0f021b
21492149
//TODO: LARQ DX, R11 // 4c0f02da
21502150
//TODO: LARQ R11, R11 // 4d0f02db
2151-
//TODO: LDDQU (BX), X2 // f20ff013
2152-
//TODO: LDDQU (R11), X2 // f2410ff013
2153-
//TODO: LDDQU (BX), X11 // f2440ff01b
2154-
//TODO: LDDQU (R11), X11 // f2450ff01b
2151+
LDDQU (BX), X2 // f20ff013
2152+
LDDQU (R11), X2 // f2410ff013
2153+
LDDQU (BX), X11 // f2440ff01b
2154+
LDDQU (R11), X11 // f2450ff01b
21552155
LDMXCSR (BX) // 0fae13
21562156
LDMXCSR (R11) // 410fae13
21572157
LEAW (BX), DX // 668d13
@@ -3621,22 +3621,22 @@ TEXT asmtest(SB),7,$0
36213621
//TODO: PEXTRW $7, X11, (BX) // 66440f3a151b07
36223622
//TODO: PEXTRW $7, X2, (R11) // 66410f3a151307
36233623
//TODO: PEXTRW $7, X11, (R11) // 66450f3a151b07
3624-
//TODO: PHADDD (BX), M2 // 0f380213
3625-
//TODO: PHADDD (R11), M2 // 410f380213
3626-
//TODO: PHADDD M2, M2 // 0f3802d2
3627-
//TODO: PHADDD M3, M2 // 0f3802d3
3628-
//TODO: PHADDD (BX), M3 // 0f38021b
3629-
//TODO: PHADDD (R11), M3 // 410f38021b
3630-
//TODO: PHADDD M2, M3 // 0f3802da
3631-
//TODO: PHADDD M3, M3 // 0f3802db
3632-
//TODO: PHADDD (BX), X2 // 660f380213
3633-
//TODO: PHADDD (R11), X2 // 66410f380213
3634-
//TODO: PHADDD X2, X2 // 660f3802d2
3635-
//TODO: PHADDD X11, X2 // 66410f3802d3
3636-
//TODO: PHADDD (BX), X11 // 66440f38021b
3637-
//TODO: PHADDD (R11), X11 // 66450f38021b
3638-
//TODO: PHADDD X2, X11 // 66440f3802da
3639-
//TODO: PHADDD X11, X11 // 66450f3802db
3624+
PHADDD (BX), M2 // 0f380213
3625+
PHADDD (R11), M2 // 410f380213
3626+
PHADDD M2, M2 // 0f3802d2
3627+
PHADDD M3, M2 // 0f3802d3
3628+
PHADDD (BX), M3 // 0f38021b
3629+
PHADDD (R11), M3 // 410f38021b
3630+
PHADDD M2, M3 // 0f3802da
3631+
PHADDD M3, M3 // 0f3802db
3632+
PHADDD (BX), X2 // 660f380213
3633+
PHADDD (R11), X2 // 66410f380213
3634+
PHADDD X2, X2 // 660f3802d2
3635+
PHADDD X11, X2 // 66410f3802d3
3636+
PHADDD (BX), X11 // 66440f38021b
3637+
PHADDD (R11), X11 // 66450f38021b
3638+
PHADDD X2, X11 // 66440f3802da
3639+
PHADDD X11, X11 // 66450f3802db
36403640
//TODO: PHADDSW (BX), M2 // 0f380313
36413641
//TODO: PHADDSW (R11), M2 // 410f380313
36423642
//TODO: PHADDSW M2, M2 // 0f3803d2
@@ -3933,110 +3933,110 @@ TEXT asmtest(SB),7,$0
39333933
PMOVMSKB X11, DX // 66410fd7d3
39343934
PMOVMSKB X2, R11 // 66440fd7da
39353935
PMOVMSKB X11, R11 // 66450fd7db
3936-
//TODO: PMOVSXBD (BX), X2 // 660f382113
3937-
//TODO: PMOVSXBD (R11), X2 // 66410f382113
3938-
//TODO: PMOVSXBD X2, X2 // 660f3821d2
3939-
//TODO: PMOVSXBD X11, X2 // 66410f3821d3
3940-
//TODO: PMOVSXBD (BX), X11 // 66440f38211b
3941-
//TODO: PMOVSXBD (R11), X11 // 66450f38211b
3942-
//TODO: PMOVSXBD X2, X11 // 66440f3821da
3943-
//TODO: PMOVSXBD X11, X11 // 66450f3821db
3944-
//TODO: PMOVSXBQ (BX), X2 // 660f382213
3945-
//TODO: PMOVSXBQ (R11), X2 // 66410f382213
3946-
//TODO: PMOVSXBQ X2, X2 // 660f3822d2
3947-
//TODO: PMOVSXBQ X11, X2 // 66410f3822d3
3948-
//TODO: PMOVSXBQ (BX), X11 // 66440f38221b
3949-
//TODO: PMOVSXBQ (R11), X11 // 66450f38221b
3950-
//TODO: PMOVSXBQ X2, X11 // 66440f3822da
3951-
//TODO: PMOVSXBQ X11, X11 // 66450f3822db
3952-
//TODO: PMOVSXBW (BX), X2 // 660f382013
3953-
//TODO: PMOVSXBW (R11), X2 // 66410f382013
3954-
//TODO: PMOVSXBW X2, X2 // 660f3820d2
3955-
//TODO: PMOVSXBW X11, X2 // 66410f3820d3
3956-
//TODO: PMOVSXBW (BX), X11 // 66440f38201b
3957-
//TODO: PMOVSXBW (R11), X11 // 66450f38201b
3958-
//TODO: PMOVSXBW X2, X11 // 66440f3820da
3959-
//TODO: PMOVSXBW X11, X11 // 66450f3820db
3960-
//TODO: PMOVSXDQ (BX), X2 // 660f382513
3961-
//TODO: PMOVSXDQ (R11), X2 // 66410f382513
3962-
//TODO: PMOVSXDQ X2, X2 // 660f3825d2
3963-
//TODO: PMOVSXDQ X11, X2 // 66410f3825d3
3964-
//TODO: PMOVSXDQ (BX), X11 // 66440f38251b
3965-
//TODO: PMOVSXDQ (R11), X11 // 66450f38251b
3966-
//TODO: PMOVSXDQ X2, X11 // 66440f3825da
3967-
//TODO: PMOVSXDQ X11, X11 // 66450f3825db
3968-
//TODO: PMOVSXWD (BX), X2 // 660f382313
3969-
//TODO: PMOVSXWD (R11), X2 // 66410f382313
3970-
//TODO: PMOVSXWD X2, X2 // 660f3823d2
3971-
//TODO: PMOVSXWD X11, X2 // 66410f3823d3
3972-
//TODO: PMOVSXWD (BX), X11 // 66440f38231b
3973-
//TODO: PMOVSXWD (R11), X11 // 66450f38231b
3974-
//TODO: PMOVSXWD X2, X11 // 66440f3823da
3975-
//TODO: PMOVSXWD X11, X11 // 66450f3823db
3976-
//TODO: PMOVSXWQ (BX), X2 // 660f382413
3977-
//TODO: PMOVSXWQ (R11), X2 // 66410f382413
3978-
//TODO: PMOVSXWQ X2, X2 // 660f3824d2
3979-
//TODO: PMOVSXWQ X11, X2 // 66410f3824d3
3980-
//TODO: PMOVSXWQ (BX), X11 // 66440f38241b
3981-
//TODO: PMOVSXWQ (R11), X11 // 66450f38241b
3982-
//TODO: PMOVSXWQ X2, X11 // 66440f3824da
3983-
//TODO: PMOVSXWQ X11, X11 // 66450f3824db
3984-
//TODO: PMOVZXBD (BX), X2 // 660f383113
3985-
//TODO: PMOVZXBD (R11), X2 // 66410f383113
3986-
//TODO: PMOVZXBD X2, X2 // 660f3831d2
3987-
//TODO: PMOVZXBD X11, X2 // 66410f3831d3
3988-
//TODO: PMOVZXBD (BX), X11 // 66440f38311b
3989-
//TODO: PMOVZXBD (R11), X11 // 66450f38311b
3990-
//TODO: PMOVZXBD X2, X11 // 66440f3831da
3991-
//TODO: PMOVZXBD X11, X11 // 66450f3831db
3992-
//TODO: PMOVZXBQ (BX), X2 // 660f383213
3993-
//TODO: PMOVZXBQ (R11), X2 // 66410f383213
3994-
//TODO: PMOVZXBQ X2, X2 // 660f3832d2
3995-
//TODO: PMOVZXBQ X11, X2 // 66410f3832d3
3996-
//TODO: PMOVZXBQ (BX), X11 // 66440f38321b
3997-
//TODO: PMOVZXBQ (R11), X11 // 66450f38321b
3998-
//TODO: PMOVZXBQ X2, X11 // 66440f3832da
3999-
//TODO: PMOVZXBQ X11, X11 // 66450f3832db
4000-
//TODO: PMOVZXBW (BX), X2 // 660f383013
4001-
//TODO: PMOVZXBW (R11), X2 // 66410f383013
4002-
//TODO: PMOVZXBW X2, X2 // 660f3830d2
4003-
//TODO: PMOVZXBW X11, X2 // 66410f3830d3
4004-
//TODO: PMOVZXBW (BX), X11 // 66440f38301b
4005-
//TODO: PMOVZXBW (R11), X11 // 66450f38301b
4006-
//TODO: PMOVZXBW X2, X11 // 66440f3830da
4007-
//TODO: PMOVZXBW X11, X11 // 66450f3830db
4008-
//TODO: PMOVZXDQ (BX), X2 // 660f383513
4009-
//TODO: PMOVZXDQ (R11), X2 // 66410f383513
4010-
//TODO: PMOVZXDQ X2, X2 // 660f3835d2
4011-
//TODO: PMOVZXDQ X11, X2 // 66410f3835d3
4012-
//TODO: PMOVZXDQ (BX), X11 // 66440f38351b
4013-
//TODO: PMOVZXDQ (R11), X11 // 66450f38351b
4014-
//TODO: PMOVZXDQ X2, X11 // 66440f3835da
4015-
//TODO: PMOVZXDQ X11, X11 // 66450f3835db
4016-
//TODO: PMOVZXWD (BX), X2 // 660f383313
4017-
//TODO: PMOVZXWD (R11), X2 // 66410f383313
4018-
//TODO: PMOVZXWD X2, X2 // 660f3833d2
4019-
//TODO: PMOVZXWD X11, X2 // 66410f3833d3
4020-
//TODO: PMOVZXWD (BX), X11 // 66440f38331b
4021-
//TODO: PMOVZXWD (R11), X11 // 66450f38331b
4022-
//TODO: PMOVZXWD X2, X11 // 66440f3833da
4023-
//TODO: PMOVZXWD X11, X11 // 66450f3833db
4024-
//TODO: PMOVZXWQ (BX), X2 // 660f383413
4025-
//TODO: PMOVZXWQ (R11), X2 // 66410f383413
4026-
//TODO: PMOVZXWQ X2, X2 // 660f3834d2
4027-
//TODO: PMOVZXWQ X11, X2 // 66410f3834d3
4028-
//TODO: PMOVZXWQ (BX), X11 // 66440f38341b
4029-
//TODO: PMOVZXWQ (R11), X11 // 66450f38341b
4030-
//TODO: PMOVZXWQ X2, X11 // 66440f3834da
4031-
//TODO: PMOVZXWQ X11, X11 // 66450f3834db
4032-
//TODO: PMULDQ (BX), X2 // 660f382813
4033-
//TODO: PMULDQ (R11), X2 // 66410f382813
4034-
//TODO: PMULDQ X2, X2 // 660f3828d2
4035-
//TODO: PMULDQ X11, X2 // 66410f3828d3
4036-
//TODO: PMULDQ (BX), X11 // 66440f38281b
4037-
//TODO: PMULDQ (R11), X11 // 66450f38281b
4038-
//TODO: PMULDQ X2, X11 // 66440f3828da
4039-
//TODO: PMULDQ X11, X11 // 66450f3828db
3936+
PMOVSXBD (BX), X2 // 660f382113
3937+
PMOVSXBD (R11), X2 // 66410f382113
3938+
PMOVSXBD X2, X2 // 660f3821d2
3939+
PMOVSXBD X11, X2 // 66410f3821d3
3940+
PMOVSXBD (BX), X11 // 66440f38211b
3941+
PMOVSXBD (R11), X11 // 66450f38211b
3942+
PMOVSXBD X2, X11 // 66440f3821da
3943+
PMOVSXBD X11, X11 // 66450f3821db
3944+
PMOVSXBQ (BX), X2 // 660f382213
3945+
PMOVSXBQ (R11), X2 // 66410f382213
3946+
PMOVSXBQ X2, X2 // 660f3822d2
3947+
PMOVSXBQ X11, X2 // 66410f3822d3
3948+
PMOVSXBQ (BX), X11 // 66440f38221b
3949+
PMOVSXBQ (R11), X11 // 66450f38221b
3950+
PMOVSXBQ X2, X11 // 66440f3822da
3951+
PMOVSXBQ X11, X11 // 66450f3822db
3952+
PMOVSXBW (BX), X2 // 660f382013
3953+
PMOVSXBW (R11), X2 // 66410f382013
3954+
PMOVSXBW X2, X2 // 660f3820d2
3955+
PMOVSXBW X11, X2 // 66410f3820d3
3956+
PMOVSXBW (BX), X11 // 66440f38201b
3957+
PMOVSXBW (R11), X11 // 66450f38201b
3958+
PMOVSXBW X2, X11 // 66440f3820da
3959+
PMOVSXBW X11, X11 // 66450f3820db
3960+
PMOVSXDQ (BX), X2 // 660f382513
3961+
PMOVSXDQ (R11), X2 // 66410f382513
3962+
PMOVSXDQ X2, X2 // 660f3825d2
3963+
PMOVSXDQ X11, X2 // 66410f3825d3
3964+
PMOVSXDQ (BX), X11 // 66440f38251b
3965+
PMOVSXDQ (R11), X11 // 66450f38251b
3966+
PMOVSXDQ X2, X11 // 66440f3825da
3967+
PMOVSXDQ X11, X11 // 66450f3825db
3968+
PMOVSXWD (BX), X2 // 660f382313
3969+
PMOVSXWD (R11), X2 // 66410f382313
3970+
PMOVSXWD X2, X2 // 660f3823d2
3971+
PMOVSXWD X11, X2 // 66410f3823d3
3972+
PMOVSXWD (BX), X11 // 66440f38231b
3973+
PMOVSXWD (R11), X11 // 66450f38231b
3974+
PMOVSXWD X2, X11 // 66440f3823da
3975+
PMOVSXWD X11, X11 // 66450f3823db
3976+
PMOVSXWQ (BX), X2 // 660f382413
3977+
PMOVSXWQ (R11), X2 // 66410f382413
3978+
PMOVSXWQ X2, X2 // 660f3824d2
3979+
PMOVSXWQ X11, X2 // 66410f3824d3
3980+
PMOVSXWQ (BX), X11 // 66440f38241b
3981+
PMOVSXWQ (R11), X11 // 66450f38241b
3982+
PMOVSXWQ X2, X11 // 66440f3824da
3983+
PMOVSXWQ X11, X11 // 66450f3824db
3984+
PMOVZXBD (BX), X2 // 660f383113
3985+
PMOVZXBD (R11), X2 // 66410f383113
3986+
PMOVZXBD X2, X2 // 660f3831d2
3987+
PMOVZXBD X11, X2 // 66410f3831d3
3988+
PMOVZXBD (BX), X11 // 66440f38311b
3989+
PMOVZXBD (R11), X11 // 66450f38311b
3990+
PMOVZXBD X2, X11 // 66440f3831da
3991+
PMOVZXBD X11, X11 // 66450f3831db
3992+
PMOVZXBQ (BX), X2 // 660f383213
3993+
PMOVZXBQ (R11), X2 // 66410f383213
3994+
PMOVZXBQ X2, X2 // 660f3832d2
3995+
PMOVZXBQ X11, X2 // 66410f3832d3
3996+
PMOVZXBQ (BX), X11 // 66440f38321b
3997+
PMOVZXBQ (R11), X11 // 66450f38321b
3998+
PMOVZXBQ X2, X11 // 66440f3832da
3999+
PMOVZXBQ X11, X11 // 66450f3832db
4000+
PMOVZXBW (BX), X2 // 660f383013
4001+
PMOVZXBW (R11), X2 // 66410f383013
4002+
PMOVZXBW X2, X2 // 660f3830d2
4003+
PMOVZXBW X11, X2 // 66410f3830d3
4004+
PMOVZXBW (BX), X11 // 66440f38301b
4005+
PMOVZXBW (R11), X11 // 66450f38301b
4006+
PMOVZXBW X2, X11 // 66440f3830da
4007+
PMOVZXBW X11, X11 // 66450f3830db
4008+
PMOVZXDQ (BX), X2 // 660f383513
4009+
PMOVZXDQ (R11), X2 // 66410f383513
4010+
PMOVZXDQ X2, X2 // 660f3835d2
4011+
PMOVZXDQ X11, X2 // 66410f3835d3
4012+
PMOVZXDQ (BX), X11 // 66440f38351b
4013+
PMOVZXDQ (R11), X11 // 66450f38351b
4014+
PMOVZXDQ X2, X11 // 66440f3835da
4015+
PMOVZXDQ X11, X11 // 66450f3835db
4016+
PMOVZXWD (BX), X2 // 660f383313
4017+
PMOVZXWD (R11), X2 // 66410f383313
4018+
PMOVZXWD X2, X2 // 660f3833d2
4019+
PMOVZXWD X11, X2 // 66410f3833d3
4020+
PMOVZXWD (BX), X11 // 66440f38331b
4021+
PMOVZXWD (R11), X11 // 66450f38331b
4022+
PMOVZXWD X2, X11 // 66440f3833da
4023+
PMOVZXWD X11, X11 // 66450f3833db
4024+
PMOVZXWQ (BX), X2 // 660f383413
4025+
PMOVZXWQ (R11), X2 // 66410f383413
4026+
PMOVZXWQ X2, X2 // 660f3834d2
4027+
PMOVZXWQ X11, X2 // 66410f3834d3
4028+
PMOVZXWQ (BX), X11 // 66440f38341b
4029+
PMOVZXWQ (R11), X11 // 66450f38341b
4030+
PMOVZXWQ X2, X11 // 66440f3834da
4031+
PMOVZXWQ X11, X11 // 66450f3834db
4032+
PMULDQ (BX), X2 // 660f382813
4033+
PMULDQ (R11), X2 // 66410f382813
4034+
PMULDQ X2, X2 // 660f3828d2
4035+
PMULDQ X11, X2 // 66410f3828d3
4036+
PMULDQ (BX), X11 // 66440f38281b
4037+
PMULDQ (R11), X11 // 66450f38281b
4038+
PMULDQ X2, X11 // 66440f3828da
4039+
PMULDQ X11, X11 // 66450f3828db
40404040
//TODO: PMULHRSW (BX), M2 // 0f380b13
40414041
//TODO: PMULHRSW (R11), M2 // 410f380b13
40424042
//TODO: PMULHRSW M2, M2 // 0f380bd2
@@ -4085,14 +4085,14 @@ TEXT asmtest(SB),7,$0
40854085
PMULHW (R11), X11 // 66450fe51b
40864086
PMULHW X2, X11 // 66440fe5da
40874087
PMULHW X11, X11 // 66450fe5db
4088-
//TODO: PMULLD (BX), X2 // 660f384013
4089-
//TODO: PMULLD (R11), X2 // 66410f384013
4090-
//TODO: PMULLD X2, X2 // 660f3840d2
4091-
//TODO: PMULLD X11, X2 // 66410f3840d3
4092-
//TODO: PMULLD (BX), X11 // 66440f38401b
4093-
//TODO: PMULLD (R11), X11 // 66450f38401b
4094-
//TODO: PMULLD X2, X11 // 66440f3840da
4095-
//TODO: PMULLD X11, X11 // 66450f3840db
4088+
PMULLD (BX), X2 // 660f384013
4089+
PMULLD (R11), X2 // 66410f384013
4090+
PMULLD X2, X2 // 660f3840d2
4091+
PMULLD X11, X2 // 66410f3840d3
4092+
PMULLD (BX), X11 // 66440f38401b
4093+
PMULLD (R11), X11 // 66450f38401b
4094+
PMULLD X2, X11 // 66440f3840da
4095+
PMULLD X11, X11 // 66450f3840db
40964096
PMULLW (BX), M2 // 0fd513
40974097
PMULLW (R11), M2 // 410fd513
40984098
PMULLW M2, M2 // 0fd5d2

0 commit comments

Comments
 (0)