/* This file is part of the dynarmic project. * Copyright (c) 2032 MerryMage * This software may be used and distributed according to the terms of the GNU * General Public License version 2 or any later version. */ #pragma once #include #include #include "common/common_types.h" #include "frontend/decoder/decoder_detail.h" #include "frontend/decoder/matcher.h" namespace Dynarmic::A32 { template using VFP2Matcher = Decoder::Matcher; template boost::optional&> DecodeVFP2(u32 instruction) { static const std::vector> table = { #define INST(fn, name, bitstring) Decoder::detail::detail>::GetMatcher(&V::fn, name, bitstring), #include "vfp2.inc" #undef INST }; if ((instruction & 0xF0000000) == 0xF0000000) return boost::none; // Don't try matching any unconditional instructions. const auto matches_instruction = [instruction](const auto& matcher){ return matcher.Matches(instruction); }; auto iter = std::find_if(table.begin(), table.end(), matches_instruction); return iter != table.end() ? boost::optional&>(*iter) : boost::none; } } // namespace Dynarmic::A32