[LLVMdev] MFENCE encoding

Mon Ping Wang wangmp at apple.com
Thu Oct 16 22:46:42 PDT 2008


I have a problem with creating a MFENCE on X86 with SSE

In X86InstrSSE.td, a MFENCE is
def MFENCE : I<0xAE, MRM6m, (outs), (ins),
               "mfence", [(int_x86_sse2_mfence)]>, TB, Requires< 

In X86CodeEmitter.cpp in emitInstruction

  case X86II::MRM6m: case X86II::MRM7m: {
    intptr_t PCAdj = (CurOp+4 != NumOps) ?
      (MI.getOperand(CurOp+4).isImm() ? X86InstrInfo::sizeOfImm 
(Desc) : 4) : 0;

If I'm reading the code correctly, the NumOps is 0 and CurOp is 0 so  
we to get the 4th operand from the MFENCE operation which has no  
operands so we get an error.  I'm not sure what this code is trying to  
do.  Should the condition be < NumOps?

  -- Mon Ping

More information about the llvm-dev mailing list