]> granicus.if.org Git - libvpx/commitdiff
vp8,vpx_dsp: [loongson] fix msa optimization bugs
authorjinbo <jinbo-hf@loongson.cn>
Sat, 18 Jul 2020 04:25:47 +0000 (12:25 +0800)
committerjinbo <jinbo-hf@loongson.cn>
Sat, 18 Jul 2020 06:06:33 +0000 (14:06 +0800)
Fix two bugs reported by clang when enable msa optimizatons:
1. clang dose not support uld instruction.
2. ulw instruction will result in unit cases coredump.

Change-Id: I171bed11d18b58252cbc8853428c039e2549cb95

vp8/common/mips/msa/vp8_macros_msa.h
vpx_dsp/mips/macros_msa.h

index 14f83799ffd6eda8a13d9fd03a595be2de48fcc9..ddc881a7fccd38ae1c75f206e6ae10e967c2d4c1 100644 (file)
     const uint8_t *psrc_m = (const uint8_t *)(psrc); \
     uint32_t val_m;                                  \
                                                      \
-    asm volatile("ulw  %[val_m],  %[psrc_m]  \n\t"   \
-                                                     \
-                 : [val_m] "=r"(val_m)               \
-                 : [psrc_m] "m"(*psrc_m));           \
+    asm volatile("lwr %[val_m], 0(%[psrc_m]) \n\t"   \
+                 "lwl %[val_m], 3(%[psrc_m]) \n\t"   \
+                 : [val_m] "=&r"(val_m)              \
+                 : [psrc_m] "r"(psrc_m));            \
                                                      \
     val_m;                                           \
   })
     const uint8_t *psrc_m = (const uint8_t *)(psrc); \
     uint64_t val_m = 0;                              \
                                                      \
-    asm volatile("uld  %[val_m],  %[psrc_m]  \n\t"   \
-                                                     \
-                 : [val_m] "=r"(val_m)               \
-                 : [psrc_m] "m"(*psrc_m));           \
+    asm volatile("ldr %[val_m], 0(%[psrc_m]) \n\t"   \
+                 "ldl %[val_m], 7(%[psrc_m]) \n\t"   \
+                 : [val_m] "=&r"(val_m)              \
+                 : [psrc_m] "r"(psrc_m));            \
                                                      \
     val_m;                                           \
   })
index a3a5a4dfeeb2dc5a7fe88c575a08001c2977b5a8..3c2f50c790bf53d4b5cb1a2a53ea4e4c9551f82d 100644 (file)
     const uint8_t *psrc_lw_m = (const uint8_t *)(psrc);          \
     uint32_t val_lw_m;                                           \
                                                                  \
-    __asm__ __volatile__("ulw  %[val_lw_m],  %[psrc_lw_m]  \n\t" \
-                                                                 \
-                         : [val_lw_m] "=r"(val_lw_m)             \
-                         : [psrc_lw_m] "m"(*psrc_lw_m));         \
+    __asm__ __volatile__("lwr %[val_lw_m], 0(%[psrc_lw_m]) \n\t" \
+                         "lwl %[val_lw_m], 3(%[psrc_lw_m]) \n\t" \
+                         : [val_lw_m] "=&r"(val_lw_m)            \
+                         : [psrc_lw_m] "r"(psrc_lw_m));          \
                                                                  \
     val_lw_m;                                                    \
   })
     const uint8_t *psrc_ld_m = (const uint8_t *)(psrc);          \
     uint64_t val_ld_m = 0;                                       \
                                                                  \
-    __asm__ __volatile__("uld  %[val_ld_m],  %[psrc_ld_m]  \n\t" \
-                                                                 \
-                         : [val_ld_m] "=r"(val_ld_m)             \
-                         : [psrc_ld_m] "m"(*psrc_ld_m));         \
+    __asm__ __volatile__("ldr %[val_ld_m], 0(%[psrc_ld_m]) \n\t" \
+                         "ldl %[val_ld_m], 7(%[psrc_ld_m]) \n\t" \
+                         : [val_ld_m] "=&r"(val_ld_m)            \
+                         : [psrc_ld_m] "r"(psrc_ld_m));          \
                                                                  \
     val_ld_m;                                                    \
   })