This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Add assembly instruction to GCC


The problem is that the binary being generated is not exactly what I
want. when I simulate my code, I get an "invalid opcode" error and the
address of the instruction is exactly where the disassembly get
screwed up. So I believe that's what's happening. I need to make GCC
treat that "F0 0F 23" as an instruction and put it in the binary
intact and don't mix it with other instructions.
I tried defining a machine instruction in GCC for ia64, but I couldn't
figure out how to generate the assembly for that instruction.

On Fri, Apr 13, 2012 at 1:15 AM, Ian Lance Taylor <iant@google.com> wrote:
>
> Amir Ghanbari <a.ghanbari1990@gmail.com> writes:
>
> > I'm trying to expand X86 ISA. So I have added some hardware to X86 (in
> > Gem5 Simulator) and I have updated X86 decoder to support those
> > instructions. In order to call those instructions I use GCC inline
> > assembly ".byte" directive. something like this : ".byte 0xF0, 0x0F,
> > 0x23;"
> > The problem is when I compile my code using GCC, it changes the
> > instructions that i have created. For instance:
> > I intend to have something generated like this:
> >
> > ? ? 48 89 eb ? ? ? ? ? ? ? mov ? ?%rbp,%rbx
> > ? ? 48 83 e3 fe ? ? ? ? ? and ? ?$0xfffffffffffffffe,%rbx
> > ? ? 48 8b 7c 24 08 ? ? ?mov ? ?0x8(%rsp),%rdi
> > ? ? f0 0f 23 ? ? ? ? ? ? ? ?lock (bad)
> > ? ? 48 89 04 24 ? ? ? ? ?mov ? ?%rax,(%rsp)
> > ? ? 4c 8b 34 24 ? ? ? ? ?mov ? ?(%rsp),%r14
> >
> > but GCC generates something like this:
> >
> > ? ? 48 89 eb ? ? ? ? ? ? ? mov ? ?%rbp,%rbx"
> > ? ? 48 83 e3 fe ? ? ? ? ? and ? ?$0xfffffffffffffffe,%rbx"
> > ? ? 48 8b 7c 24 08 ? ? ?mov ? ?0x8(%rsp),%rdi"
> > ? ? f0 0f ? ? ? ? ? ? ? ? ? ? lock mov (bad),%db1"
> > ? ? 23 48 89 ? ? ? ? ? ? ? and ? ?-0x77(%rax),%ecx"
> > ? ? 04 24 ? ? ? ? ? ? ? ? ? ?add ? ?$0x24,%al"
> > ? ? 4c 8b 34 24 ? ? ? ? ? mov ? ?(%rsp),%r14"
> >
> > Is there a way to tell GCC that "F0 0F 23" is a unique instruction so
> > it wouldn't mix it with other instructions?
>
> I don't understand what you are asking. ?GCC does not generate any
> output that looks like the lines quoted above. ?It looks like you are
> showing us the output of a disassembler, but GCC does not include a
> disassembler. ?And it looks like the bytes that the disassembler is
> showing are the bytes that you want, they just aren't being disassembled
> the way you want them to be. ?It sounds like you need to change your
> disassembler to support your instruction.
>
> Ian


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]