msp4th: speedup stack manipulation to *11*
authorDan White <dan@whiteaudio.com>
Fri, 10 May 2013 23:31:36 +0000 (18:31 -0500)
committerDan White <dan@whiteaudio.com>
Fri, 10 May 2013 23:31:36 +0000 (18:31 -0500)
msp4th/msp4th.c

index 6d05889f3784bb0335383f0e7262a2dbcf663ba3..f82f0f6b4f1347507f160c2e853b9e8ce14e839c 100644 (file)
@@ -531,8 +531,17 @@ int16_t popMathStack(void)
 
 void pushMathStack(int16_t n)
 {
+#if defined(MSP430)
+    asm("decd %[ms]\n"
+        "mov %[n],  @%[ms]\n"
+        : /* outputs */
+        : /* inputs */ [n] "r" (n), [ms] "r" (mathStackPtr)
+        : /* clobbers */
+       );
+#else
     mathStackPtr--;
     *mathStackPtr = n;
+#endif
 }
 
 
@@ -544,8 +553,17 @@ int16_t popAddrStack(void)
 {
     int16_t i;
 
+#if defined(MSP430)
+    asm("mov @%[as],  %[out]\n"
+        "incd %[as]\n"
+        : /* outputs */ [out] "=r" (i)
+        : /* inputs */  [as] "r" (addrStackPtr)
+        : /* clobbers */
+       );
+#else
     i = *addrStackPtr;
     addrStackPtr++;
+#endif
 
     return(i);
 }
@@ -553,8 +571,17 @@ int16_t popAddrStack(void)
 
 void pushAddrStack(int16_t n)
 {
+#if defined(MSP430)
+    asm("decd %[as]\n"
+        "mov %[n],  @%[as]\n"
+        : /* outputs */
+        : /* inputs */ [n] "r" (n), [as] "r" (addrStackPtr)
+        : /* clobbers */
+       );
+#else
     addrStackPtr--;
     *addrStackPtr = n;
+#endif
 }