kit

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

19_cg_api_variadic_asm.toy (694B)


      1 fn sum_first(n: i64, ...): i64 {
      2   var ap: va_list;
      3   @va_start(ap);
      4 
      5   var cp: va_list;
      6   @va_copy(cp, ap);
      7   let first: i64 = @va_arg<i64>(cp);
      8   @va_end(cp);
      9 
     10   var i: i64 = 0;
     11   var s: i64 = 0;
     12   while i < n {
     13     s = s + @va_arg<i64>(ap);
     14     i = i + 1;
     15   }
     16   @va_end(ap);
     17   return s + first;
     18 }
     19 
     20 fn __user_main(): i64 {
     21   var v: i64 = @asm<isize>(
     22     "",
     23     outputs(inout("+r", 42 as isize)),
     24     inputs(),
     25     clobbers(),
     26     flags(.volatile)
     27   );
     28   var s: i64 = 23;
     29   @asm<void>("", outputs(), inputs(in("r", 19), in("r", 23)));
     30   @asm<void>("", outputs(), inputs());
     31   s = sum_first(3, 5 as i64, 6 as i64, 7 as i64);
     32   return s + v;
     33 }
     34 
     35 fn main(): i32 { return __user_main() as i32; }