m3back/src/Stackx86.i3


 Copyright (C) 1993, Digital Equipment Corporation           
 All rights reserved.                                        
 See the file COPYRIGHT for a full description.              
                                                             
 Last modified on Wed Mar 22 08:05:39 PST 1995 by kalsow     
      modified on Fri Nov 25 11:34:48 PST 1994 by isard      
      modified on Mon Apr 13 09:55:12 PDT 1992 by muller     

INTERFACE Stackx86;

FROM M3CG IMPORT MType, ZType, Sign, ByteOffset;
FROM M3CG_Ops IMPORT ErrorHandler;

IMPORT M3x86Rep, Codex86, Wrx86;
FROM M3x86Rep IMPORT Operand, OLoc, MVar, Regno, Force, RegSet, FlToInt;
FROM M3x86Rep IMPORT x86Proc, x86Var;

FROM Codex86 IMPORT Op;

TYPE T <: Public;
TYPE Public = OBJECT
      METHODS
        unlock ();
        clearall ();
        releaseall ();
        lock (r: Regno);
        find (stackp: INTEGER; force: Force; set := RegSet {};
              hintaddr := FALSE);
        freereg (set := RegSet {}): Regno;
        set_reg (stackp: INTEGER; r: Regno);
        dealloc_reg (stackp: INTEGER);
        corrupt (reg: Regno);
        set_fstack (stackp: INTEGER);
        set_mvar (stackp: INTEGER; READONLY mvar: MVar);
        set_imm (stackp, imm: INTEGER);
        loc (stackp: INTEGER): OLoc;
        op (stackp: INTEGER): Operand;
        pos (depth: INTEGER; place: TEXT): INTEGER;
        discard (depth: INTEGER);
        set_error_handler (err: ErrorHandler);
        push (READONLY mvar: MVar);
        pushnew (type: MType; force: Force; set := RegSet {});
        pushimm (imm: INTEGER);
        pop (READONLY mvar: MVar);
        doloadaddress (v: x86Var; o: ByteOffset);
        dobin (op: Op; symmetric, overwritesdest: BOOLEAN): BOOLEAN;
        dostoreind (o: ByteOffset; type: MType);
        doumul ();
        doimul ();
        dodiv (a, b: Sign);
        domod (a, b: Sign);
        doneg ();
        doabs ();
        domaxmin (type: ZType; maxmin: MaxMin);
        fltoint (mode: FlToInt);
        inttoflt ();
        doshift ();
        dorotate ();
        doextract (sign: BOOLEAN);
        doextract_n (sign: BOOLEAN; n: INTEGER);
        doextract_mn (sign: BOOLEAN; m, n: INTEGER);
        doinsert ();
        doinsert_n (n: INTEGER);
        doinsert_mn (m, n: INTEGER);
        swap ();
        doloophole (from, two: ZType);
        doindex_address (shift, size: INTEGER; neg: BOOLEAN);
        docopy (type: MType; overlap: BOOLEAN);
        docopy_n (n: INTEGER; type: MType; overlap: BOOLEAN);
        doimm (op: Op; imm: INTEGER; overwritesdest: BOOLEAN);
        newdest (READONLY op: Operand);
        init ();
        end ();
        set_current_proc (p: x86Proc);
        reg (stackp: INTEGER): Regno;
        lower (reg: Regno): INTEGER;
        set_lower (reg: Regno; low: INTEGER);
        upper (reg: Regno): INTEGER;
        set_upper (reg: Regno; up: INTEGER);
        non_nil (reg: Regno): BOOLEAN;
        set_non_nil (reg: Regno);
      END;

TYPE MaxMin = { Max, Min };

PROCEDURE New (parent: M3x86Rep.U; cg: Codex86.T; debug: BOOLEAN): T;

PROCEDURE Debug (t: T;  tag: TEXT;  wr: Wrx86.T);

END Stackx86.