home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 1 / ARM_CLUB_CD.iso / contents / apps / languages / progs / bcpl / b / cgheader < prev    next >
Encoding:
Text File  |  1988-09-05  |  12.4 KB  |  492 lines

  1. /* Header file for BCPL code-generator for ARM.
  2.    HCM     07 Feb 86 12:03:29
  3. */
  4.  
  5. GET "Libhdr"
  6.  
  7. GET "b.Ops"
  8.  
  9. MANIFEST {
  10.    VersionMark        = #x4e524556;
  11.  
  12.    CGMajorVersion = 2;
  13.    CGMinorVersion = 18 }
  14.  
  15. MANIFEST {
  16.    TargetWordSize = 32 }
  17.  
  18. MANIFEST {
  19.    // Format 1 opcodes
  20.    f.add = #x0800000; f.sub = #x0400000; f.rsb = #x0600000;
  21.    f.adc = #x0a00000; f.sbc = #x0c00000; f.rsc = #x0e00000;
  22.    f.and = #x0000000; f.eor = #x0200000; f.orr = #x1800000; f.bic = #x1c00000;
  23.    f.cmp = #x1400000; f.cmn = #x1600000; f.teq = #x1200000; f.tst = #x1000000;
  24.    f.subs= #x0500000;
  25.    f.cmps= #x1500000; f.cmns= #x1700000; f.teqs= #x1300000; f.tsts= #x1100000;
  26.    f.mov = #x1a00000; f.mvn = #x1e00000;
  27.    f.movs= #x1b00000;
  28.    f.cond= #x0100000;
  29.  
  30.    // Format 2
  31.    f.ldr = #x04100000; f.str = #x04000000;
  32.    f.ldrb= #x04500000; f.strb= #x04400000;
  33.    f.ld  = #x00100000; f.st  = #x00000000;
  34.  
  35.    // Format 4
  36.    f.ldm = #x08100000; f.stm = #x08000000;
  37.    f.pc  = #x00400000;
  38.  
  39.    // The following are valid for both format 3 and 4
  40.    f.pre = #x01000000; f.post = #x00000000; f.wb   = #x00200000;
  41.    f.up  = #x00800000; f.down = #x00000000;
  42.  
  43.    f.preup   = f.pre+f.up;  f.postup   = f.post+f.up;
  44.    f.predown = f.pre+f.down; f.postdown = f.post+f.down;
  45.  
  46.    // and this is valid for formats 1 and 2
  47.    f.addrisr = #x02000000; f.addrisk = #x00000000;
  48.  
  49.    // Format 5
  50.    f.b     = #x0a000000; f.bl  = #x0b000000;
  51.  
  52.    // format 4 register combinations
  53.    f4.pblpc = #x9500; f4.pbl14 = #x5500;
  54.    f4.pl = #x1400; f4.pl14 = #x5400;
  55.    f4.plpc = #x9400;
  56.  
  57.    f.mul = #x0000000; f.mla = #x0200000;
  58.  
  59.    f2.max.offset = #xfff }
  60.  
  61. MANIFEST {
  62.    // Register values
  63.    r.0    = 0;
  64.    r.a1 = 1;  r.a2 = 2;  r.a3 = 3;  r.a4 = 4;
  65.    r.w1 = 5;
  66.    r.nilbase = 6; r.gb = 7;
  67.    r.g = 9; r.p = 10; r.ts = 11;
  68.    r.l = 12; r.b = 8;
  69.    r.nil = 13;
  70.    r.14 = 14;
  71.    r.pc = 15 }
  72.  
  73. MANIFEST {
  74.    // condition mask values
  75.    m.eq     = #x00000000; m.ne       = #x10000000;
  76.    m.geu    = #x20000000; m.ltu    = #x30000000;
  77.    m.mi     = #x40000000; m.pl       = #x50000000;
  78.    m.vs     = #x60000000; m.vc       = #x70000000;
  79.    m.gtu    = #x80000000; m.leu    = #x90000000;
  80.    m.ge     = #xa0000000; m.lt       = #xb0000000;
  81.    m.gt     = #xc0000000; m.le       = #xd0000000;
  82.    m.always = #xe0000000; m.never  = #xf0000000 }
  83.  
  84. MANIFEST {
  85.    // shift types
  86.    sh.asl = #x00; sh.lsr = #x20; sh.asr = #x40; sh.ror = #x60;
  87.    sh.lsl = #x00 }
  88.  
  89. MANIFEST {
  90.    // library entry points (relative to r.gb)
  91.    sr.multiply     = #x04;
  92.    sr.quotrem     = #x34;
  93.    sr.entrycount = #xa0;
  94.    sr.count     = #xbc;
  95.    sr.exit     = #xcc;
  96.    sr.fin     = #x00 }
  97.  
  98. MANIFEST {
  99.    k4 = 4096;
  100.  
  101.    RegSize = 6;
  102.  
  103.    SSSize = 5; TempSize = 40*SSSize;
  104.  
  105.    Null = -1;
  106.  
  107.    k.number = 1;
  108.    k.loc = 2; k.glob = 3; k.static = 4; k.lab = 5;
  109.    k.lvloc = 6; k.lvglob = 7; k.lvstatic = 8; k.lvlab = 9;
  110.    k.reg = 10; k.freg = 11;
  111.    k.lvsloc = 12; k.lvsglob = 13; k.lvsstatic = 14; k.lvslab = 15;
  112.    k.lvs = 6;
  113.    k.ireg = 16;   // used only in pending loads/ stores
  114.    k.shreg = 17;  // representation of pending shift
  115.  
  116.    rtype = 1; lockedrtype = 2;
  117.    atype = 3;
  118.    shiftedrtype = 4;
  119.    ktype = 5;
  120.    lvstype = 6;
  121.  
  122.    // selector classification
  123.    ByteField = 0; LByteField = 1; GenField = 2;
  124.  
  125.    // used in marking deferred CAR/CDRs
  126.    CarMark = #x4000; VACarMark = #x4001;
  127.  
  128.    // Label vector vector data
  129.    LabelBlockSize = 128
  130.    LabelBlockShift = 7
  131.    LabelBlockMask = 127
  132.  
  133.    LabelBlockVSize = 128
  134.  
  135.    last.label.number =    (LabelBlockVSize * LabelBlockSize) / 2
  136.  
  137.    // Relocatable binary types
  138.  
  139.    t.hunk = 1000; t.end = 1002
  140.  
  141.    DataBlockSize = 16;
  142.    NextBlock = 0; EndOfDataInBlock = 1; DataBlockItems = 2;
  143.  
  144.    // structure of label references
  145.    NextRef = 0; RefType = 1; RefLoc = 2;
  146.    RefSize = 3;
  147.  
  148.    sl.type = 1; sl.loc = 2;
  149.    sl.size = 3;
  150.  
  151.    // Structure of pending store item
  152.    ps.reg = 3; ps.istos = 5;
  153.    pl.offset = 4;
  154.    ps.size = 6;
  155.  
  156.    // flag bits in label entries
  157.    lab.set       = #x80000000;
  158.  
  159.    lab.defined       = #x40000000;      // these bits for code labels
  160.    lab.forwardjump = #x20000000;
  161.    lab.onlyonejump = #x10000000;
  162.    lab.frameneeded = #x08000000;      // marks procedures which need a
  163.                       // stack frame (contain calls or
  164.                       // reference statics).
  165.    lab.prochascalls= #x04000000;
  166.    lab.jumpedto    = #x02000000;
  167.    lab.called       = #x01000000;
  168.    lab.endproclab  = #x00800000;
  169.    lab.procstatics = #x00400000;
  170.    lab.procorlabel = #x00200000;
  171.  
  172.    lab.lvtaken       = #x00100000;      // and these for data labels
  173.    lab.stored       = #x00080000;
  174.    lab.lvptaken    = #x00040000;      // marks procedures whose local
  175.                       // variables may be destroyed by
  176.                       // indirect assignment.
  177.  
  178.    lab.value       = #x0003ffff;
  179.    lab.area       = #x00000003;
  180.  
  181.    // values for deadCode
  182.    Alive = 0;
  183.    Dead = 1;
  184.  
  185.    // Error action values
  186.    HardError = FALSE;
  187.    FatalError = TRUE;
  188.    OnlyWarning = 1;
  189.  
  190.    // bits in CGDebugMode
  191.    db.traceps = 1; db.tracescan = 2; db.tracepw = 4; db.srs = 8;
  192.    db.tlabs = #x10; db.shuffle = #x20;
  193.    db.cs = #x40;
  194.    db.poc = #x80;
  195.    db.regs =#x100;
  196.    db.mult = #x200;
  197.    db.mapstore = #x8000;
  198.  
  199.    // bits in CGOptMode
  200.    op.shuffle = 1;
  201.    op.strings = 2;
  202.  
  203.    s.itemx = 255 }
  204.  
  205. MANIFEST {  // stuff to do with AOF
  206.    SADefined = #x01;
  207.    SAGlobal = #x02;
  208.    SAAbs = #x04;
  209.    SACaseInsensitive = #x08;
  210.  
  211.    RelByte = #x00000;
  212.    RelHalf = #x10000;
  213.    RelWord = #x20000;
  214.    RelPCRel = #x40000;
  215.    RelSymbol = #x80000 };
  216.  
  217. MANIFEST {
  218.    // Constants for compiled code organisation
  219.    MaxStaticFrame = 10      // excluding overhead
  220. }
  221.  
  222. MANIFEST {
  223.             // cgv 370
  224.    cgm = cgv+100;    // 470
  225.    cga = cgm+20;    // 490
  226.    cgb = cga+15;    // 505
  227.    cgc = cgb+15;    // 520
  228.    cgd = cgc+25;    // 565
  229.    cge = cgd+25;    // 570
  230.    cgf = cge+40;    // 610
  231.    cgg = cgf+30;    // 640
  232.    cgh = cgg+20;    // 660
  233.    cgi = cgh+65;    // 725
  234.    cgj = cgi+20;    // 745
  235.    cgk = cgj+40     // 785
  236. }
  237.  
  238. GLOBAL {
  239.    HostProcessor: 2 }
  240.  
  241. GLOBAL {
  242.    // variables
  243.    lineCounts: cgv+0;
  244.  
  245.    reversedStack: cgv+6;
  246.    upStack: cgv+7;  // LDM/STM argument
  247.    nextStackWord: cgv+8  // 4 or -4, depending on stack direction
  248.  
  249.    tempv: cgv+10; tempt: cgv+11;
  250.    arg1: cgv+12; arg2: cgv+13;
  251.    ssp: cgv+14; TOSoffset: cgv+15;
  252.  
  253.    ps.tracedepth: cgv+16;
  254.  
  255.    staticOffset: cgv+19;
  256.    linkageNotStored: cgv+20;
  257.    staticDataSize: cgv+21;
  258.  
  259.    deadCode: cgv+22; locCtr: cgv+23;
  260.    storeBlockV: cgv+24;
  261.    labelblockV: cgv+25;
  262.    maxGN: cgv+26;
  263.  
  264.    procLabel: cgv+27; blockLabel: cgv+28;
  265.    pendingJump: cgv+30;
  266.    sectionName: cgv+31;
  267.    op: cgv+32;
  268.    countFlag: cgv+34; countLabel: cgv+35;
  269.  
  270.    lineCount: cgv+37;
  271.    base: cgv+38; baselab: cgv+39; baseaddr: cgv+40;
  272.    namel: cgv+41; namet: cgv+42;
  273.  
  274.    SdataList: cgv+43; SdataP: cgv+44; SLab: cgv+45; SAddr: cgv+46;
  275.    FdataList: cgv+47; FdataP: cgv+48; Flab: cgv+49; Faddr: cgv+50;
  276.    DataList: cgv+51; DataP: cgv+52;
  277.  
  278.    endSectLabel: cgv+53;
  279.    callLab: cgv+54; exitCallLab: cgv+55;
  280.  
  281.    pendingLab: cgv+57; pendingMask: cgv+58;
  282.  
  283.    pendingLoads: cgv+59; pendingStores: cgv+60;
  284.  
  285.    R0Offset: cgv+61;
  286.  
  287.    multLab: cgv+63; quotLab: cgv+64;
  288.  
  289.    staticLabels: cgv+69; dataLabel: cgv+70;
  290.  
  291.    savedStates: cgv+71;
  292.    argumentNumber: cgv+72;
  293.  
  294.    transferLabs: cgv+73;
  295.    ocptrw: cgv+75; ocodebufw: cgv+76;
  296.  
  297.    exitLab: cgv+77; staticDataLab: cgv+78;
  298.    usesFrame: cgv+79; containsCalls: cgv+80; localsSafe: cgv+81;
  299.  
  300.    localConstants: cgv+82; localConstP: cgv+83;
  301.    localConstLab: cgv+84; localFaddr: cgv+85;
  302.    freeDataBlocks: cgv+86;
  303.    dedicatedRegisters: cgv+87;
  304.  
  305.    usesRL: cgv+89; RLLoadList: cgv+90;
  306.  
  307.    xrefsyms: cgv+98;
  308.    loadRegFromFRegOK: cgv+99 }
  309.  
  310. GLOBAL {
  311. // CGM
  312.    ReadOp: cgm+1; ReadN: cgm+2; ReadGN: cgm+3; ReadL: cgm+4;
  313.    PeekN: cgm+8;
  314.    NextLabel: cgm+5;
  315.    CGError: cgm+6;
  316.    WriteBytes: cgm+9;
  317.    ReadString: cgm+19 }
  318.  
  319. GLOBAL {
  320. // CGA
  321.    Scan: cga+0;
  322.    IgnoreNames: cga+1; DiscardN: cga+2
  323.    LabelInStatic: cga+3; OffsetOfStatic: cga+4;
  324.    GenStore: cga+5;
  325.    CGDebug: cga+6;
  326.    XSymInStatic: cga+7 }
  327.  
  328. GLOBAL {
  329. // CGB
  330.    CGSwitch: cgb+0;
  331.    CGEntry: cgb+1; CGSave: cgb+2; CGApply: cgb+3;
  332.    CheckRLLoaded: cgb+4 }
  333.  
  334. GLOBAL {
  335. // CGC
  336.    CGStCar: cgc+0;
  337.    CGStind: cgc+1; CGAssOp: cgc+2;
  338.    CGRelop: cgc+3; CGLogop: cgc+4; CGShift: cgc+5;
  339.    CGSlctSt: cgc+6; CGByteAp: cgc+7;
  340.    Condition: cgc+8; ComplementCondition: cgc+9 }
  341.  
  342. GLOBAL {
  343. // CGD
  344.    InitialiseDisassembler: cgd+0;
  345.    TerminateDisassembler: cgd+1;
  346.    RotateRight: cgd+2
  347.    PrintInstruction: cgd+3;
  348.    StartComment: cgd+4 }
  349.  
  350. GLOBAL {
  351. // CGE
  352.    F1Inst: cge+0; F2Inst: cge+1; F4Inst: cge+2; F5Inst: cge+3;
  353.    GenF1K: cge+4; GenRR: cge+5; GenF2: cge+6;
  354.    SetRtoRplusK: cge+7; SetRtoRplusLplusK: cge+8; SetRtoK: cge+9;
  355.    EightBitsOrFewer: cge+10;
  356.    ShiftRegister: cge+11; ShiftRegisterDS: cge+12;
  357.    MaskOutTagBits: cge+13;
  358.    Jump: cge+14; CondJump: cge+15; F5InstL: cge+16;
  359.    CheckDelayedJump: cge+17;
  360.    GenF: cge+18; GenFDS: cge+19;
  361.    InsertCount: cge+20;
  362.    LogBase2: cge+21;
  363.    CallSub: cge+22;
  364.    GlobalConstant: cge+23;
  365.    PackUp: cge+24;
  366.    FlushPendingInsts: cge+25;
  367.    TransferredLabel: cge+26;
  368.    InitPendingInsts: cge+27;
  369.    SetRToRPlusKM: cge+29; GenF2M: cge+30;
  370.    CompareAgainstK: cge+31;
  371.    F5InstX: cge+32;
  372.    MultiplyInst: cge+33 }
  373.  
  374. GLOBAL {
  375. // CGF
  376.    PutWord: cgf+0; PutString: cgf+1;
  377.    AddRef: cgf+2; SetLabel: cgf+3; ValueOfLabel: cgf+4;
  378.    AddressInCode: cgf+5;
  379.    CGString: cgf+6;
  380.    InitDataLists: cgf+7;
  381.    data: cgf+8;
  382.    sdata: cgf+9; fdata: cgf+10;
  383.    OutputSection: cgf+11;
  384.    CGGlobal: cgf+12; CGEnd: cgf+13;
  385.    LabelWithValue: cgf+14; FindLabelEntry: cgf+15;
  386.    LabelFlagged: cgf+16; FlagLabel: cgf+17;
  387.    GenData: cgf+18;
  388.    GetDataBlock: cgf+19;
  389.    AddRelocatedLoc: cgf+20;
  390.    RealSetLabel: cgf+21;
  391.    AddXSymbol: cgf+22; AddXRelocatedLoc: cgf+23;
  392.    InternString: cgf+24;
  393.    PrintSizes: cgf+25;
  394.    RelocationForLoc: cgf+26; SymbolOfReloc: cgf+27 }
  395.  
  396. GLOBAL {
  397. // CGG
  398.    FreeReg: cgg+0; MovetoR: cgg+1; MoveToRSomeTime: cgg+2
  399.    CompileDS: cgg+4
  400.    TypeOfField: cgg+5;
  401.    GenOpToStore: cgg+6;
  402.    CGVecap: cgg+7; CGVecSt: cgg+8;
  403.    LoadArg3ToSomeCR: cgg+9 }
  404.  
  405. GLOBAL {
  406. // CGH
  407.    DiscardRegs: cgh+0; DiscardReg: cgh+1;
  408.    DiscardNonConstRegs: cgh+2; DiscardNonLocalRegs: cgh+3;
  409.    LoadAddress: cgh+4; LoadCarAdd: cgh+5;
  410.    MoveStoR: cgh+6; MoveRtoR: cgh+7; StoreR: cgh+8;
  411.    DiscardAddress: cgh+9;
  412.    LookFor: cgh+10;
  413.    NotAddr: cgh+11; ShiftedUp: cgh+12; IsaCar: cgh+13;
  414.    Lock: cgh+14; Unlock: cgh+15; Locked: cgh+16;
  415.    MoveToAnyR: cgh+17; MoveToAnyRSomeTime: cgh+18;
  416.    MoveToAnyCR: cgh+19; MoveToAnyCRSomeTime: cgh+20;
  417.    Using: cgh+21;
  418.    NextR: cgh+22;
  419.    Lose: cgh+23; InitStack: cgh+24; Load: cgh+25;
  420.    Stack: cgh+26; Store: cgh+27; StoreT: cgh+28;
  421.    Class: cgh+29;
  422.    IsConst: cgh+30;
  423.    PrintRegList: cgh+31; PrintSimulatedStack: cgh+32;
  424.    IsSimpleStoreLoc: cgh+33;
  425.    IsInaRegister: cgh+34;
  426.    SaveRegisterState: cgh+35; RestoreRegisterState: cgh+36;
  427.    IntersectionOfRegisterStates: cgh+37;
  428.    FindSavedState: cgh+38; SaveStateForLab: cgh+39;
  429.    PrintRegisterState: cgh+40;
  430.    IsInTheStack: cgh+41;
  431.    ArgumentRegister: cgh+42
  432.    MoveToAnyCRForStoreTo: cgh+43; MoveToAnyCRSomeTimeForStoreTo: cgh+44;
  433.    AddRegInfo: cgh+45;
  434.    LookForSloc: cgh+46;
  435.    LookForRegContainingType: cgh+47;
  436.    LocInRegister: cgh+48;
  437.    TurnIndIntoSLoc: cgh+49;
  438.    SwapSS: cgh+50;
  439.    RemoveFalseIndirection: cgh+51;
  440.    LoseR: cgh+52;
  441.    SSEntry: cgh+53;
  442.    InitialiseRegisterSlave: cgh+54;
  443.    LookForFR: cgh+55;
  444.    HasSlavedLoc: cgh+56 }
  445.  
  446. GLOBAL {
  447. // CGI
  448.    CGMult: cgi+0; CGDiv: cgi+1; CGRem: cgi+2;
  449.    CGMinus: cgi+3; CGPlus: cgi+4;
  450.    FindSourceAndDestinationRegisters: cgi+5 }
  451.  
  452. GLOBAL {
  453. // CGJ
  454.    LastInList: cgj+0; ReverseInPlace: cgj+1; Assoc: cgj+2
  455.    PrintList: cgj+3; Nth: cgj+4;
  456.    DeleteFromList: cgj+5; LengthOfList: cgj+6
  457.    CopyOfList: cgj+7;
  458.  
  459.    AddToPendingStores: cgj+8; FlushPendingStores: cgj+9;
  460.    FlushPendingStoresUpTo: cgj+10; FlushPendingUsesOfReg: cgj+11;
  461.    DelRegFromPendingList: cgj+12; DelSlocFromPendingList: cgj+13;
  462.    RegInPendingList: cgj+14; SlocInList: cgj+15;
  463.    PrintPendingList: cgj+16;
  464.    DelLocsAbove: cgj+17; DelLocsExcept: cgj+18;
  465.  
  466.    AddToPendingLoads: cgj+20;
  467.    FlushPendingLoadsForReg:cgj+21; FlushPendingLoadsForSloc: cgj+22;
  468.    FlushPendingLoads: cgj+23; FlushPendingLoadsUpTo: cgj+24;
  469.  
  470.    DedicateRegisterToLoc: cgj+25; RegisterDedicatedToLoc: cgj+26;
  471.    LocHeldInRegister: cgj+27; ClearAssignedRegisters: cgj+28;
  472.  
  473.    FlushPendingLoadsExceptLocals: cgj+29;
  474.    FlushPendingStoresExceptLocals: cgj+30;
  475.    FlushPendingStoresExceptLocalsAndIregs: cgj+31;
  476.    FlushPendingStoresForSloc: cgj+32
  477.  
  478.    DeleteList: cgj+33; InsertInListBefore: cgj+34;
  479.    OffsetInList: cgj+35 }
  480.  
  481. GLOBAL {
  482. // CGK
  483.    CGFloat: cgk+0; CGFix: cgk+1;
  484.    CGFop: cgk+2; CGFUnop: cgk+3; CGFCompare: cgk+4;
  485.    MoveToAnyFR: cgk+5;
  486.    GenCPDT: cgk+6;
  487.  
  488.    MoveFRtoR: cgk+7; StoreFR: cgk+8;
  489.    PackFPNum: cgk+9;
  490.    NextFR: cgk+10;
  491.    MoveRtoFR: cgk+11 }
  492.