[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug gas/27436] New: RISC-V inconsistent handling of rv32 shift with cou
From: |
wilson at gcc dot gnu.org |
Subject: |
[Bug gas/27436] New: RISC-V inconsistent handling of rv32 shift with count > 32 |
Date: |
Thu, 18 Feb 2021 20:31:00 +0000 |
https://sourceware.org/bugzilla/show_bug.cgi?id=27436
Bug ID: 27436
Summary: RISC-V inconsistent handling of rv32 shift with count
> 32
Product: binutils
Version: unspecified
Status: NEW
Severity: normal
Priority: P2
Component: gas
Assignee: unassigned at sourceware dot org
Reporter: wilson at gcc dot gnu.org
Target Milestone: ---
rohan:2255$ cat tmp.s
slli a0,a0,63
rohan:2256$ riscv32-unknown-elf-as -march=rv64g tmp.s
rohan:2257$ riscv32-unknown-elf-as -march=rv64gc tmp.s
rohan:2258$ riscv32-unknown-elf-as -march=rv32g tmp.s
tmp.s: Assembler messages:
tmp.s:1: Error: Improper shift amount (63)
rohan:2259$ riscv32-unknown-elf-as -march=rv32gc tmp.s
rohan:2260$ riscv32-unknown-elf-objdump -dr -Mno-aliases a.out
a.out: file format elf32-littleriscv
Disassembly of section .text:
00000000 <.text>:
0: 157e c.slli a0,0x3f
rohan:2261$
An rv32 compressed shift with count greater than 32 is specified as NSE
(non-standard extension). So it isn't a valid shift, but rather an encoding
that can be used by any vendor for a non-standard extension. We allow hints to
be used for extensions, but those are encoded as nops. This is not a nop. I
think we should disallow this, and force someone who wants to use this encoding
for a NSE to either use .insn or use a local binutils patch.
If we disallow it, the fix is to make C> work the same as >, i.e. use xlen
instead of 64 when testing whether the shift count is valid.
--
You are receiving this mail because:
You are on the CC list for the bug.
- [Bug gas/27436] New: RISC-V inconsistent handling of rv32 shift with count > 32,
wilson at gcc dot gnu.org <=