define and use syscall_XX registers
rather than use hardcoded r0 etc use syscall_X change the syscalls and interpreter to use them later use platform to map from syscall_X to actually used register (like r0 in arm)
This commit is contained in:
@ -20,10 +20,9 @@ module SlotMachine
|
||||
# Assumes int return value and extracts the fixnum for process exit code
|
||||
def self.exit_sequence(builder)
|
||||
save_message( builder )
|
||||
unix_return = Risc.syscall_reg(1)
|
||||
builder.build do
|
||||
message << message[:return_value]
|
||||
int = message.reduce_int(false) #hack, noo type check
|
||||
message << int
|
||||
unix_return << message[:return_value].reduce_int(false) #hack, noo type check
|
||||
add_code Risc::Syscall.new("emit_syscall(exit)", :exit )
|
||||
end
|
||||
end
|
||||
@ -46,7 +45,7 @@ module SlotMachine
|
||||
r8 = Risc::RegisterValue.new( :saved_message , :Message).set_compiler(builder.compiler)
|
||||
tmp = Risc::RegisterValue.new( :integer_tmp , :Integer).set_compiler(builder.compiler)
|
||||
builder.build do
|
||||
tmp << message
|
||||
tmp << Risc.syscall_reg(1)
|
||||
message << r8
|
||||
message[:return_value][Parfait::Integer.integer_index] << tmp
|
||||
end
|
||||
|
@ -3,9 +3,13 @@ module SlotMachine
|
||||
def to_risc(compiler)
|
||||
builder = compiler.builder(compiler.source)
|
||||
integer = builder.prepare_int_return # makes integer_tmp variable as return
|
||||
word = Risc.syscall_reg(1).set_compiler(compiler)
|
||||
length = Risc.syscall_reg(2).set_compiler(compiler)
|
||||
builder.build do
|
||||
word = message[:receiver].to_reg.known_type(:Word)
|
||||
integer << word[:char_length]
|
||||
string = message[:receiver].to_reg.known_type(:Word)
|
||||
integer << string[:char_length]
|
||||
word << string # into right
|
||||
length << integer # registers
|
||||
end
|
||||
SlotMachine::Macro.emit_syscall( builder , :putstring )
|
||||
compiler
|
||||
|
Reference in New Issue
Block a user