Annotation of cci/d/entry/pushl.s, revision 1.1.1.1

1.1       root        1: /*     PUSHL instruction test          */
                      2: /*       Privilege registers           */
                      3: 
                      4:        .set    IPL,8
                      5:        .set    MAPEN,9
                      6:        .set    KSP,19
                      7: 
                      8: /*       PSL fields                    */
                      9:        .set    IV,32
                     10:        .set    T,16
                     11:        .set    N,8
                     12:        .set    Z,4
                     13:        .set    V,2
                     14:        .set    C,1
                     15: 
                     16: /*       constants                     */
                     17:        .set    DISABLE,0
                     18:        .set    ENABLE,1
                     19:        .set    MAXPOSL,0x7fffffff
                     20:        .set    MAXNEGL,0x80000000
                     21:        .set    NEGVAL,0xfaaaaaaa
                     22:        .set    HIGH,31                 /* highest interrupt priority   */
                     23: 
                     24:        .globl  _pushlw
                     25: _pushlw:
                     26:        callf   $4,_setjmp      /* save context for error return */
                     27:        movab   _pushlw,_stpc   /* starting address of subtest  */
                     28:        movl    $1,_subtst      /* subtest number */
                     29:        movl    $1,_no_opr      /* number of operands in use    */
                     30:        movl    negval,_opr     /* first operand */
                     31: 0:     bicpsw  $(IV|T)         /* disable exceptions           */
                     32: /*                                                             */
                     33: pushml:                                /* PUSH MEMORY ON STACK         */
                     34:        movab   stk,r14         /* initialize stack pointer     */
                     35:        movab   stk,r10
                     36:        bispsw  $(Z|V)          /* set z,v flags                */
                     37:        bicpsw  $(N|C)          /* clear n,c flag               */
                     38:        pushl   negval          /* push negative value on stack */
                     39:        jgeq    error1          /* error if n flag not set      */
                     40:        jeql    error1          /* error if z flag set          */
                     41:        jvs     error1          /* error if v flag set          */
                     42:        jcc     error1          /* error if c flag not set      */
                     43:        jmp     1f
                     44: error1:        movpsl  _actual         /* actual = psl maybe incorrect */
                     45:        bbs     $0,_scoplp,0b   /* if set scope loop on error   */
                     46:        movl    $2,_ercode      /* error code flag failure      */
                     47:        jmp     *badrtn
                     48: 1:     movab   (sp),r13
                     49:        decl    r10
                     50:        decl    r10
                     51:        decl    r10
                     52:        decl    r10
                     53:        cmpl    r10,r13         /* check if stack get decremented */
                     54:        jeql    1f
                     55:        bbs     $0,_scoplp,0b   /* if set scope loop on error   */
                     56:        movl    $1,_ercode      /* error code data miscompare */
                     57:        movl    r13,_actual     /* actual data */
                     58:        movl    r10,_expected   /* expected data */
                     59:        jmp     *badrtn
                     60: 1:     bicpsw  $Z
                     61:        cmpl    $NEGVAL,(r14)   /* check if value get put on stack      */
                     62:        jeql    1f
                     63:        bbs     $0,_scoplp,0b   /* if set scope loop on error   */
                     64:        movl    $1,_ercode      /* error code data miscompare */
                     65:        movl    (r14),_actual   /* actual data */
                     66:        movl    $NEGVAL,_expected       /* expected data */
                     67:        jmp     *badrtn
                     68: 1:     bicpsw  $Z
                     69:        cmpl    negval,$NEGVAL  /* check if source get affected */
                     70:        jeql    pushrl
                     71:        bbs     $0,_scoplp,0b   /* if set scope loop on error   */
                     72:        movl    $3,_ercode      /* error code operand miscompare */
                     73:        movl    negval,_actual  /* actual data */
                     74:        movl    $NEGVAL,_expected       /* expected data */
                     75:        jmp     *badrtn
                     76: pushrl:                                /* PUSH REGISTER ON STACK       */
                     77:        bbs     $0,_force_lp,0b /* if set loop on last subtest */
                     78: ap2:   callf   $4,_setjmp      /* save context for error return */
                     79:        movab   ap2,_stpc       /* starting address of subtest  */
                     80:        movl    $2,_subtst      /* subtest number */
                     81:        movl    $1,_no_opr      /* number of operands in use    */
                     82:        movl    negval,_opr     /* first operand */
                     83: 0:     movl    negval,r3       /* move negval to r3            */
                     84:        bispsw  $(Z|V)          /* set z,v flags                */
                     85:        bicpsw  $(N|C)          /* clear N,C flag               */
                     86:        pushl   r3              /* push r3 on stack             */
                     87:        jgeq    error2          /* error if n flag not set      */
                     88:        jcc     error2          /* error if c flag not set      */
                     89:        jeql    error2          /* error if z flag set          */
                     90:        jvs     error2          /* error if v flag set          */
                     91:        jmp     1f
                     92: error2:        movpsl  _actual         /* actual = psl maybe incorrect */
                     93:        bbs     $0,_scoplp,0b   /* if set scope loop on error   */
                     94:        movl    $2,_ercode      /* error code flag failure      */
                     95:        jmp     *badrtn
                     96: 1:     movab   (r14),r13
                     97:        decl    r10
                     98:        decl    r10
                     99:        decl    r10
                    100:        decl    r10
                    101:        cmpl    r10,r13         /* check if stack get declrement        */
                    102:        jeql    1f
                    103:        bbs     $0,_scoplp,0b   /* if set scope loop on error   */
                    104:        movl    $1,_ercode      /* error code data miscompare */
                    105:        movl    r13,_actual     /* actual data */
                    106:        movl    r10,_expected   /* expected data */
                    107:        jmp     *badrtn
                    108: 1:     bicpsw  $Z
                    109:        cmpl    $NEGVAL,(r14)   /* compare r14 to negval        */
                    110:        jeql    1f
                    111:        bbs     $0,_scoplp,0b   /* if set scope loop on error   */
                    112:        movl    $1,_ercode      /* error code data miscompare */
                    113:        movl    (r14),_actual   /* actual data */
                    114:        movl    $NEGVAL,_expected       /* expected data */
                    115:        jmp     *badrtn
                    116: 1:     bicpsw  $Z
                    117:        cmpl    r3,negval       /* make sure source unchanged   */
                    118:        jeql    zflag
                    119:        bbs     $0,_scoplp,0b   /* if set scope loop on error   */
                    120:        movl    $1,_ercode      /* error code data miscompare */
                    121:        movl    r3,_actual      /* actual data */
                    122:        movl    negval,_expected        /* expected data */
                    123:        jmp     *badrtn
                    124: zflag:                         /* check z flag                 */
                    125:        bbs     $0,_force_lp,0b /* if set loop on last subtest */
                    126: ap3:   callf   $4,_setjmp      /* save context for error return */
                    127:        movab   ap3,_stpc       /* starting address of subtest  */
                    128:        movl    $3,_subtst      /* subtest number */
                    129:        movl    $1,_no_opr      /* number of operands in use    */
                    130:        movl    $0,_opr /* first operand */
                    131: 0:     movl    $0,r11          /* set r11 = 0                  */ 
                    132:        bispsw  $V              /* set v flags                  */
                    133:        bicpsw  $(Z|N|C)        /* clear Z,N,C flag             */
                    134:        pushl   r11             /* push r11 on stack            */
                    135:        jlss    error3          /* error if n flag set          */
                    136:        jvs     error3          /* error if v flag set          */
                    137:        jneq    error3          /* error if z flag not set      */
                    138:        jcc     error3          /* error if c flag not set      */
                    139:        jmp     1f
                    140: error3:        movpsl  _actual         /* actual = psl maybe incorrect */
                    141:        bbs     $0,_scoplp,0b   /* if set scope loop on error   */
                    142:        movl    $2,_ercode      /* error code flag failure      */
                    143:        jmp     *badrtn
                    144: 1:     movab   (r14),r13
                    145:        decl    r10
                    146:        decl    r10
                    147:        decl    r10
                    148:        decl    r10
                    149:        cmpl    r10,r13         /* check if stack get declrement        */
                    150:        jeql    1f
                    151:        bbs     $0,_scoplp,0b   /* if set scope loop on error   */
                    152:        movl    $1,_ercode      /* error code data miscompare */
                    153:        movl    r13,_actual     /* actual data */
                    154:        movl    r10,_expected   /* expected data */
                    155:        jmp     *badrtn
                    156: 1:     bicpsw  $Z
                    157:        cmpl    $0,(r14)        /* compare r14 to 0             */
                    158:        jeql    1f
                    159:        bbs     $0,_scoplp,0b   /* if set scope loop on error   */
                    160:        movl    $1,_ercode      /* error code data miscompare */
                    161:        movl    (r14),_actual   /* actual data */
                    162:        movl    $0,_expected    /* expected data */
                    163:        jmp     *badrtn
                    164: 1:     bicpsw  $Z
                    165:        cmpl    $0,r11          /* compare source to 0          */
                    166:        jeql    p4
                    167:        bbs     $0,_scoplp,0b   /* if set scope loop on error   */
                    168:        movl    $3,_ercode      /* error code operand miscompare */
                    169:        movl    r10,_actual     /* actual data */
                    170:        movl    $0,_expected    /* expected data */
                    171:        jmp     *badrtn
                    172: 
                    173:                                /* PUSH LITERAL         */
                    174: p4:
                    175:        bbs     $0,_force_lp,0b /* if set loop on last subtest */
                    176: ap4:   callf   $4,_setjmp      /* save context for error return */
                    177:        movab   ap4,_stpc       /* starting address of subtest  */
                    178:        movl    $4,_subtst      /* subtest number */
                    179:        movl    $1,_no_opr      /* number of operands in use    */
                    180:        movl    $0x3f,_opr      /* first operand */
                    181: 0:     pushl   $0x3f           /* push literal value on stack  */
                    182:        movab   (sp),r13
                    183:        decl    r10
                    184:        decl    r10
                    185:        decl    r10
                    186:        decl    r10
                    187:        cmpl    r10,r13         /* check if stack get decremented */
                    188:        jeql    1f
                    189:        bbs     $0,_scoplp,0b   /* if set scope loop on error   */
                    190:        movl    $1,_ercode      /* error code data miscompare */
                    191:        movl    r13,_actual     /* actual data */
                    192:        movl    r10,_expected   /* expected data */
                    193:        jmp     *badrtn
                    194: 1:     cmpl    $0x3f,(r14)     /* check if value get put on stack      */
                    195:        jeql    p5
                    196:        bbs     $0,_scoplp,0b   /* if set scope loop on error   */
                    197:        movl    $1,_ercode      /* error code data miscompare */
                    198:        movl    (r14),_actual   /* actual data */
                    199:        movl    $0x3f,_expected /* expected data */
                    200:        jmp     *badrtn
                    201: 
                    202: p5:
                    203:        bbs     $0,_force_lp,0b /* if set loop on last subtest */
                    204: ap5:   callf   $4,_setjmp      /* save context for error return */
                    205:        movab   ap5,_stpc       /* starting address of subtest  */
                    206:        movl    $5,_subtst      /* subtest number */
                    207:        movl    $1,_no_opr      /* number of operands in use    */
                    208:        movl    $0x11,_opr      /* first operand */
                    209: 0:     pushl   $0x11           /* push literal value on stack  */
                    210:        movab   (sp),r13
                    211:        decl    r10
                    212:        decl    r10
                    213:        decl    r10
                    214:        decl    r10
                    215:        cmpl    r10,r13         /* check if stack get decremented */
                    216:        jeql    1f
                    217:        bbs     $0,_scoplp,0b   /* if set scope loop on error   */
                    218:        movl    $1,_ercode      /* error code data miscompare */
                    219:        movl    r13,_actual     /* actual data */
                    220:        movl    r10,_expected   /* expected data */
                    221:        jmp     *badrtn
                    222: 1:     cmpl    $0x11,(r14)     /* check if value get put on stack      */
                    223:        jeql    aldn
                    224:        bbs     $0,_scoplp,0b   /* if set scope loop on error   */
                    225:        movl    $1,_ercode      /* error code data miscompare */
                    226:        movl    (r14),_actual   /* actual data */
                    227:        movl    $0x11,_expected /* expected data */
                    228:        jmp     *badrtn
                    229: 
                    230: 
                    231: aldn:  bbs     $0,_force_lp,0b /* if set loop on last subtest */
                    232:        jmp     *return         /* good, return to monitor */
                    233: 
                    234:        jmp     *badrtn
                    235: 
                    236: /*     test data               */
                    237:        .align  2
                    238: /*     stack                   */
                    239:        .space  40              /* 10 longwords for stack */
                    240: stk:   .long   0
                    241: negval:        .long   NEGVAL  
                    242: 

unix.superglobalmegacorp.com

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