kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

demo.toy (1457B)


      1 let seed: i64 = 5;
      2 var counter: i64 = 3;
      3 var counter_ptr: *i64 = &counter;
      4 
      5 fn id(x: i64): i64 {
      6   return x;
      7 }
      8 
      9 fn id_tail(x: i64): i64 {
     10   return tail id(x);
     11 }
     12 
     13 fn fib(n: i64): i64 {
     14   if n < 2 {
     15     return n;
     16   }
     17   return fib(n - 1) + fib(n - 2);
     18 }
     19 
     20 fn sum_to(n: i64): i64 {
     21   var i: i64 = 0;
     22   var sum: i64 = 0;
     23   while i < n {
     24     i = i + 1;
     25     if i == 3 {
     26       continue;
     27     }
     28     if i > 6 {
     29       break;
     30     }
     31     sum = sum + i;
     32   }
     33   return sum;
     34 }
     35 
     36 fn memory_demo(): i64 {
     37   var a: i64 = 0;
     38   var b: i64 = 0;
     39   let p: *i64 = &a;
     40   let q: *i64 = &b;
     41 
     42   p[0] = 42;
     43   @memset(q, 0, 8, 8);
     44   @memcpy(q, p, 8, 8);
     45   return q[0];
     46 }
     47 
     48 fn atomic_demo(): i64 {
     49   @atomic_store<i64>(counter_ptr, 10, .seq_cst);
     50   let before: i64 = @atomic_rmw<i64>(.add, counter_ptr, 5, .seq_cst);
     51   let after: i64 = @atomic_load<i64>(counter_ptr, .seq_cst);
     52   let cas = @atomic_cmpxchg<i64>(counter_ptr, after, 21, .seq_cst, .relaxed,
     53                                  .strong);
     54   @atomic_fence(.seq_cst);
     55   return before + after + (cas.ok as i64);
     56 }
     57 
     58 fn intrin_demo(x: i64): i64 {
     59   return @popcount(x) + @ctz(8) + @clz(1) + @expect(1, 1) + @bswap(1);
     60 }
     61 
     62 fn api_demo(): i64 {
     63   @asm<void>("", outputs(), inputs());
     64   return 1 + 42 + 42;
     65 }
     66 
     67 fn main(): i64 {
     68   let local: i64 = seed + counter_ptr.*;
     69   counter = counter + 2;
     70   return id_tail(local)
     71        + fib(6)
     72        + sum_to(8)
     73        + memory_demo()
     74        + atomic_demo()
     75        + intrin_demo(7)
     76        + api_demo();
     77 }