Issue: Unrecognized opcode addw when building for RV32 with Zalrsc
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 48/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Ferma
- Stack tecnologico
- c
- Ambito
- operating-systems
Direzione di ricerca
Esamina lib/sbi/riscv_atomic.c intorno alla riga 51, concentrandoti sul ramo SIZEOF_LONG == 4 dell’implementazione di Zalrsc e sul relativo assembly inline. Esegui nuovamente il comando di build RV32 fornito e conferma che la build venga completata senza un opcode addw non riconosciuto.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Hello,
I am experiencing an error when building with 32-bit compiler using LR/SC extension. According to the platform requirements documentation, I can skip Zaamo extension and use Zalrsc. On 32-bit environment, using this command:
make PLATFORM=generic PLATFORM_RISCV_XLEN=32 CROSS_COMPILE=riscv32-unknown-linux-gnu- PLATFORM_RISCV_ISA=rv32imc_zalrsc
I get the following error:
/tmp/opensbi/lib/sbi/riscv_atomic.c: Assembler messages:
/tmp/opensbi/lib/sbi/riscv_atomic.c:51: Error: unrecognized opcode `addw a4,a5,a1'
/tmp/opensbi/lib/sbi/riscv_atomic.c:51: Error: unrecognized opcode `addw a3,a4,a5'
The error is correct because, according to RISCV documentation (Instruct Set Manual) pages 42-43:
Most integer computational instructions operate on XLEN-bit values. Additional instruction variants are
provided to manipulate 32-bit values in RV64I, indicated by a 'W' suffix to the opcode. These "*W"
instructions ignore the upper 32 bits of their inputs and always produce 32-bit signed values, sign-
extending them to 64 bits, i.e. bits XLEN-1 through 31 are equal.
ADDW and SUBW are RV64I-only instructions that are defined analogously to ADD and SUB but
operate on 32-bit values and produce signed 32-bit results.
So addw should not appear on 32-bit. The error appears to be in this function:
#elif __riscv_zalrsc
long ret, temp;
#if __SIZEOF_LONG__ == 4
__asm__ __volatile__("1:lr.w.aqrl %1,%0\n"
" addw %2,%1,%3\n"
" sc.w.aqrl %2,%2,%0\n"
" bnez %2,1b"
: "+A"(atom->counter), "=&r"(ret), "=&r"(temp)
: "r"(value)
: "memory");
#elif __SIZEOF_LONG__ == 8
__asm__ __volatile__("1:lr.d.aqrl %1,%0\n"
" add %2,%1,%3\n"
" sc.d.aqrl %2,%2,%0\n"
" bnez %2,1b"
: "+A"(atom->counter), "=&r"(ret), "=&r"(temp)
: "r"(value)
: "memory");
Am I missing something?
- Lingua principale
- C
- Stelle
- 1.5k
- Fork
- 712
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di riscv-software-src/opensbi
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
riscv-software-src/opensbi#425 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
riscv-software-src/opensbi#424 · 1 commento ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 72/100
riscv-software-src/opensbi#427 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 62/100
riscv-software-src/opensbi#426 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
riscv-software-src/opensbi#418 · 1 commento ·
Tutte le issue di riscv-software-src/opensbi
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
python-pillow/Pillow#10087 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
OpenPrinting/cups#1729 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
awslabs/amazon-kinesis-video-streams-webrtc-sdk-c#2406 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
DaveGamble/cJSON#1094 ·
-
status:needs-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 90/100
PX4/PX4-Autopilot#28923 ·
I maintainer di solito rispondono entro 1 giorno