Main Page | Class Hierarchy | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

config.h File Reference

This graph shows which files directly or indirectly include this file:

Included by dependency graph

Go to the source code of this file.

Data Structures

struct  Env
struct  Regnode
struct  Xinterface
struct  Xnode
struct  Xsymbol

Defines

#define debug(x)   (void)(dflag&&((x),0))
#define LBURG_MAX   SHRT_MAX

Enumerations

enum  { RX = 2 }
enum  { VREG = (44<<4) }
enum  { IREG = 0, FREG = 1 }

Functions

int askregvar (Symbol, Symbol)
void blkcopy (int, int, int, int, int, int[])
void blockbeg (Env *)
void blockend (Env *)
void emit (Node)
unsigned emitbin (Node, int)
Node gen (Node)
int getregnum (Node)
int mayrecalc (Node)
int mkactual (int, int)
void mkauto (Symbol)
Symbol mkreg (char *, int, int, int)
int move (Node)
int notarget (Node)
void parseflags (int, char **)
int range (Node, int, int)
unsigned regloc (Symbol)
void rtarget (Node, int, Symbol)
void setreg (Node, Symbol)
void spill (unsigned, int, Node)
int widens (Node)

Variables

int argoffset
int bflag
int dalign
int dflag
int framesize
unsigned freemask []
int maxargoffset
int maxoffset
Symbol mkwildcard (Symbol *)
int offset
int salign
int swap
unsigned tmask []
unsigned usedmask []
unsigned vmask []


Define Documentation

#define debug  )     (void)(dflag&&((x),0))
 

Definition at line 101 of file config.h.

Referenced by askregvar(), genreload(), genspill(), linearize(), prune(), putreg(), ralloc(), reduce(), reprune(), requate(), rewrite(), rtarget(), and yylook().

#define LBURG_MAX   SHRT_MAX
 

Definition at line 86 of file config.h.


Enumeration Type Documentation

anonymous enum
 

Enumeration values:
RX 

Definition at line 80 of file config.h.

00080 { RX=2 };

anonymous enum
 

Enumeration values:
VREG 

Definition at line 88 of file config.h.

00088 { VREG=(44<<4) };

anonymous enum
 

Enumeration values:
IREG 
FREG 

Definition at line 70 of file config.h.

00070 { IREG=0, FREG=1 };


Function Documentation

int askregvar Symbol  ,
Symbol 
 

Definition at line 572 of file gen.c.

References askreg(), assert, debug, dumpregs(), isscalar, Xsymbol::name, symbol::name, p, r, Xsymbol::regnode, symbol::sclass, Symbol, symbol::temporary, symbol::type, Regnode::vbl, vmask, and symbol::x.

00572                                      {
00573     Symbol r;
00574 
00575     assert(p);
00576     if (p->sclass != REGISTER)
00577         return 0;
00578     else if (!isscalar(p->type)) {
00579         p->sclass = AUTO;
00580         return 0;
00581     }
00582     else if (p->temporary) {
00583         p->x.name = "?";
00584         return 1;
00585     }
00586     else if ((r = askreg(regs, vmask)) != NULL) {
00587         p->x.regnode = r->x.regnode;
00588         p->x.regnode->vbl = p;
00589         p->x.name = r->x.name;
00590         debug(dumpregs("(allocating %s to symbol %s)\n", p->x.name, p->name));
00591         return 1;
00592     }
00593     else {
00594         p->sclass = AUTO;
00595         return 0;
00596     }
00597 }

Here is the call graph for this function:

void blkcopy int  ,
int  ,
int  ,
int  ,
int  ,
int  []
 

Definition at line 129 of file gen.c.

References assert, Xinterface::blkloop, blkunroll(), IR, and interface::x.

