ref: 3998e17925f21860600b24e575de5c4c34aca5fc
parent: 820ebb5f04f1c17c638d0c51f9957a8b78bbae08
	author: Lennart Augustsson <lennart.augustsson@epicgames.com>
	date: Fri Jan 12 20:24:15 EST 2024
	
Minor improvements.
--- a/STM32/Blinky.c
+++ /dev/null
@@ -1,156 +1,0 @@
-const unsigned char combexprdata[] = {-118,55,46,48,10,50,54,10,83,39,32,85,32,75,50,32,75,32,64,32,
-64,32,58,55,48,49,32,66,32,66,32,66,32,67,32,64,32,64,32,64,
-32,66,32,66,32,67,32,64,32,64,32,80,32,64,32,64,32,66,32,66,
-32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,66,32,66,32,66,
-32,67,32,64,32,64,32,64,32,66,32,66,32,67,32,64,32,64,32,80,
-32,64,32,64,32,64,32,80,32,66,32,67,32,73,79,46,62,62,61,32,
-64,32,64,32,66,32,73,79,46,114,101,116,117,114,110,32,64,32,64,32,
-64,32,67,39,32,66,32,64,32,85,32,75,32,64,32,58,52,56,55,55,
-32,64,32,75,32,64,32,95,49,51,54,53,53,32,64,32,64,32,58,49,
-51,54,53,53,32,64,32,73,79,46,114,101,116,117,114,110,32,64,32,83,
-39,32,67,39,66,32,64,32,85,32,75,32,90,32,75,32,64,32,64,32,
-64,32,58,54,57,55,32,64,32,83,39,32,67,39,66,32,64,32,95,54,
-57,55,32,64,32,66,39,32,85,32,75,50,32,65,32,64,32,64,32,58,
-55,48,52,32,64,32,64,32,64,32,95,49,51,54,55,48,32,64,32,64,
-32,83,39,32,66,32,64,32,85,32,75,50,32,90,32,75,32,64,32,64,
-32,64,32,58,54,49,49,32,64,32,67,39,32,85,32,65,32,64,32,64,
-32,85,32,90,32,90,32,90,32,75,32,64,32,64,32,64,32,64,32,58,
-54,48,50,32,64,32,73,32,64,32,64,32,95,49,51,54,54,53,32,64,
-32,64,32,83,39,32,66,32,64,32,95,54,49,49,32,64,32,67,39,32,
-95,52,56,55,55,32,64,32,95,54,48,50,32,64,32,75,32,64,32,64,
-32,95,49,51,54,54,53,32,64,32,64,32,58,49,51,54,54,53,32,64,
-32,73,79,46,62,62,61,32,64,32,73,79,46,62,62,32,64,32,73,79,
-46,114,101,116,117,114,110,32,64,32,58,49,51,54,55,48,32,64,32,64,
-32,67,32,66,32,66,32,73,32,66,32,67,32,64,32,66,32,66,32,89,
-32,64,32,64,32,83,39,32,66,32,64,32,66,39,32,66,32,80,32,64,
-32,67,32,95,55,48,52,32,64,32,73,32,64,32,64,32,64,32,64,32,
-67,39,32,67,39,66,32,64,32,66,32,66,32,67,39,66,32,64,32,64,
-32,66,39,32,95,54,57,55,32,64,32,64,32,64,32,90,32,64,32,64,
-32,64,32,64,32,95,49,51,54,55,48,32,64,32,85,32,75,50,32,75,
-52,32,75,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,
-66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,
-66,32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,
-64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,
-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,32,64,32,
-64,32,64,32,64,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,
-66,32,66,32,67,32,64,32,64,32,80,32,64,32,64,32,64,32,64,32,
-64,32,64,32,67,32,85,32,90,32,90,32,90,32,90,32,90,32,75,32,
-64,32,64,32,64,32,64,32,64,32,64,32,58,56,55,54,51,32,66,32,
-66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,
-64,32,64,32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,
-64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,
-64,32,64,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,66,32,
-66,32,67,32,64,32,64,32,80,32,64,32,64,32,64,32,64,32,64,32,
-43,32,64,32,45,32,64,32,42,32,64,32,110,101,103,32,64,32,83,32,
-83,32,67,32,85,32,75,50,32,90,32,90,32,90,32,90,32,75,32,64,
-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,
-32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,
-32,66,32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,
-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,67,32,64,
-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,32,64,
-32,64,32,64,32,64,32,66,32,66,32,66,32,67,32,64,32,64,32,64,
-32,66,32,66,32,67,32,64,32,64,32,80,32,64,32,64,32,64,32,64,
-32,64,32,64,32,80,32,61,61,32,64,32,47,61,32,64,32,58,52,57,
-55,53,32,64,32,99,111,109,112,97,114,101,32,64,32,60,32,64,32,60,
-61,32,64,32,62,32,64,32,62,61,32,64,32,67,39,32,67,39,32,83,
-32,64,32,64,32,67,39,32,83,39,32,67,32,64,32,64,32,85,32,75,
-51,32,90,32,90,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,
-58,56,57,48,50,32,64,32,73,32,64,32,64,32,73,32,64,32,95,52,
-57,57,49,32,64,32,64,32,67,39,32,83,39,32,67,32,64,32,64,32,
-67,39,32,67,39,32,83,32,64,32,64,32,95,56,57,48,50,32,64,32,
-73,32,64,32,64,32,73,32,64,32,95,52,57,57,49,32,64,32,64,32,
-58,52,57,57,49,32,64,32,64,32,35,48,32,64,32,64,32,73,32,64,
-32,64,32,85,32,75,51,32,90,32,90,32,75,32,64,32,64,32,64,32,
-64,32,58,56,55,56,49,32,95,52,57,50,54,32,64,32,64,32,64,32,
-67,32,67,32,67,32,67,32,85,32,75,32,90,32,90,32,90,32,90,32,
-90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,52,
-57,57,49,32,64,32,64,32,35,48,32,64,32,64,32,95,56,55,56,49,
-32,95,52,57,50,54,32,64,32,85,32,75,32,75,52,32,65,32,64,32,
-64,32,64,32,58,56,55,57,51,32,95,52,57,50,54,32,64,32,83,32,
-67,39,32,67,32,64,32,83,32,83,39,32,67,39,32,64,32,66,32,83,
-39,32,64,32,60,61,32,35,48,32,64,32,64,32,64,32,67,39,32,67,
-32,64,32,67,39,32,83,39,32,67,39,32,64,32,64,32,61,61,32,64,
-32,66,32,66,32,65,32,110,111,77,97,116,99,104,32,102,114,111,109,85,
-84,70,56,32,34,46,46,47,108,105,98,47,68,97,116,97,47,73,110,116,
-101,103,101,114,95,84,121,112,101,46,104,115,34,32,64,32,64,32,35,50,
-52,32,64,32,35,49,32,64,32,64,32,64,32,64,32,66,32,66,32,80,
-32,65,32,64,32,64,32,64,32,85,32,64,32,64,32,64,32,64,32,80,
-32,65,32,64,32,79,32,35,48,32,64,32,79,32,35,48,32,64,32,79,
-32,35,50,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,
-64,32,66,32,66,32,80,32,75,32,64,32,64,32,64,32,85,32,64,32,
-64,32,64,32,89,32,67,39,32,67,32,64,32,66,32,83,32,61,61,32,
-35,48,32,64,32,64,32,64,32,66,32,83,39,32,79,32,64,32,67,32,
-114,101,109,32,64,32,61,61,32,89,32,67,39,32,67,32,64,32,66,32,
-83,39,32,83,39,32,64,32,61,61,32,35,48,32,64,32,64,32,64,32,
-67,39,32,67,39,66,32,64,32,67,32,66,32,64,32,67,32,115,104,114,
-32,64,32,35,49,32,64,32,64,32,64,32,43,32,35,49,32,64,32,64,
-32,64,32,64,32,73,32,64,32,64,32,105,110,118,32,35,48,32,64,32,
-64,32,35,48,32,64,32,64,32,35,54,52,32,64,32,35,51,50,55,54,
-56,32,64,32,35,50,49,52,55,52,56,51,54,52,56,32,64,32,58,54,
-51,55,52,32,64,32,64,32,64,32,67,32,66,32,64,32,67,32,113,117,
-111,116,32,64,32,95,54,51,55,52,32,64,32,64,32,64,32,64,32,64,
-32,75,32,64,32,64,32,64,32,64,32,45,32,35,48,32,64,32,64,32,
-58,54,52,52,49,32,35,49,32,64,32,64,32,64,32,64,32,64,32,35,
-48,32,64,32,64,32,35,49,32,64,32,64,32,85,32,67,39,66,32,66,
-32,42,32,64,32,80,32,35,49,32,64,32,45,32,35,48,32,64,32,35,
-49,32,64,32,64,32,64,32,64,32,80,32,35,48,32,64,32,83,32,80,
-32,64,32,83,39,32,83,39,32,80,32,64,32,64,32,67,39,66,32,43,
-32,64,32,42,32,95,54,51,55,52,32,64,32,64,32,64,32,66,32,66,
-32,90,32,64,32,64,32,67,39,66,32,66,39,32,43,32,64,32,64,32,
-66,32,66,32,42,32,95,54,51,55,52,32,64,32,64,32,64,32,67,39,
-66,32,43,32,64,32,42,32,95,54,51,55,52,32,64,32,64,32,64,32,
-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,52,57,50,
-54,32,64,32,64,32,95,56,55,57,51,32,95,52,57,50,54,32,64,32,
-95,54,52,52,49,32,35,49,32,64,32,64,32,64,32,64,32,67,32,85,
-32,75,32,90,32,90,32,90,32,90,32,75,32,64,32,64,32,64,32,64,
-32,64,32,64,32,58,56,55,55,48,32,95,52,57,50,54,32,64,32,64,
-32,95,56,55,57,51,32,95,52,57,50,54,32,64,32,95,54,52,52,49,
-32,35,49,32,64,32,64,32,64,32,64,32,73,32,64,32,73,32,64,32,
-83,32,79,32,64,32,66,32,85,32,75,52,32,90,32,90,32,75,32,64,
-32,64,32,64,32,64,32,58,51,51,54,49,32,95,51,54,55,52,32,64,
-32,64,32,67,32,95,56,55,54,51,32,95,52,57,50,54,32,64,32,64,
-32,35,49,32,64,32,64,32,64,32,64,32,83,39,32,67,39,32,89,32,
-64,32,64,32,66,32,66,32,66,32,83,32,79,32,64,32,64,32,64,32,
-64,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,66,32,66,32,
-67,32,95,56,55,54,51,32,95,52,57,50,54,32,64,32,64,32,64,32,
-64,32,67,32,95,56,55,55,48,32,95,52,57,50,54,32,64,32,64,32,
-64,32,64,32,64,32,64,32,73,32,64,32,64,32,66,32,67,39,32,66,
-32,89,32,64,32,66,32,66,32,80,32,75,32,64,32,64,32,64,32,67,
-39,66,32,66,32,83,39,32,66,32,64,32,64,32,82,32,75,32,64,32,
-64,32,64,32,67,39,66,32,79,32,64,32,64,32,64,32,64,32,58,55,
-54,56,50,32,64,32,67,32,95,56,57,48,50,32,95,52,57,57,49,32,
-64,32,64,32,64,32,64,32,95,51,51,54,49,32,95,51,54,55,52,32,
-64,32,64,32,64,32,83,39,32,83,32,64,32,83,39,32,83,39,32,83,
-39,32,64,32,64,32,67,32,85,32,75,52,32,90,32,90,32,75,32,64,
-32,64,32,64,32,64,32,95,52,57,57,49,32,64,32,64,32,64,32,66,
-32,66,32,67,39,32,95,55,54,56,50,32,64,32,67,32,85,32,75,32,
-75,52,32,90,32,75,32,64,32,64,32,64,32,64,32,95,52,57,57,49,
-32,64,32,64,32,64,32,64,32,64,32,85,32,75,32,75,52,32,90,32,
-75,32,64,32,64,32,64,32,64,32,58,51,51,54,55,32,95,51,54,55,
-52,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,32,95,55,54,
-56,50,32,64,32,67,32,95,56,57,48,50,32,95,52,57,57,49,32,64,
-32,64,32,64,32,64,32,64,32,95,51,51,54,55,32,95,51,54,55,52,
-32,64,32,64,32,64,32,64,32,58,51,54,55,52,32,64,32,95,56,55,
-57,51,32,95,52,57,50,54,32,64,32,95,54,52,52,49,32,35,48,32,
-64,32,64,32,64,32,95,56,55,57,51,32,95,52,57,50,54,32,64,32,
-95,54,52,52,49,32,35,51,32,64,32,64,32,64,32,64,32,64,32,64,
-32,64,32,66,32,67,39,32,83,39,32,95,55,48,49,32,95,49,51,54,
-55,48,32,64,32,64,32,64,32,67,32,67,39,66,32,66,32,73,32,64,
-32,94,115,101,116,95,108,101,100,32,64,32,64,32,80,32,35,48,32,64,
-32,35,49,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,
-32,115,101,113,32,64,32,67,32,83,32,67,32,85,32,75,32,64,32,95,
-52,57,55,53,32,64,32,64,32,35,48,32,64,32,64,32,66,32,95,52,
-56,51,32,64,32,67,32,95,56,55,55,48,32,95,52,57,50,54,32,64,
-32,64,32,35,49,32,64,32,64,32,64,32,64,32,73,32,64,32,58,52,
-56,51,32,64,32,95,55,48,52,32,95,49,51,54,55,48,32,64,32,73,
-32,64,32,64,32,64,32,64,32,95,56,55,54,51,32,95,52,57,50,54,
-32,64,32,64,32,64,32,64,32,58,52,52,55,32,64,32,65,32,64,32,
-64,32,83,39,32,95,55,48,49,32,95,49,51,54,55,48,32,64,32,64,
-32,67,32,95,52,52,55,32,64,32,75,32,64,32,64,32,66,32,95,52,
-49,50,32,64,32,67,32,95,56,55,54,51,32,95,52,57,50,54,32,64,
-32,64,32,35,49,32,64,32,64,32,64,32,64,32,58,52,49,50,32,35,
-53,48,48,32,64,32,125,
-0 };
-const unsigned char *combexpr = combexprdata;
-const int combexprlen = 3027;
--- a/STM32/Blinky.hs
+++ b/STM32/Blinky.hs
@@ -1,40 +1,11 @@
module Blinky(main) where
---import Primitives
---import Data.Bool
import Prelude
---foreign import ccall "set_led" setLed :: Int -> Int -> IO ()
-
-{-main :: IO ()
-main = --setLed (0::Int) (1::Int)
- blinky (500::Int)
-
-blinky :: Int -> IO ()
-blinky n =
- oneByOne n (1::Int) `primThen`
- oneByOne n (0::Int) `primThen`
- blinky (n `primIntAdd` 1)
-
-oneByOne :: Int -> Int -> IO ()
-oneByOne n on =
- setLed (0::Int) on `primThen`
- wait n `primThen`
- setLed (1::Int) on `primThen`
- wait n `primThen`
- setLed (2::Int) on `primThen`
- wait n `primThen`
- setLed (3::Int) on `primThen`
- wait n
-
-foreign import ccall "set_led" setLed :: Int -> Int -> IO ()
-
--}
-
-main :: IO ()
main = blinky (500::Int)
blinky :: Int -> IO ()
+blinky n | n > 1000 = return ()
blinky n = do
oneByOne n True
oneByOne n False
@@ -44,28 +15,15 @@
oneByOne n on = forM_ [0..3] $ \ led -> do
setLed led on
wait (n + led)
-{-- do
- setLed (0::Int) on
- wait n
- setLed (1::Int) on
- wait n
- setLed (2::Int) on
- wait n
- setLed (3::Int) on
- wait n
--}
foreign import ccall "set_led" set_led :: Int -> Int -> IO ()
+foreign import ccall "busy_wait" busy_wait :: Int -> IO ()
setLed :: Int -> Bool -> IO ()
setLed led on = set_led led $ if on then 1 else 0
-  --print ("setLed",led,on)wait :: Int -> IO ()
-wait n = do
-  --print ("wait", n)- seq (loop n) (return ())
+wait n = busy_wait (n*300)
loop :: Int -> ()
loop n = if n == 0 then () else loop (n - 1)
--- a/STM32/Makefile
+++ b/STM32/Makefile
@@ -6,7 +6,7 @@
blinky.c: Blinky.hs $(BIN)/Addcombs $(BIN)/mhseval $(BIN)/mhs
MHSDIR=$(MHSDIR) $(BIN)/mhs -i$(LIB) Blinky -oBlinky.comb
$(BIN)/mhseval +RTS -rBlinky.comb -oBlinky-opt.comb
- $(BIN)/Addcombs Blinky-opt.comb Blinky.c
+ $(BIN)/Addcombs Blinky-opt.comb blinky.c
$(BIN)/Addcombs: $(TOOLS)/Addcombs.hs $(BIN)/mhs
MHSDIR=$(MHSDIR) $(BIN)/mhs -i$(TOOLS) Addcombs -o$(BIN)/Addcombs
--- a/src/runtime/config-stm32f4.h
+++ b/src/runtime/config-stm32f4.h
@@ -104,6 +104,15 @@
GPIOD->BSRR = 1 << (12 + led + (on ? 0 : 16));
}
+#pragma push
+#pragma O0
+void
+busy_wait(volatile uint32_t cnt) {+ while(cnt--)
+ _nop_();
+}
+#pragma pop
+
/* Instead of exit()ing, flash the green LED on exit code 0 else the red */
void
myexit(int n)
@@ -115,11 +124,9 @@
int led = n ? 2 : 0;
   for(;;) {set_led(led, 1);
- for(int i = 0; i < 100000; i++)
- ;
+ busy_wait(1000000);
set_led(led, 0);
- for(int i = 0; i < 100000; i++)
- ;
+ busy_wait(1000000);
}
}
#define EXIT myexit
@@ -134,3 +141,7 @@
return 32 - i; /* 31 leading zeros should return 1 */
}
#define FFS ffs
+
+#define FFI_EXTRA \
+  { "set_led",   (funptr_t)set_led,   FFI_IIV }, \+  { "busy_wait", (funptr_t)busy_wait, FFI_IV },--- a/src/runtime/eval.c
+++ b/src/runtime/eval.c
@@ -20,14 +20,6 @@
//#include "config.h"
-#if WANT_MD5 /* XXX */
-void
-set_led(int led, int on)
-{-  printf("set_led %d %d\n", led, on);-}
-#endif
-
#define VERSION "v7.0\n"
typedef intptr_t value_t; /* Make value the same size as pointers, since they are in a union */
@@ -496,9 +488,9 @@
* are among the combinators.
*/
 struct {- char *name;
- enum node_tag tag;
- enum node_tag flipped; /* What should (C op) reduce to? defaults to T_FREE */
+ const char *name;
+ const enum node_tag tag;
+ const enum node_tag flipped; /* What should (C op) reduce to? defaults to T_FREE */
NODEPTR node;
 } primops[] = {/* combinators */
@@ -612,7 +604,9 @@
   { "toDbl", T_TODBL },};
