From f976a03ca10e7d322be6ea68c04913a2da18e00e Mon Sep 17 00:00:00 2001
From: cnlohr <lohr85@gmail.com>
Date: Mon, 13 Mar 2023 04:00:53 -0400
Subject: [PATCH] Show actual instruction timings when running from RAM using
 inline assembly.

---
 examples/run_from_ram/run_from_ram.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/examples/run_from_ram/run_from_ram.c b/examples/run_from_ram/run_from_ram.c
index f7a8d4f..07ecee1 100644
--- a/examples/run_from_ram/run_from_ram.c
+++ b/examples/run_from_ram/run_from_ram.c
@@ -36,6 +36,24 @@ void RamFunction()
 		GPIOC->BSHR = (1<<16);
 		Delay_Ms( 250 );
 		count++;
+
+		// But we turbo through twiddling a pin.
+		
+		asm volatile("\n\
+			li a0, 1 | (1<<4)\n\
+			li a1, (1<<16) | (1<<(16+4))\n\
+			la a2, 0x40011410 /* GPIO D*/ \n\
+			c.nop\n\
+			c.sw a0, 0(a2)\n\
+			c.sw a1, 0(a2)\n\
+			c.sw a0, 0(a2) /* Writing out takes 2 cycles from what I can tell*/ \n\
+			c.addi a3, 1   /* Insert this for comparative timing,  it's 1 cycle */ \n\
+			c.sw a1, 0(a2)\n\
+			c.sw a0, 0(a2)\n\
+			c.sw a1, 0(a2)\n\
+			c.sw a0, 0(a2)\n\
+			c.sw a1, 0(a2)\n\
+			" : : : "a0", "a1", "a2", "a3" );
 	}
 }
 
-- 
GitLab