00129                                                                           {
00130     assert(size >= 0);
00131     if (size == 0)
00132         return;
00133     else if (size <= 2)
00134         blkunroll(size, dreg, doff, sreg, soff, size, tmp);
00135     else if (size == 3) {
00136         blkunroll(2, dreg, doff,   sreg, soff,   2, tmp);
00137         blkunroll(1, dreg, doff+2, sreg, soff+2, 1, tmp);
00138     }
00139     else if (size <= 16) {
00140         blkunroll(4, dreg, doff, sreg, soff, size&~3, tmp);
00141         blkcopy(dreg, doff+(size&~3),
00142                     sreg, soff+(size&~3), size&3, tmp);
00143     }
00144     else
00145         (*IR->x.blkloop)(dreg, doff, sreg, soff, size, tmp);
00146 }

Here is the call graph for this function:

void blockbeg Env  ) 
 

Definition at line 104 of file gen.c.

References e, Env::freemask, freemask, and Env::offset.

Referenced by asdl_init().

00104                       {
00105     e->offset = offset;
00106     e->freemask[IREG] = freemask[IREG];
00107     e->freemask[FREG] = freemask[FREG];
00108 }

void blockend Env  ) 
 

Definition at line 109 of file gen.c.

References e, freemask, Env::freemask, maxoffset, offset, and Env::offset.

Referenced by asdl_init().

00109                       {
00110     if (offset > maxoffset)
00111         maxoffset = offset;
00112     offset = e->offset;
00113     freemask[IREG] = e->freemask[IREG];
00114     freemask[FREG] = e->freemask[FREG];
00115 }

void emit Node   ) 
 

Definition at line 368 of file gen.c.

References assert, Xnode::equatable, Xnode::inst, moveself(), Xnode::next, Node, p, Xnode::registered, requate(), and node::x.

Referenced by asdl_init().

00368                   {
00369     for (; p; p = p->x.next) {
00370         assert(p->x.registered);
00371         if (p->x.equatable && requate(p) || moveself(p))
00372             ;
00373         else
00374             (*emitter)(p, p->x.inst);
00375         p->x.emitted = 1;
00376     }
00377 }

Here is the call graph for this function:

unsigned emitbin Node  ,
int 
 

Node gen Node   ) 
 

Definition at line 479 of file gen.c.

References ASGN, assert, CALL, Xinterface::doarg, docall(), generic, head, i, IR, Xnode::kids, Xsymbol::lastuse, linearize(), node::link, Xnode::listed, LOAD, NeedsReg, NELEMS, Xnode::next, Node, opindex, opkind, p, Xnode::prev, Xnode::prevuse, prune(), putreg(), ralloc(), relink, rewrite(), Xinterface::rmap, RX, node::syms, interface::x, node::x, and symbol::x.

Referenced by asdl_init().

00479                       {
00480     int i;
00481     struct node sentinel;
00482     Node dummy, p;
00483 
00484     head = forest;
00485     for (p = forest; p; p = p->link) {
00486         assert(p->count == 0);
00487         if (generic(p->op) == CALL)
00488             docall(p);
00489         else if (   generic(p->op) == ASGN
00490         && generic(p->kids[1]->op) == CALL)
00491             docall(p->kids[1]);
00492         else if (generic(p->op) == ARG)
00493             (*IR->x.doarg)(p);
00494         rewrite(p);
00495         p->x.listed = 1;
00496     }
00497     for (p = forest; p; p = p->link)
00498         prune(p, &dummy);
00499     relink(&sentinel, &sentinel);
00500     for (p = forest; p; p = p->link)
00501         linearize(p, &sentinel);
00502     forest = sentinel.x.next;
00503     assert(forest);
00504     sentinel.x.next->x.prev = NULL;
00505     sentinel.x.prev->x.next = NULL;
00506     for (p = forest; p; p = p->x.next)
00507         for (i = 0; i < NELEMS(p->x.kids) && p->x.kids[i]; i++) {
00508             assert(p->x.kids[i]->syms[RX]);
00509             if (p->x.kids[i]->syms[RX]->temporary) {
00510                 p->x.kids[i]->x.prevuse =
00511                     p->x.kids[i]->syms[RX]->x.lastuse;
00512                 p->x.kids[i]->syms[RX]->x.lastuse = p->x.kids[i];
00513             }
00514         }
00515     for (p = forest; p; p = p->x.next) {
00516         ralloc(p);
00517         if (p->x.listed && NeedsReg[opindex(p->op)]
00518         && (*IR->x.rmap)(opkind(p->op))) {
00519             assert(generic(p->op) == CALL || generic(p->op) == LOAD);
00520             putreg(p->syms[RX]);
00521         }
00522     }
00523     return forest;
00524 }

