Thanks for the clarification.
You helped me a lot thanks :-)

On Fri, Nov 2, 2018 at 8:41 PM Gabe Black <gabebl...@google.com> wrote:

> You don't need to worry about changing ldstop.isa unless you're adding a
> new microop also, but yes I think that's correct. If you use Eb and Gb, I
> think you're restricting your operand size to always be a byte, but that
> might be what you want.
>
> Gabe
>
> On Thu, Nov 1, 2018 at 9:13 PM Abhishek Singh <
> abhishek.singh199...@gmail.com> wrote:
>
>> There was typo in my last line
>> It is
>> I do *NOT* have to worry for "41" in "41 0f 6c 03" (41 is used for Extension
>> of r/m field, base field, or opcode reg field(reference:
>> http://ref.x86asm.net/coder64.html))
>>
>>
>> On Thu, Nov 1, 2018 at 9:37 PM Abhishek Singh <
>> abhishek.singh199...@gmail.com> wrote:
>>
>>> Hello Gabe,
>>>
>>> Thanks for your help, just to verify what I have understood from your
>>> explanation is, to add new instruction which behaves like MOV
>>> I just need to take care of using proper operands(Gb,Eb), and *REX(Prefix)
>>> will be taken care automatically*.
>>>
>>> From available opcodes in two_byte.isa, I have chosen 6c, 6d, 7c, and 7d.
>>> for example to implement
>>> 6c:New_mov(Eb,Gb)
>>>
>>> I just add following line it in two_byte.isa file
>>> ""
>>>
>>> 0x0D: decode LEGACY_DECODEVAL {
>>>
>>>                 // no prefix
>>>
>>>                 0x0: decode OPCODE_OP_BOTTOM3 {
>>>
>>>                 {
>>>
>>>                       0x4: NEWMOV(Eb,Gb);
>>>
>>>                  }
>>>
>>> }
>>> ""
>>> And just duplicate function by changing name in "
>>> insts/general_purpose/data_transfer/move.py" and "microops/ldstop.isa"
>>>
>>> So if I create binary for "41 0f 6c 03" (for NEWMOV (%r11),%al)
>>>
>>> I do have to worry for "41" in "41 0f 6c 03" (41 is used for Extension
>>> of r/m field, base field, or opcode reg field(reference:
>>> http://ref.x86asm.net/coder64.html))
>>>
>>> Is this correct?
>>>
>>> Best regards,
>>>
>>> Abhishek
>>>
>>>
>>> On Thu, Nov 1, 2018 at 6:25 PM Gabe Black <gabebl...@google.com> wrote:
>>>
>>>> Hi Abhishek. In x86, and in gem5 in general but particularly in x86,
>>>> decoding happens in two steps. The predecoder reads in the bytes which are
>>>> in memory and applies context to them (operating mode, various global
>>>> settings like address sizes) and translates them into a canonical structure
>>>> called an ExtMachInst. In x86, that step gathers up all the prefixes,
>>>> opcode bytes, etc., and stores them in the ExtMachInst. When an instruction
>>>> is specified in the decoder, it has some parameters which specify what
>>>> format its operands come in. That's useful if the basic functionality of
>>>> the instruction is the same, but in different scenarios it uses register
>>>> indices from different parts of the encoding for instance. If that flavor
>>>> of operand is defined to include bits from the REX prefix, then that will
>>>> be factored in when that instruction is set up. The format of those
>>>> specifiers is modeled after an encoding you'll find in the AMD architecture
>>>> manuals where it serves a similar purpose, and you can look at that to get
>>>> an idea of what a particular specifier means.
>>>>
>>>> If you use the same operand suffixes as regular mov does (for instance
>>>> Ev,Gv), then your mov should get its arguments in the same way. For
>>>> reference, E means that operand may be a register or a memory location
>>>> based on the ModRM byte, and G means the "reg" field of modRM. The small v
>>>> means to use the effective operand size.
>>>>
>>>> Gabe
>>>>
>>>> On Thu, Nov 1, 2018 at 9:51 AM Abhishek Singh <
>>>> abhishek.singh199...@gmail.com> wrote:
>>>>
>>>>> Hello Everyone,
>>>>>
>>>>> I wanted to introduce a new implementation for Mov Instruction using
>>>>> R11 register, my new opcodes are placed in two_byte.isa and I have
>>>>> duplicated 'mov' functionality present in files move.py and ldstop.isa.
>>>>>
>>>>> My question is: I understand how to decode opcode for example if the
>>>>> new opcode is '0x11'
>>>>> take top 5 bits and then 3 bits to write a case function in
>>>>> two_byte.isa
>>>>>
>>>>> I am not understanding, how should I make sure it uses REX format same
>>>>> as MOV?
>>>>>
>>>>>
>>>>> For example:
>>>>> In the case of 8 bits:
>>>>>
>>>>>
>>>>> *41* 8a 03 mov (%r11),%al
>>>>>
>>>>> *41* 0f xx 03 new_mov (%r11),%al
>>>>>
>>>>> In the case of 16*: *
>>>>>
>>>>> *66 41* 8b 03 mov (%r11),%ax
>>>>>
>>>>> *66 41* 0f xx 03 new_mov (%r11),%ax
>>>>>
>>>>>
>>>>> In the case of 32*: *
>>>>>
>>>>> *41* 8b 03 mov (%r11),%eax
>>>>>
>>>>> *41* 0f xx 03 new_mov (%r11),%eax
>>>>>
>>>>>
>>>>> In the case of 64*: *
>>>>>
>>>>> *49* 8b 03 mov (%r11),%rax
>>>>>
>>>>> *49* 0f xx 03 new_mov (%r11),%rax
>>>>>
>>>>> ***Numbers in bold are REX bits, xx are new opcodes.
>>>>>
>>>>> Gabe or anyone who has any information on this?
>>>>>
>>>>>
>>>>> Best regards,
>>>>>
>>>>> Abhishek
>>>>> _______________________________________________
>>>>> gem5-users mailing list
>>>>> gem5-users@gem5.org
>>>>> http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users
>>>>
>>>> _______________________________________________
>>>> gem5-users mailing list
>>>> gem5-users@gem5.org
>>>> http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users
>>>
>>>
_______________________________________________
gem5-users mailing list
gem5-users@gem5.org
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users

Reply via email to