The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/pc/ptclbsum386.s

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 TEXT ptclbsum(SB), $0
    2         MOVL    addr+0(FP), SI
    3         MOVL    len+4(FP), CX
    4 
    5         XORL    AX, AX                  /* sum */
    6 
    7         TESTL   $1, SI                  /* byte aligned? */
    8         MOVL    SI, DI
    9         JEQ     _2align
   10 
   11         DECL    CX
   12         JLT     _return
   13 
   14         MOVB    0x00(SI), AH
   15         INCL    SI
   16 
   17 _2align:
   18         TESTL   $2, SI                  /* word aligned? */
   19         JEQ     _32loop
   20 
   21         CMPL    CX, $2                  /* less than 2 bytes? */
   22         JLT     _1dreg
   23         SUBL    $2, CX
   24 
   25         XORL    BX, BX
   26         MOVW    0x00(SI), BX
   27         ADDL    BX, AX
   28         ADCL    $0, AX
   29         LEAL    2(SI), SI
   30 
   31 _32loop:
   32         CMPL    CX, $0x20
   33         JLT     _8loop
   34 
   35         MOVL    CX, BP
   36         SHRL    $5, BP
   37         ANDL    $0x1F, CX
   38 
   39 _32loopx:
   40         MOVL    0x00(SI), BX
   41         MOVL    0x1C(SI), DX
   42         ADCL    BX, AX
   43         MOVL    0x04(SI), BX
   44         ADCL    DX, AX
   45         MOVL    0x10(SI), DX
   46         ADCL    BX, AX
   47         MOVL    0x08(SI), BX
   48         ADCL    DX, AX
   49         MOVL    0x14(SI), DX
   50         ADCL    BX, AX
   51         MOVL    0x0C(SI), BX
   52         ADCL    DX, AX
   53         MOVL    0x18(SI), DX
   54         ADCL    BX, AX
   55         LEAL    0x20(SI), SI
   56         ADCL    DX, AX
   57 
   58         DECL    BP
   59         JNE     _32loopx
   60 
   61         ADCL    $0, AX
   62 
   63 _8loop:
   64         CMPL    CX, $0x08
   65         JLT     _2loop
   66 
   67         MOVL    CX, BP
   68         SHRL    $3, BP
   69         ANDL    $0x07, CX
   70 
   71 _8loopx:
   72         MOVL    0x00(SI), BX
   73         ADCL    BX, AX
   74         MOVL    0x04(SI), DX
   75         ADCL    DX, AX
   76 
   77         LEAL    0x08(SI), SI
   78         DECL    BP
   79         JNE     _8loopx
   80 
   81         ADCL    $0, AX
   82 
   83 _2loop:
   84         CMPL    CX, $0x02
   85         JLT     _1dreg
   86 
   87         MOVL    CX, BP
   88         SHRL    $1, BP
   89         ANDL    $0x01, CX
   90 
   91 _2loopx:
   92         MOVWLZX 0x00(SI), BX
   93         ADCL    BX, AX
   94 
   95         LEAL    0x02(SI), SI
   96         DECL    BP
   97         JNE     _2loopx
   98 
   99         ADCL    $0, AX
  100 
  101 _1dreg:
  102         TESTL   $1, CX                  /* 1 byte left? */
  103         JEQ     _fold
  104 
  105         XORL    BX, BX
  106         MOVB    0x00(SI), BX
  107         ADDL    BX, AX
  108         ADCL    $0, AX
  109 
  110 _fold:
  111         MOVL    AX, BX
  112         SHRL    $16, BX
  113         JEQ     _swab
  114 
  115         ANDL    $0xFFFF, AX
  116         ADDL    BX, AX
  117         JMP     _fold
  118 
  119 _swab:
  120         TESTL   $1, addr+0(FP)
  121         /*TESTL $1, DI*/
  122         JNE     _return
  123         XCHGB   AH, AL
  124 
  125 _return:
  126         RET

Cache object: 41a55c14203d2be2a583d41ac12dd817


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.