aboutsummaryrefslogtreecommitdiff
path: root/libgcc
diff options
context:
space:
mode:
authorMax Filippov <jcmvbkbc@gmail.com>2020-12-20 02:23:12 -0800
committerMax Filippov <jcmvbkbc@gmail.com>2020-12-20 14:02:26 -0800
commit18e86fae2a14f78e70aae06afce6bb9853068bb1 (patch)
tree2d06b0068acea1f9ec4a2164a6b2a3b358eb045b /libgcc
parent3621a7bb5795ad4e47b30e1a8a06f1abe2b3b036 (diff)
downloadgcc-18e86fae2a14f78e70aae06afce6bb9853068bb1.zip
gcc-18e86fae2a14f78e70aae06afce6bb9853068bb1.tar.gz
gcc-18e86fae2a14f78e70aae06afce6bb9853068bb1.tar.bz2
gcc: xtensa: implement bswapsi2, bswapdi2 and helpers
2020-12-20 Max Filippov <jcmvbkbc@gmail.com> gcc/ * config/xtensa/xtensa.md (bswapsi2, bswapdi2): New patterns. gcc/testsuite/ * gcc.target/xtensa/bswap.c: New test. libgcc/ * config/xtensa/lib1funcs.S (__bswapsi2, __bswapdi2): New functions. * config/xtensa/t-xtensa (LIB1ASMFUNCS): Add _bswapsi2 and _bswapdi2.
Diffstat (limited to 'libgcc')
-rw-r--r--libgcc/config/xtensa/lib1funcs.S39
-rw-r--r--libgcc/config/xtensa/t-xtensa1
2 files changed, 40 insertions, 0 deletions
diff --git a/libgcc/config/xtensa/lib1funcs.S b/libgcc/config/xtensa/lib1funcs.S
index 77e7888..b19deae 100644
--- a/libgcc/config/xtensa/lib1funcs.S
+++ b/libgcc/config/xtensa/lib1funcs.S
@@ -840,5 +840,44 @@ __lshrdi3:
#endif /* L_lshrdi3 */
+#ifdef L_bswapsi2
+ .align 4
+ .global __bswapsi2
+ .type __bswapsi2, @function
+__bswapsi2:
+ leaf_entry sp, 16
+ ssai 8
+ srli a3, a2, 16
+ src a3, a3, a2
+ src a3, a3, a3
+ src a2, a2, a3
+ leaf_return
+ .size __bswapsi2, . - __bswapsi2
+
+#endif /* L_bswapsi2 */
+
+
+#ifdef L_bswapdi2
+ .align 4
+ .global __bswapdi2
+ .type __bswapdi2, @function
+__bswapdi2:
+ leaf_entry sp, 16
+ ssai 8
+ srli a4, a2, 16
+ src a4, a4, a2
+ src a4, a4, a4
+ src a4, a2, a4
+ srli a2, a3, 16
+ src a2, a2, a3
+ src a2, a2, a2
+ src a2, a3, a2
+ mov a3, a4
+ leaf_return
+ .size __bswapdi2, . - __bswapdi2
+
+#endif /* L_bswapdi2 */
+
+
#include "ieee754-df.S"
#include "ieee754-sf.S"
diff --git a/libgcc/config/xtensa/t-xtensa b/libgcc/config/xtensa/t-xtensa
index 90df5f1..9836c96 100644
--- a/libgcc/config/xtensa/t-xtensa
+++ b/libgcc/config/xtensa/t-xtensa
@@ -2,6 +2,7 @@ LIB1ASMSRC = xtensa/lib1funcs.S
LIB1ASMFUNCS = _mulsi3 _divsi3 _modsi3 _udivsi3 _umodsi3 \
_umulsidi3 _clz _clzsi2 _ctzsi2 _ffssi2 \
_ashldi3 _ashrdi3 _lshrdi3 \
+ _bswapsi2 _bswapdi2 \
_negsf2 _addsubsf3 _mulsf3 _divsf3 _cmpsf2 _fixsfsi _fixsfdi \
_fixunssfsi _fixunssfdi _floatsisf _floatunsisf \
_sqrtf _recipsf2 _rsqrtsf2 \