dotnet/runtime

Merge Address Mode emit helpers to a single method

Open

#9 534 ouverte le 11 janv. 2018

Voir sur GitHub
 (5 commentaires) (1 réaction) (0 assignés)C# (5 445 forks)batch import
area-CodeGen-coreclrenhancementhelp wanted

Métriques du dépôt

Stars
 (17 886 stars)
Métriques de merge PR
 (Merge moyen 12j 11h) (661 PRs mergées en 30 j)

Description

Currently, we have several emitIns methods to support the various address modes we emit.

These include:

  • emitIns_R_AR(instruction ins, emitAttr attr, regNumber ireg, regNumber base, int disp)
  • emitIns_R_AI(instruction ins, emitAttr attr, regNumber ireg, ssize_t disp)
  • emitIns_R_ARR(instruction ins, emitAttr attr, regNumber ireg, regNumber base, regNumber index, int disp)
  • emitIns_R_ARX(instruction ins, emitAttr attr, regNumber ireg, regNumber base, regNumber index, unsigned mul, int disp)
  • emitIns_R_AX(instruction ins, emitAttr attr, regNumber ireg, regNumber reg, unsigned mul, int disp)

In most cases, these are all doing the same thing and the difference is the parameters that are passed in (baseReg/base, indxReg/index, scale/mul, and offs/disp).

These values are general pulled from an Indir node which correctly sets the defaults on these when unused (reg = REG_NA, scale = 1, offs = 0).

It may be useful (and would allow us to simplify some other code) if we combined these into a single emitIns_R_A method and relied on the correct defaults being set when they are unused (adding in asserts to ensure that they are correct, of course)

  • emitIns_R_A(instruction ins, emitAttr attr, regNumber reg1, regNumber baseReg, regNumber indxReg, size_t scale, ssize_t offs)

There are some others (in the form of emitIns_A*_R) that could probably also be combined into a single emitIns_A_R method

category:implementation theme:emitter skill-level:intermediate cost:medium impact:medium

Guide contributeur