Custom Instructions

Nick Clifton nickc@redhat.com
Mon Sep 27 11:05:00 GMT 2010


Hi Nick,

> since this is a group all about binutils, i hope i'm at the right place for my
> question.

It is.

> the problem starts at the basics: no matter how much i've looked in the
> interwebs, i still don't understand i386-opc.tbl. for example, i don't know what
> the parts of this line mean: "mov, 2, 0xc6, 0x0, 1, 0, W|Modrm|No_sSuf|No_ldSuf,
> { Imm8|Imm16|Imm32|Imm32S,
> Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|
> Disp32|Disp32S
> }".

That would be because there is no documentation.  The source code is the 
documentation.  (And of course it is so well written that it needs no 
documentation... :-)

Since i386-opc.tbl is not a C source file, the first place to look is 
the Makefile.am file in the opcodes directory.  There you will find that 
i386-opc.tbl is an input file to a generator program built from the 
i386-gen.c source file.  So read that file and work out how the 
generator works.

> ok, "mov" is the mnemonic, "2" is (guess) the number of operands, in
> brackets the type of operands accepted (not all of them clear), but what about
> the two hexadecimal values, the "1" and "0"(if not "0" then something like
> "Cpu386", "Cpu64"), "No_*Suf"?

Look at the body of the process_i386_opcodes() function in i386-gen.c. 
There you see that from each line it reads a name, followed by a slot 
number in a hash table.  The rest of the line is saved in this hash 
table slot for later processing (by output_i386_opcode).

> one further question would be, do i have to change other files as well (e.g.
> i386-opc.h, i386-init.h etc)?

No - but - you do need to configure your build tree with maintainer mode 
enabled, so that changes to i386-opc.tbl will trigger an automatic 
regeneration of files like i386-opc.h.  Ie when you are configuring your 
binutils build add:

    <path-to-sources>/configure ... --enable-maintainer-mode ...

Cheers
   Nick



More information about the Binutils mailing list