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

1.1       root        1: 
                      2: /*     FFS instruction test    */
                      3: /*                             */
                      4: /*     constant definitions    */
                      5: 
                      6:        .set    HIGH,31
                      7:        .set    IPL,8
                      8:        .set    ZERO,0
                      9:        .set    ONES,0xffffffff
                     10:        .set    DV,128
                     11:        .set    FU,64
                     12:        .set    IV,32
                     13:        .set    T,16
                     14:        .set    N,8
                     15:        .set    Z,4
                     16:        .set    V,2
                     17:        .set    C,1
                     18:        .set    NEGVAL,0xff0fffff
                     19:        .set    DAT4,0x0
                     20: 
                     21:        .globl  _ffs
                     22: _ffs:
                     23:        callf   $4,_setjmp      /* save context for error return */
                     24:        movab   _ffs,_stpc      /* save address of subtest start */
                     25:        movl    $1,_subtst      /* subtest number */
                     26:        movl    $1,_no_opr      /* number of operands in use */
                     27:        movl    dat0,_opr       /* first operand */
                     28: 0:     bicpsw  $(IV|T)         /* disable overflow,trace exceptions    */
                     29:        movl    dat0,r6         /* save source op               */
                     30:        bispsw  $(Z|V)          /* set z,v flags                */
                     31:        bicpsw  $(N|C)          /* clear n,c flag               */
                     32:        ffs     dat0,r4         /* find 1st bit clearin dat0    */
                     33:        jlss    error1          /* error if n flag set          */
                     34:        jeql    error1          /* error if z flag set          */
                     35:        jvs     error1          /* error if v flag set          */
                     36:        jcc     error1          /* error if c flag not set      */
                     37:        jmp     1f
                     38: error1:        movpsl  _actual         /* actual data */
                     39:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                     40:        movl    $2,_ercode      /* error code flag failure */
                     41:        jmp     *badrtn
                     42: 1:     cmpl    expd0,r4        /* compare r4 to exp. result    */
                     43:        jeql    1f
                     44:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                     45:        movl    $1,_ercode      /* error code data miscompare */
                     46:        movl    r4,_actual      /* actual data */
                     47:        movl    expd0,_expected /* expected data */
                     48:        jmp     *badrtn
                     49: 1:     cmpl    dat0,r6         /* make sure source unchanged   */
                     50:        jeql    f2
                     51:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                     52:        movl    $3,_ercode      /* error code operand was changed */
                     53:        movl    r6,_actual      /* actual data */
                     54:        movl    dat0,_expected  /* expected data */
                     55:        jmp     *badrtn
                     56: 
                     57: f2:
                     58:        bbs     $0,_force_lp,0b /* if set loop on last subtest */
                     59: af2:   callf   $4,_setjmp      /* save context for error return */
                     60:        movab   af2,_stpc       /* save address of subtest start */
                     61:        movl    $2,_subtst      /* subtest number */
                     62:        movl    $1,_no_opr      /* number of operands in use */
                     63:        movl    dat1,_opr       /* first operand */
                     64: 0:     movl    dat1,r6         /* save source op               */
                     65:        bispsw  $(N|V)          /* set n,v flags                */
                     66:        bicpsw  $(Z|C)          /* clear z,c flag               */
                     67:        ffs     dat1,r4         /* find 1st bit clear in dat1   */
                     68:        jlss    error2          /* error if n flag set          */
                     69:        jneq    error2          /* error if z flag not set      */
                     70:        jvs     error2          /* error if v flag set          */
                     71:        jcc     error2          /* error if c flag not set      */
                     72:        jmp     1f
                     73: error2:        movpsl  _actual         /* actual data */
                     74:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                     75:        movl    $2,_ercode      /* error code flag failure */
                     76:        jmp     *badrtn
                     77: 1:     cmpl    expd1,r4        /* compare r4 to exp. result    */
                     78:        jeql    1f
                     79:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                     80:        movl    $1,_ercode      /* error code data miscompare */
                     81:        movl    r4,_actual      /* actual data */
                     82:        movl    expd1,_expected /* expected data */
                     83:        jmp     *badrtn
                     84: 1:     cmpl    dat1,r6         /* make sure source unchanged   */
                     85:        jeql    f3
                     86:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                     87:        movl    $3,_ercode      /* error code operand was changed */
                     88:        movl    r6,_actual      /* actual data */
                     89:        movl    dat1,_expected  /* expected data */
                     90:        jmp     *badrtn
                     91: 
                     92: f3:
                     93:        bbs     $0,_force_lp,0b /* if set loop on last subtest */
                     94: af3:   callf   $4,_setjmp      /* save context for error return */
                     95:        movab   af3,_stpc       /* save address of subtest start */
                     96:        movl    $3,_subtst      /* subtest number */
                     97:        movl    $1,_no_opr      /* number of operands in use */
                     98:        movl    dat2,_opr       /* first operand */
                     99: 0:     movl    dat2,r3         /* save source op               */
                    100:        bispsw  $(N|V)          /* set n,v flags                */
                    101:        bicpsw  $(Z|C)          /* clear z,c flag               */
                    102:        ffs     r3,r4           /* find 1st bit clear   */
                    103:        jlss    error3          /* error if n flag set          */
                    104:        jeql    error3          /* error if z flag set  */
                    105:        jvs     error3          /* error if v flag set          */
                    106:        jcc     error3          /* error if c flag not set      */
                    107:        jmp     1f
                    108: error3:        movpsl  _actual         /* actual data */
                    109:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    110:        movl    $2,_ercode      /* error code flag failure */
                    111:        jmp     *badrtn
                    112: 1:     cmpl    expd2,r4        /* compare r4 to exp. result    */
                    113:        jeql    1f
                    114:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    115:        movl    $1,_ercode      /* error code data miscompare */
                    116:        movl    r4,_actual      /* actual data */
                    117:        movl    expd2,_expected /* expected data */
                    118:        jmp     *badrtn
                    119: 1:     cmpl    dat2,r3         /* make sure source unchanged   */
                    120:        jeql    f4
                    121:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    122:        movl    $3,_ercode      /* error code operand was changed */
                    123:        movl    r3,_actual      /* actual data */
                    124:        movl    dat2,_expected  /* expected data */
                    125:        jmp     *badrtn
                    126: 
                    127: f4:
                    128:        bbs     $0,_force_lp,0b /* if set loop on last subtest */
                    129: af4:   callf   $4,_setjmp      /* save context for error return */
                    130:        movab   af4,_stpc       /* save address of subtest start */
                    131:        movl    $4,_subtst      /* subtest number */
                    132:        movl    $1,_no_opr      /* number of operands in use */
                    133:        movl    dat3,_opr       /* first operand */
                    134: 0:     movl    dat3,r3         /* save source op               */
                    135:        bispsw  $(N|V)          /* set n,v flags                */
                    136:        bicpsw  $(Z|C)          /* clear z,c flag               */
                    137:        ffs     r3,dest         /* find 1st bit clear   */
                    138:        jlss    error4          /* error if n flag set          */
                    139:        jeql    error4          /* error if z flag  set */
                    140:        jvs     error4          /* error if v flag set          */
                    141:        jcc     error4          /* error if c flag not set      */
                    142:        jmp     1f
                    143: error4:        movpsl  _actual         /* actual data */
                    144:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    145:        movl    $2,_ercode      /* error code flag failure */
                    146:        jmp     *badrtn
                    147: 1:     cmpl    expd3,dest      /* compare  exp. result */
                    148:        jeql    1f
                    149:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    150:        movl    $1,_ercode      /* error code data miscompare */
                    151:        movl    dest,_actual    /* actual data */
                    152:        movl    expd3,_expected /* expected data */
                    153:        jmp     *badrtn
                    154: 1:     cmpl    dat3,r3         /* make sure source unchanged   */
                    155:        jeql    f5
                    156:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    157:        movl    $3,_ercode      /* error code operand was changed */
                    158:        movl    r3,_actual      /* actual data */
                    159:        movl    dat3,_expected  /* expected data */
                    160:        jmp     *badrtn
                    161: 
                    162: f5:
                    163:        bbs     $0,_force_lp,0b /* if set loop on last subtest */
                    164: af5:   callf   $4,_setjmp      /* save context for error return */
                    165:        movab   af5,_stpc       /* save address of subtest start */
                    166:        movl    $5,_subtst      /* subtest number */
                    167:        movl    $1,_no_opr      /* number of operands in use */
                    168:        movl    $DAT4,_opr      /* first operand */
                    169: 0:     bispsw  $(N|V)          /* set n,v flags                */
                    170:        bicpsw  $(Z|C)          /* clear z,c flag               */
                    171:        ffs     $DAT4,dest      /* find 1st bit clear data to memory */
                    172:        jeql    error5          /* error if z flag  set */
                    173:        jgeq    error5          /* error if n flag not set      */
                    174:        jvs     error5          /* error if v flag set          */
                    175:        jcc     error5          /* error if c flag not set      */
                    176:        jmp     1f
                    177: error5:        movpsl  _actual         /* actual data */
                    178:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    179:        movl    $2,_ercode      /* error code flag failure */
                    180:        jmp     *badrtn
                    181: 1:     cmpl    expd4,dest      /* compare  exp. result */
                    182:        jeql    aldn
                    183:        bbs     $0,_scoplp,0b   /* if set scope loop on error */
                    184:        movl    $1,_ercode      /* error code data miscompare */
                    185:        movl    dest,_actual    /* actual data */
                    186:        movl    expd4,_expected /* expected data */
                    187:        jmp     *badrtn
                    188: 
                    189: aldn:  bbs     $0,_force_lp,0b /* if set loop on last subtest */
                    190:        jmp     *return
                    191: 
                    192: /*     test data               */
                    193:        .align  2
                    194: dat0:  .long   0x80000000      /* Last bit set */
                    195: expd0: .long   31
                    196: dat1:  .long   0x2ffffff1      /* First bit set */
                    197: expd1: .long   0
                    198: dat2:  .long   0x40000000      /* Bit 30 set */
                    199: expd2: .long   30
                    200: dat3:  .long   0x44441000      /* Bit 12 set */
                    201: expd3: .long   12
                    202: dat4:  .long   0               /* All bit clear */
                    203: expd4: .long   -1
                    204: dest:  .long   0

unix.superglobalmegacorp.com

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