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

1.1       root        1: /*     SHRQ 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:        .globl  _shrq
                     22: _shrq:
                     23:        callf   $4,_setjmp      /* save context for error return */
                     24:        movab   _shrq,_stpc     /* starting address of subtest */
                     25:        movl    $1,_subtst      /* subtest number */
                     26:        movl    $3,_no_opr      /* number of operands in use */
                     27:        movl    $32,_opr        /* first operand */
                     28:        movl    $0,_opr + 4     /* second operand */
                     29:        movl    $0xffffffff,_opr + 8 /* third operand */
                     30: 0:     bicpsw  $(IV|T)         /* disable exceptions           */
                     31: /*                                                             */
                     32: srq:                           /* SHIFT RIGHT QUAD FROM MEMORY TO REGISTER */
                     33:        movl    $0,sloc0                /* set sloc0            */
                     34:        movl    $0xffffffff,sloc1       /* set sloc1 = 0xffffffff       */
                     35:        movl    $0xffffffff,r4
                     36:        movl    $0xffffffff,r5
                     37:        bispsw  $(V|N|C)                /* set n,v,c flags              */
                     38:        bicpsw  $Z                      /* clear z flag                 */
                     39:        shrq    $32,sloc0,r4            /* shift right 32 and put in r4,r5 */
                     40:        jneq    error1                  /* error if z flag not set      */
                     41:        jcc     error1                  /* error if c flag not set      */
                     42:        jvs     error1                  /* error if v flag set          */
                     43:        jlss    error1                  /* error if n flag set          */
                     44:        jmp     1f
                     45: error1:        movpsl  _actual         /* actual = psl maybe incorrect */
                     46:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                     47:        movl    $2,_ercode      /* error code flag failure */
                     48:        jmp     *badrtn
                     49: 1:     bicpsw  $Z
                     50:        cmpl    r5,$0                   /* check result                 */
                     51:        jeql    1f              /* if correct continue */
                     52:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                     53:        movl    $1,_ercode      /* error code data miscompare */
                     54:        movl    r5,_actual      /* actual data */
                     55:        movl    $0,_expected    /* expected data */
                     56:        jmp     *badrtn
                     57: 1:     bicpsw  $Z
                     58:        cmpl    r4,$0
                     59:        jeql    1f              /* if correct continue */
                     60:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                     61:        movl    $1,_ercode      /* error code data miscompare */
                     62:        movl    r4,_actual      /* actual data */
                     63:        movl    $0,_expected    /* expected data */
                     64:        jmp     *badrtn
                     65: 1:     bicpsw  $Z
                     66:        cmpl    $0xffffffff,sloc1       /* check if source get affected */
                     67:        jeql    1f              /* if correct continue */
                     68:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                     69:        movl    $3,_ercode      /* error code operand miscompare */
                     70:        movl    sloc1,_actual   /* actual data */
                     71:        movl    $0xffffffff,_expected   /* expected data */
                     72:        jmp     *badrtn
                     73: 1:     bicpsw  $Z
                     74:        cmpl    sloc0,$0
                     75:        jeql    s2              /* if correct continue */
                     76:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                     77:        movl    $3,_ercode      /* error code operand miscompare */
                     78:        movl    sloc0,_actual   /* actual data */
                     79:        movl    $0,_expected    /* expected data */
                     80:        jmp     *badrtn
                     81: /*                               SHIFT RIGHT QUAD FROM REGISTER TO MEMORY */
                     82: s2:
                     83:        bbs     $0,_force_lp,0b /* if set loop on last subtest */
                     84: as2:   callf   $4,_setjmp      /* save context for error return */
                     85:        movab   as2,_stpc       /* starting address of subtest */
                     86:        movl    $2,_subtst      /* subtest number */
                     87:        movl    $3,_no_opr      /* number of operands in use */
                     88:        movl    $30,_opr        /* first operand */
                     89:        movl    $0xffffffff,_opr + 4    /* second operand */
                     90:        movl    $0xffffffff,_opr + 8 /* third operand */
                     91: 0:     movl    $0xffffffff,dloc0       /* set dloc0 = dloc1 = 0xffffffff */
                     92:        movl    dloc0,dloc1
                     93:        movb    $30,temp        /* set temp = shift count               */
                     94:        bispsw  $(N|V|C)        /* set n,v,c flags                      */
                     95:        bicpsw  $Z              /* clear z flag                         */
                     96:        shrq    temp,r4,dloc0   /* shift r4,r5 left 32 and put in dloc  */
                     97:        jneq    error2          /* error if z flag not set              */
                     98:        jcc     error2          /* error if c flag not set              */
                     99:        jvs     error2          /* error if v flag set                  */
                    100:        jlss    error2          /* error if n flag set                  */
                    101:        jmp     1f
                    102: error2:        movpsl  _actual         /* actual = psl maybe incorrect */
                    103:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    104:        movl    $2,_ercode      /* error code flag failure */
                    105:        jmp     *badrtn
                    106: 1:     cmpl    dloc0,$0        /* check result                         */
                    107:        jeql    1f              /* if correct continue */
                    108:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    109:        movl    $1,_ercode      /* error code data miscompare */
                    110:        movl    dloc0,_actual   /* actual data */
                    111:        movl    $0,_expected    /* expected data */
                    112:        jmp     *badrtn
                    113: 1:     bicpsw  $Z
                    114:        cmpl    dloc1,dloc0
                    115:        jeql    1f              /* if correct continue */
                    116:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    117:        movl    $1,_ercode      /* error code data miscompare */
                    118:        movl    dloc1,_actual   /* actual data */
                    119:        movl    dloc0,_expected /* expected data */
                    120:        jmp     *badrtn
                    121: 1:     bicpsw  $Z
                    122:        cmpl    r4,$0           /* make sure source unchanged           */
                    123:        jeql    1f              /* if correct continue */
                    124:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    125:        movl    $3,_ercode      /* error code operand miscompare */
                    126:        movl    r4,_actual      /* actual data */
                    127:        movl    $0,_expected    /* expected data */
                    128:        jmp     *badrtn
                    129: 1:     bicpsw  $Z
                    130:        cmpl    r5,$0
                    131:        jeql    s3              /* if correct continue */
                    132:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    133:        movl    $3,_ercode      /* error code operand miscompare */
                    134:        movl    r5,_actual      /* actual data */
                    135:        movl    $0,_expected    /* expected data */
                    136:        jmp     *badrtn
                    137: /*                               SHIFT RIGHT QUAD FROM MEMORY TO MEMORY */
                    138: s3:
                    139:        bbs     $0,_force_lp,0b /* if set loop on last subtest */
                    140: as3:   callf   $4,_setjmp      /* save context for error return */
                    141:        movab   as3,_stpc       /* starting address of subtest */
                    142:        movl    $3,_subtst      /* subtest number */
                    143:        movl    $3,_no_opr      /* number of operands in use */
                    144:        movl    $3,_opr /* first operand */
                    145:        movl    $0x55555555,_opr + 4    /* second operand */
                    146:        movl    $0x55555555,_opr + 8 /* third operand */
                    147: 0:     movl    $0x55555555,sloc0       /* set sloc0 = sloc1 = 0x55555555 */
                    148:        movl    sloc0,sloc1
                    149:        movb    $3,r3           /* set r3 = shift count         */
                    150:        bispsw  $(Z|V|C)        /* set v,z,c flags                      */
                    151:        bicpsw  $N
                    152:        shrq    r3,sloc0,sloc0  /* shift and put result back in sloc0  */
                    153:        jlss    error3          /* error if n flag still set            */
                    154:        jvs     error3          /* error if v flag still set            */
                    155:        jeql    error3          /* error if z flag still set            */
                    156:        jcc     error3          /* error if c flag not set              */
                    157:        jmp     1f
                    158: error3:        movpsl  _actual         /* actual = psl maybe incorrect */
                    159:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    160:        movl    $2,_ercode      /* error code flag failure */
                    161:        jmp     *badrtn
                    162: 1:     cmpl    sloc0,$0xaaaaaaa        /* check result                 */
                    163:        jeql    1f              /* if correct continue */
                    164:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    165:        movl    $1,_ercode      /* error code data miscompare */
                    166:        movl    sloc0,_actual   /* actual data */
                    167:        movl    $0xaaaaaaaa,_expected   /* expected data */
                    168:        jmp     *badrtn
                    169: 1:     bicpsw  $Z
                    170:        cmpl    sloc1,$0xaaaaaaaa
                    171:        jeql    s4              /* if correct continue */
                    172:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    173:        movl    $1,_ercode      /* error code data miscompare */
                    174:        movl    sloc1,_actual   /* actual data */
                    175:        movl    $0xaaaaaaaa,_expected   /* expected data */
                    176:        jmp     *badrtn
                    177: /*                               SPECIAL CASES                         */
                    178: /*                                     shift count = 0                 */
                    179: s4:
                    180:        bbs     $0,_force_lp,0b /* if set loop on last subtest */
                    181: as4:   callf   $4,_setjmp      /* save context for error return */
                    182:        movab   as4,_stpc       /* starting address of subtest */
                    183:        movl    $4,_subtst      /* subtest number */
                    184:        movl    $3,_no_opr      /* number of operands in use */
                    185:        movl    $0,_opr /* first operand */
                    186:        movl    $0xfedcba98,_opr + 4    /* second operand */
                    187:        movl    $0x76543210,_opr + 8 /* third operand */
                    188: 0:     movl    $0,r10                  /* set r10 = r11 = 0            */
                    189:        movl    r10,r11
                    190:        movl    r11,r6                  /* set r6 = shift count         */
                    191:        movl    $0xfedcba98,r4          /* set r4 = 0xfedcba98          */
                    192:        movl    $0x76543210,r5          /* set r8 = 0x76543210          */
                    193:        bispsw  $(C|Z|V)                /* set c,z,v flags              */
                    194:        bicpsw  $N
                    195:        shrq    r6,r4,r10       /* shift right 0 and put in r10,r11     */
                    196:        jgeq    error4                  /* error if n flag not set      */
                    197:        jcc     error4                  /* error if c flag not set      */
                    198:        jeql    error4                  /* error if z flag still set    */
                    199:        jvs     error4                  /* error if v flag still set    */
                    200:        jmp     1f
                    201: error4:        movpsl  _actual         /* actual = psl maybe incorrect */
                    202:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    203:        movl    $2,_ercode      /* error code flag failure */
                    204:        jmp     *badrtn
                    205: 1:     cmpl    $0xfedcba98,r10         /* check result                 */
                    206:        jeql    1f              /* if correct continue */
                    207:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    208:        movl    $1,_ercode      /* error code data miscompare */
                    209:        movl    r10,_actual     /* actual data */
                    210:        movl    $0xfedcba98,_expected   /* expected data */
                    211:        jmp     *badrtn
                    212: 1:     bicpsw  $Z
                    213:        cmpl    $0x76543210,r11
                    214:        jeql    1f              /* if correct continue */
                    215:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    216:        movl    $1,_ercode      /* error code data miscompare */
                    217:        movl    r11,_actual     /* actual data */
                    218:        movl    $0x76543210,_expected   /* expected data */
                    219:        jmp     *badrtn
                    220: 1:     bicpsw  $Z
                    221:        cmpl    r4,r10                  /* make sure source unchanged   */
                    222:        jeql    1f              /* if correct continue */
                    223:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    224:        movl    $3,_ercode      /* error code operand miscompare */
                    225:        movl    r4,_actual      /* actual data */
                    226:        movl    r10,_expected   /* expected data */
                    227:        jmp     *badrtn
                    228: 1:     bicpsw  $Z
                    229:        cmpl    r5,r11
                    230:        jeql    s5              /* if correct continue */
                    231:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    232:        movl    $3,_ercode      /* error code operand miscompare */
                    233:        movl    r5,_actual      /* actual data */
                    234:        movl    r11,_expected   /* expected data */
                    235:        jmp     *badrtn
                    236: /*                                     shift count = 64                */
                    237: s5:
                    238:        bbs     $0,_force_lp,0b /* if set loop on last subtest */
                    239: as5:   callf   $4,_setjmp      /* save context for error return */
                    240:        movab   as5,_stpc       /* starting address of subtest */
                    241:        movl    $5,_subtst      /* subtest number */
                    242:        movl    $3,_no_opr      /* number of operands in use */
                    243:        movl    $64,_opr        /* first operand */
                    244:        movl    $0xfedcba98,_opr + 4    /* second operand */
                    245:        movl    $0x76543210,_opr + 8 /* third operand */
                    246: 0:     movl    $0xffffffff,r4
                    247:        movl    r4,r5
                    248:        movb    $64,temp        /* set shift count = 64                 */
                    249:        bispsw  $(N|V|C)        /* set n,c,v flags                      */
                    250:        bicpsw  $Z              /* clear z flag                         */
                    251:        shrq    temp,r10,r4     /* shift r10,r11 left 64 and put in r4,r5*/
                    252:        jneq    error5          /* error if z flag not set              */
                    253:        jcc     error5          /* error if c flag not set              */
                    254:        jlss    error5          /* error if v,n flag set                */
                    255:        jvs     error5
                    256:        jmp     1f
                    257: error5:        movpsl  _actual         /* actual = psl maybe incorrect */
                    258:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    259:        movl    $2,_ercode      /* error code flag failure */
                    260:        jmp     *badrtn
                    261: 1:     bicpsw  $Z
                    262:        cmpl    r4,$0           /* check result                         */
                    263:        jeql    1f              /* if correct continue */
                    264:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    265:        movl    $1,_ercode      /* error code data miscompare */
                    266:        movl    r4,_actual      /* actual data */
                    267:        movl    $0,_expected    /* expected data */
                    268:        jmp     *badrtn
                    269: 1:     bicpsw  $Z
                    270:        cmpl    r4,r5
                    271:        jeql    1f              /* if correct continue */
                    272:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    273:        movl    $1,_ercode      /* error code data miscompare */
                    274:        movl    r5,_actual      /* actual data */
                    275:        movl    r4,_expected    /* expected data */
                    276:        jmp     *badrtn
                    277: 1:     bicpsw  $Z
                    278:        cmpl    r10,$0xfedcba98 /* make sure source unchanged           */
                    279:        jeql    1f              /* if correct continue */
                    280:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    281:        movl    $3,_ercode      /* error code operand miscompare */
                    282:        movl    r10,_actual     /* actual data */
                    283:        movl    $0xfedcba98,_expected   /* expected data */
                    284:        jmp     *badrtn
                    285: 1:     bicpsw  $Z
                    286:        cmpl    r11,$0x76543210
                    287:        jeql    s6              /* if correct continue */
                    288:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    289:        movl    $3,_ercode      /* error code operand miscompare */
                    290:        movl    r11,_actual     /* actual data */
                    291:        movl    $0x76543210,_expected   /* expected data */
                    292:        jmp     *badrtn
                    293: 
                    294: /*                               SHIFT RIGHT QUAD FROM DATA TO MEMORY */
                    295: s6:
                    296:        bbs     $0,_force_lp,0b /* if set loop on last subtest */
                    297: as6:   callf   $4,_setjmp      /* save context for error return */
                    298:        movab   as6,_stpc       /* starting address of subtest */
                    299:        movl    $6,_subtst      /* subtest number */
                    300:        movl    $3,_no_opr      /* number of operands in use */
                    301:        movl    $32,_opr        /* first operand */
                    302:        movl    $0xffffffff,_opr + 4    /* second operand */
                    303:        movl    $0,_opr + 8              /* third operand */
                    304: 0:     movl    $0xffffffff,dloc0       /* set dloc0 = dloc1 = 0xffffffff */
                    305:        movl    dloc0,dloc1
                    306:        movb    $32,temp        /* set temp = shift count               */
                    307:        bispsw  $(N|V|C)        /* set n,v,c flags                      */
                    308:        bicpsw  $Z              /* clear z flag                         */
                    309:        shrq    temp,$0xffffffff,dloc0 /* shift data left 32 and put in dloc    */
                    310:        jeql    error6          /* error if z flag set          */
                    311:        jcc     error6          /* error if c flag not set              */
                    312:        jvs     error6          /* error if v flag set                  */
                    313:        jlss    error6          /* error if n flag set                  */
                    314:        jmp     1f
                    315: error6:        movpsl  _actual         /* actual = psl maybe incorrect */
                    316:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    317:        movl    $2,_ercode      /* error code flag failure */
                    318:        jmp     *badrtn
                    319: 1:     cmpl    dloc0,$0        /* check result                         */
                    320:        jeql    1f              /* if correct continue */
                    321:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    322:        movl    $1,_ercode      /* error code data miscompare */
                    323:        movl    dloc0,_actual   /* actual data */
                    324:        movl    $0,_expected    /* expected data */
                    325:        jmp     *badrtn
                    326: 1:     bicpsw  $Z
                    327:        cmpl    dloc1,$0xffffffff
                    328:        jeql    aldn            /* if correct continue */
                    329:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    330:        movl    $1,_ercode      /* error code data miscompare */
                    331:        movl    dloc1,_actual   /* actual data */
                    332:        movl    $0xffffffff,_expected   /* expected data */
                    333:        jmp     *badrtn
                    334: 
                    335: 
                    336: aldn:  bbs     $0,_force_lp,0b /* if set loop on last subtest */
                    337:        jmp     *return
                    338: 
                    339: 
                    340: /*     test data               */
                    341:        .align  2               /* align on longword    */
                    342: sloc0: .long   0
                    343: sloc1: .long   0
                    344: dloc0: .long   0
                    345: dloc1: .long   0
                    346: temp:  .long   0
                    347: 

unix.superglobalmegacorp.com

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