Annotation of cci/d/entry/adwc.c, revision 1.1

1.1     ! root        1: #define disp_error error
        !             2: 
        !             3: /*             standard definition file                                */
        !             4: /*             for 'C' diagnostic porgrams.                            */
        !             5: /*                                                                     */
        !             6: /*                                                                     */
        !             7: #define                HIGH            31
        !             8: #define                IPL             8
        !             9: #define                PSWMASK         0xf
        !            10: #define                T               16
        !            11: #define                IV              32
        !            12: #define                FU              64
        !            13: #define                DV              128
        !            14: #define                FLAGS           0x0000000f
        !            15: 
        !            16: extern long scoplp;
        !            17: extern long force_lp;
        !            18: 
        !            19: asm(".set  PSWMASK,0xf");
        !            20: 
        !            21: 
        !            22: /*             constants definition for ADWC instruction               */
        !            23: /*                                                                     */
        !            24: /*                                                                     */
        !            25: 
        !            26: #define                ADWC    0x8d            /*opcode                        */
        !            27: 
        !            28: 
        !            29: #define                MAX_PATTERNS    6
        !            30: 
        !            31: 
        !            32: #define                SUM1            0               /*initial value of sum  */
        !            33: #define                SUM2            -1
        !            34: #define                SUM3            0x7fffffff
        !            35: #define                SUM4            0x7ffffffd
        !            36: #define                SUM5            0x80000000
        !            37: #define                SUM6            0x80000000
        !            38: 
        !            39: 
        !            40: #define                ADD1            -1              /*initial values for add*/
        !            41: #define                ADD2            1
        !            42: #define                ADD3            1
        !            43: #define                ADD4            1
        !            44: #define                ADD5            0x7fffffff
        !            45: #define                ADD6            0x80000000
        !            46: 
        !            47: 
        !            48: 
        !            49: #define                EXP1            0               /*expected result       */
        !            50: #define                EXP2            1
        !            51: #define                EXP3            0x80000000
        !            52: #define                EXP4            0x7fffffff
        !            53: #define                EXP5            0
        !            54: #define                EXP6            0
        !            55: 
        !            56: 
        !            57: #define                IPSW1           1               /*initial psw           */
        !            58: #define                IPSW2           15
        !            59: #define                IPSW3           0
        !            60: #define                IPSW4           15
        !            61: #define                IPSW5           15
        !            62: #define                IPSW6           0
        !            63: 
        !            64: 
        !            65: #define                EPSW1           5               /*expected psw          */
        !            66: #define                EPSW2           1
        !            67: #define                EPSW3           2
        !            68: #define                EPSW4           0
        !            69: #define                EPSW5           5
        !            70: #define                EPSW6           15
        !            71: 
        !            72: 
        !            73: #define                ERROR1          1               /*error definitions     */
        !            74: #define                ERROR2          2
        !            75: #define                ERROR3          3
        !            76: 
        !            77: 
        !            78: #define                EM1             "sum not equal to expected \n"
        !            79: #define                EM2             "addend operand altered \n"
        !            80: #define                EM3             "psw not equal to expected \n"
        !            81: 
        !            82: 
        !            83: 
        !            84: 
        !            85: /*     Global variables for add with carry test                        */
        !            86: /*                                                                     */
        !            87: /*                                                                     */
        !            88: 
        !            89: static short   index = 0;
        !            90: static long    sum = 0;        /*destination location                  */
        !            91: static long    add = 0;        /*addend location                       */
        !            92: static long    psw;            /*processor status word                 */
        !            93: static long    error_count = 0;
        !            94: 
        !            95:                                /*initial flag values                   */
        !            96: static long    i_psw[MAX_PATTERNS] = {IPSW1,IPSW2,IPSW3,IPSW4,IPSW5,IPSW6};
        !            97:                                /*expected flag values                  */
        !            98: static long    exp_psw[MAX_PATTERNS] = {EPSW1,EPSW2,EPSW3,EPSW4,EPSW5,EPSW6};
        !            99:                                /*expected destination                  */
        !           100: static long    exp[MAX_PATTERNS] = {EXP1,EXP2,EXP3,EXP4,EXP5,EXP6};
        !           101:                                /*sum values                            */
        !           102: static long    s[MAX_PATTERNS] = {SUM1,SUM2,SUM3,SUM4,SUM5,SUM6};
        !           103:                                /*add values                            */
        !           104: static long    a[MAX_PATTERNS] = {ADD1,ADD2,ADD3,ADD4,ADD5,ADD6};
        !           105: 
        !           106: 
        !           107: static long savvec4;
        !           108: static long old_psw;
        !           109: 
        !           110: 
        !           111: adwc()
        !           112: {
        !           113:       asm("movl        $2,_no_opr");
        !           114:       for (index = 0; index < MAX_PATTERNS; index++) t_adwc();
        !           115:       asm("jmp *return");
        !           116: }      
        !           117: 
        !           118: 
        !           119: static t_adwc()
        !           120: {      char *msg;
        !           121:        for(;;)
        !           122:          { 
        !           123:           asm("a1:     movab   a1,_stpc");
        !           124:           sum = s[index];      /*initialize sum, addend, & psw */
        !           125:           add = a[index]; 
        !           126:           asm("movw    _index,r11");
        !           127:           asm("shll    $16,_i_psw[r11],_savvec4");
        !           128:           asm("bicpsw  $PSWMASK");
        !           129:           asm("movpsl  _old_psw");     
        !           130: 
        !           131:           if (index==0) {
        !           132:                setjmp();
        !           133:                asm("movl       $1,_subtst");
        !           134:                asm("bispsw     _savvec4");     /* mem to mem */
        !           135:                asm("adwc       _add,_sum");
        !           136:                asm("movpsl     _psw");         /*save psw              */
        !           137:                }
        !           138:           if (index==1) {
        !           139:                setjmp();
        !           140:                asm("movl       $2,_subtst");
        !           141:                asm("movl       _add,r6");      /* reg to mem */
        !           142:                asm("bicpsw     $PSWMASK");
        !           143:                asm("bispsw     _savvec4");
        !           144:                asm("adwc       r6,_sum");
        !           145:                asm("movpsl     _psw");         /*save psw              */
        !           146:                asm("movl       r6,_add");
        !           147:                }
        !           148:           if (index==2) {
        !           149:                setjmp();
        !           150:                asm("movl       $3,_subtst");
        !           151:                asm("movl       _sum,r7");      /* mem to reg */
        !           152:                asm("bicpsw     $PSWMASK");
        !           153:                asm("bispsw     _savvec4");
        !           154:                asm("adwc       _add,r7");
        !           155:                asm("movpsl     _psw");         /*save psw              */
        !           156:                asm("movl       r7,_sum");
        !           157:                }
        !           158:           if (index==3) {
        !           159:                setjmp();
        !           160:                asm("movl       $4,_subtst");
        !           161:                asm("movl       _add,r6");      /* reg to reg */
        !           162:                asm("movl       _sum,r7");
        !           163:                asm("bicpsw     $PSWMASK");
        !           164:                asm("bispsw     _savvec4");
        !           165:                asm("adwc       r6,r7");
        !           166:                asm("movpsl     _psw");         /*save psw              */
        !           167:                asm("movl       r6,_add");
        !           168:                asm("movl       r7,_sum");
        !           169:                         }
        !           170:           if (index==4) {
        !           171:                setjmp();
        !           172:                asm("movl       $5,_subtst");
        !           173:                asm("bicpsw     $PSWMASK");
        !           174:                asm("bispsw     _savvec4");     /* mem to mem */
        !           175:                asm("adwc       _add,_sum");
        !           176:                asm("movpsl     _psw");         /*save psw              */
        !           177:                }
        !           178:           if (index==5) {
        !           179:                setjmp();
        !           180:                asm("movl       $6,_subtst");
        !           181:                asm("bicpsw     $PSWMASK");
        !           182:                asm("bispsw     _savvec4");     /* mem to mem */
        !           183:                asm("adwc       _add,_sum");
        !           184:                asm("movpsl     _psw");         /*save psw              */
        !           185:                }
        !           186:           psw &= FLAGS;        /*mask out all bits except flag bits    */
        !           187:           if (sum != exp[index])
        !           188:                {
        !           189:                asm("movl       $1,_ercode");
        !           190:                if (scoplp) longjmp();
        !           191:                disp_error(sum,exp[index],a[index],s[index]);
        !           192:                }
        !           193:           if (add != a[index])
        !           194:                {
        !           195:                asm("movl       $3,_ercode");
        !           196:                if (scoplp) longjmp();
        !           197:                disp_error(add,a[index],a[index],s[index]);
        !           198:                }
        !           199:           if (psw != exp_psw[index])
        !           200:                {
        !           201:                asm("movl       $2,_ercode");
        !           202:                if (scoplp) longjmp();
        !           203:                disp_error(psw,exp_psw[index],a[index],s[index]);
        !           204:                }
        !           205:           else
        !           206:                if (force_lp) longjmp();
        !           207:                return(0);       
        !           208:           }
        !           209: }
        !           210: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.