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

1.1       root        1: /*     CASEL 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    HIGH,31                 /* highest interrupt priority   */
                     20: 
                     21: 
                     22:        .globl  _casel
                     23: _casel:
                     24:        callf   $4,_setjmp      /* save context for error return */
                     25:        movab   _casel,_stpc    /* save subtest address for return */
                     26:        movl    $1,_subtst      /* subtest number */
                     27:        movl    $3,_no_opr      /* number of operands in use */
                     28:        movl    $0,_opr         /* first operand */
                     29:        movl    $1,_opr + 4     /* second operand */
                     30:        movl    $7,_opr + 8     /* third operand */
                     31: 0:     bicpsw  $(IV|T)         /* disable exceptions           */
                     32: 
                     33: /*                                                             */
                     34: case:
                     35: /*     LIMIT > (SELECTOR-BASE)                                         */
                     36:        movl    $0,r0           /* set selector = r0 = 0                */
                     37:        movl    $0,r1           /* set base = r1 = 0                    */
                     38:        movl    $7,r2           /* set limit = 7; 8 cases ..            */
                     39:        bispsw  $(N|C)          /* set n,c flags                        */
                     40:        bicpsw  $(Z|V)          /* clear z,v flags                      */
                     41:        casel   r0,r1,r2
                     42:        .align  1               /* displacement list is word align */
                     43: cpc0:
                     44:        .word   loc0-cpc0
                     45:        .word   loc1-cpc0
                     46:        .word   loc2-cpc0
                     47:        .word   loc3-cpc0
                     48:        .word   loc4-cpc0
                     49:        .word   loc5-cpc0
                     50:        .word   loc6-cpc0
                     51:        .word   loc7-cpc0
                     52:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                     53:        movl    $1,_ercode      /* error code data miscompare */
                     54:        movl    r2,_actual      /* actual data */
                     55:        movl    $7,_expected    /* expected data */
                     56:        jmp     *badrtn         /* bad return failed */
                     57:        .space  1000            /* reserve 1000 bytes                   */
                     58: loc0:
                     59:        jgeq    error1          /* error if n flag not set              */
                     60:        jcc     error1          /* error if c flag not set              */
                     61:        jeql    error1          /* error if z or v flag set             */
                     62:        jvs     error1
                     63:        jmp     1f
                     64: error1:        movpsl  _actual         /* actual data psl MAYBE is incorrect */
                     65:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                     66:        movl    $2,_ercode      /* error code flag failure */
                     67:        jmp     *badrtn         /* bad return failed */
                     68: 1:     cmpl    r0,$0           /* make sure selector,base,limit unchanged*/
                     69:        jeql    1f
                     70:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                     71:        movl    $3,_ercode      /* error code operand miscompare */
                     72:        movl    r0,_actual      /* actual data */
                     73:        movl    $0,_expected    /* expected data */
                     74:        jmp     *badrtn         /* bad return failed */
                     75: 1:     bicpsw  $Z
                     76:        cmpl    r0,r1
                     77:        jeql    1f
                     78:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                     79:        movl    $3,_ercode      /* error code operand miscompare */
                     80:        movl    r1,_actual      /* actual data */
                     81:        movl    r0,_expected    /* expected data */
                     82:        jmp     *badrtn         /* bad return failed */
                     83:        bicpsw  $Z
                     84:        cmpl    r2,$0x7
                     85:        jeql    1f
                     86:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                     87:        movl    $3,_ercode      /* error code operand miscompare */
                     88:        movl    r2,_actual      /* actual data */
                     89:        movl    $7,_expected    /* expected data */
                     90:        jmp     *badrtn         /* bad return failed */
                     91: 1:     jmp     step1
                     92: loc1:
                     93:        jmp     loc7            /* take wrong displacement              */
                     94: loc2:
                     95:        jmp     loc7            /* take wrong displacement              */
                     96: loc3:
                     97:        jmp     loc7            /* take wrong displacement              */
                     98: loc4:
                     99:        jmp     loc7            /* take wrong displacement              */
                    100: loc5:
                    101:        jmp     loc7            /* take wrong displacement              */
                    102: loc6:
                    103:        jmp     loc7            /* take wrong displacement              */
                    104: loc7:
                    105:        bbs     $0,_scoplp,0b   /* if set scope loop on error           */
                    106:        movl    $3,_ercode      /* error code wrong operand (displacement) */
                    107:        jmp     *badrtn
                    108: 
                    109: 
                    110: step1: bbs     $0,_force_lp,0b /* if set loop on last subtest */
                    111: c2:    callf   $4,_setjmp      /* save context for error return */
                    112:        movab   c2,_stpc        /* save subtest address for return */
                    113:        movl    $2,_subtst      /* subtest number */
                    114:        movl    $3,_no_opr      /* number of operands in use */
                    115:        movl    $5,_opr         /* first operand */
                    116:        movl    $0,_opr + 4     /* second operand */
                    117:        movl    $7,_opr + 8     /* third operand */
                    118: 0:     movl    $5,r0           /* set selector = r0 = 5                */
                    119:        movl    $0,r1           /* set base = r1 = 0                    */
                    120:        movl    $7,r2           /* set limit = 7; 8 cases ..            */
                    121:        bispsw  $(N|C)          /* set n,c flags                        */
                    122:        bicpsw  $(Z|V)          /* clear z,v flags                      */
                    123:        casel   $5,$0,r2
                    124:        .align  1               /* displacement list is word align */
                    125: pc0:
                    126:        .word   l0-pc0
                    127:        .word   l1-pc0
                    128:        .word   l2-pc0
                    129:        .word   l3-pc0
                    130:        .word   l4-pc0
                    131:        .word   l5-pc0
                    132:        .word   l6-pc0
                    133:        .word   l7-pc0
                    134: 
                    135:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    136:        movl    $1,_ercode      /* error code data miscompare */
                    137:        movl    r2,_actual      /* actual data */
                    138:        movl    $7,_expected    /* expected data */
                    139:        jmp     *badrtn         /* bad return failed */
                    140:        .space  1000            /* reserve 1000 bytes                   */
                    141: l5:
                    142:        jgeq    error2          /* error if n flag not set              */
                    143:        jcc     error2          /* error if c flag not set              */
                    144:        jeql    error2          /* error if z or v flag set             */
                    145:        jvs     error2
                    146:        jmp     1f
                    147: error2:        movpsl  _actual         /* actual data psl MAYBE is incorrect */
                    148:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    149:        movl    $2,_ercode      /* error code flag failure */
                    150:        jmp     *badrtn         /* bad return failed */
                    151: 1:     cmpl    r0,$5           /* make sure selector,base,limit unchanged*/
                    152:        jeql    1f
                    153:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    154:        movl    $3,_ercode      /* error code operand miscompare */
                    155:        movl    r0,_actual      /* actual data */
                    156:        movl    $5,_expected    /* expected data */
                    157:        jmp     *badrtn         /* bad return failed */
                    158: 1:     bicpsw  $Z
                    159:        cmpl    r2,$0x7
                    160:        jeql    1f
                    161:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    162:        movl    $3,_ercode      /* error code operand miscompare */
                    163:        movl    r2,_actual      /* actual data */
                    164:        movl    $7,_expected    /* expected data */
                    165:        jmp     *badrtn         /* bad return failed */
                    166: 1:     jmp     step2
                    167: l0:
                    168:        jmp     l7              /* take wrong displacement              */
                    169: l1:
                    170:        jmp     l7              /* take wrong displacement              */
                    171: l2:
                    172:        jmp     l7              /* take wrong displacement              */
                    173: l3:
                    174:        jmp     l7              /* take wrong displacement              */
                    175: l4:
                    176:        jmp     l7              /* take wrong displacement              */
                    177: l6:
                    178:        jmp     l7              /* take wrong displacement              */
                    179: l7:
                    180:        bbs     $0,_scoplp,0b   /* if set scope loop on error           */
                    181:        movl    $3,_ercode      /* error code wrong operand (displacement) */
                    182:        jmp     *badrtn
                    183: 
                    184: /*     LIMIT = (SELECTOR-BASE)                                         */
                    185: step2:
                    186:        bbs     $0,_force_lp,0b /* if set loop on last subtest */
                    187: c3:    callf   $4,_setjmp      /* save context for error return */
                    188:        movab   c3,_stpc        /* save subtest address for return */
                    189:        movl    $3,_subtst      /* subtest number */
                    190:        movl    $3,_no_opr      /* number of operands in use */
                    191:        movl    $7,_opr         /* first operand */
                    192:        movl    $0,_opr + 4     /* second operand */
                    193:        movl    $7,_opr + 8     /* third operand */
                    194: 0:     movl    $0x7,sel        /* set selector = 7                     */
                    195:        movl    $0,base         /* set base = 0                         */
                    196:        movl    $0x7,limit      /* set limit = 7                        */
                    197:        bispsw  $Z              /* set z flag                           */
                    198:        bicpsw  $(N|V|C)        /* clear n,c,v flags                    */
                    199:        casel   sel,base,limit
                    200:        .align  1               /* displacement list is word align */
                    201: cpc1:
                    202:        .word   lc0-cpc1
                    203:        .word   lc1-cpc1
                    204:        .word   lc2-cpc1
                    205:        .word   lc3-cpc1
                    206:        .word   lc4-cpc1
                    207:        .word   lc5-cpc1
                    208:        .word   lc6-cpc1
                    209:        .word   lc7-cpc1
                    210: 
                    211:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    212:        movl    $1,_ercode      /* error code data miscompare */
                    213:        movl    limit,_actual   /* actual data */
                    214:        movl    $7,_expected    /* expected data */
                    215:        jmp     *badrtn         /* bad return failed */
                    216:        .space  1000            /* reserve 1000 bytes                   */
                    217: lc0:
                    218:        jmp     lc6     
                    219: lc1:
                    220:        jmp     lc6             /* take wrong displacement              */
                    221: lc2:
                    222:        jmp     lc6             /* take wrong displacement              */
                    223: lc3:
                    224:        jmp     lc6             /* take wrong displacement              */
                    225: lc4:
                    226:        jmp     lc6             /* take wrong displacement              */
                    227: lc5:
                    228:        jmp     lc6             /* take wrong displacement              */
                    229: lc6:
                    230:        bbs     $0,_scoplp,0b   /* if set scope loop on error           */
                    231:        movl    $3,_ercode      /* error code wrong operand (displacement) */
                    232:        jmp     *badrtn
                    233: lc7:
                    234:        jneq    error3          /* error if z flag not set              */
                    235:        jlss    error3          /* error if n,v,c flags set             */
                    236:        jcs     error3
                    237:        jvs     error3
                    238:        jmp     1f
                    239: error3:        movpsl  _actual         /* actual data psl MAYBE is incorrect */
                    240:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    241:        movl    $2,_ercode      /* error code flag failure */
                    242:        jmp     *badrtn         /* bad return failed */
                    243: 1:     cmpl    sel,$0x7        /* make sure selector,base,limit unchanged*/
                    244:        jeql    1f
                    245:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    246:        movl    $3,_ercode      /* error code operand miscompare */
                    247:        movl    sel,_actual     /* actual data */
                    248:        movl    $7,_expected    /* expected data */
                    249:        jmp     *badrtn         /* bad return failed */
                    250: 1:     bicpsw  $Z
                    251:        cmpl    base,$0 
                    252:        jeql    1f
                    253:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    254:        movl    $3,_ercode      /* error code operand miscompare */
                    255:        movl    base,_actual    /* actual data */
                    256:        movl    $0,_expected    /* expected data */
                    257:        jmp     *badrtn         /* bad return failed */
                    258: 1:     bicpsw  $Z
                    259:        cmpl    limit,$0x7
                    260:        jeql    step3
                    261:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    262:        movl    $3,_ercode      /* error code operand miscompare */
                    263:        movl    limit,_actual   /* actual data */
                    264:        movl    $7,_expected    /* expected data */
                    265:        jmp     *badrtn         /* bad return failed */
                    266: 
                    267: /*     LIMIT < (SELECTOR-BASE)                                         */
                    268: step3:
                    269:        bbs     $0,_force_lp,0b /* if set loop on last subtest */
                    270: c4:    callf   $4,_setjmp      /* save context for error return */
                    271:        movab   c4,_stpc        /* save subtest address for return */
                    272:        movl    $4,_subtst      /* subtest number */
                    273:        movl    $3,_no_opr      /* number of operands in use */
                    274:        movl    $19,_opr                /* first operand */
                    275:        movl    $10,_opr + 4    /* second operand */
                    276:        movl    $7,_opr + 8     /* third operand */
                    277: 0:     movl    $19,sel         /* set selector = 19                    */
                    278:        movl    $10,base        /* set base = 10                        */
                    279:        bicpsw  $(N|Z|V|C)      /* clear n,z,c,v flags                  */
                    280:        casel   sel,base,$7
                    281:        .align  1               /* displacement list is word align */
                    282: cpc2:
                    283:        .word   lx0-cpc2
                    284:        .word   lx1-cpc2
                    285:        .word   lx2-cpc2
                    286:        .word   lx3-cpc2
                    287:        .word   lx4-cpc2
                    288:        .word   lx5-cpc2
                    289:        .word   lx6-cpc2
                    290:        .word   lx7-cpc2
                    291: 
                    292:        jmp     default 
                    293:        .space  1000            /* reserve 1000 bytes                   */
                    294: lx0:
                    295:        jmp     lx7     
                    296: lx1:
                    297:        jmp     lx7             /* take wrong displacement              */
                    298: lx2:
                    299:        jmp     lx7             /* take wrong displacement              */
                    300: lx3:
                    301:        jmp     lx7             /* take wrong displacement              */
                    302: lx4:
                    303:        jmp     lx7             /* take wrong displacement              */
                    304: lx5:
                    305:        jmp     lx7             /* take wrong displacement              */
                    306: lx6:
                    307:        jmp     lx7             /* take wrong displacement              */
                    308: lx7:
                    309:        bbs     $0,_scoplp,0b   /* if set scope loop on error           */
                    310:        movl    $3,_ercode      /* error code wrong operand (displacement) */
                    311:        jmp     *badrtn
                    312: default:
                    313:        jlss    error4          /* error if n,z,v,c flags set           */
                    314:        jeql    error4
                    315:        jcs     error4
                    316:        jvs     error4
                    317:        jmp     1f
                    318: error4:        movpsl  _actual         /* actual data psl MAYBE is incorrect */
                    319:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    320:        movl    $2,_ercode      /* error code flag failure */
                    321:        jmp     *badrtn         /* bad return failed */
                    322: 1:     cmpl    sel,$19         /* make sure selector,base,limit unchanged*/
                    323:        jeql    1f
                    324:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    325:        movl    $3,_ercode      /* error code operand miscompare */
                    326:        movl    sel,_actual     /* actual data */
                    327:        movl    $19,_expected   /* expected data */
                    328:        jmp     *badrtn         /* bad return failed */
                    329: 1:     bicpsw  $Z
                    330:        cmpl    base,$10        
                    331:        jeql    done
                    332:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    333:        movl    $3,_ercode      /* error code operand miscompare */
                    334:        movl    base,_actual    /* actual data */
                    335:        movl    $10,_expected   /* expected data */
                    336:        jmp     *badrtn         /* bad return failed */
                    337: done:
                    338:        bbs     $0,_force_lp,0b /* if set loop on last subtest */
                    339:        jmp     *return
                    340: 
                    341: 
                    342: /*     TEST DATA                       */
                    343:        .align  2
                    344: sel:
                    345:        .long   0
                    346: base:
                    347:        .long   0
                    348: limit:
                    349:        .long   0
                    350: 

unix.superglobalmegacorp.com

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