|
|
@ -145,32 +145,42 @@ void AddressSpace::Link(EmittedBlockInfo& block_info) { |
|
|
case LinkTarget::ReturnFromRunCode: |
|
|
case LinkTarget::ReturnFromRunCode: |
|
|
c.B(prelude_info.return_from_run_code); |
|
|
c.B(prelude_info.return_from_run_code); |
|
|
break; |
|
|
break; |
|
|
|
|
|
// { this, vaddr, size }
|
|
|
case LinkTarget::ReadMemory8: |
|
|
case LinkTarget::ReadMemory8: |
|
|
c.BL(prelude_info.read_memory_8); |
|
|
|
|
|
|
|
|
c.LDR(X2, 1); |
|
|
|
|
|
c.BL(prelude_info.read_memory); |
|
|
break; |
|
|
break; |
|
|
case LinkTarget::ReadMemory16: |
|
|
case LinkTarget::ReadMemory16: |
|
|
c.BL(prelude_info.read_memory_16); |
|
|
|
|
|
|
|
|
c.LDR(X2, 2); |
|
|
|
|
|
c.BL(prelude_info.read_memory); |
|
|
break; |
|
|
break; |
|
|
case LinkTarget::ReadMemory32: |
|
|
case LinkTarget::ReadMemory32: |
|
|
c.BL(prelude_info.read_memory_32); |
|
|
|
|
|
|
|
|
c.LDR(X2, 4); |
|
|
|
|
|
c.BL(prelude_info.read_memory); |
|
|
break; |
|
|
break; |
|
|
case LinkTarget::ReadMemory64: |
|
|
case LinkTarget::ReadMemory64: |
|
|
c.BL(prelude_info.read_memory_64); |
|
|
|
|
|
|
|
|
c.LDR(X2, 8); |
|
|
|
|
|
c.BL(prelude_info.read_memory); |
|
|
break; |
|
|
break; |
|
|
case LinkTarget::ReadMemory128: |
|
|
case LinkTarget::ReadMemory128: |
|
|
c.BL(prelude_info.read_memory_128); |
|
|
c.BL(prelude_info.read_memory_128); |
|
|
break; |
|
|
break; |
|
|
|
|
|
// { this, vaddr, size }
|
|
|
case LinkTarget::WrappedReadMemory8: |
|
|
case LinkTarget::WrappedReadMemory8: |
|
|
c.BL(prelude_info.wrapped_read_memory_8); |
|
|
|
|
|
|
|
|
c.LDR(X2, 1); |
|
|
|
|
|
c.BL(prelude_info.wrapped_read_memory); |
|
|
break; |
|
|
break; |
|
|
case LinkTarget::WrappedReadMemory16: |
|
|
case LinkTarget::WrappedReadMemory16: |
|
|
c.BL(prelude_info.wrapped_read_memory_16); |
|
|
|
|
|
|
|
|
c.LDR(X2, 2); |
|
|
|
|
|
c.BL(prelude_info.wrapped_read_memory); |
|
|
break; |
|
|
break; |
|
|
case LinkTarget::WrappedReadMemory32: |
|
|
case LinkTarget::WrappedReadMemory32: |
|
|
c.BL(prelude_info.wrapped_read_memory_32); |
|
|
|
|
|
|
|
|
c.LDR(X2, 4); |
|
|
|
|
|
c.BL(prelude_info.wrapped_read_memory); |
|
|
break; |
|
|
break; |
|
|
case LinkTarget::WrappedReadMemory64: |
|
|
case LinkTarget::WrappedReadMemory64: |
|
|
c.BL(prelude_info.wrapped_read_memory_64); |
|
|
|
|
|
|
|
|
c.LDR(X2, 8); |
|
|
|
|
|
c.BL(prelude_info.wrapped_read_memory); |
|
|
break; |
|
|
break; |
|
|
case LinkTarget::WrappedReadMemory128: |
|
|
case LinkTarget::WrappedReadMemory128: |
|
|
c.BL(prelude_info.wrapped_read_memory_128); |
|
|
c.BL(prelude_info.wrapped_read_memory_128); |
|
|
@ -190,32 +200,41 @@ void AddressSpace::Link(EmittedBlockInfo& block_info) { |
|
|
case LinkTarget::ExclusiveReadMemory128: |
|
|
case LinkTarget::ExclusiveReadMemory128: |
|
|
c.BL(prelude_info.exclusive_read_memory_128); |
|
|
c.BL(prelude_info.exclusive_read_memory_128); |
|
|
break; |
|
|
break; |
|
|
|
|
|
// { this, vaddr, value, size }
|
|
|
case LinkTarget::WriteMemory8: |
|
|
case LinkTarget::WriteMemory8: |
|
|
c.BL(prelude_info.write_memory_8); |
|
|
|
|
|
|
|
|
c.LDR(X3, 1); |
|
|
|
|
|
c.BL(prelude_info.write_memory); |
|
|
break; |
|
|
break; |
|
|
case LinkTarget::WriteMemory16: |
|
|
case LinkTarget::WriteMemory16: |
|
|
c.BL(prelude_info.write_memory_16); |
|
|
|
|
|
|
|
|
c.LDR(X3, 2); |
|
|
|
|
|
c.BL(prelude_info.write_memory); |
|
|
break; |
|
|
break; |
|
|
case LinkTarget::WriteMemory32: |
|
|
case LinkTarget::WriteMemory32: |
|
|
c.BL(prelude_info.write_memory_32); |
|
|
|
|
|
|
|
|
c.LDR(X3, 4); |
|
|
|
|
|
c.BL(prelude_info.write_memory); |
|
|
break; |
|
|
break; |
|
|
case LinkTarget::WriteMemory64: |
|
|
case LinkTarget::WriteMemory64: |
|
|
c.BL(prelude_info.write_memory_64); |
|
|
|
|
|
|
|
|
c.LDR(X3, 8); |
|
|
|
|
|
c.BL(prelude_info.write_memory); |
|
|
break; |
|
|
break; |
|
|
case LinkTarget::WriteMemory128: |
|
|
case LinkTarget::WriteMemory128: |
|
|
c.BL(prelude_info.write_memory_128); |
|
|
c.BL(prelude_info.write_memory_128); |
|
|
break; |
|
|
break; |
|
|
case LinkTarget::WrappedWriteMemory8: |
|
|
case LinkTarget::WrappedWriteMemory8: |
|
|
c.BL(prelude_info.wrapped_write_memory_8); |
|
|
|
|
|
|
|
|
c.LDR(X3, 1); |
|
|
|
|
|
c.BL(prelude_info.wrapped_write_memory); |
|
|
break; |
|
|
break; |
|
|
case LinkTarget::WrappedWriteMemory16: |
|
|
case LinkTarget::WrappedWriteMemory16: |
|
|
c.BL(prelude_info.wrapped_write_memory_16); |
|
|
|
|
|
|
|
|
c.LDR(X3, 2); |
|
|
|
|
|
c.BL(prelude_info.wrapped_write_memory); |
|
|
break; |
|
|
break; |
|
|
case LinkTarget::WrappedWriteMemory32: |
|
|
case LinkTarget::WrappedWriteMemory32: |
|
|
c.BL(prelude_info.wrapped_write_memory_32); |
|
|
|
|
|
|
|
|
c.LDR(X3, 4); |
|
|
|
|
|
c.BL(prelude_info.wrapped_write_memory); |
|
|
break; |
|
|
break; |
|
|
case LinkTarget::WrappedWriteMemory64: |
|
|
case LinkTarget::WrappedWriteMemory64: |
|
|
c.BL(prelude_info.wrapped_write_memory_64); |
|
|
|
|
|
|
|
|
c.LDR(X3, 8); |
|
|
|
|
|
c.BL(prelude_info.wrapped_write_memory); |
|
|
break; |
|
|
break; |
|
|
case LinkTarget::WrappedWriteMemory128: |
|
|
case LinkTarget::WrappedWriteMemory128: |
|
|
c.BL(prelude_info.wrapped_write_memory_128); |
|
|
c.BL(prelude_info.wrapped_write_memory_128); |
|
|
|