jasmin
jasmin copied to clipboard
Language for high-assurance and high-speed cryptography
Currently, during lowering, we transform some instructions (in particular additions) if the immediate they take as an argument is too large to be taken directly. We then introduce a move...
When lowering does not know what to do for a given instruction, it returns it without touching it. The following passes in the compiler then receive a sometimes nonsensical instruction....
Consider this example ``` export fn f (reg u128 x y) -> reg u128 { reg u128 z; z = (32u)#VPAND(x, y); return z; } ``` This example compiles fine....
Consider the following code, where function `f1_while_scale` adds all elements from global array `c`. The safety checker does not find any violation for this example. ``` u16[16] c = {...
The following program produces an obscure error message: ~~~ inline fn f(reg u8 a b) { a = #ADD_u8(a, b); } ~~~ > Fatal error: exception End_of_file
The following program returns zero: ~~~ export fn test() -> reg u8 { reg u8 a; a = 256; return a; } ~~~
The following code does not type check (typing.ml) because pretyping does not insert the good "type annotation" in the assignment. inline fn test(reg u64 buffer) -> inline int { inline...
With the following code ``` fn f (reg ptr u64[3] r) -> reg u64 { reg u64 res; stack u64[3] s; s = r; res = s[0]; return res; }...
When trying to define (in `glob_array3` branch) a non-inlined function taking as an argument a reg array, for instance: ``` fn sum (reg u64[2] a) -> reg u64 { reg...
On the following example ``` fn f (reg ptr u64[2] r) -> reg u32 { reg u32 res; stack u64[2] a; stack u32[10] b; a[0]=0; b[1:2] = a[u32 0:2]; res...