[llvm-commits] XOP encoding patch
Jan Sjodin
jan_sjodin at yahoo.com
Mon Dec 12 09:47:17 PST 2011
I create a new patch which has all the XOP instructions.
- Jan
----- Original Message -----
> From: Jan Sjodin <jan_sjodin at yahoo.com>
> To: Bruno Cardoso Lopes <bruno.cardoso at gmail.com>; Eli Friedman <eli.friedman at gmail.com>
> Cc: "llvm-commits at cs.uiuc.edu" <llvm-commits at cs.uiuc.edu>
> Sent: Friday, December 9, 2011 10:21 AM
> Subject: Re: [llvm-commits] XOP encoding patch
>
> Here is an updated patch with XOP8 and XOP9. It looks cleaner. Let me know what
> you think.
>
> - Jan
>
>
>
> ----- Original Message -----
>> From: Bruno Cardoso Lopes <bruno.cardoso at gmail.com>
>> To: Eli Friedman <eli.friedman at gmail.com>
>> Cc: Jan Sjodin <jan_sjodin at yahoo.com>;
> "llvm-commits at cs.uiuc.edu" <llvm-commits at cs.uiuc.edu>
>> Sent: Thursday, December 8, 2011 8:50 PM
>> Subject: Re: [llvm-commits] XOP encoding patch
>>
>> Hi,
>>
>> On Thu, Dec 8, 2011 at 7:06 PM, Eli Friedman <eli.friedman at gmail.com>
>
>> wrote:
>>> On Thu, Dec 8, 2011 at 12:49 PM, Jan Sjodin
> <jan_sjodin at yahoo.com>
>> wrote:
>>>> This patch handles the encoding of XOP instructions. I included
> one
>>>> instruction for each kind including a test.
>>>
>>> +multiclass xop4opimm<bits<8> opc, string OpcodeStr> {
>>> + def ri : IXOPi8<opc, MRMSrcReg, (outs VR128:$dst),
>>> + (ins VR128:$src1, VR128:$src2, i32i8imm:$src3),
>>>
>>> As discussed on IRC, you want i8imm here, not i32i8imm.
>>>
>>> + // If there is an additional 5th operand it must be an
> immediate,
>> which
>>> + // is encoded in bits[3:0]
>>> + if(CurOp != NumOps) {
>>> + const MCOperand &MIMM = MI.getOperand(CurOp++);
>>> + if(MIMM.isImm()) {
>>> + unsigned Val = MIMM.getImm();
>>> + assert(Val < 16 && "Immediate operand value
> out
>> of range");
>>> + RegNum |= Val;
>>> + }
>>> + }
>>>
>>> No tabs, please.
>>>
>>> This patch doesn't include disassembler support; are you planning
> to
>> add that?
>>>
>>> Someone more familiar with the x86 instruction patterns should
>>> probably review this in addition.
>>
>> Regarding the MC code emitter, my suggestion here is to factor out
>> common code from EmitVEXOpcodePrefix, and have a new
>> EmitXOPOpcodePrefix method which reuses the common part. IMO adding
>> several tricky conditions to get around the differences between them
>> isn't the way to go (and compromisses the code readability). That
>> means whenever one of the VEX prefixes has a slightly different
>> meaning in XOP, there should be a new TSFlags for it.
>>
>> --
>> Bruno Cardoso Lopes
>> http://www.brunocardoso.cc
>>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0059_xop_encoding_complete.patch
Type: application/octet-stream
Size: 40407 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20111212/d4298ec2/attachment.obj>
More information about the llvm-commits
mailing list