diff options
Diffstat (limited to 'src/jit/emitarm.h')
-rw-r--r-- | src/jit/emitarm.h | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/jit/emitarm.h b/src/jit/emitarm.h index 1440148f42..1e286e8425 100644 --- a/src/jit/emitarm.h +++ b/src/jit/emitarm.h @@ -10,10 +10,8 @@ struct CnsVal { - int cnsVal; -#ifdef RELOC_SUPPORT + int cnsVal; bool cnsReloc; -#endif }; insSize emitInsSize(insFormat insFmt); @@ -109,6 +107,10 @@ bool emitInsIsLoad(instruction ins); bool emitInsIsStore(instruction ins); bool emitInsIsLoadOrStore(instruction ins); +// Generate code for a load or store operation and handle the case +// of contained GT_LEA op1 with [base + index<<scale + offset] +void emitInsLoadStoreOp(instruction ins, emitAttr attr, regNumber dataReg, GenTreeIndir* indir); + /***************************************************************************** * * Convert between an index scale in bytes to a smaller encoding used for @@ -230,6 +232,13 @@ inline static bool insOptsROR(insOpts opt) return (opt == INS_OPTS_ROR); } +// Returns the number of bits used by the given 'size'. +inline static unsigned getBitWidth(emitAttr size) +{ + assert(size <= EA_8BYTE); + return (unsigned)size * BITS_PER_BYTE; +} + /************************************************************************/ /* The public entry points to output instructions */ /************************************************************************/ @@ -239,7 +248,9 @@ static bool emitIns_valid_imm_for_alu(int imm); static bool emitIns_valid_imm_for_mov(int imm); static bool emitIns_valid_imm_for_small_mov(regNumber reg, int imm, insFlags flags); static bool emitIns_valid_imm_for_add(int imm, insFlags flags); +static bool emitIns_valid_imm_for_cmp(int imm, insFlags flags); static bool emitIns_valid_imm_for_add_sp(int imm); +static bool emitIns_valid_imm_for_ldst_offset(int imm, emitAttr size); void emitIns(instruction ins); |