RIS C -V Ошибка цепочки инструментов: неизвестная псевдооперация: `.insn ' - PullRequest
1 голос
/ 21 апреля 2020

Я добавил свою собственную инструкцию для спайка RIS C -V, как этот учебник . Он сказал, что мне нужно перестроить цепочку инструментов, которая занимает слишком много времени для меня.

Поэтому я попытался выяснить, как использовать мою инструкцию без перестройки цепочки инструментов, и из здесь выяснил, что это может использоваться:

Эта директива разрешает представление инструкций цифрой c и заставляет ассемблер вставлять операнды в соответствии с одним из форматов инструкций для '.insn' (RIS C - V-форматы). Например, инструкция 'add a0, a1, a2' может быть записана как '.insn r 0x33, 0, 0, a0, a1, a2' .

Однако , Я попытался в примере вызвать add a0, a1, a2, используя .insn r 0x33, 0, 0, a0, a1, a2, и появляется сообщение об ошибке:

riscv64-unknown-elf-gcc hello.c myasm.S -o hello
myasm.S: Assembler messages:
myasm.S:8: Error: unknown pseudo-op: `.insn'

Моя версия на ассемблере

riscv64-unknown-elf-as --version
GNU assembler (GNU Binutils) 2.29
Copyright (C) 2017 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or later.
This program has absolutely no warranty.
This assembler was configured for a target of `riscv64-unknown-elf'.

Это из-за моего набора инструментов? Или я неправильно использую директиву?

Любая помощь будет признательна.

Здравствуйте. c

#include <stdio.h>
extern int aw(int x, int y);

int main() {
 int result = 0;
 result = aw(0xC0, 0x0B); //0xAB
 printf("Result 0x%x\n",result);
 return result;
}

myasm .S

.section .text

.global aw
.type aw, @function
aw:
    .insn r 0x33, 0, 0, a0, a0, a1
    ret
...