c++: Mostly concepts related formatting fixes
[official-gcc.git] / libgcc / config / msp430 / slli.S
blobb93fe17b6bf08f7d5187290d9b983d7f7cde4e12
1 ;   Copyright (C) 2012-2024 Free Software Foundation, Inc.
2 ;   Contributed by Red Hat.
3
4 ; This file is free software; you can redistribute it and/or modify it
5 ; under the terms of the GNU General Public License as published by the
6 ; Free Software Foundation; either version 3, or (at your option) any
7 ; later version.
8
9 ; This file is distributed in the hope that it will be useful, but
10 ; WITHOUT ANY WARRANTY; without even the implied warranty of
11 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 ; General Public License for more details.
13
14 ; Under Section 7 of GPL version 3, you are granted additional
15 ; permissions described in the GCC Runtime Library Exception, version
16 ; 3.1, as published by the Free Software Foundation.
18 ; You should have received a copy of the GNU General Public License and
19 ; a copy of the GCC Runtime Library Exception along with this program;
20 ; see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
21 ; <http://www.gnu.org/licenses/>.
22         
23         .text
25 /* Logical Left Shift - R12 -> R12.  */
27         .section        .text.__mspabi_slli_n
28         .macro  _slli n
29         .global __mspabi_slli_\n
30 __mspabi_slli_\n:
31         ADD.W   R12,R12
32         .endm
34         _slli   15
35         _slli   14
36         _slli   13
37         _slli   12
38         _slli   11
39         _slli   10
40         _slli   9
41         _slli   8
42         _slli   7
43         _slli   6
44         _slli   5
45         _slli   4
46         _slli   3
47         _slli   2
48         _slli   1
49 #ifdef __MSP430X_LARGE__
50         RETA
51 #else
52         RET
53 #endif
55         .section        .text.__mspabi_slli
56 1:      ADD.W   #-1,R13
57         ADD.W   R12,R12
58         .global __mspabi_slli
59 __mspabi_slli:
60         CMP     #0,R13
61         JNZ     1b
62 #ifdef __MSP430X_LARGE__
63         RETA
64 #else
65         RET
66 #endif
68 #ifdef __MSP430X__
69         .section        .text.__gnu_mspabi_sllp
70 1:      ADDA    #-1,R13
71         ADDA    R12,R12
72         .global __gnu_mspabi_sllp
73 __gnu_mspabi_sllp:
74         CMP     #0,R13
75         JNZ     1b
76 #ifdef __MSP430X_LARGE__
77         RETA
78 #else
79         RET
80 #endif /* __MSP430X_LARGE__ */
81 #endif /* __MSP430X__ */
83 /* Logical Left Shift - R12:R13 -> R12:R13.  */
85         .section        .text.__mspabi_slll_n
86         .macro  _slll   n
87         .global __mspabi_slll_\n
88 __mspabi_slll_\n:
89         ADD.W   R12,R12
90         ADDC.W  R13,R13
91         .endm
93         _slll   15
94         _slll   14
95         _slll   13
96         _slll   12
97         _slll   11
98         _slll   10
99         _slll   9
100         _slll   8
101         _slll   7
102         _slll   6
103         _slll   5
104         _slll   4
105         _slll   3
106         _slll   2
107         _slll   1
108 #ifdef __MSP430X_LARGE__
109         RETA
110 #else
111         RET
112 #endif
114         .section        .text.__mspabi_slll
115 1:      ADD.W   #-1,R14
116         ADD.W   R12,R12
117         ADDC.W  R13,R13
118         .global __mspabi_slll
119 __mspabi_slll:
120         CMP     #0,R14
121         JNZ     1b
122 #ifdef __MSP430X_LARGE__
123         RETA
124 #else
125         RET
126 #endif
128 /* Logical Left Shift - R8:R11 -> R12:R15
129    A 64-bit argument would normally be passed in R12:R15, but __mspabi_sllll has
130    special conventions, so the 64-bit value to shift is passed in R8:R11.
131    According to the MSPABI, the shift amount is a 64-bit value in R12:R15, but
132    we only use the low word in R12.  */
134         .section        .text.__mspabi_sllll
135         .global __mspabi_sllll
136 __mspabi_sllll:
137         MOV R11, R15 ; Free up R11 first
138         MOV R12, R11 ; Save the shift amount in R11
139         MOV R10, R14
140         MOV R9, R13
141         MOV R8, R12
142         CMP #0,R11
143         JNZ 1f
144 #ifdef __MSP430X_LARGE__
145         RETA
146 #else
147         RET
148 #endif
150         RLA R12
151         RLC R13
152         RLC R14
153         RLC R15
154         ADD #-1,R11
155         JNZ 1b
156 #ifdef __MSP430X_LARGE__
157         RETA
158 #else
159         RET
160 #endif