将 64 位地址加载到寄存器中

Loading a 64 bit address into a register

我需要让我的 RISC-V 程序集即时编写指令 -(这是 Forth,因此用户可以扩展语言)。 当我使用 32 位 ISA 时,这相对简单,假设我想从我当前正在写入的地址获得偏移量,我会做一些事情,比如写出操作代码:

 lui s8, [upper 20 bits of address]
 addi s8, s8, [offset]

当我有 64 位地址时,这不再有效,因为我必须写出实际的操作码,而不仅仅是使用像

这样的汇编技巧
li s8, address

我很困惑如何做。正确的做法是什么?

基本上我通过将数字的高 32 位加载到低 32 位,然后左移 32 位并加载低 32 位来解决这个问题。

这是一个典型的输出组件:

  0x0000003ff7dbd040:  li  s8,63                     #0x3f
  0x0000003ff7dbd044:  slli    s8,s8,0x20            #shift left 32 bits
  0x0000003ff7dbd048:  lui t0,0xf7dbd                #upper half load
  0x0000003ff7dbd04c:  ori t0,t0,0                   
  0x0000003ff7dbd050:  slli    t0,t0,0x20
  0x0000003ff7dbd054:  srli    t0,t0,0x20
  0x0000003ff7dbd058:  or  s8,s8,t0