DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦5539fa654⟧ Ada Source

    Length: 18432 (0x4800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package Machine_Code, seg_04b94f

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« 
        └─⟦this⟧ 

E3 Source Code



package Machine_Code is

    -- Description for the IBM RS/6000.

    Version : constant := 57;

    type Opcode is (A, A_R, A_O, A_O_R, Abs_Op, Abs_R, Abs_O, Abs_O_R, Ae, Ae_R,
                    Ae_O, Ae_O_R, Ai, Ai_R, Ame, Ame_R, Ame_O, Ame_O_R, And_Op,
                    And_R, Andc, Andc_R, Andil_R, Andiu_R, Aze, Aze_R, Aze_O,
                    Aze_O_R, B, Bl, Ba, Bla, Bbt, Bbtl, Bbta, Bbtla, Bbf, Bbfl,
                    Bbfa, Bbfla, Bbtc, Bbfc, Bbtcl, Bbfcl, Bbtr, Bbfr, Bbtrl,
                    Bbfrl, Bc, Bdnge, Bdnle, Bdnne, Bdnns, Bdzge, Bdzle, Bdzne,
                    Bdzns, Bge, Ble, Bne, Bns, Bdnlt, Bdngt, Bdneq, Bdnso,
                    Bdzlt, Bdzgt, Bdzeq, Bdzso, Blt, Bgt, Beq, Bso, Bdn, Bdz,
                    Bca, Bgea, Blea, Bnea, Bnsa, Blta, Bgta, Beqa, Bsoa, Bdna,
                    Bdza, Bcl, Bgel, Blel, Bnel, Bnsl, Bltl, Bgtl, Beql, Bsol,
                    Bdnl, Bdzl, Bcla, Bgela, Blela, Bnela, Bnsla, Bltla, Bgtla,
                    Beqla, Bsola, Bdnla, Bdzla, Bcc, Bgec, Blec, Bnec, Bnsc,
                    Bltc, Bgtc, Beqc, Bsoc, Bctr, Bccl, Bgecl, Blecl, Bnecl,
                    Bnscl, Bltcl, Bgtcl, Beqcl, Bsocl, Bctrl, Bcr, Bger, Bler,
                    Bner, Bnsr, Bltr, Bgtr, Beqr, Bsor, Bdnr, Bdzr, Br, Bcrl,
                    Bgerl, Blerl, Bnerl, Bnsrl, Bltrl, Bgtrl, Beqrl, Bsorl,
                    Bdnrl, Bdzrl, Brl, Cal, Cau, Cax, Cax_R, Cax_O, Cax_O_R,
                    Clcs, Clf, Cli, Cmp, Cmpi, Cmpl, Cmpli, Cntlz, Cntlz_R,
                    Crand, Crandc, Creqv, Crnand, Crnor, Cror, Crorc, Crxor,
                    Dclst, Dclz, Dcs, Div, Div_R, Div_O, Div_O_R, Divs, Divs_R,
                    Divs_O, Divs_O_R, Doz, Doz_R, Doz_O, Doz_O_R, Dozi, Eqv,
                    Eqv_R, Exts, Exts_R, Fa, Fa_R, Fabs, Fabs_R, Fcmpo, Fcmpu,
                    Fd, Fd_R, Fm, Fm_R, Fma, Fma_R, Fmr, Fmr_R, Fms, Fms_R,
                    Fnabs, Fnabs_R, Fneg, Fneg_R, Fnma, Fnma_R, Fnms, Fnms_R,
                    Frsp, Frsp_R, Fs, Fs_R, Ics, L, Lbrx, Lbz, Lbzu, Lbzux,
                    Lbzx, Lfd, Lfdu, Lfdux, Lfdx, Lfs, Lfsu, Lfsux, Lfsx, Lha,
                    Lhau, Lhaux, Lhax, Lhbrx, Lhz, Lhzu, Lhzux, Lhzx, Lil,
                    Liu, Lm, Lscbx, Lscbx_R, Lsi, Lsx, Lu, Lux, Lx, Maskg,
                    Maskg_R, Maskir, Maskir_R, Mcrf, Mcrfs, Mcrxr, Mfcr, Mffs,
                    Mffs_R, Mfmsr, Mfspr, Mfsr, Mfsri, Mr, Mr_R, Mtcr, Mtcrf,
                    Mtfs, Mtfs_R, Mtfsb0, Mtfsb0_R, Mtfsb1, Mtfsb1_R, Mtfsf,
                    Mtfsf_R, Mtfsfi, Mtfsfi_R, Mtmsr, Mtspr, Mtsr, Mtsri, Mul,
                    Mul_R, Mul_O, Mul_O_R, Muli, Muls, Muls_R, Muls_O, Muls_O_R,
                    Nabs, Nabs_R, Nabs_O, Nabs_O_R, Nand, Nand_R, Neg, Neg_R,
                    Neg_O, Neg_O_R, Nop, Nor, Nor_R, Or_Op, Or_R, Orc, Orc_R,
                    Oril, Oriu, Rac, Rac_R, Rfi, Rfsvc, Rlimi, Rlimi_R, Rlinm,
                    Rlinm_R, Rlmi, Rlmi_R, Rlnm, Rlnm_R, Rrib, Rrib_R, Sf,
                    Sf_R, Sf_O, Sf_O_R, Sfe, Sfe_R, Sfe_O, Sfe_O_R, Sfi, Sfme,
                    Sfme_R, Sfme_O, Sfme_O_R, Sfze, Sfze_R, Sfze_O, Sfze_O_R,
                    Si, Si_R, Sl, Sl_R, Sle, Sle_R, Sleq, Sleq_R, Sli, Sli_R,
                    Sliq, Sliq_R, Slliq, Slliq_R, Sllq, Sllq_R, Slq, Slq_R,
                    Sr, Sr_R, Sra, Sra_R, Srai, Srai_R, Sraiq, Sraiq_R, Sraq,
                    Sraq_R, Sre, Sre_R, Srea, Srea_R, Sreq, Sreq_R, Sri, Sri_R,
                    Sriq, Sriq_R, Srliq, Srliq_R, Srlq, Srlq_R, Srq, Srq_R,
                    St, Stb, Stbrx, Stbu, Stbux, Stbx, Stfd, Stfdu, Stfdux,
                    Stfdx, Stfs, Stfsu, Stfsux, Stfsx, Sth, Sthbrx, Sthu, Sthux,
                    Sthx, Stm, Stsi, Stsx, Stu, Stux, Stx, Svc, Svcl, Svca,
                    Svcla, Tlt, Tgt, Teq, Tllt, Tlgt, Tle, Tge, Tne, Tlle, Tlge,
                    Tlne, Tlti, Tgti, Teqi, Tllti, Tlgti, Tlei, Tgei, Tnei,
                    Tllei, Tlgei, Tlnei, Tlbi, Xor_Op, Xor_R, Xoril, Xoriu);

    type Size is (Byte, Half, Word);

    type Operand is private;

    type Operand_Seq is array (Positive range <>) of Operand;
    Z : Positive;

    --
    --  Instruction formats.
    --

    type Code_0 (Op : Opcode) is
        record
            null;
        end record;

    type Code_1 (Op : Opcode) is
        record
            Oprnd_1 : Operand;
        end record;

    type Code_2 (Op : Opcode) is
        record
            Oprnd_1 : Operand;
            Oprnd_2 : Operand;
        end record;

    type Code_3 (Op : Opcode) is
        record
            Oprnd_1 : Operand;
            Oprnd_2 : Operand;
            Oprnd_3 : Operand;
        end record;

    type Code_4 (Op : Opcode) is
        record
            Oprnd_1 : Operand;
            Oprnd_2 : Operand;
            Oprnd_3 : Operand;
            Oprnd_4 : Operand;
        end record;

    type Code_5 (Op : Opcode) is
        record
            Oprnd_1 : Operand;
            Oprnd_2 : Operand;
            Oprnd_3 : Operand;
            Oprnd_4 : Operand;
            Oprnd_5 : Operand;
        end record;

    --
    --  Data formats.
    --

    type Data_1 (Sz : Size) is
        record
            Oprnd_1 : Operand;
        end record;

    type Data_N (Sz : Size) is
        record
            Oprnd_N : Operand_Seq (1 .. Z);
        end record;

    --
    --  Call formats.
    --

    type Call_0 is
        record
            Subp : Operand;
        end record;

    type Call_1 is
        record
            Subp : Operand;
            Oprnd_1 : Operand;
        end record;

    type Call_N is
        record
            Subp : Operand;
            Oprnd_N : Operand_Seq (1 .. Z);
        end record;

    --
    --  Registers.
    --

    -- General Purpose Registers.
    R0 : constant Operand;
    R1 : constant Operand;
    R2 : constant Operand;
    R3 : constant Operand;
    R4 : constant Operand;
    R5 : constant Operand;
    R6 : constant Operand;
    R7 : constant Operand;
    R8 : constant Operand;
    R9 : constant Operand;
    R10 : constant Operand;
    R11 : constant Operand;
    R12 : constant Operand;
    R13 : constant Operand;
    R14 : constant Operand;
    R15 : constant Operand;
    R16 : constant Operand;
    R17 : constant Operand;
    R18 : constant Operand;
    R19 : constant Operand;
    R20 : constant Operand;
    R21 : constant Operand;
    R22 : constant Operand;
    R23 : constant Operand;
    R24 : constant Operand;
    R25 : constant Operand;
    R26 : constant Operand;
    R27 : constant Operand;
    R28 : constant Operand;
    R29 : constant Operand;
    R30 : constant Operand;
    R31 : constant Operand;

    Sp : constant Operand;  -- r1
    Fp : constant Operand;  -- r31

    -- Floating Point Registers.
    Fr0 : constant Operand;
    Fr1 : constant Operand;
    Fr2 : constant Operand;
    Fr3 : constant Operand;
    Fr4 : constant Operand;
    Fr5 : constant Operand;
    Fr6 : constant Operand;
    Fr7 : constant Operand;
    Fr8 : constant Operand;
    Fr9 : constant Operand;
    Fr10 : constant Operand;
    Fr11 : constant Operand;
    Fr12 : constant Operand;
    Fr13 : constant Operand;
    Fr14 : constant Operand;
    Fr15 : constant Operand;
    Fr16 : constant Operand;
    Fr17 : constant Operand;
    Fr18 : constant Operand;
    Fr19 : constant Operand;
    Fr20 : constant Operand;
    Fr21 : constant Operand;
    Fr22 : constant Operand;
    Fr23 : constant Operand;
    Fr24 : constant Operand;
    Fr25 : constant Operand;
    Fr26 : constant Operand;
    Fr27 : constant Operand;
    Fr28 : constant Operand;
    Fr29 : constant Operand;
    Fr30 : constant Operand;
    Fr31 : constant Operand;

    -- Storage Control Registers.
    Sr0 : constant Operand;
    Sr1 : constant Operand;
    Sr2 : constant Operand;
    Sr3 : constant Operand;
    Sr4 : constant Operand;
    Sr5 : constant Operand;
    Sr6 : constant Operand;
    Sr7 : constant Operand;
    Sr8 : constant Operand;
    Sr9 : constant Operand;
    Sr10 : constant Operand;
    Sr11 : constant Operand;
    Sr12 : constant Operand;
    Sr13 : constant Operand;
    Sr14 : constant Operand;
    Sr15 : constant Operand;

    -- Special Purpose Registers.
    Mq : constant Operand;
    Xer : constant Operand;
    Rtcu : constant Operand;
    Rtcl : constant Operand;
    Dec : constant Operand;
    Lr : constant Operand;
    Ctr : constant Operand;
    Tid : constant Operand;
    Dsisr : constant Operand;
    Dar : constant Operand;
    Sdr0 : constant Operand;
    Sdr1 : constant Operand;
    Srr0 : constant Operand;
    Srr1 : constant Operand;

    -- Condition Register Fields.
    Cr0 : constant Operand;
    Cr1 : constant Operand;
    Cr2 : constant Operand;
    Cr3 : constant Operand;
    Cr4 : constant Operand;
    Cr5 : constant Operand;
    Cr6 : constant Operand;
    Cr7 : constant Operand;

    -- Floating Point Condition Register Fields.
    Fcr0 : constant Operand;
    Fcr1 : constant Operand;
    Fcr2 : constant Operand;
    Fcr3 : constant Operand;
    Fcr4 : constant Operand;
    Fcr5 : constant Operand;
    Fcr6 : constant Operand;
    Fcr7 : constant Operand;


    --
    --  Addressing modes.
    --

    function Base (Expr : Operand) return Operand;

    -- Description:
    --   The expr denotes the effective address.

    function "+" (Base : Operand; Disp : Operand) return Operand;

    function "+" (Base : Operand; Disp : Integer) return Operand;

    function "-" (Base : Operand; Disp : Integer) return Operand;

    -- Description:
    --   Displacement is added to the register to form the address.
    --   The base operand must be a general register.  The disp operand
    --   can be a signed immediate constant, a label'ref, or external.
    --   These functions are only allowed in the base function.
    --
    -- Forms:
    --   reg + const
    --   reg + label
    --   reg + ext
    --   reg + code
    --   reg - const

    function Immed (Val : Integer) return Operand;

    function Immed (Val : Character) return Operand;

    function "+" (Val : Integer) return Operand;

    function "-" (Val : Integer) return Operand;

    -- Description:
    --   Immediate literal.

    function Immed (Val : Float) return Operand;

    function "+" (Val : Float) return Operand;

    function "-" (Val : Float) return Operand;

    -- Description:
    --   Literal float operand denoting an address referencing the value
    --   placed in a static segment.

    function Uiu (Val : Integer) return Operand;

    -- Description:
    --   High-order 16 bits of 32 bit immediate.

    function Uil (Val : Integer) return Operand;

    -- Description:
    --   Low-order 16 bits of 32 bit immediate.

    function Siu (Val : Integer) return Operand;

    -- Description:
    --   High-order 16 bits, plus the msb bit of the low-order halfword of
    --   the 32 bit immediate.

    function Sil (Val : Integer) return Operand;

    -- Description:
    --   Low-order 15 bits of 32 bit immediate.

    function Code (Subp : Operand) return Operand;

    -- Description:
    --   Given subp'ref, yields the external symbol referencing the
    --   machine code of the subprogram.

    function Ext (Name : Operand; Disp : Integer := 0) return Operand;

    function Ext (Name : String; Disp : Integer := 0) return Operand;

    -- Description:
    --   The name denotes an external symbol.  The displacement is added to
    --   the value of name.

    function "-" (Left, Right : Operand) return Operand;

    -- Description:
    --   Calculates the difference between two labels.

private

    --
    --  Implementation specific.
    --

    type Operand is new Integer;

    -- General Purpose Registers.
    R0 : constant Operand := 0;
    R1 : constant Operand := 1;
    R2 : constant Operand := 2;
    R3 : constant Operand := 3;
    R4 : constant Operand := 4;
    R5 : constant Operand := 5;
    R6 : constant Operand := 6;
    R7 : constant Operand := 7;
    R8 : constant Operand := 8;
    R9 : constant Operand := 9;
    R10 : constant Operand := 10;
    R11 : constant Operand := 11;
    R12 : constant Operand := 12;
    R13 : constant Operand := 13;
    R14 : constant Operand := 14;
    R15 : constant Operand := 15;
    R16 : constant Operand := 16;
    R17 : constant Operand := 17;
    R18 : constant Operand := 18;
    R19 : constant Operand := 19;
    R20 : constant Operand := 20;
    R21 : constant Operand := 21;
    R22 : constant Operand := 22;
    R23 : constant Operand := 23;
    R24 : constant Operand := 24;
    R25 : constant Operand := 25;
    R26 : constant Operand := 26;
    R27 : constant Operand := 27;
    R28 : constant Operand := 28;
    R29 : constant Operand := 29;
    R30 : constant Operand := 30;
    R31 : constant Operand := 31;

    Sp : constant Operand := R1;
    Fp : constant Operand := R31;

    -- Floating Point Registers.
    Fr0 : constant Operand := 32;
    Fr1 : constant Operand := 33;
    Fr2 : constant Operand := 34;
    Fr3 : constant Operand := 35;
    Fr4 : constant Operand := 36;
    Fr5 : constant Operand := 37;
    Fr6 : constant Operand := 38;
    Fr7 : constant Operand := 39;
    Fr8 : constant Operand := 40;
    Fr9 : constant Operand := 41;
    Fr10 : constant Operand := 42;
    Fr11 : constant Operand := 43;
    Fr12 : constant Operand := 44;
    Fr13 : constant Operand := 45;
    Fr14 : constant Operand := 46;
    Fr15 : constant Operand := 47;
    Fr16 : constant Operand := 48;
    Fr17 : constant Operand := 49;
    Fr18 : constant Operand := 50;
    Fr19 : constant Operand := 51;
    Fr20 : constant Operand := 52;
    Fr21 : constant Operand := 53;
    Fr22 : constant Operand := 54;
    Fr23 : constant Operand := 55;
    Fr24 : constant Operand := 56;
    Fr25 : constant Operand := 57;
    Fr26 : constant Operand := 58;
    Fr27 : constant Operand := 59;
    Fr28 : constant Operand := 60;
    Fr29 : constant Operand := 61;
    Fr30 : constant Operand := 62;
    Fr31 : constant Operand := 63;

    -- Storage Control Registers.
    Sr0 : constant Operand := 64;
    Sr1 : constant Operand := 65;
    Sr2 : constant Operand := 66;
    Sr3 : constant Operand := 67;
    Sr4 : constant Operand := 68;
    Sr5 : constant Operand := 69;
    Sr6 : constant Operand := 70;
    Sr7 : constant Operand := 71;
    Sr8 : constant Operand := 72;
    Sr9 : constant Operand := 73;
    Sr10 : constant Operand := 74;
    Sr11 : constant Operand := 75;
    Sr12 : constant Operand := 76;
    Sr13 : constant Operand := 77;
    Sr14 : constant Operand := 78;
    Sr15 : constant Operand := 79;

    -- Special Purpose Registers.
    Mq : constant Operand := 80;
    Xer : constant Operand := 81;
    Rtcu : constant Operand := 82;
    Rtcl : constant Operand := 83;
    Dec : constant Operand := 84;
    Lr : constant Operand := 85;
    Ctr : constant Operand := 86;
    Tid : constant Operand := 87;
    Dsisr : constant Operand := 88;
    Dar : constant Operand := 89;
    Sdr0 : constant Operand := 90;
    Sdr1 : constant Operand := 91;
    Srr0 : constant Operand := 92;
    Srr1 : constant Operand := 93;

    -- Condition Register Fields.
    Cr0 : constant Operand := 94;
    Cr1 : constant Operand := 95;
    Cr2 : constant Operand := 96;
    Cr3 : constant Operand := 97;
    Cr4 : constant Operand := 98;
    Cr5 : constant Operand := 99;
    Cr6 : constant Operand := 100;
    Cr7 : constant Operand := 101;

    -- Floating Point Condition Register Fields.
    Fcr0 : constant Operand := 102;
    Fcr1 : constant Operand := 103;
    Fcr2 : constant Operand := 104;
    Fcr3 : constant Operand := 105;
    Fcr4 : constant Operand := 106;
    Fcr5 : constant Operand := 107;
    Fcr6 : constant Operand := 108;
    Fcr7 : constant Operand := 109;

end Machine_Code;

pragma Built_In (Machine_Code);

E3 Meta Data

    nblk1=11
    nid=0
    hdr6=22
        [0x00] rec0=13 rec1=00 rec2=01 rec3=01e
        [0x01] rec0=0c rec1=00 rec2=02 rec3=09a
        [0x02] rec0=0d rec1=00 rec2=03 rec3=076
        [0x03] rec0=0d rec1=00 rec2=04 rec3=050
        [0x04] rec0=2c rec1=00 rec2=05 rec3=032
        [0x05] rec0=32 rec1=00 rec2=06 rec3=020
        [0x06] rec0=23 rec1=00 rec2=07 rec3=040
        [0x07] rec0=22 rec1=00 rec2=08 rec3=040
        [0x08] rec0=23 rec1=00 rec2=09 rec3=02e
        [0x09] rec0=25 rec1=00 rec2=0a rec3=00c
        [0x0a] rec0=23 rec1=00 rec2=0b rec3=028
        [0x0b] rec0=20 rec1=00 rec2=0c rec3=070
        [0x0c] rec0=24 rec1=00 rec2=0d rec3=022
        [0x0d] rec0=1e rec1=00 rec2=0e rec3=022
        [0x0e] rec0=1d rec1=00 rec2=0f rec3=00c
        [0x0f] rec0=1d rec1=00 rec2=10 rec3=042
        [0x10] rec0=11 rec1=00 rec2=11 rec3=001
    tail 0x21750b8ac8684354c4f41 0x42a00088462060003