diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2020-11-20 19:10:02 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2020-11-21 08:46:20 +0100 |
| commit | e1dea42221c13dabdf9d4938428f1ef91863b813 (patch) | |
| tree | e3006261831248e7a815c3386bc683b1f408bd57 /pkg/ifuzz | |
| parent | 6e337f5d06138208368afa1ee9f4b6037ef0f069 (diff) | |
pkg/ifuzz/ifuzzimpl: move IsCompatible from x86
We now can implement IsCompatible portably.
Diffstat (limited to 'pkg/ifuzz')
| -rw-r--r-- | pkg/ifuzz/ifuzzimpl/ifuzzimpl.go | 17 | ||||
| -rw-r--r-- | pkg/ifuzz/x86/encode.go | 2 | ||||
| -rw-r--r-- | pkg/ifuzz/x86/x86.go | 16 |
3 files changed, 18 insertions, 17 deletions
diff --git a/pkg/ifuzz/ifuzzimpl/ifuzzimpl.go b/pkg/ifuzz/ifuzzimpl/ifuzzimpl.go index 831e1ba3f..32f285250 100644 --- a/pkg/ifuzz/ifuzzimpl/ifuzzimpl.go +++ b/pkg/ifuzz/ifuzzimpl/ifuzzimpl.go @@ -82,3 +82,20 @@ func (modeInsns *ModeInsns) Add(insn Insn) { } } } + +func (cfg *Config) IsCompatible(insn Insn) bool { + _, mode, pseudo, priv := insn.Info() + if cfg.Mode < 0 || cfg.Mode >= ModeLast { + panic("bad mode") + } + if priv && !cfg.Priv { + return false + } + if pseudo && !cfg.Exec { + return false + } + if mode&(1<<uint(cfg.Mode)) == 0 { + return false + } + return true +} diff --git a/pkg/ifuzz/x86/encode.go b/pkg/ifuzz/x86/encode.go index 536031b06..9203d51c3 100644 --- a/pkg/ifuzz/x86/encode.go +++ b/pkg/ifuzz/x86/encode.go @@ -15,7 +15,7 @@ import ( // nolint: gocyclo, nestif, gocognit, funlen func (insn *Insn) Encode(cfg *ifuzzimpl.Config, r *rand.Rand) []byte { - if !insn.isCompatible(cfg) { + if !cfg.IsCompatible(insn) { panic("instruction is not suitable for this mode") } if insn.Pseudo { diff --git a/pkg/ifuzz/x86/x86.go b/pkg/ifuzz/x86/x86.go index d9fed6cd9..51623aa2f 100644 --- a/pkg/ifuzz/x86/x86.go +++ b/pkg/ifuzz/x86/x86.go @@ -83,22 +83,6 @@ func generateArg(cfg *ifuzzimpl.Config, r *rand.Rand, size int) []byte { return arg } -func (insn *Insn) isCompatible(cfg *ifuzzimpl.Config) bool { - if cfg.Mode < 0 || cfg.Mode >= ifuzzimpl.ModeLast { - panic("bad mode") - } - if insn.Priv && !cfg.Priv { - return false - } - if insn.Pseudo && !cfg.Exec { - return false - } - if insn.Mode&(1<<uint(cfg.Mode)) == 0 { - return false - } - return true -} - func generateInt(cfg *ifuzzimpl.Config, r *rand.Rand, size int) uint64 { if size != 1 && size != 2 && size != 4 && size != 8 { panic("bad arg size") |
