Information about the activation record for the method is built up as we generate machine code.
More...
Public Member Functions |
| | Assembler (CodeAlloc &codeAlloc, Allocator &dataAlloc, Allocator &alloc, AvmCore *core, LogControl *logc, const Config &config) |
| void | compile (Fragment *frag, Allocator &alloc, bool optimize verbose_only(, LInsPrinter *)) |
| void | endAssembly (Fragment *frag) |
| void | assemble (Fragment *frag, LirFilter *reader) |
| void | beginAssembly (Fragment *frag) |
| void | setNoiseGenerator (Noise *noise) |
| void | releaseRegisters () |
| void | patch (GuardRecord *lr) |
| void | patch (SideExit *exit) |
| AssmError | error () |
| void | setError (AssmError e) |
| void | cleanupAfterError () |
| void | clearNInsPtrs () |
| void | reset () |
| | debug_only (void pageValidate();) debug_only(void resourceConsistencyCheck() |
| NIns * | genEpilogue () |
| uint32_t | arReserve (LIns *ins) |
| void | arFree (LIns *ins) |
| void | arReset () |
| Register | registerAlloc (LIns *ins, RegisterMask allow, RegisterMask prefer) |
| Register | registerAllocTmp (RegisterMask allow) |
| void | registerResetAll () |
| void | evictAllActiveRegs () |
| void | evictSomeActiveRegs (RegisterMask regs) |
| void | evictScratchRegsExcept (RegisterMask ignore) |
| void | intersectRegisterState (RegAlloc &saved) |
| void | unionRegisterState (RegAlloc &saved) |
| void | assignSaved (RegAlloc &saved, RegisterMask skip) |
| LIns * | findVictim (RegisterMask allow) |
| Register | getBaseReg (LIns *ins, int &d, RegisterMask allow) |
| void | getBaseReg2 (RegisterMask allowValue, LIns *value, Register &rv, RegisterMask allowBase, LIns *base, Register &rb, int &d) |
| int | findMemFor (LIns *ins) |
| Register | findRegFor (LIns *ins, RegisterMask allow) |
| void | findRegFor2 (RegisterMask allowa, LIns *ia, Register &ra, RegisterMask allowb, LIns *ib, Register &rb) |
| Register | findSpecificRegFor (LIns *ins, Register r) |
| Register | findSpecificRegForUnallocated (LIns *ins, Register r) |
| Register | deprecated_prepResultReg (LIns *ins, RegisterMask allow) |
| Register | prepareResultReg (LIns *ins, RegisterMask allow) |
| void | deprecated_freeRsrcOf (LIns *ins) |
| void | freeResourcesOf (LIns *ins) |
| void | evictIfActive (Register r) |
| void | evict (LIns *vic) |
| RegisterMask | hint (LIns *ins) |
| void | getBaseIndexScale (LIns *addp, LIns **base, LIns **index, int *scale) |
| void | codeAlloc (NIns *&start, NIns *&end, NIns *&eip verbose_only(, size_t &nBytes), size_t byteLimit=0) |
| bool | deprecated_isKnownReg (Register r) |
| void | swapCodeChunks () |
| | verbose_only (void asm_inc_m32(uint32_t *);) void asm_mmq(Register rd |
| void | asm_jmp (LIns *ins, InsList &pending_lives) |
| void | asm_jcc (LIns *ins, InsList &pending_lives) |
| void | asm_jov (LIns *ins, InsList &pending_lives) |
| void | asm_x (LIns *ins) |
| void | asm_xcc (LIns *ins) |
| NIns * | asm_exit (LIns *guard) |
| NIns * | asm_leave_trace (LIns *guard) |
| void | asm_store32 (LOpcode op, LIns *val, int d, LIns *base) |
| void | asm_store64 (LOpcode op, LIns *val, int d, LIns *base) |
| void | asm_restore (LIns *, Register) |
| bool | asm_maybe_spill (LIns *ins, bool pop) |
| void | asm_spill (Register rr, int d, bool quad) |
| void | asm_load64 (LIns *ins) |
| void | asm_ret (LIns *ins) |
| void | asm_immd (LIns *ins) |
| void | asm_condd (LIns *ins) |
| void | asm_cond (LIns *ins) |
| void | asm_arith (LIns *ins) |
| void | asm_neg_not (LIns *ins) |
| void | asm_load32 (LIns *ins) |
| void | asm_cmov (LIns *ins) |
| void | asm_param (LIns *ins) |
| void | asm_immi (LIns *ins) |
| void | asm_fneg (LIns *ins) |
| void | asm_fop (LIns *ins) |
| void | asm_i2d (LIns *ins) |
| void | asm_ui2d (LIns *ins) |
| void | asm_d2i (LIns *ins) |
| void | asm_nongp_copy (Register r, Register s) |
| void | asm_call (LIns *) |
| Register | asm_binop_rhs_reg (LIns *ins) |
| NIns * | asm_branch (bool branchOnFalse, LIns *cond, NIns *targ) |
| NIns * | asm_branch_ov (LOpcode op, NIns *targ) |
| void | asm_switch (LIns *ins, NIns *target) |
| void | asm_jtbl (LIns *ins, NIns **table) |
| void | asm_insert_random_nop () |
| void | emitJumpTable (SwitchInfo *si, NIns *target) |
| void | assignSavedRegs () |
| void | reserveSavedRegs () |
| void | assignParamRegs () |
| void | handleLoopCarriedExprs (InsList &pending_lives) |
| void | nInit (AvmCore *) |
| void | nBeginAssembly () |
| Register | nRegisterAllocFromSet (RegisterMask set) |
| void | nRegisterResetAll (RegAlloc &a) |
| void | nPatchBranch (NIns *branch, NIns *location) |
| void | nFragExit (LIns *guard) |
| RegisterMask | nHint (LIns *ins) |
Static Public Member Functions |
| static bool | canRemat (LIns *) |
Public Attributes |
| Allocator & | alloc |
| CodeAlloc & | _codeAlloc |
| Allocator & | _dataAlloc |
| Fragment * | _thisfrag |
| RegAllocMap | _branchStateMap |
| NInsMap | _patches |
| LabelStateMap | _labels |
| Noise * | _noise |
| CodeList * | codeList |
| bool | _inExit |
| bool | vpad2 [3] |
| NIns * | codeStart |
| NIns * | codeEnd |
| NIns * | exitStart |
| NIns * | exitEnd |
| NIns * | _nIns |
| NIns * | _nExitIns |
| NIns * | _epilogue |
| AssmError | _err |
| LIns * | currIns |
| AR | _activation |
| RegAlloc | _allocator |
| int | dd |
| int Register | rs |
| int Register int | ds |
Static Public Attributes |
| static RegisterMask | nHints [LIR_sentinel+1] |
| static const RegisterMask | PREFER_SPECIAL = 0xffffffff |
| static const Register | savedRegs [NumSavedRegs+1] |
Friends |
| class | VerboseBlockReader |
Information about the activation record for the method is built up as we generate machine code.
As part of the prologue, we issue a stack adjustment instruction and then later patch the adjustment value. Temporary values can be placed into the AR as method calls are issued. Also LIR_allocp instructions will consume space.