rubyx/lib/risc/instructions/syscall.rb

37 lines
956 B
Ruby
Raw Normal View History

module Risc
2015-06-22 21:48:42 +02:00
# name says it all really
# only arg is the method syscall name
# how the layer below executes these is really up to it
# Any function issuing a Syscall should also save the current message
# and restore it after the syscall, saving the return value in Return_index
class Syscall < Instruction
def initialize source ,name
super(source)
2015-06-22 21:48:42 +02:00
@name = name
2018-03-22 17:38:19 +01:00
raise "must have name" unless name
2015-06-22 21:48:42 +02:00
end
attr_reader :name
2015-07-24 12:23:56 +02:00
# return an array of names of registers that is used by the instruction
def register_attributes
[]
end
2015-07-24 12:23:56 +02:00
def to_s
2018-03-22 17:38:19 +01:00
class_source name
2015-07-24 12:23:56 +02:00
end
end
2015-07-24 12:23:56 +02:00
# return the nth register that a sycall needs
# these map to different physical registers in the Platform
# first arg is (running 1..) integer, second (optional) type
def self.syscall_reg( number , type = nil)
type = :Integer unless type
RegisterValue.new("syscall_#{number}".to_sym , type)
2015-06-22 21:48:42 +02:00
end
end