public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: jacob navia <jacob@jacob.remcomp.fr>
To: Andrew Waterman <andrew@sifive.com>
Cc: Peter Bergner <bergner@linux.ibm.com>, binutils@sourceware.org
Subject: Re: Defined illegal instruction
Date: Sat, 10 Feb 2024 13:56:17 +0100	[thread overview]
Message-ID: <80629157-361A-457F-81E1-21D2D23DD99F@jacob.remcomp.fr> (raw)
In-Reply-To: <CA++6G0CCV+NCVQuv=g+VEka_BWDEd4jy4oSNu7TqP3oNWBnV3Q@mail.gmail.com>

OK. So now we have:

unimp and
c.unimp

Both generate 16 bit zeroes if the C extension is present.

If the C extension is not present,
unimp generates 

csrw cycle, x0

If we want to generate the defined unimplemented instruction in 32 bis we write

.long 0

As in the power PC.

I am going through each one of the instructions because I am writing a full documentation for the gas assembler for riscv. It has now approx 200 pages, with explanations about the riscv encoding, the software, its history, etc.


Thanks for your help.
Jacob


> Le 10 févr. 2024 à 01:03, Andrew Waterman <andrew@sifive.com> a écrit :
> 
> If memory serves, the reason we didn't define unimp to be 0x00000000
> is that 0x0000 is a 16-bit-long instruction (because the two LSBs are
> zero).  When targeting RISC-V variants that lack support for 16-bit
> instructions (via the C extension), the inclusion of a 16-bit-long
> instruction (or, I suppose, a pair of 16-bit-long instructions) can
> confuse both humans and disassemblers.  unimp does map to 0x0000 when
> the C extension is provided; it only maps to the
> illegal-write-of-read-only-CSR when the C extension is not provided.
> 
> On Fri, Feb 9, 2024 at 9:48 AM Peter Bergner <bergner@linux.ibm.com> wrote:
>> 
>> On 2/9/24 11:03 AM, jacob navia wrote:
>>> The riscv processor defines an illegal instruction (all zeroes). I do not
>>> find the mnemonic used by gas for this. As far as I remember, the x86 also
>>> has a defined illegal instruction.
>> 
>> I can't speak for riscv or x86, but Power also defines a 32-bit all zero
>> instruction as an illegal instruction.  We do not have a mnemonic for it
>> though.  When we want to emit that into the instruction stream, we just
>> emit a ".long 0" assembler directive.  Maybe the other architectures do
>> the same thing?
>> 
>> Peter
>> 


  reply	other threads:[~2024-02-10 12:56 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-09 17:03 jacob navia
2024-02-09 17:21 ` Peter Bergner
2024-02-10  0:03   ` Andrew Waterman
2024-02-10 12:56     ` jacob navia [this message]
2024-02-11  0:50       ` Andrew Waterman
2024-02-12  7:29       ` Jan Beulich
     [not found]         ` <C47C292B-6017-4D1C-BEEC-E4D9D88BBD8E@jacob.remcomp.fr>
2024-02-13  7:20           ` Jan Beulich
2024-02-13  9:05             ` jacob navia

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=80629157-361A-457F-81E1-21D2D23DD99F@jacob.remcomp.fr \
    --to=jacob@jacob.remcomp.fr \
    --cc=andrew@sifive.com \
    --cc=bergner@linux.ibm.com \
    --cc=binutils@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).