Загрузка значений для регистрации в RISC-V - PullRequest
0 голосов
/ 22 сентября 2019

просто хотел, чтобы кто-то помог мне с загрузкой некоторых значений в определенные регистры.

Задача состояла в том, чтобы "дать указание компилятору сохранить значения 0x2222333344445555 и 0x1111222233334444 по адресам 0x1000100010001000 и 0x1000100010001100 соответственно. При загрузке во время выполнениязначения в регистрах x6 и x7 ... ".

Из чтения информации, предоставленной из файла PDF, а также вопроса, пока мой код выглядит так:

ORG 0x1000100010001000
a: DD 0x2222333344445555

ORG 0x1000100010001100
b: DD 0x1111222233334444

1 Ответ

1 голос
/ 22 сентября 2019

Я предполагаю, что это rv64i, когда задаете подобные вопросы в risc-v, вам нужно указать набор инструкций.

вы можете начать, дав компилятору подсказку

void fun ( void )
{
    unsigned long long *a;
    a=0x1000100010001000;
    *a=0x2222333344445555;
    a=0x1000100010001100;
    *a=0x1111222233334444;
}

дляпример:

0000000000000000 <fun>:
   0:   10001737            lui x14,0x10001
   4:   02071793            slli    x15,x14,0x20
   8:   00000637            lui x12,0x0
   c:   97ba                    add x15,x15,x14
   e:   00063703            ld  x14,0(x12) # 0 <fun>
  12:   000006b7            lui x13,0x0
  16:   e398                    sd  x14,0(x15)
  18:   000007b7            lui x15,0x0
  1c:   0007b783            ld  x15,0(x15) # 0 <fun>
  20:   0006b703            ld  x14,0(x13) # 0 <fun>
  24:   e398                    sd  x14,0(x15)
  26:   8082                    ret

Disassembly of section .srodata.cst8:

0000000000000000 <.LC0>:
   0:   5555    
   2:   4444    
   4:   22223333

0000000000000008 <.LC1>:
   8:   1100    
   a:   1000    
   c:   1000    
   e:   1000    

0000000000000010 <.LC2>:
  10:   4444    
  12:   22223333
  16:   1111   

, который показывает оба варианта решения, увеличивая значение в нескольких инструкциях.Или загрузите значение в регистр.

Хорошо, да, компилятор использовал rv64ic, он жаловался на мою командную строку, поэтому я использовал:

riscv64-none-elf-gcc -c -O2 so.c -o so.o

Я создал кросс-компилятор, который вы можетевозможно, используйте Godbolt, если хотите.

lui дает вам 20 битов немедленного.При использовании инструкций только любое 64-битное значение заняло бы 3 luis, некоторое смещение и орринг.И Адди или Орри.Затем используйте sd для хранения двойного слова (64 бита).

...