Here is the call graph for this function:

int getregnum Node   ) 
 

Definition at line 820 of file gen.c.

References assert, Node, Regnode::number, p, Xsymbol::regnode, RX, node::syms, and symbol::x.

00820                       {
00821     assert(p && p->syms[RX] && p->syms[RX]->x.regnode);
00822     return p->syms[RX]->x.regnode->number;
00823 }

int mayrecalc Node   ) 
 

Definition at line 219 of file gen.c.

References ADDRF, ADDRG, assert, CNST, symbol::cse, generic, Xnode::mayrecalc, Node, op, node::op, p, RX, node::syms, symbol::t, symbol::u, and node::x.

00219                       {
00220     int op;
00221 
00222     assert(p && p->syms[RX]);
00223     if (p->syms[RX]->u.t.cse == NULL)
00224         return 0;
00225     op = generic(p->syms[RX]->u.t.cse->op);
00226     if (op == CNST || op == ADDRF || op == ADDRG || op == ADDRL) {
00227         p->x.mayrecalc = 1;
00228         return 1;
00229     } else
00230         return 0;
00231 }

int mkactual int  ,
int 
 

Definition at line 116 of file gen.c.

References argoffset, n, and roundup.

00116                                   {
00117     int n = roundup(argoffset, align);
00118 
00119     argoffset = n + size;
00120     return n;
00121 }

void mkauto Symbol   ) 
 

Definition at line 98 of file gen.c.

References type::align, assert, Xsymbol::name, offset, Xsymbol::offset, p, roundup, symbol::sclass, type::size, stringd(), Symbol, symbol::type, and symbol::x.

00098                       {
00099     assert(p->sclass == AUTO);
00100     offset = roundup(offset + p->type->size, p->type->align);
00101     p->x.offset = -offset;
00102     p->x.name = stringd(-offset);
00103 }

Here is the call graph for this function:

Symbol mkreg char *  ,
int  ,
int  ,
int 
 

Definition at line 79 of file gen.c.

References Regnode::mask, mask, n, symbol::name, Xsymbol::name, NEW0, Regnode::number, p, PERM, Xsymbol::regnode, Regnode::set, stringf(), Symbol, and symbol::x.

00079                                                   {
00080     Symbol p;
00081 
00082     NEW0(p, PERM);
00083     p->name = p->x.name = stringf(fmt, n);
00084     NEW0(p->x.regnode, PERM);
00085     p->x.regnode->number = n;
00086     p->x.regnode->mask = mask<<n;
00087     p->x.regnode->set = set;
00088     return p;
00089 }

Here is the call graph for this function:

int move Node   ) 
 

Definition at line 382 of file gen.c.

References Xnode::copy, Node, p, and node::x.

Referenced by AAS_BestReachableFromJumpPadArea(), AAS_ClientMovementHitBBox(), AAS_ClientMovementPrediction(), AAS_JumpReachRunStart(), AAS_PredictClientMovement(), AAS_Reachability_Jump(), AAS_Reachability_JumpPad(), AAS_Reachability_Teleport(), AAS_Reachability_WeaponJump(), AAS_ShowReachability(), AAS_TestMovementPrediction(), BotAimAtEnemy(), BotChangeViewAngle(), BotWalkInDirection(), Brush_Move(), CG_BubbleTrail(), CG_RailTrail(), CG_SwingAngles(), CSG_MakeHollow(), Drag_MouseMoved(), CXYWnd::DragDelta(), G_MoverPush(), G_MoverTeam(), G_TryPushingEntity(), G_TryPushingProxMine(), InitMover(), MoveSelection(), Reached_Train(), trap_AAS_PredictClientMovement(), UI_SwingAngles(), idSplinePosition::updateSelection(), idPointListInterface::updateSelection(), and idSplineList::updateSelection().

