Annotation of cci/d/entry/casel.s, revision 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.