From 5331bdfa41b183ac477e89747bf70fcdab862452 Mon Sep 17 00:00:00 2001 From: Michael McLoughlin Date: Sun, 27 Nov 2022 13:37:02 -0800 Subject: [PATCH 1/2] internal/opcodesextra: manually curated extra instructions --- internal/load/load.go | 3 ++- internal/load/tables.go | 36 --------------------------- internal/opcodesextra/instructions.go | 17 +++++++++++++ internal/opcodesextra/movlqzx.go | 35 ++++++++++++++++++++++++++ 4 files changed, 54 insertions(+), 37 deletions(-) create mode 100644 internal/opcodesextra/instructions.go create mode 100644 internal/opcodesextra/movlqzx.go diff --git a/internal/load/load.go b/internal/load/load.go index ae684d61..3c3aa31b 100644 --- a/internal/load/load.go +++ b/internal/load/load.go @@ -12,6 +12,7 @@ import ( "github.com/mmcloughlin/avo/internal/inst" "github.com/mmcloughlin/avo/internal/opcodescsv" + "github.com/mmcloughlin/avo/internal/opcodesextra" "github.com/mmcloughlin/avo/internal/opcodesxml" ) @@ -86,7 +87,7 @@ func (l *Loader) Load() ([]inst.Instruction, error) { } // Add extras to our list. - for _, e := range extras { + for _, e := range opcodesextra.Instructions() { im[e.Opcode] = e } diff --git a/internal/load/tables.go b/internal/load/tables.go index 67ac40be..5697879b 100644 --- a/internal/load/tables.go +++ b/internal/load/tables.go @@ -1,7 +1,5 @@ package load -import "github.com/mmcloughlin/avo/internal/inst" - // alias defines an opcode alias. type alias struct { From string @@ -142,37 +140,3 @@ var maskrequired = map[string]bool{ "VSCATTERQPD": true, "VSCATTERQPS": true, } - -// extras is simply a list of extra instructions to add to the database. -var extras = []*inst.Instruction{ - // MOVLQZX does not appear in either x86 CSV or Opcodes, but does appear in stdlib assembly. - // - // Reference: https://github.com/golang/go/blob/048c9164a0c5572df18325e377473e7893dbfb07/src/runtime/asm_amd64.s#L451-L453 - // - // TEXT ·reflectcall(SB), NOSPLIT, $0-32 - // MOVLQZX argsize+24(FP), CX - // DISPATCH(runtime·call32, 32) - // - // Reference: https://github.com/golang/go/blob/048c9164a0c5572df18325e377473e7893dbfb07/src/cmd/internal/obj/x86/asm6.go#L1217 - // - // {AMOVLQZX, yml_rl, Px, opBytes{0x8b}}, - // - // Reference: https://github.com/golang/go/blob/048c9164a0c5572df18325e377473e7893dbfb07/src/cmd/internal/obj/x86/asm6.go#L515-L517 - // - // var yml_rl = []ytab{ - // {Zm_r, 1, argList{Yml, Yrl}}, - // } - // - { - Opcode: "MOVLQZX", - Summary: "Move with Zero-Extend", - Forms: []inst.Form{ - { - Operands: []inst.Operand{ - {Type: "m32", Action: inst.R}, - {Type: "r64", Action: inst.W}, - }, - }, - }, - }, -} diff --git a/internal/opcodesextra/instructions.go b/internal/opcodesextra/instructions.go new file mode 100644 index 00000000..173cd7ec --- /dev/null +++ b/internal/opcodesextra/instructions.go @@ -0,0 +1,17 @@ +package opcodesextra + +import "github.com/mmcloughlin/avo/internal/inst" + +// sets of extra instructions. +var sets = [][]*inst.Instruction{ + movlqzx, +} + +// Instructions returns a list of extras to add to the instructions database. +func Instructions() []*inst.Instruction { + var is []*inst.Instruction + for _, set := range sets { + is = append(is, set...) + } + return is +} diff --git a/internal/opcodesextra/movlqzx.go b/internal/opcodesextra/movlqzx.go new file mode 100644 index 00000000..a1ed531a --- /dev/null +++ b/internal/opcodesextra/movlqzx.go @@ -0,0 +1,35 @@ +package opcodesextra + +import "github.com/mmcloughlin/avo/internal/inst" + +// MOVLQZX does not appear in either x86 CSV or Opcodes, but does appear in stdlib assembly. +// +// Reference: https://github.com/golang/go/blob/048c9164a0c5572df18325e377473e7893dbfb07/src/runtime/asm_amd64.s#L451-L453 +// +// TEXT ·reflectcall(SB), NOSPLIT, $0-32 +// MOVLQZX argsize+24(FP), CX +// DISPATCH(runtime·call32, 32) +// +// Reference: https://github.com/golang/go/blob/048c9164a0c5572df18325e377473e7893dbfb07/src/cmd/internal/obj/x86/asm6.go#L1217 +// +// {AMOVLQZX, yml_rl, Px, opBytes{0x8b}}, +// +// Reference: https://github.com/golang/go/blob/048c9164a0c5572df18325e377473e7893dbfb07/src/cmd/internal/obj/x86/asm6.go#L515-L517 +// +// var yml_rl = []ytab{ +// {Zm_r, 1, argList{Yml, Yrl}}, +// } +var movlqzx = []*inst.Instruction{ + { + Opcode: "MOVLQZX", + Summary: "Move with Zero-Extend", + Forms: []inst.Form{ + { + Operands: []inst.Operand{ + {Type: "m32", Action: inst.R}, + {Type: "r64", Action: inst.W}, + }, + }, + }, + }, +} From 85635e774cc5bda9027be3245a69fbea36e8f3de Mon Sep 17 00:00:00 2001 From: Michael McLoughlin Date: Sun, 27 Nov 2022 13:42:46 -0800 Subject: [PATCH 2/2] package comment --- internal/opcodesextra/instructions.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/opcodesextra/instructions.go b/internal/opcodesextra/instructions.go index 173cd7ec..b25537a9 100644 --- a/internal/opcodesextra/instructions.go +++ b/internal/opcodesextra/instructions.go @@ -1,3 +1,4 @@ +// Package opcodesextra provides curated extensions to the instruction database. package opcodesextra import "github.com/mmcloughlin/avo/internal/inst"