00382                  {
00383     p->x.copy = 1;
00384     return 1;
00385 }

int notarget Node   ) 
 

Definition at line 525 of file gen.c.

References Node, p, node::syms, Xsymbol::wildcard, and symbol::x.

00525                      {
00526     return p->syms[RX]->x.wildcard ? 0 : LBURG_MAX;
00527 }

void parseflags int  ,
char ** 
 

int range Node  ,
int  ,
int 
 

Definition at line 253 of file gen.c.

References ADDRF, ADDRL, symbol::c, ck, CNST, I, value::i, Node, Xsymbol::offset, node::op, p, P, value::p, s, specific, Symbol, node::syms, symbol::u, U, value::u, symbol::v, and symbol::x.

00253                                   {
00254     Symbol s = p->syms[0];
00255 
00256     switch (specific(p->op)) {
00257     case ADDRF+P:
00258     case ADDRL+P: ck(s->x.offset >= lo && s->x.offset <= hi);
00259     case CNST+I:  ck(s->u.c.v.i  >= lo && s->u.c.v.i  <= hi);
00260     case CNST+U:  ck(s->u.c.v.u  >= lo && s->u.c.v.u  <= hi);
00261     case CNST+P:  ck(s->u.c.v.p  == 0  && lo <= 0 && hi >= 0);
00262     }
00263     return LBURG_MAX;
00264 }

unsigned regloc Symbol   ) 
 

Definition at line 826 of file gen.c.

References assert, Regnode::number, p, Xsymbol::regnode, symbol::sclass, Regnode::set, Symbol, and symbol::x.

00826                           {
00827     assert(p && p->sclass == REGISTER && p->sclass == REGISTER && p->x.regnode);
00828     return p->x.regnode->set<<8 | p->x.regnode->number;
00829 }

void rtarget Node  ,
int  ,
Symbol 
 

Definition at line 452 of file gen.c.

References assert, symbol::cse, debug, fprint(), node::kids, Xnode::kids, LOAD, n, Xsymbol::name, newnode(), Node, NULL, node::op, opkind, p, q, r, RX, symbol::sclass, setreg(), stderr, Symbol, node::syms, symbol::t, symbol::u, Xsymbol::wildcard, symbol::x, and node::x.

Referenced by prelabel().

00452                                       {
00453     Node q = p->kids[n];
00454 
00455     assert(q);
00456     assert(r);
00457     assert(r->sclass == REGISTER || !r->x.wildcard);
00458     assert(q->syms[RX]);
00459     if (r != q->syms[RX] && !q->syms[RX]->x.wildcard) {
00460         q = newnode(LOAD + opkind(q->op),
00461             q, NULL, q->syms[0]);
00462         if (r->u.t.cse == p->kids[n])
00463             r->u.t.cse = q;
00464         p->kids[n] = p->x.kids[n] = q;
00465         q->x.kids[0] = q->kids[0];
00466     }
00467     setreg(q, r);
00468     debug(fprint(stderr, "(targeting %x->x.kids[%d]=%x to %s)\n", p, n, p->kids[n], r->x.name));
00469 }

Here is the call graph for this function:

void setreg Node  ,
Symbol 
 

Definition at line 449 of file gen.c.

References Node, p, Symbol, and node::syms.

Referenced by prelabel(), and rtarget().

00449                               {
00450     p->syms[RX] = r;
00451 }

void spill unsigned  ,
int  ,
Node 
 

Definition at line 788 of file gen.c.

References assert, freemask, i, Xnode::kids, mask, Regnode::mask, n, NELEMS, Xnode::next, Node, NULL, p, r, Xnode::registered, Xsymbol::regnode, RX, Regnode::set, spillr(), Xnode::spills, Symbol, node::syms, usedmask, node::x, and symbol::x.

Referenced by getreg().

