From 6e337f5d06138208368afa1ee9f4b6037ef0f069 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Fri, 20 Nov 2020 19:07:23 +0100 Subject: pkg/ifuzz/x86: deduplicate modeInsns population logic It's currently duplicated in x86 and powerpc. Move to ifuzzimpl. --- pkg/ifuzz/ifuzz_test.go | 2 +- pkg/ifuzz/ifuzzimpl/ifuzzimpl.go | 23 ++++++++++++++++++++++- pkg/ifuzz/powerpc/powerpc.go | 30 ++++++------------------------ pkg/ifuzz/x86/x86.go | 34 ++++++++-------------------------- 4 files changed, 37 insertions(+), 52 deletions(-) (limited to 'pkg/ifuzz') diff --git a/pkg/ifuzz/ifuzz_test.go b/pkg/ifuzz/ifuzz_test.go index e82edc87a..edee05c9a 100644 --- a/pkg/ifuzz/ifuzz_test.go +++ b/pkg/ifuzz/ifuzz_test.go @@ -69,7 +69,7 @@ func testDecode(t *testing.T, arch string) { } failed := false for _, insn := range allInsns(arch, mode, true, true) { - name, pseudo := insn.Info() + name, _, pseudo, _ := insn.Info() text0 := insn.Encode(cfg, r) text := text0 repeat: diff --git a/pkg/ifuzz/ifuzzimpl/ifuzzimpl.go b/pkg/ifuzz/ifuzzimpl/ifuzzimpl.go index 31ca522cd..831e1ba3f 100644 --- a/pkg/ifuzz/ifuzzimpl/ifuzzimpl.go +++ b/pkg/ifuzz/ifuzzimpl/ifuzzimpl.go @@ -20,7 +20,7 @@ type ( ) type Insn interface { - Info() (string, bool) + Info() (name string, mode Mode, pseudo, priv bool) Encode(cfg *Config, r *rand.Rand) []byte } @@ -61,3 +61,24 @@ const ( ) var SpecialNumbers = [...]uint64{0, 1 << 15, 1 << 16, 1 << 31, 1 << 32, 1 << 47, 1 << 47, 1 << 63} + +type ModeInsns [ModeLast][TypeLast][]Insn + +func (modeInsns *ModeInsns) Add(insn Insn) { + _, mode, pseudo, priv := insn.Info() + for m := Mode(0); m < ModeLast; m++ { + if mode&(1<