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/alphapc/memmove.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 #define QUAD    8
    2 #define ALIGN   64
    3 #define BLOCK   64
    4 
    5 TEXT memmove(SB), $0
    6         MOVL    from+4(FP), R7
    7         MOVL    n+8(FP), R10
    8         MOVQ    R0, R6
    9 
   10         CMPUGE  R7, R0, R5
   11         BNE     R5, _forward
   12 
   13         MOVQ    R6, R8                  /* end to address */
   14         ADDL    R10, R6, R6             /* to+n */
   15         ADDL    R10, R7, R7             /* from+n */
   16 
   17         CMPUGE  $ALIGN, R10, R1         /* need at least ALIGN bytes */
   18         BNE     R1, _b1tail
   19 
   20 _balign:
   21         AND     $(ALIGN-1), R6, R1
   22         BEQ     R1, _baligned
   23 
   24         MOVBU   -1(R7), R2
   25         ADDL    $-1, R6, R6
   26         MOVB    R2, (R6)
   27         ADDL    $-1, R7, R7
   28         JMP     _balign
   29         
   30 _baligned:
   31         AND     $(QUAD-1), R7, R1       /* is the source quad-aligned */
   32         BNE     R1, _bunaligned
   33 
   34         ADDL    $(BLOCK-1), R8, R9
   35 _bblock:
   36         CMPUGE  R9, R6, R1
   37         BNE     R1, _b8tail
   38 
   39         MOVQ    -64(R7), R22
   40         MOVQ    -56(R7), R23
   41         MOVQ    -48(R7), R24
   42         MOVQ    -40(R7), R25
   43         MOVQ    -32(R7), R2
   44         MOVQ    -24(R7), R3
   45         MOVQ    -16(R7), R4
   46         MOVQ    -8(R7), R5
   47 
   48         SUBL    $64, R6, R6
   49         SUBL    $64, R7, R7
   50 
   51         MOVQ    R22, (R6)
   52         MOVQ    R23, 8(R6)
   53         MOVQ    R24, 16(R6)
   54         MOVQ    R25, 24(R6)
   55         MOVQ    R2, 32(R6)
   56         MOVQ    R3, 40(R6)
   57         MOVQ    R4, 48(R6)
   58         MOVQ    R5, 56(R6)
   59         JMP     _bblock
   60 
   61 _b8tail:
   62         ADDL    $(QUAD-1), R8, R9
   63 _b8block:
   64         CMPUGE  R9, R6, R1
   65         BNE     R1, _b1tail
   66 
   67         MOVQ    -8(R7), R2
   68         SUBL    $8, R6
   69         MOVQ    R2, (R6)
   70         SUBL    $8, R7
   71         JMP     _b8block
   72 
   73 _b1tail:
   74         CMPUGE  R8, R6, R1
   75         BNE     R1, _ret
   76 
   77         MOVBU   -1(R7), R2
   78         SUBL    $1, R6, R6
   79         MOVB    R2, (R6)
   80         SUBL    $1, R7, R7
   81         JMP     _b1tail
   82 _ret:
   83         RET
   84 
   85 _bunaligned:
   86         ADDL    $(16-1), R8, R9
   87 
   88 _bu8block:
   89         CMPUGE  R9, R6, R1
   90         BNE     R1, _b1tail
   91 
   92         MOVQU   -16(R7), R4
   93         MOVQU   -8(R7), R3
   94         MOVQU   (R7), R2
   95         SUBL    $16, R6
   96         EXTQH   R7, R2, R2
   97         EXTQL   R7, R3, R5
   98         OR      R5, R2, R11
   99         EXTQH   R7, R3, R3
  100         EXTQL   R7, R4, R4
  101         OR      R3, R4, R13
  102         MOVQ    R11, 8(R6)
  103         MOVQ    R13, (R6)
  104         SUBL    $16, R7
  105         JMP     _bu8block
  106 
  107 _forward:
  108         ADDL    R10, R6, R8             /* end to address */
  109 
  110         CMPUGE  $ALIGN, R10, R1         /* need at least ALIGN bytes */
  111         BNE     R1, _f1tail
  112 
  113 _falign:
  114         AND     $(ALIGN-1), R6, R1
  115         BEQ     R1, _faligned
  116 
  117         MOVBU   (R7), R2
  118         ADDL    $1, R6, R6
  119         ADDL    $1, R7, R7
  120         MOVB    R2, -1(R6)
  121         JMP     _falign
  122 
  123 _faligned:
  124         AND     $(QUAD-1), R7, R1       /* is the source quad-aligned */
  125         BNE     R1, _funaligned
  126 
  127         SUBL    $(BLOCK-1), R8, R9
  128 _fblock:
  129         CMPUGT  R9, R6, R1
  130         BEQ     R1, _f8tail
  131 
  132         MOVQ    (R7), R2
  133         MOVQ    8(R7), R3
  134         MOVQ    16(R7), R4
  135         MOVQ    24(R7), R5
  136         MOVQ    32(R7), R22
  137         MOVQ    40(R7), R23
  138         MOVQ    48(R7), R24
  139         MOVQ    56(R7), R25
  140 
  141         ADDL    $64, R6, R6
  142         ADDL    $64, R7, R7
  143 
  144         MOVQ    R2, -64(R6)
  145         MOVQ    R3, -56(R6)
  146         MOVQ    R4, -48(R6)
  147         MOVQ    R5, -40(R6)
  148         MOVQ    R22, -32(R6)
  149         MOVQ    R23, -24(R6)
  150         MOVQ    R24, -16(R6)
  151         MOVQ    R25, -8(R6)
  152         JMP     _fblock
  153 
  154 _f8tail:
  155         SUBL    $(QUAD-1), R8, R9
  156 _f8block:
  157         CMPUGT  R9, R6, R1
  158         BEQ     R1, _f1tail
  159 
  160         MOVQ    (R7), R2
  161         ADDL    $8, R6
  162         ADDL    $8, R7
  163         MOVQ    R2, -8(R6)
  164         JMP     _f8block
  165 
  166 _f1tail:
  167         CMPUGT  R8, R6, R1
  168         BEQ     R1, _fret
  169         MOVBU   (R7), R2
  170         ADDL    $1, R6, R6
  171         ADDL    $1, R7, R7
  172         MOVB    R2, -1(R6)
  173         JMP     _f1tail
  174 
  175 _fret:
  176         RET
  177 
  178 _funaligned:
  179         SUBL    $(16-1), R8, R9
  180 _fu8block:
  181         CMPUGT  R9, R6, R1
  182         BEQ     R1, _f1tail
  183 
  184         MOVQU   (R7), R2
  185         MOVQU   8(R7), R3
  186         MOVQU   16(R7), R4
  187         EXTQL   R7, R2, R2
  188         EXTQH   R7, R3, R5
  189         OR      R5, R2, R11
  190         EXTQL   R7, R3, R3
  191         MOVQ    R11, (R6)
  192         EXTQH   R7, R4, R4
  193         OR      R3, R4, R11
  194         MOVQ    R11, 8(R6)
  195         ADDL    $16, R6
  196         ADDL    $16, R7
  197         JMP     _fu8block

Cache object: 2493b3f3d7c770090e82177a5a5e0dd6


[ 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.