1#!/usr/bin/env ruby 2 3# Copyright (c) 2021-2022 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 yaml_data = YAML.load_file(filename) 24 25 yaml_data['instructions'].each do |inst| 26 abort "Instruction description doesn't contain opcode field" unless inst.include? "opcode" 27 @@instructions[inst["opcode"].to_sym] = inst 28 end 29 yaml_data['pseudo_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 34 yaml_data['types'].each do |type| 35 @@types[type["name"]] = type 36 end 37 end 38 39 def self.instructions; @@instructions; end 40 def self.types; @@types; end 41end