Blame view

RIOT/cpu/lpc2387/asmfunc.s 2.04 KB
fb11e647   vrobic   reseau statique a...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
  /*
   * Copyright (C) 2014 Freie Universität Berlin
   *
   * This file is subject to the terms and conditions of the GNU Lesser
   * General Public License v2.1. See the file LICENSE in the top level
   * directory for more details.
   */
  
  @-----------------------------------------------------------@
  @ Fast Block Copy (declared in diskio.h)
  @-----------------------------------------------------------@
  
  .global copy_un2al
  .arm
  copy_un2al:
      STMFD   SP!, {R4-R8}
      ANDS    IP, R1, #3
      BEQ lb_align
  
      BIC R1, #3
      MOV IP, IP, LSL #3
      RSB R8, IP, #32
      LDMIA   R1!, {R7}
  lb_l1:  MOV R3, R7
      LDMIA   R1!, {R4-R7}
      MOV R3, R3, LSR IP
      ORR R3, R3, R4, LSL R8
      MOV R4, R4, LSR IP
      ORR R4, R4, R5, LSL R8
      MOV R5, R5, LSR IP
      ORR R5, R5, R6, LSL R8
      MOV R6, R6, LSR IP
      ORR R6, R6, R7, LSL R8
      SUBS    R2, R2, #16
      STMIA   R0!, {R3-R6}
      BNE lb_l1
      LDMFD   SP!, {R4-R8}
      BX  LR
  
  lb_align:
      LDMIA   R1!, {R3-R6}
      SUBS    R2, R2, #16
      STMIA   R0!, {R3-R6}
      BNE lb_align
      LDMFD   SP!, {R4-R8}
      BX  LR
  
  
  .global copy_al2un
  .arm
  copy_al2un:
      STMFD   SP!, {R4-R8}
      ANDS    IP, R0, #3
      BEQ sb_align
  
      MOV IP, IP, LSL #3
      RSB R8, IP, #32
  
      LDMIA   R1!, {R4-R7}
  sb_p1:  STRB    R4, [R0], #1
      MOV R4, R4, LSR #8
      TST R0, #3
      BNE sb_p1
      ORR R4, R4, R5, LSL IP
      MOV R5, R5, LSR R8
      ORR R5, R5, R6, LSL IP
      MOV R6, R6, LSR R8
      ORR R6, R6, R7, LSL IP
      SUBS    R2, R2, #16
      STMIA   R0!, {R4-R6}
  
  sb_l1:  MOV R3, R7
      LDMIA   R1!, {R4-R7}
      MOV R3, R3, LSR R8
      ORR R3, R3, R4, LSL IP
      MOV R4, R4, LSR R8
      ORR R4, R4, R5, LSL IP
      MOV R5, R5, LSR R8
      ORR R5, R5, R6, LSL IP
      MOV R6, R6, LSR R8
      ORR R6, R6, R7, LSL IP
      SUBS    R2, R2, #16
      STMIA   R0!, {R3-R6}
      BNE sb_l1
  
      MOV R7, R7, LSR R8
  sb_p2:  SUBS    IP, IP, #8
      STRB    R7, [R0], #1
      MOV R7, R7, LSR #8
      BNE sb_p2
  
      LDMFD   SP!, {R4-R8}
      BX  LR
  
  sb_align:
      LDMIA   R1!, {R3-R6}
      SUBS    R2, #16
      STMIA   R0!, {R3-R6}
      BNE sb_align
      LDMFD   SP!, {R4-R8}
      BX  LR
  
  .end