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

1.1       root        1: /*     PUSHB 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    NEGB,0xffffff80
                     20:        .set    MAXNEGB,0x80ffffff
                     21:        .set    HIGH,31                 /* highest interrupt priority   */
                     22: 
                     23:        .globl  _pushbt
                     24: _pushbt:
                     25:        callf   $4,_setjmp      /* save context for error return */
                     26:        movab   _pushbt,_stpc   /* starting address of subtest */
                     27:        movl    $1,_subtst      /* subtest number */
                     28:        movl    $1,_no_opr      /* number of operands in use */
                     29:        movl    $NEGB,_opr      /* first operand */
                     30: 0:     bicpsw  $(IV|T)         /* disable exceptions           */
                     31: /*                                                             */
                     32: pushmw:                                /* PUSH MEMORY ON STACK         */
                     33:        movab   stk,r14         /* initialize stack pointer     */
                     34:        movab   stk,r10
                     35:        bispsw  $(Z|V)          /* set z,v flags                */
                     36:        bicpsw  $(C|N)          /* clear c,n flag               */
                     37:        pushb   negval          /* push negative value on stack */
                     38:        jgeq    error1          /* error if n flag not set      */
                     39:        jcc     error1          /* error if c flag not set      */
                     40:        jeql    error1          /* error if z flag set          */
                     41:        jvs     error1          /* error if v flag set          */
                     42:        jmp     1f
                     43: error1:        movpsl  _actual         /* actual = psl maybe incorrect */
                     44:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                     45:        movl    $2,_ercode      /* error code flag miscompare */
                     46:        jmp     *badrtn
                     47: 1:     movab   (r14),r13
                     48:        decl    r10
                     49:        decl    r10
                     50:        decl    r10
                     51:        decl    r10
                     52:        cmpl    r13,r10         /* check if stack get decrement */
                     53:        jeql    1f
                     54:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                     55:        movl    $1,_ercode      /* error code data miscompare */
                     56:        movl    r10,_actual     /* actual data */
                     57:        movl    r13,_expected   /* expected data */
                     58:        jmp     *badrtn
                     59: 1:     bicpsw  $Z
                     60:        cmpl    $NEGB,(r14)     /* check if value get put on stack      */
                     61:        jeql    1f
                     62:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                     63:        movl    $1,_ercode      /* error code data miscompare */
                     64:        movl    (r14),_actual   /* actual data */
                     65:        movl    $NEGB,_expected /* expected data */
                     66:        jmp     *badrtn
                     67: 1:     bicpsw  $Z
                     68:        cmpl    negval,$MAXNEGB /* check if source get affected */
                     69:        jeql    p2
                     70:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                     71:        movl    $3,_ercode      /* error code operand miscompare */
                     72:        movl    negval,_actual  /* actual data */
                     73:        movl    $MAXNEGB,_expected      /* expected data */
                     74:        jmp     *badrtn
                     75: 
                     76: p2:
                     77:        bbs     $0,_force_lp,0b /* if set loop on last subtest */
                     78: ap2:   callf   $4,_setjmp      /* save context for error return */
                     79:        movab   _pushbt,_stpc   /* starting address of subtest */
                     80:        movl    $2,_subtst      /* subtest number */
                     81:        movl    $1,_no_opr      /* number of operands in use */
                     82:        movl    result,_opr     /* first operand */
                     83: 0:     bispsw  $(Z|V|N)        /* set z,v,n flags              */
                     84:        bicpsw  $C              /* clear c flag                 */
                     85:        pushb   posval
                     86:        jcc     error2          /* error if c flag not set      */
                     87:        jlss    error2          /* error if n flag set          */
                     88:        jeql    error2          /* error if z flag set          */
                     89:        jvs     error2          /* error if v flag set          */
                     90:        jmp     1f
                     91: error2:        movpsl  _actual         /* actual = psl maybe incorrect */
                     92:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                     93:        movl    $2,_ercode      /* error code flag miscompare */
                     94:        jmp     *badrtn
                     95: 1:     movab   (r14),r13
                     96:        decl    r10
                     97:        decl    r10
                     98:        decl    r10
                     99:        decl    r10
                    100: 1:     cmpl    r13,r10         /* check if stack get decrement */
                    101:        jeql    1f
                    102:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    103:        movl    $1,_ercode      /* error code data miscompare */
                    104:        movl    r10,_actual     /* actual data */
                    105:        movl    r13,_expected   /* expected data */
                    106:        jmp     *badrtn
                    107: 1:     bicpsw  $Z
                    108:        cmpl    result,(r14)    /* check if value get put on stack      */
                    109:        jeql    1f
                    110:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    111:        movl    $1,_ercode      /* error code data miscompare */
                    112:        movl    (r14),_actual   /* actual data */
                    113:        movl    result,_expected        /* expected data */
                    114:        jmp     *badrtn
                    115: 1:     bicpsw  $Z
                    116:        cmpl    posval,$0x7faaaaaa      /* check if source get affected */
                    117:        jeql    pushrw
                    118:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    119:        movl    $3,_ercode      /* error code operand miscompare */
                    120:        movl    posval,_actual  /* actual data */
                    121:        movl    $0x7faaaaaa,_expected   /* expected data */
                    122:        jmp     *badrtn
                    123: pushrw:                                /* PUSH REGISTER ON STACK       */
                    124:        bbs     $0,_force_lp,0b /* if set loop on last subtest */
                    125: ap3:   callf   $4,_setjmp      /* save context for error return */
                    126:        movab   ap3,_stpc       /* starting address of subtest */
                    127:        movl    $3,_subtst      /* subtest number */
                    128:        movl    $1,_no_opr      /* number of operands in use */
                    129:        movl    tstdat,_opr     /* first operand */
                    130: 0:     movl    tstdat,r0       /* move test data to r0         */
                    131:        bispsw  $(Z|V)          /* set z,v flags                */
                    132:        bicpsw  $(C|N)          /* clear n,c flag               */
                    133:        pushb   r0              /* push r0 on stack             */
                    134:        jgeq    error3          /* error if n flag not set      */
                    135:        jeql    error3          /* error if z flag set          */
                    136:        jvs     error3          /* error if v flag set          */
                    137:        jcc     error3          /* error if c flag not set      */
                    138:        jmp     1f
                    139: error3:        movpsl  _actual         /* actual = psl maybe incorrect */
                    140:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    141:        movl    $2,_ercode      /* error code flag miscompare */
                    142:        jmp     *badrtn
                    143: 1:     movab   (r14),r13
                    144:        decl    r10
                    145:        decl    r10
                    146:        decl    r10
                    147:        decl    r10
                    148:        cmpl    r13,r10         /* check if stack get decrement */
                    149:        jeql    1f
                    150:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    151:        movl    $1,_ercode      /* error code data miscompare */
                    152:        movl    r10,_actual     /* actual data */
                    153:        movl    r13,_expected   /* expected data */
                    154:        jmp     *badrtn
                    155: 1:     bicpsw  $Z
                    156:        cmpl    tstdat,(r14)    /* check if value get pushed    */
                    157:        jeql    1f
                    158:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    159:        movl    $1,_ercode      /* error code data miscompare */
                    160:        movl    (r14),_actual   /* actual data */
                    161:        movl    tstdat,_expected        /* expected data */
                    162:        jmp     *badrtn
                    163: 1:     bicpsw  $Z
                    164:        cmpl    r0,tstdat       /* make sure source unchanged   */
                    165:        jeql    zflag
                    166:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    167:        movl    $3,_ercode      /* error code operand miscompare */
                    168:        movl    tstdat,_actual  /* actual data */
                    169:        movl    r0,_expected    /* expected data */
                    170:        jmp     *badrtn
                    171: zflag:                         /* check z flag                 */
                    172:        bbs     $0,_force_lp,0b /* if set loop on last subtest */
                    173: ap4:   callf   $4,_setjmp      /* save context for error return */
                    174:        movab   ap4,_stpc       /* starting address of subtest */
                    175:        movl    $4,_subtst      /* subtest number */
                    176:        movl    $1,_no_opr      /* number of operands in use */
                    177:        movl    $0,_opr /* first operand */
                    178: 0:     movl    $0x0,r11 
                    179:        bispsw  $(N|V)          /* set n,v flags                */
                    180:        bicpsw  $(C|Z)          /* clear z,c flag               */
                    181:        pushb   r11             /* push r11 on stack            */
                    182:        jlss    error4          /* error if n flag set          */
                    183:        jvs     error4          /* error if v flag set          */
                    184:        jneq    error4          /* error if z flag not set      */
                    185:        jcc     error4          /* error if c flag not set      */
                    186:        jmp     1f
                    187: error4:        movpsl  _actual         /* actual = psl maybe incorrect */
                    188:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    189:        movl    $2,_ercode      /* error code flag miscompare */
                    190:        jmp     *badrtn
                    191: 1:     movab   (r14),r13
                    192:        decl    r10     
                    193:        decl    r10     
                    194:        decl    r10     
                    195:        decl    r10     
                    196:        cmpl    r13,r10         /* check if stack get decrement */
                    197:        jeql    1f
                    198:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    199:        movl    $1,_ercode      /* error code data miscompare */
                    200:        movl    r13,_actual     /* actual data */
                    201:        movl    r10,_expected   /* expected data */
                    202:        jmp     *badrtn
                    203: 1:     bicpsw  $Z
                    204:        cmpl    $0,(r14)        /* compare r14 to 0             */
                    205:        jeql    1f
                    206:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    207:        movl    $1,_ercode      /* error code data miscompare */
                    208:        movl    (r14),_actual   /* actual data */
                    209:        movl    $0,_expected    /* expected data */
                    210:        jmp     *badrtn
                    211: 1:     bicpsw  $Z
                    212:        cmpl    $0,r11          /* compare source to 0          */
                    213:        jeql    p5
                    214:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    215:        movl    $3,_ercode      /* error code operand miscompare */
                    216:        movl    r11,_actual     /* actual data */
                    217:        movl    $0,_expected    /* expected data */
                    218:        jmp     *badrtn
                    219: 
                    220: 
                    221: p5:
                    222:        bbs     $0,_force_lp,0b /* if set loop on last subtest */
                    223: ap5:   callf   $4,_setjmp      /* save context for error return */
                    224:        movab   ap5,_stpc       /* starting address of subtest */
                    225:        movl    $5,_subtst      /* subtest number */
                    226:        movl    $1,_no_opr      /* number of operands in use */
                    227:        movl    $0x11,_opr      /* first operand */
                    228: 0:     bispsw  $(N|V)          /* set n,v flags                */
                    229:        bicpsw  $(C|Z)          /* clear z,c flag               */
                    230:        pushb   $0x11           /* push literal         */
                    231:        jlss    error5          /* error if n flag set          */
                    232:        jvs     error5          /* error if v flag set          */
                    233:        jeql    error5          /* error if z flag set  */
                    234:        jcc     error5          /* error if c flag not set      */
                    235:        jmp     1f
                    236: error5:        movpsl  _actual         /* actual = psl maybe incorrect */
                    237:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    238:        movl    $2,_ercode      /* error code flag miscompare */
                    239:        jmp     *badrtn
                    240: 1:     movab   (r14),r13
                    241:        decl    r10     
                    242:        decl    r10     
                    243:        decl    r10     
                    244:        decl    r10     
                    245:        cmpl    r13,r10         /* check if stack get decrement */
                    246:        jeql    1f
                    247:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    248:        movl    $1,_ercode      /* error code data miscompare */
                    249:        movl    r13,_actual     /* actual data */
                    250:        movl    r10,_expected   /* expected data */
                    251:        jmp     *badrtn
                    252: 1:     bicpsw  $Z
                    253:        cmpl    $0x11,(r14)     /* compare r14 to literal       */
                    254:        jeql    aldn
                    255:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    256:        movl    $1,_ercode      /* error code data miscompare */
                    257:        movl    (r14),_actual   /* actual data */
                    258:        movl    $0x11,_expected /* expected data */
                    259:        jmp     *badrtn
                    260: 
                    261: aldn:  bbs     $0,_force_lp,0b /* if set loop on last subtest */
                    262:        jmp     *return         /* good, return to monitor */
                    263: 
                    264: 
                    265: /*     test data               */
                    266:        .align  2
                    267: /*     stack                   */
                    268:        .space  40
                    269: stk:   .long   0
                    270: negval:        .long   MAXNEGB 
                    271: tstdat: .long  0xffffff7a
                    272: posval: .long   0x7faaaaaa
                    273: result: .long   0x7f

unix.superglobalmegacorp.com

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