diff options
Diffstat (limited to 'apps/codecs/Tremor/asm_arm.h')
-rw-r--r-- | apps/codecs/Tremor/asm_arm.h | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/apps/codecs/Tremor/asm_arm.h b/apps/codecs/Tremor/asm_arm.h index 3a3716df1f..e623ce9b3d 100644 --- a/apps/codecs/Tremor/asm_arm.h +++ b/apps/codecs/Tremor/asm_arm.h | |||
@@ -46,22 +46,17 @@ static inline ogg_int32_t MULT31_SHIFT15(ogg_int32_t x, ogg_int32_t y) { | |||
46 | 46 | ||
47 | #define MB() asm volatile ("" : : : "memory") | 47 | #define MB() asm volatile ("" : : : "memory") |
48 | 48 | ||
49 | static inline void XPROD32(ogg_int32_t a, ogg_int32_t b, | 49 | #define XPROD32(a, b, t, v, x, y) \ |
50 | ogg_int32_t t, ogg_int32_t v, | 50 | { \ |
51 | ogg_int32_t *x, ogg_int32_t *y) | 51 | long l; \ |
52 | { | 52 | asm( "smull %0, %1, %4, %6\n\t" \ |
53 | int x1, y1, l; | 53 | "smlal %0, %1, %5, %7\n\t" \ |
54 | asm( "smull %0, %1, %4, %6\n\t" | 54 | "rsb %3, %4, #0\n\t" \ |
55 | "smlal %0, %1, %5, %7\n\t" | 55 | "smull %0, %2, %5, %6\n\t" \ |
56 | "rsb %3, %4, #0\n\t" | 56 | "smlal %0, %2, %3, %7" \ |
57 | "smull %0, %2, %5, %6\n\t" | 57 | : "=&r" (l), "=&r" (x), "=&r" (y), "=r" ((a)) \ |
58 | "smlal %0, %2, %3, %7" | 58 | : "3" ((a)), "r" ((b)), "r" ((t)), "r" ((v)) \ |
59 | : "=&r" (l), "=&r" (x1), "=&r" (y1), "=r" (a) | 59 | : "cc" ); \ |
60 | : "3" (a), "r" (b), "r" (t), "r" (v) | ||
61 | : "cc" ); | ||
62 | *x = x1; | ||
63 | MB(); | ||
64 | *y = y1; | ||
65 | } | 60 | } |
66 | 61 | ||
67 | static inline void XPROD31(ogg_int32_t a, ogg_int32_t b, | 62 | static inline void XPROD31(ogg_int32_t a, ogg_int32_t b, |