+#if GCRED
enum node_tag flip_ops[T_LAST_TAG];
+#endif
void
init_nodes(void)
@@ -681,9 +675,11 @@
}
}
#endif
+#if GCRED
   for (unsigned int j = 0; j < sizeof primops / sizeof primops[0]; j++) {flip_ops[primops[j].tag] = primops[j].flipped;
}
+#endif
/* The representation of the constructors of
* data Ordering = LT | EQ | GT
@@ -950,14 +946,15 @@
* PPP void* name(void*, void*)
* more can easily be added.
*/
-struct {+struct ffi_info {const char *ffi_name;
const funptr_t ffi_fun;
-  enum { FFI_V, FFI_I, FFI_IV, FFI_II, FFI_IIV, FFI_III, FFI_DD, FFI_DDD, FFI_PI,- FFI_i, FFI_Pi, FFI_iPi, FFI_PIIPI, FFI_PIV, FFI_IIP,
- FFI_PPI, FFI_PP, FFI_PPP, FFI_IPI, FFI_PV, FFI_IP, FFI_PPV, FFI_PPzV,
+  const enum { FFI_V, FFI_I, FFI_IV, FFI_II, FFI_IIV, FFI_III, FFI_DD, FFI_DDD, FFI_PI,+ FFI_i, FFI_Pi, FFI_iPi, FFI_PIIPI, FFI_PIV, FFI_IIP,
+ FFI_PPI, FFI_PP, FFI_PPP, FFI_IPI, FFI_PV, FFI_IP, FFI_PPV, FFI_PPzV,
} ffi_how;
-} ffi_table[] = {+};
+const struct ffi_info ffi_table[] = {#if WORD_SIZE == 64
   { "llabs",    (funptr_t)llabs,   FFI_II },#else /* WORD_SIZE */
@@ -1026,7 +1023,9 @@
   { "pokeByte", (funptr_t)pokeByte,FFI_PIV },   { "memcpy",   (funptr_t)memcpy,  FFI_PPzV },   { "memmove",  (funptr_t)memmove, FFI_PPzV },-  { "set_led",  (funptr_t)set_led, FFI_IIV },+#if defined(FFI_EXTRA)
+FFI_EXTRA
+#endif /* defined(FFI_EXTRA) */
};
/* Look up an FFI function by name */
@@ -2740,6 +2739,7 @@
}
}
+#if WANT_ARGS
heapoffs_t
memsize(const char *p)
 {@@ -2754,6 +2754,7 @@
}
return n;
}
+#endif
extern uint8_t *combexpr;
extern int combexprlen;
@@ -2761,15 +2762,17 @@
int
main(int argc, char **argv)
 {+ NODEPTR prog;
+#if WANT_ARGS
char *inname = 0;
char **av;
- NODEPTR prog;
int inrts;
+ int dump_ticks = 0;
+#endif
#if WANT_STDIO
char *outname = 0;
size_t file_size = 0;
#endif
- int dump_ticks = 0;
#if 0
/* MINGW doesn't do buffering right */
--
⑨