pike.git / src / code / amd64.c

version» Context lines:

pike.git/src/code/amd64.c:151:   static void low_mov_mem_reg(enum amd64_reg from_reg, ptrdiff_t offset, enum amd64_reg to_reg)   {    opcode( 0x8b );       /* Using r13 or rbp will trigger RIP relative    if rex.W is set    */    if( offset == 0 && from_reg != REG_R13 && from_reg != REG_RBP )    {    modrm( 0, to_reg, from_reg ); +  if ((from_reg & 0x7) == 0x4) { +  /* r12 and RSP trigger use of the SIB byte. */ +  sib(0, 4, from_reg);    } -  +  }    else    {    if( offset < 128 && offset >= -128 )    {    modrm( 1, to_reg, from_reg ); -  +  if ((from_reg & 0x7) == 0x4) { +  /* r12 and RSP trigger use of the SIB byte. */ +  sib(0, 4, from_reg); +  }    ib( offset );    }    else    {    modrm( 2, to_reg, from_reg ); -  +  if ((from_reg & 0x7) == 0x4) { +  /* r12 and RSP trigger use of the SIB byte. */ +  sib(0, 4, from_reg); +  }    id(offset);    }    }   }      static void mov_mem_reg( enum amd64_reg from_reg, ptrdiff_t offset, enum amd64_reg to_reg )   {    rex( 1, to_reg, 0, from_reg );    low_mov_mem_reg( from_reg, offset, to_reg );   }