]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - libgcc/config/msp430/srai.S
Update copyright years.
[thirdparty/gcc.git] / libgcc / config / msp430 / srai.S
index eb765322314daad38454491df377604a20a552db..8424479f65b00cdd5d6bfceeb7275a3130ec2f08 100644 (file)
@@ -1,4 +1,4 @@
-;   Copyright (C) 2012-2017 Free Software Foundation, Inc.
+;   Copyright (C) 2012-2024 Free Software Foundation, Inc.
 ;   Contributed by Red Hat.
 ; 
 ; This file is free software; you can redistribute it and/or modify it
        
        .text
 
+       .section        .text.__mspabi_srai_n
        .macro  _srai n
        .global __mspabi_srai_\n
 __mspabi_srai_\n:
        RRA.W   R12
        .endm
 
-/* Logical Right Shift - R12 -> R12 */
+/* Arithmetic Right Shift - R12 -> R12.  */
        _srai   15
        _srai   14
        _srai   13
@@ -50,6 +51,7 @@ __mspabi_srai_\n:
        RET
 #endif
 
+       .section        .text.__mspabi_srai
 1:     ADD.W   #-1,R13
        RRA.W   R12,R12
        .global __mspabi_srai
@@ -62,8 +64,24 @@ __mspabi_srai:
        RET
 #endif
 
-/* Logical Right Shift - R12:R13 -> R12:R13 */
+#ifdef __MSP430X__
+       .section        .text.__gnu_mspabi_srap
+1:     ADDA    #-1,R13
+       RRAX.A  R12,R12
+       .global __gnu_mspabi_srap
+__gnu_mspabi_srap:
+       CMP     #0,R13
+       JNZ     1b
+#ifdef __MSP430X_LARGE__
+       RETA
+#else
+       RET
+#endif /* __MSP430X_LARGE__ */
+#endif /* __MSP430X__ */
+
+/* Arithmetic Right Shift - R12:R13 -> R12:R13.  */
 
+       .section        .text.__mspabi_sral_n
        .macro  _sral   n
        .global __mspabi_sral_\n
 __mspabi_sral_\n:
@@ -92,6 +110,7 @@ __mspabi_sral_\n:
        RET
 #endif
 
+       .section        .text.__mspabi_sral
 1:     ADD.W   #-1,R14
        RRA.W   R13
        RRC.W   R12
@@ -104,3 +123,37 @@ __mspabi_sral:
 #else
        RET
 #endif
+
+/* Arithmetic Right Shift - R8:R11 -> R12:R15
+   A 64-bit argument would normally be passed in R12:R15, but __mspabi_srall has
+   special conventions, so the 64-bit value to shift is passed in R8:R11.
+   According to the MSPABI, the shift amount is a 64-bit value in R12:R15, but
+   we only use the low word in R12.  */
+
+       .section        .text.__mspabi_srall
+       .global __mspabi_srall
+__mspabi_srall:
+       MOV R11, R15 ; Free up R11 first
+       MOV R12, R11 ; Save the shift amount in R11
+       MOV R10, R14
+       MOV R9, R13
+       MOV R8, R12
+       CMP #0, R11
+       JNZ 1f
+#ifdef __MSP430X_LARGE__
+       RETA
+#else
+       RET
+#endif
+1:
+       RRA R15
+       RRC R14
+       RRC R13
+       RRC R12
+       ADD #-1,R11
+       JNZ 1b
+#ifdef __MSP430X_LARGE__
+       RETA
+#else
+       RET
+#endif