00788                                             {
00789     int i;
00790     Node p;
00791 
00792     here->x.spills = 1;
00793     usedmask[n] |= mask;
00794     if (mask&~freemask[n]) {
00795 
00796         assert( /* It makes no sense for a node to clobber() its target. */
00797             here->x.registered == 0 || /* call isn't coming through clobber() */
00798             here->syms[RX] == NULL ||
00799             here->syms[RX]->x.regnode == NULL ||
00800             here->syms[RX]->x.regnode->set != n ||
00801             (here->syms[RX]->x.regnode->mask&mask) == 0
00802         );
00803 
00804         for (p = here; p; p = p->x.next)
00805             for (i = 0; i < NELEMS(p->x.kids) && p->x.kids[i]; i++) {
00806                 Symbol r = p->x.kids[i]->syms[RX];
00807                 assert(r);
00808                 if (p->x.kids[i]->x.registered && r->x.regnode->set == n
00809                 && r->x.regnode->mask&mask)
00810                     spillr(r, here);
00811             }
00812     }
00813 }

Here is the call graph for this function:

int widens Node   ) 
 


Variable Documentation

int argoffset
 

Definition at line 45 of file gen.c.

Referenced by docall(), gen02(), and mkactual().

int bflag
 

Definition at line 50 of file gen.c.

Referenced by parseflags().

int dalign
 

Definition at line 49 of file gen.c.

int dflag
 

Definition at line 51 of file gen.c.

Referenced by parseflags().

int framesize
 

Definition at line 44 of file gen.c.

Referenced by emitasm().

unsigned freemask[]
 

Definition at line 75 of file gen.c.

Referenced by askfixedreg(), blockbeg(), blockend(), dumpregs(), putreg(), and spill().

int maxargoffset
 

Definition at line 47 of file gen.c.

Referenced by docall(), and gen02().

int maxoffset
 

Definition at line 42 of file gen.c.

Referenced by blockend().

Symbol mkwildcard(Symbol *)
 

int offset
 

Definition at line 40 of file gen.c.

Referenced by AAS_LoadAASFile(), AAS_LoadAASLump(), audioDeviceIOProc(), blockend(), CG_AddLagometerFrameInfo(), CG_MachineGunEjectBrass(), CG_MakeExplosion(), CG_PlasmaTrail(), CG_ShotgunEjectBrass(), CM_PositionTestInPatchCollide(), CM_TestBoundingBoxInCapsule(), CM_TestCapsuleInCapsule(), CM_Trace(), CM_TraceBoundingBoxThroughCapsule(), CM_TraceCapsuleThroughCapsule(), CM_TracePointThroughPatchCollide(), CM_TraceThroughPatchCollide(), CM_TraceThroughTree(), CM_TransformedBoxTrace(), ColinearEdge(), do_field(), DumpPACKDirectory(), emitSymbol(), FS_Seek(), GetConfigString(), HL_LoadBSPFile(), HL_LoadMapFromBSP(), Huff_Compress(), Huff_Decompress(), Huff_getBit(), Huff_offsetReceive(), Huff_offsetTransmit(), Huff_putBit(), Item_TextField_Paint(), LoadFile(), mkauto(), PakLoadAnyFile(), Q1_LoadBSPFile(), Q1_LoadMapFromBSP(), Q2_LoadBSPFile(), Q2_LoadMapFromBSP(), R_MergedHeightPoints(), R_MergedWidthPoints(), RB_CalcDeformVertexes(), RB_CalcMoveVertexes(), ReadPACKDirectory(), ReadQuakeFile(), recurseQuad(), S_Callback(), Sin_LoadBSPFile(), Sin_LoadMapFromBSP(), SpawnModelOnVictoryPad(), Sys_StreamSeek(), trap_FS_Seek(), and UI_BinaryServerInsertion().

int salign
 

Definition at line 49 of file gen.c.

Referenced by blkunroll().

int swap
 

Definition at line 53 of file gen.c.

unsigned tmask[]
 

Definition at line 77 of file gen.c.

Referenced by ralloc(), and spillee().

unsigned usedmask[]
 

Definition at line 76 of file gen.c.

Referenced by askfixedreg(), and spill().

unsigned vmask[]
 

Definition at line 78 of file gen.c.

Referenced by askregvar().


Generated on Thu Aug 25 15:53:06 2005 for Quake III Arena by  doxygen 1.3.9.1