1#!/usr/bin/env ruby 2 3# Copyright (c) 2021-2024 Huawei Device Co., Ltd. 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15 16require 'yaml' 17 18class InstructionsData 19 @@instructions = {} 20 @@types = {} 21 22 def self.setup(filename) 23 if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('3.1.0') 24 yaml_data = YAML.load_file(filename) 25 else 26 yaml_data = YAML.load_file(filename, aliases: true) 27 end 28 29 yaml_data['instructions'].each do |inst| 30 abort "Instruction description doesn't contain opcode field" unless inst.include? "opcode" 31 @@instructions[inst["opcode"].to_sym] = inst 32 end 33 yaml_data['pseudo_instructions'].each do |inst| 34 abort "Instruction description doesn't contain opcode field" unless inst.include? "opcode" 35 @@instructions[inst["opcode"].to_sym] = inst 36 end 37 38 yaml_data['types'].each do |type| 39 @@types[type["name"]] = type 40 end 41 end 42 43 def self.instructions; @@instructions; end 44 def self.types; @@types; end 45end