diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2020-11-20 19:07:23 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2020-11-21 08:46:20 +0100 |
| commit | 6e337f5d06138208368afa1ee9f4b6037ef0f069 (patch) | |
| tree | e192889f8e77ed1b95bf677d79e8719f9cb2402a /pkg/ifuzz/ifuzzimpl/ifuzzimpl.go | |
| parent | 647ed6d0868f745bcfbf4cdbd521ea99377f278e (diff) | |
pkg/ifuzz/x86: deduplicate modeInsns population logic
It's currently duplicated in x86 and powerpc.
Move to ifuzzimpl.
Diffstat (limited to 'pkg/ifuzz/ifuzzimpl/ifuzzimpl.go')
| -rw-r--r-- | pkg/ifuzz/ifuzzimpl/ifuzzimpl.go | 23 |
1 files changed, 22 insertions, 1 deletions
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<<uint(m)) == 0 { + continue + } + set := &modeInsns[m] + if pseudo { + set[TypeExec] = append(set[TypeExec], insn) + } else if priv { + set[TypePriv] = append(set[TypePriv], insn) + set[TypeAll] = append(set[TypeAll], insn) + } else { + set[TypeUser] = append(set[TypeUser], insn) + set[TypeAll] = append(set[TypeAll], insn) + } + } +} |
