Index: include/libyuv/macros_msa.h |
diff --git a/include/libyuv/macros_msa.h b/include/libyuv/macros_msa.h |
index 8a81e8213afba38737e1d8def52ac7c47b25139f..7109fbab111325254d796e570213458ff731a2d8 100644 |
--- a/include/libyuv/macros_msa.h |
+++ b/include/libyuv/macros_msa.h |
@@ -15,6 +15,98 @@ |
#include <stdint.h> |
#include <msa.h> |
+#if (__mips_isa_rev >= 6) |
+ #define LW(psrc) ( { \ |
+ uint8 *psrc_lw_m = (uint8 *) (psrc); \ |
+ uint32 val_m; \ |
+ \ |
+ asm volatile ( \ |
+ "lw %[val_m], %[psrc_lw_m] \n\t" \ |
+ \ |
fbarchard1
2016/10/24 17:36:31
remove blank line
|
+ : [val_m] "=r" (val_m) \ |
+ : [psrc_lw_m] "m" (*psrc_lw_m) \ |
+ ); \ |
+ \ |
+ val_m; \ |
+ } ) |
+ |
+ #if (__mips == 64) |
+ #define LD(psrc) ( { \ |
+ uint8 *psrc_ld_m = (uint8 *) (psrc); \ |
+ uint64 val_m = 0; \ |
+ \ |
+ asm volatile ( \ |
+ "ld %[val_m], %[psrc_ld_m] \n\t" \ |
+ \ |
+ : [val_m] "=r" (val_m) \ |
+ : [psrc_ld_m] "m" (*psrc_ld_m) \ |
+ ); \ |
+ \ |
+ val_m; \ |
+ } ) |
+ #else // !(__mips == 64) |
+ #define LD(psrc) ( { \ |
+ uint8 *psrc_ld_m = (uint8 *) (psrc); \ |
+ uint32 val0_m, val1_m; \ |
+ uint64 val_m = 0; \ |
+ \ |
+ val0_m = LW(psrc_ld_m); \ |
+ val1_m = LW(psrc_ld_m + 4); \ |
+ \ |
+ val_m = (uint64) (val1_m); \ |
+ val_m = (uint64) ((val_m << 32) & 0xFFFFFFFF00000000); \ |
+ val_m = (uint64) (val_m | (uint64) val0_m); \ |
+ \ |
+ val_m; \ |
+ } ) |
+ #endif // (__mips == 64) |
+#else // !(__mips_isa_rev >= 6) |
+ #define LW(psrc) ( { \ |
+ uint8 *psrc_lw_m = (uint8 *) (psrc); \ |
+ uint32 val_m; \ |
+ \ |
+ asm volatile ( \ |
+ "ulw %[val_m], %[psrc_lw_m] \n\t" \ |
+ \ |
+ : [val_m] "=r" (val_m) \ |
+ : [psrc_lw_m] "m" (*psrc_lw_m) \ |
+ ); \ |
+ \ |
+ val_m; \ |
+ } ) |
+ |
+ #if (__mips == 64) |
+ #define LD(psrc) ( { \ |
+ uint8 *psrc_ld_m = (uint8 *) (psrc); \ |
+ uint64 val_m = 0; \ |
+ \ |
+ asm volatile ( \ |
+ "uld %[val_m], %[psrc_ld_m] \n\t" \ |
+ \ |
+ : [val_m] "=r" (val_m) \ |
+ : [psrc_ld_m] "m" (*psrc_ld_m) \ |
+ ); \ |
+ \ |
+ val_m; \ |
+ } ) |
+ #else // !(__mips == 64) |
+ #define LD(psrc) ( { \ |
+ uint8 *psrc_ld_m = (uint8 *) (psrc); \ |
+ uint32 val0_m, val1_m; \ |
+ uint64 val_m = 0; \ |
+ \ |
+ val0_m = LW(psrc_ld_m); \ |
+ val1_m = LW(psrc_ld_m + 4); \ |
+ \ |
+ val_m = (uint64) (val1_m); \ |
+ val_m = (uint64) ((val_m << 32) & 0xFFFFFFFF00000000); \ |
+ val_m = (uint64) (val_m | (uint64) val0_m); \ |
+ \ |
+ val_m; \ |
+ } ) |
+ #endif // (__mips == 64) |
+#endif // (__mips_isa_rev >= 6) |
+ |
#define LD_B(RTYPE, psrc) *((RTYPE*)(psrc)) /* NOLINT */ |
#define LD_UB(...) LD_B(v16u8, __VA_ARGS__) |